/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk
20.1.1 by galaxyAbstractor
* Added an simple admin panel to the codeviewer-cmssy stuff
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 */