UNPKG

fortissimo-html

Version:

Fortissimo HTML - Flexible, Forgiving, Formatting HTML Parser

73 lines (70 loc) 2.78 kB
"use strict"; /* This file is meant to be stringified and used as ES5-compatible JavaScript. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.addCopyListener = exports.getCopyScript = exports.copyScriptAsIIFE = void 0; // tslint:disable prefer-const // tslint:disable no-var-keyword const wsReplacements = { '·': ' ', '↵\n': '\n', '↧\f': '\f', '␍\r': '\r', '␍↵\r\n': '\r\n', '•': '\xA0' }; exports.copyScriptAsIIFE = `(function() { var wsReplacements = ${JSON.stringify(wsReplacements)}; ${restoreWhitespaceStrict.toString()} ${restoreWhitespace.toString()} (${addCopyListener.toString()})(); })(); `.replace(/cov_\w+\.\w(\[\d+\])+\+\+[;,]/g, ''); // Remove code-coverage changes that might get embedded in the code. function getCopyScript(prefix = 'fh-') { return exports.copyScriptAsIIFE.replace("'fh-'", "'" + prefix + "'"); } exports.getCopyScript = getCopyScript; function restoreWhitespaceStrict(s) { return s.replace(/[^ \n\r\t\f\xA0]/g, function (ch) { return ch === '·' ? ' ' : ch === '•' ? '\xA0' : ''; }); } function restoreWhitespace(s) { return s.replace(/·|↵\n|↧\f|␍\r|␍↵\r\n|•|↵|↧|␍|�/g, function (ws) { return wsReplacements[ws] || ''; }); } function addCopyListener(prefix) { prefix = prefix || 'fh-'; var doc = document.querySelector('.' + prefix + 'html'); if (!doc) return; doc.addEventListener('copy', function (event) { var selection = document.getSelection(); var newSelection; var copied = false; if (selection.anchorNode && selection.getRangeAt) { try { var nodes = selection.getRangeAt(0).cloneContents().childNodes; var parts = []; /* nodes isn't a "real" array - no forEach! */ for (var i = 0; i < nodes.length; ++i) { var node = nodes[i]; if (node.classList && (node.classList.contains(prefix + 'invalid') || node.classList.contains(prefix + 'whitespace'))) parts.push(restoreWhitespaceStrict(node.innerText)); else if (node.localName === 'span') parts.push(node.innerText); else parts.push(node.nodeValue); } newSelection = parts.join(''); copied = true; } catch (err) { } } if (!copied) newSelection = restoreWhitespace(selection.toString()); event.clipboardData.setData('text/plain', newSelection); event.preventDefault(); }); } exports.addCopyListener = addCopyListener; //# sourceMappingURL=copy-script.js.map