wp/wp-includes/js/tinymce/plugins/link/plugin.js
changeset 7 cf61fcea0001
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
       
     1 (function () {
       
     2 var link = (function () {
       
     3   'use strict';
       
     4 
       
     5   var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
       
     6 
       
     7   var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');
       
     8 
       
     9   var assumeExternalTargets = function (editorSettings) {
       
    10     return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
       
    11   };
       
    12   var hasContextToolbar = function (editorSettings) {
       
    13     return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
       
    14   };
       
    15   var getLinkList = function (editorSettings) {
       
    16     return editorSettings.link_list;
       
    17   };
       
    18   var hasDefaultLinkTarget = function (editorSettings) {
       
    19     return typeof editorSettings.default_link_target === 'string';
       
    20   };
       
    21   var getDefaultLinkTarget = function (editorSettings) {
       
    22     return editorSettings.default_link_target;
       
    23   };
       
    24   var getTargetList = function (editorSettings) {
       
    25     return editorSettings.target_list;
       
    26   };
       
    27   var setTargetList = function (editor, list) {
       
    28     editor.settings.target_list = list;
       
    29   };
       
    30   var shouldShowTargetList = function (editorSettings) {
       
    31     return getTargetList(editorSettings) !== false;
       
    32   };
       
    33   var getRelList = function (editorSettings) {
       
    34     return editorSettings.rel_list;
       
    35   };
       
    36   var hasRelList = function (editorSettings) {
       
    37     return getRelList(editorSettings) !== undefined;
       
    38   };
       
    39   var getLinkClassList = function (editorSettings) {
       
    40     return editorSettings.link_class_list;
       
    41   };
       
    42   var hasLinkClassList = function (editorSettings) {
       
    43     return getLinkClassList(editorSettings) !== undefined;
       
    44   };
       
    45   var shouldShowLinkTitle = function (editorSettings) {
       
    46     return editorSettings.link_title !== false;
       
    47   };
       
    48   var allowUnsafeLinkTarget = function (editorSettings) {
       
    49     return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
       
    50   };
       
    51   var $_1b4wbxfvjjgwechi = {
       
    52     assumeExternalTargets: assumeExternalTargets,
       
    53     hasContextToolbar: hasContextToolbar,
       
    54     getLinkList: getLinkList,
       
    55     hasDefaultLinkTarget: hasDefaultLinkTarget,
       
    56     getDefaultLinkTarget: getDefaultLinkTarget,
       
    57     getTargetList: getTargetList,
       
    58     setTargetList: setTargetList,
       
    59     shouldShowTargetList: shouldShowTargetList,
       
    60     getRelList: getRelList,
       
    61     hasRelList: hasRelList,
       
    62     getLinkClassList: getLinkClassList,
       
    63     hasLinkClassList: hasLinkClassList,
       
    64     shouldShowLinkTitle: shouldShowLinkTitle,
       
    65     allowUnsafeLinkTarget: allowUnsafeLinkTarget
       
    66   };
       
    67 
       
    68   var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
       
    69 
       
    70   var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
       
    71 
       
    72   var appendClickRemove = function (link, evt) {
       
    73     document.body.appendChild(link);
       
    74     link.dispatchEvent(evt);
       
    75     document.body.removeChild(link);
       
    76   };
       
    77   var open$$1 = function (url) {
       
    78     if (!global$3.ie || global$3.ie > 10) {
       
    79       var link = document.createElement('a');
       
    80       link.target = '_blank';
       
    81       link.href = url;
       
    82       link.rel = 'noreferrer noopener';
       
    83       var evt = document.createEvent('MouseEvents');
       
    84       evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
       
    85       appendClickRemove(link, evt);
       
    86     } else {
       
    87       var win = window.open('', '_blank');
       
    88       if (win) {
       
    89         win.opener = null;
       
    90         var doc = win.document;
       
    91         doc.open();
       
    92         doc.write('<meta http-equiv="refresh" content="0; url=' + global$2.DOM.encode(url) + '">');
       
    93         doc.close();
       
    94       }
       
    95     }
       
    96   };
       
    97   var $_du0gebfwjjgwechl = { open: open$$1 };
       
    98 
       
    99   var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
       
   100 
       
   101   var toggleTargetRules = function (rel, isUnsafe) {
       
   102     var rules = ['noopener'];
       
   103     var newRel = rel ? rel.split(/\s+/) : [];
       
   104     var toString = function (rel) {
       
   105       return global$4.trim(rel.sort().join(' '));
       
   106     };
       
   107     var addTargetRules = function (rel) {
       
   108       rel = removeTargetRules(rel);
       
   109       return rel.length ? rel.concat(rules) : rules;
       
   110     };
       
   111     var removeTargetRules = function (rel) {
       
   112       return rel.filter(function (val) {
       
   113         return global$4.inArray(rules, val) === -1;
       
   114       });
       
   115     };
       
   116     newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);
       
   117     return newRel.length ? toString(newRel) : null;
       
   118   };
       
   119   var trimCaretContainers = function (text) {
       
   120     return text.replace(/\uFEFF/g, '');
       
   121   };
       
   122   var getAnchorElement = function (editor, selectedElm) {
       
   123     selectedElm = selectedElm || editor.selection.getNode();
       
   124     if (isImageFigure(selectedElm)) {
       
   125       return editor.dom.select('a[href]', selectedElm)[0];
       
   126     } else {
       
   127       return editor.dom.getParent(selectedElm, 'a[href]');
       
   128     }
       
   129   };
       
   130   var getAnchorText = function (selection, anchorElm) {
       
   131     var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });
       
   132     return trimCaretContainers(text);
       
   133   };
       
   134   var isLink = function (elm) {
       
   135     return elm && elm.nodeName === 'A' && elm.href;
       
   136   };
       
   137   var hasLinks = function (elements) {
       
   138     return global$4.grep(elements, isLink).length > 0;
       
   139   };
       
   140   var isOnlyTextSelected = function (html) {
       
   141     if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
       
   142       return false;
       
   143     }
       
   144     return true;
       
   145   };
       
   146   var isImageFigure = function (node) {
       
   147     return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className);
       
   148   };
       
   149   var link = function (editor, attachState) {
       
   150     return function (data) {
       
   151       editor.undoManager.transact(function () {
       
   152         var selectedElm = editor.selection.getNode();
       
   153         var anchorElm = getAnchorElement(editor, selectedElm);
       
   154         var linkAttrs = {
       
   155           href: data.href,
       
   156           target: data.target ? data.target : null,
       
   157           rel: data.rel ? data.rel : null,
       
   158           class: data.class ? data.class : null,
       
   159           title: data.title ? data.title : null
       
   160         };
       
   161         if (!$_1b4wbxfvjjgwechi.hasRelList(editor.settings) && $_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) {
       
   162           linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');
       
   163         }
       
   164         if (data.href === attachState.href) {
       
   165           attachState.attach();
       
   166           attachState = {};
       
   167         }
       
   168         if (anchorElm) {
       
   169           editor.focus();
       
   170           if (data.hasOwnProperty('text')) {
       
   171             if ('innerText' in anchorElm) {
       
   172               anchorElm.innerText = data.text;
       
   173             } else {
       
   174               anchorElm.textContent = data.text;
       
   175             }
       
   176           }
       
   177           editor.dom.setAttribs(anchorElm, linkAttrs);
       
   178           editor.selection.select(anchorElm);
       
   179           editor.undoManager.add();
       
   180         } else {
       
   181           if (isImageFigure(selectedElm)) {
       
   182             linkImageFigure(editor, selectedElm, linkAttrs);
       
   183           } else if (data.hasOwnProperty('text')) {
       
   184             editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));
       
   185           } else {
       
   186             editor.execCommand('mceInsertLink', false, linkAttrs);
       
   187           }
       
   188         }
       
   189       });
       
   190     };
       
   191   };
       
   192   var unlink = function (editor) {
       
   193     return function () {
       
   194       editor.undoManager.transact(function () {
       
   195         var node = editor.selection.getNode();
       
   196         if (isImageFigure(node)) {
       
   197           unlinkImageFigure(editor, node);
       
   198         } else {
       
   199           editor.execCommand('unlink');
       
   200         }
       
   201       });
       
   202     };
       
   203   };
       
   204   var unlinkImageFigure = function (editor, fig) {
       
   205     var a, img;
       
   206     img = editor.dom.select('img', fig)[0];
       
   207     if (img) {
       
   208       a = editor.dom.getParents(img, 'a[href]', fig)[0];
       
   209       if (a) {
       
   210         a.parentNode.insertBefore(img, a);
       
   211         editor.dom.remove(a);
       
   212       }
       
   213     }
       
   214   };
       
   215   var linkImageFigure = function (editor, fig, attrs) {
       
   216     var a, img;
       
   217     img = editor.dom.select('img', fig)[0];
       
   218     if (img) {
       
   219       a = editor.dom.create('a', attrs);
       
   220       img.parentNode.insertBefore(a, img);
       
   221       a.appendChild(img);
       
   222     }
       
   223   };
       
   224   var $_5298ug0jjgweci0 = {
       
   225     link: link,
       
   226     unlink: unlink,
       
   227     isLink: isLink,
       
   228     hasLinks: hasLinks,
       
   229     isOnlyTextSelected: isOnlyTextSelected,
       
   230     getAnchorElement: getAnchorElement,
       
   231     getAnchorText: getAnchorText,
       
   232     toggleTargetRules: toggleTargetRules
       
   233   };
       
   234 
       
   235   var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');
       
   236 
       
   237   var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');
       
   238 
       
   239   var attachState = {};
       
   240   var createLinkList = function (editor, callback) {
       
   241     var linkList = $_1b4wbxfvjjgwechi.getLinkList(editor.settings);
       
   242     if (typeof linkList === 'string') {
       
   243       global$6.send({
       
   244         url: linkList,
       
   245         success: function (text) {
       
   246           callback(editor, JSON.parse(text));
       
   247         }
       
   248       });
       
   249     } else if (typeof linkList === 'function') {
       
   250       linkList(function (list) {
       
   251         callback(editor, list);
       
   252       });
       
   253     } else {
       
   254       callback(editor, linkList);
       
   255     }
       
   256   };
       
   257   var buildListItems = function (inputList, itemCallback, startItems) {
       
   258     var appendItems = function (values, output) {
       
   259       output = output || [];
       
   260       global$4.each(values, function (item) {
       
   261         var menuItem = { text: item.text || item.title };
       
   262         if (item.menu) {
       
   263           menuItem.menu = appendItems(item.menu);
       
   264         } else {
       
   265           menuItem.value = item.value;
       
   266           if (itemCallback) {
       
   267             itemCallback(menuItem);
       
   268           }
       
   269         }
       
   270         output.push(menuItem);
       
   271       });
       
   272       return output;
       
   273     };
       
   274     return appendItems(inputList, startItems || []);
       
   275   };
       
   276   var delayedConfirm = function (editor, message, callback) {
       
   277     var rng = editor.selection.getRng();
       
   278     global$5.setEditorTimeout(editor, function () {
       
   279       editor.windowManager.confirm(message, function (state) {
       
   280         editor.selection.setRng(rng);
       
   281         callback(state);
       
   282       });
       
   283     });
       
   284   };
       
   285   var showDialog = function (editor, linkList) {
       
   286     var data = {};
       
   287     var selection = editor.selection;
       
   288     var dom = editor.dom;
       
   289     var anchorElm, initialText;
       
   290     var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;
       
   291     var linkListChangeHandler = function (e) {
       
   292       var textCtrl = win.find('#text');
       
   293       if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {
       
   294         textCtrl.value(e.control.text());
       
   295       }
       
   296       win.find('#href').value(e.control.value());
       
   297     };
       
   298     var buildAnchorListControl = function (url) {
       
   299       var anchorList = [];
       
   300       global$4.each(editor.dom.select('a:not([href])'), function (anchor) {
       
   301         var id = anchor.name || anchor.id;
       
   302         if (id) {
       
   303           anchorList.push({
       
   304             text: id,
       
   305             value: '#' + id,
       
   306             selected: url.indexOf('#' + id) !== -1
       
   307           });
       
   308         }
       
   309       });
       
   310       if (anchorList.length) {
       
   311         anchorList.unshift({
       
   312           text: 'None',
       
   313           value: ''
       
   314         });
       
   315         return {
       
   316           name: 'anchor',
       
   317           type: 'listbox',
       
   318           label: 'Anchors',
       
   319           values: anchorList,
       
   320           onselect: linkListChangeHandler
       
   321         };
       
   322       }
       
   323     };
       
   324     var updateText = function () {
       
   325       if (!initialText && onlyText && !data.text) {
       
   326         this.parent().parent().find('#text')[0].value(this.value());
       
   327       }
       
   328     };
       
   329     var urlChange = function (e) {
       
   330       var meta = e.meta || {};
       
   331       if (linkListCtrl) {
       
   332         linkListCtrl.value(editor.convertURL(this.value(), 'href'));
       
   333       }
       
   334       global$4.each(e.meta, function (value, key) {
       
   335         var inp = win.find('#' + key);
       
   336         if (key === 'text') {
       
   337           if (initialText.length === 0) {
       
   338             inp.value(value);
       
   339             data.text = value;
       
   340           }
       
   341         } else {
       
   342           inp.value(value);
       
   343         }
       
   344       });
       
   345       if (meta.attach) {
       
   346         attachState = {
       
   347           href: this.value(),
       
   348           attach: meta.attach
       
   349         };
       
   350       }
       
   351       if (!meta.text) {
       
   352         updateText.call(this);
       
   353       }
       
   354     };
       
   355     var onBeforeCall = function (e) {
       
   356       e.meta = win.toJSON();
       
   357     };
       
   358     onlyText = $_5298ug0jjgweci0.isOnlyTextSelected(selection.getContent());
       
   359     anchorElm = $_5298ug0jjgweci0.getAnchorElement(editor);
       
   360     data.text = initialText = $_5298ug0jjgweci0.getAnchorText(editor.selection, anchorElm);
       
   361     data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';
       
   362     if (anchorElm) {
       
   363       data.target = dom.getAttrib(anchorElm, 'target');
       
   364     } else if ($_1b4wbxfvjjgwechi.hasDefaultLinkTarget(editor.settings)) {
       
   365       data.target = $_1b4wbxfvjjgwechi.getDefaultLinkTarget(editor.settings);
       
   366     }
       
   367     if (value = dom.getAttrib(anchorElm, 'rel')) {
       
   368       data.rel = value;
       
   369     }
       
   370     if (value = dom.getAttrib(anchorElm, 'class')) {
       
   371       data.class = value;
       
   372     }
       
   373     if (value = dom.getAttrib(anchorElm, 'title')) {
       
   374       data.title = value;
       
   375     }
       
   376     if (onlyText) {
       
   377       textListCtrl = {
       
   378         name: 'text',
       
   379         type: 'textbox',
       
   380         size: 40,
       
   381         label: 'Text to display',
       
   382         onchange: function () {
       
   383           data.text = this.value();
       
   384         }
       
   385       };
       
   386     }
       
   387     if (linkList) {
       
   388       linkListCtrl = {
       
   389         type: 'listbox',
       
   390         label: 'Link list',
       
   391         values: buildListItems(linkList, function (item) {
       
   392           item.value = editor.convertURL(item.value || item.url, 'href');
       
   393         }, [{
       
   394             text: 'None',
       
   395             value: ''
       
   396           }]),
       
   397         onselect: linkListChangeHandler,
       
   398         value: editor.convertURL(data.href, 'href'),
       
   399         onPostRender: function () {
       
   400           linkListCtrl = this;
       
   401         }
       
   402       };
       
   403     }
       
   404     if ($_1b4wbxfvjjgwechi.shouldShowTargetList(editor.settings)) {
       
   405       if ($_1b4wbxfvjjgwechi.getTargetList(editor.settings) === undefined) {
       
   406         $_1b4wbxfvjjgwechi.setTargetList(editor, [
       
   407           {
       
   408             text: 'None',
       
   409             value: ''
       
   410           },
       
   411           {
       
   412             text: 'New window',
       
   413             value: '_blank'
       
   414           }
       
   415         ]);
       
   416       }
       
   417       targetListCtrl = {
       
   418         name: 'target',
       
   419         type: 'listbox',
       
   420         label: 'Target',
       
   421         values: buildListItems($_1b4wbxfvjjgwechi.getTargetList(editor.settings))
       
   422       };
       
   423     }
       
   424     if ($_1b4wbxfvjjgwechi.hasRelList(editor.settings)) {
       
   425       relListCtrl = {
       
   426         name: 'rel',
       
   427         type: 'listbox',
       
   428         label: 'Rel',
       
   429         values: buildListItems($_1b4wbxfvjjgwechi.getRelList(editor.settings), function (item) {
       
   430           if ($_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) {
       
   431             item.value = $_5298ug0jjgweci0.toggleTargetRules(item.value, data.target === '_blank');
       
   432           }
       
   433         })
       
   434       };
       
   435     }
       
   436     if ($_1b4wbxfvjjgwechi.hasLinkClassList(editor.settings)) {
       
   437       classListCtrl = {
       
   438         name: 'class',
       
   439         type: 'listbox',
       
   440         label: 'Class',
       
   441         values: buildListItems($_1b4wbxfvjjgwechi.getLinkClassList(editor.settings), function (item) {
       
   442           if (item.value) {
       
   443             item.textStyle = function () {
       
   444               return editor.formatter.getCssText({
       
   445                 inline: 'a',
       
   446                 classes: [item.value]
       
   447               });
       
   448             };
       
   449           }
       
   450         })
       
   451       };
       
   452     }
       
   453     if ($_1b4wbxfvjjgwechi.shouldShowLinkTitle(editor.settings)) {
       
   454       linkTitleCtrl = {
       
   455         name: 'title',
       
   456         type: 'textbox',
       
   457         label: 'Title',
       
   458         value: data.title
       
   459       };
       
   460     }
       
   461     win = editor.windowManager.open({
       
   462       title: 'Insert link',
       
   463       data: data,
       
   464       body: [
       
   465         {
       
   466           name: 'href',
       
   467           type: 'filepicker',
       
   468           filetype: 'file',
       
   469           size: 40,
       
   470           autofocus: true,
       
   471           label: 'Url',
       
   472           onchange: urlChange,
       
   473           onkeyup: updateText,
       
   474           onpaste: updateText,
       
   475           onbeforecall: onBeforeCall
       
   476         },
       
   477         textListCtrl,
       
   478         linkTitleCtrl,
       
   479         buildAnchorListControl(data.href),
       
   480         linkListCtrl,
       
   481         relListCtrl,
       
   482         targetListCtrl,
       
   483         classListCtrl
       
   484       ],
       
   485       onSubmit: function (e) {
       
   486         var assumeExternalTargets = $_1b4wbxfvjjgwechi.assumeExternalTargets(editor.settings);
       
   487         var insertLink = $_5298ug0jjgweci0.link(editor, attachState);
       
   488         var removeLink = $_5298ug0jjgweci0.unlink(editor);
       
   489         var resultData = global$4.extend({}, data, e.data);
       
   490         var href = resultData.href;
       
   491         if (!href) {
       
   492           removeLink();
       
   493           return;
       
   494         }
       
   495         if (!onlyText || resultData.text === initialText) {
       
   496           delete resultData.text;
       
   497         }
       
   498         if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {
       
   499           delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {
       
   500             if (state) {
       
   501               resultData.href = 'mailto:' + href;
       
   502             }
       
   503             insertLink(resultData);
       
   504           });
       
   505           return;
       
   506         }
       
   507         if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) {
       
   508           delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {
       
   509             if (state) {
       
   510               resultData.href = 'http://' + href;
       
   511             }
       
   512             insertLink(resultData);
       
   513           });
       
   514           return;
       
   515         }
       
   516         insertLink(resultData);
       
   517       }
       
   518     });
       
   519   };
       
   520   var open$1 = function (editor) {
       
   521     createLinkList(editor, showDialog);
       
   522   };
       
   523   var $_dxaplrg2jjgweci6 = { open: open$1 };
       
   524 
       
   525   var getLink = function (editor, elm) {
       
   526     return editor.dom.getParent(elm, 'a[href]');
       
   527   };
       
   528   var getSelectedLink = function (editor) {
       
   529     return getLink(editor, editor.selection.getStart());
       
   530   };
       
   531   var getHref = function (elm) {
       
   532     var href = elm.getAttribute('data-mce-href');
       
   533     return href ? href : elm.getAttribute('href');
       
   534   };
       
   535   var isContextMenuVisible = function (editor) {
       
   536     var contextmenu = editor.plugins.contextmenu;
       
   537     return contextmenu ? contextmenu.isContextMenuVisible() : false;
       
   538   };
       
   539   var hasOnlyAltModifier = function (e) {
       
   540     return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
       
   541   };
       
   542   var gotoLink = function (editor, a) {
       
   543     if (a) {
       
   544       var href = getHref(a);
       
   545       if (/^#/.test(href)) {
       
   546         var targetEl = editor.$(href);
       
   547         if (targetEl.length) {
       
   548           editor.selection.scrollIntoView(targetEl[0], true);
       
   549         }
       
   550       } else {
       
   551         $_du0gebfwjjgwechl.open(a.href);
       
   552       }
       
   553     }
       
   554   };
       
   555   var openDialog = function (editor) {
       
   556     return function () {
       
   557       $_dxaplrg2jjgweci6.open(editor);
       
   558     };
       
   559   };
       
   560   var gotoSelectedLink = function (editor) {
       
   561     return function () {
       
   562       gotoLink(editor, getSelectedLink(editor));
       
   563     };
       
   564   };
       
   565   var leftClickedOnAHref = function (editor) {
       
   566     return function (elm) {
       
   567       var sel, rng, node;
       
   568       if ($_1b4wbxfvjjgwechi.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && $_5298ug0jjgweci0.isLink(elm)) {
       
   569         sel = editor.selection;
       
   570         rng = sel.getRng();
       
   571         node = rng.startContainer;
       
   572         if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
       
   573           return true;
       
   574         }
       
   575       }
       
   576       return false;
       
   577     };
       
   578   };
       
   579   var setupGotoLinks = function (editor) {
       
   580     editor.on('click', function (e) {
       
   581       var link = getLink(editor, e.target);
       
   582       if (link && global$1.metaKeyPressed(e)) {
       
   583         e.preventDefault();
       
   584         gotoLink(editor, link);
       
   585       }
       
   586     });
       
   587     editor.on('keydown', function (e) {
       
   588       var link = getSelectedLink(editor);
       
   589       if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
       
   590         e.preventDefault();
       
   591         gotoLink(editor, link);
       
   592       }
       
   593     });
       
   594   };
       
   595   var toggleActiveState = function (editor) {
       
   596     return function () {
       
   597       var self = this;
       
   598       editor.on('nodechange', function (e) {
       
   599         self.active(!editor.readonly && !!$_5298ug0jjgweci0.getAnchorElement(editor, e.element));
       
   600       });
       
   601     };
       
   602   };
       
   603   var toggleViewLinkState = function (editor) {
       
   604     return function () {
       
   605       var self = this;
       
   606       var toggleVisibility = function (e) {
       
   607         if ($_5298ug0jjgweci0.hasLinks(e.parents)) {
       
   608           self.show();
       
   609         } else {
       
   610           self.hide();
       
   611         }
       
   612       };
       
   613       if (!$_5298ug0jjgweci0.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {
       
   614         self.hide();
       
   615       }
       
   616       editor.on('nodechange', toggleVisibility);
       
   617       self.on('remove', function () {
       
   618         editor.off('nodechange', toggleVisibility);
       
   619       });
       
   620     };
       
   621   };
       
   622   var $_8hceq8ftjjgweche = {
       
   623     openDialog: openDialog,
       
   624     gotoSelectedLink: gotoSelectedLink,
       
   625     leftClickedOnAHref: leftClickedOnAHref,
       
   626     setupGotoLinks: setupGotoLinks,
       
   627     toggleActiveState: toggleActiveState,
       
   628     toggleViewLinkState: toggleViewLinkState
       
   629   };
       
   630 
       
   631   var register = function (editor) {
       
   632     editor.addCommand('mceLink', $_8hceq8ftjjgweche.openDialog(editor));
       
   633   };
       
   634   var $_bauc80fsjjgwechc = { register: register };
       
   635 
       
   636   var setup = function (editor) {
       
   637     editor.addShortcut('Meta+K', '', $_8hceq8ftjjgweche.openDialog(editor));
       
   638   };
       
   639   var $_49u4p1g5jjgwecie = { setup: setup };
       
   640 
       
   641   var setupButtons = function (editor) {
       
   642     editor.addButton('link', {
       
   643       active: false,
       
   644       icon: 'link',
       
   645       tooltip: 'Insert/edit link',
       
   646       onclick: $_8hceq8ftjjgweche.openDialog(editor),
       
   647       onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor)
       
   648     });
       
   649     editor.addButton('unlink', {
       
   650       active: false,
       
   651       icon: 'unlink',
       
   652       tooltip: 'Remove link',
       
   653       onclick: $_5298ug0jjgweci0.unlink(editor),
       
   654       onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor)
       
   655     });
       
   656     if (editor.addContextToolbar) {
       
   657       editor.addButton('openlink', {
       
   658         icon: 'newtab',
       
   659         tooltip: 'Open link',
       
   660         onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor)
       
   661       });
       
   662     }
       
   663   };
       
   664   var setupMenuItems = function (editor) {
       
   665     editor.addMenuItem('openlink', {
       
   666       text: 'Open link',
       
   667       icon: 'newtab',
       
   668       onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor),
       
   669       onPostRender: $_8hceq8ftjjgweche.toggleViewLinkState(editor),
       
   670       prependToContext: true
       
   671     });
       
   672     editor.addMenuItem('link', {
       
   673       icon: 'link',
       
   674       text: 'Link',
       
   675       shortcut: 'Meta+K',
       
   676       onclick: $_8hceq8ftjjgweche.openDialog(editor),
       
   677       stateSelector: 'a[href]',
       
   678       context: 'insert',
       
   679       prependToContext: true
       
   680     });
       
   681     editor.addMenuItem('unlink', {
       
   682       icon: 'unlink',
       
   683       text: 'Remove link',
       
   684       onclick: $_5298ug0jjgweci0.unlink(editor),
       
   685       stateSelector: 'a[href]'
       
   686     });
       
   687   };
       
   688   var setupContextToolbars = function (editor) {
       
   689     if (editor.addContextToolbar) {
       
   690       editor.addContextToolbar($_8hceq8ftjjgweche.leftClickedOnAHref(editor), 'openlink | link unlink');
       
   691     }
       
   692   };
       
   693   var $_bn93cg6jjgwecif = {
       
   694     setupButtons: setupButtons,
       
   695     setupMenuItems: setupMenuItems,
       
   696     setupContextToolbars: setupContextToolbars
       
   697   };
       
   698 
       
   699   global.add('link', function (editor) {
       
   700     $_bn93cg6jjgwecif.setupButtons(editor);
       
   701     $_bn93cg6jjgwecif.setupMenuItems(editor);
       
   702     $_bn93cg6jjgwecif.setupContextToolbars(editor);
       
   703     $_8hceq8ftjjgweche.setupGotoLinks(editor);
       
   704     $_bauc80fsjjgwechc.register(editor);
       
   705     $_49u4p1g5jjgwecie.setup(editor);
       
   706   });
       
   707   function Plugin () {
       
   708   }
       
   709 
       
   710   return Plugin;
       
   711 
       
   712 }());
       
   713 })();