Changeset 6190


Ignore:
Timestamp:
12/08/10 15:26:34 (3 years ago)
Author:
garry.yao
Message:

Reintegrate 3.5.x branch.

Location:
CKEditor/trunk
Files:
1 added
1 deleted
156 edited
16 copied

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk

  • CKEditor/trunk/CHANGES.html

    r6189 r6190  
    3535                CKEditor Changelog 
    3636        </h1> 
     37        <h3> 
     38                        CKEditor 3.5 (SVN)</h3> 
     39        <p> 
     40                        New features:</p> 
     41        <ul> 
     42                <li><a href="http://dev.ckeditor.com/ticket/4090">#4090</a> : Full Adobe AIR support.</li> 
     43                <li><a href="http://dev.ckeditor.com/ticket/5084">#5084</a> : Dialogs are now resizable with a grip in the bottom of the dialog.</li> 
     44                <li><a href="http://dev.ckeditor.com/ticket/5755">#5755</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.dialog_buttonsOrder">dialog_buttonsOrder</a> setting, making it possible to control the buttons order.</li> 
     45                <li><a href="http://dev.ckeditor.com/ticket/4648">#4648</a> : Added the new Iframe plugin.</li> 
     46                <li><a href="http://dev.ckeditor.com/ticket/6010">#6010</a> : The "automatic" option of the font/background color panel now represents the real color.</li> 
     47                <li><a href="http://dev.ckeditor.com/ticket/5654">#5654</a> : Added the new placeholder plugin.</li> 
     48                <li><a href="http://dev.ckeditor.com/ticket/6334">#6334</a> : CKEditor now uses <a href="http://www.w3.org/TR/2010/WD-html5-20101019/elements.html#embedding-custom-non-visible-data-with-the-data-attributes">HTML5's data-* attributes</a> for its internal attributes.</li> 
     49                <li><a href="http://dev.ckeditor.com/ticket/6103">#6103</a> : It's now possible to control the styling of inline read-only elements with the disableReadonlyStyling setting. It's also possible to avoid inline-styling any element by setting its data-cke-nostyle attribute to "1".</li> 
     50                <li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : "fillEmptyBlocks" configuration option of v2 is now available.</li> 
     51                <li><a href="http://dev.ckeditor.com/ticket/5367">#5367</a> : New "CKEDITOR.editor::insertText" method (check api.html sample page for usages) is now provided to insert plain text into editor.</li> 
     52                <li><a href="http://dev.ckeditor.com/ticket/5367">#5915</a> : Hiding dialog tabs.</li> 
     53        </ul> 
     54        <p> 
     55                        Fixed issues:</p> 
     56        <ul> 
     57                <li><a href="http://dev.ckeditor.com/ticket/4821">#4821</a> : Icons in the toolbar were distorted with IE and zoom != 100%.</li> 
     58                <li><a href="http://dev.ckeditor.com/ticket/5587">#5587</a> : Visual improvements in dialogs.</li> 
     59                <li><a href="http://dev.ckeditor.com/ticket/4652">#4652</a> : Config for disable editor context menu.</li> 
     60                <li><a href="http://dev.ckeditor.com/ticket/5599">#5599</a> : Labels for special characters need to be resourced.</li> 
     61                <li><a href="http:/dev.ckeditor.com/ticket/6419">#6419</a> : IE: List creation by merging problem.</li> 
     62                <li><a href="http:/dev.ckeditor.com/ticket/6502">#6502</a> : Remove IE6 image preloading.</li> 
     63                <li>Updated the following language files:<ul> 
     64                        <li>Hebrew;</li> 
     65                </ul></li> 
     66        </ul> 
    3767        <h3> 
    3868                        CKEditor 3.4.3 (SVN)</h3> 
  • CKEditor/trunk/_samples/api.html

    r5900 r6190  
    3333        // Get the editor instance that we want to interact with. 
    3434        var oEditor = CKEDITOR.instances.editor1; 
    35         var value = document.getElementById( 'plainArea' ).value; 
     35        var value = document.getElementById( 'htmlArea' ).value; 
    3636 
    3737        // Check the active editing mode. 
     
    4545} 
    4646 
     47function InsertText() 
     48{ 
     49        // Get the editor instance that we want to interact with. 
     50        var oEditor = CKEDITOR.instances.editor1; 
     51        var value = document.getElementById( 'txtArea' ).value; 
     52 
     53        // Check the active editing mode. 
     54        if ( oEditor.mode == 'wysiwyg' ) 
     55        { 
     56                // Insert as plain text. 
     57                oEditor.insertText( value ); 
     58        } 
     59        else 
     60                alert( 'You must be on WYSIWYG mode!' ); 
     61} 
     62 
    4763function SetContents() 
    4864{ 
    4965        // Get the editor instance that we want to interact with. 
    5066        var oEditor = CKEDITOR.instances.editor1; 
    51         var value = document.getElementById( 'plainArea' ).value; 
     67        var value = document.getElementById( 'htmlArea' ).value; 
    5268 
    5369        // Set the editor contents (replace the actual one). 
     
    132148                        <input onclick="GetContents();" type="button" value="Get Editor Contents (XHTML)" /> 
    133149                        <br /> 
    134                         <textarea cols="80" id="plainArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML&lt;/p&gt;</textarea> 
     150                        <textarea cols="80" id="htmlArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML&lt;/p&gt;</textarea> 
    135151                        <br /> 
     152                        <br /> 
     153                        <input onclick="InsertText();" type="button" value="Insert Text" /> 
     154                        <br /> 
     155                        <textarea cols="80" id="txtArea" rows="3">   First line with some leading whitespaces. 
     156 
     157Second line of text preceding by two line-breaks.</textarea> 
    136158                        <br /> 
    137159                        <input onclick="ExecuteCommand('bold');" type="button" value="Execute &quot;bold&quot; Command" /> 
  • CKEditor/trunk/_samples/index.html

    r5983 r6190  
    4444                <li><a href="output_for_flash.html">Output for Flash</a></li> 
    4545                <li><a href="autogrow.html">AutoGrow plugin</a></li> 
     46                <li><a href="placeholder.html">Placeholder plugin</a></li> 
    4647        </ul> 
    4748        <div id="footer"> 
  • CKEditor/trunk/_source/core/ckeditor_base.js

    r6008 r6190  
    1313// ckeditor_source.js and ckeditor_basic_source.js files. 
    1414 
    15 // if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',rev:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})(); 
     15// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',rev:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})(); 
    1616 
    1717// #### Raw code 
     
    127127                                // In IE (only) the script.src string is the raw valued entered in the 
    128128                                // HTML. Other browsers return the full resolved URL instead. 
    129                                 if ( path.indexOf('://') == -1 ) 
     129                                if ( path.indexOf(':/') == -1 ) 
    130130                                { 
    131131                                        // Absolute path. 
     
    169169                        { 
    170170                                // If this is not a full or absolute path. 
    171                                 if ( resource.indexOf('://') == -1 && resource.indexOf( '/' ) !== 0 ) 
     171                                if ( resource.indexOf(':/') == -1 && resource.indexOf( '/' ) !== 0 ) 
    172172                                        resource = this.basePath + resource; 
    173173 
  • CKEditor/trunk/_source/core/config.js

    r6103 r6190  
    293293                'horizontalrule,' + 
    294294                'htmldataprocessor,' + 
     295                'iframe,' + 
    295296                'image,' + 
    296297                'indent,' + 
  • CKEditor/trunk/_source/core/dom/document.js

    r6096 r6190  
    166166                { 
    167167                        var head = this.$.getElementsByTagName( 'head' )[0]; 
     168                        if ( !head ) 
     169                                head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true ); 
     170                        else 
    168171                        head = new CKEDITOR.dom.element( head ); 
    169172 
     
    221224                                        return win; 
    222225                                })(); 
     226                }, 
     227 
     228                /** 
     229                 * Defines the document contents through document.write. Note that the 
     230                 * previous document contents will be lost (cleaned). 
     231                 * @since 3.5 
     232                 * @param {String} html The HTML defining the document contents. 
     233                 * @example 
     234                 * document.write( 
     235                 *     '&lt;html&gt;' + 
     236                 *         '&lt;head&gt;&lt;title&gt;Sample Doc&lt;/title&gt;&lt;/head&gt;' + 
     237                 *         '&lt;body&gt;Document contents created by code&lt;/body&gt;' + 
     238                 *      '&lt;/html&gt;' ); 
     239                 */ 
     240                write : function( html ) 
     241                { 
     242                        // Don't leave any history log in IE. (#5657) 
     243                        this.$.open( 'text/html', 'replace' ); 
     244 
     245                        // Support for custom document.domain in IE. 
     246                        CKEDITOR.env.isCustomDomain() &&  ( this.$.domain = document.domain ); 
     247 
     248                        this.$.write( html ); 
     249                        this.$.close(); 
    223250                } 
    224251        }); 
  • CKEditor/trunk/_source/core/dom/domobject.js

    r6085 r6190  
    168168         * Sets a data slot value for this object. These values are shared by all 
    169169         * instances pointing to that same DOM object. 
     170         * <strong>Note:</strong> The created data slot is only guarantied to be available on this unique dom node, 
     171         * thus any wish to continue access it from other element clones (either created by clone node or from innerHtml) 
     172         * will fail, for such usage, please use {@link CKEDITOR.dom.element::setAttribute} instead. 
    170173         * @name CKEDITOR.dom.domObject.prototype.setCustomData 
    171174         * @function 
     
    201204        domObjectProto.getCustomData = function( key ) 
    202205        { 
    203                 var expandoNumber = this.$._cke_expando, 
     206                var expandoNumber = this.$[ 'data-cke-expando' ], 
    204207                        dataSlot = expandoNumber && customData[ expandoNumber ]; 
    205208 
     
    212215        domObjectProto.removeCustomData = function( key ) 
    213216        { 
    214                 var expandoNumber = this.$._cke_expando, 
     217                var expandoNumber = this.$[ 'data-cke-expando' ], 
    215218                        dataSlot = expandoNumber && customData[ expandoNumber ], 
    216219                        retval = dataSlot && dataSlot[ key ]; 
     
    234237                this.removeAllListeners(); 
    235238 
    236                 var expandoNumber = this.$._cke_expando; 
     239                var expandoNumber = this.$[ 'data-cke-expando' ]; 
    237240                expandoNumber && delete customData[ expandoNumber ]; 
    238241        }; 
     
    247250        domObjectProto.getUniqueId = function() 
    248251        { 
    249                 return this.$._cke_expando || ( this.$._cke_expando = CKEDITOR.tools.getNextNumber() ); 
     252                return this.$[ 'data-cke-expando' ] || ( this.$[ 'data-cke-expando' ] = CKEDITOR.tools.getNextNumber() ); 
    250253        }; 
    251254 
  • CKEditor/trunk/_source/core/dom/element.js

    r6098 r6190  
    1 /* 
     1/* 
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
     
    308308                /** 
    309309                 * Moves the selection focus to this element. 
     310                 * @param  {Boolean} defer Whether to asynchronously defer the 
     311                 *              execution by 100 ms. 
    310312                 * @example 
    311313                 * var element = CKEDITOR.document.getById( 'myTextarea' ); 
    312314                 * <b>element.focus()</b>; 
    313315                 */ 
    314                 focus : function() 
    315                 { 
     316                focus : (function() 
     317                { 
     318                        function exec() 
     319                        { 
    316320                        // IE throws error if the element is not visible. 
    317321                        try 
     
    321325                        catch (e) 
    322326                        {} 
    323                 }, 
     327                        } 
     328 
     329                        return function( defer ) 
     330                        { 
     331                                if ( defer ) 
     332                                        CKEDITOR.tools.setTimeout( exec, 100, this ); 
     333                                else 
     334                                        exec.call( this ); 
     335                        } 
     336                }()), 
    324337 
    325338                /** 
     
    726739                                var attribute = thisAttribs[ i ]; 
    727740 
    728                                 if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != '_cke_expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) ) 
     741                                if ( attribute.nodeName == '_moz_dirty' ) 
     742                                        continue; 
     743 
     744                                if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != 'data-cke-expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) ) 
    729745                                        return false; 
    730746                        } 
     
    737753                                { 
    738754                                        attribute = otherAttribs[ i ]; 
    739                                         if ( attribute.specified && attribute.nodeName != '_cke_expando' 
     755                                        if ( attribute.specified && attribute.nodeName != 'data-cke-expando' 
    740756                                                        && attribute.nodeValue != this.getAttribute( attribute.nodeName ) ) 
    741757                                                return false; 
     
    787803                                var child = children.getItem( i ); 
    788804 
    789                                 if ( child.type == CKEDITOR.NODE_ELEMENT && child.getAttribute( '_cke_bookmark' ) ) 
     805                                if ( child.type == CKEDITOR.NODE_ELEMENT && child.data( 'cke-bookmark' ) ) 
    790806                                        continue; 
    791807 
     
    832848 
    833849                                                        // Attributes to be ignored. 
    834                                                         case '_cke_expando' : 
     850                                                        case 'data-cke-expando' : 
    835851                                                                continue; 
    836852 
     
    852868 
    853869                                        // The _moz_dirty attribute might get into the element after pasting (#5455) 
    854                                         var execludeAttrs = { _cke_expando : 1, _moz_dirty : 1 }; 
     870                                        var execludeAttrs = { 'data-cke-expando' : 1, _moz_dirty : 1 }; 
    855871 
    856872                                        return attrsNum > 0 && 
     
    915931                                        var pendingNodes = []; 
    916932 
    917                                         while ( sibling.getAttribute( '_cke_bookmark' ) 
     933                                        while ( sibling.data( 'cke-bookmark' ) 
    918934                                                || sibling.isEmptyInlineRemoveable() ) 
    919935                                        { 
     
    14811497                        // Replace the node. 
    14821498                        this.getParent() && this.$.parentNode.replaceChild( newNode.$, this.$ ); 
    1483                         newNode.$._cke_expando = this.$._cke_expando; 
     1499                        newNode.$[ 'data-cke-expando' ] = this.$[ 'data-cke-expando' ]; 
    14841500                        this.$ = newNode.$; 
    14851501                }, 
     
    15231539 
    15241540                /** 
    1525                  *  Update the element's size with box model awareness. 
    1526                  * @name CKEDITOR.dom.element.setSize 
    1527                  * @param {String} type [width|height] 
    1528                  * @param {Number} size The length unit in px. 
    1529                  * @param isBorderBox Apply the {@param width} and {@param height} based on border box model. 
    1530                  */ 
    1531                 setSize : ( function() 
    1532                 { 
    1533                         var sides = { 
    1534                                 width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ], 
    1535                                 height : [ "border-top-width", "border-bottom-width", "padding-top",  "padding-bottom" ] 
    1536                         }; 
    1537  
    1538                         return function( type, size, isBorderBox ) 
    1539                                 { 
    1540                                         if ( typeof size == 'number' ) 
    1541                                         { 
    1542                                                 if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) ) 
    1543                                                 { 
    1544                                                         var     adjustment = 0; 
    1545                                                         for ( var i = 0, len = sides[ type ].length; i < len; i++ ) 
    1546                                                                 adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0; 
    1547                                                         size -= adjustment; 
    1548                                                 } 
    1549                                                 this.setStyle( type, size + 'px' ); 
    1550                                         } 
    1551                                 }; 
    1552                 })(), 
    1553  
    1554                 /** 
    15551541                 * Gets element's direction. Supports both CSS 'direction' prop and 'dir' attr. 
    15561542                 */ 
     
    15581544                { 
    15591545                        return useComputed ? this.getComputedStyle( 'direction' ) : this.getStyle( 'direction' ) || this.getAttribute( 'dir' ); 
     1546                }, 
     1547 
     1548                /** 
     1549                 * Gets, sets and removes custom data to be stored as HTML5 data-* attributes. 
     1550                 * @name CKEDITOR.dom.element.data 
     1551                 * @param {String} name The name of the attribute, execluding the 'data-' part. 
     1552                 * @param {String} [value] The value to set. If set to false, the attribute will be removed. 
     1553                 */ 
     1554                data : function ( name, value ) 
     1555                { 
     1556                        name = 'data-' + name; 
     1557                        if ( value === undefined ) 
     1558                                return this.getAttribute( name ); 
     1559                        else if ( value === false ) 
     1560                                this.removeAttribute( name ); 
     1561                        else 
     1562                                this.setAttribute( name, value ); 
    15601563                } 
    15611564        }); 
     1565 
     1566( function() 
     1567{ 
     1568        var sides = { 
     1569                width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ], 
     1570                height : [ "border-top-width", "border-bottom-width", "padding-top",  "padding-bottom" ] 
     1571        }; 
     1572 
     1573        function marginAndPaddingSize( type ) 
     1574        { 
     1575                var adjustment = 0; 
     1576                for ( var i = 0, len = sides[ type ].length; i < len; i++ ) 
     1577                        adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0; 
     1578                return adjustment; 
     1579        } 
     1580 
     1581        /** 
     1582         * Update the element's size with box model awareness. 
     1583         * @name CKEDITOR.dom.element.setSize 
     1584         * @param {String} type [width|height] 
     1585         * @param {Number} size The length unit in px. 
     1586         * @param isBorderBox Apply the {@param width} and {@param height} based on border box model. 
     1587         */ 
     1588        CKEDITOR.dom.element.prototype.setSize = function( type, size, isBorderBox ) 
     1589                { 
     1590                        if ( typeof size == 'number' ) 
     1591                        { 
     1592                                if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) ) 
     1593                                        size -= marginAndPaddingSize.call( this, type ); 
     1594 
     1595                                this.setStyle( type, size + 'px' ); 
     1596                        } 
     1597                }; 
     1598 
     1599        /** 
     1600         * Get the element's size, possibly with box model awareness. 
     1601         * @name CKEDITOR.dom.element.getSize 
     1602         * @param {String} type [width|height] 
     1603         * @param {Boolean} contentSize Get the {@param width} or {@param height} based on border box model. 
     1604         */ 
     1605        CKEDITOR.dom.element.prototype.getSize = function( type, contentSize ) 
     1606                { 
     1607                        var size = Math.max( this.$[ 'offset' + CKEDITOR.tools.capitalize( type )  ], 
     1608                                this.$[ 'client' + CKEDITOR.tools.capitalize( type )  ] ) || 0; 
     1609 
     1610                        if ( contentSize ) 
     1611                                size -= marginAndPaddingSize.call( this, type ); 
     1612 
     1613                        return size; 
     1614                }; 
     1615})(); 
  • CKEditor/trunk/_source/core/dom/node.js

    r6102 r6190  
    108108                        var $clone = this.$.cloneNode( includeChildren ); 
    109109 
    110                         if ( !cloneId ) 
    111                         { 
    112                                 var removeIds = function( node ) 
    113                                 { 
    114                                         if ( node.nodeType != CKEDITOR.NODE_ELEMENT ) 
    115                                                 return; 
    116  
    117                                         node.removeAttribute( 'id', false ) ; 
    118                                         node.removeAttribute( '_cke_expando', false ) ; 
    119  
     110                        var removeIds = function( node ) 
     111                        { 
     112                                if ( node.nodeType != CKEDITOR.NODE_ELEMENT ) 
     113                                        return; 
     114 
     115                                if ( !cloneId ) 
     116                                        node.removeAttribute( 'id', false ); 
     117                                node.removeAttribute( 'data-cke-expando', false ); 
     118 
     119                                if ( includeChildren ) 
     120                                { 
    120121                                        var childs = node.childNodes; 
    121                                         for ( var i=0 ; i < childs.length ; i++ ) 
     122                                        for ( var i=0; i < childs.length; i++ ) 
    122123                                                removeIds( childs[ i ] ); 
    123                                 }; 
    124  
    125                                 // The "id" attribute should never be cloned to avoid duplication. 
    126                                 removeIds( $clone ); 
    127                         } 
     124                                } 
     125                        }; 
     126 
     127                        // The "id" attribute should never be cloned to avoid duplication. 
     128                        removeIds( $clone ); 
    128129 
    129130                        return new CKEDITOR.dom.node( $clone ); 
     
    244245                getDocument : function() 
    245246                { 
    246                         var document = new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument ); 
    247  
    248                         return ( 
    249                         this.getDocument = function() 
    250                                 { 
    251                                         return document; 
    252                                 })(); 
     247                        return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument ); 
    253248                }, 
    254249 
  • CKEditor/trunk/_source/core/dom/range.js

    r6069 r6190  
    309309                            && node.getName() in CKEDITOR.dtd.$removeEmpty 
    310310                            || !CKEDITOR.tools.trim( node.getText() ) 
    311                             || node.getParent().hasAttribute( '_cke_bookmark' ); 
     311                            || node.getParent().data( 'cke-bookmark' ); 
    312312        } 
    313313 
     
    404404 
    405405                        startNode = this.document.createElement( 'span' ); 
    406                         startNode.setAttribute( '_cke_bookmark', 1 ); 
     406                        startNode.data( 'cke-bookmark', 1 ); 
    407407                        startNode.setStyle( 'display', 'none' ); 
    408408 
     
    714714 
    715715                        if ( startNode.is && startNode.is( 'span' ) 
    716                                 && startNode.hasAttribute( '_cke_bookmark' ) ) 
     716                                && startNode.data( 'cke-bookmark' ) ) 
    717717                                this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START ); 
    718718                        if ( endNode && endNode.is && endNode.is( 'span' ) 
    719                                 && endNode.hasAttribute( '_cke_bookmark' ) ) 
     719                                && endNode.data( 'cke-bookmark' ) ) 
    720720                                this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END ); 
    721721                }, 
     
    923923                                                                // We need to check for the bookmark attribute because IE insists on 
    924924                                                                // rendering the display:none nodes we use for bookmarks. (#3363) 
    925                                                                 if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) ) 
     925                                                                if ( sibling.$.offsetWidth > 0 && !sibling.data( 'cke-bookmark' ) ) 
    926926                                                                { 
    927927                                                                        // We'll accept it only if we need 
     
    10821082                                                                // We need to check for the bookmark attribute because IE insists on 
    10831083                                                                // rendering the display:none nodes we use for bookmarks. (#3363) 
    1084                                                                 if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) ) 
     1084                                                                if ( sibling.$.offsetWidth > 0 && !sibling.data( 'cke-bookmark' ) ) 
    10851085                                                                { 
    10861086                                                                        // We'll accept it only if we need 
  • CKEditor/trunk/_source/core/dom/walker.js

    r6113 r6190  
    374374                        return ( node && node.getName 
    375375                                        && node.getName() == 'span' 
    376                                         && node.hasAttribute( '_cke_bookmark' ) ); 
     376                                        && node.data( 'cke-bookmark' ) ); 
    377377                } 
    378378 
  • CKEditor/trunk/_source/core/editor.js

    r6044 r6190  
    228228                } 
    229229 
     230                // Load the Adobe AIR plugin conditionally. 
     231                CKEDITOR.env.air && ( plugins += ',adobeair' ); 
     232 
    230233                // Load all plugins defined in the "plugins" setting. 
    231234                CKEDITOR.plugins.load( plugins.split( ',' ), function( plugins ) 
     
    757760 
    758761                /** 
     762                 * Insert text content into the currently selected position in the 
     763                 * editor, in WYSIWYG mode, styles of the selected element will be applied to the inserted text, 
     764                 * spaces around the text will be leaving untouched. 
     765                 * <strong>Note:</strong> two subsequent line-breaks will introduce one paragraph, which element depends on {@link CKEDITOR.config.enterMode}; 
     766                 * A single line-break will be instead translated into one &lt;br /&gt;. 
     767                 * @since 3.5 
     768                 * @param {String} text Text to be inserted into the editor. 
     769                 * @example 
     770                 * CKEDITOR.instances.editor1.<b>insertText( ' line1 \n\n line2' )</b>; 
     771                 */ 
     772                insertText : function( text ) 
     773                { 
     774                        this.fire( 'insertText', text ); 
     775                }, 
     776 
     777                /** 
    759778                 * Inserts an element into the currently selected position in the 
    760779                 * editor. 
  • CKEditor/trunk/_source/core/htmlparser/element.js

    r5206 r6190  
    3535        this.children = []; 
    3636 
    37         var tagName = attributes._cke_real_element_type || name; 
     37        var tagName = attributes[ 'data-cke-real-element-type' ] || name; 
    3838 
    3939        var dtd                 = CKEDITOR.dtd, 
  • CKEditor/trunk/_source/core/htmlparser/fragment.js

    r5990 r6190  
    126126                                if ( element.attributes 
    127127                                         && ( realElementName = 
    128                                                   element.attributes[ '_cke_real_element_type' ] ) ) 
     128                                                  element.attributes[ 'data-cke-real-element-type' ] ) ) 
    129129                                        elementName = realElementName; 
    130130                                else 
  • CKEditor/trunk/_source/core/loader.js

    r5982 r6190  
    6060                        'core/htmlparser/filter'        : [ 'core/htmlparser' ], 
    6161                        'core/htmlparser/basicwriter': [ 'core/htmlparser' ], 
    62                         'core/imagecacher'              : [ 'core/dom/element', 'core/event' ], 
    6362                        'core/lang'                             : [], 
    6463                        'core/plugins'                  : [ 'core/resourcemanager' ], 
    6564                        'core/resourcemanager'  : [ 'core/scriptloader', 'core/tools' ], 
    6665                        'core/scriptloader'             : [ 'core/dom/element', 'core/env' ], 
    67                         'core/skins'                    : [ 'core/imagecacher', 'core/scriptloader' ], 
     66                        'core/skins'                    : [ 'core/scriptloader' ], 
    6867                        'core/themes'                   : [ 'core/resourcemanager' ], 
    6968                        'core/tools'                    : [ 'core/env' ], 
  • CKEditor/trunk/_source/core/skins.js

    r6024 r6190  
    1818        // Holds the list of loaded skins. 
    1919        var loaded = {}, 
    20                 preloaded = {}, 
    2120                paths = {}; 
    2221 
     
    5352                                                        return 'url(' + baseUrl + opener +  path + closer + ')'; 
    5453                                        } ); 
    55                 } 
    56  
    57                 // Check if we need to preload images from it. 
    58                 var preload = skinDefinition.preload; 
    59                 if ( preload && preload.length > 0 ) 
    60                 { 
    61                         if ( !preloaded[ skinName ] ) 
    62                         { 
    63                                 // Prepare image URLs 
    64                                 appendSkinPath( preload ); 
    65  
    66                                 // Get preloader event dispatcher object. 
    67                                 preloaded[ skinName ] = CKEDITOR.imageCacher.load( preload ); 
    68                         } 
    69  
    70                         if ( !preloaded[ skinName ].finished ) 
    71                         { 
    72                                 // Bind listener for this editor instance. 
    73                                 preloaded[ skinName ].on( 'loaded', function() 
    74                                         { 
    75                                                 loadPart( editor, skinName, part, callback ); 
    76                                         } 
    77                                 ); 
    78  
    79                                 // Execution will be continued from event listener. 
    80                                 return; 
    81                         } 
    8254                } 
    8355 
  • CKEditor/trunk/_source/core/tools.js

    r5956 r6190  
    639639                        return functions.push( function() 
    640640                                { 
    641                                         fn.apply( scope || this, arguments ); 
     641                                        return fn.apply( scope || this, arguments ); 
    642642                                }) - 1; 
    643643                }, 
  • CKEditor/trunk/_source/core/ui.js

    r4858 r6190  
    9292}; 
    9393 
     94CKEDITOR.event.implementOn( CKEDITOR.ui ); 
     95 
    9496/** 
    9597 * (Virtual Class) Do not call this constructor. This class is not really part 
  • CKEditor/trunk/_source/lang/_translationstatus.txt

    r6186 r6190  
    22For licensing, see LICENSE.html or http://ckeditor.com/license 
    33 
    4 af.js      Found: 287 Missing: 244 
    5 ar.js      Found: 451 Missing: 80 
    6 bg.js      Found: 280 Missing: 251 
    7 bn.js      Found: 281 Missing: 250 
    8 bs.js      Found: 187 Missing: 344 
    9 ca.js      Found: 490 Missing: 41 
    10 cs.js      Found: 411 Missing: 120 
    11 cy.js      Found: 452 Missing: 79 
    12 da.js      Found: 404 Missing: 127 
    13 de.js      Found: 528 Missing: 3 
    14 el.js      Found: 286 Missing: 245 
    15 en-au.js   Found: 369 Missing: 162 
    16 en-ca.js   Found: 369 Missing: 162 
    17 en-gb.js   Found: 370 Missing: 161 
    18 eo.js      Found: 259 Missing: 272 
    19 es.js      Found: 531 Missing: 0 
    20 et.js      Found: 301 Missing: 230 
    21 eu.js      Found: 403 Missing: 128 
    22 fa.js      Found: 302 Missing: 229 
    23 fi.js      Found: 531 Missing: 0 
    24 fo.js      Found: 420 Missing: 111 
    25 fr-ca.js   Found: 301 Missing: 230 
    26 fr.js      Found: 403 Missing: 128 
    27 gl.js      Found: 283 Missing: 248 
    28 gu.js      Found: 300 Missing: 231 
    29 he.js      Found: 531 Missing: 0 
    30 hi.js      Found: 302 Missing: 229 
    31 hr.js      Found: 404 Missing: 127 
    32 hu.js      Found: 530 Missing: 1 
    33 is.js      Found: 307 Missing: 224 
    34 it.js      Found: 404 Missing: 127 
    35 ja.js      Found: 489 Missing: 42 
    36 km.js      Found: 275 Missing: 256 
    37 ko.js      Found: 293 Missing: 238 
    38 lt.js      Found: 306 Missing: 225 
    39 lv.js      Found: 283 Missing: 248 
    40 mn.js      Found: 300 Missing: 231 
    41 ms.js      Found: 265 Missing: 266 
    42 nb.js      Found: 470 Missing: 61 
    43 nl.js      Found: 531 Missing: 0 
    44 no.js      Found: 470 Missing: 61 
    45 pl.js      Found: 411 Missing: 120 
    46 pt-br.js   Found: 524 Missing: 7 
    47 pt.js      Found: 282 Missing: 249 
    48 ro.js      Found: 301 Missing: 230 
    49 ru.js      Found: 467 Missing: 64 
    50 sk.js      Found: 302 Missing: 229 
    51 sl.js      Found: 410 Missing: 121 
    52 sr-latn.js Found: 276 Missing: 255 
    53 sr.js      Found: 275 Missing: 256 
    54 sv.js      Found: 299 Missing: 232 
    55 th.js      Found: 287 Missing: 244 
    56 tr.js      Found: 524 Missing: 7 
    57 uk.js      Found: 531 Missing: 0 
    58 vi.js      Found: 481 Missing: 50 
    59 zh-cn.js   Found: 531 Missing: 0 
    60 zh.js      Found: 404 Missing: 127 
     4af.js      Found: 287 Missing: 259 
     5ar.js      Found: 451 Missing: 95 
     6bg.js      Found: 280 Missing: 266 
     7bn.js      Found: 281 Missing: 265 
     8bs.js      Found: 187 Missing: 359 
     9ca.js      Found: 490 Missing: 56 
     10cs.js      Found: 411 Missing: 135 
     11cy.js      Found: 452 Missing: 94 
     12da.js      Found: 404 Missing: 142 
     13de.js      Found: 528 Missing: 18 
     14el.js      Found: 286 Missing: 260 
     15en-au.js   Found: 369 Missing: 177 
     16en-ca.js   Found: 369 Missing: 177 
     17en-gb.js   Found: 370 Missing: 176 
     18eo.js      Found: 259 Missing: 287 
     19es.js      Found: 531 Missing: 15 
     20et.js      Found: 301 Missing: 245 
     21eu.js      Found: 403 Missing: 143 
     22fa.js      Found: 302 Missing: 244 
     23fi.js      Found: 531 Missing: 15 
     24fo.js      Found: 420 Missing: 126 
     25fr-ca.js   Found: 301 Missing: 245 
     26fr.js      Found: 403 Missing: 143 
     27gl.js      Found: 283 Missing: 263 
     28gu.js      Found: 300 Missing: 246 
     29he.js      Found: 546 Missing: 0 
     30hi.js      Found: 302 Missing: 244 
     31hr.js      Found: 404 Missing: 142 
     32hu.js      Found: 530 Missing: 16 
     33is.js      Found: 307 Missing: 239 
     34it.js      Found: 404 Missing: 142 
     35ja.js      Found: 489 Missing: 57 
     36km.js      Found: 275 Missing: 271 
     37ko.js      Found: 293 Missing: 253 
     38lt.js      Found: 306 Missing: 240 
     39lv.js      Found: 283 Missing: 263 
     40mn.js      Found: 300 Missing: 246 
     41ms.js      Found: 265 Missing: 281 
     42nb.js      Found: 470 Missing: 76 
     43nl.js      Found: 531 Missing: 15 
     44no.js      Found: 470 Missing: 76 
     45pl.js      Found: 411 Missing: 135 
     46pt-br.js   Found: 524 Missing: 22 
     47pt.js      Found: 282 Missing: 264 
     48ro.js      Found: 301 Missing: 245 
     49ru.js      Found: 467 Missing: 79 
     50sk.js      Found: 302 Missing: 244 
     51sl.js      Found: 410 Missing: 136 
     52sr-latn.js Found: 276 Missing: 270 
     53sr.js      Found: 275 Missing: 271 
     54sv.js      Found: 299 Missing: 247 
     55th.js      Found: 287 Missing: 259 
     56tr.js      Found: 524 Missing: 22 
     57uk.js      Found: 531 Missing: 15 
     58vi.js      Found: 481 Missing: 65 
     59zh-cn.js   Found: 546 Missing: 0 
     60zh.js      Found: 404 Missing: 142 
  • CKEditor/trunk/_source/lang/af.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ar.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/bg.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/bn.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/bs.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ca.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/cs.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/cy.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/da.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/de.js

    r6099 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/el.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/en-au.js

    r5863 r6190  
    529529        justify : 
    530530        { 
    531                 left    : 'Left Justify', 
    532                 center  : 'Centre Justify', 
    533                 right   : 'Right Justify', 
    534                 block   : 'Block Justify' 
     531                left    : 'Align Left', 
     532                center  : 'Centre', 
     533                right   : 'Align Right', 
     534                block   : 'Justify' 
    535535        }, 
    536536 
     
    615615                remove                          : 'Remove Div' // MISSING 
    616616        }, 
     617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
    617636 
    618637        font : 
  • CKEditor/trunk/_source/lang/en-ca.js

    r5863 r6190  
    529529        justify : 
    530530        { 
    531                 left    : 'Left Justify', 
    532                 center  : 'Centre Justify', 
    533                 right   : 'Right Justify', 
    534                 block   : 'Block Justify' 
     531                left    : 'Align Left', 
     532                center  : 'Centre', 
     533                right   : 'Align Right', 
     534                block   : 'Justify' 
    535535        }, 
    536536 
     
    615615                remove                          : 'Remove Div' // MISSING 
    616616        }, 
     617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
    617636 
    618637        font : 
  • CKEditor/trunk/_source/lang/en-gb.js

    r5863 r6190  
    529529        justify : 
    530530        { 
    531                 left    : 'Left Justify', 
    532                 center  : 'Centre Justify', 
    533                 right   : 'Right Justify', 
    534                 block   : 'Block Justify' 
     531                left    : 'Align Left', 
     532                center  : 'Centre', 
     533                right   : 'Align Right', 
     534                block   : 'Justify' 
    535535        }, 
    536536 
     
    615615                remove                          : 'Remove Div' // MISSING 
    616616        }, 
     617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
    617636 
    618637        font : 
  • CKEditor/trunk/_source/lang/en.js

    r6133 r6190  
    529529        justify : 
    530530        { 
    531                 left    : 'Left Justify', 
    532                 center  : 'Center Justify', 
    533                 right   : 'Right Justify', 
    534                 block   : 'Block Justify' 
     531                left    : 'Align Left', 
     532                center  : 'Center', 
     533                right   : 'Align Right', 
     534                block   : 'Justify' 
    535535        }, 
    536536 
     
    615615                remove                          : 'Remove Div' 
    616616        }, 
     617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', 
     621                toolbar         : 'iFrame', 
     622                height          : 'Height', 
     623                width           : 'Width', 
     624                invalidHeight   : 'iFrame height must be a number.', 
     625                invalidWidth    : 'iFrame width must be a number.', 
     626                noUrl           : 'Please type the iFrame URL', 
     627                scrolling       : 'Enable scrollbars', 
     628                border          : 'Show frame border', 
     629                align           : 'Alignment', 
     630                alignLeft       : 'Left', 
     631                alignRight      : 'Right', 
     632                alignTop        : 'Top', 
     633                alignMiddle     : 'Middle', 
     634                alignBottom     : 'Bottom' 
     635        }, 
    617636 
    618637        font : 
  • CKEditor/trunk/_source/lang/eo.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/es.js

    r6171 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/et.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/eu.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/fa.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/fi.js

    r5938 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/fo.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/fr-ca.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/fr.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/gl.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/gu.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/he.js

    r5840 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'מאפייני חלון פנימי (iFrame)', 
     621                toolbar         : 'חלון פנימי (iFrame)', 
     622                height          : 'גובה', 
     623                width           : 'רוחב', 
     624                invalidHeight   : 'גובה החלון חייב להיות מספרי.', 
     625                invalidWidth    : 'רוחב החלון חייב להיות מספרי.', 
     626                noUrl           : 'יש להכניס כתובת לחלון.', 
     627                scrolling       : 'אפשר פסי גלילה', 
     628                border          : 'הראה מסגרת לחלון', 
     629                align           : 'יישור', 
     630                alignLeft       : 'שמאל', 
     631                alignRight      : 'ימין', 
     632                alignTop        : 'למעלה', 
     633                alignMiddle     : 'מרכז', 
     634                alignBottom     : 'למטה' 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/hi.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/hr.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/hu.js

    r6154 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/is.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/it.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ja.js

    r6183 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/km.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ko.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/lt.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/lv.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/mn.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ms.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/nb.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/nl.js

    r5865 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/no.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/pl.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/pt-br.js

    r5840 r6190  
    615615        }, 
    616616 
     617        iframe : 
     618        { 
     619                title           : 'iFrame Properties', // MISSING 
     620                toolbar         : 'iFrame', // MISSING 
     621                height          : 'Height', // MISSING 
     622                width           : 'Width', // MISSING 
     623                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     624                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     625                noUrl           : 'Please type the iFrame URL', // MISSING 
     626                scrolling       : 'Enable scrollbars', // MISSING 
     627                border          : 'Show frame border', // MISSING 
     628                align           : 'Alignment', // MISSING 
     629                alignLeft       : 'Left', // MISSING 
     630                alignRight      : 'Right', // MISSING 
     631                alignTop        : 'Top', // MISSING 
     632                alignMiddle     : 'Middle', // MISSING 
     633                alignBottom     : 'Bottom' // MISSING 
     634        }, 
     635 
    617636        font : 
    618637        { 
  • CKEditor/trunk/_source/lang/pt.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ro.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/ru.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/sk.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/sl.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/sr-latn.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/sr.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/sv.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/th.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/tr.js

    r5840 r6190  
    615615        }, 
    616616 
     617        iframe : 
     618        { 
     619                title           : 'iFrame Properties', // MISSING 
     620                toolbar         : 'iFrame', // MISSING 
     621                height          : 'Height', // MISSING 
     622                width           : 'Width', // MISSING 
     623                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     624                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     625                noUrl           : 'Please type the iFrame URL', // MISSING 
     626                scrolling       : 'Enable scrollbars', // MISSING 
     627                border          : 'Show frame border', // MISSING 
     628                align           : 'Alignment', // MISSING 
     629                alignLeft       : 'Left', // MISSING 
     630                alignRight      : 'Right', // MISSING 
     631                alignTop        : 'Top', // MISSING 
     632                alignMiddle     : 'Middle', // MISSING 
     633                alignBottom     : 'Bottom' // MISSING 
     634        }, 
     635 
    617636        font : 
    618637        { 
  • CKEditor/trunk/_source/lang/uk.js

    r5919 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/vi.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/zh-cn.js

    r5864 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame属性', 
     621                toolbar         : 'iFrame', 
     622                height          : '高度', 
     623                width           : '宽度', 
     624                invalidHeight   : '框架高度必须为数字格式', 
     625                invalidWidth    : '框架宽度必须为数字格式', 
     626                noUrl           : '请输入框架的 URL', 
     627                scrolling       : '允许滚动条', 
     628                border          : '显示框架边框', 
     629                align           : '对齐方式', 
     630                alignLeft       : '左', 
     631                alignRight      : '右', 
     632                alignTop        : '上', 
     633                alignMiddle     : '中', 
     634                alignBottom     : '下' 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/lang/zh.js

    r5863 r6190  
    616616        }, 
    617617 
     618        iframe : 
     619        { 
     620                title           : 'iFrame Properties', // MISSING 
     621                toolbar         : 'iFrame', // MISSING 
     622                height          : 'Height', // MISSING 
     623                width           : 'Width', // MISSING 
     624                invalidHeight   : 'iFrame height must be a number.', // MISSING 
     625                invalidWidth    : 'iFrame width must be a number.', // MISSING 
     626                noUrl           : 'Please type the iFrame URL', // MISSING 
     627                scrolling       : 'Enable scrollbars', // MISSING 
     628                border          : 'Show frame border', // MISSING 
     629                align           : 'Alignment', // MISSING 
     630                alignLeft       : 'Left', // MISSING 
     631                alignRight      : 'Right', // MISSING 
     632                alignTop        : 'Top', // MISSING 
     633                alignMiddle     : 'Middle', // MISSING 
     634                alignBottom     : 'Bottom' // MISSING 
     635        }, 
     636 
    618637        font : 
    619638        { 
  • CKEditor/trunk/_source/plugins/button/plugin.js

    r5949 r6190  
    5555        } 
    5656}; 
     57 
     58/** 
     59 * Handles a button click. 
     60 * @private 
     61 */ 
     62CKEDITOR.ui.button._ = 
     63{ 
     64        instances : [], 
     65 
     66        keydown : function( index, ev ) 
     67        { 
     68                var instance = CKEDITOR.ui.button._.instances[ index ]; 
     69 
     70                if ( instance.onkey ) 
     71                { 
     72                        ev = new CKEDITOR.dom.event( ev ); 
     73                        return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); 
     74                } 
     75        }, 
     76 
     77        focus : function( index, ev ) 
     78        { 
     79                var instance = CKEDITOR.ui.button._.instances[ index ], 
     80                        retVal; 
     81 
     82                if ( instance.onfocus ) 
     83                        retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); 
     84 
     85                // FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus. 
     86                if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) 
     87                        ev.preventBubble(); 
     88                return retVal; 
     89        } 
     90}; 
     91 
     92( function() 
     93{ 
     94        var keydownFn = CKEDITOR.tools.addFunction( CKEDITOR.ui.button._.keydown, CKEDITOR.ui.button._ ), 
     95                focusFn = CKEDITOR.tools.addFunction( CKEDITOR.ui.button._.focus, CKEDITOR.ui.button._ ); 
    5796 
    5897CKEDITOR.ui.button.prototype = 
     
    161200 
    162201                output.push( 
    163                                 ' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' + 
    164                                 ' onfocus="return CKEDITOR.ui.button._.focus(', index, ', event);"' + 
     202                                        ' onkeydown="return CKEDITOR.tools.callFunction(', keydownFn, ', ', index, ', event);"' + 
     203                                        ' onfocus="return CKEDITOR.tools.callFunction(', focusFn,', ', index, ', event);"' + 
    165204                                ' onclick="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' + 
    166205                                        '<span class="cke_icon"' ); 
     
    222261}; 
    223262 
    224 /** 
    225  * Handles a button click. 
    226  * @private 
    227  */ 
    228 CKEDITOR.ui.button._ = 
    229 { 
    230         instances : [], 
    231  
    232         keydown : function( index, ev ) 
    233         { 
    234                 var instance = CKEDITOR.ui.button._.instances[ index ]; 
    235  
    236                 if ( instance.onkey ) 
    237                 { 
    238                         ev = new CKEDITOR.dom.event( ev ); 
    239                         return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); 
    240                 } 
    241         }, 
    242  
    243         focus : function( index, ev ) 
    244         { 
    245                 var instance = CKEDITOR.ui.button._.instances[ index ], 
    246                         retVal; 
    247  
    248                 if ( instance.onfocus ) 
    249                         retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); 
    250  
    251                 // FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus. 
    252                 if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) 
    253                         ev.preventBubble(); 
    254                 return retVal; 
    255         } 
    256 }; 
     263})(); 
    257264 
    258265/** 
  • CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js

    r5949 r6190  
    1 /* 
     1/* 
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
     
    1414                        docElement = doc.$; 
    1515 
    16                 doc.getById( 'cke_actscrpt' ).remove(); 
     16                var script = doc.getById( 'cke_actscrpt' ); 
     17                script && script.remove(); 
    1718 
    1819                CKEDITOR.env.ie ? 
     
    7576                                '</html>'; 
    7677 
     78                        var src = 
     79                                CKEDITOR.env.air ? 
     80                                        'javascript:void(0)' : 
     81                                isCustomDomain ? 
     82                                        'javascript:void((function(){' + 
     83                                                'document.open();' + 
     84                                                'document.domain=\'' + document.domain + '\';' + 
     85                                                'document.close();' + 
     86                                                '})())"' 
     87                                : 
     88                                        ''; 
     89 
    7790                        var iframe = CKEDITOR.dom.element.createFromHtml( 
    7891                                                '<iframe' + 
     
    8093                                                ' frameborder="0" ' + 
    8194                                                ' allowTransparency="true"' + 
    82                                                 // Support for custom document.domain in IE. 
    83                                                 ( isCustomDomain ? 
    84                                                         ' src="javascript:void((function(){' + 
    85                                                                 'document.open();' + 
    86                                                                 'document.domain=\'' + document.domain + '\';' + 
    87                                                                 'document.close();' + 
    88                                                         '})())"' : '' ) + 
     95                                                ' src="' + src + '"' + 
    8996                                                ' role="region"' + 
    9097                                                ' aria-label="' + lang.pasteArea + '"' + 
     
    94101 
    95102                        iframe.on( 'load', function( e ) 
    96                         { 
    97                                 e.removeListener(); 
    98                                 var doc = iframe.getFrameDocument().$; 
    99                                 // Custom domain handling is needed after each document.open(). 
    100                                 doc.open(); 
    101                                 if ( isCustomDomain ) 
    102                                         doc.domain = document.domain; 
    103                                 doc.write( htmlToLoad ); 
    104                                 doc.close(); 
    105                         }, this ); 
     103                                { 
     104                                        e.removeListener(); 
     105 
     106                                        var doc = iframe.getFrameDocument(); 
     107                                        doc.write( htmlToLoad ); 
     108 
     109                                        if ( CKEDITOR.env.air ) 
     110                                                onPasteFrameLoad.call( this, doc.getWindow().$ ); 
     111                                }, 
     112                                this ); 
    106113 
    107114                        iframe.setCustomData( 'dialog', this ); 
  • CKEditor/trunk/_source/plugins/clipboard/plugin.js

    r5993 r6190  
    5050                                { 
    5151                                        // Other browsers throw an error if the command is disabled. 
    52                                         return editor.document.$.execCommand( type ); 
     52                                        return editor.document.$.execCommand( type, false, null ); 
    5353                                } 
    5454                                catch( e ) 
  • CKEditor/trunk/_source/plugins/colorbutton/plugin.js

    r5949 r6190  
    2323                function addButton( name, type, title ) 
    2424                { 
     25                        var colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox'; 
    2526                        editor.ui.add( name, CKEDITOR.UI_PANELBUTTON, 
    2627                                { 
     
    4041                                                block.autoSize = true; 
    4142                                                block.element.addClass( 'cke_colorblock' ); 
    42                                                 block.element.setHtml( renderColors( panel, type ) ); 
     43                                                block.element.setHtml( renderColors( panel, type, colorBoxId ) ); 
    4344                                                // The block should not have scrollbars (#5933, #6056) 
    4445                                                block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' ); 
     46 
     47                                                CKEDITOR.ui.fire( 'ready', this ); 
    4548 
    4649                                                var keys = block.keys; 
     
    5356                                                keys[ CKEDITOR.SHIFT + 9 ]      = 'prev';       // SHIFT + TAB 
    5457                                                keys[ 32 ]      = 'click';                                      // SPACE 
     58                                        }, 
     59 
     60                                        // The automatic colorbox should represent the real color (#6010) 
     61                                        onOpen : function() 
     62                                        { 
     63                                                var selection = editor.getSelection(), 
     64                                                        block = selection && selection.getStartElement(), 
     65                                                        path = new CKEDITOR.dom.elementPath( block ), 
     66                                                        color; 
     67 
     68                                                // Find the closest block element. 
     69                                                block = path.block || path.blockLimit; 
     70 
     71                                                // The background color might be transparent. In that case, look up the color in the DOM tree. 
     72                                                do 
     73                                                { 
     74                                                        color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent'; 
     75                                                } 
     76                                                while ( type == 'back' && color == 'transparent' && ( block = block.getParent() ) ); 
     77 
     78                                                // The box should never be transparent. 
     79                                                if ( !color || color == 'transparent' ) 
     80                                                        color = '#ffffff'; 
     81 
     82                                                this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color ); 
    5583                                        } 
    5684                                }); 
     
    5886 
    5987 
    60                 function renderColors( panel, type ) 
     88                function renderColors( panel, type, colorBoxId ) 
    6189                { 
    6290                        var output = [], 
     
    101129 
    102130                                                colorStyle.childRule = type == 'back' ? 
    103                                                         // It's better to apply background color as the innermost style. (#3599) 
    104                                                         function(){ return false; } : 
    105                                                         // Fore color style must be applied inside links instead of around it. 
    106                                                         function( element ){ return element.getName() != 'a'; }; 
     131                                                        function( element ) 
     132                                                        { 
     133                                                                // It's better to apply background color as the innermost style. (#3599) 
     134                                                                // Except for "unstylable elements". (#6103) 
     135                                                                return isUnstylable( element ); 
     136                                                        } 
     137                                                        : 
     138                                                        function( element ) 
     139                                                        { 
     140                                                                // Fore color style must be applied inside links instead of around it. 
     141                                                                return element.getName() != 'a' || isUnstylable( element ); 
     142                                                        }; 
    107143 
    108144                                                new CKEDITOR.style( colorStyle, { color : color } ).apply( editor.document ); 
     
    122158                                                '<tr>' + 
    123159                                                        '<td>' + 
    124                                                                 '<span class="cke_colorbox" style="background-color:#000"></span>' + 
     160                                                                '<span class="cke_colorbox" id="', colorBoxId, '"></span>' + 
    125161                                                        '</td>' + 
    126162                                                        '<td colspan=7 align=center>', 
     
    182218                        return output.join( '' ); 
    183219                } 
     220 
     221                function isUnstylable( ele ) 
     222                { 
     223                        return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-cke-nostyle' ); 
     224                } 
    184225        } 
    185226}); 
  • CKEditor/trunk/_source/plugins/contextmenu/plugin.js

    r6044 r6190  
    77{ 
    88        requires : [ 'menu' ], 
     9         
     10        // Make sure the base class (CKEDITOR.menu) is loaded before it (#3318). 
     11        onLoad : function() 
     12        { 
     13                CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass( 
     14                { 
     15                        base : CKEDITOR.menu, 
     16 
     17                        $ : function( editor ) 
     18                        { 
     19                                this.base.call( this, editor, 
     20                                { 
     21                                        panel: 
     22                                        { 
     23                                                className : editor.skinClass + ' cke_contextmenu', 
     24                                                attributes : 
     25                                                { 
     26                                                        'aria-label' : editor.lang.contextmenu.options 
     27                                                } 
     28                                        } 
     29                                }); 
     30                        }, 
     31 
     32                        proto : 
     33                        { 
     34                                addTarget : function( element, nativeContextMenuOnCtrl ) 
     35                                { 
     36                                        // Opera doesn't support 'contextmenu' event, we have duo approaches employed here: 
     37                                        // 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser 
     38                                        //  option 'Allow script to detect context menu/right click events' to be always turned on. 
     39                                        // 2. Considering the fact that ctrl/meta key is not been occupied 
     40                                        //  for multiple range selecting (like Gecko), we use this key 
     41                                        //  combination as a fallback for triggering context-menu. (#4530) 
     42                                        if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body )) 
     43                                        { 
     44                                                var contextMenuOverrideButton; 
     45                                                element.on( 'mousedown', function( evt ) 
     46                                                { 
     47                                                        evt = evt.data; 
     48                                                        if ( evt.$.button != 2 ) 
     49                                                        { 
     50                                                                if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 ) 
     51                                                                        element.fire( 'contextmenu', evt ); 
     52                                                                return; 
     53                                                        } 
     54 
     55                                                        if ( nativeContextMenuOnCtrl 
     56                                                                 && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) ) 
     57                                                                return; 
     58 
     59                                                        var target = evt.getTarget(); 
     60 
     61                                                        if ( !contextMenuOverrideButton ) 
     62                                                        { 
     63                                                                var ownerDoc =  target.getDocument(); 
     64                                                                contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ; 
     65                                                                contextMenuOverrideButton.$.type = 'button' ; 
     66                                                                ownerDoc.getBody().append( contextMenuOverrideButton ) ; 
     67                                                        } 
     68 
     69                                                        contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) + 
     70                                                                'px;left:' + ( evt.$.clientX - 2 ) + 
     71                                                                'px;width:5px;height:5px;opacity:0.01' ); 
     72 
     73                                                } ); 
     74 
     75                                                element.on( 'mouseup', function ( evt ) 
     76                                                { 
     77                                                        if ( contextMenuOverrideButton ) 
     78                                                        { 
     79                                                                contextMenuOverrideButton.remove(); 
     80                                                                contextMenuOverrideButton = undefined; 
     81                                                                // Simulate 'contextmenu' event. 
     82                                                                element.fire( 'contextmenu', evt.data ); 
     83                                                        } 
     84                                                } ); 
     85                                        } 
     86 
     87                                        element.on( 'contextmenu', function( event ) 
     88                                                { 
     89                                                        var domEvent = event.data; 
     90 
     91                                                        if ( nativeContextMenuOnCtrl && 
     92                                                                 // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event, 
     93                                                                // which make this property unreliable. (#4826) 
     94                                                                 ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) ) 
     95                                                                return; 
     96 
     97 
     98                                                        // Cancel the browser context menu. 
     99                                                        domEvent.preventDefault(); 
     100 
     101                                                        var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(), 
     102                                                                offsetX = domEvent.$.clientX, 
     103                                                                offsetY = domEvent.$.clientY; 
     104 
     105                                                        CKEDITOR.tools.setTimeout( function() 
     106                                                                { 
     107                                                                        this.open( offsetParent, null, offsetX, offsetY ); 
     108                                                                }, 
     109                                                                0, this ); 
     110                                                }, 
     111                                                this ); 
     112 
     113                                        if ( CKEDITOR.env.opera ) 
     114                                        { 
     115                                                // 'contextmenu' event triggered by Windows menu key is unpreventable, 
     116                                                // cancel the key event itself. (#6534) 
     117                                                element.on( 'keypress' , function ( evt ) 
     118                                                { 
     119                                                        var domEvent = evt.data; 
     120 
     121                                                        if ( domEvent.$.keyCode == 0 ) 
     122                                                                domEvent.preventDefault(); 
     123                                                }); 
     124                                        } 
     125 
     126                                        if ( CKEDITOR.env.webkit ) 
     127                                        { 
     128                                                var holdCtrlKey, 
     129                                                        onKeyDown = function( event ) 
     130                                                        { 
     131                                                                holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ; 
     132                                                        }, 
     133                                                        resetOnKeyUp = function() 
     134                                                        { 
     135                                                                holdCtrlKey = 0; 
     136                                                        }; 
     137 
     138                                                element.on( 'keydown', onKeyDown ); 
     139                                                element.on( 'keyup', resetOnKeyUp ); 
     140                                                element.on( 'contextmenu', resetOnKeyUp ); 
     141                                        } 
     142                                }, 
     143 
     144                                open : function( offsetParent, corner, offsetX, offsetY ) 
     145                                { 
     146                                        this.editor.focus(); 
     147                                        offsetParent = offsetParent || CKEDITOR.document.getDocumentElement(); 
     148                                        this.show( offsetParent, corner, offsetX, offsetY ); 
     149                                } 
     150                        } 
     151                }); 
     152        }, 
    9153 
    10154        beforeInit : function( editor ) 
     
    16160                                exec : function() 
    17161                                        { 
    18                                                 editor.contextMenu.show( editor.document.getBody() ); 
     162                                                editor.contextMenu.open( editor.document.getBody() ); 
    19163                                        } 
    20164                        }); 
    21         } 
    22 }); 
    23  
    24 CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass( 
    25 { 
    26         $ : function( editor ) 
    27         { 
    28                 this.id = CKEDITOR.tools.getNextId(); 
    29                 this.editor = editor; 
    30                 this._.listeners = []; 
    31                 this._.functionId = CKEDITOR.tools.addFunction( function( commandName ) 
    32                         { 
    33                                 this._.panel.hide(); 
    34                                 editor.focus(); 
    35                                 editor.execCommand( commandName ); 
    36                         }, 
    37                         this); 
    38  
    39                 this.definition = 
    40                 { 
    41                         panel: 
    42                         { 
    43                                 className : editor.skinClass + ' cke_contextmenu', 
    44                                 attributes : 
    45                                 { 
    46                                         'aria-label' : editor.lang.contextmenu.options 
    47                                 } 
    48                         } 
    49                 }; 
    50         }, 
    51  
    52         _ : 
    53         { 
    54                 onMenu : function( offsetParent, corner, offsetX, offsetY ) 
    55                 { 
    56                         var menu = this._.menu, 
    57                                 editor = this.editor; 
    58  
    59                         if ( menu ) 
    60                         { 
    61                                 menu.hide(); 
    62                                 menu.removeAll(); 
    63                         } 
    64                         else 
    65                         { 
    66                                 menu = this._.menu = new CKEDITOR.menu( editor, this.definition ); 
    67                                 menu.onClick = CKEDITOR.tools.bind( function( item ) 
    68                                 { 
    69                                         menu.hide(); 
    70  
    71                                         if ( item.onClick ) 
    72                                                 item.onClick(); 
    73                                         else if ( item.command ) 
    74                                                 editor.execCommand( item.command ); 
    75  
    76                                 }, this ); 
    77  
    78                                 menu.onEscape = function( keystroke ) 
    79                                 { 
    80                                         var parent = this.parent; 
    81                                         // 1. If it's sub-menu, restore the last focused item 
    82                                         // of upper level menu. 
    83                                         // 2. In case of a top-menu, close it. 
    84                                         if ( parent ) 
    85                                         { 
    86                                                 parent._.panel.hideChild(); 
    87                                                 // Restore parent block item focus. 
    88                                                 var parentBlock = parent._.panel._.panel._.currentBlock, 
    89                                                         parentFocusIndex =  parentBlock._.focusIndex; 
    90                                                 parentBlock._.markItem( parentFocusIndex ); 
    91                                         } 
    92                                         else if ( keystroke == 27 ) 
    93                                         { 
    94                                                 this.hide(); 
    95                                                 editor.focus(); 
    96                                         } 
    97                                         return false; 
    98                                 }; 
    99                         } 
    100  
    101                         var listeners = this._.listeners, 
    102                                 includedItems = []; 
    103  
    104                         var selection = this.editor.getSelection(), 
    105                                 element = selection && selection.getStartElement(); 
    106  
    107                         menu.onHide = CKEDITOR.tools.bind( function() 
    108                                 { 
    109                                         menu.onHide = null; 
    110  
    111                                         if ( CKEDITOR.env.ie ) 
    112                                         { 
    113                                                 var selection = editor.getSelection(); 
    114                                                 selection && selection.unlock(); 
    115                                         } 
    116  
    117                                         this.onHide && this.onHide(); 
    118                                 }, 
    119                                 this ); 
    120  
    121                         // Call all listeners, filling the list of items to be displayed. 
    122                         for ( var i = 0 ; i < listeners.length ; i++ ) 
    123                         { 
    124                                 var listenerItems = listeners[ i ]( element, selection ); 
    125  
    126                                 if ( listenerItems ) 
    127                                 { 
    128                                         for ( var itemName in listenerItems ) 
    129                                         { 
    130                                                 var item = this.editor.getMenuItem( itemName ); 
    131  
    132                                                 if ( item ) 
    133                                                 { 
    134                                                         item.state = listenerItems[ itemName ]; 
    135                                                         menu.add( item ); 
    136                                                 } 
    137                                         } 
    138                                 } 
    139                         } 
    140  
    141                         // Don't show context menu with zero items. 
    142                         menu.items.length && menu.show( offsetParent, corner || ( editor.lang.dir == 'rtl' ? 2 : 1 ), offsetX, offsetY ); 
    143                 } 
    144         }, 
    145  
    146         proto : 
    147         { 
    148                 addTarget : function( element, nativeContextMenuOnCtrl ) 
    149                 { 
    150  
    151                         // For browsers (Opera <=10a) that doesn't  support 'contextmenu' event, we have duo approaches employed here: 
    152                         // 1. Inherit the 'button override' hack we introduced in v2 (#4530) (In Opera browser, this require the 
    153                         //  option 'Allow script to detect context menu/right click events' to be always turned on). 
    154                         // 2. Considering the fact that ctrl/meta key is not been occupied 
    155                         //  for multiple range selecting (like Gecko), we use this key 
    156                         //  combination as a fallback for triggering context-menu. (#4530) 
    157                         if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ) ) 
    158                         { 
    159                                 var contextMenuOverrideButton; 
    160                                 element.on( 'mousedown', function( evt ) 
    161                                 { 
    162                                         evt = evt.data; 
    163                                         if ( evt.$.button != 2 ) 
    164                                         { 
    165                                                 if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 ) 
    166                                                         element.fire( 'contextmenu', evt ); 
    167                                                 return; 
    168                                         } 
    169  
    170                                         if ( nativeContextMenuOnCtrl 
    171                                                  && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) ) 
    172                                                 return; 
    173  
    174                                         var target = evt.getTarget(); 
    175  
    176                                         if ( !contextMenuOverrideButton ) 
    177                                         { 
    178                                                 var ownerDoc =  target.getDocument(); 
    179                                                 contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ; 
    180                                                 contextMenuOverrideButton.$.type = 'button' ; 
    181                                                 ownerDoc.getBody().append( contextMenuOverrideButton ) ; 
    182                                         } 
    183  
    184                                         contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) + 
    185                                                 'px;left:' + ( evt.$.clientX - 2 ) + 
    186                                                 'px;width:5px;height:5px;opacity:0.01' ); 
    187  
    188                                 } ); 
    189  
    190                                 element.on( 'mouseup', function ( evt ) 
    191                                 { 
    192                                         if ( contextMenuOverrideButton ) 
    193                                         { 
    194                                                 contextMenuOverrideButton.remove(); 
    195                                                 contextMenuOverrideButton = undefined; 
    196                                                 // Simulate 'contextmenu' event. 
    197                                                 element.fire( 'contextmenu', evt.data ); 
    198                                         } 
    199                                 } ); 
    200                         } 
    201  
    202                         element.on( 'contextmenu', function( event ) 
    203                                 { 
    204                                         var domEvent = event.data; 
    205  
    206                                         if ( nativeContextMenuOnCtrl && 
    207                                              // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event, 
    208                                                 // which make this property unreliable. (#4826) 
    209                                              ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) ) 
    210                                                 return; 
    211  
    212  
    213                                         // Cancel the browser context menu. 
    214                                         domEvent.preventDefault(); 
    215  
    216                                         var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(), 
    217                                                 offsetX = domEvent.$.clientX, 
    218                                                 offsetY = domEvent.$.clientY; 
    219  
    220                                         CKEDITOR.tools.setTimeout( function() 
    221                                                 { 
    222                                                         this.show( offsetParent, null, offsetX, offsetY ); 
    223                                                 }, 
    224                                                 0, this ); 
    225                                 }, 
    226                                 this ); 
    227  
    228                         if ( CKEDITOR.env.opera ) 
    229                         { 
    230                                 // 'contextmenu' event triggered by Windows menu key is unpreventable, 
    231                                 // cancel the key event itself. (#6534) 
    232                                 element.on( 'keypress' , function ( evt ) 
    233                                 { 
    234                                         var domEvent = evt.data; 
    235  
    236                                         if ( domEvent.$.keyCode === 0 ) 
    237                                                 domEvent.preventDefault(); 
    238                                 }); 
    239                         } 
    240  
    241                         if ( CKEDITOR.env.webkit ) 
    242                         { 
    243                                 var holdCtrlKey, 
    244                                         onKeyDown = function( event ) 
    245                                         { 
    246                                                 holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ; 
    247                                         }, 
    248                                         resetOnKeyUp = function() 
    249                                         { 
    250                                                 holdCtrlKey = 0; 
    251                                         }; 
    252  
    253                                 element.on( 'keydown', onKeyDown ); 
    254                                 element.on( 'keyup', resetOnKeyUp ); 
    255                                 element.on( 'contextmenu', resetOnKeyUp ); 
    256                         } 
    257                 }, 
    258  
    259                 addListener : function( listenerFn ) 
    260                 { 
    261                         this._.listeners.push( listenerFn ); 
    262                 }, 
    263  
    264                 show : function( offsetParent, corner, offsetX, offsetY ) 
    265                 { 
    266                         this.editor.focus(); 
    267  
    268                         // Selection will be unavailable after context menu shows up 
    269                         // in IE, lock it now. 
    270                         if ( CKEDITOR.env.ie ) 
    271                         { 
    272                                 var selection = this.editor.getSelection(); 
    273                                 selection && selection.lock(); 
    274                         } 
    275  
    276                         this._.onMenu( offsetParent || CKEDITOR.document.getDocumentElement(), corner, offsetX || 0, offsetY || 0 ); 
    277                 } 
    278165        } 
    279166}); 
  • CKEditor/trunk/_source/plugins/dialog/plugin.js

    r6086 r6190  
    106106        { 
    107107                // Load the dialog definition. 
    108                 var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; 
     108                var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], 
     109                        defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), 
     110                        buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', 
     111                        dir = editor.lang.dir; 
     112 
     113                        if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) ||    // The buttons in MacOS Apps are in reverse order (#4750)   
     114                                ( buttonsOrder == 'rtl' && dir == 'ltr' ) ||   
     115                                ( buttonsOrder == 'ltr' && dir == 'rtl' ) )   
     116                                        defaultDefinition.buttons.reverse();   
     117 
    109118 
    110119                // Completes the definition with the default values. 
    111                 definition = CKEDITOR.tools.extend( definition( editor ), defaultDialogDefinition ); 
     120                definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); 
    112121 
    113122                // Clone a functionally independent copy for this dialog. 
     
    117126                // functions. 
    118127                definition = new definitionObject( this, definition ); 
    119  
    120128 
    121129                var doc = CKEDITOR.document; 
     
    131139                        contentSize : { width : 0, height : 0 }, 
    132140                        size : { width : 0, height : 0 }, 
    133                         updateSize : false, 
    134141                        contents : {}, 
    135142                        buttons : {}, 
     
    180187                        } 
    181188                        , editor ).definition; 
     189 
     190                var tabsToRemove = {}; 
     191                // Cache tabs that should be removed. 
     192                if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) 
     193                { 
     194                        var removeContents = editor.config.removeDialogTabs.split( ';' ); 
     195 
     196                        for ( i = 0; i < removeContents.length; i++ ) 
     197                        { 
     198                                var parts = removeContents[ i ].split( ':' ); 
     199                                if ( parts.length == 2 ) 
     200                                { 
     201                                        var removeDialogName = parts[ 0 ]; 
     202                                        if ( !tabsToRemove[ removeDialogName ] ) 
     203                                                tabsToRemove[ removeDialogName ] = []; 
     204                                        tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); 
     205                                } 
     206                        } 
     207                        editor._.removeDialogTabs = tabsToRemove; 
     208                } 
     209 
     210                // Remove tabs of this dialog. 
     211                if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) 
     212                { 
     213                        for ( i = 0; i < tabsToRemove.length; i++ ) 
     214                                definition.removeContents( tabsToRemove[ i ] ); 
     215                } 
     216 
    182217                // Initialize load, show, hide, ok and cancel events. 
    183218                if ( definition.onLoad ) 
     
    602637 
    603638                                this._.contentSize = { width : width, height : height }; 
    604                                 this._.updateSize = true; 
    605639                        }; 
    606640                })(), 
     
    614648                getSize : function() 
    615649                { 
    616                         if ( !this._.updateSize ) 
    617                                 return this._.size; 
    618650                        var element = this._.element.getFirst(); 
    619                         var size = this._.size = { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0}; 
    620  
    621                         // If either the offsetWidth or offsetHeight is 0, the element isn't visible. 
    622                         this._.updateSize = !size.width || !size.height; 
    623  
    624                         return size; 
     651                        return { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0}; 
    625652                }, 
    626653 
     
    630657                 * @param {Number} x The target x-coordinate. 
    631658                 * @param {Number} y The target y-coordinate. 
     659                 * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. 
    632660                 * @example 
    633661                 * dialogObj.move( 10, 40 ); 
     
    636664                { 
    637665                        var isFixed; 
    638                         return function( x, y ) 
     666                        return function( x, y, save ) 
    639667                        { 
    640668                                // The dialog may be fixed positioned or absolute positioned. Ask the 
     
    663691                                                        'top'   : ( y > 0 ? y : 0 ) + 'px' 
    664692                                                }); 
     693 
     694                                save && ( this._.moved = 1 ); 
    665695                        }; 
    666696                })(), 
     
    696726                                element.setStyle( 'display', 'block' ); 
    697727 
     728                        CKEDITOR.ui.fire( 'ready', this ); 
    698729                        // FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8. 
    699730                        if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) 
     
    709740 
    710741                        // First, set the dialog to an appropriate size. 
    711                         this.resize( definition.minWidth, definition.minHeight ); 
     742                        this.resize( this._.contentSize && this._.contentSize.width || definition.minWidth, 
     743                                        this._.contentSize && this._.contentSize.height || definition.minHeight ); 
    712744 
    713745                        // Reset all inputs back to their default value. 
     
    754786                        this._.hasFocus = false; 
    755787 
    756                         // Rearrange the dialog to the middle of the window. 
    757788                        CKEDITOR.tools.setTimeout( function() 
    758789                                { 
    759                                         var viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); 
    760                                         var dialogSize = this.getSize(); 
    761  
    762                                         // We're using definition size for initial position because of 
    763                                         // offten corrupted data in offsetWidth at this point. (#4084) 
    764                                         this.move( ( viewSize.width - definition.minWidth ) / 2, ( viewSize.height - dialogSize.height ) / 2 ); 
    765  
     790                                        this.layout(); 
    766791                                        this.parts.dialog.setStyle( 'visibility', '' ); 
    767792 
     
    776801                                }, 
    777802                                100, this ); 
     803                }, 
     804 
     805                /** 
     806                 * Rearrange the dialog to its previous position or the middle of the window. 
     807                 * @since 3.5 
     808                 */ 
     809                layout : function() 
     810                { 
     811                        var viewSize = CKEDITOR.document.getWindow().getViewPaneSize(), 
     812                                        dialogSize = this.getSize(); 
     813 
     814                        this.move( this._.moved ? this._.position.x : ( viewSize.width - dialogSize.width ) / 2, 
     815                                        this._.moved ? this._.position.y : ( viewSize.height - dialogSize.height ) / 2 ); 
    778816                }, 
    779817 
     
    904942                                                        expand : !!contents.expand, 
    905943                                                        padding : contents.padding, 
    906                                                         style : contents.style || 'width: 100%; height: 100%;' 
     944                                                        style : contents.style || 'width: 100%;' 
    907945                                                }, pageHtml ); 
    908946 
     
    13431381        }; 
    13441382 
    1345         // The buttons in MacOS Apps are in reverse order #4750 
    1346         CKEDITOR.env.mac && defaultDialogDefinition.buttons.reverse(); 
    1347  
    13481383        // Tool function used to return an item from an array based on its id 
    13491384        // property. 
     
    16141649                                realX = - margins[3]; 
    16151650                        else if ( abstractDialogCoords.x - margins[1] > viewPaneSize.width - dialogSize.width - magnetDistance ) 
    1616                                 realX = viewPaneSize.width - dialogSize.width + margins[1]; 
     1651                                realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[1] ); 
    16171652                        else 
    16181653                                realX = abstractDialogCoords.x; 
     
    16251660                                realY = abstractDialogCoords.y; 
    16261661 
    1627                         dialog.move( realX, realY ); 
     1662                        dialog.move( realX, realY, 1 ); 
    16281663 
    16291664                        evt.data.preventDefault(); 
     
    16451680                dialog.parts.title.on( 'mousedown', function( evt ) 
    16461681                        { 
    1647                                 dialog._.updateSize = true; 
    1648  
    16491682                                lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY }; 
    16501683 
     
    16661699        function initResizeHandles( dialog ) 
    16671700        { 
    1668                 var definition = dialog.definition, 
    1669                         minWidth = definition.minWidth || 0, 
    1670                         minHeight = definition.minHeight || 0, 
    1671                         resizable = definition.resizable, 
    1672                         margins = dialog.getParentEditor().skin.margins || [ 0, 0, 0, 0 ]; 
    1673  
    1674                 function topSizer( coords, dy ) 
    1675                 { 
    1676                         coords.y += dy; 
    1677                 } 
    1678  
    1679                 function rightSizer( coords, dx ) 
    1680                 { 
    1681                         coords.x2 += dx; 
    1682                 } 
    1683  
    1684                 function bottomSizer( coords, dy ) 
    1685                 { 
    1686                         coords.y2 += dy; 
    1687                 } 
    1688  
    1689                 function leftSizer( coords, dx ) 
    1690                 { 
    1691                         coords.x += dx; 
    1692                 } 
    1693  
    1694                 var lastCoords = null, 
    1695                         abstractDialogCoords = null, 
    1696                         magnetDistance = dialog._.editor.config.magnetDistance, 
    1697                         parts = [ 'tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br' ]; 
    1698  
    1699                 function mouseDownHandler( evt ) 
    1700                 { 
    1701                         var partName = evt.listenerData.part, size = dialog.getSize(); 
    1702                         abstractDialogCoords = dialog.getPosition(); 
    1703                         CKEDITOR.tools.extend( abstractDialogCoords, 
    1704                                 { 
    1705                                         x2 : abstractDialogCoords.x + size.width, 
    1706                                         y2 : abstractDialogCoords.y + size.height 
    1707                                 } ); 
    1708                         lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY }; 
    1709  
    1710                         CKEDITOR.document.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } ); 
    1711                         CKEDITOR.document.on( 'mouseup', mouseUpHandler, dialog, { part : partName } ); 
     1701                var def = dialog.definition, 
     1702                        resizable = def.resizable; 
     1703 
     1704                if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) 
     1705                        return; 
     1706 
     1707                var editor = dialog.getParentEditor(); 
     1708                var wrapperWidth, wrapperHeight, viewSize, origin, startSize; 
     1709 
     1710                function positionDialog( right ) 
     1711                { 
     1712                        // Maintain righthand sizing in RTL. 
     1713                        if ( dialog._.moved && editor.lang.dir == 'rtl' ) 
     1714                        { 
     1715                                var element = dialog._.element.getFirst(); 
     1716                                element.setStyle( 'right', right + "px" ); 
     1717                                element.removeStyle( 'left' ); 
     1718                        } 
     1719                        else if ( !dialog._.moved ) 
     1720                                dialog.layout(); 
     1721                } 
     1722 
     1723                var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) 
     1724                { 
     1725                        startSize = dialog.getSize(); 
     1726 
     1727                        // Calculate the offset between content and chrome size. 
     1728                        wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height',  ! ( CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); 
     1729                        wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); 
     1730 
     1731                        origin = { x : $event.screenX, y : $event.screenY }; 
     1732 
     1733                        viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); 
     1734 
     1735                        CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); 
     1736                        CKEDITOR.document.on( 'mouseup', mouseUpHandler ); 
    17121737 
    17131738                        if ( CKEDITOR.env.ie6Compat ) 
    17141739                        { 
    17151740                                var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); 
    1716                                 coverDoc.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } ); 
    1717                                 coverDoc.on( 'mouseup', mouseUpHandler, dialog, { part : partName } ); 
    1718                         } 
     1741                                coverDoc.on( 'mousemove', mouseMoveHandler ); 
     1742                                coverDoc.on( 'mouseup', mouseUpHandler ); 
     1743                        } 
     1744 
     1745                        $event.preventDefault && $event.preventDefault(); 
     1746                }); 
     1747 
     1748                // Prepend the grip to the dialog. 
     1749                dialog.on( 'load', function() 
     1750                { 
     1751                        var direction = ''; 
     1752                        if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) 
     1753                                direction = ' cke_resizer_horizontal'; 
     1754                        else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) 
     1755                                direction = ' cke_resizer_vertical'; 
     1756                        var resizer = CKEDITOR.dom.element.createFromHtml( '<div class="cke_resizer' + direction + '"' + 
     1757                                        ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' +  
     1758                                        ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )"></div>' ); 
     1759                        dialog.parts.footer.append( resizer, 1 ); 
     1760                }); 
     1761                editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } ); 
     1762 
     1763                function mouseMoveHandler( evt ) 
     1764                { 
     1765                        var rtl = editor.lang.dir == 'rtl', 
     1766                                dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), 
     1767                                dy = evt.data.$.screenY - origin.y, 
     1768                                width = startSize.width, 
     1769                                height = startSize.height, 
     1770                                internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), 
     1771                                internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), 
     1772                                element = dialog._.element.getFirst(), 
     1773                                right = rtl && element.getComputedStyle( 'right' ), 
     1774                                position = dialog.getPosition(); 
     1775 
     1776                        // IE might return "auto", we need exact position. 
     1777                        if ( right ) 
     1778                                right = right == 'auto' ? viewSize.width - ( position.x || 0 ) - element.getSize( 'width' ) : parseInt( right, 10 ); 
     1779 
     1780                        if ( position.y + internalHeight > viewSize.height ) 
     1781                                internalHeight = viewSize.height - position.y; 
     1782 
     1783                        if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) 
     1784                                internalWidth = viewSize.width - ( rtl ? right : position.x ); 
     1785 
     1786                        // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. 
     1787                        if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) && !( rtl && dx > 0 && !position.x ) ) 
     1788                                width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); 
     1789 
     1790                        if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) 
     1791                                height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); 
     1792 
     1793                        dialog.resize( width, height ); 
     1794                        // The right property might get broken during resizing, so computing it before the resizing. 
     1795                        positionDialog( right ); 
    17191796 
    17201797                        evt.data.preventDefault(); 
    17211798                } 
    17221799 
    1723                 function mouseMoveHandler( evt ) 
    1724                 { 
    1725                         var x = evt.data.$.screenX, 
    1726                                 y = evt.data.$.screenY, 
    1727                                 dx = x - lastCoords.x, 
    1728                                 dy = y - lastCoords.y, 
    1729                                 viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), 
    1730                                 partName = evt.listenerData.part; 
    1731  
    1732                         if ( partName.search( 't' ) != -1 ) 
    1733                                 topSizer( abstractDialogCoords, dy ); 
    1734                         if ( partName.search( 'l' ) != -1 ) 
    1735                                 leftSizer( abstractDialogCoords, dx ); 
    1736                         if ( partName.search( 'b' ) != -1 ) 
    1737                                 bottomSizer( abstractDialogCoords, dy ); 
    1738                         if ( partName.search( 'r' ) != -1 ) 
    1739                                 rightSizer( abstractDialogCoords, dx ); 
    1740  
    1741                         lastCoords = { x : x, y : y }; 
    1742  
    1743                         var realX, realY, realX2, realY2; 
    1744  
    1745                         if ( abstractDialogCoords.x + margins[3] < magnetDistance ) 
    1746                                 realX = - margins[3]; 
    1747                         else if ( partName.search( 'l' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance ) 
    1748                                 realX = abstractDialogCoords.x2 - minWidth; 
    1749                         else 
    1750                                 realX = abstractDialogCoords.x; 
    1751  
    1752                         if ( abstractDialogCoords.y + margins[0] < magnetDistance ) 
    1753                                 realY = - margins[0]; 
    1754                         else if ( partName.search( 't' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance ) 
    1755                                 realY = abstractDialogCoords.y2 - minHeight; 
    1756                         else 
    1757                                 realY = abstractDialogCoords.y; 
    1758  
    1759                         if ( abstractDialogCoords.x2 - margins[1] > viewPaneSize.width - magnetDistance ) 
    1760                                 realX2 = viewPaneSize.width + margins[1] ; 
    1761                         else if ( partName.search( 'r' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance ) 
    1762                                 realX2 = abstractDialogCoords.x + minWidth; 
    1763                         else 
    1764                                 realX2 = abstractDialogCoords.x2; 
    1765  
    1766                         if ( abstractDialogCoords.y2 - margins[2] > viewPaneSize.height - magnetDistance ) 
    1767                                 realY2= viewPaneSize.height + margins[2] ; 
    1768                         else if ( partName.search( 'b' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance ) 
    1769                                 realY2 = abstractDialogCoords.y + minHeight; 
    1770                         else 
    1771                                 realY2 = abstractDialogCoords.y2 ; 
    1772  
    1773                         dialog.move( realX, realY ); 
    1774                         dialog.resize( realX2 - realX, realY2 - realY ); 
    1775  
    1776                         evt.data.preventDefault(); 
    1777                 } 
    1778  
    1779                 function mouseUpHandler( evt ) 
     1800                function mouseUpHandler() 
    17801801                { 
    17811802                        CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); 
     
    17881809                                coverDoc.removeListener( 'mousemove', mouseMoveHandler ); 
    17891810                        } 
    1790                 } 
    1791  
    1792 // TODO : Simplify the resize logic, having just a single resize grip <div>. 
    1793 //              var widthTest = /[lr]/, 
    1794 //                      heightTest = /[tb]/; 
    1795 //              for ( var i = 0 ; i < parts.length ; i++ ) 
    1796 //              { 
    1797 //                      var element = dialog.parts[ parts[i] + '_resize' ]; 
    1798 //                      if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE || 
    1799 //                                      resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT && widthTest.test( parts[i] ) || 
    1800 //                                      resizable == CKEDITOR.DIALOG_RESIZE_WIDTH && heightTest.test( parts[i] ) ) 
    1801 //                      { 
    1802 //                              element.hide(); 
    1803 //                              continue; 
    1804 //                      } 
    1805 //                      element.on( 'mousedown', mouseDownHandler, dialog, { part : parts[i] } ); 
    1806 //              } 
     1811 
     1812                        // Switch back to use the left property, if RTL is used. 
     1813                        if ( editor.lang.dir == 'rtl' ) 
     1814                        { 
     1815                                var element = dialog._.element.getFirst(), 
     1816                                        left = element.getComputedStyle( 'left' ); 
     1817 
     1818                                // IE might return "auto", we need exact position. 
     1819                                if ( left == 'auto' ) 
     1820                                        left = viewSize.width - parseInt( element.getStyle( 'right' ), 10 ) - dialog.getSize().width; 
     1821                                else 
     1822                                        left = parseInt( left, 10 ); 
     1823 
     1824                                element.removeStyle( 'right' ); 
     1825                                // Make sure the left property gets applied, even if it is the same as previously. 
     1826                                dialog._.position.x += 1; 
     1827                                dialog.move( left, dialog._.position.y ); 
     1828                        } 
     1829                } 
    18071830        } 
    18081831 
     
    29933016 
    29943017/** 
     3018 * The guildeline to follow when generating the dialog buttons. There are 3 possible options: 
     3019 * <ul> 
     3020 *     <li>'OS' - the buttons will be displayed in the default order of the user's OS;</li> 
     3021 *     <li>'ltr' - for Left-To-Right order;</li> 
     3022 *     <li>'rtl' - for Right-To-Left order.</li> 
     3023 * </ul> 
     3024 * @name CKEDITOR.config.dialog_buttonsOrder 
     3025 * @type String 
     3026 * @default 'OS' 
     3027 * @since 3.5 
     3028 * @example 
     3029 * config.dialog_buttonsOrder = 'rtl'; 
     3030 */ 
     3031 
     3032/**   
     3033 * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. 
     3034 * Separate each pair with semicolon (see example). 
     3035 * <b>Note: All names are case-sensitive.</b> 
     3036 * <b>Note: Be cautious when specifying dialog tabs that are mandatory, like "info", dialog functionality might be broken because of this!<b> 
     3037 * @name CKEDITOR.config.removeDialogTabs 
     3038 * @type String 
     3039 * @since 3.5 
     3040 * @default '' 
     3041 * @example 
     3042 * config.removeDialogTabs = 'flash:advanced;image:Link'; 
     3043 */ 
     3044 
     3045/** 
    29953046 * Fired when a dialog definition is about to be used to create a dialog into 
    29963047 * an editor instance. This event makes it possible to customize the definition 
  • CKEditor/trunk/_source/plugins/div/plugin.js

    r5949 r6190  
    3838                                                                div = blockLimit.is( 'div' ) && blockLimit; 
    3939 
    40                                                         if ( div && !div.getAttribute( '_cke_div_added' ) ) 
     40                                                        if ( div && !div.data( 'cke-div-added' ) ) 
    4141                                                        { 
    4242                                                                toRemove.push( div ); 
    43                                                                 div.setAttribute( '_cke_div_added' ); 
     43                                                                div.data( 'cke-div-added' ); 
    4444                                                        } 
    4545                                                } 
  • CKEditor/trunk/_source/plugins/elementspath/plugin.js

    r6182 r6190  
    2020                                var element = CKEDITOR.document.getById( idBase + '0' ); 
    2121 
    22                                 if ( element ) 
    23                                         element.focus(); 
     22                                // Make the first button focus accessible for IE. (#3417) 
     23                                // Adobe AIR instead need while of delay. 
     24                                element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air ); 
    2425                        } 
    2526                } 
     
    5758                                }); 
    5859 
     60                        function onClick( elementIndex ) 
     61                        { 
     62                                editor.focus(); 
     63                                var element = editor._.elementsPath.list[ elementIndex ]; 
     64                                editor.getSelection().selectElement( element ); 
     65                        } 
     66 
     67                        var onClickHanlder = CKEDITOR.tools.addFunction( onClick ); 
     68 
     69                        var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) 
     70                                { 
     71                                        var idBase = editor._.elementsPath.idBase, 
     72                                                element; 
     73 
     74                                        ev = new CKEDITOR.dom.event( ev ); 
     75 
     76                                        var rtl = editor.lang.dir == 'rtl'; 
     77                                        switch ( ev.getKeystroke() ) 
     78                                        { 
     79                                                case rtl ? 39 : 37 :            // LEFT-ARROW 
     80                                                case 9 :                                        // TAB 
     81                                                        element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) ); 
     82                                                        if ( !element ) 
     83                                                                element = CKEDITOR.document.getById( idBase + '0' ); 
     84                                                        element.focus(); 
     85                                                        return false; 
     86 
     87                                                case rtl ? 37 : 39 :            // RIGHT-ARROW 
     88                                                case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB 
     89                                                        element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) ); 
     90                                                        if ( !element ) 
     91                                                                element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) ); 
     92                                                        element.focus(); 
     93                                                        return false; 
     94 
     95                                                case 27 :                                       // ESC 
     96                                                        editor.focus(); 
     97                                                        return false; 
     98 
     99                                                case 13 :                                       // ENTER        // Opera 
     100                                                case 32 :                                       // SPACE 
     101                                                        onClick( elementIndex ); 
     102                                                        return false; 
     103                                        } 
     104                                        return true; 
     105                                }); 
     106 
    59107                        editor.on( 'selectionChange', function( ev ) 
    60108                                { 
     
    83131                                                        var index = elementsList.push( element ) - 1; 
    84132                                                        var name; 
    85                                                         if ( element.getAttribute( '_cke_real_element_type' ) ) 
    86                                                                 name = element.getAttribute( '_cke_real_element_type' ); 
     133                                                        if ( element.data( 'cke-real-element-type' ) ) 
     134                                                                name = element.data( 'cke-real-element-type' ); 
    87135                                                        else 
    88136                                                                name = element.getName(); 
     
    113161                                                                        ' onfocus="event.preventBubble();"' : '' ) + 
    114162                                                                        ' hidefocus="true" ' + 
    115                                                                         ' onkeydown="return CKEDITOR._.elementsPath.keydown(\'', editor.name, '\',', index, ', event);"' + 
     163                                                                        ' onkeydown="return CKEDITOR.tools.callFunction(', onKeyDownHandler, ',', index, ', event );"' + 
    116164                                                                        extra , 
    117                                                                         ' onclick="return CKEDITOR._.elementsPath.click(\'', editor.name, '\',', index, ');"', 
     165                                                                        ' onclick="CKEDITOR.tools.callFunction('+ onClickHanlder, ',', index, '); return false;"', 
    118166                                                                        ' role="button" aria-labelledby="' + idBase + index + '_label">', 
    119167                                                                                name, 
     
    129177                                        } 
    130178 
    131                                         getSpaceElement().setHtml( html.join('') + emptyHtml ); 
     179                                        var space = getSpaceElement(); 
     180                                        space.setHtml( html.join('') + emptyHtml ); 
     181                                        editor.fire( 'elementsPathUpdate', { space : space } ); 
    132182                                }); 
    133183 
     
    143193        }); 
    144194})(); 
    145  
    146 /** 
    147  * Handles the click on an element in the element path. 
    148  * @private 
    149  */ 
    150 CKEDITOR._.elementsPath = 
    151 { 
    152         click : function( instanceName, elementIndex ) 
    153         { 
    154                 var editor = CKEDITOR.instances[ instanceName ]; 
    155                 editor.focus(); 
    156  
    157                 var element = editor._.elementsPath.list[ elementIndex ]; 
    158  
    159                 if ( element.is( 'body' ) ) 
    160                 { 
    161                         var range = new CKEDITOR.dom.range( editor.document ); 
    162                         range.selectNodeContents( element ); 
    163                         range.select(); 
    164                 } 
    165                 else 
    166                         editor.getSelection().selectElement( element ); 
    167  
    168                 return false; 
    169         }, 
    170  
    171         keydown : function( instanceName, elementIndex, ev ) 
    172         { 
    173                 var instance = CKEDITOR.ui.button._.instances[ elementIndex ]; 
    174                 var editor = CKEDITOR.instances[ instanceName ]; 
    175                 var idBase = editor._.elementsPath.idBase; 
    176  
    177                 var element; 
    178  
    179                 ev = new CKEDITOR.dom.event( ev ); 
    180  
    181                 var rtl = editor.lang.dir == 'rtl'; 
    182                 switch ( ev.getKeystroke() ) 
    183                 { 
    184                         case rtl ? 39 : 37 :                                    // LEFT-ARROW 
    185                         case 9 :                                        // TAB 
    186                                 element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) ); 
    187                                 if ( !element ) 
    188                                         element = CKEDITOR.document.getById( idBase + '0' ); 
    189                                 element.focus(); 
    190                                 return false; 
    191  
    192                         case rtl ? 37 : 39 :                                    // RIGHT-ARROW 
    193                         case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB 
    194                                 element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) ); 
    195                                 if ( !element ) 
    196                                         element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) ); 
    197                                 element.focus(); 
    198                                 return false; 
    199  
    200                         case 27 :                                       // ESC 
    201                                 editor.focus(); 
    202                                 return false; 
    203  
    204                         case 13 :                                       // ENTER        // Opera 
    205                         case 32 :                                       // SPACE 
    206                                 this.click( instanceName, elementIndex ); 
    207                                 return false; 
    208  
    209                         //default : 
    210                         //      alert( ev.getKeystroke() ); 
    211                 } 
    212                 return true; 
    213         } 
    214 }; 
  • CKEditor/trunk/_source/plugins/fakeobjects/plugin.js

    r5426 r6190  
    1313                        { 
    1414                                var attributes = element.attributes, 
    15                                         realHtml = attributes && attributes._cke_realelement, 
     15                                        realHtml = attributes && attributes[ 'data-cke-realelement' ], 
    1616                                        realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), 
    1717                                        realElement = realFragment && realFragment.children[ 0 ]; 
     
    1919                                // If we have width/height in the element, we must move it into 
    2020                                // the real element. 
    21                                 if ( realElement && element.attributes._cke_resizable ) 
     21                                if ( realElement && element.attributes[ 'data-cke-resizable' ] ) 
    2222                                { 
    2323                                        var style = element.attributes.style; 
     
    6969                'class' : className, 
    7070                src : CKEDITOR.getUrl( 'images/spacer.gif' ), 
    71                 _cke_realelement : encodeURIComponent( realElement.getOuterHtml() ), 
    72                 _cke_real_node_type : realElement.type, 
     71                'data-cke-realelement' : encodeURIComponent( realElement.getOuterHtml() ), 
     72                'data-cke-real-node-type' : realElement.type, 
    7373                alt : lang[ realElementType ] || lang.unknown, 
    7474                align : realElement.getAttribute( 'align' ) || '' 
     
    7676 
    7777        if ( realElementType ) 
    78                 attributes._cke_real_element_type = realElementType; 
     78                attributes[ 'data-cke-real-element-type' ] = realElementType; 
    7979 
    8080        if ( isResizable ) 
    81                 attributes._cke_resizable = isResizable; 
     81                attributes[ 'data-cke-resizable' ] = isResizable; 
    8282 
    8383        return this.document.createElement( 'img', { attributes : attributes } ); 
     
    9797                'class' : className, 
    9898                src : CKEDITOR.getUrl( 'images/spacer.gif' ), 
    99                 _cke_realelement : encodeURIComponent( html ), 
    100                 _cke_real_node_type : realElement.type, 
     99                'data-cke-realelement' : encodeURIComponent( html ), 
     100                'data-cke-real-node-type' : realElement.type, 
    101101                alt : lang[ realElementType ] || lang.unknown, 
    102102                align : realElement.attributes.align || '' 
     
    104104 
    105105        if ( realElementType ) 
    106                 attributes._cke_real_element_type = realElementType; 
     106                attributes[ 'data-cke-real-element-type' ] = realElementType; 
    107107 
    108108        if ( isResizable ) 
    109                 attributes._cke_resizable = isResizable; 
     109                attributes[ 'data-cke-resizable' ] = isResizable; 
    110110 
    111111        return new CKEDITOR.htmlParser.element( 'img', attributes ); 
     
    114114CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) 
    115115{ 
    116         if ( fakeElement.getAttribute( '_cke_real_node_type' ) != CKEDITOR.NODE_ELEMENT ) 
     116        if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT ) 
    117117                return null; 
    118118 
    119119        return CKEDITOR.dom.element.createFromHtml( 
    120                 decodeURIComponent( fakeElement.getAttribute( '_cke_realelement' ) ), 
     120                decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), 
    121121                this.document ); 
    122122}; 
  • CKEditor/trunk/_source/plugins/flash/dialogs/flash.js

    r5812 r6190  
    191191                                // Try to detect any embed or object tag that has Flash parameters. 
    192192                                var fakeImage = this.getSelectedElement(); 
    193                                 if ( fakeImage && fakeImage.getAttribute( '_cke_real_element_type' ) && fakeImage.getAttribute( '_cke_real_element_type' ) == 'flash' ) 
     193                                if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'flash' ) 
    194194                                { 
    195195                                        this.fakeImage = fakeImage; 
  • CKEditor/trunk/_source/plugins/flash/plugin.js

    r5949 r6190  
    7676                                        var element = evt.data.element; 
    7777 
    78                                         if ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'flash' ) 
     78                                        if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'flash' ) 
    7979                                                evt.data.dialog = 'flash'; 
    8080                                }); 
     
    8686                                        { 
    8787                                                if ( element && element.is( 'img' ) && !element.isReadOnly() 
    88                                                                 && element.getAttribute( '_cke_real_element_type' ) == 'flash' ) 
     88                                                                && element.data( 'cke-real-element-type' ) == 'flash' ) 
    8989                                                        return { flash : CKEDITOR.TRISTATE_OFF }; 
    9090                                        }); 
  • CKEditor/trunk/_source/plugins/floatpanel/plugin.js

    r6118 r6190  
    1 /* 
     1/* 
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
     
    306306                                                        this.allowBlur( true ); 
    307307                                                }, 0, this); 
    308                                         }, 0, this); 
     308                                        },  CKEDITOR.env.air ? 200 : 0, this); 
    309309                                this.visible = 1; 
    310310 
  • CKEditor/trunk/_source/plugins/forms/dialogs/button.js

    r5949 r6190  
    5353                                                { 
    5454                                                        this.setValue( 
    55                                                                         element.getAttribute( '_cke_saved_name' ) || 
     55                                                                        element.data( 'cke-saved-name' ) || 
    5656                                                                        element.getAttribute( 'name' ) || 
    5757                                                                        '' ); 
     
    6262 
    6363                                                        if ( this.getValue() ) 
    64                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     64                                                                element.data( 'cke-saved-name', this.getValue() ); 
    6565                                                        else 
    6666                                                        { 
    67                                                                 element.removeAttribute( '_cke_saved_name' ); 
     67                                                                element.data( 'cke-saved-name', false ); 
    6868                                                                element.removeAttribute( 'name' ); 
    6969                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/checkbox.js

    r5949 r6190  
    5252                                                { 
    5353                                                        this.setValue( 
    54                                                                         element.getAttribute( '_cke_saved_name' ) || 
     54                                                                        element.data( 'cke-saved-name' ) || 
    5555                                                                        element.getAttribute( 'name' ) || 
    5656                                                                        '' ); 
     
    6262                                                        // IE failed to update 'name' property on input elements, protect it now. 
    6363                                                        if ( this.getValue() ) 
    64                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     64                                                                element.data( 'cke-saved-name', this.getValue() ); 
    6565                                                        else 
    6666                                                        { 
    67                                                                 element.removeAttribute( '_cke_saved_name' ); 
     67                                                                element.data( 'cke-saved-name', false ); 
    6868                                                                element.removeAttribute( 'name' ); 
    6969                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/form.js

    r5626 r6190  
    8585                                                setup : function( element ) 
    8686                                                { 
    87                                                         this.setValue( element.getAttribute( '_cke_saved_name' ) || 
     87                                                        this.setValue( element.data( 'cke-saved-name' ) || 
    8888                                                                        element.getAttribute( 'name' ) || 
    8989                                                                        '' ); 
     
    9292                                                { 
    9393                                                        if ( this.getValue() ) 
    94                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     94                                                                element.data( 'cke-saved-name', this.getValue() ); 
    9595                                                        else 
    9696                                                        { 
    97                                                                 element.removeAttribute( '_cke_saved_name' ); 
     97                                                                element.data( 'cke-saved-name', false ); 
    9898                                                                element.removeAttribute( 'name' ); 
    9999                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/hiddenfield.js

    r5548 r6190  
    1818                                element = selection.getSelectedElement(); 
    1919 
    20                         if ( element && element.getAttribute( '_cke_real_element_type' ) && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' ) 
     20                        if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) 
    2121                        { 
    2222                                this.hiddenField = element; 
     
    6060                                                { 
    6161                                                        this.setValue( 
    62                                                                         element.getAttribute( '_cke_saved_name' ) || 
     62                                                                        element.data( 'cke-saved-name' ) || 
    6363                                                                        element.getAttribute( 'name' ) || 
    6464                                                                        '' ); 
  • CKEditor/trunk/_source/plugins/forms/dialogs/radio.js

    r5949 r6190  
    5252                                                { 
    5353                                                        this.setValue( 
    54                                                                         element.getAttribute( '_cke_saved_name' ) || 
     54                                                                        element.data( 'cke-saved-name' ) || 
    5555                                                                        element.getAttribute( 'name' ) || 
    5656                                                                        '' ); 
     
    6161 
    6262                                                        if ( this.getValue() ) 
    63                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     63                                                                element.data( 'cke-saved-name', this.getValue() ); 
    6464                                                        else 
    6565                                                        { 
    66                                                                 element.removeAttribute( '_cke_saved_name' ); 
     66                                                                element.data( 'cke-saved-name', false ); 
    6767                                                                element.removeAttribute( 'name' ); 
    6868                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/select.js

    r5861 r6190  
    194194                                                { 
    195195                                                        if ( name == 'clear' ) 
    196                                                                 this.setValue( this['default'] || '' ); 
     196                                                                this.setValue( this[ 'default' ] || '' ); 
    197197                                                        else if ( name == 'select' ) 
    198198                                                        { 
    199199                                                                this.setValue( 
    200                                                                                 element.getAttribute( '_cke_saved_name' ) || 
     200                                                                                element.data( 'cke-saved-name' ) || 
    201201                                                                                element.getAttribute( 'name' ) || 
    202202                                                                                '' ); 
     
    206206                                                { 
    207207                                                        if ( this.getValue() ) 
    208                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     208                                                                element.data( 'cke-saved-name', this.getValue() ); 
    209209                                                        else 
    210210                                                        { 
    211                                                                 element.removeAttribute( '_cke_saved_name' ) ; 
     211                                                                element.data( 'cke-saved-name', false ); 
    212212                                                                element.removeAttribute( 'name' ); 
    213213                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js

    r5206 r6190  
    5151                                                { 
    5252                                                        this.setValue( 
    53                                                                         element.getAttribute( '_cke_saved_name' ) || 
     53                                                                        element.data( 'cke-saved-name' ) || 
    5454                                                                        element.getAttribute( 'name' ) || 
    5555                                                                        '' ); 
     
    5858                                                { 
    5959                                                        if ( this.getValue() ) 
    60                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     60                                                                element.data( 'cke-saved-name', this.getValue() ); 
    6161                                                        else 
    6262                                                        { 
    63                                                                 element.removeAttribute( '_cke_saved_name' ); 
     63                                                                element.data( 'cke-saved-name', false ); 
    6464                                                                element.removeAttribute( 'name' ); 
    6565                                                        } 
  • CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js

    r5782 r6190  
    9999                                                                { 
    100100                                                                        this.setValue( 
    101                                                                                         element.getAttribute( '_cke_saved_name' ) || 
     101                                                                                        element.data( 'cke-saved-name' ) || 
    102102                                                                                        element.getAttribute( 'name' ) || 
    103103                                                                                        '' ); 
     
    108108 
    109109                                                                        if ( this.getValue() ) 
    110                                                                                 element.setAttribute( '_cke_saved_name', this.getValue() ); 
     110                                                                                element.data( 'cke-saved-name', this.getValue() ); 
    111111                                                                        else 
    112112                                                                        { 
    113                                                                                 element.removeAttribute( '_cke_saved_name' ); 
     113                                                                                element.data( 'cke-saved-name', false ); 
    114114                                                                                element.removeAttribute( 'name' ); 
    115115                                                                        } 
  • CKEditor/trunk/_source/plugins/forms/plugin.js

    r5949 r6190  
    168168                                                } 
    169169 
    170                                                 if ( name == 'img' && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' ) 
     170                                                if ( name == 'img' && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) 
    171171                                                        return { hiddenfield : CKEDITOR.TRISTATE_OFF }; 
    172172                                        } 
     
    184184                                else if ( element.is( 'textarea' ) ) 
    185185                                        evt.data.dialog = 'textarea'; 
    186                                 else if ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' ) 
     186                                else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) 
    187187                                        evt.data.dialog = 'hiddenfield'; 
    188188                                else if ( element.is( 'input' ) ) 
  • CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js

    r6119 r6190  
    1 /* 
     1/* 
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
     
    3939        } 
    4040 
    41         function blockNeedsExtension( block, fromSource ) 
    42         { 
     41        function blockNeedsExtension( block, fromSource, extendEmptyBlock ) 
     42        { 
     43                if( !extendEmptyBlock || 
     44                        typeof extendEmptyBlock == 'function' && ( extendEmptyBlock( block ) == false ) ) 
     45                        return false; 
     46 
    4347        // 1. For IE version >=8,  empty blocks are displayed correctly themself in wysiwiyg; 
    4448        // 2. For the rest, at least table cell and list item need no filler space. 
    4549        // (#6248)