Subversion Repositories oidplus

Rev

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);