]> git.immae.eu Git - perso/Immae/Projets/packagist/ludivine-ckeditor-component.git/blobdiff - sources/plugins/widget/plugin.js
Update to 4.7.3
[perso/Immae/Projets/packagist/ludivine-ckeditor-component.git] / sources / plugins / widget / plugin.js
index 37374abe826efed81319863a9b5b31d3d246d33b..2708e090856c97b5254039385330a0112b67603d 100644 (file)
@@ -14,7 +14,7 @@
 \r
        CKEDITOR.plugins.add( 'widget', {\r
                // jscs:disable maximumLineLength\r
-               lang: 'af,ar,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-gb,eo,es,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%\r
+               lang: 'af,ar,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-gb,eo,es,es-mx,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%\r
                // jscs:enable maximumLineLength\r
                requires: 'lineutils,clipboard,widgetselection',\r
                onLoad: function() {\r
                                        'width:' + DRAG_HANDLER_SIZE + 'px;' +\r
                                        'height:0;' +\r
                                        // Initially drag handler should not be visible, until its position will be\r
-                                       // calculated (#11177).\r
+                                       // calculated (http://dev.ckeditor.com/ticket/11177).\r
                                        // We need to hide unpositined handlers, so they don't extend\r
-                                       // widget's outline far to the left (#12024).\r
+                                       // widget's outline far to the left (http://dev.ckeditor.com/ticket/12024).\r
                                        'display:none;' +\r
                                        'opacity:0.75;' +\r
                                        'transition:height 0s 0.2s;' + // Delay hiding drag handler.\r
-                                       // Prevent drag handler from being misplaced (#11198).\r
+                                       // Prevent drag handler from being misplaced (http://dev.ckeditor.com/ticket/11198).\r
                                        'line-height:0' +\r
                                '}' +\r
                                '.cke_widget_wrapper:hover>.cke_widget_drag_handler_container{' +\r
                 * @returns {Boolean} Whether an editable was successfully initialized.\r
                 */\r
                initEditable: function( editableName, definition ) {\r
-                       // Don't fetch just first element which matched selector but look for a correct one. (#13334)\r
+                       // Don't fetch just first element which matched selector but look for a correct one. (http://dev.ckeditor.com/ticket/13334)\r
                        var editable = this._findOneNotNested( definition.selector );\r
 \r
                        if ( editable && editable.is( CKEDITOR.dtd.$editable ) ) {\r
 \r
                /**\r
                 * Looks inside wrapper element to find a node that\r
-                * matches given selector and is not nested in other widget. (#13334)\r
+                * matches given selector and is not nested in other widget. (http://dev.ckeditor.com/ticket/13334)\r
                 *\r
                 * @since 4.5\r
                 * @private\r
                                !isDirty && this.editor.resetDirty();\r
                        }\r
 \r
-                       // Always focus editor (not only when focusManger.hasFocus is false) (because of #10483).\r
+                       // Always focus editor (not only when focusManger.hasFocus is false) (because of http://dev.ckeditor.com/ticket/10483).\r
                        this.editor.focus();\r
                },\r
 \r
                        if ( oldPos && newPos.x == oldPos.x && newPos.y == oldPos.y )\r
                                return;\r
 \r
-                       // We need to make sure that dirty state is not changed (#11487).\r
+                       // We need to make sure that dirty state is not changed (http://dev.ckeditor.com/ticket/11487).\r
                        var initialDirty = editor.checkDirty();\r
 \r
                        editor.fire( 'lockSnapshot' );\r
 \r
                // Remove widgets which have no corresponding elements in DOM.\r
                for ( i in instances ) {\r
-                       // #13410 Remove widgets that are ready. This prevents from destroying widgets that are during loading process.\r
+                       // http://dev.ckeditor.com/ticket/13410 Remove widgets that are ready. This prevents from destroying widgets that are during loading process.\r
                        if ( instances[ i ].isReady() && !editable.contains( instances[ i ].wrapper ) )\r
                                this.destroy( instances[ i ], true );\r
                }\r
 \r
                                // Check if:\r
                                // * there's no instance for this widget\r
-                               // * wrapper is not inside some temporary element like copybin (#11088)\r
+                               // * wrapper is not inside some temporary element like copybin (http://dev.ckeditor.com/ticket/11088)\r
                                // * it was a nested widget's wrapper which has been detached from DOM,\r
                                // when nested editable has been initialized (it overwrites its innerHTML\r
                                // and initializes nested widgets).\r
        // @returns {CKEDITOR.filter} Filter instance or `null` if rules are not defined.\r
        // @context CKEDITOR.plugins.widget.repository\r
        function createEditableFilter( widgetName, editableName, editableDefinition ) {\r
-               if ( !editableDefinition.allowedContent )\r
+               if ( !editableDefinition.allowedContent && !editableDefinition.disallowedContent )\r
                        return null;\r
 \r
                var editables = this._.filters[ widgetName ];\r
 \r
                var filter = editables[ editableName ];\r
 \r
-               if ( !filter )\r
-                       editables[ editableName ] = filter = new CKEDITOR.filter( editableDefinition.allowedContent );\r
+               if ( !filter ) {\r
+                       filter = editableDefinition.allowedContent ? new CKEDITOR.filter( editableDefinition.allowedContent ) : this.editor.filter.clone();\r
+\r
+                       editables[ editableName ] = filter;\r
+\r
+                       if ( editableDefinition.disallowedContent ) {\r
+                               filter.disallow( editableDefinition.disallowedContent );\r
+                       }\r
+               }\r
 \r
                return filter;\r
        }\r
                                        return false;\r
                                }\r
                                else if ( ( upcastsLength = upcasts.length ) ) {\r
-                                       // Ignore elements with data-cke-widget-upcasted to avoid multiple upcasts (#11533).\r
+                                       // Ignore elements with data-cke-widget-upcasted to avoid multiple upcasts (http://dev.ckeditor.com/ticket/11533).\r
                                        // Do not iterate over descendants.\r
                                        if ( element.attributes[ 'data-cke-widget-upcasted' ] )\r
                                                return false;\r
                        '(?:</(?:div|span)>)?' +\r
                '(?:</(?:div|span)>)?' +\r
                '$',\r
-               // IE8 prefers uppercase when browsers stick to lowercase HTML (#13460).\r
+               // IE8 prefers uppercase when browsers stick to lowercase HTML (http://dev.ckeditor.com/ticket/13460).\r
                'i'\r
        );\r
 \r
                                // IE needs focus.\r
                                editor.focus();\r
 \r
-                               // and widget need to be focused on drag start (#12172#comment:10).\r
+                               // and widget need to be focused on drag start (http://dev.ckeditor.com/ticket/12172#comment:10).\r
                                widget.focus();\r
                        }\r
                } );\r
                                dragRange = editor.createRange(),\r
                                sourceWidget;\r
 \r
-                       // Disable cross-editor drag & drop for widgets - #13599.\r
+                       // Disable cross-editor drag & drop for widgets - http://dev.ckeditor.com/ticket/13599.\r
                        if ( id !== '' && transferType === CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ) {\r
                                evt.cancel();\r
                                return;\r
                                                        if ( !el.is( CKEDITOR.dtd.$block ) )\r
                                                                return;\r
 \r
-                                                       // Allow drop line inside, but never before or after nested editable (#12006).\r
+                                                       // Allow drop line inside, but never before or after nested editable (http://dev.ckeditor.com/ticket/12006).\r
                                                        if ( Widget.isDomNestedEditable( el ) )\r
                                                                return;\r
 \r
-                                                       // Do not allow droping inside the widget being dragged (#13397).\r
+                                                       // Do not allow droping inside the widget being dragged (http://dev.ckeditor.com/ticket/13397).\r
                                                        if ( widgetsRepo._.draggedWidget.wrapper.contains( el ) ) {\r
                                                                return;\r
                                                        }\r
 \r
-                                                       // If element is nested editable, make sure widget can be dropped there (#12006).\r
+                                                       // If element is nested editable, make sure widget can be dropped there (http://dev.ckeditor.com/ticket/12006).\r
                                                        var nestedEditable = Widget.getNestedEditable( editable, el );\r
                                                        if ( nestedEditable ) {\r
                                                                var draggedWidget = widgetsRepo._.draggedWidget;\r
                        editable.attachListener( evtRoot, 'mousedown', function( evt ) {\r
                                var target = evt.data.getTarget();\r
 \r
-                               // #10887 Clicking scrollbar in IE8 will invoke event with empty target object.\r
-                               if ( !target.type )\r
-                                       return false;\r
+                               // Clicking scrollbar in Chrome will invoke event with target object of document type (#663).\r
+                               // In IE8 the target object will be empty (http://dev.ckeditor.com/ticket/10887).\r
+                               // We need to check if target is a proper element.\r
+                               widget = ( target instanceof CKEDITOR.dom.element ) ? widgetsRepo.getByElement( target ) : null;\r
 \r
-                               widget = widgetsRepo.getByElement( target );\r
                                mouseDownOnDragHandler = 0; // Reset.\r
 \r
                                // Widget was clicked, but not editable nested in it.\r
                                                mouseDownOnDragHandler = 1;\r
 \r
                                                // When drag handler is pressed we have to clear current selection if it wasn't already on this widget.\r
-                                               // Otherwise, the selection may be in a fillingChar, which prevents dragging a widget. (#13284, see comment 8 and 9.)\r
+                                               // Otherwise, the selection may be in a fillingChar, which prevents dragging a widget. (http://dev.ckeditor.com/ticket/13284, see comment 8 and 9.)\r
                                                if ( widgetsRepo.focused != widget )\r
                                                        editor.getSelection().removeAllRanges();\r
 \r
                                        // Save the reference to this nested editable in the closest widget to be downcasted.\r
                                        // Nested editables are downcasted in the successive toDataFormat to create an opportunity\r
                                        // for dataFilter's "excludeNestedEditable" option to do its job (that option relies on\r
-                                       // contenteditable="true" attribute) (#11372).\r
+                                       // contenteditable="true" attribute) (http://dev.ckeditor.com/ticket/11372).\r
                                        toBeDowncasted[ toBeDowncasted.length - 1 ].editables[ attrs[ 'data-cke-widget-editable' ] ] = element;\r
 \r
                                        // Don't check children - there won't be next wrapper or nested editable which we\r
                        // If drag'n'drop kind of paste into nested editable (data.range), selection is set AFTER\r
                        // data is pasted, which means editor has no chance to change activeFilter's context.\r
                        // As a result, pasted data is filtered with default editor's filter instead of NE's and\r
-                       // funny things get inserted. Changing the filter by analysis of the paste range below (#13186).\r
+                       // funny things get inserted. Changing the filter by analysis of the paste range below (http://dev.ckeditor.com/ticket/13186).\r
                        if ( data.range ) {\r
                                // Check if pasting into nested editable.\r
                                var nestedEditable = Widget.getNestedEditable( editor.editable(), data.range.startContainer );\r
                } );\r
        }\r
 \r
-       // Add a listener to data event that will set/change widget's label (#14539).\r
+       // Add a listener to data event that will set/change widget's label (http://dev.ckeditor.com/ticket/14539).\r
        function setupA11yListener( widget ) {\r
                // Note, the function gets executed in a context of widget instance.\r
                function getLabelDefault() {\r
                        return;\r
 \r
                var editor = widget.editor,\r
-                       // Use getLast to find wrapper's direct descendant (#12022).\r
+                       // Use getLast to find wrapper's direct descendant (http://dev.ckeditor.com/ticket/12022).\r
                        container = widget.wrapper.getLast( Widget.isDomDragHandlerContainer ),\r
                        img;\r
 \r
-               // Reuse drag handler if already exists (#11281).\r
+               // Reuse drag handler if already exists (http://dev.ckeditor.com/ticket/11281).\r
                if ( container )\r
                        img = container.findOne( 'img' );\r
                else {\r
                        widget.wrapper.append( container );\r
                }\r
 \r
-               // Preventing page reload when dropped content on widget wrapper (#13015).\r
+               // Preventing page reload when dropped content on widget wrapper (http://dev.ckeditor.com/ticket/13015).\r
                // Widget is not editable so by default drop on it isn't allowed what means that\r
                // browser handles it (there's no editable#drop event). If there's no drop event we cannot block\r
                // the drop, so page is reloaded. This listener enables drop on widget wrappers.\r
                if ( !widget.mask )\r
                        return;\r
 \r
-               // Reuse mask if already exists (#11281).\r
+               // Reuse mask if already exists (http://dev.ckeditor.com/ticket/11281).\r
                var img = widget.wrapper.findOne( '.cke_widget_mask' );\r
 \r
                if ( !img ) {\r
                setupDataClassesListener( widget );\r
                setupA11yListener( widget );\r
 \r
-               // #11145: [IE8] Non-editable content of widget is draggable.\r
+               // http://dev.ckeditor.com/ticket/11145: [IE8] Non-editable content of widget is draggable.\r
                if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) {\r
                        widget.wrapper.on( 'dragstart', function( evt ) {\r
                                var target = evt.data.getTarget();\r
                widget.on( 'doubleclick', function( evt ) {\r
                        if ( widget.edit() ) {\r
                                // We have to cancel event if edit method opens a dialog, otherwise\r
-                               // link plugin may open extra dialog (#12140).\r
+                               // link plugin may open extra dialog (http://dev.ckeditor.com/ticket/12140).\r
                                evt.cancel();\r
                        }\r
                } );\r
  * This option is similar to {@link CKEDITOR.config#allowedContent} and one can\r
  * use it to limit the editor features available in the nested editable.\r
  *\r
+ * If no `allowedContent` is specified, the editable will use the editor default\r
+ * {@link CKEDITOR.editor#filter}.\r
+ *\r
  * @property {CKEDITOR.filter.allowedContentRules} allowedContent\r
  */\r
 \r
 /**\r
- * Nested editable name displayed in elements path.\r
+ * The [Advanced Content Filter](#!/guide/dev_advanced_content_filter) rules\r
+ * which will be used to blacklist elements within this nested editable.\r
+ * This option is similar to {@link CKEDITOR.config#disallowedContent}.\r
+ *\r
+ * Note that `disallowedContent` work on top of the definition's {@link #allowedContent}.\r
+ *\r
+ * @since 4.7.3\r
+ * @property {CKEDITOR.filter.disallowedContentRules} disallowedContent\r
+ */\r
+\r
+/**\r
+ * Nested editable name displayed in the elements path.\r
  *\r
  * @property {String} pathName\r
  */\r