Changeset 6898


Ignore:
Timestamp:
05/09/2011 03:45:31 PM (4 years ago)
Author:
wwalc
Message:

Merge trunk [6657:6896].

Location:
CKEditor/branches/versions/3.5.x
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/branches/versions/3.5.x

  • CKEditor/branches/versions/3.5.x/CHANGES.html

    r6656 r6898  
    3535                CKEditor Changelog 
    3636        </h1> 
     37        <h3> 
     38                        CKEditor 3.5.4 (SVN)</h3> 
     39        <p> 
     40                        New features:</p> 
     41        <ul> 
     42                <li></li> 
     43        </ul> 
     44        <p> 
     45                        Fixed issues:</p> 
     46        <ul> 
     47                <li>Added protection against XSS attacks in PHP samples when displaying element names.</li> 
     48                <li><a href="http://dev.ckeditor.com/ticket/7347">#7347</a> : The <em>Enter</em> key will no longer be caught by the dialog window covering the editor.</li> 
     49                <li><a href="http://dev.ckeditor.com/ticket/6718">#6718</a> : Paste from Word command overrides the Force Paste as Plain Text configuration.</li> 
     50                <li><a href="http://dev.ckeditor.com/ticket/6629">#6629</a> : Padding body is no longer needed when the last block is pre-formatted.</li> 
     51                <li><a href="http://dev.ckeditor.com/ticket/4844">#4844</a> : [IE] Dialog windows fail to load if there are too many editor instances on the page.</li> 
     52                <li><a href="http://dev.ckeditor.com/ticket/5788">#5788</a> : HTML parser trims empty spaces following <code>&lt;br&gt;</code> elements.</li> 
     53                <li><a href="http://dev.ckeditor.com/ticket/7513">#7513</a> : Invalid markup could cause the editor to hang.</li> 
     54                <li><a href="http://dev.ckeditor.com/ticket/6109">#6109</a> : Paste and Paste as Plain Text dialog windows now use the standard <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html#commitContent">commitContent</a></code> and <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html#setupContent">setupContent</a></code> methods.</li> 
     55                <li><a href="http://dev.ckeditor.com/ticket/7588">#7588</a> : The editor code now has a protection system to avoid issues when including <code>ckeditor.js</code> more than once in the page.</li> 
     56                <li><a href="http://dev.ckeditor.com/ticket/7322">#7322</a> : Text font plugin now recognizes font family names that contain quotes.</li> 
     57                <li><a href="http://dev.ckeditor.com/ticket/7540">#7540</a> : Paste from Word introduces wrong spaces.</li> 
     58                <li><a href="http://dev.ckeditor.com/ticket/7697">#7697</a> : Successive calls of the <code>replace()</code> method did not work after SCAYT context menu initialization.</li> 
     59                <li>Updated the following language files:<ul> 
     60                        <li><a href="http://dev.ckeditor.com/ticket/7647">#7647</a> : Slovak;</li> 
     61                </ul></li> 
     62        </ul> 
    3763        <h3> 
    3864                        CKEditor 3.5.3</h3> 
  • CKEditor/branches/versions/3.5.x/_dev/releaser/release.bat

    r6656 r6898  
    1111:: rmdir /S /Q release 
    1212 
    13 java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.3" ckeditor_3.5.3 --run-before-release=langtool.bat 
     13java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.4 (SVN)" ckeditor_3.5.4_svn --run-before-release=langtool.bat 
  • CKEditor/branches/versions/3.5.x/_dev/releaser/release.sh

    r6656 r6898  
    1313 
    1414pushd $DIR 
    15 java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.3" ckeditor_3.5.3 --run-before-release=$LANGTOOL 
     15java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.4 (SVN)" ckeditor_3.5.4_svn --run-before-release=$LANGTOOL 
    1616popd 
  • CKEditor/branches/versions/3.5.x/_samples/asp/index.html

    r6396 r6898  
    8181        <ul class="samples"> 
    8282                <li><a class="samples" href="replace.asp">Replace existing textareas by code</a></li> 
    83                 <li><a class="samples" href="replaceAll.asp">Replace all textareas by code</a></li> 
     83                <li><a class="samples" href="replaceall.asp">Replace all textareas by code</a></li> 
    8484                <li><a class="samples" href="standalone.asp">Create instances in asp</a></li> 
    8585        </ul> 
  • CKEditor/branches/versions/3.5.x/_samples/assets/_posteddata.php

    r6396 r6898  
    4040?> 
    4141                <tr> 
    42                         <th style="vertical-align: top"><?php echo $sForm?></th> 
     42                        <th style="vertical-align: top"><?php echo htmlspecialchars($sForm); ?></th> 
    4343                        <td><pre class="samples"><?php echo $postedValue?></pre></td> 
    4444                </tr> 
  • CKEditor/branches/versions/3.5.x/_samples/php/index.html

    r6396 r6898  
    2020                <li><a class="samples" href="replace.php">Replace existing textarea elements by code</a><br /> 
    2121                Replacement of selected textarea elements with CKEditor instances by using a JavaScript call.</li> 
    22                 <li><a class="samples" href="replaceAll.php">Replace all textarea elements by code</a><br /> 
     22                <li><a class="samples" href="replaceall.php">Replace all textarea elements by code</a><br /> 
    2323                Replacement of all textarea elements with CKEditor instances by using a JavaScript call.</li> 
    2424                <li><a class="samples" href="standalone.php">Create CKEditor instances in PHP</a><br /> 
  • CKEditor/branches/versions/3.5.x/_samples/placeholder.html

    r6396 r6898  
    2323        <p> 
    2424                This sample shows how to configure CKEditor instances to use the 
    25                 <strong>placeholder</strong> plugin that lets you insert read-only elements 
     25                <strong>Placeholder</strong> plugin that lets you insert read-only elements 
    2626                into your content. To enter and modify read-only text, use the 
    2727                <strong>Create Placeholder</strong> button and its matching dialog window. 
    2828        </p> 
    2929        <p> 
    30                 To add a CKEditor instance that uses the <strong>placeholder</strong> plugin and a related 
     30                To add a CKEditor instance that uses the <code>placeholder</code> plugin and a related 
    3131                <strong>Create Placeholder</strong> toolbar button, insert the following JavaScript 
    3232                call to your code: 
     
    5555                <p> 
    5656                        <label for="editor1"> 
    57                                 CKEditor using the <strong>placeholder</strong> plugin with its default configuration:</label> 
     57                                CKEditor using the <code>placeholder</code> plugin with its default configuration:</label> 
    5858                        <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is a [[sample placeholder]]. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. &lt;/p&gt;</textarea> 
    5959                        <script type="text/javascript"> 
  • CKEditor/branches/versions/3.5.x/_source/core/ckeditor_base.js

    r6655 r6898  
    1717// #### Raw code 
    1818// ATTENTION: read the above "Compressed Code" notes when changing this code. 
     19 
     20/* @Packager.RemoveLine 
     21// Avoid having the editor code initialized twice. (#7588) 
     22// Use CKEDITOR.dom to check whether the full ckeditor.js code has been loaded 
     23// or just ckeditor_basic.js. 
     24// Remove these lines when compressing manually. 
     25if ( window.CKEDITOR && window.CKEDITOR.dom ) 
     26        return; 
     27@Packager.RemoveLine */ 
    1928 
    2029if ( !window.CKEDITOR ) 
  • CKEditor/branches/versions/3.5.x/_source/core/dom/walker.js

    r6396 r6898  
    339339        CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames ) 
    340340        { 
    341                 var nodeNameMatches = CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} ); 
     341                var nodeNameMatches = customNodeNames ? 
     342                        CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} ) : 
     343                        CKEDITOR.dtd.$block; 
    342344 
    343345                // Don't consider floated formatting as block boundary, fall back to dtd check in that case. (#6297) 
  • CKEditor/branches/versions/3.5.x/_source/core/dtd.js

    r6396 r6898  
    182182        table : {thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}, 
    183183        code : L, 
    184         script : N, 
    185184        tfoot : M, 
    186185        cite : L, 
  • CKEditor/branches/versions/3.5.x/_source/core/editor.js

    r6655 r6898  
    562562                 *              executed, otherwise "false". 
    563563                 * @example 
    564                  * editorInstance.execCommand( 'Bold' ); 
     564                 * editorInstance.execCommand( 'bold' ); 
    565565                 */ 
    566566                execCommand : function( commandName, data ) 
  • CKEditor/branches/versions/3.5.x/_source/core/htmlparser.js

    r6396 r6898  
    1919        this._ = 
    2020        { 
    21                 htmlPartsRegex : new RegExp( '<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^"\'>]+)|(?:"[^"]*")|(?:\'[^\']*\'))*)\\/?>))', 'g' ) 
     21                htmlPartsRegex : new RegExp( '<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:"[^"]*")|(?:\'[^\']*\')|[^"\'>])*)\\/?>))', 'g' ) 
    2222        }; 
    2323}; 
  • CKEditor/branches/versions/3.5.x/_source/core/htmlparser/fragment.js

    r6655 r6898  
    361361                parser.onText = function( text ) 
    362362                { 
    363                         // Trim empty spaces at beginning of element contents except <pre>. 
    364                         if ( !currentNode._.hasInlineStarted && !inPre ) 
     363                        // Trim empty spaces at beginning of text contents except <pre>. 
     364                        if ( ( !currentNode._.hasInlineStarted || pendingBRs.length ) && !inPre ) 
    365365                        { 
    366366                                text = CKEDITOR.tools.ltrim( text ); 
  • CKEditor/branches/versions/3.5.x/_source/core/plugindefinition.js

    r6396 r6898  
    2828 * { 
    2929 *     requires : [ 'button', 'selection' ] 
     30 * }); 
     31 */ 
     32 
     33/** 
     34 * A list of language files available for this plugin. These files are stored inside 
     35 * the "lang" directory, which is inside the plugin directory, follow the name 
     36 * pattern of "langCode.js", and contain a language definition created with {@link CKEDITOR.pluginDefinition#setLang}. 
     37 * While the plugin is being loaded, the editor checks this list to see if 
     38 * a language file of the current editor language ({@link CKEDITOR.editor#langCode}) 
     39 * is available, and if so, loads it. Otherwise, the file represented by the first list item 
     40 * in the list is loaded. 
     41 * @name CKEDITOR.pluginDefinition.prototype.lang 
     42 * @type Array 
     43 * @example 
     44 * CKEDITOR.plugins.add( 'sample', 
     45 * { 
     46 *     lang : [ 'en', 'fr' ] 
    3047 * }); 
    3148 */ 
  • CKEditor/branches/versions/3.5.x/_source/core/plugins.js

    r6655 r6898  
    7777        }); 
    7878 
     79/** 
     80 * Loads a specific language file, or auto detect it. A callback is 
     81 * then called when the file gets loaded. 
     82 * @param {String} pluginName The name of the plugin to which the provided translation 
     83 *              should be attached. 
     84 * @param {String} languageCode The code of the language translation provided. 
     85 * @param {Object} languageEntries An object that contains pairs of label and 
     86 *              the respective translation. 
     87 * @example 
     88 * CKEDITOR.plugins.setLang( 'myPlugin', 'en', { 
     89 *      title : 'My plugin', 
     90 *      selectOption : 'Please select an option' 
     91 * } ); 
     92 */ 
    7993CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries ) 
    8094{ 
  • CKEditor/branches/versions/3.5.x/_source/lang/_translationstatus.txt

    r6655 r6898  
    4848ro.js      Found: 289 Missing: 233 
    4949ru.js      Found: 451 Missing: 71 
    50 sk.js      Found: 290 Missing: 232 
     50sk.js      Found: 334 Missing: 188 
    5151sl.js      Found: 394 Missing: 128 
    5252sr-latn.js Found: 264 Missing: 258 
  • CKEditor/branches/versions/3.5.x/_source/lang/sk.js

    r6655 r6898  
    3232         * of reading non-English words. So be careful while translating it. 
    3333         */ 
    34         editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING 
     34        editorTitle : 'Rich text editor, %1, stlačte ALT 0 pre nápovedu.', 
    3535 
    3636        // ARIA descriptions. 
     
    5757        horizontalrule  : 'Vložiť vodorovnú čiaru', 
    5858        pagebreak               : 'Vložiť oddeľovač stránky', 
    59         pagebreakAlt            : 'Page Break', // MISSING 
     59        pagebreakAlt            : 'Zalomenie strany', 
    6060        unlink                  : 'Odstrániť odkaz', 
    6161        undo                    : 'Späť', 
     
    9494                ok                              : 'OK', 
    9595                cancel                  : 'Zrušiť', 
    96                 close                   : 'Close', // MISSING 
    97                 preview                 : 'Preview', // MISSING 
     96                close                   : 'Zatvorit', 
     97                preview                 : 'Náhľad', 
    9898                generalTab              : 'Hlavné', 
    9999                advancedTab             : 'Rozšírené', 
    100                 validateNumberFailed : 'This value is not a number.', // MISSING 
    101                 confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING 
    102                 confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING 
     100                validateNumberFailed : 'Hodnota nieje číslo.', 
     101                confirmNewPage  : 'Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ', 
     102                confirmCancel   : 'Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?', 
    103103                options                 : 'Options', // MISSING 
    104104                target                  : 'Target', // MISSING 
     
    120120                alignMiddle             : 'Na stred', 
    121121                alignBottom             : 'Dole', 
    122                 invalidHeight   : 'Height must be a number.', // MISSING 
    123                 invalidWidth    : 'Width must be a number.', // MISSING 
     122                invalidHeight   : 'Výška musí byť číslo.', 
     123                invalidWidth    : 'Šírka musí byť číslo.', 
    124124 
    125125                // Put the voice-only part of the label in the span. 
     
    137137                toolbar         : 'Vložiť špeciálne znaky', 
    138138                title           : 'Výber špeciálneho znaku', 
    139                 options : 'Special Character Options' // MISSING 
     139                options : 'Možnosti špecíalneho znaku' 
    140140        }, 
    141141 
     
    160160                targetPopupName : 'Názov vyskakovacieho okna', 
    161161                popupFeatures   : 'Vlastnosti vyskakovacieho okna', 
    162                 popupResizable  : 'Resizable', // MISSING 
     162                popupResizable  : 'Meniteľná veľkosť', 
    163163                popupStatusBar  : 'Stavový riadok', 
    164164                popupLocationBar: 'Panel umiestnenia', 
     
    208208        list: 
    209209        { 
    210                 numberedTitle           : 'Numbered List Properties', // MISSING 
     210                numberedTitle           : 'Vlastnosti číselného zoznamu', 
    211211                bulletedTitle           : 'Bulleted List Properties', // MISSING 
    212                 type                            : 'Type', // MISSING 
    213                 start                           : 'Start', // MISSING 
    214                 validateStartNumber                             :'List start number must be a whole number.', // MISSING 
     212                type                            : 'Druh', 
     213                start                           : 'Začiatok', 
     214                validateStartNumber                             :'Začiatočné číslo číselného zoznamu musí byť celé číslo.', 
    215215                circle                          : 'Circle', // MISSING 
    216216                disc                            : 'Disc', // MISSING 
     
    242242                matchCyclic                     : 'Match cyclic', // MISSING 
    243243                replaceAll                      : 'Nahradiť všetko', 
    244                 replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING 
     244                replaceSuccessMsg       : '%1 výskyt(ov) nahradených.' 
    245245        }, 
    246246 
     
    262262                caption         : 'Popis', 
    263263                summary         : 'Prehľad', 
    264                 headers         : 'Headers', // MISSING 
    265                 headersNone             : 'None', // MISSING 
    266                 headersColumn   : 'First column', // MISSING 
    267                 headersRow              : 'First Row', // MISSING 
    268                 headersBoth             : 'Both', // MISSING 
    269                 invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING 
    270                 invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING 
    271                 invalidBorder   : 'Border size must be a number.', // MISSING 
    272                 invalidWidth    : 'Table width must be a number.', // MISSING 
    273                 invalidHeight   : 'Table height must be a number.', // MISSING 
    274                 invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING 
    275                 invalidCellPadding      : 'Cell padding must be a number.', // MISSING 
     264                headers         : 'Hlavička', 
     265                headersNone             : 'Žiadne', 
     266                headersColumn   : 'Prvý stĺpec', 
     267                headersRow              : 'Prvý riadok', 
     268                headersBoth             : 'Obe', 
     269                invalidRows             : 'Počet riadkov musí byť číslo väčšie ako 0.', 
     270                invalidCols             : 'Počet stĺpcov musí byť číslo väčšie ako 0.', 
     271                invalidBorder   : 'Širka rámu musí byť celé číslo.', 
     272                invalidWidth    : 'Širka tabuľky musí byť číslo.', 
     273                invalidHeight   : 'Výška tabuľky musí byť číslo.', 
     274                invalidCellSpacing      : 'Medzera mädzi bunkami (spacing) musí byť číslo.', 
     275                invalidCellPadding      : 'Odsadenie v bunkách (padding) musí byť číslo.', 
    276276 
    277277                cell : 
     
    351351                action          : 'Akcie', 
    352352                method          : 'Metóda', 
    353                 encoding        : 'Encoding' // MISSING 
     353                encoding        : 'Kódovanie' 
    354354        }, 
    355355 
     
    476476                toolbar                 : 'Kontrola pravopisu', 
    477477                title                   : 'Spell Check', // MISSING 
    478                 notAvailable    : 'Sorry, but service is unavailable now.', // MISSING 
    479                 errorLoading    : 'Error loading application service host: %s.', // MISSING 
     478                notAvailable    : 'Služba práve nieje dostupná.', 
     479                errorLoading    : 'Chyba pri načítaní slovníka z adresy: %s.', 
    480480                notInDic                : 'Nie je v slovníku', 
    481481                changeTo                : 'Zmeniť na', 
     
    498498                toolbar : 'Smajlíky', 
    499499                title   : 'Vkladanie smajlíkov', 
    500                 options : 'Smiley Options' // MISSING 
     500                options : 'Možnosti smajlíkov' 
    501501        }, 
    502502 
     
    529529                pasteMsg        : 'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte <STRONG>OK</STRONG>.', 
    530530                securityMsg     : 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.', 
    531                 pasteArea       : 'Paste Area' // MISSING 
     531                pasteArea       : 'Vložiť pole' 
    532532        }, 
    533533 
    534534        pastefromword : 
    535535        { 
    536                 confirmCleanup  : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING 
     536                confirmCleanup  : 'Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?', 
    537537                toolbar                 : 'Vložiť z Wordu', 
    538538                title                   : 'Vložiť z Wordu', 
    539                 error                   : 'It was not possible to clean up the pasted data due to an internal error' // MISSING 
     539                error                   : 'Nastala chyba pri čistení údajov. Nie je možné vyčistiť vložené údaje.' 
    540540        }, 
    541541 
     
    550550                button                  : 'Šablóny', 
    551551                title                   : 'Šablóny obsahu', 
    552                 options : 'Template Options', // MISSING 
     552                options : 'Vlastnosti šablóny', 
    553553                insertOption    : 'Nahradiť aktuálny obsah', 
    554554                selectPromptMsg : 'Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):', 
     
    603603        iframe : 
    604604        { 
    605                 title           : 'IFrame Properties', // MISSING 
     605                title           : 'IFrame - vlastnosti', 
    606606                toolbar         : 'IFrame', // MISSING 
    607                 noUrl           : 'Please type the iframe URL', // MISSING 
    608                 scrolling       : 'Enable scrollbars', // MISSING 
    609                 border          : 'Show frame border' // MISSING 
     607                noUrl           : 'Vložte URL pre iframe', 
     608                scrolling       : 'Povoliť skrolovanie', 
     609                border          : 'Zobraziť orámovanie' 
    610610        }, 
    611611 
     
    620620        { 
    621621                label           : 'Veľkosť', 
    622                 voiceLabel      : 'Font Size', // MISSING 
     622                voiceLabel      : 'Veľkosť písma', 
    623623                panelTitle      : 'Veľkosť' 
    624624        }, 
     
    628628                textColorTitle  : 'Farba textu', 
    629629                bgColorTitle    : 'Farba pozadia', 
    630                 panelTitle              : 'Colors', // MISSING 
     630                panelTitle              : 'Farby', 
    631631                auto                    : 'Automaticky', 
    632632                more                    : 'Viac farieb...' 
     
    720720        }, 
    721721 
    722         maximize : 'Maximize', // MISSING 
    723         minimize : 'Minimize', // MISSING 
     722        maximize : 'Maximalizovať', 
     723        minimize : 'Minimalizovať', 
    724724 
    725725        fakeobjects : 
  • CKEditor/branches/versions/3.5.x/_source/plugins/button/plugin.js

    r6396 r6898  
    276276/** 
    277277 * Adds a button definition to the UI elements list. 
    278  * @param {String} The button name. 
    279  * @param {Object} The button definition. 
     278 * @param {String} name The button name. 
     279 * @param {Object} definition The button definition. 
    280280 * @example 
    281281 * editorInstance.ui.addButton( 'MyBold', 
  • CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/dialogs/paste.js

    r6655 r6898  
    6767                        this.parts.dialog.$.offsetHeight; 
    6868 
    69                         var htmlToLoad = 
    70                                 '<html dir="' + editor.config.contentsLangDirection + '"' + 
    71                                 ' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' + 
    72                                         '<head><style>body { margin: 3px; height: 95%; } </style></head><body>' + 
    73                                         '<script id="cke_actscrpt" type="text/javascript">' + 
    74                                         'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' + 
    75                                         '</script></body>' + 
    76                                 '</html>'; 
    77  
    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  
    90                         var iframe = CKEDITOR.dom.element.createFromHtml( 
    91                                                 '<iframe' + 
    92                                                 ' class="cke_pasteframe"' + 
    93                                                 ' frameborder="0" ' + 
    94                                                 ' allowTransparency="true"' + 
    95                                                 ' src="' + src + '"' + 
    96                                                 ' role="region"' + 
    97                                                 ' aria-label="' + lang.pasteArea + '"' + 
    98                                                 ' aria-describedby="' + this.getContentElement( 'general', 'pasteMsg' ).domId + '"' + 
    99                                                 ' aria-multiple="true"' + 
    100                                                 '></iframe>' ); 
    101  
    102                         iframe.on( 'load', function( e ) 
    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 ); 
    113  
    114                         iframe.setCustomData( 'dialog', this ); 
    115  
    116                         var field = this.getContentElement( 'general', 'editing_area' ), 
    117                                 container = field.getElement(); 
    118                         container.setHtml( '' ); 
    119                         container.append( iframe ); 
    120  
    121                         // IE need a redirect on focus to make 
    122                         // the cursor blinking inside iframe. (#5461) 
    123                         if ( CKEDITOR.env.ie ) 
    124                         { 
    125                                 var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' ); 
    126                                 focusGrabber.on( 'focus', function() 
    127                                 { 
    128                                         iframe.$.contentWindow.focus(); 
    129                                 }); 
    130                                 container.append( focusGrabber ); 
    131  
    132                                 // Override focus handler on field. 
    133                                 field.focus = function() 
    134                                 { 
    135                                         focusGrabber.focus(); 
    136                                         this.fire( 'focus' ); 
    137                                 }; 
    138                         } 
    139  
    140                         field.getInputElement = function(){ return iframe; }; 
    141  
    142                         // Force container to scale in IE. 
    143                         if ( CKEDITOR.env.ie ) 
    144                         { 
    145                                 container.setStyle( 'display', 'block' ); 
    146                                 container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' ); 
    147                         } 
     69                        this.setupContent(); 
    14870                }, 
    14971 
     
    16284                onOk : function() 
    16385                { 
    164                         var container = this.getContentElement( 'general', 'editing_area' ).getElement(), 
    165                                 iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ), 
    166                                 editor = this.getParentEditor(), 
    167                                 body = iframe.getFrameDocument().getBody(), 
    168                                 bogus = body.getBogus(), 
    169                                 html; 
    170                         bogus && bogus.remove(); 
    171                         // Saving the contents in variable so changes until paste is complete will not take place (#7500) 
    172                         html = body.getHtml(); 
    173  
    174                         setTimeout( function(){ 
    175                                 editor.fire( 'paste', { 'html' : html } ); 
    176                         }, 0 ); 
    177  
     86                        this.commitContent(); 
    17887                }, 
    17988 
     
    209118                                                                win.focus(); 
    210119                                                        }, 500 ); 
     120                                                }, 
     121                                                setup : function() 
     122                                                { 
     123                                                        var dialog = this.getDialog(); 
     124                                                        var htmlToLoad = 
     125                                                                '<html dir="' + editor.config.contentsLangDirection + '"' + 
     126                                                                ' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' + 
     127                                                                '<head><style>body { margin: 3px; height: 95%; } </style></head><body>' + 
     128                                                                '<script id="cke_actscrpt" type="text/javascript">' + 
     129                                                                'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, dialog ) + ', this );' + 
     130                                                                '</script></body>' + 
     131                                                                '</html>'; 
     132 
     133                                                        var src = 
     134                                                                CKEDITOR.env.air ? 
     135                                                                        'javascript:void(0)' : 
     136                                                                isCustomDomain ? 
     137                                                                        'javascript:void((function(){' + 
     138                                                                                'document.open();' + 
     139                                                                                'document.domain=\'' + document.domain + '\';' + 
     140                                                                                'document.close();' + 
     141                                                                        '})())"' 
     142                                                                : 
     143                                                                        ''; 
     144 
     145                                                        var iframe = CKEDITOR.dom.element.createFromHtml( 
     146                                                                '<iframe' + 
     147                                                                        ' class="cke_pasteframe"' + 
     148                                                                        ' frameborder="0" ' + 
     149                                                                        ' allowTransparency="true"' + 
     150                                                                        ' src="' + src + '"' + 
     151                                                                        ' role="region"' + 
     152                                                                        ' aria-label="' + lang.pasteArea + '"' + 
     153                                                                        ' aria-describedby="' + dialog.getContentElement( 'general', 'pasteMsg' ).domId + '"' + 
     154                                                                        ' aria-multiple="true"' + 
     155                                                                        '></iframe>' ); 
     156 
     157                                                        iframe.on( 'load', function( e ) 
     158                                                        { 
     159                                                                e.removeListener(); 
     160 
     161                                                                var doc = iframe.getFrameDocument(); 
     162                                                                doc.write( htmlToLoad ); 
     163 
     164                                                                if ( CKEDITOR.env.air ) 
     165                                                                        onPasteFrameLoad.call( this, doc.getWindow().$ ); 
     166                                                        }, dialog ); 
     167 
     168                                                        iframe.setCustomData( 'dialog', dialog ); 
     169 
     170                                                        var container = this.getElement(); 
     171                                                        container.setHtml( '' ); 
     172                                                        container.append( iframe ); 
     173 
     174                                                        // IE need a redirect on focus to make 
     175                                                        // the cursor blinking inside iframe. (#5461) 
     176                                                        if ( CKEDITOR.env.ie ) 
     177                                                        { 
     178                                                                var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' ); 
     179                                                                focusGrabber.on( 'focus', function() 
     180                                                                { 
     181                                                                        iframe.$.contentWindow.focus(); 
     182                                                                }); 
     183                                                                container.append( focusGrabber ); 
     184 
     185                                                                // Override focus handler on field. 
     186                                                                this.focus = function() 
     187                                                                { 
     188                                                                        focusGrabber.focus(); 
     189                                                                        this.fire( 'focus' ); 
     190                                                                }; 
     191                                                        } 
     192 
     193                                                        this.getInputElement = function(){ return iframe; }; 
     194 
     195                                                        // Force container to scale in IE. 
     196                                                        if ( CKEDITOR.env.ie ) 
     197                                                        { 
     198                                                                container.setStyle( 'display', 'block' ); 
     199                                                                container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' ); 
     200                                                        } 
     201                                                }, 
     202                                                commit : function( data ) 
     203                                                { 
     204                                                        var container = this.getElement(), 
     205                                                                editor = this.getDialog().getParentEditor(), 
     206                                                                body = this.getInputElement().getFrameDocument().getBody(), 
     207                                                                bogus = body.getBogus(), 
     208                                                                html; 
     209                                                        bogus && bogus.remove(); 
     210 
     211                                                        // Saving the contents so changes until paste is complete will not take place (#7500) 
     212                                                        html = body.getHtml(); 
     213 
     214                                                        setTimeout( function(){ 
     215                                                                editor.fire( 'paste', { 'html' : html } ); 
     216                                                        }, 0 ); 
    211217                                                } 
    212218                                        } 
  • CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/plugin.js

    r6655 r6898  
    215215                // Turn off design mode temporarily before give focus to the paste bin. 
    216216                if ( mode == 'text' ) 
    217                 { 
    218                         if ( CKEDITOR.env.ie ) 
    219                         { 
    220                                 var ieRange = doc.getBody().$.createTextRange(); 
    221                                 ieRange.moveToElementText( pastebin.$ ); 
    222                                 ieRange.execCommand( 'Paste' ); 
    223                                 evt.data.preventDefault(); 
    224                         } 
    225                         else 
    226                                 pastebin.$.focus(); 
    227                 } 
     217                        pastebin.$.focus(); 
    228218                else 
    229219                { 
     
    378368                                editor.on( 'key', onKey, editor ); 
    379369 
    380                                 var mode = editor.config.forcePasteAsPlainText ? 'text' : 'html'; 
    381  
    382370                                // We'll be catching all pasted content in one line, regardless of whether the 
    383371                                // it's introduced by a document command execution (e.g. toolbar buttons) or 
     
    386374                                { 
    387375                                        var body = editor.document.getBody(); 
    388                                         body.on( ( ( mode == 'text' && CKEDITOR.env.ie ) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste', 
    389                                                 function( evt ) 
     376                                        body.on( CKEDITOR.env.webkit ? 'paste' : 'beforepaste', function( evt ) 
    390377                                                { 
    391378                                                        if ( depressBeforeEvent ) 
    392379                                                                return; 
    393380 
    394                                                         getClipboardData.call( editor, evt, mode, function ( data ) 
     381                                                        // Fire 'beforePaste' event so clipboard flavor get customized 
     382                                                        // by other plugins. 
     383                                                        var eventData =  { mode : 'html' }; 
     384                                                        editor.fire( 'beforePaste', eventData ); 
     385 
     386                                                        getClipboardData.call( editor, evt, eventData.mode, function ( data ) 
    395387                                                        { 
    396388                                                                // The very last guard to make sure the 
    397389                                                                // paste has successfully happened. 
    398                                                                 if ( !CKEDITOR.tools.trim( data.toLowerCase().replace( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/g,'' ) ) ) 
     390                                                                if ( !( data = CKEDITOR.tools.trim( data.replace( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,'' ) ) ) ) 
    399391                                                                        return; 
    400392 
    401393                                                                var dataTransfer = {}; 
    402                                                                 dataTransfer[ mode ] = data; 
     394                                                                dataTransfer[ eventData.mode ] = data; 
    403395                                                                editor.fire( 'paste', dataTransfer ); 
    404396                                                        } ); 
  • CKEditor/branches/versions/3.5.x/_source/plugins/colorbutton/plugin.js

    r6655 r6898  
    228228/** 
    229229 * Whether to enable the "More Colors..." button in the color selectors. 
     230 * @name CKEDITOR.config.colorButton_enableMore 
    230231 * @default true 
    231232 * @type Boolean 
     
    241242 * name and the slash character. For example, "FontColor1/FF9900" will be 
    242243 * displayed as the color #FF9900 in the selector, but will be outputted as "FontColor1". 
     244 * @name CKEDITOR.config.colorButton_colors 
    243245 * @type String 
    244246 * @default '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF' 
     
    258260/** 
    259261 * Holds the style definition to be used to apply the text foreground color. 
     262 * @name CKEDITOR.config.colorButton_foreStyle 
    260263 * @type Object 
    261264 * @example 
     
    276279/** 
    277280 * Holds the style definition to be used to apply the text background color. 
     281 * @name CKEDITOR.config.colorButton_backStyle 
    278282 * @type Object 
    279283 * @example 
  • CKEditor/branches/versions/3.5.x/_source/plugins/colordialog/plugin.js

    r5206 r6898  
    1 ( function() 
     1/* 
     2Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. 
     3For licensing, see LICENSE.html or http://ckeditor.com/license 
     4*/ 
     5 
     6CKEDITOR.plugins.colordialog = 
    27{ 
    3         CKEDITOR.plugins.colordialog = 
     8        init : function( editor ) 
    49        { 
    5                 init : function( editor ) 
    6                 { 
    7                         editor.addCommand( 'colordialog', new CKEDITOR.dialogCommand( 'colordialog' ) ); 
    8                         CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' ); 
    9                 } 
    10         }; 
     10                editor.addCommand( 'colordialog', new CKEDITOR.dialogCommand( 'colordialog' ) ); 
     11                CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' ); 
     12        } 
     13}; 
    1114 
    12         CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog ); 
    13 } )(); 
     15CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog ); 
  • CKEditor/branches/versions/3.5.x/_source/plugins/dialog/dialogDefinition.js

    r6655 r6898  
    283283 * Function to execute whenever the UI element's parent dialog is closed. 
    284284 * @name CKEDITOR.dialog.definition.uiElement.prototype.onHide 
     285 * @field 
     286 * @type Function 
     287 * @example 
     288 */ 
     289 
     290/** 
     291 * Function to execute whenever the UI element's parent dialog's {@link CKEDITOR.dialog.definition.setupContent} method is executed. 
     292 * It usually takes care of the respective UI element as a standalone element. 
     293 * @name CKEDITOR.dialog.definition.uiElement.prototype.setup 
     294 * @field 
     295 * @type Function 
     296 * @example 
     297 */ 
     298 
     299/** 
     300 * Function to execute whenever the UI element's parent dialog's {@link CKEDITOR.dialog.definition.commitContent} method is executed. 
     301 * It usually takes care of the respective UI element as a standalone element. 
     302 * @name CKEDITOR.dialog.definition.uiElement.prototype.commit 
    285303 * @field 
    286304 * @type Function 
  • CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js

    r6655 r6898  
    860860                })(), 
    861861 
     862 
     863                /** 
     864                 * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each of the UI elements, with the arguments passed through it. 
     865                 * It is usually being called when the dialog is opened, to put the initial value inside the field. 
     866                 * @example 
     867                 * dialogObj.setupContent(); 
     868                 * @example 
     869                 * var timestamp = ( new Date() ).valueOf(); 
     870                 * dialogObj.setupContent( timestamp ); 
     871                 */ 
    862872                setupContent : function() 
    863873                { 
     
    870880                }, 
    871881 
     882                /** 
     883                 * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each of the UI elements, with the arguments passed through it. 
     884                 * It is usually being called when the user confirms the dialog, to process the values. 
     885                 * @example 
     886                 * dialogObj.commitContent(); 
     887                 * @example 
     888                 * var timestamp = ( new Date() ).valueOf(); 
     889                 * dialogObj.commitContent( timestamp ); 
     890                 */ 
    872891                commitContent : function() 
    873892                { 
     
    11401159                 * @param {String} elementId id of UI element. 
    11411160                 * @example 
     1161                 * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); 
    11421162                 * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. 
    11431163                 */ 
     
    11531173                 * @param {String} elementId id of UI element. 
    11541174                 * @example 
     1175                 * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); 
    11551176                 * @returns {Object} The value of the UI element. 
    11561177                 */ 
     
    11661187                 * @param {Object} value The new value of the UI element. 
    11671188                 * @example 
     1189                 * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); 
    11681190                 */ 
    11691191                setValueOf : function( pageId, elementId, value ) 
     
    19061928                currentCover; 
    19071929 
     1930        function cancelEvent( ev ) 
     1931        { 
     1932                ev.data.preventDefault(1); 
     1933        } 
     1934 
    19081935        function showCover( editor ) 
    19091936        { 
     
    19651992                        coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); 
    19661993                        coverElement.setOpacity( backgroundCoverOpacity != undefined ? backgroundCoverOpacity : 0.5 ); 
     1994 
     1995                        coverElement.on( 'keydown', cancelEvent ); 
     1996                        coverElement.on( 'keypress', cancelEvent ); 
     1997                        coverElement.on( 'keyup', cancelEvent ); 
    19671998 
    19681999                        coverElement.appendTo( CKEDITOR.document.getBody() ); 
  • CKEditor/branches/versions/3.5.x/_source/plugins/entities/plugin.js

    r6396 r6898  
    172172/** 
    173173 * Whether to use HTML entities in the output. 
     174 * @name CKEDITOR.config.entities 
    174175 * @type Boolean 
    175176 * @default true 
     
    183184 * to HTML entities. The list of entities can be found at the 
    184185 * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1">W3C HTML 4.01 Specification, section 24.2.1</a>. 
     186 * @name CKEDITOR.config.entities_latin 
    185187 * @type Boolean 
    186188 * @default true 
     
    195197 * The list of entities can be found at the 
    196198 * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1">W3C HTML 4.01 Specification, section 24.3.1</a>. 
     199 * @name CKEDITOR.config.entities_greek 
    197200 * @type Boolean 
    198201 * @default true 
     
    208211 * For example, the phrase "This is Chinese: &#27721;&#35821;." is outputted 
    209212 * as "This is Chinese: &amp;#27721;&amp;#35821;." 
    210  * @type Boolean 
     213 * @name CKEDITOR.config.entities_processNumerical 
    211214 * @type Boolean|String 
    212215 * @default false 
     
    220223 * entry separated by a comma. Entities names or number must be used, exclusing 
    221224 * the "&amp;" preffix and the ";" termination. 
     225 * @name CKEDITOR.config.entities_additional 
    222226 * @default '#39'  // The single quote (') character. 
    223227 * @type String 
  • CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js

    r6655 r6898  
    452452 * @name CKEDITOR.config.indentClasses 
    453453 * @type Array 
    454  * default null 
     454 * @default null 
    455455 * @example 
    456456 * // Use the classes 'Indent1', 'Indent2', 'Indent3' 
  • CKEditor/branches/versions/3.5.x/_source/plugins/justify/plugin.js

    r6396 r6898  
    238238        }); 
    239239})(); 
     240 
     241 /** 
     242 * List of classes to use for aligning the contents. If it's null, no classes will be used 
     243 * and instead the corresponding CSS values will be used. The array should contain 4 members, in the following order: left, center, right, justify. 
     244 * @name CKEDITOR.config.justifyClasses 
     245 * @type Array 
     246 * @default null 
     247 * @example 
     248 * // Use the classes 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' 
     249 * config.justifyClasses = [ 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' ]; 
     250 */ 
  • CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/plugin.js

    r6655 r6898  
    55(function() 
    66{ 
     7        function forceHtmlMode( evt ) { evt.data.mode = 'html'; } 
     8 
    79        CKEDITOR.plugins.add( 'pastefromword', 
    810        { 
     
    1618                                { 
    1719                                        evt && evt.removeListener(); 
     20                                        editor.removeListener( 'beforePaste', forceHtmlMode ); 
    1821                                        forceFromWord && setTimeout( function() { forceFromWord = 0; }, 0 ); 
    1922                                }; 
     
    2831                                exec : function() 
    2932                                { 
     33                                        // Ensure the received data format is HTML and apply content filtering. (#6718) 
    3034                                        forceFromWord = 1; 
    31                                         if ( editor.execCommand( 'paste' ) === false ) 
     35                                        editor.on( 'beforePaste', forceHtmlMode ); 
     36 
     37                                        if ( editor.execCommand( 'paste', 'html' ) === false ) 
    3238                                        { 
    3339                                                editor.on( 'dialogShow', function ( evt ) 
  • CKEditor/branches/versions/3.5.x/_source/plugins/pastetext/dialogs/pastetext.js

    r6396 r6898  
    1414                                minHeight : 240, 
    1515 
    16                                 onShow : function() 
    17                                 { 
    18                                         // Reset the textarea value. 
    19                                         this.getContentElement( 'general', 'content' ).getInputElement().setValue( '' ); 
    20                                 }, 
    21  
    22                                 onOk : function() 
    23                                 { 
    24                                         // Get the textarea value. 
    25                                         var text = this.getContentElement( 'general', 'content' ).getInputElement().getValue(), 
    26                                                 editor = this.getParentEditor(); 
    27  
    28                                         setTimeout( function() 
    29                                         { 
    30                                                 editor.fire( 'paste', { 'text' : text } ); 
    31                                         }, 0 ); 
    32                                 }, 
     16                                onShow : function(){ this.setupContent(); }, 
     17                                onOk : function(){ this.commitContent(); }, 
    3318 
    3419                                contents : 
     
    6146                                                                { 
    6247                                                                        this.getElement().focus(); 
     48                                                                }, 
     49                                                                setup : function() 
     50                                                                { 
     51                                                                        this.setValue( '' ); 
     52                                                                }, 
     53                                                                commit : function() 
     54                                                                { 
     55                                                                        var value = this.getValue(); 
     56                                                                        setTimeout( function() 
     57                                                                        { 
     58                                                                                editor.fire( 'paste', { 'text' : value } ); 
     59                                                                        }, 0 ); 
    6360                                                                } 
    6461                                                        } 
  • CKEditor/branches/versions/3.5.x/_source/plugins/pastetext/plugin.js

    r6396 r6898  
    5959                                editor.on( 'beforeCommandExec', function ( evt ) 
    6060                                { 
    61                                         if ( evt.data.name == 'paste' ) 
     61                                        var mode = evt.data.commandData; 
     62                                        // Do NOT overwrite if HTML format is explicitly requested. 
     63                                        if ( evt.data.name == 'paste' && mode != 'html' ) 
    6264                                        { 
    6365                                                editor.execCommand( 'pastetext' ); 
     
    6567                                        } 
    6668                                }, null, null, 0 ); 
     69 
     70                                editor.on( 'beforePaste', function( evt ) 
     71                                { 
     72                                        evt.data.mode = 'text'; 
     73                                }); 
    6774                        } 
    6875 
     
    8390 * editor, loosing any formatting information possibly available in the source 
    8491 * text. 
     92 * <strong>Note:</strong> paste from word is not affected by this configuration. 
    8593 * @name CKEDITOR.config.forcePasteAsPlainText 
    8694 * @type Boolean 
  • CKEditor/branches/versions/3.5.x/_source/plugins/scayt/plugin.js

    r6655 r6898  
    664664                                                        return null; 
    665665                                                // Remove unused commands and menuitems 
    666                                                 for ( i in moreSuggestions ) 
    667                                                 { 
    668                                                         delete editor._.menuItems[ i ]; 
    669                                                         delete editor._.commands[ i ]; 
     666                                                for ( var m in moreSuggestions ) 
     667                                                { 
     668                                                        delete editor._.menuItems[ m ]; 
     669                                                        delete editor._.commands[ m ]; 
    670670                                                } 
    671                                                 for ( i in mainSuggestions ) 
    672                                                 { 
    673                                                         delete editor._.menuItems[ i ]; 
    674                                                         delete editor._.commands[ i ]; 
     671                                                for ( m in mainSuggestions ) 
     672                                                { 
     673                                                        delete editor._.menuItems[ m ]; 
     674                                                        delete editor._.commands[ m ]; 
    675675                                                } 
    676676                                                moreSuggestions = {};           // Reset items. 
  • CKEditor/branches/versions/3.5.x/_source/plugins/selection/plugin.js

    r6655 r6898  
    568568 
    569569        var styleObjectElements = 
    570         { 
    571                 img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1, 
    572                 a:1, input:1, form:1, select:1, textarea:1, button:1, fieldset:1, th:1, thead:1, tfoot:1 
    573         }; 
     570                { 
     571                        img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1, 
     572                        a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1 
     573                }; 
    574574 
    575575        CKEDITOR.dom.selection.prototype = 
  • CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js

    r6655 r6898  
    816816                var root = range.getCommonAncestor( true, true ), 
    817817                        element = root.getAscendant( this.element, true ); 
    818                 element && setupElement( element, this ); 
     818                element && !element.isReadOnly() && setupElement( element, this ); 
    819819        } 
    820820 
     
    873873                while ( ( block = iterator.getNextParagraph() ) )               // Only one = 
    874874                { 
    875                         var newBlock = getElement( this, doc, block ); 
    876                         replaceBlock( block, newBlock ); 
     875                        if ( !block.isReadOnly() ) 
     876                        { 
     877                                var newBlock = getElement( this, doc, block ); 
     878                                replaceBlock( block, newBlock ); 
     879                        } 
    877880                } 
    878881 
     
    14461449                else 
    14471450                        styleText = unparsedCssText; 
     1451 
     1452                // Normalize font-family property, ignore quotes and being case insensitive. (#7322) 
     1453                // http://www.w3.org/TR/css3-fonts/#font-family-the-font-family-property 
     1454                styleText = styleText.replace( /(font-family:)(.*?)(?=;|$)/, function ( match, prop, val ) 
     1455                { 
     1456                        var names = val.split( ',' ); 
     1457                        for ( var i = 0; i < names.length; i++ ) 
     1458                                names[ i ] = CKEDITOR.tools.trim( names[ i ].replace( /["']/g, '' ) ); 
     1459                        return prop + names.join( ',' ); 
     1460                }); 
    14481461 
    14491462                // Shrinking white-spaces around colon and semi-colon (#4147). 
  • CKEditor/branches/versions/3.5.x/_source/plugins/undo/plugin.js

    r6655 r6898  
    546546 * The number of undo steps to be saved. The higher this setting value the more 
    547547 * memory is used for it. 
     548 * @name CKEDITOR.config.undoStackSize 
    548549 * @type Number 
    549550 * @default 20 
  • CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js

    r6655 r6898  
    1111(function() 
    1212{ 
    13         // List of elements in which has no way to move editing focus outside. 
    14         var nonExitableElementNames = { table:1,pre:1 }; 
    15  
    1613        // Matching an empty paragraph at the end of document. 
    17         var emptyParagraphRegexp = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; 
     14        var emptyParagraphRegexp = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; 
    1815 
    1916        var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true ); 
    2017 
    21         // Elements that could have empty new line around, including table, pre-formatted block, hr, page-break. (#6554) 
    22         function nonExitable( element ) 
     18        // Elements that could blink the cursor anchoring beside it, like hr, page-break. (#6554) 
     19        function nonEditable( element ) 
    2320        { 
    24                 return ( element.getName() in nonExitableElementNames ) 
    25                                 || element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ]; 
     21                return element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ]; 
    2622        } 
    2723 
     
    370366                                lastNode = pathBlock && pathBlock.getLast( isNotEmpty ); 
    371367 
    372                         // In case it's not ended with block element and doesn't have bogus yet. (#7467) 
     368                        // Check some specialities of the current path block: 
     369                        // 1. It is really displayed as block; (#7221) 
     370                        // 2. It doesn't end with one inner block; (#7467) 
     371                        // 3. It doesn't have bogus br yet. 
    373372                        if ( pathBlock 
     373                                        && pathBlock.isBlockBoundary() 
    374374                                        && !( lastNode && lastNode.type == CKEDITOR.NODE_ELEMENT && lastNode.isBlockBoundary() ) 
    375375                                        && !pathBlock.is( 'pre' ) 
     
    410410                                if ( element && 
    411411                                         element.type == CKEDITOR.NODE_ELEMENT && 
    412                                          !nonExitable( element ) ) 
     412                                         !nonEditable( element ) ) 
    413413                                { 
    414414                                        range.moveToElementEditStart( element ); 
     
    420420                                        if ( element && 
    421421                                                 element.type == CKEDITOR.NODE_ELEMENT && 
    422                                                  !nonExitable( element ) ) 
     422                                                 !nonEditable( element ) ) 
    423423                                        { 
    424424                                                range.moveToElementEditEnd( element ); 
     
    433433                } 
    434434 
    435                 // All browsers are incapable to moving cursor out of certain non-exitable 
    436                 // blocks (e.g. table, list, pre) at the end of document, make this happen by 
    437                 // place a bogus node there, which would be later removed by dataprocessor. 
    438                 var walkerRange = new CKEDITOR.dom.range( editor.document ), 
    439                         walker = new CKEDITOR.dom.walker( walkerRange ); 
    440                 walkerRange.selectNodeContents( body ); 
    441                 walker.evaluator = function( node ) 
    442                 { 
    443                         return node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in nonExitableElementNames ); 
    444                 }; 
    445                 walker.guard = function( node, isMoveout ) 
    446                 { 
    447                         return !( ( node.type == CKEDITOR.NODE_TEXT && isNotWhitespace( node ) ) || isMoveout ); 
    448                 }; 
    449  
    450                 if ( walker.previous() ) 
     435                // Browsers are incapable of moving cursor out of certain block elements (e.g. table, div, pre) 
     436                // at the end of document, makes it unable to continue adding content, we have to make this 
     437                // easier by opening an new empty paragraph. 
     438                var testRange = new CKEDITOR.dom.range( editor.document ); 
     439                testRange.moveToElementEditEnd( editor.document.getBody() ); 
     440                var testPath = new CKEDITOR.dom.elementPath( testRange.startContainer ); 
     441                if ( !testPath.blockLimit.is( 'body') ) 
    451442                { 
    452443                        editor.fire( 'updateSnapshot' ); 
     
    456447                        var paddingBlock; 
    457448                        if ( enterMode != CKEDITOR.ENTER_BR ) 
    458                                 paddingBlock = body.append( new CKEDITOR.dom.element( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ); 
     449                                paddingBlock = body.append( editor.document.createElement( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ); 
    459450                        else 
    460451                                paddingBlock = body; 
  • CKEditor/branches/versions/3.5.x/_source/themes/default/theme.js

    r6655 r6898  
    1111CKEDITOR.themes.add( 'default', (function() 
    1212{ 
     13        var hiddenSkins = {}; 
     14 
    1315        function checkSharedSpace( editor, spaceName ) 
    1416        { 
     
    121123                        sharedTop               && ( sharedTop.setHtml( topHtml )               , topHtml = '' ); 
    122124                        sharedBottoms   && ( sharedBottoms.setHtml( bottomHtml ), bottomHtml = '' ); 
     125 
     126                        var hideSkin = '<style>.' + editor.skinClass + '{visibility:hidden;}</style>'; 
     127                        if ( hiddenSkins[ editor.skinClass ] ) 
     128                                hideSkin = ''; 
     129                        else 
     130                                hiddenSkins[ editor.skinClass ] = 1; 
    123131 
    124132                        var container = CKEDITOR.dom.element.createFromHtml( [ 
     
    143151                                                        '</tbody></table>' + 
    144152                                                        //Hide the container when loading skins, later restored by skin css. 
    145                                                         '<style>.', editor.skinClass, '{visibility:hidden;}</style>' + 
     153                                                        hideSkin + 
    146154                                                '</span>' + 
    147155                                        '</span>' + 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy