CodeIgniter installed
[living-lab-site.git] / system / libraries / Javascript.php
diff --git a/system/libraries/Javascript.php b/system/libraries/Javascript.php
new file mode 100755 (executable)
index 0000000..34e0d70
--- /dev/null
@@ -0,0 +1,871 @@
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 5.1.6 or newer
+ *
+ * @package            CodeIgniter
+ * @author             ExpressionEngine Dev Team
+ * @copyright  Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @license            http://codeigniter.com/user_guide/license.html
+ * @link               http://codeigniter.com
+ * @since              Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * Javascript Class
+ *
+ * @package            CodeIgniter
+ * @subpackage Libraries
+ * @category   Javascript
+ * @author             ExpressionEngine Dev Team
+ * @link               http://codeigniter.com/user_guide/libraries/javascript.html
+ */
+class CI_Javascript {
+
+       var $_javascript_location = 'js';
+
+       public function __construct($params = array())
+       {
+               $defaults = array('js_library_driver' => 'jquery', 'autoload' => TRUE);
+
+               foreach ($defaults as $key => $val)
+               {
+                       if (isset($params[$key]) && $params[$key] !== "")
+                       {
+                               $defaults[$key] = $params[$key];
+                       }
+               }
+
+               extract($defaults);
+
+               $this->CI =& get_instance();
+
+               // load the requested js library
+               $this->CI->load->library('javascript/'.$js_library_driver, array('autoload' => $autoload));
+               // make js to refer to current library
+               $this->js =& $this->CI->$js_library_driver;
+
+               log_message('debug', "Javascript Class Initialized and loaded.  Driver used: $js_library_driver");
+       }
+
+       // -------------------------------------------------------------------- 
+       // Event Code
+       // --------------------------------------------------------------------
+
+       /**
+        * Blur
+        *
+        * Outputs a javascript library blur event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function blur($element = 'this', $js = '')
+       {
+               return $this->js->_blur($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Change
+        *
+        * Outputs a javascript library change event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function change($element = 'this', $js = '')
+       {
+               return $this->js->_change($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Click
+        *
+        * Outputs a javascript library click event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @param       boolean whether or not to return false
+        * @return      string
+        */
+       function click($element = 'this', $js = '', $ret_false = TRUE)
+       {
+               return $this->js->_click($element, $js, $ret_false);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Double Click
+        *
+        * Outputs a javascript library dblclick event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function dblclick($element = 'this', $js = '')
+       {
+               return $this->js->_dblclick($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Error
+        *
+        * Outputs a javascript library error event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function error($element = 'this', $js = '')
+       {
+               return $this->js->_error($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Focus
+        *
+        * Outputs a javascript library focus event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function focus($element = 'this', $js = '')
+       {
+               return $this->js->__add_event($focus, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Hover
+        *
+        * Outputs a javascript library hover event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - Javascript code for mouse over
+        * @param       string  - Javascript code for mouse out
+        * @return      string
+        */
+       function hover($element = 'this', $over, $out)
+       {
+               return $this->js->__hover($element, $over, $out);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Keydown
+        *
+        * Outputs a javascript library keydown event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function keydown($element = 'this', $js = '')
+       {
+               return $this->js->_keydown($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Keyup
+        *
+        * Outputs a javascript library keydown event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function keyup($element = 'this', $js = '')
+       {
+               return $this->js->_keyup($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Load
+        *
+        * Outputs a javascript library load event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function load($element = 'this', $js = '')
+       {
+               return $this->js->_load($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Mousedown
+        *
+        * Outputs a javascript library mousedown event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function mousedown($element = 'this', $js = '')
+       {
+               return $this->js->_mousedown($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Mouse Out
+        *
+        * Outputs a javascript library mouseout event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function mouseout($element = 'this', $js = '')
+       {
+               return $this->js->_mouseout($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Mouse Over
+        *
+        * Outputs a javascript library mouseover event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function mouseover($element = 'this', $js = '')
+       {
+               return $this->js->_mouseover($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Mouseup
+        *
+        * Outputs a javascript library mouseup event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function mouseup($element = 'this', $js = '')
+       {
+               return $this->js->_mouseup($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Output
+        *
+        * Outputs the called javascript to the screen
+        *
+        * @access      public
+        * @param       string  The code to output
+        * @return      string
+        */
+       function output($js)
+       {
+               return $this->js->_output($js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Ready
+        *
+        * Outputs a javascript library mouseup event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function ready($js)
+       {
+               return $this->js->_document_ready($js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Resize
+        *
+        * Outputs a javascript library resize event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function resize($element = 'this', $js = '')
+       {
+               return $this->js->_resize($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Scroll
+        *
+        * Outputs a javascript library scroll event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function scroll($element = 'this', $js = '')
+       {
+               return $this->js->_scroll($element, $js);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Unload
+        *
+        * Outputs a javascript library unload event
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       string  The code to execute
+        * @return      string
+        */
+       function unload($element = 'this', $js = '')
+       {
+               return $this->js->_unload($element, $js);
+       }
+
+       // -------------------------------------------------------------------- 
+       // Effects
+       // --------------------------------------------------------------------
+
+
+       /**
+        * Add Class
+        *
+        * Outputs a javascript library addClass event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - Class to add
+        * @return      string
+        */
+       function addClass($element = 'this', $class = '')
+       {
+               return $this->js->_addClass($element, $class);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Animate
+        *
+        * Outputs a javascript library animate event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function animate($element = 'this', $params = array(), $speed = '', $extra = '')
+       {
+               return $this->js->_animate($element, $params, $speed, $extra);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Fade In
+        *
+        * Outputs a javascript library hide event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function fadeIn($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_fadeIn($element, $speed, $callback);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Fade Out
+        *
+        * Outputs a javascript library hide event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function fadeOut($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_fadeOut($element, $speed, $callback);
+       }
+       // --------------------------------------------------------------------
+
+       /**
+        * Slide Up
+        *
+        * Outputs a javascript library slideUp event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function slideUp($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_slideUp($element, $speed, $callback);
+
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Remove Class
+        *
+        * Outputs a javascript library removeClass event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - Class to add
+        * @return      string
+        */
+       function removeClass($element = 'this', $class = '')
+       {
+               return $this->js->_removeClass($element, $class);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Slide Down
+        *
+        * Outputs a javascript library slideDown event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function slideDown($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_slideDown($element, $speed, $callback);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Slide Toggle
+        *
+        * Outputs a javascript library slideToggle event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function slideToggle($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_slideToggle($element, $speed, $callback);
+
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Hide
+        *
+        * Outputs a javascript library hide action
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function hide($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_hide($element, $speed, $callback);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Toggle
+        *
+        * Outputs a javascript library toggle event
+        *
+        * @access      public
+        * @param       string  - element
+        * @return      string
+        */
+       function toggle($element = 'this')
+       {
+               return $this->js->_toggle($element);
+
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Toggle Class
+        *
+        * Outputs a javascript library toggle class event
+        *
+        * @access      public
+        * @param       string  - element
+        * @return      string
+        */
+       function toggleClass($element = 'this', $class='')
+       {
+               return $this->js->_toggleClass($element, $class);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Show
+        *
+        * Outputs a javascript library show event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function show($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_show($element, $speed, $callback);
+       }
+
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Compile
+        *
+        * gather together all script needing to be output
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @return      string
+        */
+       function compile($view_var = 'script_foot', $script_tags = TRUE)
+       {
+               $this->js->_compile($view_var, $script_tags);
+       }
+
+       /**
+        * Clear Compile
+        *
+        * Clears any previous javascript collected for output
+        *
+        * @access      public
+        * @return      void
+        */
+       function clear_compile()
+       {
+               $this->js->_clear_compile();
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * External
+        *
+        * Outputs a <script> tag with the source as an external js file
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @return      string
+        */
+       function external($external_file = '', $relative = FALSE)
+       {
+               if ($external_file !== '')
+               {
+                       $this->_javascript_location = $external_file;
+               }
+               else
+               {
+                       if ($this->CI->config->item('javascript_location') != '')
+                       {
+                               $this->_javascript_location = $this->CI->config->item('javascript_location');
+                       }
+               }
+
+               if ($relative === TRUE OR strncmp($external_file, 'http://', 7) == 0 OR strncmp($external_file, 'https://', 8) == 0)
+               {
+                       $str = $this->_open_script($external_file);
+               }
+               elseif (strpos($this->_javascript_location, 'http://') !== FALSE)
+               {
+                       $str = $this->_open_script($this->_javascript_location.$external_file);
+               }
+               else
+               {
+                       $str = $this->_open_script($this->CI->config->slash_item('base_url').$this->_javascript_location.$external_file);
+               }
+
+               $str .= $this->_close_script();
+               return $str;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Inline
+        *
+        * Outputs a <script> tag
+        *
+        * @access      public
+        * @param       string  The element to attach the event to
+        * @param       boolean If a CDATA section should be added
+        * @return      string
+        */
+       function inline($script, $cdata = TRUE)
+       {
+               $str = $this->_open_script();
+               $str .= ($cdata) ? "\n// <![CDATA[\n{$script}\n// ]]>\n" : "\n{$script}\n";
+               $str .= $this->_close_script();
+
+               return $str;
+       }
+       
+       // --------------------------------------------------------------------
+
+       /**
+        * Open Script
+        *
+        * Outputs an opening <script>
+        *
+        * @access      private
+        * @param       string
+        * @return      string
+        */
+       function _open_script($src = '')
+       {
+               $str = '<script type="text/javascript" charset="'.strtolower($this->CI->config->item('charset')).'"';
+               $str .= ($src == '') ? '>' : ' src="'.$src.'">';
+               return $str;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Close Script
+        *
+        * Outputs an closing </script>
+        *
+        * @access      private
+        * @param       string
+        * @return      string
+        */
+       function _close_script($extra = "\n")
+       {
+               return "</script>$extra";
+       }
+
+
+       // --------------------------------------------------------------------
+       // --------------------------------------------------------------------
+       // AJAX-Y STUFF - still a testbed
+       // --------------------------------------------------------------------
+       // --------------------------------------------------------------------
+
+       /**
+        * Update
+        *
+        * Outputs a javascript library slideDown event
+        *
+        * @access      public
+        * @param       string  - element
+        * @param       string  - One of 'slow', 'normal', 'fast', or time in milliseconds
+        * @param       string  - Javascript callback function
+        * @return      string
+        */
+       function update($element = 'this', $speed = '', $callback = '')
+       {
+               return $this->js->_updater($element, $speed, $callback);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Generate JSON
+        *
+        * Can be passed a database result or associative array and returns a JSON formatted string
+        *
+        * @param       mixed   result set or array
+        * @param       bool    match array types (defaults to objects)
+        * @return      string  a json formatted string
+        */
+       function generate_json($result = NULL, $match_array_type = FALSE)
+       {
+               // JSON data can optionally be passed to this function
+               // either as a database result object or an array, or a user supplied array
+               if ( ! is_null($result))
+               {
+                       if (is_object($result))
+                       {
+                               $json_result = $result->result_array();
+                       }
+                       elseif (is_array($result))
+                       {
+                               $json_result = $result;
+                       }
+                       else
+                       {
+                               return $this->_prep_args($result);
+                       }
+               }
+               else
+               {
+                       return 'null';
+               }
+
+               $json = array();
+               $_is_assoc = TRUE;
+
+               if ( ! is_array($json_result) AND empty($json_result))
+               {
+                       show_error("Generate JSON Failed - Illegal key, value pair.");
+               }
+               elseif ($match_array_type)
+               {
+                       $_is_assoc = $this->_is_associative_array($json_result);
+               }
+
+               foreach ($json_result as $k => $v)
+               {
+                       if ($_is_assoc)
+                       {
+                               $json[] = $this->_prep_args($k, TRUE).':'.$this->generate_json($v, $match_array_type);
+                       }
+                       else
+                       {
+                               $json[] = $this->generate_json($v, $match_array_type);
+                       }
+               }
+
+               $json = implode(',', $json);
+
+               return $_is_assoc ? "{".$json."}" : "[".$json."]";
+
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Is associative array
+        *
+        * Checks for an associative array
+        *
+        * @access      public
+        * @param       type
+        * @return      type
+        */
+       function _is_associative_array($arr)
+       {
+               foreach (array_keys($arr) as $key => $val)
+               {
+                       if ($key !== $val)
+                       {
+                               return TRUE;
+                       }
+               }
+
+               return FALSE;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Prep Args
+        *
+        * Ensures a standard json value and escapes values
+        *
+        * @access      public
+        * @param       type
+        * @return      type
+        */
+       function _prep_args($result, $is_key = FALSE)
+       {
+               if (is_null($result))
+               {
+                       return 'null';
+               }
+               elseif (is_bool($result))
+               {
+                       return ($result === TRUE) ? 'true' : 'false';
+               }
+               elseif (is_string($result) OR $is_key)
+               {
+                       return '"'.str_replace(array('\\', "\t", "\n", "\r", '"', '/'), array('\\\\', '\\t', '\\n', "\\r", '\"', '\/'), $result).'"';                   
+               }
+               elseif (is_scalar($result))
+               {
+                       return $result;
+               }
+       }
+
+       // --------------------------------------------------------------------
+}
+// END Javascript Class
+
+/* End of file Javascript.php */
+/* Location: ./system/libraries/Javascript.php */
\ No newline at end of file