![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/libs/absol-full/dist/js/ |
Upload File : |
/*** module: node_modules/absol-acomp/js/tokenizeiput/TISelectionController.js ***/ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _tiutils = require("./tiutils"); var _utils = require("../utils"); /**** * * @param {TokenizeInput} elt * @constructor */ function TISelectionController(elt) { this.elt = elt; this.prevRange = null; } TISelectionController.prototype.onSelect = function () { var key = this.elt.prevKey && new Date().getTime() - this.elt.prevKey.time < 100 ? this.elt.prevKey.value : ''; var sel = document.getSelection(); var range = sel.getRangeAt(0); var direction = (0, _utils.getSelectionRangeDirection)(range); var newRange; var handleEmojiToken = () => { var startCtn = range.startContainer; var startOffset = range.startOffset; var startToken; var endCtn = range.endContainer; var endOffset = range.endOffset; var endToken; var changed = 0; var textData; var nextTextNode; var prevTextNode; var displayText; var newText; if ((0, _tiutils.isTokenText)(startCtn)) { startToken = startCtn.parentElement; displayText = startToken.getAttribute('data-display'); textData = startCtn.data; if (range.collapsed) { if (textData.length < displayText.length) { prevTextNode = this.getPrevTextNode(startCtn); if (!(0, _tiutils.isText)(prevTextNode)) { prevTextNode = document.createTextNode(''); startToken.parentElement.insertBefore(prevTextNode, startToken); } startToken.remove(); startCtn = prevTextNode; startOffset = prevTextNode.data.length; changed = 1; } else if (textData === displayText && startOffset < displayText.length && startOffset > 0) { if (key === 'arrowright' || !key) { startOffset = displayText.length; changed = 1; } else if (key === 'arrowleft') { startOffset = 0; changed = 1; } else if (key === 'mouseup') { startOffset = 0; endOffset = displayText.length; changed = 2; } } else if (textData.length > displayText.length) { if (startOffset === textData.length) { nextTextNode = startToken.nextSibling; if (!(0, _tiutils.isText)(nextTextNode)) { newText = document.createTextNode(''); nextTextNode.parentElement.insertBefore(newText, nextTextNode); nextTextNode = newText; } nextTextNode.data = textData.substring(displayText.length) + nextTextNode.data; startCtn.data = displayText; startCtn = nextTextNode; startOffset = textData.length - displayText.length; changed = 1; } else { prevTextNode = startToken.previousSibling; if (!(0, _tiutils.isText)(prevTextNode)) { newText = document.createTextNode(''); startToken.parentElement.insertBefore(newText, startToken); prevTextNode = newText; } prevTextNode.data += textData.substring(0, textData.length - displayText.length); startCtn.data = displayText; startCtn = prevTextNode; startOffset = startCtn.data.length; } } } else { if (startOffset > 0 && startOffset < displayText.length) { startOffset = 0; changed = 2; } } } if ((0, _tiutils.isTokenText)(endCtn)) { endToken = endCtn.parentElement; displayText = endToken.getAttribute('data-display'); if (!range.collapsed) { if (endOffset < displayText.length) { endOffset = displayText.length; changed = 2; } } } if (changed > 0) { newRange = document.createRange(); newRange.setStart(startCtn, startOffset); if (changed > 1) { newRange.setEnd(endCtn, endOffset); } else { //for saving endOffset = startOffset; endCtn = startCtn; } (0, _utils.setSelectionRange)(newRange, direction === 'backward'); } var nextToken, nextText; if ((0, _tiutils.isToken)(endCtn.nextSibling)) { nextToken = endCtn.nextSibling; displayText = nextToken.getAttribute('data-display'); nextText = (0, _tiutils.getFirstTextNode)(nextToken); if (!nextText || nextText.data !== displayText) nextToken.remove(); } this.prevRange = { startOffset: startOffset, startContainer: startCtn, endOffset: endOffset, endContainer: endCtn }; }; handleEmojiToken(); }; TISelectionController.prototype.getNextTextNode = function (current) { return (0, _tiutils.findNextTextNode)(this.elt, current); }; TISelectionController.prototype.getPrevTextNode = function (current) { return (0, _tiutils.findPrevTextNode)(this.elt, current); }; TISelectionController.prototype.setRangeByOffset = function (offset) { var start, end, direction; if (typeof offset === "number") { start = offset; end = offset; direction = 'forward'; } else { start = offset.start; end = offset.end; direction = offset.direction || 'forward'; } var startCtn = null; var startOffset = 0; var endCtn = null; var endOffset = 0; var st = ''; var nodes = Array.prototype.slice.call(this.elt.childNodes); if ((0, _tiutils.isNewLine)(nodes[nodes.length - 1])) nodes.pop(); var node; for (var i = 0; i < nodes.length; ++i) { node = nodes[i]; if ((0, _tiutils.isText)(node)) { st += node.data; if (!startCtn && st.length >= start) { startCtn = node; startOffset = node.data.length - (st.length - start); } if (!endCtn && st.length >= end) { endCtn = node; endOffset = node.data.length - (st.length - end); } } else if ((0, _tiutils.isToken)(node)) { st += node.getAttribute('data-text'); if (!startCtn && st.length >= start) { startCtn = (0, _tiutils.getFirstTextNode)(node); startOffset = startCtn.data.length; } if (!endCtn && st.length >= end) { endCtn = (0, _tiutils.getFirstTextNode)(node); endOffset = endCtn.data.length; } } else if ((0, _tiutils.isNewLine)(node)) { st += '\n'; if (!startCtn && st >= start) { startCtn = this.elt; startOffset = i + 1; } if (!endCtn && st.length >= end) { endCtn = this.elt; endOffset = i + 1; } } } if (!startCtn) { if (nodes.length > 0) { node = nodes[nodes.length - 1]; if ((0, _tiutils.isNewLine)(node)) { startCtn = this.elt; startOffset = nodes.length; } else if ((0, _tiutils.isText)(node)) { startCtn = node; startOffset = node.length; } else { startCtn = (0, _tiutils.getLastTextNode)(node); startOffset = node.length; } } else { startCtn = this.elt; startOffset = 0; } } if (!endCtn) { endCtn = startCtn; endOffset = startOffset; } this.prevRange = { startContainer: startCtn, startOffset: startOffset, endContainer: endCtn, endOffset: endOffset }; var range = document.createRange(); range.setStart(startCtn, startOffset); range.setEnd(endCtn, endOffset); (0, _utils.setSelectionRange)(range, direction === 'backward'); }; TISelectionController.prototype.getOffset = function (range) { range = range || this.elt.selectionCtrl.prevRange; if (!range) return null; var nodes = Array.prototype.slice.call(this.elt.childNodes); if ((0, _tiutils.isNewLine)(nodes[nodes.length - 1])) nodes.pop(); var startCtn = range.startContainer; var startOffset = range.startOffset; var endCtn = range.endContainer; var endOffset = range.endOffset; if (startCtn === this.elt) { startCtn = this.elt.childNodes[startOffset - 1]; startOffset = 1; } else if ((0, _tiutils.isTokenText)(startCtn)) { startCtn = startCtn.parentElement; if (startOffset > 0) startOffset = startCtn.getAttribute('data-text').length; } if (endCtn === this.elt) { endCtn = this.elt.childNodes[endOffset]; endOffset = 1; } else if ((0, _tiutils.isTokenText)(endCtn)) { endCtn = endCtn.parentElement; if (endOffset > 0) endOffset = endCtn.getAttribute('data-text').length; } var start = undefined; var end = undefined; var direction = (0, _utils.getSelectionRangeDirection)(range); var st = ''; var node; for (var i = 0; i < nodes.length; ++i) { node = nodes[i]; if ((0, _tiutils.isText)(node)) { if (start === undefined && node === startCtn) { start = st.length + startOffset; } if (end === undefined && node === endCtn) { end = st.length + endOffset; } st += node.data; } else if ((0, _tiutils.isToken)(node)) { if (start === undefined && node === startCtn) { start = st.length + startOffset; } if (end === undefined && node === endCtn) { end = st.length + endOffset; } st += node.getAttribute('data-text'); } else if ((0, _tiutils.isNewLine)(node)) { st += '\n'; if (start === undefined && node === startCtn) { start = st.length; } if (end === undefined && node === endCtn) { end = st.length; } } } if (start === undefined) start = 0; if (end === undefined) { end = start; } return { start: start, end: end, direction: direction }; }; var _default = TISelectionController; exports.default = _default;