]> jfr.im git - z_archive/KronOS.git/blob - video/system/libraries/Javascript.php
Merge branch 'master' of https://github.com/Mustis/WebOsProject
[z_archive/KronOS.git] / video / system / libraries / Javascript.php
1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
9 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16 // ------------------------------------------------------------------------
17
18 /**
19 * Javascript Class
20 *
21 * @package CodeIgniter
22 * @subpackage Libraries
23 * @category Javascript
24 * @author ExpressionEngine Dev Team
25 * @link http://codeigniter.com/user_guide/libraries/javascript.html
26 */
27 class CI_Javascript {
28
29 var $_javascript_location = 'js';
30
31 public function __construct($params = array())
32 {
33 $defaults = array('js_library_driver' => 'jquery', 'autoload' => TRUE);
34
35 foreach ($defaults as $key => $val)
36 {
37 if (isset($params[$key]) && $params[$key] !== "")
38 {
39 $defaults[$key] = $params[$key];
40 }
41 }
42
43 extract($defaults);
44
45 $this->CI =& get_instance();
46
47 // load the requested js library
48 $this->CI->load->library('javascript/'.$js_library_driver, array('autoload' => $autoload));
49 // make js to refer to current library
50 $this->js =& $this->CI->$js_library_driver;
51
52 log_message('debug', "Javascript Class Initialized and loaded. Driver used: $js_library_driver");
53 }
54
55 // --------------------------------------------------------------------
56 // Event Code
57 // --------------------------------------------------------------------
58
59 /**
60 * Blur
61 *
62 * Outputs a javascript library blur event
63 *
64 * @access public
65 * @param string The element to attach the event to
66 * @param string The code to execute
67 * @return string
68 */
69 function blur($element = 'this', $js = '')
70 {
71 return $this->js->_blur($element, $js);
72 }
73
74 // --------------------------------------------------------------------
75
76 /**
77 * Change
78 *
79 * Outputs a javascript library change event
80 *
81 * @access public
82 * @param string The element to attach the event to
83 * @param string The code to execute
84 * @return string
85 */
86 function change($element = 'this', $js = '')
87 {
88 return $this->js->_change($element, $js);
89 }
90
91 // --------------------------------------------------------------------
92
93 /**
94 * Click
95 *
96 * Outputs a javascript library click event
97 *
98 * @access public
99 * @param string The element to attach the event to
100 * @param string The code to execute
101 * @param boolean whether or not to return false
102 * @return string
103 */
104 function click($element = 'this', $js = '', $ret_false = TRUE)
105 {
106 return $this->js->_click($element, $js, $ret_false);
107 }
108
109 // --------------------------------------------------------------------
110
111 /**
112 * Double Click
113 *
114 * Outputs a javascript library dblclick event
115 *
116 * @access public
117 * @param string The element to attach the event to
118 * @param string The code to execute
119 * @return string
120 */
121 function dblclick($element = 'this', $js = '')
122 {
123 return $this->js->_dblclick($element, $js);
124 }
125
126 // --------------------------------------------------------------------
127
128 /**
129 * Error
130 *
131 * Outputs a javascript library error event
132 *
133 * @access public
134 * @param string The element to attach the event to
135 * @param string The code to execute
136 * @return string
137 */
138 function error($element = 'this', $js = '')
139 {
140 return $this->js->_error($element, $js);
141 }
142
143 // --------------------------------------------------------------------
144
145 /**
146 * Focus
147 *
148 * Outputs a javascript library focus event
149 *
150 * @access public
151 * @param string The element to attach the event to
152 * @param string The code to execute
153 * @return string
154 */
155 function focus($element = 'this', $js = '')
156 {
157 return $this->js->__add_event($focus, $js);
158 }
159
160 // --------------------------------------------------------------------
161
162 /**
163 * Hover
164 *
165 * Outputs a javascript library hover event
166 *
167 * @access public
168 * @param string - element
169 * @param string - Javascript code for mouse over
170 * @param string - Javascript code for mouse out
171 * @return string
172 */
173 function hover($element = 'this', $over, $out)
174 {
175 return $this->js->__hover($element, $over, $out);
176 }
177
178 // --------------------------------------------------------------------
179
180 /**
181 * Keydown
182 *
183 * Outputs a javascript library keydown event
184 *
185 * @access public
186 * @param string The element to attach the event to
187 * @param string The code to execute
188 * @return string
189 */
190 function keydown($element = 'this', $js = '')
191 {
192 return $this->js->_keydown($element, $js);
193 }
194
195 // --------------------------------------------------------------------
196
197 /**
198 * Keyup
199 *
200 * Outputs a javascript library keydown event
201 *
202 * @access public
203 * @param string The element to attach the event to
204 * @param string The code to execute
205 * @return string
206 */
207 function keyup($element = 'this', $js = '')
208 {
209 return $this->js->_keyup($element, $js);
210 }
211
212 // --------------------------------------------------------------------
213
214 /**
215 * Load
216 *
217 * Outputs a javascript library load event
218 *
219 * @access public
220 * @param string The element to attach the event to
221 * @param string The code to execute
222 * @return string
223 */
224 function load($element = 'this', $js = '')
225 {
226 return $this->js->_load($element, $js);
227 }
228
229 // --------------------------------------------------------------------
230
231 /**
232 * Mousedown
233 *
234 * Outputs a javascript library mousedown event
235 *
236 * @access public
237 * @param string The element to attach the event to
238 * @param string The code to execute
239 * @return string
240 */
241 function mousedown($element = 'this', $js = '')
242 {
243 return $this->js->_mousedown($element, $js);
244 }
245
246 // --------------------------------------------------------------------
247
248 /**
249 * Mouse Out
250 *
251 * Outputs a javascript library mouseout event
252 *
253 * @access public
254 * @param string The element to attach the event to
255 * @param string The code to execute
256 * @return string
257 */
258 function mouseout($element = 'this', $js = '')
259 {
260 return $this->js->_mouseout($element, $js);
261 }
262
263 // --------------------------------------------------------------------
264
265 /**
266 * Mouse Over
267 *
268 * Outputs a javascript library mouseover event
269 *
270 * @access public
271 * @param string The element to attach the event to
272 * @param string The code to execute
273 * @return string
274 */
275 function mouseover($element = 'this', $js = '')
276 {
277 return $this->js->_mouseover($element, $js);
278 }
279
280 // --------------------------------------------------------------------
281
282 /**
283 * Mouseup
284 *
285 * Outputs a javascript library mouseup event
286 *
287 * @access public
288 * @param string The element to attach the event to
289 * @param string The code to execute
290 * @return string
291 */
292 function mouseup($element = 'this', $js = '')
293 {
294 return $this->js->_mouseup($element, $js);
295 }
296
297 // --------------------------------------------------------------------
298
299 /**
300 * Output
301 *
302 * Outputs the called javascript to the screen
303 *
304 * @access public
305 * @param string The code to output
306 * @return string
307 */
308 function output($js)
309 {
310 return $this->js->_output($js);
311 }
312
313 // --------------------------------------------------------------------
314
315 /**
316 * Ready
317 *
318 * Outputs a javascript library mouseup event
319 *
320 * @access public
321 * @param string The element to attach the event to
322 * @param string The code to execute
323 * @return string
324 */
325 function ready($js)
326 {
327 return $this->js->_document_ready($js);
328 }
329
330 // --------------------------------------------------------------------
331
332 /**
333 * Resize
334 *
335 * Outputs a javascript library resize event
336 *
337 * @access public
338 * @param string The element to attach the event to
339 * @param string The code to execute
340 * @return string
341 */
342 function resize($element = 'this', $js = '')
343 {
344 return $this->js->_resize($element, $js);
345 }
346
347 // --------------------------------------------------------------------
348
349 /**
350 * Scroll
351 *
352 * Outputs a javascript library scroll event
353 *
354 * @access public
355 * @param string The element to attach the event to
356 * @param string The code to execute
357 * @return string
358 */
359 function scroll($element = 'this', $js = '')
360 {
361 return $this->js->_scroll($element, $js);
362 }
363
364 // --------------------------------------------------------------------
365
366 /**
367 * Unload
368 *
369 * Outputs a javascript library unload event
370 *
371 * @access public
372 * @param string The element to attach the event to
373 * @param string The code to execute
374 * @return string
375 */
376 function unload($element = 'this', $js = '')
377 {
378 return $this->js->_unload($element, $js);
379 }
380
381 // --------------------------------------------------------------------
382 // Effects
383 // --------------------------------------------------------------------
384
385
386 /**
387 * Add Class
388 *
389 * Outputs a javascript library addClass event
390 *
391 * @access public
392 * @param string - element
393 * @param string - Class to add
394 * @return string
395 */
396 function addClass($element = 'this', $class = '')
397 {
398 return $this->js->_addClass($element, $class);
399 }
400
401 // --------------------------------------------------------------------
402
403 /**
404 * Animate
405 *
406 * Outputs a javascript library animate event
407 *
408 * @access public
409 * @param string - element
410 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
411 * @param string - Javascript callback function
412 * @return string
413 */
414 function animate($element = 'this', $params = array(), $speed = '', $extra = '')
415 {
416 return $this->js->_animate($element, $params, $speed, $extra);
417 }
418
419 // --------------------------------------------------------------------
420
421 /**
422 * Fade In
423 *
424 * Outputs a javascript library hide event
425 *
426 * @access public
427 * @param string - element
428 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
429 * @param string - Javascript callback function
430 * @return string
431 */
432 function fadeIn($element = 'this', $speed = '', $callback = '')
433 {
434 return $this->js->_fadeIn($element, $speed, $callback);
435 }
436
437 // --------------------------------------------------------------------
438
439 /**
440 * Fade Out
441 *
442 * Outputs a javascript library hide event
443 *
444 * @access public
445 * @param string - element
446 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
447 * @param string - Javascript callback function
448 * @return string
449 */
450 function fadeOut($element = 'this', $speed = '', $callback = '')
451 {
452 return $this->js->_fadeOut($element, $speed, $callback);
453 }
454 // --------------------------------------------------------------------
455
456 /**
457 * Slide Up
458 *
459 * Outputs a javascript library slideUp event
460 *
461 * @access public
462 * @param string - element
463 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
464 * @param string - Javascript callback function
465 * @return string
466 */
467 function slideUp($element = 'this', $speed = '', $callback = '')
468 {
469 return $this->js->_slideUp($element, $speed, $callback);
470
471 }
472
473 // --------------------------------------------------------------------
474
475 /**
476 * Remove Class
477 *
478 * Outputs a javascript library removeClass event
479 *
480 * @access public
481 * @param string - element
482 * @param string - Class to add
483 * @return string
484 */
485 function removeClass($element = 'this', $class = '')
486 {
487 return $this->js->_removeClass($element, $class);
488 }
489
490 // --------------------------------------------------------------------
491
492 /**
493 * Slide Down
494 *
495 * Outputs a javascript library slideDown event
496 *
497 * @access public
498 * @param string - element
499 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
500 * @param string - Javascript callback function
501 * @return string
502 */
503 function slideDown($element = 'this', $speed = '', $callback = '')
504 {
505 return $this->js->_slideDown($element, $speed, $callback);
506 }
507
508 // --------------------------------------------------------------------
509
510 /**
511 * Slide Toggle
512 *
513 * Outputs a javascript library slideToggle event
514 *
515 * @access public
516 * @param string - element
517 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
518 * @param string - Javascript callback function
519 * @return string
520 */
521 function slideToggle($element = 'this', $speed = '', $callback = '')
522 {
523 return $this->js->_slideToggle($element, $speed, $callback);
524
525 }
526
527 // --------------------------------------------------------------------
528
529 /**
530 * Hide
531 *
532 * Outputs a javascript library hide action
533 *
534 * @access public
535 * @param string - element
536 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
537 * @param string - Javascript callback function
538 * @return string
539 */
540 function hide($element = 'this', $speed = '', $callback = '')
541 {
542 return $this->js->_hide($element, $speed, $callback);
543 }
544
545 // --------------------------------------------------------------------
546
547 /**
548 * Toggle
549 *
550 * Outputs a javascript library toggle event
551 *
552 * @access public
553 * @param string - element
554 * @return string
555 */
556 function toggle($element = 'this')
557 {
558 return $this->js->_toggle($element);
559
560 }
561
562 // --------------------------------------------------------------------
563
564 /**
565 * Toggle Class
566 *
567 * Outputs a javascript library toggle class event
568 *
569 * @access public
570 * @param string - element
571 * @return string
572 */
573 function toggleClass($element = 'this', $class='')
574 {
575 return $this->js->_toggleClass($element, $class);
576 }
577
578 // --------------------------------------------------------------------
579
580 /**
581 * Show
582 *
583 * Outputs a javascript library show event
584 *
585 * @access public
586 * @param string - element
587 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
588 * @param string - Javascript callback function
589 * @return string
590 */
591 function show($element = 'this', $speed = '', $callback = '')
592 {
593 return $this->js->_show($element, $speed, $callback);
594 }
595
596
597 // --------------------------------------------------------------------
598
599 /**
600 * Compile
601 *
602 * gather together all script needing to be output
603 *
604 * @access public
605 * @param string The element to attach the event to
606 * @return string
607 */
608 function compile($view_var = 'script_foot', $script_tags = TRUE)
609 {
610 $this->js->_compile($view_var, $script_tags);
611 }
612
613 /**
614 * Clear Compile
615 *
616 * Clears any previous javascript collected for output
617 *
618 * @access public
619 * @return void
620 */
621 function clear_compile()
622 {
623 $this->js->_clear_compile();
624 }
625
626 // --------------------------------------------------------------------
627
628 /**
629 * External
630 *
631 * Outputs a <script> tag with the source as an external js file
632 *
633 * @access public
634 * @param string The element to attach the event to
635 * @return string
636 */
637 function external($external_file = '', $relative = FALSE)
638 {
639 if ($external_file !== '')
640 {
641 $this->_javascript_location = $external_file;
642 }
643 else
644 {
645 if ($this->CI->config->item('javascript_location') != '')
646 {
647 $this->_javascript_location = $this->CI->config->item('javascript_location');
648 }
649 }
650
651 if ($relative === TRUE OR strncmp($external_file, 'http://', 7) == 0 OR strncmp($external_file, 'https://', 8) == 0)
652 {
653 $str = $this->_open_script($external_file);
654 }
655 elseif (strpos($this->_javascript_location, 'http://') !== FALSE)
656 {
657 $str = $this->_open_script($this->_javascript_location.$external_file);
658 }
659 else
660 {
661 $str = $this->_open_script($this->CI->config->slash_item('base_url').$this->_javascript_location.$external_file);
662 }
663
664 $str .= $this->_close_script();
665 return $str;
666 }
667
668 // --------------------------------------------------------------------
669
670 /**
671 * Inline
672 *
673 * Outputs a <script> tag
674 *
675 * @access public
676 * @param string The element to attach the event to
677 * @param boolean If a CDATA section should be added
678 * @return string
679 */
680 function inline($script, $cdata = TRUE)
681 {
682 $str = $this->_open_script();
683 $str .= ($cdata) ? "\n// <![CDATA[\n{$script}\n// ]]>\n" : "\n{$script}\n";
684 $str .= $this->_close_script();
685
686 return $str;
687 }
688
689 // --------------------------------------------------------------------
690
691 /**
692 * Open Script
693 *
694 * Outputs an opening <script>
695 *
696 * @access private
697 * @param string
698 * @return string
699 */
700 function _open_script($src = '')
701 {
702 $str = '<script type="text/javascript" charset="'.strtolower($this->CI->config->item('charset')).'"';
703 $str .= ($src == '') ? '>' : ' src="'.$src.'">';
704 return $str;
705 }
706
707 // --------------------------------------------------------------------
708
709 /**
710 * Close Script
711 *
712 * Outputs an closing </script>
713 *
714 * @access private
715 * @param string
716 * @return string
717 */
718 function _close_script($extra = "\n")
719 {
720 return "</script>$extra";
721 }
722
723
724 // --------------------------------------------------------------------
725 // --------------------------------------------------------------------
726 // AJAX-Y STUFF - still a testbed
727 // --------------------------------------------------------------------
728 // --------------------------------------------------------------------
729
730 /**
731 * Update
732 *
733 * Outputs a javascript library slideDown event
734 *
735 * @access public
736 * @param string - element
737 * @param string - One of 'slow', 'normal', 'fast', or time in milliseconds
738 * @param string - Javascript callback function
739 * @return string
740 */
741 function update($element = 'this', $speed = '', $callback = '')
742 {
743 return $this->js->_updater($element, $speed, $callback);
744 }
745
746 // --------------------------------------------------------------------
747
748 /**
749 * Generate JSON
750 *
751 * Can be passed a database result or associative array and returns a JSON formatted string
752 *
753 * @param mixed result set or array
754 * @param bool match array types (defaults to objects)
755 * @return string a json formatted string
756 */
757 function generate_json($result = NULL, $match_array_type = FALSE)
758 {
759 // JSON data can optionally be passed to this function
760 // either as a database result object or an array, or a user supplied array
761 if ( ! is_null($result))
762 {
763 if (is_object($result))
764 {
765 $json_result = $result->result_array();
766 }
767 elseif (is_array($result))
768 {
769 $json_result = $result;
770 }
771 else
772 {
773 return $this->_prep_args($result);
774 }
775 }
776 else
777 {
778 return 'null';
779 }
780
781 $json = array();
782 $_is_assoc = TRUE;
783
784 if ( ! is_array($json_result) AND empty($json_result))
785 {
786 show_error("Generate JSON Failed - Illegal key, value pair.");
787 }
788 elseif ($match_array_type)
789 {
790 $_is_assoc = $this->_is_associative_array($json_result);
791 }
792
793 foreach ($json_result as $k => $v)
794 {
795 if ($_is_assoc)
796 {
797 $json[] = $this->_prep_args($k, TRUE).':'.$this->generate_json($v, $match_array_type);
798 }
799 else
800 {
801 $json[] = $this->generate_json($v, $match_array_type);
802 }
803 }
804
805 $json = implode(',', $json);
806
807 return $_is_assoc ? "{".$json."}" : "[".$json."]";
808
809 }
810
811 // --------------------------------------------------------------------
812
813 /**
814 * Is associative array
815 *
816 * Checks for an associative array
817 *
818 * @access public
819 * @param type
820 * @return type
821 */
822 function _is_associative_array($arr)
823 {
824 foreach (array_keys($arr) as $key => $val)
825 {
826 if ($key !== $val)
827 {
828 return TRUE;
829 }
830 }
831
832 return FALSE;
833 }
834
835 // --------------------------------------------------------------------
836
837 /**
838 * Prep Args
839 *
840 * Ensures a standard json value and escapes values
841 *
842 * @access public
843 * @param type
844 * @return type
845 */
846 function _prep_args($result, $is_key = FALSE)
847 {
848 if (is_null($result))
849 {
850 return 'null';
851 }
852 elseif (is_bool($result))
853 {
854 return ($result === TRUE) ? 'true' : 'false';
855 }
856 elseif (is_string($result) OR $is_key)
857 {
858 return '"'.str_replace(array('\\', "\t", "\n", "\r", '"', '/'), array('\\\\', '\\t', '\\n', "\\r", '\"', '\/'), $result).'"';
859 }
860 elseif (is_scalar($result))
861 {
862 return $result;
863 }
864 }
865
866 // --------------------------------------------------------------------
867 }
868 // END Javascript Class
869
870 /* End of file Javascript.php */
871 /* Location: ./system/libraries/Javascript.php */