UNPKG

wrap-with-tag

Version:

A wrap-with-tag provides a simple function to wrap string with html.

2 lines (1 loc) 2.05 kB
"use strict";function __read(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),c=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)c.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return c}function __spread(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(__read(arguments[t]));return e}var getParents=function(e){for(var t=[],r=e;null!==r&&r.parentNode;)t.push(r.parentNode),r=r.parentNode;return t};function wrapWithTag(e){void 0===e&&(e={regexp:/([a-zA-Z0-9,¥.-]+)/g,className:"diff",tagName:"span",attr:{}});var t=e.regexp,r=e.className,n=e.tagName,a=e.attr,o={regexp:t||/([a-zA-Z0-9,¥.-]+)/g,tagName:n?n.toLowerCase():"span",attr:a||{}};r?o.attr.class=r:void 0===r&&0===Object.keys(o.attr).length&&(o.attr.class="diff");var c=/base|command|link|meta|noscript|script|style|title|svg/,i=function(){var e,t,r=function(){var e=document.querySelectorAll("*"),t=[];return __spread(e).forEach(function(e){__spread(e.childNodes).forEach(function(e){var r=getParents(e),n=e.nodeType===Node.TEXT_NODE,a=e.textContent&&!/^\s+$/.test(e.textContent),i=e.parentNode instanceof HTMLElement&&e.parentNode.tagName&&!c.test(e.parentNode.tagName.toLowerCase()),s=0===Object.keys(o.attr).filter(function(t){return e.parentNode instanceof HTMLElement&&e.parentNode.getAttribute(t)===o.attr[t]+""}).length,l=0===r.filter(function(e){return!!(e instanceof Element&&e.tagName)&&c.test(e.tagName.toLowerCase())}).length;n&&a&&i&&s&&l&&t.push({parent:e.parentNode,text:e})})}),t}(),n=(e=document.createElement(o.tagName),(t=document.createElement("div")).appendChild(e),e.textContent="$1",Object.keys(o.attr).forEach(function(t){e.setAttribute(t,o.attr[t])}),t.innerHTML);r.forEach(function(e){var t=document.createElement("div");t.innerHTML=e.text.cloneNode().textContent.replace(o.regexp,n),__spread(t.childNodes).forEach(function(t){e.parent.insertBefore(t,e.text)}),e.parent.removeChild(e.text)})};return i(),{renew:i}}module.exports=wrapWithTag;