From 451360357331a4c30e2a5843a0915ee2e93b9dc4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 12 Sep 2013 17:49:57 +0200 Subject: [PATCH] [FIX] force ckeditor lang to en and replace en-gb localization file with en avoids automatic locale picking selecting something different than the one locale file currently provided and blowing up, preventing edition from working bzr revid: xmo@openerp.com-20130912154957-yod17u9xvw3r966i --- addons/website/static/lib/ckeditor/CHANGES.md | 4 +- .../static/lib/ckeditor/core/dom/range.js | 2 +- .../static/lib/ckeditor/core/editable.js | 118 ++- .../static/lib/ckeditor/core/editor.js | 2 +- .../static/lib/ckeditor/core/filter.js | 2 +- .../lib/ckeditor/core/htmldataprocessor.js | 4 +- .../lib/ckeditor/lang/{en-gb.js => en.js} | 24 +- .../plugins/a11yhelp/dialogs/lang/en.js | 106 ++ .../plugins/about/lang/{en-gb.js => en.js} | 4 +- .../basicstyles/lang/{en-gb.js => en.js} | 2 +- .../plugins/bidi/lang/{en-gb.js => en.js} | 2 +- .../blockquote/lang/{en-gb.js => en.js} | 2 +- .../clipboard/lang/{en-gb.js => en.js} | 2 +- .../colorbutton/lang/{en-gb.js => en.js} | 18 +- .../colordialog/lang/{en-gb.js => en.js} | 8 +- .../contextmenu/lang/{en-gb.js => en.js} | 2 +- .../lib/ckeditor/plugins/devtools/lang/en.js | 12 + .../plugins/div/lang/{en-gb.js => en.js} | 2 +- .../ckeditor/plugins/docprops/lang/en-gb.js | 42 - .../lib/ckeditor/plugins/docprops/lang/en.js | 42 + .../elementspath/lang/{en-gb.js => en.js} | 2 +- .../fakeobjects/lang/{en-gb.js => en.js} | 2 +- .../plugins/find/lang/{en-gb.js => en.js} | 2 +- .../plugins/flash/lang/{en-gb.js => en.js} | 4 +- .../ckeditor/plugins/floatingspace/plugin.js | 2 +- .../plugins/font/lang/{en-gb.js => en.js} | 2 +- .../plugins/format/lang/{en-gb.js => en.js} | 2 +- .../plugins/forms/lang/{en-gb.js => en.js} | 8 +- .../horizontalrule/lang/{en-gb.js => en.js} | 2 +- .../plugins/iframe/lang/{en-gb.js => en.js} | 2 +- .../plugins/image/lang/{en-gb.js => en.js} | 2 +- .../plugins/image2/dev/assets/image1.jpg | Bin 0 -> 34316 bytes .../plugins/image2/dev/assets/image2.jpg | Bin 0 -> 27711 bytes .../ckeditor/plugins/image2/dev/contents.css | 32 + .../ckeditor/plugins/image2/dev/image2.html | 199 ++++ .../ckeditor/plugins/image2/dialogs/image2.js | 480 +++++++++ .../plugins/image2/icons/hidpi/image2.png | Bin 0 -> 1745 bytes .../ckeditor/plugins/image2/icons/image2.png | Bin 0 -> 756 bytes .../lib/ckeditor/plugins/image2/lang/en.js | 14 + .../lib/ckeditor/plugins/image2/plugin.js | 940 ++++++++++++++++++ .../plugins/indent/lang/{en-gb.js => en.js} | 2 +- .../plugins/justify/lang/{en-gb.js => en.js} | 4 +- .../plugins/link/lang/{en-gb.js => en.js} | 4 +- .../plugins/list/lang/{en-gb.js => en.js} | 2 +- .../liststyle/lang/{en-gb.js => en.js} | 2 +- .../lib/ckeditor/plugins/magicline/lang/en.js | 8 + .../ckeditor/plugins/maximize/lang/en-gb.js | 8 - .../lib/ckeditor/plugins/maximize/lang/en.js | 8 + .../plugins/newpage/lang/{en-gb.js => en.js} | 2 +- .../pagebreak/lang/{en-gb.js => en.js} | 4 +- .../pastefromword/lang/{en-gb.js => en.js} | 2 +- .../pastetext/lang/{en-gb.js => en.js} | 2 +- .../ckeditor/plugins/placeholder/lang/en.js | 12 + .../plugins/preview/lang/{en-gb.js => en.js} | 2 +- .../plugins/print/lang/{en-gb.js => en.js} | 2 +- .../removeformat/lang/{en-gb.js => en.js} | 2 +- .../plugins/save/lang/{en-gb.js => en.js} | 2 +- .../selectall/lang/{en-gb.js => en.js} | 2 +- .../showblocks/lang/{en-gb.js => en.js} | 2 +- .../plugins/smiley/lang/{en-gb.js => en.js} | 2 +- .../lib/ckeditor/plugins/smiley/plugin.js | 16 +- .../sourcearea/lang/{en-gb.js => en.js} | 2 +- .../sourcedialog/lang/{en-gb.js => en.js} | 2 +- .../plugins/specialchar/dialogs/lang/en.js | 125 +++ .../specialchar/lang/{en-gb.js => en.js} | 2 +- .../stylescombo/lang/{en-gb.js => en.js} | 2 +- .../plugins/table/lang/{en-gb.js => en.js} | 6 +- .../templates/lang/{en-gb.js => en.js} | 2 +- .../plugins/toolbar/lang/{en-gb.js => en.js} | 4 +- .../lib/ckeditor/plugins/uicolor/lang/en.js | 11 + .../plugins/undo/lang/{en-gb.js => en.js} | 2 +- .../lib/ckeditor/plugins/widget/plugin.js | 5 +- .../website/static/src/js/website.editor.js | 2 + 73 files changed, 2166 insertions(+), 184 deletions(-) rename addons/website/static/lib/ckeditor/lang/{en-gb.js => en.js} (86%) create mode 100644 addons/website/static/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js rename addons/website/static/lib/ckeditor/plugins/about/lang/{en-gb.js => en.js} (80%) rename addons/website/static/lib/ckeditor/plugins/basicstyles/lang/{en-gb.js => en.js} (84%) rename addons/website/static/lib/ckeditor/plugins/bidi/lang/{en-gb.js => en.js} (83%) rename addons/website/static/lib/ckeditor/plugins/blockquote/lang/{en-gb.js => en.js} (77%) rename addons/website/static/lib/ckeditor/plugins/clipboard/lang/{en-gb.js => en.js} (94%) rename addons/website/static/lib/ckeditor/plugins/colorbutton/lang/{en-gb.js => en.js} (78%) rename addons/website/static/lib/ckeditor/plugins/colordialog/lang/{en-gb.js => en.js} (58%) rename addons/website/static/lib/ckeditor/plugins/contextmenu/lang/{en-gb.js => en.js} (77%) create mode 100644 addons/website/static/lib/ckeditor/plugins/devtools/lang/en.js rename addons/website/static/lib/ckeditor/plugins/div/lang/{en-gb.js => en.js} (93%) delete mode 100644 addons/website/static/lib/ckeditor/plugins/docprops/lang/en-gb.js create mode 100644 addons/website/static/lib/ckeditor/plugins/docprops/lang/en.js rename addons/website/static/lib/ckeditor/plugins/elementspath/lang/{en-gb.js => en.js} (79%) rename addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/{en-gb.js => en.js} (83%) rename addons/website/static/lib/ckeditor/plugins/find/lang/{en-gb.js => en.js} (91%) rename addons/website/static/lib/ckeditor/plugins/flash/lang/{en-gb.js => en.js} (93%) rename addons/website/static/lib/ckeditor/plugins/font/lang/{en-gb.js => en.js} (86%) rename addons/website/static/lib/ckeditor/plugins/format/lang/{en-gb.js => en.js} (90%) rename addons/website/static/lib/ckeditor/plugins/forms/lang/{en-gb.js => en.js} (89%) rename addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/{en-gb.js => en.js} (77%) rename addons/website/static/lib/ckeditor/plugins/iframe/lang/{en-gb.js => en.js} (86%) rename addons/website/static/lib/ckeditor/plugins/image/lang/{en-gb.js => en.js} (95%) create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image1.jpg create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image2.jpg create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/dev/contents.css create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/dev/image2.html create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/dialogs/image2.js create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/icons/hidpi/image2.png create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/icons/image2.png create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/lang/en.js create mode 100644 addons/website/static/lib/ckeditor/plugins/image2/plugin.js rename addons/website/static/lib/ckeditor/plugins/indent/lang/{en-gb.js => en.js} (81%) rename addons/website/static/lib/ckeditor/plugins/justify/lang/{en-gb.js => en.js} (75%) rename addons/website/static/lib/ckeditor/plugins/link/lang/{en-gb.js => en.js} (95%) rename addons/website/static/lib/ckeditor/plugins/list/lang/{en-gb.js => en.js} (84%) rename addons/website/static/lib/ckeditor/plugins/liststyle/lang/{en-gb.js => en.js} (94%) create mode 100644 addons/website/static/lib/ckeditor/plugins/magicline/lang/en.js delete mode 100644 addons/website/static/lib/ckeditor/plugins/maximize/lang/en-gb.js create mode 100644 addons/website/static/lib/ckeditor/plugins/maximize/lang/en.js rename addons/website/static/lib/ckeditor/plugins/newpage/lang/{en-gb.js => en.js} (78%) rename addons/website/static/lib/ckeditor/plugins/pagebreak/lang/{en-gb.js => en.js} (70%) rename addons/website/static/lib/ckeditor/plugins/pastefromword/lang/{en-gb.js => en.js} (88%) rename addons/website/static/lib/ckeditor/plugins/pastetext/lang/{en-gb.js => en.js} (80%) create mode 100644 addons/website/static/lib/ckeditor/plugins/placeholder/lang/en.js rename addons/website/static/lib/ckeditor/plugins/preview/lang/{en-gb.js => en.js} (77%) rename addons/website/static/lib/ckeditor/plugins/print/lang/{en-gb.js => en.js} (78%) rename addons/website/static/lib/ckeditor/plugins/removeformat/lang/{en-gb.js => en.js} (76%) rename addons/website/static/lib/ckeditor/plugins/save/lang/{en-gb.js => en.js} (78%) rename addons/website/static/lib/ckeditor/plugins/selectall/lang/{en-gb.js => en.js} (77%) rename addons/website/static/lib/ckeditor/plugins/showblocks/lang/{en-gb.js => en.js} (77%) rename addons/website/static/lib/ckeditor/plugins/smiley/lang/{en-gb.js => en.js} (82%) rename addons/website/static/lib/ckeditor/plugins/sourcearea/lang/{en-gb.js => en.js} (76%) rename addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/{en-gb.js => en.js} (78%) create mode 100644 addons/website/static/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js rename addons/website/static/lib/ckeditor/plugins/specialchar/lang/{en-gb.js => en.js} (83%) rename addons/website/static/lib/ckeditor/plugins/stylescombo/lang/{en-gb.js => en.js} (84%) rename addons/website/static/lib/ckeditor/plugins/table/lang/{en-gb.js => en.js} (92%) rename addons/website/static/lib/ckeditor/plugins/templates/lang/{en-gb.js => en.js} (88%) rename addons/website/static/lib/ckeditor/plugins/toolbar/lang/{en-gb.js => en.js} (84%) create mode 100644 addons/website/static/lib/ckeditor/plugins/uicolor/lang/en.js rename addons/website/static/lib/ckeditor/plugins/undo/lang/{en-gb.js => en.js} (79%) diff --git a/addons/website/static/lib/ckeditor/CHANGES.md b/addons/website/static/lib/ckeditor/CHANGES.md index 89ee6bdfe44..79ab7064742 100644 --- a/addons/website/static/lib/ckeditor/CHANGES.md +++ b/addons/website/static/lib/ckeditor/CHANGES.md @@ -1,7 +1,9 @@ CKEditor 4 Changelog ==================== -## CKEditor 4.3 +## CKEditor 4.3 beta + +* [#10708](http://dev.ckeditor.com/ticket/10708): New smileys. ## CKEditor 4.2.1 diff --git a/addons/website/static/lib/ckeditor/core/dom/range.js b/addons/website/static/lib/ckeditor/core/dom/range.js index 95c64ea85bf..d567a50ad43 100644 --- a/addons/website/static/lib/ckeditor/core/dom/range.js +++ b/addons/website/static/lib/ckeditor/core/dom/range.js @@ -692,7 +692,7 @@ CKEDITOR.dom.range = function( root ) { collapsed: collapsed, is2: true // It's a createBookmark2 bookmark. }; - } + }; })(), /** diff --git a/addons/website/static/lib/ckeditor/core/editable.js b/addons/website/static/lib/ckeditor/core/editable.js index 840893f744b..a7bfb72531c 100644 --- a/addons/website/static/lib/ckeditor/core/editable.js +++ b/addons/website/static/lib/ckeditor/core/editable.js @@ -237,56 +237,92 @@ /** * @see CKEDITOR.editor#insertElement */ - insertElement: function( element ) { - beforeInsert( this ); + insertElement: function( element, range ) { + if ( !range ) + this.insertElementIntoSelection( element ); + else + this.insertElementIntoRange( element, range ); + }, + /** + * Inserts an element into the position in the editor determined by range. + * + * @param {CKEDITOR.dom.element} element The element to be inserted. + * @param {CKEDITOR.dom.range} range The range as a place of insertion. + * @returns {Boolean} Informs whether insertion was successful. + */ + insertElementIntoRange: function( element, range ) { + var editor = this.editor, + enterMode = editor.config.enterMode, + elementName = element.getName(), + isBlock = CKEDITOR.dtd.$block[ elementName ]; + + if ( range.checkReadOnly() ) + return false; + + // Remove the original contents, merge split nodes. + range.deleteContents( 1 ); + + // If we're inserting a block at dtd-violated position, split + // the parent blocks until we reach blockLimit. + var current, dtd; + + if ( isBlock ) { + while ( ( current = range.getCommonAncestor( 0, 1 ) ) && + ( dtd = CKEDITOR.dtd[ current.getName() ] ) && + !( dtd && dtd[ elementName ] ) ) { + + // Split up inline elements. + if ( current.getName() in CKEDITOR.dtd.span ) + range.splitElement( current ); + + // If we're in an empty block which indicate a new paragraph, + // simply replace it with the inserting block.(#3664) + else if ( range.checkStartOfBlock() && range.checkEndOfBlock() ) { + range.setStartBefore( current ); + range.collapse( true ); + current.remove(); + } else + range.splitBlock( enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p', editor.editable() ); + } + } + + // Insert the new node. + range.insertNode( element ); + + // Return true if insertion was successful. + return true; + }, + + /** + * Inserts an element into the currently selected position in the editor. + * + * @param {CKEDITOR.dom.element} element The element to be inserted. + */ + insertElementIntoSelection: function( element ) { var editor = this.editor, enterMode = editor.activeEnterMode, selection = editor.getSelection(), ranges = selection.getRanges(), elementName = element.getName(), - isBlock = CKEDITOR.dtd.$block[ elementName ]; + isBlock = CKEDITOR.dtd.$block[ elementName ], + clone, lastElement, range; - var range, clone, lastElement; + // Prepare for the insertion. + beforeInsert( this ); - for ( var i = ranges.length - 1; i >= 0; i-- ) { + // Insert the element into all ranges by cloning. + for ( var i = ranges.length; i--; ) { range = ranges[ i ]; - if ( !range.checkReadOnly() ) { - // Remove the original contents, merge split nodes. - range.deleteContents( 1 ); + // Clone is an element for the first range. + clone = !i && element || element.clone( 1 ); - clone = !i && element || element.clone( 1 ); - - // If we're inserting a block at dtd-violated position, split - // the parent blocks until we reach blockLimit. - var current, dtd; - if ( isBlock ) { - while ( ( current = range.getCommonAncestor( 0, 1 ) ) && - ( dtd = CKEDITOR.dtd[ current.getName() ] ) && - !( dtd && dtd[ elementName ] ) ) { - // Split up inline elements. - if ( current.getName() in CKEDITOR.dtd.span ) - range.splitElement( current ); - // If we're in an empty block which indicate a new paragraph, - // simply replace it with the inserting block.(#3664) - else if ( range.checkStartOfBlock() && range.checkEndOfBlock() ) { - range.setStartBefore( current ); - range.collapse( true ); - current.remove(); - } else - range.splitBlock( enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p', editor.editable() ); - } - } - - // Insert the new node. - range.insertNode( clone ); - - // Save the last element reference so we can make the - // selection later. - if ( !lastElement ) - lastElement = clone; - } + // Put the clone into a particular range. + // Save the last **successfully inserted** element reference + // so we can make the selection later. + if ( this.insertElementIntoRange( clone, range ) && !lastElement ); + lastElement = clone; } if ( lastElement ) { @@ -301,8 +337,7 @@ return isNotEmpty( node ) && !isBogus( node ); } ); - if ( next && next.type == CKEDITOR.NODE_ELEMENT && - next.is( CKEDITOR.dtd.$block ) ) { + if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.is( CKEDITOR.dtd.$block ) ) { // If the next one is a text block, move cursor to the start of it's content. if ( next.getDtd()[ '#' ] ) @@ -319,6 +354,7 @@ } } + // Set up the correct selection. selection.selectRanges( [ range ] ); // Do not scroll after inserting, because Opera may fail on certain element (e.g. iframe/iframe.html). diff --git a/addons/website/static/lib/ckeditor/core/editor.js b/addons/website/static/lib/ckeditor/core/editor.js index 6507fd3d458..01f793efa44 100644 --- a/addons/website/static/lib/ckeditor/core/editor.js +++ b/addons/website/static/lib/ckeditor/core/editor.js @@ -705,7 +705,7 @@ function isFunction( f ) { // For IE8 typeof fun == object so we cannot use it. return !!( f && f.call && f.apply ); - }; + } // Check if there is no element/elements input with name == "submit". // If they exists they will overwrite form submit function (form.$.submit). diff --git a/addons/website/static/lib/ckeditor/core/filter.js b/addons/website/static/lib/ckeditor/core/filter.js index 5c36d9725ad..e17047b4fae 100644 --- a/addons/website/static/lib/ckeditor/core/filter.js +++ b/addons/website/static/lib/ckeditor/core/filter.js @@ -108,7 +108,7 @@ var editor = this.editor = editorOrRules; this.customConfig = true; - var allowedContent = editor.config.allowedContent + var allowedContent = editor.config.allowedContent; // Disable filter completely by setting config.allowedContent = true. if ( allowedContent === true ) { diff --git a/addons/website/static/lib/ckeditor/core/htmldataprocessor.js b/addons/website/static/lib/ckeditor/core/htmldataprocessor.js index 3cdb7737427..5353e4b58e5 100644 --- a/addons/website/static/lib/ckeditor/core/htmldataprocessor.js +++ b/addons/website/static/lib/ckeditor/core/htmldataprocessor.js @@ -391,7 +391,7 @@ // Convert the filler into appropriate form. else { createFiller( isOutput ).insertAfter( node ); - node.remove() + node.remove(); } } @@ -505,7 +505,7 @@ var dtd = CKEDITOR.dtd, // Define orders of table elements. - tableOrder = [ 'caption', 'colgroup', 'col', 'thead', 'tfoot', 'tbody' ]; + tableOrder = [ 'caption', 'colgroup', 'col', 'thead', 'tfoot', 'tbody' ], // List of all block elements. blockLikeTags = CKEDITOR.tools.extend( {}, dtd.$blockLimit, dtd.$block ); diff --git a/addons/website/static/lib/ckeditor/lang/en-gb.js b/addons/website/static/lib/ckeditor/lang/en.js similarity index 86% rename from addons/website/static/lib/ckeditor/lang/en-gb.js rename to addons/website/static/lib/ckeditor/lang/en.js index e888b10eafa..88ba2c114fd 100644 --- a/addons/website/static/lib/ckeditor/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/lang/en.js @@ -4,8 +4,8 @@ */ /** - * @fileOverview Defines the {@link CKEDITOR.lang} object, for the - * English (United Kingdom) language. + * @fileOverview Defines the {@link CKEDITOR.lang} object for the English + * language. This is the base file for all translations. */ /**#@+ @@ -17,7 +17,7 @@ * Contains the dictionary of language entries. * @namespace */ -CKEDITOR.lang[ 'en-gb' ] = { +CKEDITOR.lang[ 'en' ] = { // ARIA description. editor: 'Rich Text Editor', @@ -25,7 +25,7 @@ CKEDITOR.lang[ 'en-gb' ] = { common: { // Screenreader titles. Please note that screenreaders are not always capable // of reading non-English words. So be careful while translating it. - editorHelp: 'Press ALT 0 for help', // MISSING + editorHelp: 'Press ALT 0 for help', browseServer: 'Browse Server', url: 'URL', @@ -58,7 +58,7 @@ CKEDITOR.lang[ 'en-gb' ] = { cancel: 'Cancel', close: 'Close', preview: 'Preview', - resize: 'Drag to resize', + resize: 'Resize', generalTab: 'General', advancedTab: 'Advanced', validateNumberFailed: 'This value is not a number.', @@ -76,20 +76,20 @@ CKEDITOR.lang[ 'en-gb' ] = { cssClasses: 'Stylesheet Classes', width: 'Width', height: 'Height', - align: 'Align', + align: 'Alignment', alignLeft: 'Left', alignRight: 'Right', - alignCenter: 'Centre', + alignCenter: 'Center', alignTop: 'Top', alignMiddle: 'Middle', alignBottom: 'Bottom', - invalidValue : 'Invalid value.', // MISSING + invalidValue : 'Invalid value.', invalidHeight: 'Height must be a number.', invalidWidth: 'Width must be a number.', - invalidCssLength: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING - invalidHtmlLength: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING - invalidInlineStyle: 'Value specified for the inline style must consist of one or more tuples with the format of "name : value", separated by semi-colons.', // MISSING - cssLengthTooltip: 'Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidCssLength: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', + invalidHtmlLength: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', + invalidInlineStyle: 'Value specified for the inline style must consist of one or more tuples with the format of "name : value", separated by semi-colons.', + cssLengthTooltip: 'Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).', // Put the voice-only part of the label in the span. unavailable: '%1, unavailable' diff --git a/addons/website/static/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/addons/website/static/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js new file mode 100644 index 00000000000..1df642771b5 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js @@ -0,0 +1,106 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'a11yhelp', 'en', { + title: 'Accessibility Instructions', + contents: 'Help Contents. To close this dialog press ESC.', + legend: [ + { + name: 'General', + items: [ + { + name: 'Editor Toolbar', + legend: 'Press ${toolbarFocus} to navigate to the toolbar. ' + + 'Move to the next and previous toolbar group with TAB and SHIFT-TAB. ' + + 'Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. ' + + 'Press SPACE or ENTER to activate the toolbar button.' + }, + + { + name: 'Editor Dialog', + legend: 'Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. ' + + 'For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. ' + + 'Then move to next tab with TAB OR RIGTH ARROW. ' + + 'Move to previous tab with SHIFT + TAB or LEFT ARROW. ' + + 'Press SPACE or ENTER to select the tab page.' + }, + + { + name: 'Editor Context Menu', + legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' + + 'Then move to next menu option with TAB or DOWN ARROW. ' + + 'Move to previous option with SHIFT+TAB or UP ARROW. ' + + 'Press SPACE or ENTER to select the menu option. ' + + 'Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. ' + + 'Go back to parent menu item with ESC or LEFT ARROW. ' + + 'Close context menu with ESC.' + }, + + { + name: 'Editor List Box', + legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' + + 'Move to previous list item with SHIFT + TAB or UP ARROW. ' + + 'Press SPACE or ENTER to select the list option. ' + + 'Press ESC to close the list-box.' + }, + + { + name: 'Editor Element Path Bar', + legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. ' + + 'Move to next element button with TAB or RIGHT ARROW. ' + + 'Move to previous button with SHIFT+TAB or LEFT ARROW. ' + + 'Press SPACE or ENTER to select the element in editor.' + } + ] + }, + { + name: 'Commands', + items: [ + { + name: ' Undo command', + legend: 'Press ${undo}' + }, + { + name: ' Redo command', + legend: 'Press ${redo}' + }, + { + name: ' Bold command', + legend: 'Press ${bold}' + }, + { + name: ' Italic command', + legend: 'Press ${italic}' + }, + { + name: ' Underline command', + legend: 'Press ${underline}' + }, + { + name: ' Link command', + legend: 'Press ${link}' + }, + { + name: ' Toolbar Collapse command', + legend: 'Press ${toolbarCollapse}' + }, + { + name: ' Access previous focus space command', + legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, ' + + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' + }, + { + name: ' Access next focus space command', + legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, ' + + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' + }, + { + name: ' Accessibility Help', + legend: 'Press ${a11yHelp}' + } + ] + } + ] +}); diff --git a/addons/website/static/lib/ckeditor/plugins/about/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/about/lang/en.js similarity index 80% rename from addons/website/static/lib/ckeditor/plugins/about/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/about/lang/en.js index bd663276329..316efaea785 100644 --- a/addons/website/static/lib/ckeditor/plugins/about/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/about/lang/en.js @@ -2,10 +2,10 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'about', 'en-gb', { +CKEDITOR.plugins.setLang( 'about', 'en', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'About CKEditor', - help: 'Check $1 for help.', // MISSING + help: 'Check $1 for help.', moreInfo: 'For licensing information please visit our web site:', title: 'About CKEditor', userGuide: 'CKEditor User\'s Guide' diff --git a/addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en.js similarity index 84% rename from addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en.js index e12ef802a42..7a782d0c35d 100644 --- a/addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/basicstyles/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'basicstyles', 'en-gb', { +CKEDITOR.plugins.setLang( 'basicstyles', 'en', { bold: 'Bold', italic: 'Italic', strike: 'Strike Through', diff --git a/addons/website/static/lib/ckeditor/plugins/bidi/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/bidi/lang/en.js similarity index 83% rename from addons/website/static/lib/ckeditor/plugins/bidi/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/bidi/lang/en.js index 54284e95d19..b0fbe8cf27a 100644 --- a/addons/website/static/lib/ckeditor/plugins/bidi/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/bidi/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'bidi', 'en-gb', { +CKEDITOR.plugins.setLang( 'bidi', 'en', { ltr: 'Text direction from left to right', rtl: 'Text direction from right to left' }); diff --git a/addons/website/static/lib/ckeditor/plugins/blockquote/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/blockquote/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/blockquote/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/blockquote/lang/en.js index 9a6a3e2651c..db4801cdeb9 100644 --- a/addons/website/static/lib/ckeditor/plugins/blockquote/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/blockquote/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'blockquote', 'en-gb', { +CKEDITOR.plugins.setLang( 'blockquote', 'en', { toolbar: 'Block Quote' }); diff --git a/addons/website/static/lib/ckeditor/plugins/clipboard/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/clipboard/lang/en.js similarity index 94% rename from addons/website/static/lib/ckeditor/plugins/clipboard/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/clipboard/lang/en.js index 783e9884c7f..61de6044d4c 100644 --- a/addons/website/static/lib/ckeditor/plugins/clipboard/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/clipboard/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'clipboard', 'en-gb', { +CKEDITOR.plugins.setLang( 'clipboard', 'en', { copy: 'Copy', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', cut: 'Cut', diff --git a/addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en.js similarity index 78% rename from addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en.js index 72c53ae082f..0131673e6c1 100644 --- a/addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/colorbutton/lang/en.js @@ -2,18 +2,18 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'colorbutton', 'en-gb', { +CKEDITOR.plugins.setLang( 'colorbutton', 'en', { auto: 'Automatic', - bgColorTitle: 'Background Colour', + bgColorTitle: 'Background Color', colors: { '000': 'Black', '800000': 'Maroon', '8B4513': 'Saddle Brown', - '2F4F4F': 'Dark Slate Grey', + '2F4F4F': 'Dark Slate Gray', '008080': 'Teal', '000080': 'Navy', '4B0082': 'Indigo', - '696969': 'Dark Grey', + '696969': 'Dark Gray', B22222: 'Fire Brick', A52A2A: 'Brown', DAA520: 'Golden Rod', @@ -21,7 +21,7 @@ CKEDITOR.plugins.setLang( 'colorbutton', 'en-gb', { '40E0D0': 'Turquoise', '0000CD': 'Medium Blue', '800080': 'Purple', - '808080': 'Grey', + '808080': 'Gray', F00: 'Red', FF8C00: 'Dark Orange', FFD700: 'Gold', @@ -29,7 +29,7 @@ CKEDITOR.plugins.setLang( 'colorbutton', 'en-gb', { '0FF': 'Cyan', '00F': 'Blue', EE82EE: 'Violet', - A9A9A9: 'Dim Grey', + A9A9A9: 'Dim Gray', FFA07A: 'Light Salmon', FFA500: 'Orange', FFFF00: 'Yellow', @@ -47,7 +47,7 @@ CKEDITOR.plugins.setLang( 'colorbutton', 'en-gb', { E6E6FA: 'Lavender', FFF: 'White' }, - more: 'More Colours...', - panelTitle: 'Colours', - textColorTitle: 'Text Colour' + more: 'More Colors...', + panelTitle: 'Colors', + textColorTitle: 'Text Color' }); diff --git a/addons/website/static/lib/ckeditor/plugins/colordialog/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/colordialog/lang/en.js similarity index 58% rename from addons/website/static/lib/ckeditor/plugins/colordialog/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/colordialog/lang/en.js index 1a98709ef4a..3bc8587a406 100644 --- a/addons/website/static/lib/ckeditor/plugins/colordialog/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/colordialog/lang/en.js @@ -2,10 +2,10 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'colordialog', 'en-gb', { +CKEDITOR.plugins.setLang( 'colordialog', 'en', { clear: 'Clear', highlight: 'Highlight', - options: 'Colour Options', - selected: 'Selected Colour', - title: 'Select colour' + options: 'Color Options', + selected: 'Selected Color', + title: 'Select color' }); diff --git a/addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en.js index e099dee2bf0..fea4479bc72 100644 --- a/addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/contextmenu/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'contextmenu', 'en-gb', { +CKEDITOR.plugins.setLang( 'contextmenu', 'en', { options: 'Context Menu Options' }); diff --git a/addons/website/static/lib/ckeditor/plugins/devtools/lang/en.js b/addons/website/static/lib/ckeditor/plugins/devtools/lang/en.js new file mode 100644 index 00000000000..17798a278f7 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/devtools/lang/en.js @@ -0,0 +1,12 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'devtools', 'en', { + title: 'Element Information', + dialogName: 'Dialog window name', + tabName: 'Tab name', + elementId: 'Element ID', + elementType: 'Element type' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/div/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/div/lang/en.js similarity index 93% rename from addons/website/static/lib/ckeditor/plugins/div/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/div/lang/en.js index 129a78cb029..1a24ee4f431 100644 --- a/addons/website/static/lib/ckeditor/plugins/div/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/div/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'div', 'en-gb', { +CKEDITOR.plugins.setLang( 'div', 'en', { IdInputLabel: 'Id', advisoryTitleInputLabel: 'Advisory Title', cssClassInputLabel: 'Stylesheet Classes', diff --git a/addons/website/static/lib/ckeditor/plugins/docprops/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/docprops/lang/en-gb.js deleted file mode 100644 index a336f855293..00000000000 --- a/addons/website/static/lib/ckeditor/plugins/docprops/lang/en-gb.js +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang( 'docprops', 'en-gb', { - bgColor: 'Background Color', // MISSING - bgFixed: 'Non-scrolling (Fixed) Background', // MISSING - bgImage: 'Background Image URL', // MISSING - charset: 'Character Set Encoding', // MISSING - charsetASCII: 'ASCII', // MISSING - charsetCE: 'Central European', // MISSING - charsetCR: 'Cyrillic', // MISSING - charsetCT: 'Chinese Traditional (Big5)', // MISSING - charsetGR: 'Greek', // MISSING - charsetJP: 'Japanese', // MISSING - charsetKR: 'Korean', // MISSING - charsetOther: 'Other Character Set Encoding', // MISSING - charsetTR: 'Turkish', // MISSING - charsetUN: 'Unicode (UTF-8)', // MISSING - charsetWE: 'Western European', // MISSING - chooseColor: 'Choose', // MISSING - design: 'Design', // MISSING - docTitle: 'Page Title', // MISSING - docType: 'Document Type Heading', // MISSING - docTypeOther: 'Other Document Type Heading', // MISSING - label: 'Document Properties', // MISSING - margin: 'Page Margins', // MISSING - marginBottom: 'Bottom', // MISSING - marginLeft: 'Left', // MISSING - marginRight: 'Right', // MISSING - marginTop: 'Top', // MISSING - meta: 'Meta Tags', // MISSING - metaAuthor: 'Author', // MISSING - metaCopyright: 'Copyright', // MISSING - metaDescription: 'Document Description', // MISSING - metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING - other: 'Other...', // MISSING - previewHtml: '

