1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4/**
5 * Yahoo YUI Library Utility functions
6 *
7 * @author  Alex Killing <alex.killing@gmx.de>
8 * @version $Id$
9 */
10class ilYuiUtil
11{
12    const YUI_BASE = "./libs/bower/bower_components/yui2/build";
13
14
15    /**
16     * Init YUI Connection module
17     */
18    public static function initConnection(ilTemplate $a_main_tpl = null)
19    {
20        global $DIC;
21
22        if ($a_main_tpl == null) {
23            $tpl = $DIC["tpl"];
24        } else {
25            $tpl = $a_main_tpl;
26        }
27        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
28        $tpl->addJavaScript(self::YUI_BASE . "/connection/connection-min.js");
29    }
30
31
32    /**
33     * Init YUI Event
34     */
35    public static function initEvent()
36    {
37        global $DIC;
38
39        $tpl = $DIC["tpl"];
40
41        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
42    }
43
44
45    /**
46     * Init YUI Dom
47     */
48    public static function initDom()
49    {
50        global $DIC;
51
52        $tpl = $DIC["tpl"];
53
54        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
55    }
56
57
58    /**
59     * Init YUI Animation
60     */
61    public static function initAnimation()
62    {
63        global $DIC;
64
65        $tpl = $DIC["tpl"];
66
67        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
68        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
69    }
70
71
72    /**
73     * Init YUI Drag and Drop
74     */
75    public static function initDragDrop()
76    {
77        global $DIC;
78
79        $tpl = $DIC["tpl"];
80
81        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
82        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
83        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
84    }
85
86
87    /**
88     * Init YUI DomEvent
89     */
90    public static function initDomEvent()
91    {
92        global $DIC;
93
94        $tpl = $DIC["tpl"];
95
96        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
97    }
98
99
100    /**
101     * Init yui panel
102     *
103     * @access public
104     *
105     * @param void
106     *
107     * @return void
108     */
109    public static function initPanel($a_resize = false, ilTemplate $a_main_tpl = null)
110    {
111        global $DIC;
112
113        if ($a_main_tpl != null) {
114            $tpl = $a_main_tpl;
115        } else {
116            $tpl = $DIC["tpl"];
117        }
118
119        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
120        $tpl->addJavaScript(self::YUI_BASE . "/container/container-min.js");
121        self::addContainerCss($tpl);
122        $tpl->addCss("./Services/Calendar/css/panel_min.css");
123
124        if ($a_resize) {
125            $tpl->addCss(self::YUI_BASE . "/resize/assets/skins/sam/resize.css");
126            $tpl->addJavaScript(self::YUI_BASE . "/utilities/utilities-min.js");
127            $tpl->addJavaScript(self::YUI_BASE . "/resize/resize-min.js");
128        }
129    }
130
131
132    /**
133     * Init YUI Connection module
134     */
135    public static function initConnectionWithAnimation()
136    {
137        global $DIC;
138
139        $tpl = $DIC["tpl"];
140
141        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
142        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
143        $tpl->addJavaScript(self::YUI_BASE . "/connection/connection-min.js");
144    }
145
146
147    /**
148     * Init YUI Menu module
149     */
150    public static function initMenu()
151    {
152        global $DIC;
153
154        $tpl = $DIC["tpl"];
155
156        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
157        $tpl->addJavaScript(self::YUI_BASE . "/container/container_core.js");
158        $tpl->addJavaScript(self::YUI_BASE . "/menu/menu-min.js");
159        $tpl->addCss(self::YUI_BASE . "/menu/assets/menu.css");
160    }
161
162
163    /**
164     * Init YUI Overlay module
165     */
166    public static function initOverlay(ilTemplate $a_main_tpl = null)
167    {
168        global $DIC;
169
170        if ($a_main_tpl == null) {
171            $tpl = $DIC["tpl"];
172        } else {
173            $tpl = $a_main_tpl;
174        }
175
176        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
177        $tpl->addJavaScript(self::YUI_BASE . "/container/container_core-min.js");
178        self::addContainerCss($tpl);
179    }
180
181
182    /**
183     * Init YUI Simple Dialog
184     */
185    public static function initSimpleDialog()
186    {
187        global $DIC;
188
189        $tpl = $DIC["tpl"];
190
191        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
192        $tpl->addJavaScript(self::YUI_BASE . "/container/container-min.js");
193        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
194        self::addContainerCss();
195        $tpl->addCss("./Services/YUI/templates/default/tpl.simpledialog.css");
196    }
197
198
199    /**
200     * Init assessment wizard
201     */
202    public static function initAssessmentWizard()
203    {
204        global $DIC;
205
206        $tpl = $DIC["tpl"];
207
208        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
209        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
210        $tpl->addJavaScript(self::YUI_BASE . "/button/button-min.js");
211        $tpl->addJavaScript(self::YUI_BASE . "/container/container-min.js");
212        $tpl->addCss(self::YUI_BASE . "/button/assets/skins/sam/button.css");
213        self::addContainerCss();
214    }
215
216
217    /**
218     * init drag & drop list
219     */
220    public static function initDragDropList()
221    {
222        global $DIC;
223
224        $tpl = $DIC["tpl"];
225
226        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
227        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
228        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
229        $tpl->addCss("./Services/YUI/templates/default/DragDropList.css");
230    }
231
232
233    /**
234     * init drag & drop and animation
235     */
236    public static function initDragDropAnimation()
237    {
238        global $DIC;
239
240        $tpl = $DIC["tpl"];
241
242        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
243        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
244        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
245    }
246
247
248    /**
249     * init element selection
250     */
251    public static function initElementSelection()
252    {
253        global $DIC;
254
255        $tpl = $DIC["tpl"];
256
257        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
258        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
259    }
260
261
262    /**
263     * get a drag & drop list
264     */
265    public static function getDragDropList($id_source, $title_source, $source, $id_dest, $title_dest, $dest)
266    {
267        self::initDragDropList();
268
269        $template = new ilTemplate("tpl.dragdroplist.html", true, true, "Services/YUI");
270        foreach ($source as $id => $name) {
271            $template->setCurrentBlock("source_element");
272            $template->setVariable("ELEMENT_ID", $id);
273            $template->setVariable("ELEMENT_NAME", $name);
274            $template->parseCurrentBlock();
275            $template->setCurrentBlock("element");
276            $template->setVariable("ELEMENT_ID", $id);
277            $template->parseCurrentBlock();
278        }
279        foreach ($dest as $id => $name) {
280            $template->setCurrentBlock("dest_element");
281            $template->setVariable("ELEMENT_ID", $id);
282            $template->setVariable("ELEMENT_NAME", $name);
283            $template->parseCurrentBlock();
284            $template->setCurrentBlock("element");
285            $template->setVariable("ELEMENT_ID", $id);
286            $template->parseCurrentBlock();
287        }
288        $template->setVariable("TITLE_LIST_1", $title_source);
289        $template->setVariable("TITLE_LIST_2", $title_dest);
290        $template->setVariable("LIST_1", $id_source);
291        $template->setVariable("LIST_2", $id_dest);
292
293        return $template->get();
294    }
295
296
297    public static function addYesNoDialog($dialogname, $headertext, $message, $yesaction, $noaction, $defaultyes, $icon = "help")
298    {
299        global $DIC;
300
301        $tpl = $DIC["tpl"];
302        $lng = $DIC->language();
303
304        self::initSimpleDialog();
305
306        $template = new ilTemplate("tpl.yes_no_dialog.js", true, true, "Services/YUI");
307        $template->setVariable("DIALOGNAME", $dialogname);
308        $template->setVariable("YES_ACTION", $yesaction);
309        $template->setVariable("NO_ACTION", $noaction);
310        $template->setVariable("DIALOG_HEADER", $headertext);
311        $template->setVariable("DIALOG_MESSAGE", $message);
312        $template->setVariable("TEXT_YES", $lng->txt("yes"));
313        $template->setVariable("TEXT_NO", $lng->txt("no"));
314        switch ($icon) {
315            case "warn":
316                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_WARN");
317                break;
318            case "tip":
319                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_TIP");
320                break;
321            case "info":
322                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_INFO");
323                break;
324            case "block":
325                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_BLOCK");
326                break;
327            case "alarm":
328                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_ALARM");
329                break;
330            case "help":
331            default:
332                $template->setVariable("ICON", "YAHOO.widget.SimpleDialog.ICON_HELP");
333                break;
334        }
335        if ($defaultyes) {
336            $template->touchBlock("isDefaultYes");
337        } else {
338            $template->touchBlock("isDefaultNo");
339        }
340        $tpl->setCurrentBlock("HeadContent");
341        $tpl->setVariable("CONTENT_BLOCK", $template->get());
342        $tpl->parseCurrentBlock();
343    }
344
345
346    /**
347     * init calendar
348     *
349     * @access public
350     * @return
351     * @static
352     */
353    public static function initCalendar()
354    {
355        global $DIC;
356
357        $tpl = $DIC["tpl"];
358
359        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
360        $tpl->addJavaScript(self::YUI_BASE . "/calendar/calendar-min.js");
361
362        $tpl->addCss(self::YUI_BASE . "/calendar/assets/skins/sam/calendar.css");
363        $tpl->addCss("./Services/Calendar/css/calendar.css");
364    }
365
366
367    /**
368     * init button control
369     * In the moment used for calendar color picker button
370     *
371     * @access public
372     * @return void
373     * @static
374     */
375    public static function initButtonControl()
376    {
377        global $DIC;
378
379        $tpl = $DIC["tpl"];
380
381        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
382        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
383
384        $tpl->addJavaScript(self::YUI_BASE . "/container/container_core-min.js");
385        $tpl->addJavaScript(self::YUI_BASE . "/menu/menu-min.js");
386
387        $tpl->addJavaScript(self::YUI_BASE . "/button/button-min.js");
388
389        $tpl->addCss(self::YUI_BASE . "/button/assets/skins/sam/button.css");
390        $tpl->addCss(self::YUI_BASE . "/menu/assets/skins/sam/menu.css");
391    }
392
393
394    /**
395     * init color picker button
396     *
397     * @access public
398     * @return void
399     * @static
400     */
401    public static function initColorPicker()
402    {
403        global $DIC;
404
405        $tpl = $DIC["tpl"];
406
407        self::initButtonControl();
408
409        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
410        $tpl->addJavaScript(self::YUI_BASE . "/slider/slider-min.js");
411        $tpl->addJavaScript(self::YUI_BASE . "/colorpicker/colorpicker-min.js");
412
413        $tpl->addCss('./Services/Form/css/color_picker.css');
414        $tpl->addCss(self::YUI_BASE . "/colorpicker/assets/skins/sam/colorpicker.css");
415    }
416
417
418    /**
419     * Init YUI TabView component
420     */
421    public static function initTabView()
422    {
423        global $DIC;
424
425        $tpl = $DIC["tpl"];
426
427        $tpl->addCss(self::YUI_BASE . "/tabview/assets/skins/sam/tabview.css");
428        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
429        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
430        $tpl->addJavaScript(self::YUI_BASE . "/tabview/tabview-min.js");
431    }
432
433
434    /**
435     * Init YUI JSON component
436     *
437     * @author jposselt@databay.de
438     */
439    public static function initJson()
440    {
441        global $DIC;
442
443        $tpl = $DIC["tpl"];
444        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
445        $tpl->addJavaScript(self::YUI_BASE . "/json/json-min.js");
446    }
447
448
449    /**
450     * Init layout (alpha!)
451     */
452    public static function initLayout()
453    {
454        global $DIC;
455
456        $tpl = $DIC["tpl"];
457
458        $tpl->addCss(self::YUI_BASE . "/assets/skins/sam/resize.css");
459        $tpl->addCss(self::YUI_BASE . "/assets/skins/sam/layout.css");
460
461        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
462        $tpl->addJavaScript(self::YUI_BASE . "/dragdrop/dragdrop-min.js");
463        $tpl->addJavaScript(self::YUI_BASE . "/element/element-min.js");
464        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
465        $tpl->addJavaScript(self::YUI_BASE . "/resize/resize-min.js");
466        $tpl->addJavaScript(self::YUI_BASE . "/layout/layout-min.js");
467    }
468
469
470    /**
471     * Init treeView
472     */
473    public static function initTreeView()
474    {
475        global $DIC;
476
477        $tpl = $DIC["tpl"];
478
479        $tpl->addJavaScript(self::getLocalPath() . '/yahoo/yahoo-min.js');
480        $tpl->addJavaScript(self::getLocalPath() . '/event/event-min.js');
481        $tpl->addJavaScript(self::getLocalPath() . '/treeview/treeview.js');
482    }
483
484
485    /**
486     * Init YUI Event
487     */
488    public static function initTooltip()
489    {
490        global $DIC;
491
492        $tpl = $DIC["tpl"];
493
494        self::addContainerCss();
495        $tpl->addJavaScript(self::YUI_BASE . "/yahoo-dom-event/yahoo-dom-event.js");
496        $tpl->addJavaScript(self::YUI_BASE . "/animation/animation-min.js");
497        $tpl->addJavaScript(self::YUI_BASE . "/container/container-min.js");
498    }
499
500
501    /**
502     *
503     */
504    public static function initCookie()
505    {
506        /**
507         * @var $tpl ilTemplate
508         */
509        global $DIC;
510
511        $tpl = $DIC["tpl"];
512
513        $tpl->addJavaScript(self::YUI_BASE . "/cookie/cookie.js");
514    }
515
516
517    /**
518     * Get local path of a YUI js file
519     */
520    public static function getLocalPath($a_name = "")
521    {
522        return self::YUI_BASE . "/" . $a_name;
523    }
524
525
526    /**
527     * Add container css
528     */
529    protected static function addContainerCss(ilTemplate $a_main_tpl = null)
530    {
531        global $DIC;
532
533        if ($a_main_tpl == null) {
534            $tpl = $DIC["tpl"];
535        } else {
536            $tpl = $a_main_tpl;
537        }
538
539        $tpl->addCss(self::getLocalPath("container/assets/skins/sam/container.css"));
540    }
541}
542