Setting tag plewww-5.2-4
[plewww.git] / plekit / php / toggle.php
index 897a8b8..b481195 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 require_once 'prototype.php';
+require_once 'jstorage.php';
 require_once 'nifty.php';
 
 drupal_set_html_head('
@@ -20,10 +21,9 @@ drupal_set_html_head('
 // (*) options:        a hash that can define
 //     - trigger-tagname : to be used instead of <span> for wrapping the trigger
 //     - bubble : might not work if trigger-tagname is redefined
-//     - init-hidden : start hidden rather than visible
-//     - info_div : the id of a 'div' element that contains a help text
-//     - info_text : the text for help on the tab
-//     - info_visible : whether info needs to be visible at startup
+//     - visible : if set to false, start hidden rather than visible
+//     - info-text : the text for help on the tab
+//     - info-visible : whether info needs to be visible at startup
 // 
 // methods are as follows
 // (*) trigger_html ():        return the html code for the trigger
@@ -41,9 +41,13 @@ class PlekitToggle {
     $this->id = $id;
     $this->trigger=$trigger;
     if ( ! $options ) $options = array();
+    // 'visible' may be set or not; if set to NULL it's considered as undefined
+    // so using NULL as the default means 'select from local storage i.e. last status'
+    if (array_key_exists ('visible',$options) && $options['visible']==NULL) 
+      unset ($options['visible']);
+    // start-hidden is internal and is always set
     if (array_key_exists ('visible',$options)) {
       $options['start-hidden'] = ! $options['visible'];
-      unset ($options['visible']);
     }
 
     if (!isset ($options['start-hidden'])) $options['start-hidden']=false;
@@ -67,9 +71,24 @@ class PlekitToggle {
     $html = "";
     $html .= $this->area_end_html();
     $html .= $this->container_end();
+    // if 'visible' is not set, set or or off from local storage
+    if ( ! array_key_exists('visible',$this->options) )
+      $html .= $this->visible_from_store_html();
     return $html;
   }
 
+  function visible_from_store_html() {
+    $id=$this->id;
+    $html = "";
+    $html .= "<script type='text/javascript'>";
+    // javascript code can't take -
+    //    $idj=str_replace('-','_',$id);
+    //    $html .= "function init_$idj () { pletoggle_from_store('$id');}";
+    //    $html .= "Event.observe(window,'load',init_$idj);";
+    $html .= "pletoggle_from_store('$id');";
+    $html .= "</script>";
+    return $html;
+  }
 
   // create two images that get shown/hidden - could not find a better way to do it
   function image_html () {
@@ -97,39 +116,40 @@ class PlekitToggle {
     $html .= " id='$trigger_id'";
     $html .= " class='plc-toggle-trigger'";
     if ($bubble) $html .= " title='$bubble'";
-    $html .= " onclick=\"plekit_toggle('$this->id')\"";
+    $html .= " onclick=\"pletoggle_toggle('$this->id')\"";
     $html .= ">";
     $html .= $this->image_html();
     $html .= $this->trigger;
     $html .= "</$tagname>";
-    if (array_key_exists ('info_text',$this->options)) {
+    if (array_key_exists ('info-text',$this->options)) {
       $id=$this->id;
-      $html .= "<span class='toggle-info-button' onClick='plekit_toggle_info(\"$id\");'><img height=20 src='/planetlab/icons/info.png' alt='close info'/></span>";
+      $html .= "<span class='toggle-info-button' onClick='pletoggle_toggle_info(\"$id\");'><img height=20 src='/planetlab/icons/info.png' alt='close info'/></span>";
     }
     return $html;
   }
 
   function info()              { print $this->info_html();}
   function info_html () {
-    if (! array_key_exists ('info_text',$this->options)) return "";
+    if (! array_key_exists ('info-text',$this->options)) return "";
 
     // compute if info should be visible at startup
     // xxx in fact the default should be fetched in the browser storage xxx
     $info_visible=TRUE;
-    // if info_visible is set, use this value
-    if (array_key_exists ('info_visible',$this->options)) 
-      $info_visible=$this->options['info_visible'];
+    // if info-visible is set, use this value
+    if (array_key_exists ('info-visible',$this->options)) 
+      $info_visible=$this->options['info-visible'];
 
     $id=$this->id;
     $div_id=$this->id_name('info');
     $html="";
     $html .= "<div class='toggle-info'";
     $html .= " id='$div_id'";
-    if ($info_visible) $html .= " style='display:none'";
+    if (!$info_visible) $html .= " style='display:none'";
+    $html .= ">";
     // tmp
     $html .= "<table class='center'><tr><td class='top'>";
-    $html .= $this->options['info_text'];
-    $html .= "</td><td class='top'><span onClick='plekit_toggle_info(\"$id\");'><img height=20 class='reset' src='/planetlab/icons/close.png' alt='toggle info' /></span>";
+    $html .= $this->options['info-text'];
+    $html .= "</td><td class='top'><span onClick='pletoggle_toggle_info(\"$id\");'><img height=20 class='reset' src='/planetlab/icons/close.png' alt='toggle info' /></span>";
     $html .= "</td></tr></table></div>";
     return $html;
   }