X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fckeditor%2Fjs%2Fplugins%2Fdrupallink%2Fplugin.js;h=1f7f8c46681d55c36fa06918c9d17da29775da97;hp=9bd4dce985067f717d66d963f5a4cbcd8cadd811;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/ckeditor/js/plugins/drupallink/plugin.js b/web/core/modules/ckeditor/js/plugins/drupallink/plugin.js index 9bd4dce98..1f7f8c466 100644 --- a/web/core/modules/ckeditor/js/plugins/drupallink/plugin.js +++ b/web/core/modules/ckeditor/js/plugins/drupallink/plugin.js @@ -1,33 +1,28 @@ /** - * @file - * Drupal Link plugin. - * - * @ignore - */ +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ (function ($, Drupal, drupalSettings, CKEDITOR) { - - 'use strict'; - function parseAttributes(editor, element) { var parsedAttributes = {}; var domElement = element.$; - var attribute; - var attributeName; + var attribute = void 0; + var attributeName = void 0; for (var attrIndex = 0; attrIndex < domElement.attributes.length; attrIndex++) { attribute = domElement.attributes.item(attrIndex); attributeName = attribute.nodeName.toLowerCase(); - // Ignore data-cke-* attributes; they're CKEditor internals. + if (attributeName.indexOf('data-cke-') === 0) { continue; } - // Store the value for this attribute, unless there's a data-cke-saved- - // alternative for it, which will contain the quirk-free, original value. + parsedAttributes[attributeName] = element.data('cke-saved-' + attributeName) || attribute.nodeValue; } - // Remove any cke_* classes. if (parsedAttributes.class) { parsedAttributes.class = CKEDITOR.tools.trim(parsedAttributes.class.replace(/cke_\S+/, '')); } @@ -43,11 +38,8 @@ } } - // CKEditor tracks the *actual* saved href in a data-cke-saved-* attribute - // to work around browser quirks. We need to update it. set['data-cke-saved-href'] = set.href; - // Remove all attributes which are not currently set. var removed = {}; for (var s in set) { if (set.hasOwnProperty(s)) { @@ -65,8 +57,7 @@ icons: 'drupallink,drupalunlink', hidpi: true, - init: function (editor) { - // Add the commands for link and unlink. + init: function init(editor) { editor.addCommand('drupallink', { allowedContent: { a: { @@ -82,28 +73,21 @@ href: '' } }), - modes: {wysiwyg: 1}, + modes: { wysiwyg: 1 }, canUndo: true, - exec: function (editor) { + exec: function exec(editor) { var drupalImageUtils = CKEDITOR.plugins.drupalimage; var focusedImageWidget = drupalImageUtils && drupalImageUtils.getFocusedWidget(editor); var linkElement = getSelectedLink(editor); - // Set existing values based on selected element. var existingValues = {}; if (linkElement && linkElement.$) { existingValues = parseAttributes(editor, linkElement); - } - // Or, if an image widget is focused, we're editing a link wrapping - // an image widget. - else if (focusedImageWidget && focusedImageWidget.data.link) { - existingValues = CKEDITOR.tools.clone(focusedImageWidget.data.link); - } + } else if (focusedImageWidget && focusedImageWidget.data.link) { + existingValues = CKEDITOR.tools.clone(focusedImageWidget.data.link); + } - // Prepare a save callback to be used upon saving the dialog. - var saveCallback = function (returnValues) { - // If an image widget is focused, we're not editing an independent - // link, but we're wrapping an image widget in a link. + var saveCallback = function saveCallback(returnValues) { if (focusedImageWidget) { focusedImageWidget.setData('link', CKEDITOR.tools.extend(returnValues.attributes, focusedImageWidget.data.link)); editor.fire('saveSnapshot'); @@ -112,58 +96,44 @@ editor.fire('saveSnapshot'); - // Create a new link element if needed. if (!linkElement && returnValues.attributes.href) { var selection = editor.getSelection(); var range = selection.getRanges(1)[0]; - // Use link URL as text with a collapsed cursor. if (range.collapsed) { - // Shorten mailto URLs to just the email address. var text = new CKEDITOR.dom.text(returnValues.attributes.href.replace(/^mailto:/, ''), editor.document); range.insertNode(text); range.selectNodeContents(text); } - // Create the new link by applying a style to the new text. - var style = new CKEDITOR.style({element: 'a', attributes: returnValues.attributes}); + var style = new CKEDITOR.style({ element: 'a', attributes: returnValues.attributes }); style.type = CKEDITOR.STYLE_INLINE; style.applyToRange(range); range.select(); - // Set the link so individual properties may be set below. linkElement = getSelectedLink(editor); - } - // Update the link properties. - else if (linkElement) { - for (var attrName in returnValues.attributes) { - if (returnValues.attributes.hasOwnProperty(attrName)) { - // Update the property if a value is specified. - if (returnValues.attributes[attrName].length > 0) { - var value = returnValues.attributes[attrName]; - linkElement.data('cke-saved-' + attrName, value); - linkElement.setAttribute(attrName, value); - } - // Delete the property if set to an empty string. - else { - linkElement.removeAttribute(attrName); + } else if (linkElement) { + for (var attrName in returnValues.attributes) { + if (returnValues.attributes.hasOwnProperty(attrName)) { + if (returnValues.attributes[attrName].length > 0) { + var value = returnValues.attributes[attrName]; + linkElement.data('cke-saved-' + attrName, value); + linkElement.setAttribute(attrName, value); + } else { + linkElement.removeAttribute(attrName); + } } } } - } - // Save snapshot for undo support. editor.fire('saveSnapshot'); }; - // Drupal.t() will not work inside CKEditor plugins because CKEditor - // loads the JavaScript file instead of Drupal. Pull translated - // strings from the plugin settings that are translated server-side. + var dialogSettings = { title: linkElement ? editor.config.drupalLink_dialogTitleEdit : editor.config.drupalLink_dialogTitleAdd, dialogClass: 'editor-link-dialog' }; - // Open the dialog for the edit form. Drupal.ckeditor.openDialog(editor, Drupal.url('editor/dialog/link/' + editor.config.drupal.format), existingValues, saveCallback, dialogSettings); } }); @@ -176,25 +146,22 @@ href: '' } }), - exec: function (editor) { - var style = new CKEDITOR.style({element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1}); + exec: function exec(editor) { + var style = new CKEDITOR.style({ element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 }); editor.removeStyle(style); }, - refresh: function (editor, path) { + refresh: function refresh(editor, path) { var element = path.lastElement && path.lastElement.getAscendant('a', true); if (element && element.getName() === 'a' && element.getAttribute('href') && element.getChildCount()) { this.setState(CKEDITOR.TRISTATE_OFF); - } - else { + } else { this.setState(CKEDITOR.TRISTATE_DISABLED); } } }); - // CTRL + K. editor.setKeystroke(CKEDITOR.CTRL + 75, 'drupallink'); - // Add buttons for link and unlink. if (editor.ui.addButton) { editor.ui.addButton('DrupalLink', { label: Drupal.t('Link'), @@ -217,7 +184,6 @@ } }); - // If the "menu" plugin is loaded, register the menu items. if (editor.addMenuItems) { editor.addMenuItems({ link: { @@ -236,7 +202,6 @@ }); } - // If the "contextmenu" plugin is loaded, register the listeners. if (editor.contextMenu) { editor.contextMenu.addListener(function (element, selection) { if (!element || element.isReadOnly()) { @@ -249,7 +214,7 @@ var menu = {}; if (anchor.getAttribute('href') && anchor.getChildCount()) { - menu = {link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF}; + menu = { link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF }; } return menu; }); @@ -257,26 +222,6 @@ } }); - /** - * Get the surrounding link element of current selection. - * - * The following selection will all return the link element. - * - * @example - * li^nk - * [link] - * text[link] - * li[nk] - * [li]nk] - * [li]nk - * - * @param {CKEDITOR.editor} editor - * The CKEditor editor object - * - * @return {?HTMLElement} - * The selected link element, or null. - * - */ function getSelectedLink(editor) { var selection = editor.getSelection(); var selectedElement = selection.getSelectedElement(); @@ -293,12 +238,8 @@ return null; } - // Expose an API for other plugins to interact with drupallink widgets. - // (Compatible with the official CKEditor link plugin's API: - // http://dev.ckeditor.com/ticket/13885.) CKEDITOR.plugins.drupallink = { parseLinkAttributes: parseAttributes, getLinkAttributes: getAttributes }; - -})(jQuery, Drupal, drupalSettings, CKEDITOR); +})(jQuery, Drupal, drupalSettings, CKEDITOR); \ No newline at end of file