diff -r c7c34916027a -r 177826044cd9 wp/wp-includes/js/tinymce/plugins/link/plugin.js --- a/wp/wp-includes/js/tinymce/plugins/link/plugin.js Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-includes/js/tinymce/plugins/link/plugin.js Mon Oct 14 18:28:13 2019 +0200 @@ -1,713 +1,713 @@ (function () { -var link = (function () { - 'use strict'; +var link = (function (domGlobals) { + 'use strict'; + + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); + + var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK'); - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); + var assumeExternalTargets = function (editorSettings) { + return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false; + }; + var hasContextToolbar = function (editorSettings) { + return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false; + }; + var getLinkList = function (editorSettings) { + return editorSettings.link_list; + }; + var hasDefaultLinkTarget = function (editorSettings) { + return typeof editorSettings.default_link_target === 'string'; + }; + var getDefaultLinkTarget = function (editorSettings) { + return editorSettings.default_link_target; + }; + var getTargetList = function (editorSettings) { + return editorSettings.target_list; + }; + var setTargetList = function (editor, list) { + editor.settings.target_list = list; + }; + var shouldShowTargetList = function (editorSettings) { + return getTargetList(editorSettings) !== false; + }; + var getRelList = function (editorSettings) { + return editorSettings.rel_list; + }; + var hasRelList = function (editorSettings) { + return getRelList(editorSettings) !== undefined; + }; + var getLinkClassList = function (editorSettings) { + return editorSettings.link_class_list; + }; + var hasLinkClassList = function (editorSettings) { + return getLinkClassList(editorSettings) !== undefined; + }; + var shouldShowLinkTitle = function (editorSettings) { + return editorSettings.link_title !== false; + }; + var allowUnsafeLinkTarget = function (editorSettings) { + return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false; + }; + var Settings = { + assumeExternalTargets: assumeExternalTargets, + hasContextToolbar: hasContextToolbar, + getLinkList: getLinkList, + hasDefaultLinkTarget: hasDefaultLinkTarget, + getDefaultLinkTarget: getDefaultLinkTarget, + getTargetList: getTargetList, + setTargetList: setTargetList, + shouldShowTargetList: shouldShowTargetList, + getRelList: getRelList, + hasRelList: hasRelList, + getLinkClassList: getLinkClassList, + hasLinkClassList: hasLinkClassList, + shouldShowLinkTitle: shouldShowLinkTitle, + allowUnsafeLinkTarget: allowUnsafeLinkTarget + }; - var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK'); + var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); + + var global$3 = tinymce.util.Tools.resolve('tinymce.Env'); + + var appendClickRemove = function (link, evt) { + domGlobals.document.body.appendChild(link); + link.dispatchEvent(evt); + domGlobals.document.body.removeChild(link); + }; + var open = function (url) { + if (!global$3.ie || global$3.ie > 10) { + var link = domGlobals.document.createElement('a'); + link.target = '_blank'; + link.href = url; + link.rel = 'noreferrer noopener'; + var evt = domGlobals.document.createEvent('MouseEvents'); + evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + appendClickRemove(link, evt); + } else { + var win = domGlobals.window.open('', '_blank'); + if (win) { + win.opener = null; + var doc = win.document; + doc.open(); + doc.write(''); + doc.close(); + } + } + }; + var OpenUrl = { open: open }; + + var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - var assumeExternalTargets = function (editorSettings) { - return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false; - }; - var hasContextToolbar = function (editorSettings) { - return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false; - }; - var getLinkList = function (editorSettings) { - return editorSettings.link_list; - }; - var hasDefaultLinkTarget = function (editorSettings) { - return typeof editorSettings.default_link_target === 'string'; - }; - var getDefaultLinkTarget = function (editorSettings) { - return editorSettings.default_link_target; - }; - var getTargetList = function (editorSettings) { - return editorSettings.target_list; - }; - var setTargetList = function (editor, list) { - editor.settings.target_list = list; - }; - var shouldShowTargetList = function (editorSettings) { - return getTargetList(editorSettings) !== false; - }; - var getRelList = function (editorSettings) { - return editorSettings.rel_list; - }; - var hasRelList = function (editorSettings) { - return getRelList(editorSettings) !== undefined; - }; - var getLinkClassList = function (editorSettings) { - return editorSettings.link_class_list; - }; - var hasLinkClassList = function (editorSettings) { - return getLinkClassList(editorSettings) !== undefined; - }; - var shouldShowLinkTitle = function (editorSettings) { - return editorSettings.link_title !== false; - }; - var allowUnsafeLinkTarget = function (editorSettings) { - return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false; - }; - var $_1b4wbxfvjjgwechi = { - assumeExternalTargets: assumeExternalTargets, - hasContextToolbar: hasContextToolbar, - getLinkList: getLinkList, - hasDefaultLinkTarget: hasDefaultLinkTarget, - getDefaultLinkTarget: getDefaultLinkTarget, - getTargetList: getTargetList, - setTargetList: setTargetList, - shouldShowTargetList: shouldShowTargetList, - getRelList: getRelList, - hasRelList: hasRelList, - getLinkClassList: getLinkClassList, - hasLinkClassList: hasLinkClassList, - shouldShowLinkTitle: shouldShowLinkTitle, - allowUnsafeLinkTarget: allowUnsafeLinkTarget - }; + var toggleTargetRules = function (rel, isUnsafe) { + var rules = ['noopener']; + var newRel = rel ? rel.split(/\s+/) : []; + var toString = function (rel) { + return global$4.trim(rel.sort().join(' ')); + }; + var addTargetRules = function (rel) { + rel = removeTargetRules(rel); + return rel.length ? rel.concat(rules) : rules; + }; + var removeTargetRules = function (rel) { + return rel.filter(function (val) { + return global$4.inArray(rules, val) === -1; + }); + }; + newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel); + return newRel.length ? toString(newRel) : null; + }; + var trimCaretContainers = function (text) { + return text.replace(/\uFEFF/g, ''); + }; + var getAnchorElement = function (editor, selectedElm) { + selectedElm = selectedElm || editor.selection.getNode(); + if (isImageFigure(selectedElm)) { + return editor.dom.select('a[href]', selectedElm)[0]; + } else { + return editor.dom.getParent(selectedElm, 'a[href]'); + } + }; + var getAnchorText = function (selection, anchorElm) { + var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); + return trimCaretContainers(text); + }; + var isLink = function (elm) { + return elm && elm.nodeName === 'A' && elm.href; + }; + var hasLinks = function (elements) { + return global$4.grep(elements, isLink).length > 0; + }; + var isOnlyTextSelected = function (html) { + if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) { + return false; + } + return true; + }; + var isImageFigure = function (node) { + return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className); + }; + var link = function (editor, attachState) { + return function (data) { + editor.undoManager.transact(function () { + var selectedElm = editor.selection.getNode(); + var anchorElm = getAnchorElement(editor, selectedElm); + var linkAttrs = { + href: data.href, + target: data.target ? data.target : null, + rel: data.rel ? data.rel : null, + class: data.class ? data.class : null, + title: data.title ? data.title : null + }; + if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) { + linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank'); + } + if (data.href === attachState.href) { + attachState.attach(); + attachState = {}; + } + if (anchorElm) { + editor.focus(); + if (data.hasOwnProperty('text')) { + if ('innerText' in anchorElm) { + anchorElm.innerText = data.text; + } else { + anchorElm.textContent = data.text; + } + } + editor.dom.setAttribs(anchorElm, linkAttrs); + editor.selection.select(anchorElm); + editor.undoManager.add(); + } else { + if (isImageFigure(selectedElm)) { + linkImageFigure(editor, selectedElm, linkAttrs); + } else if (data.hasOwnProperty('text')) { + editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text))); + } else { + editor.execCommand('mceInsertLink', false, linkAttrs); + } + } + }); + }; + }; + var unlink = function (editor) { + return function () { + editor.undoManager.transact(function () { + var node = editor.selection.getNode(); + if (isImageFigure(node)) { + unlinkImageFigure(editor, node); + } else { + editor.execCommand('unlink'); + } + }); + }; + }; + var unlinkImageFigure = function (editor, fig) { + var a, img; + img = editor.dom.select('img', fig)[0]; + if (img) { + a = editor.dom.getParents(img, 'a[href]', fig)[0]; + if (a) { + a.parentNode.insertBefore(img, a); + editor.dom.remove(a); + } + } + }; + var linkImageFigure = function (editor, fig, attrs) { + var a, img; + img = editor.dom.select('img', fig)[0]; + if (img) { + a = editor.dom.create('a', attrs); + img.parentNode.insertBefore(a, img); + a.appendChild(img); + } + }; + var Utils = { + link: link, + unlink: unlink, + isLink: isLink, + hasLinks: hasLinks, + isOnlyTextSelected: isOnlyTextSelected, + getAnchorElement: getAnchorElement, + getAnchorText: getAnchorText, + toggleTargetRules: toggleTargetRules + }; - var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); + var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - var global$3 = tinymce.util.Tools.resolve('tinymce.Env'); + var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR'); - var appendClickRemove = function (link, evt) { - document.body.appendChild(link); - link.dispatchEvent(evt); - document.body.removeChild(link); - }; - var open$$1 = function (url) { - if (!global$3.ie || global$3.ie > 10) { - var link = document.createElement('a'); - link.target = '_blank'; - link.href = url; - link.rel = 'noreferrer noopener'; - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - appendClickRemove(link, evt); - } else { - var win = window.open('', '_blank'); - if (win) { - win.opener = null; - var doc = win.document; - doc.open(); - doc.write(''); - doc.close(); + var attachState = {}; + var createLinkList = function (editor, callback) { + var linkList = Settings.getLinkList(editor.settings); + if (typeof linkList === 'string') { + global$6.send({ + url: linkList, + success: function (text) { + callback(editor, JSON.parse(text)); + } + }); + } else if (typeof linkList === 'function') { + linkList(function (list) { + callback(editor, list); + }); + } else { + callback(editor, linkList); } - } - }; - var $_du0gebfwjjgwechl = { open: open$$1 }; - - var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var toggleTargetRules = function (rel, isUnsafe) { - var rules = ['noopener']; - var newRel = rel ? rel.split(/\s+/) : []; - var toString = function (rel) { - return global$4.trim(rel.sort().join(' ')); }; - var addTargetRules = function (rel) { - rel = removeTargetRules(rel); - return rel.length ? rel.concat(rules) : rules; + var buildListItems = function (inputList, itemCallback, startItems) { + var appendItems = function (values, output) { + output = output || []; + global$4.each(values, function (item) { + var menuItem = { text: item.text || item.title }; + if (item.menu) { + menuItem.menu = appendItems(item.menu); + } else { + menuItem.value = item.value; + if (itemCallback) { + itemCallback(menuItem); + } + } + output.push(menuItem); + }); + return output; + }; + return appendItems(inputList, startItems || []); }; - var removeTargetRules = function (rel) { - return rel.filter(function (val) { - return global$4.inArray(rules, val) === -1; + var delayedConfirm = function (editor, message, callback) { + var rng = editor.selection.getRng(); + global$5.setEditorTimeout(editor, function () { + editor.windowManager.confirm(message, function (state) { + editor.selection.setRng(rng); + callback(state); + }); }); }; - newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel); - return newRel.length ? toString(newRel) : null; - }; - var trimCaretContainers = function (text) { - return text.replace(/\uFEFF/g, ''); - }; - var getAnchorElement = function (editor, selectedElm) { - selectedElm = selectedElm || editor.selection.getNode(); - if (isImageFigure(selectedElm)) { - return editor.dom.select('a[href]', selectedElm)[0]; - } else { - return editor.dom.getParent(selectedElm, 'a[href]'); - } - }; - var getAnchorText = function (selection, anchorElm) { - var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); - return trimCaretContainers(text); - }; - var isLink = function (elm) { - return elm && elm.nodeName === 'A' && elm.href; - }; - var hasLinks = function (elements) { - return global$4.grep(elements, isLink).length > 0; - }; - var isOnlyTextSelected = function (html) { - if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) { - return false; - } - return true; - }; - var isImageFigure = function (node) { - return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className); - }; - var link = function (editor, attachState) { - return function (data) { - editor.undoManager.transact(function () { - var selectedElm = editor.selection.getNode(); - var anchorElm = getAnchorElement(editor, selectedElm); - var linkAttrs = { - href: data.href, - target: data.target ? data.target : null, - rel: data.rel ? data.rel : null, - class: data.class ? data.class : null, - title: data.title ? data.title : null + var showDialog = function (editor, linkList) { + var data = {}; + var selection = editor.selection; + var dom = editor.dom; + var anchorElm, initialText; + var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; + var linkListChangeHandler = function (e) { + var textCtrl = win.find('#text'); + if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) { + textCtrl.value(e.control.text()); + } + win.find('#href').value(e.control.value()); + }; + var buildAnchorListControl = function (url) { + var anchorList = []; + global$4.each(editor.dom.select('a:not([href])'), function (anchor) { + var id = anchor.name || anchor.id; + if (id) { + anchorList.push({ + text: id, + value: '#' + id, + selected: url.indexOf('#' + id) !== -1 + }); + } + }); + if (anchorList.length) { + anchorList.unshift({ + text: 'None', + value: '' + }); + return { + name: 'anchor', + type: 'listbox', + label: 'Anchors', + values: anchorList, + onselect: linkListChangeHandler + }; + } + }; + var updateText = function () { + if (!initialText && onlyText && !data.text) { + this.parent().parent().find('#text')[0].value(this.value()); + } + }; + var urlChange = function (e) { + var meta = e.meta || {}; + if (linkListCtrl) { + linkListCtrl.value(editor.convertURL(this.value(), 'href')); + } + global$4.each(e.meta, function (value, key) { + var inp = win.find('#' + key); + if (key === 'text') { + if (initialText.length === 0) { + inp.value(value); + data.text = value; + } + } else { + inp.value(value); + } + }); + if (meta.attach) { + attachState = { + href: this.value(), + attach: meta.attach + }; + } + if (!meta.text) { + updateText.call(this); + } + }; + var onBeforeCall = function (e) { + e.meta = win.toJSON(); + }; + onlyText = Utils.isOnlyTextSelected(selection.getContent()); + anchorElm = Utils.getAnchorElement(editor); + data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm); + data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; + if (anchorElm) { + data.target = dom.getAttrib(anchorElm, 'target'); + } else if (Settings.hasDefaultLinkTarget(editor.settings)) { + data.target = Settings.getDefaultLinkTarget(editor.settings); + } + if (value = dom.getAttrib(anchorElm, 'rel')) { + data.rel = value; + } + if (value = dom.getAttrib(anchorElm, 'class')) { + data.class = value; + } + if (value = dom.getAttrib(anchorElm, 'title')) { + data.title = value; + } + if (onlyText) { + textListCtrl = { + name: 'text', + type: 'textbox', + size: 40, + label: 'Text to display', + onchange: function () { + data.text = this.value(); + } }; - if (!$_1b4wbxfvjjgwechi.hasRelList(editor.settings) && $_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) { - linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank'); - } - if (data.href === attachState.href) { - attachState.attach(); - attachState = {}; - } - if (anchorElm) { - editor.focus(); - if (data.hasOwnProperty('text')) { - if ('innerText' in anchorElm) { - anchorElm.innerText = data.text; - } else { - anchorElm.textContent = data.text; - } + } + if (linkList) { + linkListCtrl = { + type: 'listbox', + label: 'Link list', + values: buildListItems(linkList, function (item) { + item.value = editor.convertURL(item.value || item.url, 'href'); + }, [{ + text: 'None', + value: '' + }]), + onselect: linkListChangeHandler, + value: editor.convertURL(data.href, 'href'), + onPostRender: function () { + linkListCtrl = this; } - editor.dom.setAttribs(anchorElm, linkAttrs); - editor.selection.select(anchorElm); - editor.undoManager.add(); - } else { - if (isImageFigure(selectedElm)) { - linkImageFigure(editor, selectedElm, linkAttrs); - } else if (data.hasOwnProperty('text')) { - editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text))); - } else { - editor.execCommand('mceInsertLink', false, linkAttrs); - } + }; + } + if (Settings.shouldShowTargetList(editor.settings)) { + if (Settings.getTargetList(editor.settings) === undefined) { + Settings.setTargetList(editor, [ + { + text: 'None', + value: '' + }, + { + text: 'New window', + value: '_blank' + } + ]); } - }); - }; - }; - var unlink = function (editor) { - return function () { - editor.undoManager.transact(function () { - var node = editor.selection.getNode(); - if (isImageFigure(node)) { - unlinkImageFigure(editor, node); - } else { - editor.execCommand('unlink'); + targetListCtrl = { + name: 'target', + type: 'listbox', + label: 'Target', + values: buildListItems(Settings.getTargetList(editor.settings)) + }; + } + if (Settings.hasRelList(editor.settings)) { + relListCtrl = { + name: 'rel', + type: 'listbox', + label: 'Rel', + values: buildListItems(Settings.getRelList(editor.settings), function (item) { + if (Settings.allowUnsafeLinkTarget(editor.settings) === false) { + item.value = Utils.toggleTargetRules(item.value, data.target === '_blank'); + } + }) + }; + } + if (Settings.hasLinkClassList(editor.settings)) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) { + if (item.value) { + item.textStyle = function () { + return editor.formatter.getCssText({ + inline: 'a', + classes: [item.value] + }); + }; + } + }) + }; + } + if (Settings.shouldShowLinkTitle(editor.settings)) { + linkTitleCtrl = { + name: 'title', + type: 'textbox', + label: 'Title', + value: data.title + }; + } + win = editor.windowManager.open({ + title: 'Insert link', + data: data, + body: [ + { + name: 'href', + type: 'filepicker', + filetype: 'file', + size: 40, + autofocus: true, + label: 'Url', + onchange: urlChange, + onkeyup: updateText, + onpaste: updateText, + onbeforecall: onBeforeCall + }, + textListCtrl, + linkTitleCtrl, + buildAnchorListControl(data.href), + linkListCtrl, + relListCtrl, + targetListCtrl, + classListCtrl + ], + onSubmit: function (e) { + var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings); + var insertLink = Utils.link(editor, attachState); + var removeLink = Utils.unlink(editor); + var resultData = global$4.extend({}, data, e.data); + var href = resultData.href; + if (!href) { + removeLink(); + return; + } + if (!onlyText || resultData.text === initialText) { + delete resultData.text; + } + if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) { + delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) { + if (state) { + resultData.href = 'mailto:' + href; + } + insertLink(resultData); + }); + return; + } + if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) { + delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) { + if (state) { + resultData.href = 'http://' + href; + } + insertLink(resultData); + }); + return; + } + insertLink(resultData); } }); }; - }; - var unlinkImageFigure = function (editor, fig) { - var a, img; - img = editor.dom.select('img', fig)[0]; - if (img) { - a = editor.dom.getParents(img, 'a[href]', fig)[0]; - if (a) { - a.parentNode.insertBefore(img, a); - editor.dom.remove(a); - } - } - }; - var linkImageFigure = function (editor, fig, attrs) { - var a, img; - img = editor.dom.select('img', fig)[0]; - if (img) { - a = editor.dom.create('a', attrs); - img.parentNode.insertBefore(a, img); - a.appendChild(img); - } - }; - var $_5298ug0jjgweci0 = { - link: link, - unlink: unlink, - isLink: isLink, - hasLinks: hasLinks, - isOnlyTextSelected: isOnlyTextSelected, - getAnchorElement: getAnchorElement, - getAnchorText: getAnchorText, - toggleTargetRules: toggleTargetRules - }; - - var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - - var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR'); + var open$1 = function (editor) { + createLinkList(editor, showDialog); + }; + var Dialog = { open: open$1 }; - var attachState = {}; - var createLinkList = function (editor, callback) { - var linkList = $_1b4wbxfvjjgwechi.getLinkList(editor.settings); - if (typeof linkList === 'string') { - global$6.send({ - url: linkList, - success: function (text) { - callback(editor, JSON.parse(text)); - } - }); - } else if (typeof linkList === 'function') { - linkList(function (list) { - callback(editor, list); - }); - } else { - callback(editor, linkList); - } - }; - var buildListItems = function (inputList, itemCallback, startItems) { - var appendItems = function (values, output) { - output = output || []; - global$4.each(values, function (item) { - var menuItem = { text: item.text || item.title }; - if (item.menu) { - menuItem.menu = appendItems(item.menu); - } else { - menuItem.value = item.value; - if (itemCallback) { - itemCallback(menuItem); - } - } - output.push(menuItem); - }); - return output; + var getLink = function (editor, elm) { + return editor.dom.getParent(elm, 'a[href]'); + }; + var getSelectedLink = function (editor) { + return getLink(editor, editor.selection.getStart()); + }; + var getHref = function (elm) { + var href = elm.getAttribute('data-mce-href'); + return href ? href : elm.getAttribute('href'); }; - return appendItems(inputList, startItems || []); - }; - var delayedConfirm = function (editor, message, callback) { - var rng = editor.selection.getRng(); - global$5.setEditorTimeout(editor, function () { - editor.windowManager.confirm(message, function (state) { - editor.selection.setRng(rng); - callback(state); - }); - }); - }; - var showDialog = function (editor, linkList) { - var data = {}; - var selection = editor.selection; - var dom = editor.dom; - var anchorElm, initialText; - var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; - var linkListChangeHandler = function (e) { - var textCtrl = win.find('#text'); - if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) { - textCtrl.value(e.control.text()); - } - win.find('#href').value(e.control.value()); + var isContextMenuVisible = function (editor) { + var contextmenu = editor.plugins.contextmenu; + return contextmenu ? contextmenu.isContextMenuVisible() : false; + }; + var hasOnlyAltModifier = function (e) { + return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false; }; - var buildAnchorListControl = function (url) { - var anchorList = []; - global$4.each(editor.dom.select('a:not([href])'), function (anchor) { - var id = anchor.name || anchor.id; - if (id) { - anchorList.push({ - text: id, - value: '#' + id, - selected: url.indexOf('#' + id) !== -1 - }); - } - }); - if (anchorList.length) { - anchorList.unshift({ - text: 'None', - value: '' - }); - return { - name: 'anchor', - type: 'listbox', - label: 'Anchors', - values: anchorList, - onselect: linkListChangeHandler - }; - } - }; - var updateText = function () { - if (!initialText && onlyText && !data.text) { - this.parent().parent().find('#text')[0].value(this.value()); - } - }; - var urlChange = function (e) { - var meta = e.meta || {}; - if (linkListCtrl) { - linkListCtrl.value(editor.convertURL(this.value(), 'href')); - } - global$4.each(e.meta, function (value, key) { - var inp = win.find('#' + key); - if (key === 'text') { - if (initialText.length === 0) { - inp.value(value); - data.text = value; + var gotoLink = function (editor, a) { + if (a) { + var href = getHref(a); + if (/^#/.test(href)) { + var targetEl = editor.$(href); + if (targetEl.length) { + editor.selection.scrollIntoView(targetEl[0], true); } } else { - inp.value(value); + OpenUrl.open(a.href); } - }); - if (meta.attach) { - attachState = { - href: this.value(), - attach: meta.attach - }; - } - if (!meta.text) { - updateText.call(this); } }; - var onBeforeCall = function (e) { - e.meta = win.toJSON(); - }; - onlyText = $_5298ug0jjgweci0.isOnlyTextSelected(selection.getContent()); - anchorElm = $_5298ug0jjgweci0.getAnchorElement(editor); - data.text = initialText = $_5298ug0jjgweci0.getAnchorText(editor.selection, anchorElm); - data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; - if (anchorElm) { - data.target = dom.getAttrib(anchorElm, 'target'); - } else if ($_1b4wbxfvjjgwechi.hasDefaultLinkTarget(editor.settings)) { - data.target = $_1b4wbxfvjjgwechi.getDefaultLinkTarget(editor.settings); - } - if (value = dom.getAttrib(anchorElm, 'rel')) { - data.rel = value; - } - if (value = dom.getAttrib(anchorElm, 'class')) { - data.class = value; - } - if (value = dom.getAttrib(anchorElm, 'title')) { - data.title = value; - } - if (onlyText) { - textListCtrl = { - name: 'text', - type: 'textbox', - size: 40, - label: 'Text to display', - onchange: function () { - data.text = this.value(); - } - }; - } - if (linkList) { - linkListCtrl = { - type: 'listbox', - label: 'Link list', - values: buildListItems(linkList, function (item) { - item.value = editor.convertURL(item.value || item.url, 'href'); - }, [{ - text: 'None', - value: '' - }]), - onselect: linkListChangeHandler, - value: editor.convertURL(data.href, 'href'), - onPostRender: function () { - linkListCtrl = this; - } + var openDialog = function (editor) { + return function () { + Dialog.open(editor); }; - } - if ($_1b4wbxfvjjgwechi.shouldShowTargetList(editor.settings)) { - if ($_1b4wbxfvjjgwechi.getTargetList(editor.settings) === undefined) { - $_1b4wbxfvjjgwechi.setTargetList(editor, [ - { - text: 'None', - value: '' - }, - { - text: 'New window', - value: '_blank' - } - ]); - } - targetListCtrl = { - name: 'target', - type: 'listbox', - label: 'Target', - values: buildListItems($_1b4wbxfvjjgwechi.getTargetList(editor.settings)) - }; - } - if ($_1b4wbxfvjjgwechi.hasRelList(editor.settings)) { - relListCtrl = { - name: 'rel', - type: 'listbox', - label: 'Rel', - values: buildListItems($_1b4wbxfvjjgwechi.getRelList(editor.settings), function (item) { - if ($_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) { - item.value = $_5298ug0jjgweci0.toggleTargetRules(item.value, data.target === '_blank'); - } - }) - }; - } - if ($_1b4wbxfvjjgwechi.hasLinkClassList(editor.settings)) { - classListCtrl = { - name: 'class', - type: 'listbox', - label: 'Class', - values: buildListItems($_1b4wbxfvjjgwechi.getLinkClassList(editor.settings), function (item) { - if (item.value) { - item.textStyle = function () { - return editor.formatter.getCssText({ - inline: 'a', - classes: [item.value] - }); - }; - } - }) - }; - } - if ($_1b4wbxfvjjgwechi.shouldShowLinkTitle(editor.settings)) { - linkTitleCtrl = { - name: 'title', - type: 'textbox', - label: 'Title', - value: data.title + }; + var gotoSelectedLink = function (editor) { + return function () { + gotoLink(editor, getSelectedLink(editor)); }; - } - win = editor.windowManager.open({ - title: 'Insert link', - data: data, - body: [ - { - name: 'href', - type: 'filepicker', - filetype: 'file', - size: 40, - autofocus: true, - label: 'Url', - onchange: urlChange, - onkeyup: updateText, - onpaste: updateText, - onbeforecall: onBeforeCall - }, - textListCtrl, - linkTitleCtrl, - buildAnchorListControl(data.href), - linkListCtrl, - relListCtrl, - targetListCtrl, - classListCtrl - ], - onSubmit: function (e) { - var assumeExternalTargets = $_1b4wbxfvjjgwechi.assumeExternalTargets(editor.settings); - var insertLink = $_5298ug0jjgweci0.link(editor, attachState); - var removeLink = $_5298ug0jjgweci0.unlink(editor); - var resultData = global$4.extend({}, data, e.data); - var href = resultData.href; - if (!href) { - removeLink(); - return; - } - if (!onlyText || resultData.text === initialText) { - delete resultData.text; - } - if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) { - delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) { - if (state) { - resultData.href = 'mailto:' + href; - } - insertLink(resultData); - }); - return; - } - if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) { - delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) { - if (state) { - resultData.href = 'http://' + href; - } - insertLink(resultData); - }); - return; + }; + var leftClickedOnAHref = function (editor) { + return function (elm) { + var sel, rng, node; + if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) { + sel = editor.selection; + rng = sel.getRng(); + node = rng.startContainer; + if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) { + return true; + } } - insertLink(resultData); - } - }); - }; - var open$1 = function (editor) { - createLinkList(editor, showDialog); - }; - var $_dxaplrg2jjgweci6 = { open: open$1 }; - - var getLink = function (editor, elm) { - return editor.dom.getParent(elm, 'a[href]'); - }; - var getSelectedLink = function (editor) { - return getLink(editor, editor.selection.getStart()); - }; - var getHref = function (elm) { - var href = elm.getAttribute('data-mce-href'); - return href ? href : elm.getAttribute('href'); - }; - var isContextMenuVisible = function (editor) { - var contextmenu = editor.plugins.contextmenu; - return contextmenu ? contextmenu.isContextMenuVisible() : false; - }; - var hasOnlyAltModifier = function (e) { - return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false; - }; - var gotoLink = function (editor, a) { - if (a) { - var href = getHref(a); - if (/^#/.test(href)) { - var targetEl = editor.$(href); - if (targetEl.length) { - editor.selection.scrollIntoView(targetEl[0], true); + return false; + }; + }; + var setupGotoLinks = function (editor) { + editor.on('click', function (e) { + var link = getLink(editor, e.target); + if (link && global$1.metaKeyPressed(e)) { + e.preventDefault(); + gotoLink(editor, link); } - } else { - $_du0gebfwjjgwechl.open(a.href); - } - } - }; - var openDialog = function (editor) { - return function () { - $_dxaplrg2jjgweci6.open(editor); - }; - }; - var gotoSelectedLink = function (editor) { - return function () { - gotoLink(editor, getSelectedLink(editor)); - }; - }; - var leftClickedOnAHref = function (editor) { - return function (elm) { - var sel, rng, node; - if ($_1b4wbxfvjjgwechi.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && $_5298ug0jjgweci0.isLink(elm)) { - sel = editor.selection; - rng = sel.getRng(); - node = rng.startContainer; - if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) { - return true; + }); + editor.on('keydown', function (e) { + var link = getSelectedLink(editor); + if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) { + e.preventDefault(); + gotoLink(editor, link); } - } - return false; - }; - }; - var setupGotoLinks = function (editor) { - editor.on('click', function (e) { - var link = getLink(editor, e.target); - if (link && global$1.metaKeyPressed(e)) { - e.preventDefault(); - gotoLink(editor, link); - } - }); - editor.on('keydown', function (e) { - var link = getSelectedLink(editor); - if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) { - e.preventDefault(); - gotoLink(editor, link); - } - }); - }; - var toggleActiveState = function (editor) { - return function () { - var self = this; - editor.on('nodechange', function (e) { - self.active(!editor.readonly && !!$_5298ug0jjgweci0.getAnchorElement(editor, e.element)); }); }; - }; - var toggleViewLinkState = function (editor) { - return function () { - var self = this; - var toggleVisibility = function (e) { - if ($_5298ug0jjgweci0.hasLinks(e.parents)) { - self.show(); - } else { + var toggleActiveState = function (editor) { + return function () { + var self = this; + editor.on('nodechange', function (e) { + self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element)); + }); + }; + }; + var toggleViewLinkState = function (editor) { + return function () { + var self = this; + var toggleVisibility = function (e) { + if (Utils.hasLinks(e.parents)) { + self.show(); + } else { + self.hide(); + } + }; + if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) { self.hide(); } + editor.on('nodechange', toggleVisibility); + self.on('remove', function () { + editor.off('nodechange', toggleVisibility); + }); }; - if (!$_5298ug0jjgweci0.hasLinks(editor.dom.getParents(editor.selection.getStart()))) { - self.hide(); + }; + var Actions = { + openDialog: openDialog, + gotoSelectedLink: gotoSelectedLink, + leftClickedOnAHref: leftClickedOnAHref, + setupGotoLinks: setupGotoLinks, + toggleActiveState: toggleActiveState, + toggleViewLinkState: toggleViewLinkState + }; + + var register = function (editor) { + editor.addCommand('mceLink', Actions.openDialog(editor)); + }; + var Commands = { register: register }; + + var setup = function (editor) { + editor.addShortcut('Meta+K', '', Actions.openDialog(editor)); + }; + var Keyboard = { setup: setup }; + + var setupButtons = function (editor) { + editor.addButton('link', { + active: false, + icon: 'link', + tooltip: 'Insert/edit link', + onclick: Actions.openDialog(editor), + onpostrender: Actions.toggleActiveState(editor) + }); + editor.addButton('unlink', { + active: false, + icon: 'unlink', + tooltip: 'Remove link', + onclick: Utils.unlink(editor), + onpostrender: Actions.toggleActiveState(editor) + }); + if (editor.addContextToolbar) { + editor.addButton('openlink', { + icon: 'newtab', + tooltip: 'Open link', + onclick: Actions.gotoSelectedLink(editor) + }); } - editor.on('nodechange', toggleVisibility); - self.on('remove', function () { - editor.off('nodechange', toggleVisibility); + }; + var setupMenuItems = function (editor) { + editor.addMenuItem('openlink', { + text: 'Open link', + icon: 'newtab', + onclick: Actions.gotoSelectedLink(editor), + onPostRender: Actions.toggleViewLinkState(editor), + prependToContext: true + }); + editor.addMenuItem('link', { + icon: 'link', + text: 'Link', + shortcut: 'Meta+K', + onclick: Actions.openDialog(editor), + stateSelector: 'a[href]', + context: 'insert', + prependToContext: true + }); + editor.addMenuItem('unlink', { + icon: 'unlink', + text: 'Remove link', + onclick: Utils.unlink(editor), + stateSelector: 'a[href]' }); }; - }; - var $_8hceq8ftjjgweche = { - openDialog: openDialog, - gotoSelectedLink: gotoSelectedLink, - leftClickedOnAHref: leftClickedOnAHref, - setupGotoLinks: setupGotoLinks, - toggleActiveState: toggleActiveState, - toggleViewLinkState: toggleViewLinkState - }; - - var register = function (editor) { - editor.addCommand('mceLink', $_8hceq8ftjjgweche.openDialog(editor)); - }; - var $_bauc80fsjjgwechc = { register: register }; - - var setup = function (editor) { - editor.addShortcut('Meta+K', '', $_8hceq8ftjjgweche.openDialog(editor)); - }; - var $_49u4p1g5jjgwecie = { setup: setup }; + var setupContextToolbars = function (editor) { + if (editor.addContextToolbar) { + editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink'); + } + }; + var Controls = { + setupButtons: setupButtons, + setupMenuItems: setupMenuItems, + setupContextToolbars: setupContextToolbars + }; - var setupButtons = function (editor) { - editor.addButton('link', { - active: false, - icon: 'link', - tooltip: 'Insert/edit link', - onclick: $_8hceq8ftjjgweche.openDialog(editor), - onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor) + global.add('link', function (editor) { + Controls.setupButtons(editor); + Controls.setupMenuItems(editor); + Controls.setupContextToolbars(editor); + Actions.setupGotoLinks(editor); + Commands.register(editor); + Keyboard.setup(editor); }); - editor.addButton('unlink', { - active: false, - icon: 'unlink', - tooltip: 'Remove link', - onclick: $_5298ug0jjgweci0.unlink(editor), - onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor) - }); - if (editor.addContextToolbar) { - editor.addButton('openlink', { - icon: 'newtab', - tooltip: 'Open link', - onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor) - }); + function Plugin () { } - }; - var setupMenuItems = function (editor) { - editor.addMenuItem('openlink', { - text: 'Open link', - icon: 'newtab', - onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor), - onPostRender: $_8hceq8ftjjgweche.toggleViewLinkState(editor), - prependToContext: true - }); - editor.addMenuItem('link', { - icon: 'link', - text: 'Link', - shortcut: 'Meta+K', - onclick: $_8hceq8ftjjgweche.openDialog(editor), - stateSelector: 'a[href]', - context: 'insert', - prependToContext: true - }); - editor.addMenuItem('unlink', { - icon: 'unlink', - text: 'Remove link', - onclick: $_5298ug0jjgweci0.unlink(editor), - stateSelector: 'a[href]' - }); - }; - var setupContextToolbars = function (editor) { - if (editor.addContextToolbar) { - editor.addContextToolbar($_8hceq8ftjjgweche.leftClickedOnAHref(editor), 'openlink | link unlink'); - } - }; - var $_bn93cg6jjgwecif = { - setupButtons: setupButtons, - setupMenuItems: setupMenuItems, - setupContextToolbars: setupContextToolbars - }; + + return Plugin; - global.add('link', function (editor) { - $_bn93cg6jjgwecif.setupButtons(editor); - $_bn93cg6jjgwecif.setupMenuItems(editor); - $_bn93cg6jjgwecif.setupContextToolbars(editor); - $_8hceq8ftjjgweche.setupGotoLinks(editor); - $_bauc80fsjjgwechc.register(editor); - $_49u4p1g5jjgwecie.setup(editor); - }); - function Plugin () { - } - - return Plugin; - -}()); +}(window)); })();