X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fckeditor%2Fjs%2Fckeditor.admin.js;fp=web%2Fcore%2Fmodules%2Fckeditor%2Fjs%2Fckeditor.admin.js;h=f51341d4ae76baa91da8051d6fa250f57c24b66b;hp=11fd369586e2190b60c1dfae4e55fee581747026;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/ckeditor/js/ckeditor.admin.js b/web/core/modules/ckeditor/js/ckeditor.admin.js index 11fd36958..f51341d4a 100644 --- a/web/core/modules/ckeditor/js/ckeditor.admin.js +++ b/web/core/modules/ckeditor/js/ckeditor.admin.js @@ -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') @@ -56,17 +34,11 @@ }; } }, - 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; @@ -79,48 +51,14 @@ } }; - /** - * 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; @@ -128,33 +66,17 @@ 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) { @@ -163,170 +85,90 @@ }); 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'); - $('
' + Drupal.t('Please provide a name for the button group.') + '
').insertAfter(form.elements[0]); + $form.addClass('errors').find('input').addClass('error').attr('aria-invalid', 'true'); + $('
' + Drupal.t('Please provide a name for the button group.') + '
').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(); } @@ -336,7 +178,7 @@ 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.', { @@ -345,118 +187,70 @@ } 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 '
  • '; }; - /** - * Themes a blank CKEditor button group. - * - * @return {string} - * A HTML string for a CKEditor button group. - */ Drupal.theme.ckeditorToolbarGroup = function () { var group = ''; group += '
  • '; }; - -})(jQuery, Drupal, drupalSettings, _); +})(jQuery, Drupal, drupalSettings, _); \ No newline at end of file