Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?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 */