Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / ckeditor / js / ckeditor.admin.js
index 11fd369586e2190b60c1dfae4e55fee581747026..f51341d4ae76baa91da8051d6fa250f57c24b66b 100644 (file)
@@ -1,49 +1,27 @@
 /**
- * @file
- * CKEditor button and group configuration user interface.
- */
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
 
 (function ($, Drupal, drupalSettings, _) {
-
-  'use strict';
-
   Drupal.ckeditor = Drupal.ckeditor || {};
 
-  /**
-   * Sets config behaviour and creates config views for the CKEditor toolbar.
-   *
-   * @type {Drupal~behavior}
-   *
-   * @prop {Drupal~behaviorAttach} attach
-   *   Attaches admin behaviour to the CKEditor buttons.
-   * @prop {Drupal~behaviorDetach} detach
-   *   Detaches admin behaviour from the CKEditor buttons on 'unload'.
-   */
   Drupal.behaviors.ckeditorAdmin = {
-    attach: function (context) {
-      // Process the CKEditor configuration fragment once.
+    attach: function attach(context) {
       var $configurationForm = $(context).find('.ckeditor-toolbar-configuration').once('ckeditor-configuration');
       if ($configurationForm.length) {
-        var $textarea = $configurationForm
-          // Hide the textarea that contains the serialized representation of the
-          // CKEditor configuration.
-          .find('.js-form-item-editor-settings-toolbar-button-groups')
-          .hide()
-          // Return the textarea child node from this expression.
-          .find('textarea');
-
-        // The HTML for the CKEditor configuration is assembled on the server
-        // and sent to the client as a serialized DOM fragment.
+        var $textarea = $configurationForm.find('.js-form-item-editor-settings-toolbar-button-groups').hide().find('textarea');
+
         $configurationForm.append(drupalSettings.ckeditor.toolbarAdmin);
 
-        // Create a configuration model.
         var model = Drupal.ckeditor.models.Model = new Drupal.ckeditor.Model({
           $textarea: $textarea,
           activeEditorConfig: JSON.parse($textarea.val()),
           hiddenEditorConfig: drupalSettings.ckeditor.hiddenCKEditorConfig
         });
 
-        // Create the configuration Views.
         var viewDefaults = {
           model: model,
           el: $('.ckeditor-toolbar-configuration')
         };
       }
     },
-    detach: function (context, settings, trigger) {
-      // Early-return if the trigger for detachment is something else than
-      // unload.
+    detach: function detach(context, settings, trigger) {
       if (trigger !== 'unload') {
         return;
       }
 
-      // We're detaching because CKEditor as text editor has been disabled; this
-      // really means that all CKEditor toolbar buttons have been removed.
-      // Hence,all editor features will be removed, so any reactions from
-      // filters will be undone.
       var $configurationForm = $(context).find('.ckeditor-toolbar-configuration').findOnce('ckeditor-configuration');
       if ($configurationForm.length && Drupal.ckeditor.models && Drupal.ckeditor.models.Model) {
         var config = Drupal.ckeditor.models.Model.toJSON().activeEditorConfig;
     }
   };
 
-  /**
-   * CKEditor configuration UI methods of Backbone objects.
-   *
-   * @namespace
-   */
   Drupal.ckeditor = {
-
-    /**
-     * A hash of View instances.
-     *
-     * @type {object}
-     */
     views: {},
 
-    /**
-     * A hash of Model instances.
-     *
-     * @type {object}
-     */
     models: {},
 
-    /**
-     * Translates changes in CKEditor config DOM structure to the config model.
-     *
-     * If the button is moved within an existing group, the DOM structure is
-     * simply translated to a configuration model. If the button is moved into a
-     * new group placeholder, then a process is launched to name that group
-     * before the button move is translated into configuration.
-     *
-     * @param {Backbone.View} view
-     *   The Backbone View that invoked this function.
-     * @param {jQuery} $button
-     *   A jQuery set that contains an li element that wraps a button element.
-     * @param {function} callback
-     *   A callback to invoke after the button group naming modal dialog has
-     *   been closed.
-     *
-     */
-    registerButtonMove: function (view, $button, callback) {
+    registerButtonMove: function registerButtonMove(view, $button, callback) {
       var $group = $button.closest('.ckeditor-toolbar-group');
 
-      // If dropped in a placeholder button group, the user must name it.
       if ($group.hasClass('placeholder')) {
         if (view.isProcessing) {
           return;
         view.isProcessing = true;
 
         Drupal.ckeditor.openGroupNameDialog(view, $group, callback);
-      }
-      else {
+      } else {
         view.model.set('isDirty', true);
         callback(true);
       }
     },
-
-    /**
-     * Translates changes in CKEditor config DOM structure to the config model.
-     *
-     * Each row has a placeholder group at the end of the row. A user may not
-     * move an existing button group past the placeholder group at the end of a
-     * row.
-     *
-     * @param {Backbone.View} view
-     *   The Backbone View that invoked this function.
-     * @param {jQuery} $group
-     *   A jQuery set that contains an li element that wraps a group of buttons.
-     */
-    registerGroupMove: function (view, $group) {
-      // Remove placeholder classes if necessary.
+    registerGroupMove: function registerGroupMove(view, $group) {
       var $row = $group.closest('.ckeditor-row');
       if ($row.hasClass('placeholder')) {
         $row.removeClass('placeholder');
       }
-      // If there are any rows with just a placeholder group, mark the row as a
-      // placeholder.
+
       $row.parent().children().each(function () {
         $row = $(this);
         if ($row.find('.ckeditor-toolbar-group').not('.placeholder').length === 0) {
       });
       view.model.set('isDirty', true);
     },
-
-    /**
-     * Opens a dialog with a form for changing the title of a button group.
-     *
-     * @param {Backbone.View} view
-     *   The Backbone View that invoked this function.
-     * @param {jQuery} $group
-     *   A jQuery set that contains an li element that wraps a group of buttons.
-     * @param {function} callback
-     *   A callback to invoke after the button group naming modal dialog has
-     *   been closed.
-     */
-    openGroupNameDialog: function (view, $group, callback) {
+    openGroupNameDialog: function openGroupNameDialog(view, $group, callback) {
       callback = callback || function () {};
 
-      /**
-       * Validates the string provided as a button group title.
-       *
-       * @param {HTMLElement} form
-       *   The form DOM element that contains the input with the new button
-       *   group title string.
-       *
-       * @return {bool}
-       *   Returns true when an error exists, otherwise returns false.
-       */
       function validateForm(form) {
         if (form.elements[0].value.length === 0) {
           var $form = $(form);
           if (!$form.hasClass('errors')) {
-            $form
-              .addClass('errors')
-              .find('input')
-              .addClass('error')
-              .attr('aria-invalid', 'true');
-            $('<div class=\"description\" >' + Drupal.t('Please provide a name for the button group.') + '</div>').insertAfter(form.elements[0]);
+            $form.addClass('errors').find('input').addClass('error').attr('aria-invalid', 'true');
+            $('<div class="description" >' + Drupal.t('Please provide a name for the button group.') + '</div>').insertAfter(form.elements[0]);
           }
           return true;
         }
         return false;
       }
 
-      /**
-       * Attempts to close the dialog; Validates user input.
-       *
-       * @param {string} action
-       *   The dialog action chosen by the user: 'apply' or 'cancel'.
-       * @param {HTMLElement} form
-       *   The form DOM element that contains the input with the new button
-       *   group title string.
-       */
       function closeDialog(action, form) {
-
-        /**
-         * Closes the dialog when the user cancels or supplies valid data.
-         */
         function shutdown() {
           dialog.close(action);
 
-          // The processing marker can be deleted since the dialog has been
-          // closed.
           delete view.isProcessing;
         }
 
-        /**
-         * Applies a string as the name of a CKEditor button group.
-         *
-         * @param {jQuery} $group
-         *   A jQuery set that contains an li element that wraps a group of
-         *   buttons.
-         * @param {string} name
-         *   The new name of the CKEditor button group.
-         */
         function namePlaceholderGroup($group, name) {
-          // If it's currently still a placeholder, then that means we're
-          // creating a new group, and we must do some extra work.
           if ($group.hasClass('placeholder')) {
-            // Remove all whitespace from the name, lowercase it and ensure
-            // HTML-safe encoding, then use this as the group ID for CKEditor
-            // configuration UI accessibility purposes only.
             var groupID = 'ckeditor-toolbar-group-aria-label-for-' + Drupal.checkPlain(name.toLowerCase().replace(/\s/g, '-'));
-            $group
-              // Update the group container.
-              .removeAttr('aria-label')
-              .attr('data-drupal-ckeditor-type', 'group')
-              .attr('tabindex', 0)
-              // Update the group heading.
-              .children('.ckeditor-toolbar-group-name')
-              .attr('id', groupID)
-              .end()
-              // Update the group items.
-              .children('.ckeditor-toolbar-group-buttons')
-              .attr('aria-labelledby', groupID);
+            $group.removeAttr('aria-label').attr('data-drupal-ckeditor-type', 'group').attr('tabindex', 0).children('.ckeditor-toolbar-group-name').attr('id', groupID).end().children('.ckeditor-toolbar-group-buttons').attr('aria-labelledby', groupID);
           }
 
-          $group
-            .attr('data-drupal-ckeditor-toolbar-group-name', name)
-            .children('.ckeditor-toolbar-group-name')
-            .text(name);
+          $group.attr('data-drupal-ckeditor-toolbar-group-name', name).children('.ckeditor-toolbar-group-name').text(name);
         }
 
-        // Invoke a user-provided callback and indicate failure.
         if (action === 'cancel') {
           shutdown();
           callback(false, $group);
           return;
         }
 
-        // Validate that a group name was provided.
         if (form && validateForm(form)) {
           return;
         }
 
-        // React to application of a valid group name.
         if (action === 'apply') {
           shutdown();
-          // Apply the provided name to the button group label.
+
           namePlaceholderGroup($group, Drupal.checkPlain(form.elements[0].value));
-          // Remove placeholder classes so that new placeholders will be
-          // inserted.
+
           $group.closest('.ckeditor-row.placeholder').addBack().removeClass('placeholder');
 
-          // Invoke a user-provided callback and indicate success.
           callback(true, $group);
 
-          // Signal that the active toolbar DOM structure has changed.
           view.model.set('isDirty', true);
         }
       }
 
-      // Create a Drupal dialog that will get a button group name from the user.
       var $ckeditorButtonGroupNameForm = $(Drupal.theme('ckeditorButtonGroupNameForm'));
       var dialog = Drupal.dialog($ckeditorButtonGroupNameForm.get(0), {
         title: Drupal.t('Button group name'),
         dialogClass: 'ckeditor-name-toolbar-group',
         resizable: false,
-        buttons: [
-          {
-            text: Drupal.t('Apply'),
-            click: function () {
-              closeDialog('apply', this);
-            },
-            primary: true
+        buttons: [{
+          text: Drupal.t('Apply'),
+          click: function click() {
+            closeDialog('apply', this);
           },
-          {
-            text: Drupal.t('Cancel'),
-            click: function () {
-              closeDialog('cancel');
-            }
+
+          primary: true
+        }, {
+          text: Drupal.t('Cancel'),
+          click: function click() {
+            closeDialog('cancel');
           }
-        ],
-        open: function () {
+        }],
+        open: function open() {
           var form = this;
           var $form = $(this);
           var $widget = $form.parent();
           $widget.find('.ui-dialog-titlebar-close').remove();
-          // Set a click handler on the input and button in the form.
+
           $widget.on('keypress.ckeditor', 'input, button', function (event) {
-            // React to enter key press.
             if (event.keyCode === 13) {
               var $target = $(event.currentTarget);
               var data = $target.data('ui-button');
               var action = 'apply';
-              // Assume 'apply', but take into account that the user might have
-              // pressed the enter key on the dialog buttons.
+
               if (data && data.options && data.options.label) {
                 action = data.options.label.toLowerCase();
               }
               event.preventDefault();
             }
           });
-          // Announce to the user that a modal dialog is open.
+
           var text = Drupal.t('Editing the name of the new button group in a dialog.');
           if (typeof $group.attr('data-drupal-ckeditor-toolbar-group-name') !== 'undefined') {
             text = Drupal.t('Editing the name of the "@groupName" button group in a dialog.', {
           }
           Drupal.announce(text);
         },
-        close: function (event) {
-          // Automatically destroy the DOM element that was used for the dialog.
+        close: function close(event) {
           $(event.target).remove();
         }
       });
-      // A modal dialog is used because the user must provide a button group
-      // name or cancel the button placement before taking any other action.
+
       dialog.showModal();
 
-      $(document.querySelector('.ckeditor-name-toolbar-group').querySelector('input'))
-        // When editing, set the "group name" input in the form to the current
-        // value.
-        .attr('value', $group.attr('data-drupal-ckeditor-toolbar-group-name'))
-        // Focus on the "group name" input in the form.
-        .trigger('focus');
+      $(document.querySelector('.ckeditor-name-toolbar-group').querySelector('input')).attr('value', $group.attr('data-drupal-ckeditor-toolbar-group-name')).trigger('focus');
     }
-
   };
 
-  /**
-   * Automatically shows/hides settings of buttons-only CKEditor plugins.
-   *
-   * @type {Drupal~behavior}
-   *
-   * @prop {Drupal~behaviorAttach} attach
-   *   Attaches show/hide behaviour to Plugin Settings buttons.
-   */
   Drupal.behaviors.ckeditorAdminButtonPluginSettings = {
-    attach: function (context) {
+    attach: function attach(context) {
       var $context = $(context);
       var $ckeditorPluginSettings = $context.find('#ckeditor-plugin-settings').once('ckeditor-plugin-settings');
       if ($ckeditorPluginSettings.length) {
-        // Hide all button-dependent plugin settings initially.
         $ckeditorPluginSettings.find('[data-ckeditor-buttons]').each(function () {
           var $this = $(this);
           if ($this.data('verticalTab')) {
             $this.data('verticalTab').tabHide();
-          }
-          else {
-            // On very narrow viewports, Vertical Tabs are disabled.
+          } else {
             $this.hide();
           }
           $this.data('ckeditorButtonPluginSettingsActiveButtons', []);
         });
 
-        // Whenever a button is added or removed, check if we should show or
-        // hide the corresponding plugin settings. (Note that upon
-        // initialization, each button that already is part of the toolbar still
-        // is considered "added", hence it also works correctly for buttons that
-        // were added previously.)
-        $context
-          .find('.ckeditor-toolbar-active')
-          .off('CKEditorToolbarChanged.ckeditorAdminPluginSettings')
-          .on('CKEditorToolbarChanged.ckeditorAdminPluginSettings', function (event, action, button) {
-            var $pluginSettings = $ckeditorPluginSettings
-              .find('[data-ckeditor-buttons~=' + button + ']');
-
-            // No settings for this button.
-            if ($pluginSettings.length === 0) {
-              return;
-            }
+        $context.find('.ckeditor-toolbar-active').off('CKEditorToolbarChanged.ckeditorAdminPluginSettings').on('CKEditorToolbarChanged.ckeditorAdminPluginSettings', function (event, action, button) {
+          var $pluginSettings = $ckeditorPluginSettings.find('[data-ckeditor-buttons~=' + button + ']');
 
-            var verticalTab = $pluginSettings.data('verticalTab');
-            var activeButtons = $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons');
-            if (action === 'added') {
-              activeButtons.push(button);
-              // Show this plugin's settings if >=1 of its buttons are active.
-              if (verticalTab) {
-                verticalTab.tabShow();
-              }
-              else {
-                // On very narrow viewports, Vertical Tabs remain fieldsets.
-                $pluginSettings.show();
-              }
+          if ($pluginSettings.length === 0) {
+            return;
+          }
 
+          var verticalTab = $pluginSettings.data('verticalTab');
+          var activeButtons = $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons');
+          if (action === 'added') {
+            activeButtons.push(button);
+
+            if (verticalTab) {
+              verticalTab.tabShow();
+            } else {
+              $pluginSettings.show();
             }
-            else {
-              // Remove this button from the list of active buttons.
-              activeButtons.splice(activeButtons.indexOf(button), 1);
-              // Show this plugin's settings 0 of its buttons are active.
-              if (activeButtons.length === 0) {
-                if (verticalTab) {
-                  verticalTab.tabHide();
-                }
-                else {
-                  // On very narrow viewports, Vertical Tabs are disabled.
-                  $pluginSettings.hide();
-                }
+          } else {
+            activeButtons.splice(activeButtons.indexOf(button), 1);
+
+            if (activeButtons.length === 0) {
+              if (verticalTab) {
+                verticalTab.tabHide();
+              } else {
+                $pluginSettings.hide();
               }
             }
-            $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons', activeButtons);
-          });
+          }
+          $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons', activeButtons);
+        });
       }
     }
   };
 
-  /**
-   * Themes a blank CKEditor row.
-   *
-   * @return {string}
-   *   A HTML string for a CKEditor row.
-   */
   Drupal.theme.ckeditorRow = function () {
     return '<li class="ckeditor-row placeholder" role="group"><ul class="ckeditor-toolbar-groups clearfix"></ul></li>';
   };
 
-  /**
-   * Themes a blank CKEditor button group.
-   *
-   * @return {string}
-   *   A HTML string for a CKEditor button group.
-   */
   Drupal.theme.ckeditorToolbarGroup = function () {
     var group = '';
     group += '<li class="ckeditor-toolbar-group placeholder" role="presentation" aria-label="' + Drupal.t('Place a button to create a new button group.') + '">';
     return group;
   };
 
-  /**
-   * Themes a form for changing the title of a CKEditor button group.
-   *
-   * @return {string}
-   *   A HTML string for the form for the title of a CKEditor button group.
-   */
   Drupal.theme.ckeditorButtonGroupNameForm = function () {
     return '<form><input name="group-name" required="required"></form>';
   };
 
-  /**
-   * Themes a button that will toggle the button group names in active config.
-   *
-   * @return {string}
-   *   A HTML string for the button to toggle group names.
-   */
   Drupal.theme.ckeditorButtonGroupNamesToggle = function () {
     return '<button class="link ckeditor-groupnames-toggle" aria-pressed="false"></button>';
   };
 
-  /**
-   * Themes a button that will prompt the user to name a new button group.
-   *
-   * @return {string}
-   *   A HTML string for the button to create a name for a new button group.
-   */
   Drupal.theme.ckeditorNewButtonGroup = function () {
     return '<li class="ckeditor-add-new-group"><button aria-label="' + Drupal.t('Add a CKEditor button group to the end of this row.') + '">' + Drupal.t('Add group') + '</button></li>';
   };
-
-})(jQuery, Drupal, drupalSettings, _);
+})(jQuery, Drupal, drupalSettings, _);
\ No newline at end of file