/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
/**
4
 * CodeIgniter
5
 *
6
 * An open source application development framework for PHP 4.3.2 or newer
7
 *
8
 * @package		CodeIgniter
9
 * @author		ExpressionEngine Dev Team
10
 * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc.
11
 * @license		http://www.codeigniter.com/user_guide/license.html
12
 * @link		http://www.codeigniter.com
13
 * @since		Version 1.0
14
 * @filesource
15
 */
16
17
/**
18
 * Jquery Class
19
 *
20
 * @package		CodeIgniter
21
 * @subpackage	Libraries
22
 * @author		ExpressionEngine Dev Team
23
 * @category	Loader
24
 * @link		http://www.codeigniter.com/user_guide/libraries/javascript.html
25
 */
26
 
27
class CI_Jquery extends CI_Javascript {
28
29
	var $_javascript_folder = 'js';
30
	var $jquery_code_for_load = array();
31
	var $jquery_code_for_compile = array();
32
	var $jquery_corner_active = FALSE;
33
	var $jquery_table_sorter_active = FALSE;
34
	var $jquery_table_sorter_pager_active = FALSE;
35
	var $jquery_ajax_img = '';
36
37
	public function __construct($params)
38
	{
39
		$this->CI =& get_instance();	
40
		extract($params);
41
42
		if ($autoload === TRUE)
43
		{
44
			$this->script();			
45
		}
46
		
47
		log_message('debug', "Jquery Class Initialized");
48
	}
49
	
50
	// --------------------------------------------------------------------	 
51
	// Event Code
52
	// --------------------------------------------------------------------	
53
54
	/**
55
	 * Blur
56
	 *
57
	 * Outputs a jQuery blur event
58
	 *
59
	 * @access	private
60
	 * @param	string	The element to attach the event to
61
	 * @param	string	The code to execute
62
	 * @return	string
63
	 */
64
	function _blur($element = 'this', $js = '')
65
	{
66
		return $this->_add_event($element, $js, 'blur');
67
	}
68
	
69
	// --------------------------------------------------------------------
70
	
71
	/**
72
	 * Change
73
	 *
74
	 * Outputs a jQuery change event
75
	 *
76
	 * @access	private
77
	 * @param	string	The element to attach the event to
78
	 * @param	string	The code to execute
79
	 * @return	string
80
	 */
81
	function _change($element = 'this', $js = '')
82
	{
83
		return $this->_add_event($element, $js, 'change');
84
	}
85
	
86
	// --------------------------------------------------------------------
87
	
88
	/**
89
	 * Click
90
	 *
91
	 * Outputs a jQuery click event
92
	 *
93
	 * @access	private
94
	 * @param	string	The element to attach the event to
95
	 * @param	string	The code to execute
96
	 * @param	boolean	whether or not to return false
97
	 * @return	string
98
	 */
99
	function _click($element = 'this', $js = '', $ret_false = TRUE)
100
	{
101
		if ( ! is_array($js))
102
		{
103
			$js = array($js);
104
		}
105
106
		if ($ret_false)
107
		{
108
			$js[] = "return false;";
109
		}
110
111
		return $this->_add_event($element, $js, 'click');
112
	}
113
114
	// --------------------------------------------------------------------
115
	
116
	/**
117
	 * Double Click
118
	 *
119
	 * Outputs a jQuery dblclick event
120
	 *
121
	 * @access	private
122
	 * @param	string	The element to attach the event to
123
	 * @param	string	The code to execute
124
	 * @return	string
125
	 */
126
	function _dblclick($element = 'this', $js = '')
127
	{
128
		return $this->_add_event($element, $js, 'dblclick');
129
	}
130
131
	// --------------------------------------------------------------------
132
	
133
	/**
134
	 * Error
135
	 *
136
	 * Outputs a jQuery error event
137
	 *
138
	 * @access	private
139
	 * @param	string	The element to attach the event to
140
	 * @param	string	The code to execute
141
	 * @return	string
142
	 */
143
	function _error($element = 'this', $js = '')
144
	{
145
		return $this->_add_event($element, $js, 'error');
146
	}
147
148
	// --------------------------------------------------------------------
149
	
150
	/**
151
	 * Focus
152
	 *
153
	 * Outputs a jQuery focus event
154
	 *
155
	 * @access	private
156
	 * @param	string	The element to attach the event to
157
	 * @param	string	The code to execute
158
	 * @return	string
159
	 */
160
	function _focus($element = 'this', $js = '')
161
	{
162
		return $this->_add_event($element, $js, 'focus');
163
	}
164
165
	// --------------------------------------------------------------------
166
	
167
	/**
168
	 * Hover
169
	 *
170
	 * Outputs a jQuery hover event
171
	 *
172
	 * @access	private
173
	 * @param	string	- element
174
	 * @param	string	- Javascript code for mouse over
175
	 * @param	string	- Javascript code for mouse out
176
	 * @return	string
177
	 */
178
	function _hover($element = 'this', $over, $out)
179
	{
180
		$event = "\n\t$(" . $this->_prep_element($element) . ").hover(\n\t\tfunction()\n\t\t{\n\t\t\t{$over}\n\t\t}, \n\t\tfunction()\n\t\t{\n\t\t\t{$out}\n\t\t});\n";
181
182
		$this->jquery_code_for_compile[] = $event;
183
184
		return $event;
185
	}
186
187
	// --------------------------------------------------------------------
188
	
189
	/**
190
	 * Keydown
191
	 *
192
	 * Outputs a jQuery keydown event
193
	 *
194
	 * @access	private
195
	 * @param	string	The element to attach the event to
196
	 * @param	string	The code to execute
197
	 * @return	string
198
	 */
199
	function _keydown($element = 'this', $js = '')
200
	{
201
		return $this->_add_event($element, $js, 'keydown');
202
	}
203
204
	// --------------------------------------------------------------------
205
	
206
	/**
207
	 * Keyup
208
	 *
209
	 * Outputs a jQuery keydown event
210
	 *
211
	 * @access	private
212
	 * @param	string	The element to attach the event to
213
	 * @param	string	The code to execute
214
	 * @return	string
215
	 */
216
	function _keyup($element = 'this', $js = '')
217
	{
218
		return $this->_add_event($element, $js, 'keyup');
219
	}	
220
221
	// --------------------------------------------------------------------
222
	
223
	/**
224
	 * Load
225
	 *
226
	 * Outputs a jQuery load event
227
	 *
228
	 * @access	private
229
	 * @param	string	The element to attach the event to
230
	 * @param	string	The code to execute
231
	 * @return	string
232
	 */
233
	function _load($element = 'this', $js = '')
234
	{
235
		return $this->_add_event($element, $js, 'load');
236
	}	
237
	
238
	// --------------------------------------------------------------------
239
	
240
	/**
241
	 * Mousedown
242
	 *
243
	 * Outputs a jQuery mousedown event
244
	 *
245
	 * @access	private
246
	 * @param	string	The element to attach the event to
247
	 * @param	string	The code to execute
248
	 * @return	string
249
	 */
250
	function _mousedown($element = 'this', $js = '')
251
	{
252
		return $this->_add_event($element, $js, 'mousedown');
253
	}
254
255
	// --------------------------------------------------------------------
256
	
257
	/**
258
	 * Mouse Out
259
	 *
260
	 * Outputs a jQuery mouseout event
261
	 *
262
	 * @access	private
263
	 * @param	string	The element to attach the event to
264
	 * @param	string	The code to execute
265
	 * @return	string
266
	 */
267
	function _mouseout($element = 'this', $js = '')
268
	{
269
		return $this->_add_event($element, $js, 'mouseout');
270
	}
271
272
	// --------------------------------------------------------------------
273
	
274
	/**
275
	 * Mouse Over
276
	 *
277
	 * Outputs a jQuery mouseover event
278
	 *
279
	 * @access	private
280
	 * @param	string	The element to attach the event to
281
	 * @param	string	The code to execute
282
	 * @return	string
283
	 */
284
	function _mouseover($element = 'this', $js = '')
285
	{
286
		return $this->_add_event($element, $js, 'mouseover');
287
	}
288
289
	// --------------------------------------------------------------------
290
291
	/**
292
	 * Mouseup
293
	 *
294
	 * Outputs a jQuery mouseup event
295
	 *
296
	 * @access	private
297
	 * @param	string	The element to attach the event to
298
	 * @param	string	The code to execute
299
	 * @return	string
300
	 */
301
	function _mouseup($element = 'this', $js = '')
302
	{
303
		return $this->_add_event($element, $js, 'mouseup');
304
	}
305
306
	// --------------------------------------------------------------------
307
308
	/**
309
	 * Output
310
	 *
311
	 * Outputs script directly
312
	 *
313
	 * @access	private
314
	 * @param	string	The element to attach the event to
315
	 * @param	string	The code to execute
316
	 * @return	string
317
	 */
318
	function _output($array_js = '')
319
	{
320
		if ( ! is_array($array_js))
321
		{
322
			$array_js = array($array_js);
323
		}
324
		
325
		foreach ($array_js as $js)
326
		{
327
			$this->jquery_code_for_compile[] = "\t$js\n";
328
		}
329
	}
330
331
	// --------------------------------------------------------------------
332
333
	/**
334
	 * Resize
335
	 *
336
	 * Outputs a jQuery resize event
337
	 *
338
	 * @access	private
339
	 * @param	string	The element to attach the event to
340
	 * @param	string	The code to execute
341
	 * @return	string
342
	 */
343
	function _resize($element = 'this', $js = '')
344
	{
345
		return $this->_add_event($element, $js, 'resize');
346
	}
347
348
	// --------------------------------------------------------------------
349
350
	/**
351
	 * Scroll
352
	 *
353
	 * Outputs a jQuery scroll event
354
	 *
355
	 * @access	private
356
	 * @param	string	The element to attach the event to
357
	 * @param	string	The code to execute
358
	 * @return	string
359
	 */
360
	function _scroll($element = 'this', $js = '')
361
	{
362
		return $this->_add_event($element, $js, 'scroll');
363
	}
364
	
365
	// --------------------------------------------------------------------
366
367
	/**
368
	 * Unload
369
	 *
370
	 * Outputs a jQuery unload event
371
	 *
372
	 * @access	private
373
	 * @param	string	The element to attach the event to
374
	 * @param	string	The code to execute
375
	 * @return	string
376
	 */
377
	function _unload($element = 'this', $js = '')
378
	{
379
		return $this->_add_event($element, $js, 'unload');
380
	}
381
382
	// --------------------------------------------------------------------	 
383
	// Effects
384
	// --------------------------------------------------------------------	
385
	
386
	/**
387
	 * Add Class
388
	 *
389
	 * Outputs a jQuery addClass event
390
	 *
391
	 * @access	private
392
	 * @param	string	- element
393
	 * @return	string
394
	 */
395
	function _addClass($element = 'this', $class='')
396
	{
397
		$element = $this->_prep_element($element);
398
		$str  = "$({$element}).addClass(\"$class\");";
399
		return $str;
400
	}
401
402
	// --------------------------------------------------------------------
403
404
	/**
405
	 * Animate
406
	 *
407
	 * Outputs a jQuery animate event
408
	 *
409
	 * @access	private
410
	 * @param	string	- element
411
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
412
	 * @param	string	- Javascript callback function
413
	 * @return	string
414
	 */
415
	function _animate($element = 'this', $params = array(), $speed = '', $extra = '')
416
	{
417
		$element = $this->_prep_element($element);
418
		$speed = $this->_validate_speed($speed);
419
		
420
		$animations = "\t\t\t";
421
		
422
		foreach ($params as $param=>$value)
423
		{
424
			$animations .= $param.': \''.$value.'\', ';
425
		}
426
427
		$animations = substr($animations, 0, -2); // remove the last ", "
428
429
		if ($speed != '')
430
		{
431
			$speed = ', '.$speed;
432
		}
433
		
434
		if ($extra != '')
435
		{
436
			$extra = ', '.$extra;
437
		}
438
		
439
		$str  = "$({$element}).animate({\n$animations\n\t\t}".$speed.$extra.");";
440
		
441
		return $str;
442
	}
443
444
	// --------------------------------------------------------------------
445
		
446
	/**
447
	 * Fade In
448
	 *
449
	 * Outputs a jQuery hide event
450
	 *
451
	 * @access	private
452
	 * @param	string	- element
453
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
454
	 * @param	string	- Javascript callback function
455
	 * @return	string
456
	 */
457
	function _fadeIn($element = 'this', $speed = '', $callback = '')
458
	{
459
		$element = $this->_prep_element($element);	
460
		$speed = $this->_validate_speed($speed);
461
		
462
		if ($callback != '')
463
		{
464
			$callback = ", function(){\n{$callback}\n}";
465
		}
466
		
467
		$str  = "$({$element}).fadeIn({$speed}{$callback});";
468
		
469
		return $str;
470
	}
471
		
472
	// --------------------------------------------------------------------
473
	
474
	/**
475
	 * Fade Out
476
	 *
477
	 * Outputs a jQuery hide event
478
	 *
479
	 * @access	private
480
	 * @param	string	- element
481
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
482
	 * @param	string	- Javascript callback function
483
	 * @return	string
484
	 */
485
	function _fadeOut($element = 'this', $speed = '', $callback = '')
486
	{
487
		$element = $this->_prep_element($element);
488
		$speed = $this->_validate_speed($speed);
489
		
490
		if ($callback != '')
491
		{
492
			$callback = ", function(){\n{$callback}\n}";
493
		}
494
		
495
		$str  = "$({$element}).fadeOut({$speed}{$callback});";
496
		
497
		return $str;
498
	}
499
500
	// --------------------------------------------------------------------
501
502
	/**
503
	 * Hide
504
	 *
505
	 * Outputs a jQuery hide action
506
	 *
507
	 * @access	private
508
	 * @param	string	- element
509
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
510
	 * @param	string	- Javascript callback function
511
	 * @return	string
512
	 */
513
	function _hide($element = 'this', $speed = '', $callback = '')
514
	{
515
		$element = $this->_prep_element($element);	
516
		$speed = $this->_validate_speed($speed);
517
		
518
		if ($callback != '')
519
		{
520
			$callback = ", function(){\n{$callback}\n}";
521
		}
522
		
523
		$str  = "$({$element}).hide({$speed}{$callback});";
524
525
		return $str;
526
	}
527
	
528
	// --------------------------------------------------------------------
529
530
	/**
531
	 * Remove Class
532
	 *
533
	 * Outputs a jQuery remove class event
534
	 *
535
	 * @access	private
536
	 * @param	string	- element
537
	 * @return	string
538
	 */
539
	function _removeClass($element = 'this', $class='')
540
	{
541
		$element = $this->_prep_element($element);
542
		$str  = "$({$element}).removeClass(\"$class\");";
543
		return $str;
544
	}
545
546
	// --------------------------------------------------------------------
547
			
548
	/**
549
	 * Slide Up
550
	 *
551
	 * Outputs a jQuery slideUp event
552
	 *
553
	 * @access	private
554
	 * @param	string	- element
555
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
556
	 * @param	string	- Javascript callback function
557
	 * @return	string
558
	 */
559
	function _slideUp($element = 'this', $speed = '', $callback = '')
560
	{
561
		$element = $this->_prep_element($element);	
562
		$speed = $this->_validate_speed($speed);
563
		
564
		if ($callback != '')
565
		{
566
			$callback = ", function(){\n{$callback}\n}";
567
		}
568
		
569
		$str  = "$({$element}).slideUp({$speed}{$callback});";
570
		
571
		return $str;
572
	}
573
		
574
	// --------------------------------------------------------------------
575
	
576
	/**
577
	 * Slide Down
578
	 *
579
	 * Outputs a jQuery slideDown event
580
	 *
581
	 * @access	private
582
	 * @param	string	- element
583
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
584
	 * @param	string	- Javascript callback function
585
	 * @return	string
586
	 */
587
	function _slideDown($element = 'this', $speed = '', $callback = '')
588
	{
589
		$element = $this->_prep_element($element);
590
		$speed = $this->_validate_speed($speed);
591
		
592
		if ($callback != '')
593
		{
594
			$callback = ", function(){\n{$callback}\n}";
595
		}
596
		
597
		$str  = "$({$element}).slideDown({$speed}{$callback});";
598
		
599
		return $str;
600
	}
601
602
	// --------------------------------------------------------------------
603
	
604
	/**
605
	 * Slide Toggle
606
	 *
607
	 * Outputs a jQuery slideToggle event
608
	 *
609
	 * @access	public
610
	 * @param	string	- element
611
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
612
	 * @param	string	- Javascript callback function
613
	 * @return	string
614
	 */
615
	function _slideToggle($element = 'this', $speed = '', $callback = '')
616
	{
617
		$element = $this->_prep_element($element);
618
		$speed = $this->_validate_speed($speed);
619
		
620
		if ($callback != '')
621
		{
622
			$callback = ", function(){\n{$callback}\n}";
623
		}
624
		
625
		$str  = "$({$element}).slideToggle({$speed}{$callback});";
626
		
627
		return $str;
628
	}
629
		
630
	// --------------------------------------------------------------------
631
	
632
	/**
633
	 * Toggle
634
	 *
635
	 * Outputs a jQuery toggle event
636
	 *
637
	 * @access	private
638
	 * @param	string	- element
639
	 * @return	string
640
	 */
641
	function _toggle($element = 'this')
642
	{
643
		$element = $this->_prep_element($element);
644
		$str  = "$({$element}).toggle();";
645
		return $str;
646
	}
647
	
648
	// --------------------------------------------------------------------
649
	
650
	/**
651
	 * Toggle Class
652
	 *
653
	 * Outputs a jQuery toggle class event
654
	 *
655
	 * @access	private
656
	 * @param	string	- element
657
	 * @return	string
658
	 */
659
	function _toggleClass($element = 'this', $class='')
660
	{
661
		$element = $this->_prep_element($element);
662
		$str  = "$({$element}).toggleClass(\"$class\");";
663
		return $str;
664
	}
665
	
666
	// --------------------------------------------------------------------
667
	
668
	/**
669
	 * Show
670
	 *
671
	 * Outputs a jQuery show event
672
	 *
673
	 * @access	private
674
	 * @param	string	- element
675
	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
676
	 * @param	string	- Javascript callback function
677
	 * @return	string
678
	 */
679
	function _show($element = 'this', $speed = '', $callback = '')
680
	{
681
		$element = $this->_prep_element($element);	
682
		$speed = $this->_validate_speed($speed);
683
		
684
		if ($callback != '')
685
		{
686
			$callback = ", function(){\n{$callback}\n}";
687
		}
688
		
689
		$str  = "$({$element}).show({$speed}{$callback});";
690
		
691
		return $str;
692
	}
693
694
	// --------------------------------------------------------------------
695
696
	/**
697
	 * Updater
698
	 *
699
	 * An Ajax call that populates the designated DOM node with 
700
	 * returned content
701
	 *
702
	 * @access	private
703
	 * @param	string	The element to attach the event to
704
	 * @param	string	the controller to run the call against
705
	 * @param	string	optional parameters
706
	 * @return	string
707
	 */
708
	
709
	function _updater($container = 'this', $controller, $options = '')
710
	{	
711
		$container = $this->_prep_element($container);
712
		
713
		$controller = (strpos('://', $controller) === FALSE) ? $controller : $this->CI->config->site_url($controller);
714
		
715
		// ajaxStart and ajaxStop are better choices here... but this is a stop gap
716
		if ($this->CI->config->item('javascript_ajax_img') == '')
717
		{
718
			$loading_notifier = "Loading...";
719
		}
720
		else
721
		{
722
			$loading_notifier = '<img src=\'' . $this->CI->config->slash_item('base_url') . $this->CI->config->item('javascript_ajax_img') . '\' alt=\'Loading\' />';
723
		}
724
		
725
		$updater = "$($container).empty();\n"; // anything that was in... get it out
726
		$updater .= "\t\t$($container).prepend(\"$loading_notifier\");\n"; // to replace with an image
727
728
		$request_options = '';
729
		if ($options != '')
730
		{
731
			$request_options .= ", {";
732
			$request_options .= (is_array($options)) ? "'".implode("', '", $options)."'" : "'".str_replace(":", "':'", $options)."'";
733
			$request_options .= "}";
734
		}
735
736
		$updater .= "\t\t$($container).load('$controller'$request_options);";
737
		return $updater;
738
	}
739
740
741
	// --------------------------------------------------------------------
742
	// Pre-written handy stuff
743
	// --------------------------------------------------------------------
744
	 
745
	/**
746
	 * Zebra tables
747
	 *
748
	 * @access	private
749
	 * @param	string	table name
750
	 * @param	string	plugin location
751
	 * @return	string
752
	 */
753
	function _zebraTables($class = '', $odd = 'odd', $hover = '')
754
	{
755
		$class = ($class != '') ? '.'.$class : '';
756
		
757
		$zebra  = "\t\$(\"table{$class} tbody tr:nth-child(even)\").addClass(\"{$odd}\");";
758
759
		$this->jquery_code_for_compile[] = $zebra;
760
761
		if ($hover != '')
762
		{
763
			$hover = $this->hover("table{$class} tbody tr", "$(this).addClass('hover');", "$(this).removeClass('hover');");
764
		}
765
766
		return $zebra;
767
	}
768
769
770
771
	// --------------------------------------------------------------------
772
	// Plugins
773
	// --------------------------------------------------------------------
774
	
775
	/**
776
	 * Corner Plugin
777
	 *
778
	 * http://www.malsup.com/jquery/corner/
779
	 *
780
	 * @access	public
781
	 * @param	string	target
782
	 * @return	string
783
	 */
784
	function corner($element = '', $corner_style = '')
785
	{
786
		// may want to make this configurable down the road
787
		$corner_location = '/plugins/jquery.corner.js';
788
789
		if ($corner_style != '')
790
		{
791
			$corner_style = '"'.$corner_style.'"';
792
		}
793
794
		return "$(" . $this->_prep_element($element) . ").corner(".$corner_style.");";
795
	}
796
	
797
	// --------------------------------------------------------------------
798
799
	/**
800
	 * modal window
801
	 *
802
	 * Load a thickbox modal window
803
	 *
804
	 * @access	public
805
	 * @return	void
806
	 */
807
	function modal($src, $relative = FALSE)
808
	{	
809
		$this->jquery_code_for_load[] = $this->external($src, $relative);
810
	}
811
812
	// --------------------------------------------------------------------
813
814
	/**
815
	 * Effect
816
	 *
817
	 * Load an Effect library
818
	 *
819
	 * @access	public
820
	 * @return	void
821
	 */
822
	function effect($src, $relative = FALSE)
823
	{
824
		$this->jquery_code_for_load[] = $this->external($src, $relative);
825
	}
826
827
	// --------------------------------------------------------------------
828
829
	/**
830
	 * Plugin
831
	 *
832
	 * Load a plugin library
833
	 *
834
	 * @access	public
835
	 * @return	void
836
	 */
837
	function plugin($src, $relative = FALSE)
838
	{
839
		$this->jquery_code_for_load[] = $this->external($src, $relative);
840
	}
841
842
	// --------------------------------------------------------------------
843
844
	/**
845
	 * UI
846
	 *
847
	 * Load a user interface library
848
	 *
849
	 * @access	public
850
	 * @return	void
851
	 */
852
	function ui($src, $relative = FALSE)
853
	{
854
		$this->jquery_code_for_load[] = $this->external($src, $relative);
855
	}
856
	// --------------------------------------------------------------------
857
858
	/**
859
	 * Sortable
860
	 *
861
	 * Creates a jQuery sortable
862
	 *
863
	 * @access	public
864
	 * @return	void
865
	 */
866
	function sortable($element, $options = array())
867
	{
868
869
		if (count($options) > 0)
870
		{
871
			$sort_options = array();
872
			foreach ($options as $k=>$v)
873
			{
874
				$sort_options[] = "\n\t\t".$k.': '.$v."";
875
			}
876
			$sort_options = implode(",", $sort_options);
877
		}
878
		else
879
		{
880
			$sort_options = '';
881
		}
882
883
		return "$(" . $this->_prep_element($element) . ").sortable({".$sort_options."\n\t});";
884
	}
885
886
	// --------------------------------------------------------------------
887
888
	/**
889
	 * Table Sorter Plugin
890
	 *
891
	 * @access	public
892
	 * @param	string	table name
893
	 * @param	string	plugin location
894
	 * @return	string
895
	 */
896
	function tablesorter($table = '', $options = '')
897
	{
898
		$this->jquery_code_for_compile[] = "\t$(" . $this->_prep_element($table) . ").tablesorter($options);\n";
899
	}
900
	
901
	// --------------------------------------------------------------------
902
	// Class functions
903
	// --------------------------------------------------------------------
904
905
	/**
906
	 * Add Event
907
	 *
908
	 * Constructs the syntax for an event, and adds to into the array for compilation
909
	 *
910
	 * @access	private
911
	 * @param	string	The element to attach the event to
912
	 * @param	string	The code to execute
913
	 * @param	string	The event to pass
914
	 * @return	string
915
	 */	
916
	function _add_event($element, $js, $event)
917
	{
918
		if (is_array($js))
919
		{
920
			$js = implode("\n\t\t", $js);
921
922
		}
923
924
		$event = "\n\t$(" . $this->_prep_element($element) . ").{$event}(function(){\n\t\t{$js}\n\t});\n";
925
		$this->jquery_code_for_compile[] = $event;
926
		return $event;
927
	}
928
929
	// --------------------------------------------------------------------
930
931
	/**
932
	 * Compile
933
	 *
934
	 * As events are specified, they are stored in an array
935
	 * This funciton compiles them all for output on a page
936
	 *
937
	 * @access	private
938
	 * @return	string
939
	 */
940
	function _compile($view_var = 'script_foot', $script_tags = TRUE)
941
	{
942
		// External references
943
		$external_scripts = implode('', $this->jquery_code_for_load);
944
		$this->CI->load->vars(array('library_src' => $external_scripts));
945
946
		if (count($this->jquery_code_for_compile) == 0 )
947
		{
948
			// no inline references, let's just return
949
			return;
950
		}
951
952
		// Inline references
953
		$script = '$(document).ready(function() {' . "\n";
954
		$script .= implode('', $this->jquery_code_for_compile);
955
		$script .= '});';
956
		
957
		$output = ($script_tags === FALSE) ? $script : $this->inline($script);
958
959
		$this->CI->load->vars(array($view_var => $output));
960
961
	}
962
	
963
	// --------------------------------------------------------------------
964
	
965
	/**
966
	 * Clear Compile
967
	 *
968
	 * Clears the array of script events collected for output
969
	 *
970
	 * @access	public
971
	 * @return	void
972
	 */
973
	function _clear_compile()
974
	{
975
		$this->jquery_code_for_compile = array();
976
	}
977
978
	// --------------------------------------------------------------------
979
	
980
	/**
981
	 * Document Ready
982
	 *
983
	 * A wrapper for writing document.ready()
984
	 *
985
	 * @access	private
986
	 * @return	string
987
	 */
988
	function _document_ready($js)
989
	{
990
		if ( ! is_array($js))
991
		{
992
			$js = array ($js);
993
994
		}
995
		
996
		foreach ($js as $script)
997
		{
998
			$this->jquery_code_for_compile[] = $script;
999
		}
1000
	}
1001
1002
	// --------------------------------------------------------------------
1003
1004
	/**
1005
	 * Script Tag
1006
	 *
1007
	 * Outputs the script tag that loads the jquery.js file into an HTML document
1008
	 *
1009
	 * @access	public
1010
	 * @param	string
1011
	 * @return	string
1012
	 */
1013
	function script($library_src = '', $relative = FALSE)
1014
	{
1015
		$library_src = $this->external($library_src, $relative);
1016
		$this->jquery_code_for_load[] = $library_src;
1017
		return $library_src;
1018
	}
1019
	
1020
	// --------------------------------------------------------------------
1021
1022
	/**
1023
	 * Prep Element
1024
	 *
1025
	 * Puts HTML element in quotes for use in jQuery code
1026
	 * unless the supplied element is the Javascript 'this'
1027
	 * object, in which case no quotes are added
1028
	 *
1029
	 * @access	public
1030
	 * @param	string
1031
	 * @return	string
1032
	 */
1033
	function _prep_element($element)
1034
	{
1035
		if ($element != 'this')
1036
		{
1037
			$element = '"'.$element.'"';
1038
		}
1039
		
1040
		return $element;
1041
	}
1042
	
1043
	// --------------------------------------------------------------------
1044
1045
	/**
1046
	 * Validate Speed
1047
	 *
1048
	 * Ensures the speed parameter is valid for jQuery
1049
	 *
1050
	 * @access	private
1051
	 * @param	string
1052
	 * @return	string
1053
	 */	
1054
	function _validate_speed($speed)
1055
	{
1056
		if (in_array($speed, array('slow', 'normal', 'fast')))
1057
		{
1058
			$speed = '"'.$speed.'"';
1059
		}
1060
		elseif (preg_match("/[^0-9]/", $speed))
1061
		{
1062
			$speed = '';
1063
		}
1064
	
1065
		return $speed;
1066
	}
1067
1068
}
1069
1070
/* End of file Jquery.php */
1071
/* Location: ./system/libraries/Jquery.php */