Newbie questions about Pliant

Newbie questions about Pliant

Checkbox

Message posted by maybe Lena on 2005/09/04 17:02:23
How to make checkbox in Pliant
Message posted by hubert.tonneau on 2005/09/04 17:04:23
Write your own style.
The default style uses only 'select'.
Basically, a check box is the same as a select with 'yes' and 'no'.
Message posted by maybe pom on 2005/09/05 09:51:58
I have written some checkbox meta some time ago.
I am not sure it still works.
The following code should be in a .style

style_setup
  # ... other declarations of your style
  tag_html mycb
    write label
    write "<input type=[dq]hidden[dq] name=[dq]"+name+"[dq] value=[dq]"+(shunt value "true" "false")+"[dq]>"
    write "<input type=[dq]checkbox[dq] name=[dq]dummy_"+name+"[dq] value=[dq]on[dq]"+(shunt value " checked" "")+"[dq]>[lf]"

method p html_cb ident data label flags
  arg_rw HtmlPage p ; arg Str ident ; arg Bool data ; arg Str label ; arg uInt flags
  p mycb label label name ident value data
  if (flags .and. 1)<>0
    p eol

if database

  method p data_cb d label flags
    arg_rw HtmlPage p ; arg Data:Bool d ; arg Str label ; arg uInt flags
    if (p attribute input is_read_only)
      p pdata label label path pathof:d value (string d "raw")
    else
      var Str dpath := replace (replace pathof:d "&#" "(") ";" ")"
      p mycb label label name "/"+(p:request generate_signature pathof:d)+dpath value d database
    if (flags .and. 1)<>0
      p eol

meta '. checkbox' e
  if e:size<3 or not (e:0 cast HtmlPage) or not (e:1 cast Str)
    return
  e:2:compile ?
  var CBool data := database and e:2:is_data
  if not data
    var Str name := shunt e:2:size=0 e:2:ident e:2:(e:2:size-1):ident
    if name=""
      return
    if not (e:2 cast Bool)
      return
    notify_editable_variable e:2    
  var uInt flags := 1
  var Int i := 3
  while i<e:size
    if e:i:ident="noeol"
      flags := flags .and. .not. 1
      i += 1
    else
      return
  e suckup e:0 ; e suckup e:1 ; e suckup e:2
  if database and data
    if not (e:2 cast Data:Bool)
      return
    e add (instruction (the_function '. data_cb' HtmlPage Data:Bool Str uInt) e:0:result e:2:result e:1:result (argument constant uInt flags))
  else
    e add (instruction (the_function '. html_cb' HtmlPage Str Bool Str uInt) e:0:result (argument constant Str name) e:2:result e:1:result (argument constant uInt flags))
  e set_void_result


Message posted by maybe pom on 2005/09/05 11:37:44
There are many missing things in the previous message.
I will try to fix it quickly.
Message posted by hubert.tonneau on 2005/09/05 11:39:21
Can you package it as a single /pliant/protocol/http/style/checkbox.style module ?
Message posted by maybe Boris Reitman on 2006/09/26 19:47:18
What's the status on the checkbox code ?
Message posted by maybe Boris Reitman on 2006/10/15 08:59:26
The following patch to default.style works for non-data checkbox, but doesn't for data checkbox.
Where is the place in the code where CGI arguments are processed and their values taken from 
response content are assigned to data/variables in pliant memory space ?

http://archimedes.hypervolume.com/~boris/pliant/checkbox.diff.txt
Message posted by hubert.tonneau on 2006/10/15 16:34:40
Please implement you style extension as a new module with your copyright:
/pliant/protocol/http/style/checkbox.pli

> Where is the place in the code where CGI arguments are processed and their values taken from 
> response content are assigned to data/variables in pliant memory space ?

See 'escape_html_page' method in /pliant/protocol/http/server.pli
Message posted by maybe Boris Reitman on 2006/10/16 02:04:13
Hi,  I was able to move the meta into a separate checkbox.style file, but
for some reason moving the tag_prototype/tag_html definition doesn't work.
It only works if I keep it in default.style. 
The checkbox module:

  http://archimedes.hypervolume.com/~boris/pliant/checkbox.style

If I try uncomment the 'doc' section in checkbox.style and remove the 
corresponding blocks from default.style, I get compile error 
that "p checkbox ..." line in data_checkbox method can't be compiled.

The diff on default.style is:

--- /home/boris/tmp/default.style-backup        2006-10-08 21:58:06.000000000 -0400
+++ default.style       2006-10-15 15:26:44.000000000 -0400
@@ -51,6 +51,13 @@
   tag_prototype page_footer
     void
 
+  tag_prototype checkbox
+    attr label Str encode
+    attr name Str
+    attr value Str encode
+    attr database
+    attr is_read_only CBool false
+
   tag_prototype link label href
     attr label Str encode
     attr href Str
@@ -430,6 +437,16 @@
   tag_html page_footer
     void
 
+  tag_html checkbox
+    write label
+    write "<input type=[dq]hidden[dq] name=[dq]"+name+"[dq] value=[dq]"+(shunt value="true" "true" "false")+"[dq]>"
+    write "<input type=[dq]checkbox[dq] name=[dq]dummy_"+name+"[dq] onClick=[dq]this.form.elements[lb]'"+name+"'[rb].value=this.checked ? 'true':'false'"
+    if has:database
+      write "; change(this.form.elements[lb]'"+name+"'[rb])"
+    write "[dq] value=[dq]on[dq]"+(shunt value="true" " checked" "")
+    write_attributes
+    write ">[lf]"
+       
   tag_html link
     write "<a href=[dq]"+(full_url href has:section section has:options (attribute link options) has:relative has:no_extension)+"[dq]" # using 'attribute link options' instead of simply 'options' is required in order not to get page:options
     if help<>""
Message posted by hubert.tonneau on 2006/10/16 02:13:46
You just have to include your style module in each .page that will use the
new 'checkbox' widget.
Message posted by maybe Boris Reitman on 2006/10/17 02:15:14
I am having trouble preparing the style module itself (checkbox.style).
If I include the tag_prototype and tag_html sections, it doesn't compile.
Message posted by hubert.tonneau on 2006/10/17 02:22:49
You probably need more modules to be included in your .style

If you are completely locked, make your code available, and I'll see if
I can help.
Message posted by maybe Boris Reitman on 2006/10/17 02:52:11
Yes, I am stuck with it. If you uncomment the 'doc' section in checkbox.style,
and leave everything as is (no changes to default.style that you have),
you will see the error.
Message posted by hubert.tonneau on 2006/10/17 02:55:37
checkbox.style module compiles just fine for me.
Message posted by maybe Boris Reitman on 2006/10/21 21:49:12
Yes, it is very strange, it has started working for me.
Its not completely working yet, because I need to solve a javascript problem.
I will post, once I have it down.