UNPKG

textarea-pattern-handler

Version:

A TypeScript utility for handling textarea patterns and DOM manipulation

71 lines (70 loc) 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeTrailingBR = exports.cleanHtmlContent = exports.cleanTextContent = exports.setSelectionToRange = exports.createNewRange = exports.getCurrentSelection = exports.createTagElement = exports.createEmptyTextNode = exports.createBRNode = exports.createSpaceNode = exports.createTextNode = void 0; // DOM Manipulation Helpers const createTextNode = (text) => document.createTextNode(text); exports.createTextNode = createTextNode; const createSpaceNode = () => (0, exports.createTextNode)(' '); exports.createSpaceNode = createSpaceNode; const createBRNode = () => document.createElement('br'); exports.createBRNode = createBRNode; const createEmptyTextNode = () => (0, exports.createTextNode)('\u200B'); exports.createEmptyTextNode = createEmptyTextNode; const createTagElement = (tagContent, tagId) => { const tag = document.createElement('span'); tag.id = tagId; tag.className = 'tag'; tag.contentEditable = 'false'; tag.textContent = tagContent; return tag; }; exports.createTagElement = createTagElement; // Selection and Range Helpers const getCurrentSelection = () => { const selection = window.getSelection(); if (!selection || selection.rangeCount === 0) return null; return selection; }; exports.getCurrentSelection = getCurrentSelection; const createNewRange = (startNode, startOffset = 0) => { const range = document.createRange(); range.setStart(startNode, startOffset); range.collapse(true); return range; }; exports.createNewRange = createNewRange; const setSelectionToRange = (range) => { const selection = window.getSelection(); if (selection) { selection.removeAllRanges(); selection.addRange(range); } }; exports.setSelectionToRange = setSelectionToRange; // Content Cleaning Helpers const cleanTextContent = (text) => { return text .replace(/\u200B/g, '') .replace(/^\s+/, '') .replace(/\n+$/, ''); }; exports.cleanTextContent = cleanTextContent; const cleanHtmlContent = (html) => { return html .replace(/<br\s*\/?>\s*<br\s*\/?>/g, '<br>') .replace(/^\s+/, '') .replace(/<br\s*\/?>\s*$/, ''); }; exports.cleanHtmlContent = cleanHtmlContent; const removeTrailingBR = (box) => { var _a; const lastChild = box.lastChild; if (lastChild && lastChild.nodeName === 'BR') { const nextSibling = lastChild.nextSibling; if (!nextSibling || (nextSibling.nodeType === Node.TEXT_NODE && !((_a = nextSibling.textContent) === null || _a === void 0 ? void 0 : _a.trim()))) { lastChild.remove(); } } }; exports.removeTrailingBR = removeTrailingBR;