X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fcore%2Fdom%2Felement.js;h=5df3d1987083a3e24d7786bc126b122b44da8307;hb=refs%2Ftags%2Fv3.6.1;hp=18c56e619886daf25120a4e3f5126200b4e1b110;hpb=48b1db88210b4160dce439c6e3e32e14af8c106b;p=ckeditor.git diff --git a/_source/core/dom/element.js b/_source/core/dom/element.js index 18c56e6..5df3d19 100644 --- a/_source/core/dom/element.js +++ b/_source/core/dom/element.js @@ -307,6 +307,7 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, /** * Moves the selection focus to this element. + * @function * @param {Boolean} defer Whether to asynchronously defer the * execution by 100 ms. * @example @@ -428,6 +429,13 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, name = 'className'; break; + case 'http-equiv': + name = 'httpEquiv'; + break; + + case 'name': + return this.$.name; + case 'tabindex': var tabIndex = standard.call( this, name ); @@ -713,6 +721,9 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, isEditable : function() { + if ( this.isReadOnly() ) + return false; + // Get the element name. var name = this.getName(); @@ -816,14 +827,15 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, }, /** - * Indicates that the element has defined attributes. + * Checks if the element has any defined attributes. + * @function * @returns {Boolean} True if the element has attributes. * @example - * var element = CKEDITOR.dom.element.createFromHtml( '
Example
' ); - * alert( element.hasAttributes() ); "true" + * var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test">Example</div>' ); + * alert( element.hasAttributes() ); // "true" * @example - * var element = CKEDITOR.dom.element.createFromHtml( '
Example
' ); - * alert( element.hasAttributes() ); "false" + * var element = CKEDITOR.dom.element.createFromHtml( '<div>Example</div>' ); + * alert( element.hasAttributes() ); // "false" */ hasAttributes : CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ? @@ -877,16 +889,33 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, }, /** - * Indicates whether a specified attribute is defined for this element. + * Checks if the specified attribute is defined for this element. * @returns {Boolean} True if the specified attribute is defined. - * @param (String) name The attribute name. + * @param {String} name The attribute name. * @example */ - hasAttribute : function( name ) + hasAttribute : (function() { - var $attr = this.$.attributes.getNamedItem( name ); - return !!( $attr && $attr.specified ); - }, + function standard( name ) + { + var $attr = this.$.attributes.getNamedItem( name ); + return !!( $attr && $attr.specified ); + } + + return ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) ? + function( name ) + { + // On IE < 8 the name attribute cannot be retrieved + // right after the element creation and setting the + // name with setAttribute. + if ( name == 'name' ) + return !!this.$.name; + + return standard.call( this, name ); + } + : + standard; + })(), /** * Hides this element (display:none). @@ -922,7 +951,12 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, }, /** - * @param {Boolean} [inlineOnly=true] Allow only inline elements to be merged. + * Merges sibling elements that are identical to this one.
+ *
+ * Identical child elements are also merged. For example:
+ * <b><i></i></b><b><i></i></b> => <b><i></i></b> + * @function + * @param {Boolean} [inlineOnly] Allow only inline elements to be merged. Defaults to "true". */ mergeSiblings : ( function() { @@ -1028,6 +1062,18 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, return this; }; } + else if ( CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ) + { + return function( name, value ) + { + // IE8 throws error when setting src attribute to non-ssl value. (#7847) + if ( name == 'src' && value.match( /^http:\/\// ) ) + try { standard.apply( this, arguments ); } catch( e ){} + else + standard.apply( this, arguments ); + return this; + }; + } else return standard; })(), @@ -1549,14 +1595,23 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, */ getDirection : function( useComputed ) { - return useComputed ? this.getComputedStyle( 'direction' ) : this.getStyle( 'direction' ) || this.getAttribute( 'dir' ); + return useComputed ? + this.getComputedStyle( 'direction' ) + // Webkit: offline element returns empty direction (#8053). + || this.getDirection() + || this.getDocument().$.dir + || this.getDocument().getBody().getDirection( 1 ) + : this.getStyle( 'direction' ) || this.getAttribute( 'dir' ); }, /** * Gets, sets and removes custom data to be stored as HTML5 data-* attributes. - * @name CKEDITOR.dom.element.data - * @param {String} name The name of the attribute, execluding the 'data-' part. + * @param {String} name The name of the attribute, excluding the 'data-' part. * @param {String} [value] The value to set. If set to false, the attribute will be removed. + * @example + * element.data( 'extra-info', 'test' ); // appended the attribute data-extra-info="test" to the element + * alert( element.data( 'extra-info' ) ); // "test" + * element.data( 'extra-info', false ); // remove the data-extra-info attribute from the element */ data : function ( name, value ) { @@ -1588,11 +1643,12 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, } /** - * Update the element's size with box model awareness. - * @name CKEDITOR.dom.element.setSize - * @param {String} type [width|height] + * Sets the element size considering the box model. + * @name CKEDITOR.dom.element.prototype.setSize + * @function + * @param {String} type The dimension to set. It accepts "width" and "height". * @param {Number} size The length unit in px. - * @param isBorderBox Apply the {@param width} and {@param height} based on border box model. + * @param {Boolean} isBorderBox Apply the size based on the border box model. */ CKEDITOR.dom.element.prototype.setSize = function( type, size, isBorderBox ) { @@ -1606,17 +1662,18 @@ CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, }; /** - * Get the element's size, possibly with box model awareness. - * @name CKEDITOR.dom.element.getSize - * @param {String} type [width|height] - * @param {Boolean} contentSize Get the {@param width} or {@param height} based on border box model. + * Gets the element size, possibly considering the box model. + * @name CKEDITOR.dom.element.prototype.getSize + * @function + * @param {String} type The dimension to get. It accepts "width" and "height". + * @param {Boolean} isBorderBox Get the size based on the border box model. */ - CKEDITOR.dom.element.prototype.getSize = function( type, contentSize ) + CKEDITOR.dom.element.prototype.getSize = function( type, isBorderBox ) { var size = Math.max( this.$[ 'offset' + CKEDITOR.tools.capitalize( type ) ], this.$[ 'client' + CKEDITOR.tools.capitalize( type ) ] ) || 0; - if ( contentSize ) + if ( isBorderBox ) size -= marginAndPaddingSize.call( this, type ); return size;