This is some sample text. You are using CKEditor.

', // MISSING - title: 'Document Properties', // MISSING - txtColor: 'Text Color', // MISSING - xhtmlDec: 'Include XHTML Declarations' // MISSING -}); diff --git a/addons/website/static/lib/ckeditor/plugins/docprops/lang/en.js b/addons/website/static/lib/ckeditor/plugins/docprops/lang/en.js new file mode 100644 index 00000000000..2f522be4c17 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/docprops/lang/en.js @@ -0,0 +1,42 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'docprops', 'en', { + bgColor: 'Background Color', + bgFixed: 'Non-scrolling (Fixed) Background', + bgImage: 'Background Image URL', + charset: 'Character Set Encoding', + charsetASCII: 'ASCII', + charsetCE: 'Central European', + charsetCR: 'Cyrillic', + charsetCT: 'Chinese Traditional (Big5)', + charsetGR: 'Greek', + charsetJP: 'Japanese', + charsetKR: 'Korean', + charsetOther: 'Other Character Set Encoding', + charsetTR: 'Turkish', + charsetUN: 'Unicode (UTF-8)', + charsetWE: 'Western European', + chooseColor: 'Choose', + design: 'Design', + docTitle: 'Page Title', + docType: 'Document Type Heading', + docTypeOther: 'Other Document Type Heading', + label: 'Document Properties', + margin: 'Page Margins', + marginBottom: 'Bottom', + marginLeft: 'Left', + marginRight: 'Right', + marginTop: 'Top', + meta: 'Meta Tags', + metaAuthor: 'Author', + metaCopyright: 'Copyright', + metaDescription: 'Document Description', + metaKeywords: 'Document Indexing Keywords (comma separated)', + other: 'Other...', + previewHtml: '

