Rev 637 | Rev 759 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 637 | Rev 679 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. |
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. |
3 | * Licensed under the LGPL or a commercial license. |
3 | * Licensed under the LGPL or a commercial license. |
4 | * For LGPL see License.txt in the project root for license information. |
4 | * For LGPL see License.txt in the project root for license information. |
5 | * For commercial licenses see https://www.tiny.cloud/ |
5 | * For commercial licenses see https://www.tiny.cloud/ |
6 | * |
6 | * |
7 | * Version: 5.9.2 (2021-09-08) |
7 | * Version: 5.10.2 (2021-11-17) |
8 | */ |
8 | */ |
9 | (function () { |
9 | (function () { |
10 | 'use strict'; |
10 | 'use strict'; |
11 | 11 | ||
12 | var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
12 | var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
13 | 13 | ||
14 | var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK'); |
14 | var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK'); |
15 | 15 | ||
16 | var typeOf = function (x) { |
16 | var typeOf = function (x) { |
17 | var t = typeof x; |
17 | var t = typeof x; |
18 | if (x === null) { |
18 | if (x === null) { |
19 | return 'null'; |
19 | return 'null'; |
Line 263... | Line 263... | ||
263 | }; |
263 | }; |
264 | var getDefaultLinkProtocol = function (editor) { |
264 | var getDefaultLinkProtocol = function (editor) { |
265 | return editor.getParam('link_default_protocol', 'http', 'string'); |
265 | return editor.getParam('link_default_protocol', 'http', 'string'); |
266 | }; |
266 | }; |
267 | 267 | ||
268 | var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
268 | var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
269 | 269 | ||
270 | var getValue = function (item) { |
270 | var getValue = function (item) { |
271 | return isString(item.value) ? item.value : ''; |
271 | return isString(item.value) ? item.value : ''; |
272 | }; |
272 | }; |
273 | var getText = function (item) { |
273 | var getText = function (item) { |
Line 279... | Line 279... | ||
279 | return ''; |
279 | return ''; |
280 | } |
280 | } |
281 | }; |
281 | }; |
282 | var sanitizeList = function (list, extractValue) { |
282 | var sanitizeList = function (list, extractValue) { |
283 | var out = []; |
283 | var out = []; |
284 | global$4.each(list, function (item) { |
284 | global$5.each(list, function (item) { |
285 | var text = getText(item); |
285 | var text = getText(item); |
286 | if (item.menu !== undefined) { |
286 | if (item.menu !== undefined) { |
287 | var items = sanitizeList(item.menu, extractValue); |
287 | var items = sanitizeList(item.menu, extractValue); |
288 | out.push({ |
288 | out.push({ |
289 | text: text, |
289 | text: text, |
Line 374... | Line 374... | ||
374 | }; |
374 | }; |
375 | var hasNonNullableKey = function (obj, key) { |
375 | var hasNonNullableKey = function (obj, key) { |
376 | return has(obj, key) && obj[key] !== undefined && obj[key] !== null; |
376 | return has(obj, key) && obj[key] !== undefined && obj[key] !== null; |
377 | }; |
377 | }; |
378 | 378 | ||
379 | var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); |
379 | var global$4 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); |
- | 380 | ||
- | 381 | var global$3 = tinymce.util.Tools.resolve('tinymce.util.URI'); |
|
380 | 382 | ||
381 | var isAnchor = function (elm) { |
383 | var isAnchor = function (elm) { |
382 | return elm && elm.nodeName.toLowerCase() === 'a'; |
384 | return elm && elm.nodeName.toLowerCase() === 'a'; |
383 | }; |
385 | }; |
384 | var isLink = function (elm) { |
386 | var isLink = function (elm) { |
Line 387... | Line 389... | ||
387 | var collectNodesInRange = function (rng, predicate) { |
389 | var collectNodesInRange = function (rng, predicate) { |
388 | if (rng.collapsed) { |
390 | if (rng.collapsed) { |
389 | return []; |
391 | return []; |
390 | } else { |
392 | } else { |
391 | var contents = rng.cloneContents(); |
393 | var contents = rng.cloneContents(); |
392 | var walker = new global$3(contents.firstChild, contents); |
394 | var walker = new global$4(contents.firstChild, contents); |
393 | var elements = []; |
395 | var elements = []; |
394 | var current = contents.firstChild; |
396 | var current = contents.firstChild; |
395 | do { |
397 | do { |
396 | if (predicate(current)) { |
398 | if (predicate(current)) { |
397 | elements.push(current); |
399 | elements.push(current); |
Line 409... | Line 411... | ||
409 | }; |
411 | }; |
410 | var applyRelTargetRules = function (rel, isUnsafe) { |
412 | var applyRelTargetRules = function (rel, isUnsafe) { |
411 | var rules = ['noopener']; |
413 | var rules = ['noopener']; |
412 | var rels = rel ? rel.split(/\s+/) : []; |
414 | var rels = rel ? rel.split(/\s+/) : []; |
413 | var toString = function (rels) { |
415 | var toString = function (rels) { |
414 | return global$4.trim(rels.sort().join(' ')); |
416 | return global$5.trim(rels.sort().join(' ')); |
415 | }; |
417 | }; |
416 | var addTargetRules = function (rels) { |
418 | var addTargetRules = function (rels) { |
417 | rels = removeTargetRules(rels); |
419 | rels = removeTargetRules(rels); |
418 | return rels.length > 0 ? rels.concat(rules) : rules; |
420 | return rels.length > 0 ? rels.concat(rules) : rules; |
419 | }; |
421 | }; |
420 | var removeTargetRules = function (rels) { |
422 | var removeTargetRules = function (rels) { |
421 | return rels.filter(function (val) { |
423 | return rels.filter(function (val) { |
422 | return global$4.inArray(rules, val) === -1; |
424 | return global$5.inArray(rules, val) === -1; |
423 | }); |
425 | }); |
424 | }; |
426 | }; |
425 | var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels); |
427 | var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels); |
426 | return newRels.length > 0 ? toString(newRels) : ''; |
428 | return newRels.length > 0 ? toString(newRels) : ''; |
427 | }; |
429 | }; |
Line 439... | Line 441... | ||
439 | var getAnchorText = function (selection, anchorElm) { |
441 | var getAnchorText = function (selection, anchorElm) { |
440 | var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); |
442 | var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); |
441 | return trimCaretContainers(text); |
443 | return trimCaretContainers(text); |
442 | }; |
444 | }; |
443 | var hasLinks = function (elements) { |
445 | var hasLinks = function (elements) { |
444 | return global$4.grep(elements, isLink).length > 0; |
446 | return global$5.grep(elements, isLink).length > 0; |
445 | }; |
447 | }; |
446 | var hasLinksInSelection = function (rng) { |
448 | var hasLinksInSelection = function (rng) { |
447 | return collectNodesInRange(rng, isLink).length > 0; |
449 | return collectNodesInRange(rng, isLink).length > 0; |
448 | }; |
450 | }; |
449 | var isOnlyTextSelected = function (editor) { |
451 | var isOnlyTextSelected = function (editor) { |
Line 565... | Line 567... | ||
565 | title: title.getOrNull() |
567 | title: title.getOrNull() |
566 | }, function (v, _k) { |
568 | }, function (v, _k) { |
567 | return isNull(v) === false; |
569 | return isNull(v) === false; |
568 | }); |
570 | }); |
569 | }; |
571 | }; |
- | 572 | var sanitizeData = function (editor, data) { |
|
- | 573 | var href = data.href; |
|
- | 574 | return __assign(__assign({}, data), { href: global$3.isDomSafe(href, 'a', editor.settings) ? href : '' }); |
|
- | 575 | }; |
|
570 | var link = function (editor, attachState, data) { |
576 | var link = function (editor, attachState, data) { |
- | 577 | var sanitizedData = sanitizeData(editor, data); |
|
571 | editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(data)) : linkDomMutation(editor, attachState, data); |
578 | editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData); |
572 | }; |
579 | }; |
573 | var unlink = function (editor) { |
580 | var unlink = function (editor) { |
574 | editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor); |
581 | editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor); |
575 | }; |
582 | }; |
576 | var unlinkImageFigure = function (editor, fig) { |
583 | var unlinkImageFigure = function (editor, fig) { |
Line 1060... | Line 1067... | ||
1060 | }; |
1067 | }; |
1061 | }; |
1068 | }; |
1062 | var setupGotoLinks = function (editor) { |
1069 | var setupGotoLinks = function (editor) { |
1063 | editor.on('click', function (e) { |
1070 | editor.on('click', function (e) { |
1064 | var link = getLink(editor, e.target); |
1071 | var link = getLink(editor, e.target); |
1065 | if (link && global$5.metaKeyPressed(e)) { |
1072 | if (link && global$6.metaKeyPressed(e)) { |
1066 | e.preventDefault(); |
1073 | e.preventDefault(); |
1067 | gotoLink(editor, link); |
1074 | gotoLink(editor, link); |
1068 | } |
1075 | } |
1069 | }); |
1076 | }); |
1070 | editor.on('keydown', function (e) { |
1077 | editor.on('keydown', function (e) { |
Line 1268... | Line 1275... | ||
1268 | ] |
1275 | ] |
1269 | }); |
1276 | }); |
1270 | }; |
1277 | }; |
1271 | 1278 | ||
1272 | function Plugin () { |
1279 | function Plugin () { |
1273 | global$6.add('link', function (editor) { |
1280 | global$7.add('link', function (editor) { |
1274 | setupButtons(editor); |
1281 | setupButtons(editor); |
1275 | setupMenuItems(editor); |
1282 | setupMenuItems(editor); |
1276 | setupContextMenu(editor); |
1283 | setupContextMenu(editor); |
1277 | setupContextToolbars(editor); |
1284 | setupContextToolbars(editor); |
1278 | setupGotoLinks(editor); |
1285 | setupGotoLinks(editor); |