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$1 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
12 | var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
Line 36... | Line 36... | ||
36 | }; |
36 | }; |
37 | var getDefaultLinkProtocol = function (editor) { |
37 | var getDefaultLinkProtocol = function (editor) { |
38 | return editor.getParam('link_default_protocol', 'http', 'string'); |
38 | return editor.getParam('link_default_protocol', 'http', 'string'); |
39 | }; |
39 | }; |
40 | 40 | ||
41 | var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) { |
41 | var rangeEqualsBracketOrSpace = function (rangeString) { |
42 | return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160; |
42 | return /^[(\[{ \u00a0]$/.test(rangeString); |
43 | }; |
43 | }; |
- | 44 | var isTextNode = function (node) { |
|
- | 45 | return node.nodeType === 3; |
|
- | 46 | }; |
|
- | 47 | var isElement = function (node) { |
|
- | 48 | return node.nodeType === 1; |
|
- | 49 | }; |
|
44 | var handleEclipse = function (editor) { |
50 | var handleBracket = function (editor) { |
45 | parseCurrentLine(editor, -1, '('); |
51 | return parseCurrentLine(editor, -1); |
46 | }; |
52 | }; |
47 | var handleSpacebar = function (editor) { |
53 | var handleSpacebar = function (editor) { |
48 | parseCurrentLine(editor, 0, ''); |
54 | return parseCurrentLine(editor, 0); |
49 | }; |
55 | }; |
50 | var handleEnter = function (editor) { |
56 | var handleEnter = function (editor) { |
51 | parseCurrentLine(editor, -1, ''); |
57 | return parseCurrentLine(editor, -1); |
52 | }; |
58 | }; |
53 | var scopeIndex = function (container, index) { |
59 | var scopeIndex = function (container, index) { |
54 | if (index < 0) { |
60 | if (index < 0) { |
55 | index = 0; |
61 | index = 0; |
56 | } |
62 | } |
57 | if (container.nodeType === 3) { |
63 | if (isTextNode(container)) { |
58 | var len = container.data.length; |
64 | var len = container.data.length; |
59 | if (index > len) { |
65 | if (index > len) { |
60 | index = len; |
66 | index = len; |
61 | } |
67 | } |
62 | } |
68 | } |
63 | return index; |
69 | return index; |
64 | }; |
70 | }; |
65 | var setStart = function (rng, container, offset) { |
71 | var setStart = function (rng, container, offset) { |
66 | if (container.nodeType !== 1 || container.hasChildNodes()) { |
72 | if (!isElement(container) || container.hasChildNodes()) { |
67 | rng.setStart(container, scopeIndex(container, offset)); |
73 | rng.setStart(container, scopeIndex(container, offset)); |
68 | } else { |
74 | } else { |
69 | rng.setStartBefore(container); |
75 | rng.setStartBefore(container); |
70 | } |
76 | } |
71 | }; |
77 | }; |
72 | var setEnd = function (rng, container, offset) { |
78 | var setEnd = function (rng, container, offset) { |
73 | if (container.nodeType !== 1 || container.hasChildNodes()) { |
79 | if (!isElement(container) || container.hasChildNodes()) { |
74 | rng.setEnd(container, scopeIndex(container, offset)); |
80 | rng.setEnd(container, scopeIndex(container, offset)); |
75 | } else { |
81 | } else { |
76 | rng.setEndAfter(container); |
82 | rng.setEndAfter(container); |
77 | } |
83 | } |
78 | }; |
84 | }; |
Line 80... | Line 86... | ||
80 | return /^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(url); |
86 | return /^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(url); |
81 | }; |
87 | }; |
82 | var isPunctuation = function (char) { |
88 | var isPunctuation = function (char) { |
83 | return /[?!,.;:]/.test(char); |
89 | return /[?!,.;:]/.test(char); |
84 | }; |
90 | }; |
85 | var parseCurrentLine = function (editor, endOffset, delimiter) { |
91 | var parseCurrentLine = function (editor, endOffset) { |
86 | var end, endContainer, bookmark, text, prev, len, rngText; |
92 | var end, endContainer, bookmark, text, prev, len, rngText; |
87 | var autoLinkPattern = getAutoLinkPattern(editor); |
93 | var autoLinkPattern = getAutoLinkPattern(editor); |
88 | var defaultLinkTarget = getDefaultLinkTarget(editor); |
94 | var defaultLinkTarget = getDefaultLinkTarget(editor); |
89 | if (editor.selection.getNode().tagName === 'A') { |
95 | if (editor.dom.getParent(editor.selection.getNode(), 'a[href]') !== null) { |
90 | return; |
96 | return; |
91 | } |
97 | } |
92 | var rng = editor.selection.getRng().cloneRange(); |
98 | var rng = editor.selection.getRng().cloneRange(); |
93 | if (rng.startOffset < 5) { |
99 | if (rng.startOffset < 5) { |
94 | prev = rng.endContainer.previousSibling; |
100 | prev = rng.endContainer.previousSibling; |
Line 106... | Line 112... | ||
106 | } |
112 | } |
107 | end = rng.endOffset; |
113 | end = rng.endOffset; |
108 | endContainer = prev; |
114 | endContainer = prev; |
109 | } else { |
115 | } else { |
110 | endContainer = rng.endContainer; |
116 | endContainer = rng.endContainer; |
111 | if (endContainer.nodeType !== 3 && endContainer.firstChild) { |
117 | if (!isTextNode(endContainer) && endContainer.firstChild) { |
112 | while (endContainer.nodeType !== 3 && endContainer.firstChild) { |
118 | while (!isTextNode(endContainer) && endContainer.firstChild) { |
113 | endContainer = endContainer.firstChild; |
119 | endContainer = endContainer.firstChild; |
114 | } |
120 | } |
115 | if (endContainer.nodeType === 3) { |
121 | if (isTextNode(endContainer)) { |
116 | setStart(rng, endContainer, 0); |
122 | setStart(rng, endContainer, 0); |
117 | setEnd(rng, endContainer, endContainer.nodeValue.length); |
123 | setEnd(rng, endContainer, endContainer.nodeValue.length); |
118 | } |
124 | } |
119 | } |
125 | } |
120 | if (rng.endOffset === 1) { |
126 | if (rng.endOffset === 1) { |
Line 127... | Line 133... | ||
127 | do { |
133 | do { |
128 | setStart(rng, endContainer, end >= 2 ? end - 2 : 0); |
134 | setStart(rng, endContainer, end >= 2 ? end - 2 : 0); |
129 | setEnd(rng, endContainer, end >= 1 ? end - 1 : 0); |
135 | setEnd(rng, endContainer, end >= 1 ? end - 1 : 0); |
130 | end -= 1; |
136 | end -= 1; |
131 | rngText = rng.toString(); |
137 | rngText = rng.toString(); |
132 | } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter); |
138 | } while (!rangeEqualsBracketOrSpace(rngText) && end - 2 >= 0); |
133 | if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) { |
139 | if (rangeEqualsBracketOrSpace(rng.toString())) { |
134 | setStart(rng, endContainer, end); |
140 | setStart(rng, endContainer, end); |
135 | setEnd(rng, endContainer, start); |
141 | setEnd(rng, endContainer, start); |
136 | end += 1; |
142 | end += 1; |
137 | } else if (rng.startOffset === 0) { |
143 | } else if (rng.startOffset === 0) { |
138 | setStart(rng, endContainer, 0); |
144 | setStart(rng, endContainer, 0); |
Line 183... | Line 189... | ||
183 | } |
189 | } |
184 | }); |
190 | }); |
185 | return; |
191 | return; |
186 | } |
192 | } |
187 | editor.on('keypress', function (e) { |
193 | editor.on('keypress', function (e) { |
188 | if (e.keyCode === 41) { |
194 | if (e.keyCode === 41 || e.keyCode === 93 || e.keyCode === 125) { |
189 | return handleEclipse(editor); |
195 | return handleBracket(editor); |
190 | } |
196 | } |
191 | }); |
197 | }); |
192 | editor.on('keyup', function (e) { |
198 | editor.on('keyup', function (e) { |
193 | if (e.keyCode === 32) { |
199 | if (e.keyCode === 32) { |
194 | return handleSpacebar(editor); |
200 | return handleSpacebar(editor); |