This is some sample text. You are using CKEditor.

', + title: 'Document Properties', + txtColor: 'Text Color', + xhtmlDec: 'Include XHTML Declarations' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/elementspath/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/elementspath/lang/en.js similarity index 79% rename from addons/website/static/lib/ckeditor/plugins/elementspath/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/elementspath/lang/en.js index 58d2c8568eb..efce8a3a92d 100644 --- a/addons/website/static/lib/ckeditor/plugins/elementspath/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/elementspath/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'elementspath', 'en-gb', { +CKEDITOR.plugins.setLang( 'elementspath', 'en', { eleLabel: 'Elements path', eleTitle: '%1 element' }); diff --git a/addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en.js similarity index 83% rename from addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en.js index ec7383ba979..b5897509d93 100644 --- a/addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/fakeobjects/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'fakeobjects', 'en-gb', { +CKEDITOR.plugins.setLang( 'fakeobjects', 'en', { anchor: 'Anchor', flash: 'Flash Animation', hiddenfield: 'Hidden Field', diff --git a/addons/website/static/lib/ckeditor/plugins/find/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/find/lang/en.js similarity index 91% rename from addons/website/static/lib/ckeditor/plugins/find/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/find/lang/en.js index d15d11da3ff..383654895a3 100644 --- a/addons/website/static/lib/ckeditor/plugins/find/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/find/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'find', 'en-gb', { +CKEDITOR.plugins.setLang( 'find', 'en', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', diff --git a/addons/website/static/lib/ckeditor/plugins/flash/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/flash/lang/en.js similarity index 93% rename from addons/website/static/lib/ckeditor/plugins/flash/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/flash/lang/en.js index 516ed6ea758..c228ddb5116 100644 --- a/addons/website/static/lib/ckeditor/plugins/flash/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/flash/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'flash', 'en-gb', { +CKEDITOR.plugins.setLang( 'flash', 'en', { access: 'Script Access', accessAlways: 'Always', accessNever: 'Never', @@ -11,7 +11,7 @@ CKEDITOR.plugins.setLang( 'flash', 'en-gb', { alignAbsMiddle: 'Abs Middle', alignBaseline: 'Baseline', alignTextTop: 'Text Top', - bgcolor: 'Background colour', + bgcolor: 'Background color', chkFull: 'Allow Fullscreen', chkLoop: 'Loop', chkMenu: 'Enable Flash Menu', diff --git a/addons/website/static/lib/ckeditor/plugins/floatingspace/plugin.js b/addons/website/static/lib/ckeditor/plugins/floatingspace/plugin.js index 0baa514f2d1..328d5aaf311 100644 --- a/addons/website/static/lib/ckeditor/plugins/floatingspace/plugin.js +++ b/addons/website/static/lib/ckeditor/plugins/floatingspace/plugin.js @@ -272,7 +272,7 @@ alignSide == 'left' ? pageScrollX : -pageScrollX; floatSpace.setStyle( alignSide, pixelate( ( mode == 'pin' ? pinnedOffsetX : dockedOffsetX ) + offset + scroll ) ); - } + }; })(); if ( topHtml ) { diff --git a/addons/website/static/lib/ckeditor/plugins/font/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/font/lang/en.js similarity index 86% rename from addons/website/static/lib/ckeditor/plugins/font/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/font/lang/en.js index 9e604775c45..f26e1900282 100644 --- a/addons/website/static/lib/ckeditor/plugins/font/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/font/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'font', 'en-gb', { +CKEDITOR.plugins.setLang( 'font', 'en', { fontSize: { label: 'Size', voiceLabel: 'Font Size', diff --git a/addons/website/static/lib/ckeditor/plugins/format/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/format/lang/en.js similarity index 90% rename from addons/website/static/lib/ckeditor/plugins/format/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/format/lang/en.js index b10afec0cd2..269b21913a4 100644 --- a/addons/website/static/lib/ckeditor/plugins/format/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/format/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'format', 'en-gb', { +CKEDITOR.plugins.setLang( 'format', 'en', { label: 'Format', panelTitle: 'Paragraph Format', tag_address: 'Address', diff --git a/addons/website/static/lib/ckeditor/plugins/forms/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/forms/lang/en.js similarity index 89% rename from addons/website/static/lib/ckeditor/plugins/forms/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/forms/lang/en.js index ddf1d3630dd..6063bc68ae7 100644 --- a/addons/website/static/lib/ckeditor/plugins/forms/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/forms/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'forms', 'en-gb', { +CKEDITOR.plugins.setLang( 'forms', 'en', { button: { title: 'Button Properties', text: 'Text (Value)', @@ -60,9 +60,9 @@ CKEDITOR.plugins.setLang( 'forms', 'en-gb', { type: 'Type', typeText: 'Text', typePass: 'Password', - typeEmail: 'Email', // MISSING - typeSearch: 'Search', // MISSING - typeTel: 'Telephone Number', // MISSING + typeEmail: 'Email', + typeSearch: 'Search', + typeTel: 'Telephone Number', typeUrl: 'URL' } }); diff --git a/addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en.js index 9900a2a27d7..e5cca60996e 100644 --- a/addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/horizontalrule/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'horizontalrule', 'en-gb', { +CKEDITOR.plugins.setLang( 'horizontalrule', 'en', { toolbar: 'Insert Horizontal Line' }); diff --git a/addons/website/static/lib/ckeditor/plugins/iframe/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/iframe/lang/en.js similarity index 86% rename from addons/website/static/lib/ckeditor/plugins/iframe/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/iframe/lang/en.js index c1a4505ecee..95c12de56fb 100644 --- a/addons/website/static/lib/ckeditor/plugins/iframe/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/iframe/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'iframe', 'en-gb', { +CKEDITOR.plugins.setLang( 'iframe', 'en', { border: 'Show frame border', noUrl: 'Please type the iframe URL', scrolling: 'Enable scrollbars', diff --git a/addons/website/static/lib/ckeditor/plugins/image/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/image/lang/en.js similarity index 95% rename from addons/website/static/lib/ckeditor/plugins/image/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/image/lang/en.js index 286c1250b6c..76d8dc4b498 100644 --- a/addons/website/static/lib/ckeditor/plugins/image/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/image/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'image', 'en-gb', { +CKEDITOR.plugins.setLang( 'image', 'en', { alertUrl: 'Please type the image URL', alt: 'Alternative Text', border: 'Border', diff --git a/addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image1.jpg b/addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fe79eb2ccee3ff01afd83dc9e1d29c856889462 GIT binary patch literal 34316 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 NeOJVPhR5E2|Jl`NQLz93 literal 0 HcmV?d00001 diff --git a/addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image2.jpg b/addons/website/static/lib/ckeditor/plugins/image2/dev/assets/image2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..453ece5d339a4c12bce722c06a81d1db587a7f8b GIT binary patch literal 27711 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 Y7L@bq(U<>r?0=p0|F>ji>HnGkUp@y1T>t<8 literal 0 HcmV?d00001 diff --git a/addons/website/static/lib/ckeditor/plugins/image2/dev/contents.css b/addons/website/static/lib/ckeditor/plugins/image2/dev/contents.css new file mode 100644 index 00000000000..1392835036d --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/image2/dev/contents.css @@ -0,0 +1,32 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +figure.caption { + text-align: center; + border: solid 1px #ccc; + border-radius: 2px; + background: rgba(0,0,0,0.05); + padding: 10px; + margin: 10px 20px; + display: block; /* For IE8 */ +} + +figure.caption figcaption { + text-align: center; + display: block; /* For IE8 */ +} + +.cke_widget_wrapper:hover:after { + content: "id: " attr(data-widget-id); + position: absolute; + top: 0; + right: 0; + padding: 2px 4px; + background: #EEE; + border: solid 1px #DDD; + border-radius: 2px; + color: #BBB; + font: bold 10px sans-serif; +} \ No newline at end of file diff --git a/addons/website/static/lib/ckeditor/plugins/image2/dev/image2.html b/addons/website/static/lib/ckeditor/plugins/image2/dev/image2.html new file mode 100644 index 00000000000..18a530843d9 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/image2/dev/image2.html @@ -0,0 +1,199 @@ + + + + + Widget image2 — CKEditor Sample + + + + + + + + + + + + + + + + + + +

Framed sample

+ + + +

Inline sample

+ +
+

Apollo 11

+ +
+ Saturn V +
Roll out of Saturn V on launch pad
+
+ +

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

+ +

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

+ +

Broadcasting and quotes

+ +

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

+ +
+

One small step for [a] man, one giant leap for mankind.

+
+ +

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

+ +
+

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

+
+ +
+ The Eagle +
The Eagle in lunar orbit
+
+ +

Technical details

+ +

Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

+ +
    +
  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
  2. +
  3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
  4. +
  5. Lunar Module for landing on the Moon.
  6. +
+ +

After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

+ +

+ Saturn V +

+ +
+

Source: Wikipedia.org

+
+ + + + + + diff --git a/addons/website/static/lib/ckeditor/plugins/image2/dialogs/image2.js b/addons/website/static/lib/ckeditor/plugins/image2/dialogs/image2.js new file mode 100644 index 00000000000..8c4b924bd42 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/image2/dialogs/image2.js @@ -0,0 +1,480 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +'use strict'; + +CKEDITOR.dialog.add( 'image2', function( editor ) { + + // RegExp: 123, 123px, empty string "" + var regexGetSizeOrEmpty = /(^\s*(\d+)(px)?\s*$)|^$/i, + + lockButtonId = CKEDITOR.tools.getNextId(), + resetButtonId = CKEDITOR.tools.getNextId(), + + lang = editor.lang.image2, + commonLang = editor.lang.common, + + lockResetStyle = 'margin-top:18px;width:40px;height:20px;', + lockResetHtml = new CKEDITOR.template( + '' ).output( { + lockButtonId: lockButtonId, + resetButtonId: resetButtonId + } ), + + // Global variables referring to the dialog's context. + doc, widget, image, + + // Global variable referring to this dialog's image pre-loader. + preLoader, + + // Global variables holding the original size of the image. + domWidth, domHeight, + + // Global variables related to image pre-loading. + preLoadedWidth, preLoadedHeight, srcChanged, + + // Global variables related to size locking. + lockRatio, userDefinedLock, + + // Global variables referring to dialog fields and elements. + lockButton, resetButton, widthField, heightField; + + // Validates dimension. Allowed values are: + // "123px", "123", "" (empty string) + function validateDimension() { + var match = this.getValue().match( regexGetSizeOrEmpty ), + isValid = !!( match && parseInt( match[ 1 ], 10 ) !== 0 ); + + if ( !isValid ) + alert( commonLang[ 'invalid' + CKEDITOR.tools.capitalize( this.id ) ] ); + + return isValid; + } + + // Creates a function that pre-loads images. The callback function passes + // [image, width, height] or null if loading failed. + // + // @returns {Function} + function createPreLoader() { + var image = doc.createElement( 'img' ), + listeners = []; + + function addListener( event, callback ) { + listeners.push( image.once( event, function( evt ) { + removeListeners(); + callback( evt ); + } ) ); + } + + function removeListeners() { + var l; + + while ( ( l = listeners.pop() ) ) + l.removeListener(); + } + + // @param {String} src. + // @param {Function} callback. + return function( src, callback, scope ) { + addListener( 'load', function() { + callback.call( scope, image, image.$.width, image.$.height ); + } ); + + addListener( 'error', function() { + callback( null ); + } ); + + addListener( 'abort', function() { + callback( null ); + } ); + + image.setAttribute( 'src', src + '?' + Math.random().toString( 16 ).substring( 2 ) ); + }; + } + + function onChangeDimension() { + // If ratio is un-locked, then we don't care what's next. + if ( !lockRatio ) + return; + + var value = this.getValue(); + + // No reason to auto-scale or unlock if the field is empty. + if ( !value ) + return; + + // If the value of the field is invalid (e.g. with %), unlock ratio. + if ( !value.match( regexGetSizeOrEmpty ) ) + toggleLockDimensions( false ); + + // No automatic re-scale when dimension is '0'. + if ( value === '0' ) + return; + + var isWidth = this.id == 'width', + // If dialog opened for the new image, domWidth and domHeight + // will be empty. Use dimensions from pre-loader in such case instead. + width = domWidth || preLoadedWidth, + height = domHeight || preLoadedHeight; + + // If changing width, then auto-scale height. + if ( isWidth ) + value = Math.round( height * ( value / width ) ); + + // If changing height, then auto-scale width. + else + value = Math.round( width * ( value / height ) ); + + // If the value is a number, apply it to the other field. + if ( !isNaN( value ) ) + ( isWidth ? heightField : widthField ).setValue( value ); + } + + // Set-up function for lock and reset buttons: + // * Adds lock and reset buttons to focusables. Check if button exist first + // because it may be disabled e.g. due to ACF restrictions. + // * Register mouseover and mouseout event listeners for UI manipulations. + // * Register click event listeners for buttons. + function onLoadLockReset() { + var dialog = this.getDialog(); + + function setupMouseClasses( el ) { + el.on( 'mouseover', function() { + this.addClass( 'cke_btn_over' ); + }, el ); + + el.on( 'mouseout', function() { + this.removeClass( 'cke_btn_over' ); + }, el ); + } + + // Create references to lock and reset buttons for this dialog instance. + lockButton = doc.getById( lockButtonId ); + resetButton = doc.getById( resetButtonId ); + + // Activate (Un)LockRatio button + if ( lockButton ) { + dialog.addFocusable( lockButton, 4 ); + + lockButton.on( 'click', function( evt ) { + toggleLockDimensions(); + evt.data && evt.data.preventDefault(); + }, this.getDialog() ); + + setupMouseClasses( lockButton ); + } + + // Activate the reset size button. + if ( resetButton ) { + dialog.addFocusable( resetButton, 5 ); + + // Fills width and height fields with the original dimensions of the + // image (stored in widget#data since widget#init). + resetButton.on( 'click', function( evt ) { + // If there's a new image loaded, reset button should revert + // cached dimensions of pre-loaded DOM element. + if ( srcChanged ) { + widthField.setValue( preLoadedWidth ); + heightField.setValue( preLoadedHeight ); + } + + // If the old image remains, reset button should revert + // dimensions as loaded when the dialog was first shown. + else { + widthField.setValue( domWidth ); + heightField.setValue( domHeight ); + } + + evt.data && evt.data.preventDefault(); + }, this ); + + setupMouseClasses( resetButton ); + } + } + + function toggleLockDimensions( enable ) { + // No locking if there's no radio (i.e. due to ACF). + if ( !lockButton ) + return; + + var width, height; + + // Check image ratio and original image ratio, but respecting user's + // preference. This is performed when a new image is pre-loaded + // but not if user already manually locked the ratio. + if ( enable == 'check' && !userDefinedLock ) { + width = widthField.getValue(); + height = heightField.getValue(); + + var domRatio = preLoadedWidth * 1000 / preLoadedHeight, + ratio = width * 1000 / height; + + lockRatio = false; + + // Lock ratio, if there is no width and no height specified. + if ( !width && !height ) + lockRatio = true; + + // Lock ratio if there is at least width or height specified, + // and the old ratio that matches the new one. + else if ( !isNaN( domRatio + ratio ) && Math.round( domRatio ) == Math.round( ratio ) ) + lockRatio = true; + } + + // True or false. + else if ( typeof enable == 'boolean' ) + lockRatio = enable; + + // Undefined. User changed lock value. + else { + userDefinedLock = true; + lockRatio = !lockRatio; + + width = widthField.getValue(); + + // Automatically adjust height to width to match + // the original ratio (based on dom- dimensions). + if ( lockRatio && width ) { + height = domHeight / domWidth * width; + + if ( !isNaN( height ) ) + heightField.setValue( Math.round( height ) ); + } + } + + lockButton[ lockRatio ? 'removeClass' : 'addClass' ]( 'cke_btn_unlocked' ); + lockButton.setAttribute( 'aria-checked', lockRatio ); + + // Ratio button hc presentation - WHITE SQUARE / BLACK SQUARE + if ( CKEDITOR.env.hc ) { + var icon = lockButton.getChild( 0 ); + icon.setHtml( lockRatio ? CKEDITOR.env.ie ? '\u25A0' : '\u25A3' : CKEDITOR.env.ie ? '\u25A1' : '\u25A2' ); + } + } + + function toggleDimensions( enable ) { + var method = enable ? 'enable' : 'disable'; + + widthField[ method ](); + heightField[ method ](); + } + + return { + title: lang.title, + minWidth: 250, + minHeight: 100, + onLoad: function() { + // Create a "global" reference to the document for this dialog instance. + doc = this._.element.getDocument(); + + // Create a pre-loader used for determining dimensions of new images. + preLoader = createPreLoader(); + }, + onShow: function() { + // Create a "global" reference to edited widget. + widget = this._.widget; + + // Create a "global" reference to widget's image. + image = widget.parts.image; + + // Reset global variables. + preLoadedWidth = preLoadedHeight = srcChanged = + userDefinedLock = lockRatio = false; + + // TODO: IE8 + // Get the natural width of the image. + domWidth = image.$.naturalWidth; + + // TODO: IE8 + // Get the natural height of the image. + domHeight = image.$.naturalHeight; + + // Determine image ratio lock on startup. Delayed, waiting for + // fields to be filled with setup functions. + setTimeout( function() { + toggleLockDimensions( 'check' ); + } ); + }, + contents: [ + { + id: 'info', + elements: [ + { + id: 'src', + type: 'text', + label: commonLang.url, + onKeyup: function() { + var value = this.getValue(); + + toggleDimensions( false ); + + // Remember that src is different than default. + if ( value !== widget.data.src ) { + // Update dimensions of the image once it's preloaded. + preLoader( value, function( image, width, height ) { + // Re-enable width and height fields. + toggleDimensions( true ); + + // There was problem loading the image. Unlock ratio. + if ( !image ) + return toggleLockDimensions( false ); + + // Fill width field with the width of the new image. + widthField.setValue( width ); + + // Fill height field with the height of the new image. + heightField.setValue( height ); + + // Cache the new width. + preLoadedWidth = width; + + // Cache the new height. + preLoadedHeight = height; + + // Check for new lock value if image exist. + toggleLockDimensions( 'check' ); + } ); + + srcChanged = true; + } + + // Value is the same as in widget data but is was + // modified back in time. Roll back dimensions when restoring + // default src. + else if ( srcChanged ) { + // Re-enable width and height fields. + toggleDimensions( true ); + + // Restore width field with cached width. + widthField.setValue( domWidth ); + + // Restore height field with cached height. + heightField.setValue( domHeight ); + + // Src equals default one back again. + srcChanged = false; + } + + // Value is the same as in widget data and it hadn't + // been modified. + else { + // Re-enable width and height fields. + toggleDimensions( true ); + } + }, + setup: function( widget ) { + this.setValue( widget.data.src ); + }, + commit: function( widget ) { + widget.setData( 'src', this.getValue() ); + }, + validate: CKEDITOR.dialog.validate.notEmpty( lang.urlMissing ) + }, + { + id: 'alt', + type: 'text', + label: lang.alt, + setup: function( widget ) { + this.setValue( widget.data.alt ); + }, + commit: function( widget ) { + widget.setData( 'alt', this.getValue() ); + } + }, + { + type: 'hbox', + widths: [ '25%', '25%', '50%' ], + requiredContent: 'img[width,height]', + children: [ + { + type: 'text', + width: '45px', + id: 'width', + label: commonLang.width, + validate: validateDimension, + onKeyUp: onChangeDimension, + onLoad: function() { + widthField = this; + }, + setup: function( widget ) { + this.setValue( widget.data.width ); + }, + commit: function( widget ) { + widget.setData( 'width', this.getValue() ); + } + }, + { + type: 'text', + id: 'height', + width: '45px', + label: commonLang.height, + validate: validateDimension, + onKeyUp: onChangeDimension, + onLoad: function() { + heightField = this; + }, + setup: function( widget ) { + this.setValue( widget.data.height ); + }, + commit: function( widget ) { + widget.setData( 'height', this.getValue() ); + } + }, + { + id: 'lock', + type: 'html', + style: lockResetStyle, + onLoad: onLoadLockReset, + html: lockResetHtml + } + ] + }, + { + type: 'hbox', + id: 'alignment', + children: [ + { + id: 'align', + type: 'radio', + items: [ + [ 'None', 'none' ], + [ 'Left', 'left' ], + [ 'Center', 'center' ], + [ 'Right', 'right' ] ], + label: commonLang.align, + setup: function( widget ) { + this.setValue( widget.data.align ); + }, + commit: function( widget ) { + widget.setData( 'align', this.getValue() ); + } + } + ] + }, + { + id: 'hasCaption', + type: 'checkbox', + label: lang.captioned, + setup: function( widget ) { + this.setValue( widget.data.hasCaption ); + }, + commit: function( widget ) { + widget.setData( 'hasCaption', this.getValue() ); + } + } + ] + } + ] + }; +} ); \ No newline at end of file diff --git a/addons/website/static/lib/ckeditor/plugins/image2/icons/hidpi/image2.png b/addons/website/static/lib/ckeditor/plugins/image2/icons/hidpi/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c7ade53ce7653aa0351e7fb014abf2af6a326a GIT binary patch literal 1745 zcmV;?1}^!DP)=+%fuOndSR^T$B28eVjfJ3x z98w@iuRX>I=(=!&_7J2{S|R#JTG}OdXQl@(8PbWJIDp!B87!7F-+SNt-Zx9}*BdwZ ze})=-5CB5#FQT>B!2|>#rNnU@q!8>gJQgt4qP4~tgOXC>r&5gO^Z2P0Qp$Zzz!<|` zyUkXs#a_GJO`zcW6qc6sJ{La}TkpT`gi+LOfs&G^u3TXxm13{eA_xMEG54kLiwFDl zNQtJTl=ztpem>7mw{irD2(2;f-Mve=xyhg3dv9NRaQ@;&V>}O=6xdC`T4JqC7 zhutv5bsTKMo`UZ9X=6YscHVhM7_Aw5`e_$<23Se<{u=oGzi-@#KHJ&ddC#_}^t@V8{1dfz=O5rJmBPHSGKyZyxV9rZZ{f@+vhJ_c=yGtSEsjkcD^zJAq2{CC}gu#N+l|# z5`}CQZ_57qSpnyt{ev` zB|<4uz7O|Q?frs^@uZe*XEd#Qgl-E*#(o(rn zsW6t$llDAPu1hhOqckyrIDY)8nG+|jjuwlAVMwRlCXOPO>-7oO_x~tnXVZ*~Aceqa z-4~%8^Z{!vB%_q~eI^bbL@X@KR3Clxr88&GUUo8>TVj6xa%pOc?@UZ^s8pg{sUS|C zoGw=?*S~x0n24jOOLH<&%5nHnz5adRHx!HbsZ?K(2!ZUWu{WPm2t1`YFfxLu)%;AM zu=;~q&7T|}=f{^Wm8*vjuZo$ORdwoAIep{^;>3w`I-h_0)Z$_>iX!4T?w=LMF`Z6_ zobR)+xcCz>KK{J#d0njyS#iRE0F+V`vRT~GQGl1vJn_T~#?Xmlgb*w)EbvIRdikS9 z6%PN?B4H)9vhETt2DQ_f9ZB7Y0(-o|-~y-PearsOzoAj~(mY9Z~d!h8~cBwYI+w8&Trd`Ah~eIq8p< zN~^WmSwBwhhWo`=8OwvBC(J=B?=yh4cuJ8k6keX6o15vi?dF? z+8BZ$;BKo$_0XYbqd2DBZa=W6-!|HDOb`Tp=T+Jmc6WFA?9)%#OYCxeeZBkD@@?+@ zuZh?gnnA$s?k?IGl-8P!jSXxV?(aX6d*bicucJK=X^bK0bpDsv00f;5#u&t{x8A~Z zI>cd!?sWEr_Ms30$MaC>G}7}>LI|Yi;VOl@-{1pDh~#tazoZSVS5)iOH~;_uC3Hnt zbYx+4WjbSWWnpw>05UK!Gc7PSEiy1vF)=zYH##shD=;!TFfjJwrbz$*03~!qSaf7z zbY(hiZ)9m^c>ppnF*7YNHZ3wRR539+FgH3dG%GMNIxsMYzaI4f000?uMObuGZ)S9N nVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs00000NkvXXu0mjf#s^6C literal 0 HcmV?d00001 diff --git a/addons/website/static/lib/ckeditor/plugins/image2/icons/image2.png b/addons/website/static/lib/ckeditor/plugins/image2/icons/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf61b5f2b3a81f75b39d204faad07b05145b5e0 GIT binary patch literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i6R)R>V~EA+xswh3Zx;w0t^dB=S4y4LTZKvAL7dH7QcGotjs|mb zyPl5EPd1%1H4W!-?H!JL$?iJbcV(wj5|f~!prV(K`i*n<|G#z!+PJ03?q%-#cO~EN zojiJ!b>8#D9!Hl7z7WypGNGXl+Y>!RTv;4Hta)U)?6T(f@82gpw`};w|JmlaMDmLg zs})%vh15Ko4A~yfNw$$=c2O!)Q7Ts|VsZJOG;3MEIm3o)OivCReD^M|1_%PCJ#AmT zTKm+dBNENeD?2#mJ-?W>b%x*a4vu{t0V1pnf9w8#dGch*?*04gqeNI81q4_a&!$b* z=whg-s8|rUK6!0z$yyDrY15{Kga%%94wYT?>S2M!lV87P>6{J-Z74r*(Z_xD)k~Xn z7V3DP#jtUihmRWJgz{Ta4(x*_DTMSB{ zR)wvuef_oS;!C8<`)MX5lF!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7rX(Z{ zx%nxXX_dG&*!*NZ0@NT0vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWA_h-a KKbLh*2~7a{_eSsl literal 0 HcmV?d00001 diff --git a/addons/website/static/lib/ckeditor/plugins/image2/lang/en.js b/addons/website/static/lib/ckeditor/plugins/image2/lang/en.js new file mode 100644 index 00000000000..6431dfc0089 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/image2/lang/en.js @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'image2', 'en', { + alt: 'Alternative Text', // Inherit from image plugin. + captioned: 'Captioned image', // NEW property. + lockRatio: 'Lock Ratio', // Inherit from image plugin. + menu: 'Image Properties', // Inherit from image plugin. + resetSize: 'Reset Size', // Inherit from image plugin. + resizer: 'Click and drag to resize', // NEW property. + title: 'Image Properties', // Inherit from image plugin. + urlMissing: 'Image source URL is missing.' // Inherit from image plugin. +} ); diff --git a/addons/website/static/lib/ckeditor/plugins/image2/plugin.js b/addons/website/static/lib/ckeditor/plugins/image2/plugin.js new file mode 100644 index 00000000000..48ca3e98990 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/image2/plugin.js @@ -0,0 +1,940 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +'use strict'; + +(function() { + + var template = + '
' + + '' + + '
Caption
' + + '
', + templateInline = ''; + + CKEDITOR.plugins.add( 'image2', { + lang: 'en', // %REMOVE_LINE_CORE% + requires: 'widget,dialog', + icons: 'image2', + hidpi: true, + + onLoad: function( editor ) { + CKEDITOR.addCss( '.cke_image2_resizer{' + + 'display:none;' + + 'position:absolute;' + + 'bottom:2px;' + + 'width: 0px;' + + 'height: 0px;' + + 'border-style:solid;' + + // Bottom-right corner style of the resizer. + 'right:2px;' + + 'border-width:0 0 10px 10px;' + + 'border-color:transparent transparent #ccc transparent;' + + CKEDITOR.tools.cssVendorPrefix( 'box-shadow', '1px 1px 0px #777', true ) + ';' + + 'cursor:se-resize;' + + '}' + + '.cke_image2_resizer_wrapper{' + + 'position:relative;' + + 'display:inline-block;' + + 'line-height:0;' + + '}' + + // Bottom-left corner style of the resizer. + '.cke_image2_resizer.cke_image2_resizer_left{' + + 'right:auto;' + + 'left:2px;' + + 'border-width:10px 0 0 10px;' + + 'border-color:transparent transparent transparent #ccc;' + + CKEDITOR.tools.cssVendorPrefix( 'box-shadow', '-1px 1px 0px #777', true ) + ';' + + 'cursor:sw-resize;' + + '}' + + '.cke_widget_wrapper:hover .cke_image2_resizer{display:block;}' ); + }, + + init: function( editor ) { + // Register the inline widget. + editor.widgets.add( 'image2inline', image2inline ); + + // Register the block widget. + editor.widgets.add( 'image2block', image2block ); + + // Add the command for this plugin. + editor.addCommand( 'image2', { + exec: function() { + var focused = getFocusedWidget( editor ); + + if ( focused ) + focused.edit(); + else + editor.execCommand( 'image2inline' ); + } + } ); + + // Add toolbar button for this plugin. + editor.ui.addButton && editor.ui.addButton( 'image2', { + label: editor.lang.common.image, + command: 'image2', + toolbar: 'insert,10' + } ); + + // Integrate the plugin with context menus. + if ( editor.contextMenu ) { + editor.addMenuGroup( 'image2', 10 ); + + // Define a menu item for the plguin. + editor.addMenuItem( 'image2', { + label: editor.lang.image2.menu, + command: 'image2', + group: 'image2' + } ); + + // Show the menu item in the context menu when a widget + // is focused. + editor.contextMenu.addListener( function() { + var focused = getFocusedWidget( editor ); + + if ( focused ) + return { image2: CKEDITOR.TRISTATE_OFF }; + + return null; + } ); + } + + // Add the dialog associated with both widgets. + CKEDITOR.dialog.add( 'image2', this.path + 'dialogs/image2.js' ); + }, + + afterInit: function( editor ) { + var align = { left:1,right:1,center:1,block:1 }, + integrate = alignCommandIntegrator( editor ); + + for ( var value in align ) + integrate( value ); + } + } ); + + // Default definition shared across widgets. + var image2 = { + // This widget converts style-driven dimensions to attributes. + contentTransformations: [ + [ 'img[width]: sizeToAttribute' ] + ], + + data: function() { + var widget = this, + editor = widget.editor, + oldState = widget.oldData, + newState = widget.data; + + // Convert the internal form of the widget + // from the old state to the new one. + widget.shiftState( { + element: widget.element, + oldState: oldState, + newState: newState, + + // Destroy the widget. + destroy: function() { + if ( this.destroyed ) + return; + + editor.widgets.destroy( widget ); + + // Mark widget was destroyed. + this.destroyed = true; + }, + + init: function( element ) { + // Create a new widget. This widget will be either captioned + // non-captioned, block or inline according to what is the + // new state of the widget. + if ( this.destroyed ) { + var name = 'image2' + ( newState.hasCaption || newState.align == 'center' ? 'block' : 'inline' ); + widget = editor.widgets.initOn( element, name, widget.data ); + } + + // If now widget was destroyed just update wrapper's alignment. + // According to the new state. + else + setWrapperAlign( widget ); + } + } ); + + // Get the from the widget. As widget may have been + // re-initialized, this may be a totally different . + var image = widget.parts.image; + + image.setAttributes( { + src: widget.data.src, + + // This internal is required by the editor. + 'data-cke-saved-src': widget.data.src, + + alt: widget.data.alt + } ); + + // Set dimensions of the image according to gathered data. + setDimensions( widget ); + + // Cache current data. + widget.oldData = CKEDITOR.tools.extend( {}, widget.data ); + }, + + // The name of this widget's dialog. + dialog: 'image2', + + // Initialization of this widget. + init: function() { + var image = this.parts.image, + data = { + // Check whether widget has caption. + hasCaption: !!this.parts.caption, + + // Read initial image SRC attribute. + src: image.getAttribute( 'src' ), + + // Read initial image ALT attribute. + alt: image.getAttribute( 'alt' ) || '', + + // Read initial width from either attribute or style. + width: image.getAttribute( 'width' ) || '', + + // Read initial height from either attribute or style. + height: image.getAttribute( 'height' ) || '' + }; + + // If element was marked as centered when upcasting, update + // the alignment both visually and in widget data. + if ( this.element.data( 'cke-centered' ) ) { + this.element.data( 'cke-centered', false ); + data.align = 'center'; + } + + // Otherwise, read initial float style from figure/image and + // then remove it. This style will be set on wrapper in #data listener. + else { + data.align = this.element.getStyle( 'float' ) || image.getStyle( 'float' ) || 'none'; + this.element.removeStyle( 'float' ); + image.removeStyle( 'float' ); + } + + // Get rid of extra vertical space when there's no caption. + // It will improve the look of the resizer. + if ( !data.hasCaption ) + this.wrapper.setStyle( 'line-height', '0' ); + + // Set collected data. + this.setData( data ); + + // Setup dynamic image resizing with mouse. + setupResizer( this ); + + // Create shift stater for this widget. + this.shiftState = CKEDITOR.plugins.image2.stateShifter( this.editor ); + }, + + // Widget downcasting. + downcast: downcastWidgetElement + }, + + image2inline = CKEDITOR.tools.extend( { + // Widget-specific rules for Allowed Content Filter. + allowedContent: { + // This widget needs . + img: { + attributes: '!src,alt,width,height', + styles: 'float' + } + }, + + // This widget is inline. + inline: true, + + // Parts of this widget. + parts: { image: 'img' }, + + // Template of the widget: plain image. + template: templateInline, + + // Widget upcasting. + upcast: createUpcastFunction() + }, image2 ), + + image2block = CKEDITOR.tools.extend( { + // Widget-specific rules for Allowed Content Filter. + allowedContent: { + // This widget needs
. + figcaption: true, + + // This widget needs
. + figure: { + classes: '!caption', + styles: 'float,display' + }, + + // This widget needs . + img: { + attributes: '!src,alt,width,height' + }, + + // This widget may need
centering wrapper. + div: { + match: isCenterWrapper, + styles: 'text-align' + }, + + // This widget may need

centering wrapper. + p: { + match: isCenterWrapper, + styles: 'text-align' + } + }, + + // This widget has an editable caption. + editables: { + caption: { + selector: 'figcaption', + allowedContent: 'br em strong sub sup u; a[!href]' + } + }, + + // Parts of this widget: image and caption. + parts: { + image: 'img', + caption: 'figcaption' + }, + + // Template of the widget: figure with image and caption. + template: template, + + // Widget upcasting. + upcast: createUpcastFunction( true ) + }, image2 ); + + CKEDITOR.plugins.image2 = { + stateShifter: function( editor ) { + // Tag name used for centering non-captioned widgets. + var centerElement = editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div', + + // The order that stateActions get executed. It matters! + shiftables = [ 'hasCaption', 'align' ], + + editable = editor.editable(), + + // Atomic procedures, one per state variable. + stateActions = { + align: function( data, oldValue, newValue ) { + var hasCaptionAfter = data.newState.hasCaption, + element = data.element; + + // Alignment changed. + if ( changed( data, 'align' ) ) { + // No caption in the new state. + if ( !hasCaptionAfter ) { + // Changed to "center" (non-captioned). + if ( newValue == 'center' ) { + data.destroy(); + data.element = wrapInCentering( element ); + } + + // Changed to "non-center" from "center" while caption removed. + if ( !changed( data, 'hasCaption' ) && oldValue == 'center' && newValue != 'center' ) { + data.destroy(); + data.element = unwrapFromCentering( element ); + } + } + } + + // Alignment remains and "center" removed caption. + else if ( newValue == 'center' && changed( data, 'hasCaption' ) && !hasCaptionAfter ) { + data.destroy(); + data.element = wrapInCentering( element ); + } + + // Finally set display for figure. + if ( element.is( 'figure' ) ) { + if ( newValue == 'center' ) + element.setStyle( 'display', 'inline-block' ); + else + element.removeStyle( 'display' ); + } + }, + hasCaption: function( data, oldValue, newValue ) { + // This action is for real state change only. + if ( !changed( data, 'hasCaption' ) ) + return; + + var element = data.element, + oldState = data.oldState, + newState = data.newState, + img; + + // Switching hasCaption always destroys the widget. + data.destroy(); + + // There was no caption, but the caption is to be added. + if ( newValue ) { + // Get from element. As element may be either + // or centering

, consider it now. + img = element.findOne( 'img' ) || element; + + // Create new

from widget template. + var figure = CKEDITOR.dom.element.createFromHtml( template, editor.document ); + + // Replace element with
. + replaceSafely( figure, element ); + + // Use old instead of the one from the template, + // so we won't lose additional attributes. + img.replace( figure.findOne( 'img' ) ); + + // Update widget's element. + data.element = figure; + } + + // The caption was present, but now it's to be removed. + else { + // Unwrap from figure. + img = element.findOne( 'img' ); + + // Replace
with . + img.replace( element ); + + // Update widget's element. + data.element = img; + } + } + }; + + function getValue( state, name ) { + return state && state[ name ] !== undefined ? state[ name ] : null; + } + + function changed( data, name ) { + if ( !data.oldState ) + return false; + else + return data.oldState[ name ] !== data.newState[ name ]; + } + + function wrapInCentering( element ) { + // When widget gets centered. Wrapper must be created. + // Create new with text-align:center. + var center = editor.document.createElement( centerElement, { + // Centering wrapper is.. centering. + styles: { 'text-align': 'center' } + } ); + + // Replace element with centering wrapper. + replaceSafely( center, element ); + + // Append element into centering wrapper. + element.move( center ); + + return center; + } + + function unwrapFromCentering( element ) { + var img = element.findOne( 'img' ); + + img.replace( element ); + + return img; + } + + function replaceSafely( replacing, replaced ) { + if ( replaced.getParent() ) { + // Create a range that corresponds with old element's position. + var range = editor.createRange(); + + // Move the range before old element. + range.moveToPosition( replaced, CKEDITOR.POSITION_BEFORE_START ); + + // Insert element at range position. + editable.insertElementIntoRange( replacing, range ); + + // Remove old element. + replaced.remove(); + } + else + replacing.replace( replaced ); + } + + return function( data ) { + var oldState = data.oldState, + newState = data.newState, + name; + + // Iterate over possible state variables. + for ( var i = 0; i < shiftables.length; i++ ) { + name = shiftables[ i ]; + + stateActions[ name ]( data, + oldState ? oldState[ name ] : null, + newState[ name ] ); + } + + data.init( data.element ); + }; + } + }; + + function setWrapperAlign( widget ) { + var wrapper = widget.wrapper, + align = widget.data.align; + + if ( align == 'center' ) { + if ( !widget.inline ) + wrapper.setStyle( 'text-align', 'center' ); + + wrapper.removeStyle( 'float' ); + } else { + if ( !widget.inline ) + wrapper.removeStyle( 'text-align' ); + + if ( align == 'none' ) + wrapper.removeStyle( 'float' ); + else + wrapper.setStyle( 'float', align ); + } + } + + // Creates widgets from all and
. + // + // @param {CKEDITOR.htmlParser.element} el + function createUpcastFunction( isBlock ) { + var regexPercent = /^\s*(\d+\%)\s*$/i, + dimensions = { width:1,height:1 }; + + function upcastElement( el, isBlock, isCenter ) { + var name = el.name, + image; + + // Block widget to be upcasted. + if ( isBlock ) { + // If a center wrapper is found. + if ( isCenter ) { + // So the element is: + //
. + // Centering is done by widget.wrapper in such case. Hence, replace + // centering wrapper with figure. + // The other case is: + //

. + // Then

takes charge of

and nothing is to be changed. + if ( name == 'div' ) { + var figure = el.getFirst( 'figure' ); + el.replaceWith( figure ); + el = figure; + } + + // Mark the element as centered, so widget.data.align + // can be correctly filled on init. + el.attributes[ 'data-cke-centered' ] = true; + + image = el.getFirst( 'img' ); + } + + // No center wrapper has been found. + else if ( name == 'figure' && el.hasClass( 'caption' ) ) + image = el.getFirst( 'img' ); + } + + // Inline widget from plain img. + else if ( name == 'img' ) + image = el; + + if ( !image ) + return; + + // If there's an image, then cool, we got a widget. + // Now just remove dimension attributes expressed with %. + for ( var d in dimensions ) { + var dimension = image.attributes[ d ]; + + if ( dimension && dimension.match( regexPercent ) ) + delete image.attributes[ d ]; + } + + return el; + } + + return isBlock ? + function( el ) { + return upcastElement( el, true, isCenterWrapper( el ) ); + } + : + function( el ) { + // Basically upcast the element if there is no special + // wrapper around. + return upcastElement( el ); + }; + } + + // Transforms the widget to the external format according to + // the current configuration. + // + // @param {CKEDITOR.htmlParser.element} el + function downcastWidgetElement( el ) { + var attrs = el.attributes, + align = this.data.align; + + // De-wrap the image from resize handle wrapper. + // Only block widgets have one. + if ( !this.inline ) { + var resizeWrapper = el.getFirst( 'span' ), + img = resizeWrapper.getFirst( 'img' ); + + resizeWrapper.replaceWith( img ); + } + + if ( align && align != 'none' ) { + // Parse element styles. Styles will be extended. + var styles = CKEDITOR.tools.parseCssText( attrs.style || '' ); + + // If centering, wrap downcasted element. + // Wrappers for and
are

and

, respectively. + if ( align == 'center' && el.name != 'p' ) { + var name = el.name == 'img' ? 'p' : 'div'; + + el = el.wrapWith( new CKEDITOR.htmlParser.element( name, { + 'style': 'text-align:center' + } ) ); + } + + // If left/right, add float style to the downcasted element. + else if ( align in { left:1,right:1 } ) + styles[ 'float' ] = align; + + // Update element styles. + if ( !CKEDITOR.tools.isEmpty( styles ) ) + attrs.style = CKEDITOR.tools.writeCssText( styles ); + } + + return el; + } + + function isCenterWrapper( el ) { + // Wrapper must be either
or

. + if ( !( el.name in { div:1,p:1 } ) ) + return false; + + var children = el.children; + + // Centering wrapper can have only one child. + if ( children.length !== 1 ) + return false; + + var styles = CKEDITOR.tools.parseCssText( el.attributes.style || '' ); + + // Centering wrapper got to be... centering. + if ( !styles[ 'text-align' ] || styles[ 'text-align' ] != 'center' ) + return false; + + var child = children[ 0 ], + childName = child.name; + + // The only child of centering wrapper can be

with + // class="caption" or plain . + if ( childName == 'img' || ( childName == 'figure' && child.hasClass( 'caption' ) ) ) + return true; + + return false; + } + + // Sets width and height of the widget image according to + // current widget data. + // + // @param {CKEDITOR.plugins.widget} widget + function setDimensions( widget ) { + var dimensions = CKEDITOR.tools.extend( {}, widget.data, false, { width:1,height:1 } ), + image = widget.parts.image; + + for ( var d in dimensions ) { + if ( dimensions[ d ] ) + image.setAttribute( d, dimensions[ d ] ); + else + image.removeAttribute( d ); + } + } + + // Defines all features related to drag-driven image resizing. + // @param {CKEDITOR.plugins.widget} widget + function setupResizer( widget ) { + var editor = widget.editor, + doc = editor.document, + resizer = doc.createElement( 'span' ); + + resizer.addClass( 'cke_image2_resizer' ); + resizer.setAttribute( 'title', editor.lang.image2.resizer ); + resizer.append( new CKEDITOR.dom.text( '\u200b', doc ) ); + + // Inline widgets don't need a resizer wrapper as an image spans the entire widget. + if ( !widget.inline ) { + var oldResizeWrapper = widget.element.getFirst(), + resizeWrapper = doc.createElement( 'span' ); + + resizeWrapper.addClass( 'cke_image2_resizer_wrapper' ); + resizeWrapper.append( widget.parts.image ); + resizeWrapper.append( resizer ); + widget.element.append( resizeWrapper, true ); + + // Remove the old wrapper which could came from e.g. pasted HTML + // and which could be corrupted (e.g. resizer span has been lost). + if ( oldResizeWrapper.is( 'span' ) ) + oldResizeWrapper.remove(); + } else + widget.wrapper.append( resizer ); + + // Calculate values of size variables and mouse offsets. + // Start observing mousemove. + resizer.on( 'mousedown', function( evt ) { + var image = widget.parts.image, + + // "factor" can be either 1 or -1. I.e.: For right-aligned images, we need to + // subtract the difference to get proper width, etc. Without "factor", + // resizer starts working the opposite way. + factor = widget.data.align == 'right' ? -1 : 1, + + // The x-coordinate of the mouse relative to the screen + // when button gets pressed. + startX = evt.data.$.screenX, + startY = evt.data.$.screenY, + + // The initial dimensions and aspect ratio of the image. + startWidth = image.$.clientWidth, + startHeight = image.$.clientHeight, + ratio = startWidth / startHeight, + + moveListeners = [], + + nativeEvt, newWidth, newHeight, updateData, + moveDiffX, moveDiffY, moveRatio; + + // Save the undo snapshot first: before resizing. + editor.fire( 'saveSnapshot' ); + + // Mousemove listeners are removed on mouseup. + attachToDocuments( 'mousemove', onMouseMove, moveListeners ); + + // Clean up the mousemove listener. Update widget data if valid. + attachToDocuments( 'mouseup', onMouseUp ); + + // Attaches an event to a global document if inline editor. + // Additionally, if framed, also attaches the same event to iframe's document. + function attachToDocuments( name, callback, collection ) { + var globalDoc = CKEDITOR.document, + listeners = []; + + if ( !doc.equals( globalDoc ) ) + listeners.push( globalDoc.on( name, callback ) ); + + listeners.push( doc.on( name, callback ) ); + + if ( collection ) { + for ( var i = listeners.length; i--; ) + collection.push( listeners.pop() ); + } + } + + // Calculate with first, and then adjust height, preserving ratio. + function adjustToX() { + newWidth = startWidth + factor * moveDiffX; + newHeight = 0 | newWidth / ratio; + } + + // Calculate height first, and then adjust width, preserving ratio. + function adjustToY() { + newHeight = startHeight - moveDiffY; + newWidth = 0 | newHeight * ratio; + } + + // This is how variables refer to the geometry. + // Note: x corresponds to moveOffset, this is the position of mouse + // Note: o corresponds to [startX, startY]. + // + // +--------------+--------------+ + // | | | + // | I | II | + // | | | + // +------------- o -------------+ _ _ _ + // | | | ^ + // | VI | III | | moveDiffY + // | | x _ _ _ _ _ v + // +--------------+---------|----+ + // | | + // <-------> + // moveDiffX + function onMouseMove( evt ) { + nativeEvt = evt.data.$; + + // This is how far the mouse is from the point the button was pressed. + moveDiffX = nativeEvt.screenX - startX; + moveDiffY = startY - nativeEvt.screenY; + + // This is the aspect ratio of the move difference. + moveRatio = Math.abs( moveDiffX / moveDiffY ); + + // Left, center or none-aligned widget. + if ( factor == 1 ) { + if ( moveDiffX <= 0 ) { + // Case: IV. + if ( moveDiffY <= 0 ) + adjustToX(); + + // Case: I. + else { + if ( moveRatio >= ratio ) + adjustToX(); + else + adjustToY(); + } + } else { + // Case: III. + if ( moveDiffY <= 0 ) { + if ( moveRatio >= ratio ) + adjustToY(); + else + adjustToX(); + } + + // Case: II. + else + adjustToY(); + } + } + + // Right-aligned widget. It mirrors behaviours, so I becomes II, + // IV becomes III and vice-versa. + else { + if ( moveDiffX <= 0 ) { + // Case: IV. + if ( moveDiffY <= 0 ) { + if ( moveRatio >= ratio ) + adjustToY(); + else + adjustToX(); + } + + // Case: I. + else + adjustToY(); + } else { + // Case: III. + if ( moveDiffY <= 0 ) + adjustToX(); + + // Case: II. + else { + if ( moveRatio >= ratio ) + adjustToX(); + else + adjustToY(); + } + } + } + + // Don't update attributes if less than 10. + // This is to prevent images to visually disappear. + if ( newWidth >= 15 && newHeight >= 15 ) { + image.setAttributes( { width: newWidth, height: newHeight } ); + updateData = true; + } else + updateData = false; + } + + function onMouseUp( evt ) { + var l; + + while ( ( l = moveListeners.pop() ) ) + l.removeListener(); + + if ( updateData ) { + widget.setData( { width: newWidth, height: newHeight } ); + + // Save another undo snapshot: after resizing. + editor.fire( 'saveSnapshot' ); + } + + // Don't update data twice or more. + updateData = false; + } + } ); + + // Change the position of the widget resizer when data changes. + widget.on( 'data', function() { + resizer[ widget.data.align == 'right' ? 'addClass' : 'removeClass' ]( 'cke_image2_resizer_left' ); + } ); + } + + // Integrates widget alignment setting with justify + // plugin's commands (execution and refreshment). + // @param {CKEDITOR.editor} editor + // @param {String} value 'left', 'right', 'center' or 'block' + function alignCommandIntegrator( editor ) { + var execCallbacks = []; + + return function( value ) { + var command = editor.getCommand( 'justify' + value ); + + // Most likely, the justify plugin isn't loaded. + if ( !command ) + return; + + // This command will be manually refreshed along with + // other commands after exec. + execCallbacks.push( function() { + command.refresh( editor, editor.elementPath() ); + } ); + + if ( value in { right:1,left:1,center:1 } ) { + command.on( 'exec', function( evt ) { + var widget = getFocusedWidget( editor ); + + if ( widget ) { + widget.setData( 'align', value ); + + // Once the widget changed its align, all the align commands + // must be refreshed: the event is to be cancelled. + for ( var i = execCallbacks.length; i--; ) + execCallbacks[ i ](); + + evt.cancel(); + } + } ); + } + + command.on( 'refresh', function( evt ) { + var widget = getFocusedWidget( editor ), + allowed = { right:1,left:1,center:1 }; + + if ( !widget ) + return; + + this.setState( + ( widget.data.align == value ) ? + CKEDITOR.TRISTATE_ON + : + ( value in allowed ) ? + CKEDITOR.TRISTATE_OFF + : + CKEDITOR.TRISTATE_DISABLED ); + + evt.cancel(); + } ); + }; + } + + // Returns the focused widget, if of the type specific for this plugin. + // If no widget is focused, `null` is returned. + // @param {CKEDITOR.editor} + // @returns {CKEDITOR.plugins.widget} + function getFocusedWidget( editor ) { + var widget = editor.widgets.focused; + + if ( widget && widget.name in { image2inline:1,image2block:1 } ) + return widget; + + return null; + } +})(); \ No newline at end of file diff --git a/addons/website/static/lib/ckeditor/plugins/indent/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/indent/lang/en.js similarity index 81% rename from addons/website/static/lib/ckeditor/plugins/indent/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/indent/lang/en.js index 2a308e25d7c..0308f2ba354 100644 --- a/addons/website/static/lib/ckeditor/plugins/indent/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/indent/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'indent', 'en-gb', { +CKEDITOR.plugins.setLang( 'indent', 'en', { indent: 'Increase Indent', outdent: 'Decrease Indent' }); diff --git a/addons/website/static/lib/ckeditor/plugins/justify/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/justify/lang/en.js similarity index 75% rename from addons/website/static/lib/ckeditor/plugins/justify/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/justify/lang/en.js index 86650257c0c..90588e791d0 100644 --- a/addons/website/static/lib/ckeditor/plugins/justify/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/justify/lang/en.js @@ -2,9 +2,9 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'justify', 'en-gb', { +CKEDITOR.plugins.setLang( 'justify', 'en', { block: 'Justify', - center: 'Centre', + center: 'Center', left: 'Align Left', right: 'Align Right' }); diff --git a/addons/website/static/lib/ckeditor/plugins/link/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/link/lang/en.js similarity index 95% rename from addons/website/static/lib/ckeditor/plugins/link/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/link/lang/en.js index 63b8d34a067..efb7882c7b9 100644 --- a/addons/website/static/lib/ckeditor/plugins/link/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/link/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'link', 'en-gb', { +CKEDITOR.plugins.setLang( 'link', 'en', { acccessKey: 'Access Key', advanced: 'Advanced', advisoryContentType: 'Advisory Content Type', @@ -45,7 +45,7 @@ CKEDITOR.plugins.setLang( 'link', 'en-gb', { popupStatusBar: 'Status Bar', popupToolbar: 'Toolbar', popupTop: 'Top Position', - rel: 'Relationship', // MISSING + rel: 'Relationship', selectAnchor: 'Select an Anchor', styles: 'Style', tabIndex: 'Tab Index', diff --git a/addons/website/static/lib/ckeditor/plugins/list/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/list/lang/en.js similarity index 84% rename from addons/website/static/lib/ckeditor/plugins/list/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/list/lang/en.js index a89fbdbda5f..fdb0e90892e 100644 --- a/addons/website/static/lib/ckeditor/plugins/list/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/list/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'list', 'en-gb', { +CKEDITOR.plugins.setLang( 'list', 'en', { bulletedlist: 'Insert/Remove Bulleted List', numberedlist: 'Insert/Remove Numbered List' }); diff --git a/addons/website/static/lib/ckeditor/plugins/liststyle/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/liststyle/lang/en.js similarity index 94% rename from addons/website/static/lib/ckeditor/plugins/liststyle/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/liststyle/lang/en.js index 143983724ed..8592adda105 100644 --- a/addons/website/static/lib/ckeditor/plugins/liststyle/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/liststyle/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'liststyle', 'en-gb', { +CKEDITOR.plugins.setLang( 'liststyle', 'en', { armenian: 'Armenian numbering', bulletedTitle: 'Bulleted List Properties', circle: 'Circle', diff --git a/addons/website/static/lib/ckeditor/plugins/magicline/lang/en.js b/addons/website/static/lib/ckeditor/plugins/magicline/lang/en.js new file mode 100644 index 00000000000..8111a671569 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/magicline/lang/en.js @@ -0,0 +1,8 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'magicline', 'en', { + title: 'Insert paragraph here' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/maximize/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/maximize/lang/en-gb.js deleted file mode 100644 index 3fd62783a08..00000000000 --- a/addons/website/static/lib/ckeditor/plugins/maximize/lang/en-gb.js +++ /dev/null @@ -1,8 +0,0 @@ -/* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang( 'maximize', 'en-gb', { - maximize: 'Maximise', - minimize: 'Minimise' -}); diff --git a/addons/website/static/lib/ckeditor/plugins/maximize/lang/en.js b/addons/website/static/lib/ckeditor/plugins/maximize/lang/en.js new file mode 100644 index 00000000000..da43c27affd --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/maximize/lang/en.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'maximize', 'en', { + maximize: 'Maximize', + minimize: 'Minimize' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/newpage/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/newpage/lang/en.js similarity index 78% rename from addons/website/static/lib/ckeditor/plugins/newpage/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/newpage/lang/en.js index a3b42450117..28cd1633f83 100644 --- a/addons/website/static/lib/ckeditor/plugins/newpage/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/newpage/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'newpage', 'en-gb', { +CKEDITOR.plugins.setLang( 'newpage', 'en', { toolbar: 'New Page' }); diff --git a/addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en.js similarity index 70% rename from addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en.js index 9802060bcd1..5e1c0512f43 100644 --- a/addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/pagebreak/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'pagebreak', 'en-gb', { - alt: 'Page Break', // MISSING +CKEDITOR.plugins.setLang( 'pagebreak', 'en', { + alt: 'Page Break', toolbar: 'Insert Page Break for Printing' }); diff --git a/addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en.js similarity index 88% rename from addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en.js index d4f71777bc8..c7bcc72f1de 100644 --- a/addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/pastefromword/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'pastefromword', 'en-gb', { +CKEDITOR.plugins.setLang( 'pastefromword', 'en', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', error: 'It was not possible to clean up the pasted data due to an internal error', title: 'Paste from Word', diff --git a/addons/website/static/lib/ckeditor/plugins/pastetext/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/pastetext/lang/en.js similarity index 80% rename from addons/website/static/lib/ckeditor/plugins/pastetext/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/pastetext/lang/en.js index aa90a1c4fe4..131594e5fa8 100644 --- a/addons/website/static/lib/ckeditor/plugins/pastetext/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/pastetext/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'pastetext', 'en-gb', { +CKEDITOR.plugins.setLang( 'pastetext', 'en', { button: 'Paste as plain text', title: 'Paste as Plain Text' }); diff --git a/addons/website/static/lib/ckeditor/plugins/placeholder/lang/en.js b/addons/website/static/lib/ckeditor/plugins/placeholder/lang/en.js new file mode 100644 index 00000000000..61b8185c304 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/placeholder/lang/en.js @@ -0,0 +1,12 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'placeholder', 'en', { + title: 'Placeholder Properties', + toolbar: 'Create Placeholder', + text: 'Placeholder Text', + edit: 'Edit Placeholder', + textMissing: 'The placeholder must contain text.' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/preview/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/preview/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/preview/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/preview/lang/en.js index fe010b9b945..f06bb819cbc 100644 --- a/addons/website/static/lib/ckeditor/plugins/preview/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/preview/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'preview', 'en-gb', { +CKEDITOR.plugins.setLang( 'preview', 'en', { preview: 'Preview' }); diff --git a/addons/website/static/lib/ckeditor/plugins/print/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/print/lang/en.js similarity index 78% rename from addons/website/static/lib/ckeditor/plugins/print/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/print/lang/en.js index 518186bf953..dee9b3d7025 100644 --- a/addons/website/static/lib/ckeditor/plugins/print/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/print/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'print', 'en-gb', { +CKEDITOR.plugins.setLang( 'print', 'en', { toolbar: 'Print' }); diff --git a/addons/website/static/lib/ckeditor/plugins/removeformat/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/removeformat/lang/en.js similarity index 76% rename from addons/website/static/lib/ckeditor/plugins/removeformat/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/removeformat/lang/en.js index 06acaeb3c03..29fa4dfd921 100644 --- a/addons/website/static/lib/ckeditor/plugins/removeformat/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/removeformat/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'removeformat', 'en-gb', { +CKEDITOR.plugins.setLang( 'removeformat', 'en', { toolbar: 'Remove Format' }); diff --git a/addons/website/static/lib/ckeditor/plugins/save/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/save/lang/en.js similarity index 78% rename from addons/website/static/lib/ckeditor/plugins/save/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/save/lang/en.js index 54749e9aa57..8eb35206c1c 100644 --- a/addons/website/static/lib/ckeditor/plugins/save/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/save/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'save', 'en-gb', { +CKEDITOR.plugins.setLang( 'save', 'en', { toolbar: 'Save' }); diff --git a/addons/website/static/lib/ckeditor/plugins/selectall/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/selectall/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/selectall/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/selectall/lang/en.js index 2a5faf44fbc..804ef843c5a 100644 --- a/addons/website/static/lib/ckeditor/plugins/selectall/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/selectall/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'selectall', 'en-gb', { +CKEDITOR.plugins.setLang( 'selectall', 'en', { toolbar: 'Select All' }); diff --git a/addons/website/static/lib/ckeditor/plugins/showblocks/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/showblocks/lang/en.js similarity index 77% rename from addons/website/static/lib/ckeditor/plugins/showblocks/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/showblocks/lang/en.js index 29dc560212d..45d3f8988de 100644 --- a/addons/website/static/lib/ckeditor/plugins/showblocks/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/showblocks/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'showblocks', 'en-gb', { +CKEDITOR.plugins.setLang( 'showblocks', 'en', { toolbar: 'Show Blocks' }); diff --git a/addons/website/static/lib/ckeditor/plugins/smiley/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/smiley/lang/en.js similarity index 82% rename from addons/website/static/lib/ckeditor/plugins/smiley/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/smiley/lang/en.js index c2c451c590b..1f4b6489c20 100644 --- a/addons/website/static/lib/ckeditor/plugins/smiley/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/smiley/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'smiley', 'en-gb', { +CKEDITOR.plugins.setLang( 'smiley', 'en', { options: 'Smiley Options', title: 'Insert a Smiley', toolbar: 'Smiley' diff --git a/addons/website/static/lib/ckeditor/plugins/smiley/plugin.js b/addons/website/static/lib/ckeditor/plugins/smiley/plugin.js index 7a369c88f35..198523c0b40 100644 --- a/addons/website/static/lib/ckeditor/plugins/smiley/plugin.js +++ b/addons/website/static/lib/ckeditor/plugins/smiley/plugin.js @@ -40,20 +40,20 @@ CKEDITOR.plugins.add( 'smiley', { * * // This is actually the default value. * config.smiley_images = [ - * 'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tongue_smile.gif', - * 'embarrassed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif', - * 'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif', - * 'broken_heart.gif','kiss.gif','envelope.gif' + * 'regular_smile.png','sad_smile.png','wink_smile.png','teeth_smile.png','confused_smile.png','tongue_smile.png', + * 'embarrassed_smile.png','omg_smile.png','whatchutalkingabout_smile.png','angry_smile.png','angel_smile.png','shades_smile.png', + * 'devil_smile.png','cry_smile.png','lightbulb.png','thumbs_down.png','thumbs_up.png','heart.png', + * 'broken_heart.png','kiss.png','envelope.png' * ]; * * @cfg * @member CKEDITOR.config */ CKEDITOR.config.smiley_images = [ - 'regular_smile.gif', 'sad_smile.gif', 'wink_smile.gif', 'teeth_smile.gif', 'confused_smile.gif', 'tongue_smile.gif', - 'embarrassed_smile.gif', 'omg_smile.gif', 'whatchutalkingabout_smile.gif', 'angry_smile.gif', 'angel_smile.gif', 'shades_smile.gif', - 'devil_smile.gif', 'cry_smile.gif', 'lightbulb.gif', 'thumbs_down.gif', 'thumbs_up.gif', 'heart.gif', - 'broken_heart.gif', 'kiss.gif', 'envelope.gif' ]; + 'regular_smile.png', 'sad_smile.png', 'wink_smile.png', 'teeth_smile.png', 'confused_smile.png', 'tongue_smile.png', + 'embarrassed_smile.png', 'omg_smile.png', 'whatchutalkingabout_smile.png', 'angry_smile.png', 'angel_smile.png', 'shades_smile.png', + 'devil_smile.png', 'cry_smile.png', 'lightbulb.png', 'thumbs_down.png', 'thumbs_up.png', 'heart.png', + 'broken_heart.png', 'kiss.png', 'envelope.png' ]; /** * The description to be used for each of the smileys defined in the diff --git a/addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en.js similarity index 76% rename from addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en.js index 07859d2d669..17bdd00641c 100644 --- a/addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/sourcearea/lang/en.js @@ -2,6 +2,6 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'sourcearea', 'en-gb', { +CKEDITOR.plugins.setLang( 'sourcearea', 'en', { toolbar: 'Source' }); diff --git a/addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en.js similarity index 78% rename from addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en.js index 42e6b281366..80aff46d753 100644 --- a/addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/sourcedialog/lang/en.js @@ -3,7 +3,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'sourcedialog', 'en-gb', { +CKEDITOR.plugins.setLang( 'sourcedialog', 'en', { toolbar: 'Source', title: 'Source' }); diff --git a/addons/website/static/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js b/addons/website/static/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js new file mode 100644 index 00000000000..b3dca6c7643 --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js @@ -0,0 +1,125 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'specialchar', 'en', { + euro: 'Euro sign', + lsquo: 'Left single quotation mark', + rsquo: 'Right single quotation mark', + ldquo: 'Left double quotation mark', + rdquo: 'Right double quotation mark', + ndash: 'En dash', + mdash: 'Em dash', + iexcl: 'Inverted exclamation mark', + cent: 'Cent sign', + pound: 'Pound sign', + curren: 'Currency sign', + yen: 'Yen sign', + brvbar: 'Broken bar', + sect: 'Section sign', + uml: 'Diaeresis', + copy: 'Copyright sign', + ordf: 'Feminine ordinal indicator', + laquo: 'Left-pointing double angle quotation mark', + not: 'Not sign', + reg: 'Registered sign', + macr: 'Macron', + deg: 'Degree sign', + sup2: 'Superscript two', + sup3: 'Superscript three', + acute: 'Acute accent', + micro: 'Micro sign', + para: 'Pilcrow sign', + middot: 'Middle dot', + cedil: 'Cedilla', + sup1: 'Superscript one', + ordm: 'Masculine ordinal indicator', + raquo: 'Right-pointing double angle quotation mark', + frac14: 'Vulgar fraction one quarter', + frac12: 'Vulgar fraction one half', + frac34: 'Vulgar fraction three quarters', + iquest: 'Inverted question mark', + Agrave: 'Latin capital letter A with grave accent', + Aacute: 'Latin capital letter A with acute accent', + Acirc: 'Latin capital letter A with circumflex', + Atilde: 'Latin capital letter A with tilde', + Auml: 'Latin capital letter A with diaeresis', + Aring: 'Latin capital letter A with ring above', + AElig: 'Latin Capital letter Æ', + Ccedil: 'Latin capital letter C with cedilla', + Egrave: 'Latin capital letter E with grave accent', + Eacute: 'Latin capital letter E with acute accent', + Ecirc: 'Latin capital letter E with circumflex', + Euml: 'Latin capital letter E with diaeresis', + Igrave: 'Latin capital letter I with grave accent', + Iacute: 'Latin capital letter I with acute accent', + Icirc: 'Latin capital letter I with circumflex', + Iuml: 'Latin capital letter I with diaeresis', + ETH: 'Latin capital letter Eth', + Ntilde: 'Latin capital letter N with tilde', + Ograve: 'Latin capital letter O with grave accent', + Oacute: 'Latin capital letter O with acute accent', + Ocirc: 'Latin capital letter O with circumflex', + Otilde: 'Latin capital letter O with tilde', + Ouml: 'Latin capital letter O with diaeresis', + times: 'Multiplication sign', + Oslash: 'Latin capital letter O with stroke', + Ugrave: 'Latin capital letter U with grave accent', + Uacute: 'Latin capital letter U with acute accent', + Ucirc: 'Latin capital letter U with circumflex', + Uuml: 'Latin capital letter U with diaeresis', + Yacute: 'Latin capital letter Y with acute accent', + THORN: 'Latin capital letter Thorn', + szlig: 'Latin small letter sharp s', + agrave: 'Latin small letter a with grave accent', + aacute: 'Latin small letter a with acute accent', + acirc: 'Latin small letter a with circumflex', + atilde: 'Latin small letter a with tilde', + auml: 'Latin small letter a with diaeresis', + aring: 'Latin small letter a with ring above', + aelig: 'Latin small letter æ', + ccedil: 'Latin small letter c with cedilla', + egrave: 'Latin small letter e with grave accent', + eacute: 'Latin small letter e with acute accent', + ecirc: 'Latin small letter e with circumflex', + euml: 'Latin small letter e with diaeresis', + igrave: 'Latin small letter i with grave accent', + iacute: 'Latin small letter i with acute accent', + icirc: 'Latin small letter i with circumflex', + iuml: 'Latin small letter i with diaeresis', + eth: 'Latin small letter eth', + ntilde: 'Latin small letter n with tilde', + ograve: 'Latin small letter o with grave accent', + oacute: 'Latin small letter o with acute accent', + ocirc: 'Latin small letter o with circumflex', + otilde: 'Latin small letter o with tilde', + ouml: 'Latin small letter o with diaeresis', + divide: 'Division sign', + oslash: 'Latin small letter o with stroke', + ugrave: 'Latin small letter u with grave accent', + uacute: 'Latin small letter u with acute accent', + ucirc: 'Latin small letter u with circumflex', + uuml: 'Latin small letter u with diaeresis', + yacute: 'Latin small letter y with acute accent', + thorn: 'Latin small letter thorn', + yuml: 'Latin small letter y with diaeresis', + OElig: 'Latin capital ligature OE', + oelig: 'Latin small ligature oe', + '372': 'Latin capital letter W with circumflex', + '374': 'Latin capital letter Y with circumflex', + '373': 'Latin small letter w with circumflex', + '375': 'Latin small letter y with circumflex', + sbquo: 'Single low-9 quotation mark', + '8219': 'Single high-reversed-9 quotation mark', + bdquo: 'Double low-9 quotation mark', + hellip: 'Horizontal ellipsis', + trade: 'Trade mark sign', + '9658': 'Black right-pointing pointer', + bull: 'Bullet', + rarr: 'Rightwards arrow', + rArr: 'Rightwards double arrow', + hArr: 'Left right double arrow', + diams: 'Black diamond suit', + asymp: 'Almost equal to' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/specialchar/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/specialchar/lang/en.js similarity index 83% rename from addons/website/static/lib/ckeditor/plugins/specialchar/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/specialchar/lang/en.js index ddd75638d2f..263ccbedfb8 100644 --- a/addons/website/static/lib/ckeditor/plugins/specialchar/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/specialchar/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'specialchar', 'en-gb', { +CKEDITOR.plugins.setLang( 'specialchar', 'en', { options: 'Special Character Options', title: 'Select Special Character', toolbar: 'Insert Special Character' diff --git a/addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en.js similarity index 84% rename from addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en.js index dea342b1dc4..c9f9f5cd397 100644 --- a/addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/stylescombo/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'stylescombo', 'en-gb', { +CKEDITOR.plugins.setLang( 'stylescombo', 'en', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', diff --git a/addons/website/static/lib/ckeditor/plugins/table/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/table/lang/en.js similarity index 92% rename from addons/website/static/lib/ckeditor/plugins/table/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/table/lang/en.js index 3d1722dc913..bc3e38c5418 100644 --- a/addons/website/static/lib/ckeditor/plugins/table/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/table/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'table', 'en-gb', { +CKEDITOR.plugins.setLang( 'table', 'en', { border: 'Border size', caption: 'Caption', cell: { @@ -51,8 +51,8 @@ CKEDITOR.plugins.setLang( 'table', 'en-gb', { headersNone: 'None', headersRow: 'First Row', invalidBorder: 'Border size must be a number.', - invalidCellPadding: 'Cell padding must be a number.', - invalidCellSpacing: 'Cell spacing must be a number.', + invalidCellPadding: 'Cell padding must be a positive number.', + invalidCellSpacing: 'Cell spacing must be a positive number.', invalidCols: 'Number of columns must be a number greater than 0.', invalidHeight: 'Table height must be a number.', invalidRows: 'Number of rows must be a number greater than 0.', diff --git a/addons/website/static/lib/ckeditor/plugins/templates/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/templates/lang/en.js similarity index 88% rename from addons/website/static/lib/ckeditor/plugins/templates/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/templates/lang/en.js index f8660dd5585..612707456e3 100644 --- a/addons/website/static/lib/ckeditor/plugins/templates/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/templates/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'templates', 'en-gb', { +CKEDITOR.plugins.setLang( 'templates', 'en', { button: 'Templates', emptyListMsg: '(No templates defined)', insertOption: 'Replace actual contents', diff --git a/addons/website/static/lib/ckeditor/plugins/toolbar/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/toolbar/lang/en.js similarity index 84% rename from addons/website/static/lib/ckeditor/plugins/toolbar/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/toolbar/lang/en.js index eeeb7ed981f..cb441b18cd0 100644 --- a/addons/website/static/lib/ckeditor/plugins/toolbar/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/toolbar/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'toolbar', 'en-gb', { +CKEDITOR.plugins.setLang( 'toolbar', 'en', { toolbarCollapse: 'Collapse Toolbar', toolbarExpand: 'Expand Toolbar', toolbarGroups: { @@ -18,5 +18,5 @@ CKEDITOR.plugins.setLang( 'toolbar', 'en-gb', { colors: 'Colors', tools: 'Tools' }, - toolbars: 'Editor toolbars' // MISSING + toolbars: 'Editor toolbars' }); diff --git a/addons/website/static/lib/ckeditor/plugins/uicolor/lang/en.js b/addons/website/static/lib/ckeditor/plugins/uicolor/lang/en.js new file mode 100644 index 00000000000..edbbc5ae54e --- /dev/null +++ b/addons/website/static/lib/ckeditor/plugins/uicolor/lang/en.js @@ -0,0 +1,11 @@ +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.setLang( 'uicolor', 'en', { + title: 'UI Color Picker', + preview: 'Live preview', + config: 'Paste this string into your config.js file', + predefined: 'Predefined color sets' +}); diff --git a/addons/website/static/lib/ckeditor/plugins/undo/lang/en-gb.js b/addons/website/static/lib/ckeditor/plugins/undo/lang/en.js similarity index 79% rename from addons/website/static/lib/ckeditor/plugins/undo/lang/en-gb.js rename to addons/website/static/lib/ckeditor/plugins/undo/lang/en.js index 31ad7adf751..68a58007d5d 100644 --- a/addons/website/static/lib/ckeditor/plugins/undo/lang/en-gb.js +++ b/addons/website/static/lib/ckeditor/plugins/undo/lang/en.js @@ -2,7 +2,7 @@ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -CKEDITOR.plugins.setLang( 'undo', 'en-gb', { +CKEDITOR.plugins.setLang( 'undo', 'en', { redo: 'Redo', undo: 'Undo' }); diff --git a/addons/website/static/lib/ckeditor/plugins/widget/plugin.js b/addons/website/static/lib/ckeditor/plugins/widget/plugin.js index 0fa79feaf6d..8763f663783 100644 --- a/addons/website/static/lib/ckeditor/plugins/widget/plugin.js +++ b/addons/website/static/lib/ckeditor/plugins/widget/plugin.js @@ -614,6 +614,9 @@ if ( !that.fire( 'dialog', dialog ) ) return; + // Make widget accessible beyond setup and commit. + dialog._.widget = that; + showListener = dialog.on( 'show', function() { dialog.setupContent( that ); } ); @@ -826,7 +829,7 @@ NestedEditable.prototype = CKEDITOR.tools.extend( CKEDITOR.tools.prototypedCopy( CKEDITOR.dom.element.prototype ), { setData: function( data ) { - var data = this.editor.dataProcessor.toHtml( data, { + data = this.editor.dataProcessor.toHtml( data, { context: this.getName(), filter: this.filter, enterMode: this.filter ? this.filter.getAllowedEnterMode() : this.editor.enterMode diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index ebcfb98635d..ae66130f921 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -331,6 +331,8 @@ 'tab', 'table', 'templates', 'toolbar', 'undo', 'wysiwygarea' ]; return { + // FIXME + language: 'en', // Disable auto-generated titles // FIXME: accessibility, need to generate user-sensible title, used for @title and @aria-label title: false,

+ CKEditor Samples » Widget image2 +