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