/wp-content/plugins/tinymce-advanced/mce/link/plugin.js

https://bitbucket.org/carloskikea/helpet · JavaScript · 713 lines · 695 code · 18 blank · 0 comment · 110 complexity · 7ac5c20b3ba9d38527ddd23cede56ca4 MD5 · raw file

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