/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/Javascript.php

  • Committer: galaxyAbstractor
  • Date: 2013-04-10 15:49:32 UTC
  • mto: (19.1.5 lenasys)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: galaxyabstractor@gmail.com-20130410154932-4vizlzk0ar5gykvi
* Added an simple admin panel to the codeviewer-cmssy stuff
* Redesigned a bit like the mockups - still stuff to come
* Implemented the codeviewer + admin panel again using the Framework CodeIgniter instead 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 */
 
 
b'\\ No newline at end of file'