*/\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
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
},\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
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
* <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
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
}) - 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