JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0.2
[ckeditor.git] / _source / core / tools.js
index 6f95428..c9d9877 100644 (file)
@@ -19,6 +19,22 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
         */\r
        CKEDITOR.tools =\r
        {\r
+               /**\r
+                * Compare the elements of two arrays.\r
+                * @param {Array} arrayA An array to be compared.\r
+                * @param {Array} arrayB The other array to be compared.\r
+                * @returns {Boolean} "true" is the arrays have the same lenght and\r
+                *              their elements match.\r
+                * @example\r
+                * var a = [ 1, 'a', 3 ];\r
+                * var b = [ 1, 3, 'a' ];\r
+                * var c = [ 1, 'a', 3 ];\r
+                * var d = [ 1, 'a', 3, 4 ];\r
+                *\r
+                * alert( CKEDITOR.tools.arrayCompare( a, b ) );  // false\r
+                * alert( CKEDITOR.tools.arrayCompare( a, c ) );  // true\r
+                * alert( CKEDITOR.tools.arrayCompare( a, d ) );  // false\r
+                */\r
                arrayCompare : function( arrayA, arrayB )\r
                {\r
                        if ( !arrayA && !arrayB )\r
@@ -189,6 +205,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        return ( !!object && object instanceof Array );\r
                },\r
 \r
+               isEmpty : function ( object )\r
+               {\r
+                       for ( var i in object )\r
+                       {\r
+                               if ( object.hasOwnProperty( i ) )\r
+                                       return false;\r
+                       }\r
+                       return true;\r
+               },\r
                /**\r
                 * Transforms a CSS property name to its relative DOM style name.\r
                 * @param {String} cssName The CSS property name.\r
@@ -267,6 +292,19 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                },\r
 \r
                /**\r
+                * Replace characters can't be represented through CSS Selectors string\r
+                * by CSS Escape Notation where the character escape sequence consists\r
+                * of a backslash character (\) followed by the orginal characters.\r
+                * Ref: http://www.w3.org/TR/css3-selectors/#grammar\r
+                * @param cssSelectText\r
+                * @return the escaped selector text.\r
+                */\r
+               escapeCssSelector : function( cssSelectText )\r
+               {\r
+                       return cssSelectText.replace( /[\s#:.,$*^\[\]()~=+>]/g, '\\$&' );\r
+               },\r
+\r
+               /**\r
                 * Gets a unique number for this CKEDITOR execution session. It returns\r
                 * progressive numbers starting at 1.\r
                 * @function\r
@@ -439,6 +477,24 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                        return -1;\r
                                },\r
 \r
+               /**\r
+                * Creates a function that will always execute in the context of a\r
+                * specified object.\r
+                * @param {Function} func The function to be executed.\r
+                * @param {Object} obj The object to which bind the execution context.\r
+                * @returns {Function} The function that can be used to execute the\r
+                *              "func" function in the context of "obj".\r
+                * @example\r
+                * var obj = { text : 'My Object' };\r
+                *\r
+                * function alertText()\r
+                * {\r
+                *     alert( this.text );\r
+                * }\r
+                *\r
+                * var newFunc = <b>CKEDITOR.tools.bind( alertText, obj )</b>;\r
+                * newFunc();  // Alerts "My Object".\r
+                */\r
                bind : function( func, obj )\r
                {\r
                        return function() { return func.apply( obj, arguments ); };\r
@@ -450,11 +506,11 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                 * <ul>\r
                 * <li> Static fields </li>\r
                 * <li> Private fields </li>\r
-                * <li> Public(prototype) fields </li>\r
+                * <li> Public (prototype) fields </li>\r
                 * <li> Chainable base class constructor </li>\r
                 * </ul>\r
-                *\r
-                * @param {Object} definiton (Optional)The class definiton object.\r
+                * @param {Object} definiton The class definiton object.\r
+                * @returns {Function} A class-like JavaScript function.\r
                 */\r
                createClass : function( definition )\r
                {\r
@@ -507,6 +563,22 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        return $;\r
                },\r
 \r
+               /**\r
+                * Creates a function reference that can be called later using\r
+                * CKEDITOR.tools.callFunction. This approach is specially useful to\r
+                * make DOM attribute function calls to JavaScript defined functions.\r
+                * @param {Function} fn The function to be executed on call.\r
+                * @param {Object} [scope] The object to have the context on "fn" execution.\r
+                * @returns {Number} A unique reference to be used in conjuction with\r
+                *              CKEDITOR.tools.callFunction.\r
+                * @example\r
+                * var ref = <b>CKEDITOR.tools.addFunction</b>(\r
+                *     function()\r
+                *     {\r
+                *         alert( 'Hello!');\r
+                *     });\r
+                * CKEDITOR.tools.callFunction( ref );  // Hello!\r
+                */\r
                addFunction : function( fn, scope )\r
                {\r
                        return functions.push( function()\r
@@ -515,10 +587,26 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                }) - 1;\r
                },\r
 \r
-               callFunction : function( index )\r
+               /**\r
+                * Executes a function based on the reference created with\r
+                * CKEDITOR.tools.addFunction.\r
+                * @param {Number} ref The function reference created with\r
+                *              CKEDITOR.tools.addFunction.\r
+                * @param {[Any,[Any,...]} params Any number of parameters to be passed\r
+                *              to the executed function.\r
+                * @returns {Any} The return value of the function.\r
+                * @example\r
+                * var ref = CKEDITOR.tools.addFunction(\r
+                *     function()\r
+                *     {\r
+                *         alert( 'Hello!');\r
+                *     });\r
+                * <b>CKEDITOR.tools.callFunction( ref )</b>;  // Hello!\r
+                */\r
+               callFunction : function( ref )\r
                {\r
-                       var fn = functions[ index ];\r
-                       return fn.apply( window, Array.prototype.slice.call( arguments, 1 ) );\r
+                       var fn = functions[ ref ];\r
+                       return fn && fn.apply( window, Array.prototype.slice.call( arguments, 1 ) );\r
                },\r
 \r
                cssLength : (function()\r