');
// This is for creating an area that users can hide and show
// It is logically made of 3 parts:
// (*) area is what gets hidden and shown
// (*) trigger is the area that can be clicked for toggling
// (*) image contains a visual indication of the current status
//
// constructor needs
// (*) id: an 'id', used for naming the three parts
// (*) trigger: the html text for the trigger
// (*) options: a hash that can define
// - trigger-tagname : to be used instead of for wrapping the trigger
// - bubble : might not work if trigger-tagname is redefined
// - 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
// (*) image_html (): returns the html code for the image
// (*) area_start (): because we have too many places where php 'prints' code: instead
// (*) area_end(): of returning it, we do not expect the code for the area to be passed
// so these methods can be used to delimit the area in question
class PlekitToggle {
// mandatory
var $id;
var $nifty;
function PlekitToggle ($id,$trigger,$options=NULL) {
$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'];
}
if (!isset ($options['start-hidden'])) $options['start-hidden']=false;
$this->options = $options;
}
// the simple, usual way to use it :
// a container that contains the switch and the area in sequence
function start () { print $this->start_html(); }
function start_html () {
$html = "";
$html .= $this->container_start();
$html .= $this->trigger_html();
$html .= $this->area_start_html();
$html .= $this->info_html();
return $html;
}
function end () { print $this->end_html(); }
function end_html () {
$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 .= "";
return $html;
}
// create two images that get shown/hidden - could not find a better way to do it
function image_html () {
$html="";
if ( ! $this->options['start-hidden']) { $x1=""; $x2=" style='display:none'"; }
else { $x2=""; $x1=" style='display:none'"; }
$image_id=$this->id_name('image-visible');
$html .= "id_name('image-hidden');
$html .= "trigger_html(); }
function trigger_html () {
$trigger_id=$this->id_name('trigger');
if (array_key_exists ('trigger-tagname',$this->options)) $tagname=$this->options['trigger-tagname'];
if (empty($tagname)) $tagname="span";
$bubble="";
if (array_key_exists ('bubble',$this->options)) $bubble=$this->options['bubble'];
$html="<$tagname";
$html .= " id='$trigger_id'";
$html .= " class='plc-toggle-trigger'";
if ($bubble) $html .= " title='$bubble'";
$html .= " onclick=\"pletoggle_toggle('$this->id')\"";
$html .= ">";
$html .= $this->image_html();
$html .= $this->trigger;
$html .= "$tagname>";
if (array_key_exists ('info-text',$this->options)) {
$id=$this->id;
$html .= "";
}
return $html;
}
function info() { print $this->info_html();}
function info_html () {
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'];
$id=$this->id;
$div_id=$this->id_name('info');
$html="";
$html .= "";
$html .= "