admin db search rewritten + removed some obsolete action files
[plewww.git] / plekit / php / toggle.php
1 <?php
2
3   // $Id$
4
5 require_once 'prototype.php';
6 require_once 'nifty.php';
7
8 drupal_set_html_head('
9 <script type="text/javascript" src="/plekit/toggle/toggle.js"></script>
10 <link href="/plekit/toggle/toggle.css" rel="stylesheet" type="text/css" />
11 ');
12
13 // This is for creating an area that users can hide and show
14 // It is logically made of 3 parts:
15 // (*) area is what gets hidden and shown
16 // (*) trigger is the area that can be clicked for toggling
17 // (*) image contains a visual indication of the current status
18 // 
19 // constructor needs 
20 // (*) id:      an 'id', used for naming the three parts
21 // (*) trigger: the html text for the trigger
22 // (*) options: a hash that can define
23 //      - trigger-tagname : to be used instead of <span> for wrapping the trigger
24 //      - trigger-bubble : might not work if trigger-tagname is redefined
25 //      - init-hidden : start hidden rather than visible
26 // 
27 // methods are as follows
28 // (*) trigger_html (): return the html code for the trigger
29 // (*) image_html ():   returns the html code for the image
30 // (*) area_start ():   because we have too many places where php 'prints' code instead 
31 // (*) area_end():        of returning it, we do not expect the code for the area to be passed
32 //                        so these methods can be used to delimit the area in question
33
34 class PlekitToggle {
35   // mandatory
36   var $id;
37
38   function PlekitToggle ($id,$trigger,$options=NULL) {
39     $this->id = $id;
40     $this->trigger=$trigger;
41     if ( ! $options ) $options = array();
42     if (array_key_exists ('start-visible',$options)) {
43       $options['start-hidden'] = ! $options['start-visible'];
44       unset ($options['start-visible']);
45     }
46     if (!isset ($options['start-hidden'])) $options['start-hidden']=false;
47     $this->options = $options;
48   }
49
50   // the simple, usual way to use it :
51   // a container that contains the switch and the area in sequence
52   function start ()             { print $this->start_html(); }
53   function start_html () {
54     $html = "";
55     $html .= $this->container_start();
56     $html .= $this->trigger_html();
57     $html .= $this->area_start_html();
58     return $html;
59   }
60
61   function end ()               { print $this->end_html(); }
62   function end_html () {
63     $html = "";
64     $html .= $this->area_end_html();
65     $html .= $this->container_end();
66     return $html;
67   }
68
69
70   // create two images that get shown/hidden - could not find a better way to do it
71   function image_html () {
72     $html="";
73     if ( ! $this->options['start-hidden'])      { $x1=""; $x2=" style='display:none'"; }
74     else                                        { $x2=""; $x1=" style='display:none'"; }
75     $image_id=$this->id_name('image-visible');
76     $html .= "<img id='$image_id' class='plc-toggle-visible' src='/plekit/icons/toggle-visible.png'$x1";
77     $html .= " alt='Hide this section' />";
78     $image_id=$this->id_name('image-hidden');
79     $html .= "<img id='$image_id' class='plc-toggle-hidden' src='/plekit/icons/toggle-hidden.png'$x2";
80     $html .= " alt='Show this section' />";
81     return $html;
82   }
83
84   function trigger ()           { print $this->trigger_html(); }
85   function trigger_html () {
86     $trigger_id=$this->id_name('trigger');
87     if (array_key_exists ('trigger-tagname',$this->options)) $tagname=$this->options['trigger-tagname'];
88     if (empty($tagname)) $tagname="span";
89     $bubble="";
90     if (array_key_exists ('trigger-bubble',$this->options)) $bubble=$this->options['trigger-bubble'];
91     
92     $html="<$tagname";
93     $html .= " id='$trigger_id'";
94     $html .= " class='plc-toggle-trigger'";
95     if ($bubble) $html .= " title='$bubble'";
96     $html .= " onclick=\"plc_toggle('$this->id')\"";
97     $html .= ">";
98     $html .= $this->image_html();
99     $html .= $this->trigger;
100     $html .= "</$tagname>";
101     return $html;
102   }
103
104   function area_start () { print $this->area_start_html(); }
105   function area_start_html () {
106     $area_id=$this->id_name('area');
107     $html="";
108     $html .= "<div";
109     $html .= " class='plc-toggle-area'";
110     $html .= " id='$area_id'";
111     if ($this->options['start-hidden']) $html .= " style='display:none'";
112     $html .= ">";
113     return $html;
114   }
115
116   function area_end () { print $this->area_end_html(); }
117   function area_end_html () {
118     return "</div>";
119   }
120
121   /* if desired, you can embed the whole (trigger+area) in another div for visual effects */
122   function container_start ()           { print $this->container_start_html(); }
123   function container_start_html ()      { 
124     $id=$this->id_name('container');
125
126     $html="<div class='plc-toggle-container nifty-medium'";
127     $html .= " id='$id'";
128     $html .= ">";
129     return $html;
130   }
131
132   function container_end ()             { print $this->container_end_html(); }
133   function container_end_html ()        { return "</div>"; }
134
135   // build id names
136   function id_name ($zonename) { return "toggle-$zonename-$this->id"; }
137
138 }
139
140 ?>