Re: Dynamic generation of progress bars

2014-03-03 Thread me
Thank you Alex.  My work with CL lately has clearly been rubbing off on
me.  I'll combat that with more picolisp thanks to your tip.  What a
wonderful language to work in.

-David


On Mon, Mar 3, 2014 at 2:45 AM, Alexander Burger a...@software-lab.dewrote:

 On Sun, Mar 02, 2014 at 05:38:20PM -0500, me wrote:
  Please help point me in the right direction once again?  What I'm
  attempting to achieve is something like:
 
  (div progress
(div '(progress-bar progress-bar-success
 (role . progressbar)
 (aria-valuenow . -79)
 (aria-valuemin . -100)
 (aria-valuemax . 100)
 (style . width: 79%) )
   (span sr-only 79% Nominal) ) )
 
 
  What I have is:
 
  (de make-progress-bar (bar-type width)
 (div progress
(div '(`(,pack progress-bar progess-bar- ,bar-type)
 (role . progressbar)
 (aria-valuenow . `(,pack ,width))
 (aria-valuemin . -100)
 (aria-valuemax . 100)
 (style . `(,pack width:  ,width %)) )
   (span sr-only `(,pack ,width % Nominal)) ) ) )
 
 
  What is the idiomatic way to manipulate text such that I can dynamically
  generate different types of progress bars?  The idea being that I could
 use
  different color coded static progress bars as a simple form of charting
  data.

 The problem with the solution above is that the backquote has a meaning
 in PicoLisp different from that in CL. It is a read macro, not a
 pattern-filler at runtime. Same goes for the comma.

 Passing a list dynamically at runtimes means that it must be built at
 runtime. This should work:

(de make-progress-bar (Bar-type Width)
   (div progress
  (div
 (list
(pack progress-bar progress-bar- Bar-type)
'(role . progressbar)
(cons 'aria-valuenow Width)
'(aria-valuemin . -100)
'(aria-valuemax . 100)
(cons 'style (pack width:  Width %)) )
 (span sr-only Width % Nominal) ) ) )

(make-progress-bar success 79)

 You might also take a look at 'fill' (which is a bit similar to the CL
 backquote function) to build the list, but that's a little more
 involved in this case:

(de make-progress-bar (Bar-type @Width)
   (let
  (@B (pack progress-bar progress-bar- Bar-type)
 @W (pack width:  @Width %) )
  (div progress
 (div
(fill
   '(@B
  (role . progressbar)
  (aria-valuenow . @Width)
  (aria-valuemin . -100)
  (aria-valuemax . 100)
  (style . @W) ) )
(span sr-only @Width % Nominal) ) ) ) )

(make-progress-bar success 79)

 The effect is the same in both cases.

 ♪♫ Alex
 --
 UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe



Re: Dynamic generation of progress bars

2014-03-02 Thread Alexander Burger
On Sun, Mar 02, 2014 at 05:38:20PM -0500, me wrote:
 Please help point me in the right direction once again?  What I'm
 attempting to achieve is something like:
 
 (div progress
   (div '(progress-bar progress-bar-success
(role . progressbar)
(aria-valuenow . -79)
(aria-valuemin . -100)
(aria-valuemax . 100)
(style . width: 79%) )
  (span sr-only 79% Nominal) ) )
 
 
 What I have is:
 
 (de make-progress-bar (bar-type width)
(div progress
   (div '(`(,pack progress-bar progess-bar- ,bar-type)
(role . progressbar)
(aria-valuenow . `(,pack ,width))
(aria-valuemin . -100)
(aria-valuemax . 100)
(style . `(,pack width:  ,width %)) )
  (span sr-only `(,pack ,width % Nominal)) ) ) )
 
 
 What is the idiomatic way to manipulate text such that I can dynamically
 generate different types of progress bars?  The idea being that I could use
 different color coded static progress bars as a simple form of charting
 data.

The problem with the solution above is that the backquote has a meaning
in PicoLisp different from that in CL. It is a read macro, not a
pattern-filler at runtime. Same goes for the comma.

Passing a list dynamically at runtimes means that it must be built at
runtime. This should work:

   (de make-progress-bar (Bar-type Width)
  (div progress
 (div
(list
   (pack progress-bar progress-bar- Bar-type)
   '(role . progressbar)
   (cons 'aria-valuenow Width)
   '(aria-valuemin . -100)
   '(aria-valuemax . 100)
   (cons 'style (pack width:  Width %)) )
(span sr-only Width % Nominal) ) ) )

   (make-progress-bar success 79)

You might also take a look at 'fill' (which is a bit similar to the CL
backquote function) to build the list, but that's a little more
involved in this case:

   (de make-progress-bar (Bar-type @Width)
  (let
 (@B (pack progress-bar progress-bar- Bar-type)
@W (pack width:  @Width %) )
 (div progress
(div
   (fill
  '(@B
 (role . progressbar)
 (aria-valuenow . @Width)
 (aria-valuemin . -100)
 (aria-valuemax . 100)
 (style . @W) ) )
   (span sr-only @Width % Nominal) ) ) ) )

   (make-progress-bar success 79)

The effect is the same in both cases.

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe