@notelix/web-marker 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/web-marker.js +1 -1
- package/build/web-marker.js.map +1 -1
- package/package.json +1 -1
- package/.github/dependabot.yml +0 -11
package/build/web-marker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["web-marker"]=t():e["web-marker"]=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function i(e){if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(e){if("string"===typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o,l=!0,a=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return l=e.done,e},e:function(e){a=!0,o=e},f:function(){try{l||null==i.return||i.return()}finally{if(a)throw o}}}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var a;n.r(t),n.d(t,"Marker",(function(){return R})),n.d(t,"Errors",(function(){return I}));var u=new Uint8Array(16);function f(){if(!a&&!(a="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!==typeof msCrypto&&"function"===typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return a(u)}var s=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var d=function(e){return"string"===typeof e&&s.test(e)},c=[],h=0;h<256;++h)c.push((h+256).toString(16).substr(1));var v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!d(n))throw TypeError("Stringified UUID is invalid");return n};var g=function(e,t,n){var r=(e=e||{}).random||(e.rng||f)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return v(r)};function m(){return g()}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function y(e){return(y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function x(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function b(e){return(b="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(e,t){return!t||"object"!==b(t)&&"function"!==typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function E(e,t,n){return(E=x()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&p(i,n.prototype),i}).apply(null,arguments)}function N(e){var t="function"===typeof Map?new Map:void 0;return(N=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return E(e,arguments,y(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),p(r,e)})(e)}var k=function(e){!function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}(r,e);var t,n=(t=r,function(){var e,n=y(t);if(x()){var r=y(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return T(this,e)});function r(){return o(this,r),n.apply(this,arguments)}return r}(N(Error));var S=document.createElement("style");S.innerText=".".concat("web-marker-black-listed-element"," {display:none!important;};");var C={paintHighlight:function(e,t){console.log("paintHighlight",e,t),t.style.textDecoration="underline",t.style.textDecorationColor="orange"}},O={onHighlightClick:function(e,t){console.log("onHighlightClick",e,t)},onHighlightHoverStateChange:function(e,t,n){console.log("onHighlightHoverStateChange",e,t),t.style.backgroundColor=n?"#FFE49C":""}},w=function(){function e(t){var n=this,r=t.rootElement,i=t.highlightPainter,l=t.eventHandler;o(this,e),this.rootElement=void 0,this.eventHandler=void 0,this.highlightPainter=void 0,this.state={lastHoverId:"",uidToSerializedRange:{}},this.clickListener=function(e){if(e.target&&e.target instanceof HTMLElement){var t=e.target,r=t.getAttribute("highlight-id");r&&n.eventHandler.onHighlightClick&&n.eventHandler.onHighlightClick(n.buildContext(r),t,e)}},this.mouseoverListener=function(e){if(e.target&&e.target instanceof HTMLElement){var t=e.target,r=null===t||void 0===t?void 0:t.getAttribute("highlight-id");if(n.state.lastHoverId!==r){var i=n.state.lastHoverId;n.state.lastHoverId=r,r&&n.highlightHovering(r,!0,e),i&&n.highlightHovering(i,!1,e)}}},this.rootElement=r||document.body,this.highlightPainter=i||C,this.eventHandler=l||O}var t,n,r;return t=e,r=[{key:"clearSelection",value:function(){var e=window.getSelection();e&&(e.empty?e.empty():e.removeAllRanges&&e.removeAllRanges())}},{key:"resolveHighlightElements",value:function(e){for(var t=[],n=0,r=Array.from(document.getElementsByTagName("web-marker-highlight"));n<r.length;n++){var i=r[n];i.getAttribute("highlight-id")===e&&t.push(i)}return t}},{key:"normalizeText",value:function(t){return e.normalizeTextCache[t]||(e.normalizeTextCache[t]=t.replace(/\s/g,"").toLowerCase()),e.normalizeTextCache[t]}},{key:"isBlackListedElementNode",value:function(e){if(!e)return!1;if(e.nodeType!==Node.ELEMENT_NODE)return!1;var t=getComputedStyle(e);if("none"===t.display)return!0;if("hidden"===t.visibility)return!0;var n=e.className;if(n&&n.indexOf&&n.indexOf("web-marker-black-listed-element")>=0)return!0;var r=e.tagName;return"STYLE"===r||"SCRIPT"===r||"TITLE"===r||"NOSCRIPT"===r}},{key:"getRealOffset",value:function(t,n){for(var r=t.textContent||"",i=0,o=0;o<r.length;o++){for(;o<r.length&&!e.normalizeText(r.substr(o,1));)o++;if(i===n)return o;i++}if(i===n)return r.length;throw new Error("failed to get real offset")}},{key:"unpaintElement",value:function(e){for(var t,n=Array.from(e.childNodes),r=0;r<n.length;r++){var i;null===(i=e.parentNode)||void 0===i||i.insertBefore(n[r],e)}null===(t=e.parentNode)||void 0===t||t.removeChild(e)}},{key:"convertRangeToSelection",value:function(e){var t=window.getSelection();return t.removeAllRanges(),t.addRange(e),t}}],(n=[{key:"serializeRange",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{uid:void 0,charsToKeepForTextBeforeAndTextAfter:128};document.head.appendChild(S);try{this.adjustRangeAroundBlackListedElement(t);var r=(null===n||void 0===n?void 0:n.uid)||m(),i=(null===n||void 0===n?void 0:n.charsToKeepForTextBeforeAndTextAfter)||128,o=e.convertRangeToSelection(t),l=o.toString(),a=e.normalizeText(l);if(a){var u="",f="";u+=this.getInnerText(t.startContainer).substr(0,t.startOffset);for(var s=t.startContainer;u.length<i&&(s=this.findPreviousTextNodeInDomTree(s));)u=s.textContent+u;u.length>i&&(u=u.substr(u.length-i)),f+=this.getInnerText(t.endContainer).substr(t.endOffset);for(var d=t.endContainer;f.length<i&&(d=this.findNextTextNodeInDomTree(d));)f+=d.textContent;return f.length>i&&(f=f.substr(0,i)),this.state.uidToSerializedRange[r]={uid:r,textBefore:u,text:l,textAfter:f},this.state.uidToSerializedRange[r]}return null}finally{document.head.removeChild(S)}}},{key:"batchPaint",value:function(e){for(var t=this,n={},r=this.batchDeserializeRange(e),i=r.results,o=r.errors,l=function(r){if(o[r])return n[r]=o[r],"continue";var l=e[r].uid,a=i[r];if(!a.collapsed){var u=function(e){e.setAttribute("highlight-id",l)};try{!function(){if(a.startContainer===a.endContainer){if(a.startOffset===a.endOffset)return;var e=a.startContainer.splitText(a.startOffset);return e.splitText(a.endOffset),void u(t.convertTextNodeToHighlightElement(e))}var n=[],r=a.startContainer.splitText(a.startOffset);for(n.push(r);(r=t.findNextTextNodeInDomTree(r))!==a.endContainer;)n.push(r);a.endContainer.splitText(a.endOffset),n.push(a.endContainer),n.forEach((function(e){if(e){var n,r,i=t.convertTextNodeToHighlightElement(e);u(i),i.innerText||(null===(n=i.parentElement)||void 0===n||n.insertBefore(e,i.nextSibling),null===(r=i.parentElement)||void 0===r||r.removeChild(i))}}))}(),t.paintHighlights(l)}catch(f){n[r]=f}}},a=0;a<e.length;a++)l(a);return{errors:n}}},{key:"paint",value:function(e){if(e){var t=this.batchPaint([e]).errors;if(t[0])throw t[0]}}},{key:"unpaint",value:function(t){var n,r=t.uid,o=i(e.resolveHighlightElements(r));try{for(o.s();!(n=o.n()).done;){var l=n.value;e.unpaintElement(l)}}catch(a){o.e(a)}finally{o.f()}}},{key:"batchDeserializeRange",value:function(t){document.head.appendChild(S);for(var n={},r={},i=this.getNormalizedInnerText(this.rootElement),o=0;o<t.length;o++)try{this.state.uidToSerializedRange[t[o].uid]=t[o];var l=this.resolveSerializedRangeOffsetInText(i,t[o]),a=this.findElementAtOffset(this.rootElement,l),u=this.findElementAtOffset(this.rootElement,l+e.normalizeText(t[o].text).length),f=document.createRange();f.setStart(a.element,e.getRealOffset(a.element,a.offset)),f.setEnd(u.element,e.getRealOffset(u.element,u.offset)),this.trimRangeSpaces(f),n[o]=f}catch(s){r[o]=s}return document.head.removeChild(S),{results:n,errors:r}}},{key:"deserializeRange",value:function(e){var t=this.batchDeserializeRange([e]),n=t.results,r=t.errors;if(r[0])throw r[0];return n[0]}},{key:"addEventListeners",value:function(){this.rootElement.addEventListener("click",this.clickListener,!0),this.rootElement.addEventListener("mouseover",this.mouseoverListener,!0)}},{key:"removeEventListeners",value:function(){this.rootElement.removeEventListener("click",this.clickListener,!0),this.rootElement.removeEventListener("mouseover",this.mouseoverListener,!0)}},{key:"paintHighlights",value:function(t){var n=this.buildContext(t);this.highlightPainter.beforePaintHighlight&&this.highlightPainter.beforePaintHighlight(n);var r,o=i(e.resolveHighlightElements(t));try{for(o.s();!(r=o.n()).done;){var l=r.value;this.highlightPainter.paintHighlight(n,l)}}catch(a){o.e(a)}finally{o.f()}this.highlightPainter.afterPaintHighlight&&this.highlightPainter.afterPaintHighlight(n)}},{key:"highlightHovering",value:function(t,n,r){var o,l=i(e.resolveHighlightElements(t));try{for(l.s();!(o=l.n()).done;){var a=o.value;this.eventHandler.onHighlightHoverStateChange&&this.eventHandler.onHighlightHoverStateChange(this.buildContext(t),a,n,r)}}catch(u){l.e(u)}finally{l.f()}}},{key:"getInnerText",value:function(t){if(e.isBlackListedElementNode(t))return"";if(t.nodeType===Node.TEXT_NODE)return t.textContent;if("undefined"===typeof t.innerText){for(var n="",r=0;r<t.childNodes.length;r++)n+=this.getInnerText(t.childNodes[r]);return n}return t.innerText}},{key:"getNormalizedInnerText",value:function(t){return e.normalizeText(this.getInnerText(t))}},{key:"findLastChildTextNode",value:function(t){if(!t)return null;if(t.nodeType===Node.TEXT_NODE)return t;if(t.childNodes)for(var n=t.childNodes.length-1;n>=0;n--)if(!e.isBlackListedElementNode(t.childNodes[n])){var r=this.findLastChildTextNode(t.childNodes[n]);if(null!==r)return r}return null}},{key:"findFirstChildTextNode",value:function(t){if(t.nodeType===Node.TEXT_NODE)return t;if(t.childNodes)for(var n=0;n<t.childNodes.length;n++)if(!e.isBlackListedElementNode(t.childNodes[n])){var r=this.findFirstChildTextNode(t.childNodes[n]);if(null!==r)return r}return null}},{key:"findPreviousTextNodeInDomTree",value:function(t){for(;t;){for(var n;e.isBlackListedElementNode((null===(r=t)||void 0===r?void 0:r.previousSibling)||null);){var r,i;t=(null===(i=t)||void 0===i?void 0:i.previousSibling)||null}for(;null===(o=t)||void 0===o?void 0:o.previousSibling;){var o,l,a=this.findLastChildTextNode((null===(l=t)||void 0===l?void 0:l.previousSibling)||null);if(a)return a;t=t.previousSibling}t=(null===(n=t)||void 0===n?void 0:n.parentElement)||null}return null}},{key:"findNextTextNodeInDomTree",value:function(t){for(;t;){for(var n;e.isBlackListedElementNode((null===(r=t)||void 0===r?void 0:r.nextSibling)||null);){var r,i;t=(null===(i=t)||void 0===i?void 0:i.nextSibling)||null}for(;null===(o=t)||void 0===o?void 0:o.nextSibling;){var o,l;if(e.isBlackListedElementNode(null===(l=t)||void 0===l?void 0:l.nextSibling))t=t.nextSibling;else{var a=this.findFirstChildTextNode(t.nextSibling);if(a)return a;t=t.nextSibling}}t=(null===(n=t)||void 0===n?void 0:n.parentElement)||null}return null}},{key:"forwardOffset",value:function(e,t){var n=e.element,r=e.offset,i=this.getNormalizedInnerText(n);if(i.length>t+r)return{element:n,offset:r+=t};var o=this.findNextTextNodeInDomTree(n);return o?this.forwardOffset({element:o,offset:0},t-(i.length-r)):{element:n,offset:r=this.getInnerText(n)}}},{key:"backwardOffset",value:function(e,t){var n=e.element,r=e.offset;if(r>=t)return{element:n,offset:r-=t};var i=this.findPreviousTextNodeInDomTree(n);return i?this.backwardOffset({element:i,offset:this.getNormalizedInnerText(i).length},t-r):{element:n,offset:r=0}}},{key:"findElementAtOffset",value:function(t,n){if(t.nodeType===Node.TEXT_NODE)return{element:t,offset:n};for(var r=0,i=0;i<t.childNodes.length;i++)if(!e.isBlackListedElementNode(t.childNodes[i])){var o=this.getNormalizedInnerText(t.childNodes[i]).length;if(!((r+=o)<n))return this.findElementAtOffset(t.childNodes[i],n-(r-o))}throw new Error("failed to findElementAtOffset")}},{key:"trimRangeSpaces",value:function(e){var t=this.getInnerText(e.startContainer).substr(e.startOffset),n=t.trimStart();e.setStart(e.startContainer,e.startOffset+(t.length-n.length));var r=this.getInnerText(e.endContainer).substr(0,e.endOffset),i=r.trimEnd();e.setEnd(e.endContainer,e.endOffset-(r.length-i.length))}},{key:"convertTextNodeToHighlightElement",value:function(e){var t,n,r=document.createElement("web-marker-highlight");return null===(t=e.parentElement)||void 0===t||t.insertBefore(r,e.nextSibling),null===(n=e.parentElement)||void 0===n||n.removeChild(e),r.appendChild(e),r}},{key:"buildContext",value:function(e){return{serializedRange:this.state.uidToSerializedRange[e],marker:this}}},{key:"adjustRangeAroundBlackListedElement",value:function(t){for(var n=t.startContainer,r=null;n;)e.isBlackListedElementNode(n)&&(r=n),n=n.parentElement;n=t.endContainer;for(var i=null;n;)e.isBlackListedElementNode(n)&&(i=n),n=n.parentElement;if(r&&i&&r===i)throw new Error("cannot highlight blacklisted element");if(r&&t.setStart(this.findNextTextNodeInDomTree(r),0),i){var o=this.findPreviousTextNodeInDomTree(i);t.setEnd(o,this.getInnerText(o).length)}}},{key:"getSerializedRangeFromUid",value:function(e){return this.state.uidToSerializedRange[e]||null}},{key:"resolveSerializedRangeOffsetInText",value:function(t,n){var r,o=e.normalizeText(n.textBefore),l=e.normalizeText(n.textAfter),a=e.normalizeText(n.text),u=i(H);try{for(u.s();!(r=u.n()).done;){var f=r.value,s=(f.textBefore?o:"")+a+(f.textAfter?l:""),d=t.indexOf(s);if(d>=0)return d+(f.textBefore?o.length:0)}}catch(c){u.e(c)}finally{u.f()}throw new k("failed to deserialize range")}}])&&l(t.prototype,n),r&&l(t,r),e}();w.normalizeTextCache={};var H=[{textBefore:!0,textAfter:!0},{textBefore:!1,textAfter:!0},{textBefore:!0,textAfter:!1},{textBefore:!1,textAfter:!1}],R=w,I={isDeserializationError:function(e){return e instanceof k}}}])}));
|
|
1
|
+
!function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["web-marker"]=t():e["web-marker"]=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function i(e){if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(e){if("string"===typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o,l=!0,a=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return l=e.done,e},e:function(e){a=!0,o=e},f:function(){try{l||null==i.return||i.return()}finally{if(a)throw o}}}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var a;n.r(t),n.d(t,"Marker",(function(){return R})),n.d(t,"Errors",(function(){return I}));var u=new Uint8Array(16);function f(){if(!a&&!(a="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!==typeof msCrypto&&"function"===typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return a(u)}var s=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var d=function(e){return"string"===typeof e&&s.test(e)},c=[],h=0;h<256;++h)c.push((h+256).toString(16).substr(1));var v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!d(n))throw TypeError("Stringified UUID is invalid");return n};var g=function(e,t,n){var r=(e=e||{}).random||(e.rng||f)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return v(r)};function m(){return g()}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function y(e){return(y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function x(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function b(e){return(b="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(e,t){return!t||"object"!==b(t)&&"function"!==typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function E(e,t,n){return(E=x()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&p(i,n.prototype),i}).apply(null,arguments)}function N(e){var t="function"===typeof Map?new Map:void 0;return(N=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return E(e,arguments,y(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),p(r,e)})(e)}var k=function(e){!function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}(r,e);var t,n=(t=r,function(){var e,n=y(t);if(x()){var r=y(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return T(this,e)});function r(){return o(this,r),n.apply(this,arguments)}return r}(N(Error));var S=document.createElement("style");S.innerText=".".concat("web-marker-black-listed-element",", math>semantics mi, math>semantics mo {display:none!important;};");var C={paintHighlight:function(e,t){console.log("paintHighlight",e,t),t.style.textDecoration="underline",t.style.textDecorationColor="orange"}},O={onHighlightClick:function(e,t){console.log("onHighlightClick",e,t)},onHighlightHoverStateChange:function(e,t,n){console.log("onHighlightHoverStateChange",e,t),t.style.backgroundColor=n?"#FFE49C":""}},w=function(){function e(t){var n=this,r=t.rootElement,i=t.highlightPainter,l=t.eventHandler;o(this,e),this.rootElement=void 0,this.eventHandler=void 0,this.highlightPainter=void 0,this.state={lastHoverId:"",uidToSerializedRange:{}},this.clickListener=function(e){if(e.target&&e.target instanceof HTMLElement){var t=e.target,r=t.getAttribute("highlight-id");r&&n.eventHandler.onHighlightClick&&n.eventHandler.onHighlightClick(n.buildContext(r),t,e)}},this.mouseoverListener=function(e){if(e.target&&e.target instanceof HTMLElement){var t=e.target,r=null===t||void 0===t?void 0:t.getAttribute("highlight-id");if(n.state.lastHoverId!==r){var i=n.state.lastHoverId;n.state.lastHoverId=r,r&&n.highlightHovering(r,!0,e),i&&n.highlightHovering(i,!1,e)}}},this.rootElement=r||document.body,this.highlightPainter=i||C,this.eventHandler=l||O}var t,n,r;return t=e,r=[{key:"clearSelection",value:function(){var e=window.getSelection();e&&(e.empty?e.empty():e.removeAllRanges&&e.removeAllRanges())}},{key:"resolveHighlightElements",value:function(e){for(var t=[],n=0,r=Array.from(document.getElementsByTagName("web-marker-highlight"));n<r.length;n++){var i=r[n];i.getAttribute("highlight-id")===e&&t.push(i)}return t}},{key:"normalizeText",value:function(t){return e.normalizeTextCache[t]||(e.normalizeTextCache[t]=t.replace(/\s/g,"").toLowerCase()),e.normalizeTextCache[t]}},{key:"isBlackListedElementNode",value:function(e){if(!e)return!1;if(e.nodeType!==Node.ELEMENT_NODE)return!1;var t=getComputedStyle(e);if("none"===t.display)return!0;if("hidden"===t.visibility)return!0;var n=e.className;if(n&&n.indexOf&&n.indexOf("web-marker-black-listed-element")>=0)return!0;var r=e.tagName;return"STYLE"===r||"SCRIPT"===r||"TITLE"===r||"NOSCRIPT"===r}},{key:"getRealOffset",value:function(t,n){for(var r=t.textContent||"",i=0,o=0;o<r.length;o++){for(;o<r.length&&!e.normalizeText(r.substr(o,1));)o++;if(i===n)return o;i++}if(i===n)return r.length;throw new Error("failed to get real offset")}},{key:"unpaintElement",value:function(e){for(var t,n=Array.from(e.childNodes),r=0;r<n.length;r++){var i;null===(i=e.parentNode)||void 0===i||i.insertBefore(n[r],e)}null===(t=e.parentNode)||void 0===t||t.removeChild(e)}},{key:"convertRangeToSelection",value:function(e){var t=window.getSelection();return t.removeAllRanges(),t.addRange(e),t}}],(n=[{key:"serializeRange",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{uid:void 0,charsToKeepForTextBeforeAndTextAfter:128};document.head.appendChild(S);try{this.adjustRangeAroundBlackListedElement(t);var r=(null===n||void 0===n?void 0:n.uid)||m(),i=(null===n||void 0===n?void 0:n.charsToKeepForTextBeforeAndTextAfter)||128,o=e.convertRangeToSelection(t),l=o.toString(),a=e.normalizeText(l);if(a){var u="",f="";u+=this.getInnerText(t.startContainer).substr(0,t.startOffset);for(var s=t.startContainer;u.length<i&&(s=this.findPreviousTextNodeInDomTree(s));)u=s.textContent+u;u.length>i&&(u=u.substr(u.length-i)),f+=this.getInnerText(t.endContainer).substr(t.endOffset);for(var d=t.endContainer;f.length<i&&(d=this.findNextTextNodeInDomTree(d));)f+=d.textContent;return f.length>i&&(f=f.substr(0,i)),this.state.uidToSerializedRange[r]={uid:r,textBefore:u,text:l,textAfter:f},this.state.uidToSerializedRange[r]}return null}finally{document.head.removeChild(S)}}},{key:"batchPaint",value:function(e){for(var t=this,n={},r=this.batchDeserializeRange(e),i=r.results,o=r.errors,l=function(r){if(o[r])return n[r]=o[r],"continue";var l=e[r].uid,a=i[r];if(!a.collapsed){var u=function(e){e.setAttribute("highlight-id",l)};try{!function(){if(a.startContainer===a.endContainer){if(a.startOffset===a.endOffset)return;var e=a.startContainer.splitText(a.startOffset);return e.splitText(a.endOffset),void u(t.convertTextNodeToHighlightElement(e))}var n=[],r=a.startContainer.splitText(a.startOffset);for(n.push(r);(r=t.findNextTextNodeInDomTree(r))!==a.endContainer;)n.push(r);a.endContainer.splitText(a.endOffset),n.push(a.endContainer),n.forEach((function(e){if(e){var n,r,i=t.convertTextNodeToHighlightElement(e);u(i),i.innerText||(null===(n=i.parentElement)||void 0===n||n.insertBefore(e,i.nextSibling),null===(r=i.parentElement)||void 0===r||r.removeChild(i))}}))}(),t.paintHighlights(l)}catch(f){n[r]=f}}},a=0;a<e.length;a++)l(a);return{errors:n}}},{key:"paint",value:function(e){if(e){var t=this.batchPaint([e]).errors;if(t[0])throw t[0]}}},{key:"unpaint",value:function(t){var n,r=t.uid,o=i(e.resolveHighlightElements(r));try{for(o.s();!(n=o.n()).done;){var l=n.value;e.unpaintElement(l)}}catch(a){o.e(a)}finally{o.f()}}},{key:"batchDeserializeRange",value:function(t){document.head.appendChild(S);for(var n={},r={},i=this.getNormalizedInnerText(this.rootElement),o=0;o<t.length;o++)try{this.state.uidToSerializedRange[t[o].uid]=t[o];var l=this.resolveSerializedRangeOffsetInText(i,t[o]),a=this.findElementAtOffset(this.rootElement,l),u=this.findElementAtOffset(this.rootElement,l+e.normalizeText(t[o].text).length),f=document.createRange();f.setStart(a.element,e.getRealOffset(a.element,a.offset)),f.setEnd(u.element,e.getRealOffset(u.element,u.offset)),this.trimRangeSpaces(f),n[o]=f}catch(s){r[o]=s}return document.head.removeChild(S),{results:n,errors:r}}},{key:"deserializeRange",value:function(e){var t=this.batchDeserializeRange([e]),n=t.results,r=t.errors;if(r[0])throw r[0];return n[0]}},{key:"addEventListeners",value:function(){this.rootElement.addEventListener("click",this.clickListener,!0),this.rootElement.addEventListener("mouseover",this.mouseoverListener,!0)}},{key:"removeEventListeners",value:function(){this.rootElement.removeEventListener("click",this.clickListener,!0),this.rootElement.removeEventListener("mouseover",this.mouseoverListener,!0)}},{key:"paintHighlights",value:function(t){var n=this.buildContext(t);this.highlightPainter.beforePaintHighlight&&this.highlightPainter.beforePaintHighlight(n);var r,o=i(e.resolveHighlightElements(t));try{for(o.s();!(r=o.n()).done;){var l=r.value;this.highlightPainter.paintHighlight(n,l)}}catch(a){o.e(a)}finally{o.f()}this.highlightPainter.afterPaintHighlight&&this.highlightPainter.afterPaintHighlight(n)}},{key:"highlightHovering",value:function(t,n,r){var o,l=i(e.resolveHighlightElements(t));try{for(l.s();!(o=l.n()).done;){var a=o.value;this.eventHandler.onHighlightHoverStateChange&&this.eventHandler.onHighlightHoverStateChange(this.buildContext(t),a,n,r)}}catch(u){l.e(u)}finally{l.f()}}},{key:"getInnerText",value:function(t){if(e.isBlackListedElementNode(t))return"";if(t.nodeType===Node.TEXT_NODE)return t.textContent;if("undefined"===typeof t.innerText){for(var n="",r=0;r<t.childNodes.length;r++)n+=this.getInnerText(t.childNodes[r]);return n}return t.innerText}},{key:"getNormalizedInnerText",value:function(t){return e.normalizeText(this.getInnerText(t))}},{key:"findLastChildTextNode",value:function(t){if(!t)return null;if(t.nodeType===Node.TEXT_NODE)return t;if(t.childNodes)for(var n=t.childNodes.length-1;n>=0;n--)if(!e.isBlackListedElementNode(t.childNodes[n])){var r=this.findLastChildTextNode(t.childNodes[n]);if(null!==r)return r}return null}},{key:"findFirstChildTextNode",value:function(t){if(t.nodeType===Node.TEXT_NODE)return t;if(t.childNodes)for(var n=0;n<t.childNodes.length;n++)if(!e.isBlackListedElementNode(t.childNodes[n])){var r=this.findFirstChildTextNode(t.childNodes[n]);if(null!==r)return r}return null}},{key:"findPreviousTextNodeInDomTree",value:function(t){for(;t;){for(var n;e.isBlackListedElementNode((null===(r=t)||void 0===r?void 0:r.previousSibling)||null);){var r,i;t=(null===(i=t)||void 0===i?void 0:i.previousSibling)||null}for(;null===(o=t)||void 0===o?void 0:o.previousSibling;){var o,l,a=this.findLastChildTextNode((null===(l=t)||void 0===l?void 0:l.previousSibling)||null);if(a)return a;t=t.previousSibling}t=(null===(n=t)||void 0===n?void 0:n.parentElement)||null}return null}},{key:"findNextTextNodeInDomTree",value:function(t){for(;t;){for(var n;e.isBlackListedElementNode((null===(r=t)||void 0===r?void 0:r.nextSibling)||null);){var r,i;t=(null===(i=t)||void 0===i?void 0:i.nextSibling)||null}for(;null===(o=t)||void 0===o?void 0:o.nextSibling;){var o,l;if(e.isBlackListedElementNode(null===(l=t)||void 0===l?void 0:l.nextSibling))t=t.nextSibling;else{var a=this.findFirstChildTextNode(t.nextSibling);if(a)return a;t=t.nextSibling}}t=(null===(n=t)||void 0===n?void 0:n.parentElement)||null}return null}},{key:"forwardOffset",value:function(e,t){var n=e.element,r=e.offset,i=this.getNormalizedInnerText(n);if(i.length>t+r)return{element:n,offset:r+=t};var o=this.findNextTextNodeInDomTree(n);return o?this.forwardOffset({element:o,offset:0},t-(i.length-r)):{element:n,offset:r=this.getInnerText(n)}}},{key:"backwardOffset",value:function(e,t){var n=e.element,r=e.offset;if(r>=t)return{element:n,offset:r-=t};var i=this.findPreviousTextNodeInDomTree(n);return i?this.backwardOffset({element:i,offset:this.getNormalizedInnerText(i).length},t-r):{element:n,offset:r=0}}},{key:"findElementAtOffset",value:function(t,n){if(t.nodeType===Node.TEXT_NODE)return{element:t,offset:n};for(var r=0,i=0;i<t.childNodes.length;i++)if(!e.isBlackListedElementNode(t.childNodes[i])){var o=this.getNormalizedInnerText(t.childNodes[i]).length;if(!((r+=o)<n))return this.findElementAtOffset(t.childNodes[i],n-(r-o))}throw new Error("failed to findElementAtOffset")}},{key:"trimRangeSpaces",value:function(e){var t=this.getInnerText(e.startContainer).substr(e.startOffset),n=t.trimStart();e.setStart(e.startContainer,e.startOffset+(t.length-n.length));var r=this.getInnerText(e.endContainer).substr(0,e.endOffset),i=r.trimEnd();e.setEnd(e.endContainer,e.endOffset-(r.length-i.length))}},{key:"convertTextNodeToHighlightElement",value:function(e){var t,n,r=document.createElement("web-marker-highlight");return null===(t=e.parentElement)||void 0===t||t.insertBefore(r,e.nextSibling),null===(n=e.parentElement)||void 0===n||n.removeChild(e),r.appendChild(e),r}},{key:"buildContext",value:function(e){return{serializedRange:this.state.uidToSerializedRange[e],marker:this}}},{key:"adjustRangeAroundBlackListedElement",value:function(t){for(var n=t.startContainer,r=null;n;)e.isBlackListedElementNode(n)&&(r=n),n=n.parentElement;n=t.endContainer;for(var i=null;n;)e.isBlackListedElementNode(n)&&(i=n),n=n.parentElement;if(r&&i&&r===i)throw new Error("cannot highlight blacklisted element");if(r&&t.setStart(this.findNextTextNodeInDomTree(r),0),i){var o=this.findPreviousTextNodeInDomTree(i);t.setEnd(o,this.getInnerText(o).length)}}},{key:"getSerializedRangeFromUid",value:function(e){return this.state.uidToSerializedRange[e]||null}},{key:"resolveSerializedRangeOffsetInText",value:function(t,n){var r,o=e.normalizeText(n.textBefore),l=e.normalizeText(n.textAfter),a=e.normalizeText(n.text),u=i(H);try{for(u.s();!(r=u.n()).done;){var f=r.value,s=(f.textBefore?o:"")+a+(f.textAfter?l:""),d=t.indexOf(s);if(d>=0)return d+(f.textBefore?o.length:0)}}catch(c){u.e(c)}finally{u.f()}throw new k("failed to deserialize range")}}])&&l(t.prototype,n),r&&l(t,r),e}();w.normalizeTextCache={};var H=[{textBefore:!0,textAfter:!0},{textBefore:!1,textAfter:!0},{textBefore:!0,textAfter:!1},{textBefore:!1,textAfter:!1}],R=w,I={isDeserializationError:function(e){return e instanceof k}}}])}));
|
|
2
2
|
//# sourceMappingURL=web-marker.js.map
|
package/build/web-marker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://web-marker/webpack/universalModuleDefinition","webpack://web-marker/webpack/bootstrap","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/rng.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/regex.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/validate.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/v4.js","webpack://web-marker/./src/utils/makeid.ts","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://web-marker/./src/lib/classes/errors/DeserializationError.ts","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://web-marker/./src/lib/classes/Marker.ts","webpack://web-marker/./src/libroot.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_arrayLikeToArray","arr","len","length","arr2","Array","_createForOfIteratorHelper","iterator","isArray","minLen","toString","slice","constructor","from","test","F","done","e","_e","f","TypeError","it","err","normalCompletion","didErr","step","next","_e2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","configurable","writable","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","Error","validate","uuid","REGEX","byteToHex","push","substr","stringify","offset","arguments","undefined","toLowerCase","v4","options","buf","rnds","random","makeid","uuidv4","_setPrototypeOf","setPrototypeOf","__proto__","_getPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","_typeof","obj","_possibleConstructorReturn","self","ReferenceError","Parent","args","Class","a","apply","Function","_cache","Map","fn","indexOf","has","set","Wrapper","this","DeserializationError","subClass","superClass","Derived","result","Super","NewTarget","blackListedElementStyle","document","createElement","innerText","defaultHighlightPainter","paintHighlight","context","element","console","log","style","textDecoration","textDecorationColor","defaultEventHandler","onHighlightClick","onHighlightHoverStateChange","hovering","backgroundColor","Marker","rootElement","highlightPainter","eventHandler","state","lastHoverId","uidToSerializedRange","clickListener","HTMLElement","id","getAttribute","buildContext","mouseoverListener","newHoverId","oldHoverId","highlightHovering","body","protoProps","staticProps","selection","getSelection","empty","removeAllRanges","highlightId","elements","getElementsByTagName","item","normalizeTextCache","replace","nodeType","Node","ELEMENT_NODE","computedStyle","getComputedStyle","display","visibility","className","tagName","textNode","normalizedOffset","textContent","cumulative","normalizeText","childNodes","parentNode","insertBefore","removeChild","range","addRange","uid","charsToKeepForTextBeforeAndTextAfter","head","appendChild","adjustRangeAroundBlackListedElement","convertRangeToSelection","text","textNormalized","textBefore","textAfter","getInnerText","startContainer","startOffset","ptr","findPreviousTextNodeInDomTree","endContainer","endOffset","findNextTextNodeInDomTree","serializedRanges","errors","batchDeserializeRange","deserializedRanges","results","deserializedRangeErrors","collapsed","setElementHighlightIdAttribute","setAttribute","word","splitText","convertTextNodeToHighlightElement","toPaint","forEach","decoratedElement","parentElement","nextSibling","paintHighlights","ex","serializedRange","batchPaint","resolveHighlightElements","unpaintElement","rootText","getNormalizedInnerText","resolveSerializedRangeOffsetInText","start","findElementAtOffset","end","createRange","setStart","getRealOffset","setEnd","trimRangeSpaces","addEventListener","removeEventListener","beforePaintHighlight","afterPaintHighlight","isBlackListedElementNode","TEXT_NODE","node","candidate","findLastChildTextNode","findFirstChildTextNode","previousSibling","toMove","elementText","nextTextNode","forwardOffset","previousTextNode","backwardOffset","cumulativeOffset","childSize","startTrimmed","trimStart","endTrimmed","trimEnd","marker","blacklistedParentOfStartContainer","blacklistedParentOfEndContainer","prevNode","textBeforeNormalized","textAfterNormalized","resolveSerializedRangeOffsetInTextStrategies","strategy","textToSearch","index","Errors","isDeserializationError"],"mappings":"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","file":"web-marker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"web-marker\"] = factory();\n\telse\n\t\troot[\"web-marker\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { v4 as uuidv4 } from \"uuid\";\n\nexport default function makeid() {\n return uuidv4();\n}\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeFunction from \"./isNativeFunction\";\nimport construct from \"./construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default class DeserializationError extends Error {}\n\nexport function isDeserializationError(err: Error): boolean {\n return err instanceof DeserializationError;\n}\n","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (isNativeReflectConstruct()) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","import makeid from \"../../utils/makeid\";\nimport EventHandler from \"./EventHandler\";\nimport HighlightPainter from \"./HighlightPainter\";\nimport EventHandlerContext from \"./Context\";\nimport Context from \"./Context\";\nimport SerializedRange from \"./SerializedRange\";\nimport DeserializationError from \"./errors/DeserializationError\";\n\nconst HighlightTagName = \"web-marker-highlight\";\nconst HighlightBlacklistedElementClassName = \"web-marker-black-listed-element\";\nconst AttributeNameHighlightId = \"highlight-id\";\n\nconst defaultCharsToKeepForTextBeforeAndTextAfter = 128;\nconst blackListedElementStyle = document.createElement(\"style\");\nblackListedElementStyle.innerText = `.${HighlightBlacklistedElementClassName} {display:none!important;};`;\n\ninterface MarkerConstructorArgs {\n rootElement?: HTMLElement;\n eventHandler?: EventHandler;\n highlightPainter?: HighlightPainter;\n}\n\nconst defaultHighlightPainter: HighlightPainter = {\n paintHighlight: (context: Context, element: HTMLElement) => {\n console.log(\"paintHighlight\", context, element);\n element.style.textDecoration = \"underline\";\n element.style.textDecorationColor = \"orange\";\n },\n};\n\nconst defaultEventHandler: EventHandler = {\n onHighlightClick: (context, element) => {\n console.log(\"onHighlightClick\", context, element);\n },\n onHighlightHoverStateChange: (context, element, hovering) => {\n console.log(\"onHighlightHoverStateChange\", context, element);\n if (hovering) {\n element.style.backgroundColor = \"#FFE49C\";\n } else {\n element.style.backgroundColor = \"\";\n }\n },\n};\n\nclass Marker {\n public static normalizeTextCache = {} as any;\n rootElement: Element;\n eventHandler: EventHandler;\n highlightPainter: HighlightPainter;\n state = {\n lastHoverId: \"\",\n uidToSerializedRange: {} as { [key: string]: SerializedRange },\n };\n\n constructor({\n rootElement,\n highlightPainter,\n eventHandler,\n }: MarkerConstructorArgs) {\n this.rootElement = rootElement || document.body;\n this.highlightPainter = highlightPainter || defaultHighlightPainter;\n this.eventHandler = eventHandler || defaultEventHandler;\n }\n\n public static clearSelection() {\n const selection = window.getSelection();\n if (!selection) {\n return;\n }\n if (selection.empty) {\n selection.empty();\n } else if (selection.removeAllRanges) {\n selection.removeAllRanges();\n }\n }\n\n private static resolveHighlightElements(highlightId: string): HTMLElement[] {\n let elements: HTMLElement[] = [];\n for (let item of Array.from(\n document.getElementsByTagName(HighlightTagName)\n )) {\n if (item.getAttribute(AttributeNameHighlightId) === highlightId) {\n elements.push(item as HTMLElement);\n }\n }\n return elements;\n }\n\n private static normalizeText(s: string) {\n if (!Marker.normalizeTextCache[s]) {\n Marker.normalizeTextCache[s] = s.replace(/\\s/g, \"\").toLowerCase();\n }\n return Marker.normalizeTextCache[s];\n }\n\n private static isBlackListedElementNode(element: Node | null) {\n if (!element) {\n return false;\n }\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const computedStyle = getComputedStyle(element as any);\n if (computedStyle.display === \"none\") {\n return true;\n }\n if (computedStyle.visibility === \"hidden\") {\n return true;\n }\n\n const className = (element as any).className;\n if (\n className &&\n className.indexOf &&\n className.indexOf(HighlightBlacklistedElementClassName) >= 0\n ) {\n return true;\n }\n\n const tagName = (element as any).tagName;\n return (\n tagName === \"STYLE\" ||\n tagName === \"SCRIPT\" ||\n tagName === \"TITLE\" ||\n tagName === \"NOSCRIPT\"\n );\n }\n\n private static getRealOffset(textNode: Node, normalizedOffset: number) {\n const s = textNode.textContent || \"\";\n let cumulative = 0;\n for (let i = 0; i < s.length; i++) {\n while (i < s.length && !Marker.normalizeText(s.substr(i, 1))) {\n // omit whitespaces\n i++;\n }\n if (cumulative === normalizedOffset) {\n return i;\n }\n cumulative++;\n }\n if (cumulative === normalizedOffset) {\n return s.length;\n }\n throw new Error(\"failed to get real offset\");\n }\n\n private static unpaintElement(element: HTMLElement) {\n let childNodes = Array.from(element.childNodes);\n for (let i = 0; i < childNodes.length; i++) {\n element.parentNode?.insertBefore(childNodes[i], element);\n }\n element.parentNode?.removeChild(element);\n }\n\n private static convertRangeToSelection(range: Range) {\n const selection = window.getSelection() as any;\n selection.removeAllRanges();\n selection.addRange(range);\n return selection;\n }\n\n public serializeRange(\n range: Range,\n options: { uid?: string; charsToKeepForTextBeforeAndTextAfter?: number } = {\n uid: undefined,\n charsToKeepForTextBeforeAndTextAfter:\n defaultCharsToKeepForTextBeforeAndTextAfter,\n }\n ): SerializedRange | null {\n document.head.appendChild(blackListedElementStyle);\n\n try {\n this.adjustRangeAroundBlackListedElement(range);\n const uid = options?.uid || makeid();\n const charsToKeepForTextBeforeAndTextAfter =\n options?.charsToKeepForTextBeforeAndTextAfter ||\n defaultCharsToKeepForTextBeforeAndTextAfter;\n const selection = Marker.convertRangeToSelection(range);\n\n let text = selection.toString();\n let textNormalized = Marker.normalizeText(text);\n if (textNormalized) {\n let textBefore = \"\";\n let textAfter = \"\";\n\n {\n // find textBefore\n textBefore =\n textBefore +\n this.getInnerText(range.startContainer).substr(\n 0,\n range.startOffset\n );\n\n let ptr = range.startContainer as Node | null;\n while (textBefore.length < charsToKeepForTextBeforeAndTextAfter) {\n ptr = this.findPreviousTextNodeInDomTree(ptr);\n if (!ptr) {\n // already reached the front\n break;\n }\n textBefore = (ptr as any).textContent + textBefore;\n }\n if (textBefore.length > charsToKeepForTextBeforeAndTextAfter) {\n textBefore = textBefore.substr(\n textBefore.length - charsToKeepForTextBeforeAndTextAfter\n );\n }\n }\n\n {\n // find textAfter\n textAfter =\n textAfter +\n this.getInnerText(range.endContainer).substr(range.endOffset);\n\n let ptr = range.endContainer as Node | null;\n while (textAfter.length < charsToKeepForTextBeforeAndTextAfter) {\n ptr = this.findNextTextNodeInDomTree(ptr);\n if (!ptr) {\n // already reached the end\n break;\n }\n textAfter = textAfter + (ptr as any).textContent;\n }\n\n if (textAfter.length > charsToKeepForTextBeforeAndTextAfter) {\n textAfter = textAfter.substr(\n 0,\n charsToKeepForTextBeforeAndTextAfter\n );\n }\n }\n\n this.state.uidToSerializedRange[uid] = {\n uid,\n textBefore,\n text,\n textAfter,\n };\n return this.state.uidToSerializedRange[uid];\n }\n\n return null;\n } finally {\n document.head.removeChild(blackListedElementStyle);\n }\n }\n\n public batchPaint(serializedRanges: SerializedRange[]) {\n const errors = {} as any;\n const {results: deserializedRanges, errors: deserializedRangeErrors} = this.batchDeserializeRange(serializedRanges);\n\n for (let i = 0; i < serializedRanges.length; i++) {\n if (deserializedRangeErrors[i]) {\n errors[i] = deserializedRangeErrors[i];\n continue;\n }\n\n const uid = serializedRanges[i].uid;\n const range = deserializedRanges[i];\n\n if (!range.collapsed) {\n const setElementHighlightIdAttribute = (element: HTMLElement) => {\n element.setAttribute(AttributeNameHighlightId, uid);\n };\n\n try {\n (() => {\n if (range.startContainer === range.endContainer) {\n if (range.startOffset === range.endOffset) {\n return;\n }\n // special case\n const word = (<Text>range.startContainer).splitText(\n range.startOffset\n );\n word.splitText(range.endOffset);\n setElementHighlightIdAttribute(\n this.convertTextNodeToHighlightElement(word)\n );\n\n return;\n }\n\n const toPaint = [];\n let ptr = (<Text>range.startContainer).splitText(\n range.startOffset\n ) as Node | null;\n toPaint.push(ptr);\n\n while (true) {\n ptr = this.findNextTextNodeInDomTree(ptr);\n if (ptr === range.endContainer) {\n break;\n }\n toPaint.push(ptr);\n }\n\n (<Text>range.endContainer).splitText(range.endOffset);\n toPaint.push(range.endContainer);\n\n toPaint.forEach((item) => {\n if (item) {\n let decoratedElement = this.convertTextNodeToHighlightElement(item);\n setElementHighlightIdAttribute(decoratedElement);\n\n if (!decoratedElement.innerText) {\n decoratedElement.parentElement?.insertBefore(\n item,\n decoratedElement.nextSibling\n );\n decoratedElement.parentElement?.removeChild(decoratedElement);\n }\n }\n });\n\n return;\n })()\n\n this.paintHighlights(uid);\n } catch (ex) {\n errors[i] = ex;\n }\n }\n }\n\n return {errors};\n }\n\n public paint(serializedRange: SerializedRange) {\n if (!serializedRange) {\n return;\n }\n const {errors} = this.batchPaint([serializedRange]);\n if (errors[0]) {\n throw errors[0];\n }\n }\n\n public unpaint(serializedRange: SerializedRange) {\n const id = serializedRange.uid;\n\n for (let element of Marker.resolveHighlightElements(id)) {\n Marker.unpaintElement(element);\n }\n }\n\n private batchDeserializeRange(serializedRanges: SerializedRange[]) {\n document.head.appendChild(blackListedElementStyle);\n const results = {} as any;\n const errors = {} as any;\n const rootText = this.getNormalizedInnerText(this.rootElement);\n\n for (let i = 0; i < serializedRanges.length; i++) {\n try {\n this.state.uidToSerializedRange[serializedRanges[i].uid] = serializedRanges[i];\n const offset = this.resolveSerializedRangeOffsetInText(\n rootText,\n serializedRanges[i]\n );\n const start = this.findElementAtOffset(this.rootElement, offset);\n const end = this.findElementAtOffset(\n this.rootElement,\n offset + Marker.normalizeText(serializedRanges[i].text).length\n );\n const range = document.createRange();\n range.setStart(\n start.element,\n Marker.getRealOffset(start.element, start.offset)\n );\n range.setEnd(end.element, Marker.getRealOffset(end.element, end.offset));\n this.trimRangeSpaces(range);\n results[i] = range;\n } catch (ex) {\n errors[i] = ex;\n }\n }\n\n document.head.removeChild(blackListedElementStyle);\n return {results, errors}\n }\n\n public deserializeRange(serializedRange: SerializedRange) {\n const {results, errors} = this.batchDeserializeRange([serializedRange]);\n if (errors[0]) {\n throw errors[0];\n }\n return results[0];\n }\n\n clickListener = (e: Event) => {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return;\n }\n\n const target = e.target as HTMLElement;\n const id = target.getAttribute(AttributeNameHighlightId);\n if (id && this.eventHandler.onHighlightClick) {\n this.eventHandler.onHighlightClick(this.buildContext(id), target, e);\n }\n };\n\n mouseoverListener = (e: Event) => {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return;\n }\n\n const target = e.target as HTMLElement;\n let newHoverId = target?.getAttribute(AttributeNameHighlightId);\n if (this.state.lastHoverId === newHoverId) {\n return;\n }\n const oldHoverId = this.state.lastHoverId;\n this.state.lastHoverId = newHoverId as string;\n\n if (newHoverId) {\n this.highlightHovering(newHoverId, true, e);\n }\n if (oldHoverId) {\n this.highlightHovering(oldHoverId, false, e);\n }\n };\n\n public addEventListeners() {\n this.rootElement.addEventListener(\"click\", this.clickListener, true);\n this.rootElement.addEventListener(\n \"mouseover\",\n this.mouseoverListener,\n true\n );\n }\n\n public removeEventListeners() {\n this.rootElement.removeEventListener(\"click\", this.clickListener, true);\n this.rootElement.removeEventListener(\n \"mouseover\",\n this.mouseoverListener,\n true\n );\n }\n\n public paintHighlights(highlightId: string) {\n let context = this.buildContext(highlightId);\n if (this.highlightPainter.beforePaintHighlight) {\n this.highlightPainter.beforePaintHighlight(context);\n }\n for (let element of Marker.resolveHighlightElements(highlightId)) {\n this.highlightPainter.paintHighlight(\n context,\n element\n );\n }\n if (this.highlightPainter.afterPaintHighlight) {\n this.highlightPainter.afterPaintHighlight(context);\n }\n }\n\n private highlightHovering(highlightId: string, hovering: boolean, e: Event) {\n for (let element of Marker.resolveHighlightElements(highlightId)) {\n if (this.eventHandler.onHighlightHoverStateChange) {\n this.eventHandler.onHighlightHoverStateChange(\n this.buildContext(highlightId),\n element as any,\n hovering,\n e\n );\n }\n }\n }\n\n private getInnerText(element: Node) {\n if (Marker.isBlackListedElementNode(element)) {\n return \"\";\n }\n if (element.nodeType === Node.TEXT_NODE) {\n return element.textContent;\n } else {\n if (typeof (element as any).innerText === \"undefined\") {\n let result = \"\";\n for (let i = 0; i < element.childNodes.length; i++) {\n result += this.getInnerText(element.childNodes[i]);\n }\n return result;\n } else {\n return (element as any).innerText;\n }\n }\n }\n\n private getNormalizedInnerText(element: Node) {\n return Marker.normalizeText(this.getInnerText(element));\n }\n\n private findLastChildTextNode(node: Node | null): Node | null {\n if (!node) {\n return null;\n }\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n for (let i = node.childNodes.length - 1; i >= 0; i--) {\n if (Marker.isBlackListedElementNode(node.childNodes[i])) {\n continue;\n }\n const candidate = this.findLastChildTextNode(node.childNodes[i]);\n if (candidate !== null) {\n return candidate;\n }\n }\n }\n return null;\n }\n\n private findFirstChildTextNode(node: Node): Node | null {\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n if (Marker.isBlackListedElementNode(node.childNodes[i])) {\n continue;\n }\n const candidate = this.findFirstChildTextNode(node.childNodes[i]);\n if (candidate !== null) {\n return candidate;\n }\n }\n }\n return null;\n }\n\n private findPreviousTextNodeInDomTree(ptr: Node | null) {\n while (ptr) {\n while (Marker.isBlackListedElementNode(ptr?.previousSibling || null)) {\n ptr = ptr?.previousSibling || null;\n }\n while (ptr?.previousSibling) {\n const candidate = this.findLastChildTextNode(\n ptr?.previousSibling || null\n );\n if (candidate) {\n return candidate;\n }\n ptr = ptr.previousSibling;\n }\n\n ptr = ptr?.parentElement || null;\n }\n return null;\n }\n\n private findNextTextNodeInDomTree(ptr: Node | null) {\n while (ptr) {\n while (Marker.isBlackListedElementNode(ptr?.nextSibling || null)) {\n ptr = ptr?.nextSibling || null;\n }\n while (ptr?.nextSibling) {\n if (Marker.isBlackListedElementNode(ptr?.nextSibling)) {\n ptr = ptr.nextSibling;\n continue;\n }\n const candidate = this.findFirstChildTextNode(ptr.nextSibling);\n if (candidate) {\n return candidate;\n }\n ptr = ptr.nextSibling;\n }\n\n ptr = ptr?.parentElement || null;\n }\n return null;\n }\n\n private forwardOffset(\n { element, offset }: { element: Node; offset: number },\n toMove: number\n ): { element: Node; offset: number } {\n const elementText = this.getNormalizedInnerText(element);\n if (elementText.length > toMove + offset) {\n offset += toMove;\n return { element, offset };\n } else {\n let nextTextNode = this.findNextTextNodeInDomTree(element);\n if (nextTextNode) {\n return this.forwardOffset(\n {\n element: nextTextNode,\n offset: 0,\n },\n toMove - (elementText.length - offset)\n );\n } else {\n offset = this.getInnerText(element);\n return { element, offset };\n }\n }\n }\n\n private backwardOffset(\n { element, offset }: { element: Node; offset: number },\n toMove: number\n ): { element: Node; offset: number } {\n if (offset >= toMove) {\n offset -= toMove;\n return { element, offset };\n } else {\n const previousTextNode = this.findPreviousTextNodeInDomTree(element);\n if (previousTextNode) {\n return this.backwardOffset(\n {\n element: previousTextNode,\n offset: this.getNormalizedInnerText(previousTextNode).length,\n },\n toMove - offset\n );\n } else {\n offset = 0;\n return { element, offset };\n }\n }\n }\n\n private findElementAtOffset(\n root: Node,\n offset: number\n ): { element: Node; offset: number } {\n if (root.nodeType === Node.TEXT_NODE) {\n return { element: root as Text, offset: offset };\n } else {\n let cumulativeOffset = 0;\n for (let i = 0; i < root.childNodes.length; i++) {\n if (Marker.isBlackListedElementNode(root.childNodes[i])) {\n continue;\n }\n const childSize = this.getNormalizedInnerText(\n root.childNodes[i]\n ).length;\n cumulativeOffset += childSize;\n if (cumulativeOffset < offset) {\n continue;\n }\n return this.findElementAtOffset(\n root.childNodes[i],\n offset - (cumulativeOffset - childSize)\n );\n }\n throw new Error(\"failed to findElementAtOffset\");\n }\n }\n\n private trimRangeSpaces(range: Range) {\n let start = this.getInnerText(range.startContainer).substr(\n range.startOffset\n );\n let startTrimmed = start.trimStart();\n range.setStart(\n range.startContainer,\n range.startOffset + (start.length - startTrimmed.length)\n );\n\n let end = this.getInnerText(range.endContainer).substr(0, range.endOffset);\n let endTrimmed = end.trimEnd();\n range.setEnd(\n range.endContainer,\n range.endOffset - (end.length - endTrimmed.length)\n );\n }\n\n private convertTextNodeToHighlightElement(word: Node) {\n const decoratedElement = document.createElement(HighlightTagName);\n word.parentElement?.insertBefore(decoratedElement, word.nextSibling);\n word.parentElement?.removeChild(word);\n decoratedElement.appendChild(word);\n return decoratedElement;\n }\n\n private buildContext(highlightId: string): EventHandlerContext {\n return {\n serializedRange: this.state.uidToSerializedRange[highlightId],\n marker: this,\n };\n }\n\n private adjustRangeAroundBlackListedElement(range: Range) {\n let ptr = range.startContainer;\n let blacklistedParentOfStartContainer = null;\n while (ptr) {\n if (Marker.isBlackListedElementNode(ptr)) {\n blacklistedParentOfStartContainer = ptr;\n }\n ptr = ptr.parentElement as any;\n }\n\n ptr = range.endContainer;\n let blacklistedParentOfEndContainer = null;\n while (ptr) {\n if (Marker.isBlackListedElementNode(ptr)) {\n blacklistedParentOfEndContainer = ptr;\n }\n ptr = ptr.parentElement as any;\n }\n if (\n blacklistedParentOfStartContainer &&\n blacklistedParentOfEndContainer &&\n blacklistedParentOfStartContainer === blacklistedParentOfEndContainer\n ) {\n throw new Error(\"cannot highlight blacklisted element\");\n }\n\n if (blacklistedParentOfStartContainer) {\n range.setStart(\n this.findNextTextNodeInDomTree(\n blacklistedParentOfStartContainer\n ) as any,\n 0\n );\n }\n if (blacklistedParentOfEndContainer) {\n let prevNode = this.findPreviousTextNodeInDomTree(\n blacklistedParentOfEndContainer\n ) as any;\n range.setEnd(prevNode, this.getInnerText(prevNode).length);\n }\n }\n\n public getSerializedRangeFromUid(uid: string): SerializedRange | null {\n return this.state.uidToSerializedRange[uid] || null;\n }\n\n resolveSerializedRangeOffsetInText(\n text: any,\n serializedRange: SerializedRange\n ): number {\n // TODO: optimize algorithm, maybe use https://github.com/google/diff-match-patch\n const textBeforeNormalized = Marker.normalizeText(\n serializedRange.textBefore\n );\n const textAfterNormalized = Marker.normalizeText(serializedRange.textAfter);\n const textNormalized = Marker.normalizeText(serializedRange.text);\n\n for (let strategy of resolveSerializedRangeOffsetInTextStrategies) {\n const textToSearch =\n (strategy.textBefore ? textBeforeNormalized : \"\") +\n textNormalized +\n (strategy.textAfter ? textAfterNormalized : \"\");\n\n const index = text.indexOf(textToSearch);\n if (index >= 0) {\n return index + (strategy.textBefore ? textBeforeNormalized.length : 0);\n }\n }\n\n throw new DeserializationError(`failed to deserialize range`);\n }\n}\n\nconst resolveSerializedRangeOffsetInTextStrategies = [\n {\n textBefore: true,\n textAfter: true,\n },\n {\n textBefore: false,\n textAfter: true,\n },\n {\n textBefore: true,\n textAfter: false,\n },\n {\n textBefore: false,\n textAfter: false,\n },\n];\n\nexport default Marker;\nexport type { MarkerConstructorArgs };\n","import Marker, { MarkerConstructorArgs } from \"./lib/classes/Marker\";\nimport DeserializationError, {\n isDeserializationError,\n} from \"./lib/classes/errors/DeserializationError\";\nimport SerializedRange from \"./lib/classes/SerializedRange\";\nimport Context from \"./lib/classes/Context\";\nimport EventHandler from \"./lib/classes/EventHandler\";\nimport HighlightPainter from \"./lib/classes/HighlightPainter\";\n\nconst Errors = {\n isDeserializationError,\n};\n\nexport { Marker };\nexport { Errors };\n\nexport type {\n Context,\n EventHandler,\n HighlightPainter,\n SerializedRange,\n MarkerConstructorArgs,\n DeserializationError,\n};\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://web-marker/webpack/universalModuleDefinition","webpack://web-marker/webpack/bootstrap","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/rng.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/regex.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/validate.js","webpack://web-marker/./node_modules/uuid/dist/esm-browser/v4.js","webpack://web-marker/./src/utils/makeid.ts","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://web-marker/./src/lib/classes/errors/DeserializationError.ts","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://web-marker/./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://web-marker/./src/lib/classes/Marker.ts","webpack://web-marker/./src/libroot.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_arrayLikeToArray","arr","len","length","arr2","Array","_createForOfIteratorHelper","iterator","isArray","minLen","toString","slice","constructor","from","test","F","done","e","_e","f","TypeError","it","err","normalCompletion","didErr","step","next","_e2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","configurable","writable","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","Error","validate","uuid","REGEX","byteToHex","push","substr","stringify","offset","arguments","undefined","toLowerCase","v4","options","buf","rnds","random","makeid","uuidv4","_setPrototypeOf","setPrototypeOf","__proto__","_getPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","_typeof","obj","_possibleConstructorReturn","self","ReferenceError","Parent","args","Class","a","apply","Function","_cache","Map","fn","indexOf","has","set","Wrapper","this","DeserializationError","subClass","superClass","Derived","result","Super","NewTarget","blackListedElementStyle","document","createElement","innerText","defaultHighlightPainter","paintHighlight","context","element","console","log","style","textDecoration","textDecorationColor","defaultEventHandler","onHighlightClick","onHighlightHoverStateChange","hovering","backgroundColor","Marker","rootElement","highlightPainter","eventHandler","state","lastHoverId","uidToSerializedRange","clickListener","HTMLElement","id","getAttribute","buildContext","mouseoverListener","newHoverId","oldHoverId","highlightHovering","body","protoProps","staticProps","selection","getSelection","empty","removeAllRanges","highlightId","elements","getElementsByTagName","item","normalizeTextCache","replace","nodeType","Node","ELEMENT_NODE","computedStyle","getComputedStyle","display","visibility","className","tagName","textNode","normalizedOffset","textContent","cumulative","normalizeText","childNodes","parentNode","insertBefore","removeChild","range","addRange","uid","charsToKeepForTextBeforeAndTextAfter","head","appendChild","adjustRangeAroundBlackListedElement","convertRangeToSelection","text","textNormalized","textBefore","textAfter","getInnerText","startContainer","startOffset","ptr","findPreviousTextNodeInDomTree","endContainer","endOffset","findNextTextNodeInDomTree","serializedRanges","errors","batchDeserializeRange","deserializedRanges","results","deserializedRangeErrors","collapsed","setElementHighlightIdAttribute","setAttribute","word","splitText","convertTextNodeToHighlightElement","toPaint","forEach","decoratedElement","parentElement","nextSibling","paintHighlights","ex","serializedRange","batchPaint","resolveHighlightElements","unpaintElement","rootText","getNormalizedInnerText","resolveSerializedRangeOffsetInText","start","findElementAtOffset","end","createRange","setStart","getRealOffset","setEnd","trimRangeSpaces","addEventListener","removeEventListener","beforePaintHighlight","afterPaintHighlight","isBlackListedElementNode","TEXT_NODE","node","candidate","findLastChildTextNode","findFirstChildTextNode","previousSibling","toMove","elementText","nextTextNode","forwardOffset","previousTextNode","backwardOffset","cumulativeOffset","childSize","startTrimmed","trimStart","endTrimmed","trimEnd","marker","blacklistedParentOfStartContainer","blacklistedParentOfEndContainer","prevNode","textBeforeNormalized","textAfterNormalized","resolveSerializedRangeOffsetInTextStrategies","strategy","textToSearch","index","Errors","isDeserializationError"],"mappings":"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","file":"web-marker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"web-marker\"] = factory();\n\telse\n\t\troot[\"web-marker\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { v4 as uuidv4 } from \"uuid\";\n\nexport default function makeid() {\n return uuidv4();\n}\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeFunction from \"./isNativeFunction\";\nimport construct from \"./construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default class DeserializationError extends Error {}\n\nexport function isDeserializationError(err: Error): boolean {\n return err instanceof DeserializationError;\n}\n","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (isNativeReflectConstruct()) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","import makeid from \"../../utils/makeid\";\nimport EventHandler from \"./EventHandler\";\nimport HighlightPainter from \"./HighlightPainter\";\nimport EventHandlerContext from \"./Context\";\nimport Context from \"./Context\";\nimport SerializedRange from \"./SerializedRange\";\nimport DeserializationError from \"./errors/DeserializationError\";\n\nconst HighlightTagName = \"web-marker-highlight\";\nconst HighlightBlacklistedElementClassName = \"web-marker-black-listed-element\";\nconst AttributeNameHighlightId = \"highlight-id\";\n\nconst defaultCharsToKeepForTextBeforeAndTextAfter = 128;\nconst blackListedElementStyle = document.createElement(\"style\");\nblackListedElementStyle.innerText = `.${HighlightBlacklistedElementClassName}, math>semantics mi, math>semantics mo {display:none!important;};`;\n\ninterface MarkerConstructorArgs {\n rootElement?: HTMLElement;\n eventHandler?: EventHandler;\n highlightPainter?: HighlightPainter;\n}\n\nconst defaultHighlightPainter: HighlightPainter = {\n paintHighlight: (context: Context, element: HTMLElement) => {\n console.log(\"paintHighlight\", context, element);\n element.style.textDecoration = \"underline\";\n element.style.textDecorationColor = \"orange\";\n },\n};\n\nconst defaultEventHandler: EventHandler = {\n onHighlightClick: (context, element) => {\n console.log(\"onHighlightClick\", context, element);\n },\n onHighlightHoverStateChange: (context, element, hovering) => {\n console.log(\"onHighlightHoverStateChange\", context, element);\n if (hovering) {\n element.style.backgroundColor = \"#FFE49C\";\n } else {\n element.style.backgroundColor = \"\";\n }\n },\n};\n\nclass Marker {\n public static normalizeTextCache = {} as any;\n rootElement: Element;\n eventHandler: EventHandler;\n highlightPainter: HighlightPainter;\n state = {\n lastHoverId: \"\",\n uidToSerializedRange: {} as { [key: string]: SerializedRange },\n };\n\n constructor({\n rootElement,\n highlightPainter,\n eventHandler,\n }: MarkerConstructorArgs) {\n this.rootElement = rootElement || document.body;\n this.highlightPainter = highlightPainter || defaultHighlightPainter;\n this.eventHandler = eventHandler || defaultEventHandler;\n }\n\n public static clearSelection() {\n const selection = window.getSelection();\n if (!selection) {\n return;\n }\n if (selection.empty) {\n selection.empty();\n } else if (selection.removeAllRanges) {\n selection.removeAllRanges();\n }\n }\n\n private static resolveHighlightElements(highlightId: string): HTMLElement[] {\n let elements: HTMLElement[] = [];\n for (let item of Array.from(\n document.getElementsByTagName(HighlightTagName)\n )) {\n if (item.getAttribute(AttributeNameHighlightId) === highlightId) {\n elements.push(item as HTMLElement);\n }\n }\n return elements;\n }\n\n private static normalizeText(s: string) {\n if (!Marker.normalizeTextCache[s]) {\n Marker.normalizeTextCache[s] = s.replace(/\\s/g, \"\").toLowerCase();\n }\n return Marker.normalizeTextCache[s];\n }\n\n private static isBlackListedElementNode(element: Node | null) {\n if (!element) {\n return false;\n }\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const computedStyle = getComputedStyle(element as any);\n if (computedStyle.display === \"none\") {\n return true;\n }\n if (computedStyle.visibility === \"hidden\") {\n return true;\n }\n\n const className = (element as any).className;\n if (\n className &&\n className.indexOf &&\n className.indexOf(HighlightBlacklistedElementClassName) >= 0\n ) {\n return true;\n }\n\n const tagName = (element as any).tagName;\n return (\n tagName === \"STYLE\" ||\n tagName === \"SCRIPT\" ||\n tagName === \"TITLE\" ||\n tagName === \"NOSCRIPT\"\n );\n }\n\n private static getRealOffset(textNode: Node, normalizedOffset: number) {\n const s = textNode.textContent || \"\";\n let cumulative = 0;\n for (let i = 0; i < s.length; i++) {\n while (i < s.length && !Marker.normalizeText(s.substr(i, 1))) {\n // omit whitespaces\n i++;\n }\n if (cumulative === normalizedOffset) {\n return i;\n }\n cumulative++;\n }\n if (cumulative === normalizedOffset) {\n return s.length;\n }\n throw new Error(\"failed to get real offset\");\n }\n\n private static unpaintElement(element: HTMLElement) {\n let childNodes = Array.from(element.childNodes);\n for (let i = 0; i < childNodes.length; i++) {\n element.parentNode?.insertBefore(childNodes[i], element);\n }\n element.parentNode?.removeChild(element);\n }\n\n private static convertRangeToSelection(range: Range) {\n const selection = window.getSelection() as any;\n selection.removeAllRanges();\n selection.addRange(range);\n return selection;\n }\n\n public serializeRange(\n range: Range,\n options: { uid?: string; charsToKeepForTextBeforeAndTextAfter?: number } = {\n uid: undefined,\n charsToKeepForTextBeforeAndTextAfter:\n defaultCharsToKeepForTextBeforeAndTextAfter,\n }\n ): SerializedRange | null {\n document.head.appendChild(blackListedElementStyle);\n\n try {\n this.adjustRangeAroundBlackListedElement(range);\n const uid = options?.uid || makeid();\n const charsToKeepForTextBeforeAndTextAfter =\n options?.charsToKeepForTextBeforeAndTextAfter ||\n defaultCharsToKeepForTextBeforeAndTextAfter;\n const selection = Marker.convertRangeToSelection(range);\n\n let text = selection.toString();\n let textNormalized = Marker.normalizeText(text);\n if (textNormalized) {\n let textBefore = \"\";\n let textAfter = \"\";\n\n {\n // find textBefore\n textBefore =\n textBefore +\n this.getInnerText(range.startContainer).substr(\n 0,\n range.startOffset\n );\n\n let ptr = range.startContainer as Node | null;\n while (textBefore.length < charsToKeepForTextBeforeAndTextAfter) {\n ptr = this.findPreviousTextNodeInDomTree(ptr);\n if (!ptr) {\n // already reached the front\n break;\n }\n textBefore = (ptr as any).textContent + textBefore;\n }\n if (textBefore.length > charsToKeepForTextBeforeAndTextAfter) {\n textBefore = textBefore.substr(\n textBefore.length - charsToKeepForTextBeforeAndTextAfter\n );\n }\n }\n\n {\n // find textAfter\n textAfter =\n textAfter +\n this.getInnerText(range.endContainer).substr(range.endOffset);\n\n let ptr = range.endContainer as Node | null;\n while (textAfter.length < charsToKeepForTextBeforeAndTextAfter) {\n ptr = this.findNextTextNodeInDomTree(ptr);\n if (!ptr) {\n // already reached the end\n break;\n }\n textAfter = textAfter + (ptr as any).textContent;\n }\n\n if (textAfter.length > charsToKeepForTextBeforeAndTextAfter) {\n textAfter = textAfter.substr(\n 0,\n charsToKeepForTextBeforeAndTextAfter\n );\n }\n }\n\n this.state.uidToSerializedRange[uid] = {\n uid,\n textBefore,\n text,\n textAfter,\n };\n return this.state.uidToSerializedRange[uid];\n }\n\n return null;\n } finally {\n document.head.removeChild(blackListedElementStyle);\n }\n }\n\n public batchPaint(serializedRanges: SerializedRange[]) {\n const errors = {} as any;\n const {results: deserializedRanges, errors: deserializedRangeErrors} = this.batchDeserializeRange(serializedRanges);\n\n for (let i = 0; i < serializedRanges.length; i++) {\n if (deserializedRangeErrors[i]) {\n errors[i] = deserializedRangeErrors[i];\n continue;\n }\n\n const uid = serializedRanges[i].uid;\n const range = deserializedRanges[i];\n\n if (!range.collapsed) {\n const setElementHighlightIdAttribute = (element: HTMLElement) => {\n element.setAttribute(AttributeNameHighlightId, uid);\n };\n\n try {\n (() => {\n if (range.startContainer === range.endContainer) {\n if (range.startOffset === range.endOffset) {\n return;\n }\n // special case\n const word = (<Text>range.startContainer).splitText(\n range.startOffset\n );\n word.splitText(range.endOffset);\n setElementHighlightIdAttribute(\n this.convertTextNodeToHighlightElement(word)\n );\n\n return;\n }\n\n const toPaint = [];\n let ptr = (<Text>range.startContainer).splitText(\n range.startOffset\n ) as Node | null;\n toPaint.push(ptr);\n\n while (true) {\n ptr = this.findNextTextNodeInDomTree(ptr);\n if (ptr === range.endContainer) {\n break;\n }\n toPaint.push(ptr);\n }\n\n (<Text>range.endContainer).splitText(range.endOffset);\n toPaint.push(range.endContainer);\n\n toPaint.forEach((item) => {\n if (item) {\n let decoratedElement = this.convertTextNodeToHighlightElement(item);\n setElementHighlightIdAttribute(decoratedElement);\n\n if (!decoratedElement.innerText) {\n decoratedElement.parentElement?.insertBefore(\n item,\n decoratedElement.nextSibling\n );\n decoratedElement.parentElement?.removeChild(decoratedElement);\n }\n }\n });\n\n return;\n })()\n\n this.paintHighlights(uid);\n } catch (ex) {\n errors[i] = ex;\n }\n }\n }\n\n return {errors};\n }\n\n public paint(serializedRange: SerializedRange) {\n if (!serializedRange) {\n return;\n }\n const {errors} = this.batchPaint([serializedRange]);\n if (errors[0]) {\n throw errors[0];\n }\n }\n\n public unpaint(serializedRange: SerializedRange) {\n const id = serializedRange.uid;\n\n for (let element of Marker.resolveHighlightElements(id)) {\n Marker.unpaintElement(element);\n }\n }\n\n private batchDeserializeRange(serializedRanges: SerializedRange[]) {\n document.head.appendChild(blackListedElementStyle);\n const results = {} as any;\n const errors = {} as any;\n const rootText = this.getNormalizedInnerText(this.rootElement);\n\n for (let i = 0; i < serializedRanges.length; i++) {\n try {\n this.state.uidToSerializedRange[serializedRanges[i].uid] = serializedRanges[i];\n const offset = this.resolveSerializedRangeOffsetInText(\n rootText,\n serializedRanges[i]\n );\n const start = this.findElementAtOffset(this.rootElement, offset);\n const end = this.findElementAtOffset(\n this.rootElement,\n offset + Marker.normalizeText(serializedRanges[i].text).length\n );\n const range = document.createRange();\n range.setStart(\n start.element,\n Marker.getRealOffset(start.element, start.offset)\n );\n range.setEnd(end.element, Marker.getRealOffset(end.element, end.offset));\n this.trimRangeSpaces(range);\n results[i] = range;\n } catch (ex) {\n errors[i] = ex;\n }\n }\n\n document.head.removeChild(blackListedElementStyle);\n return {results, errors}\n }\n\n public deserializeRange(serializedRange: SerializedRange) {\n const {results, errors} = this.batchDeserializeRange([serializedRange]);\n if (errors[0]) {\n throw errors[0];\n }\n return results[0];\n }\n\n clickListener = (e: Event) => {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return;\n }\n\n const target = e.target as HTMLElement;\n const id = target.getAttribute(AttributeNameHighlightId);\n if (id && this.eventHandler.onHighlightClick) {\n this.eventHandler.onHighlightClick(this.buildContext(id), target, e);\n }\n };\n\n mouseoverListener = (e: Event) => {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return;\n }\n\n const target = e.target as HTMLElement;\n let newHoverId = target?.getAttribute(AttributeNameHighlightId);\n if (this.state.lastHoverId === newHoverId) {\n return;\n }\n const oldHoverId = this.state.lastHoverId;\n this.state.lastHoverId = newHoverId as string;\n\n if (newHoverId) {\n this.highlightHovering(newHoverId, true, e);\n }\n if (oldHoverId) {\n this.highlightHovering(oldHoverId, false, e);\n }\n };\n\n public addEventListeners() {\n this.rootElement.addEventListener(\"click\", this.clickListener, true);\n this.rootElement.addEventListener(\n \"mouseover\",\n this.mouseoverListener,\n true\n );\n }\n\n public removeEventListeners() {\n this.rootElement.removeEventListener(\"click\", this.clickListener, true);\n this.rootElement.removeEventListener(\n \"mouseover\",\n this.mouseoverListener,\n true\n );\n }\n\n public paintHighlights(highlightId: string) {\n let context = this.buildContext(highlightId);\n if (this.highlightPainter.beforePaintHighlight) {\n this.highlightPainter.beforePaintHighlight(context);\n }\n for (let element of Marker.resolveHighlightElements(highlightId)) {\n this.highlightPainter.paintHighlight(\n context,\n element\n );\n }\n if (this.highlightPainter.afterPaintHighlight) {\n this.highlightPainter.afterPaintHighlight(context);\n }\n }\n\n private highlightHovering(highlightId: string, hovering: boolean, e: Event) {\n for (let element of Marker.resolveHighlightElements(highlightId)) {\n if (this.eventHandler.onHighlightHoverStateChange) {\n this.eventHandler.onHighlightHoverStateChange(\n this.buildContext(highlightId),\n element as any,\n hovering,\n e\n );\n }\n }\n }\n\n private getInnerText(element: Node) {\n if (Marker.isBlackListedElementNode(element)) {\n return \"\";\n }\n if (element.nodeType === Node.TEXT_NODE) {\n return element.textContent;\n } else {\n if (typeof (element as any).innerText === \"undefined\") {\n let result = \"\";\n for (let i = 0; i < element.childNodes.length; i++) {\n result += this.getInnerText(element.childNodes[i]);\n }\n return result;\n } else {\n return (element as any).innerText;\n }\n }\n }\n\n private getNormalizedInnerText(element: Node) {\n return Marker.normalizeText(this.getInnerText(element));\n }\n\n private findLastChildTextNode(node: Node | null): Node | null {\n if (!node) {\n return null;\n }\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n for (let i = node.childNodes.length - 1; i >= 0; i--) {\n if (Marker.isBlackListedElementNode(node.childNodes[i])) {\n continue;\n }\n const candidate = this.findLastChildTextNode(node.childNodes[i]);\n if (candidate !== null) {\n return candidate;\n }\n }\n }\n return null;\n }\n\n private findFirstChildTextNode(node: Node): Node | null {\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n if (Marker.isBlackListedElementNode(node.childNodes[i])) {\n continue;\n }\n const candidate = this.findFirstChildTextNode(node.childNodes[i]);\n if (candidate !== null) {\n return candidate;\n }\n }\n }\n return null;\n }\n\n private findPreviousTextNodeInDomTree(ptr: Node | null) {\n while (ptr) {\n while (Marker.isBlackListedElementNode(ptr?.previousSibling || null)) {\n ptr = ptr?.previousSibling || null;\n }\n while (ptr?.previousSibling) {\n const candidate = this.findLastChildTextNode(\n ptr?.previousSibling || null\n );\n if (candidate) {\n return candidate;\n }\n ptr = ptr.previousSibling;\n }\n\n ptr = ptr?.parentElement || null;\n }\n return null;\n }\n\n private findNextTextNodeInDomTree(ptr: Node | null) {\n while (ptr) {\n while (Marker.isBlackListedElementNode(ptr?.nextSibling || null)) {\n ptr = ptr?.nextSibling || null;\n }\n while (ptr?.nextSibling) {\n if (Marker.isBlackListedElementNode(ptr?.nextSibling)) {\n ptr = ptr.nextSibling;\n continue;\n }\n const candidate = this.findFirstChildTextNode(ptr.nextSibling);\n if (candidate) {\n return candidate;\n }\n ptr = ptr.nextSibling;\n }\n\n ptr = ptr?.parentElement || null;\n }\n return null;\n }\n\n private forwardOffset(\n { element, offset }: { element: Node; offset: number },\n toMove: number\n ): { element: Node; offset: number } {\n const elementText = this.getNormalizedInnerText(element);\n if (elementText.length > toMove + offset) {\n offset += toMove;\n return { element, offset };\n } else {\n let nextTextNode = this.findNextTextNodeInDomTree(element);\n if (nextTextNode) {\n return this.forwardOffset(\n {\n element: nextTextNode,\n offset: 0,\n },\n toMove - (elementText.length - offset)\n );\n } else {\n offset = this.getInnerText(element);\n return { element, offset };\n }\n }\n }\n\n private backwardOffset(\n { element, offset }: { element: Node; offset: number },\n toMove: number\n ): { element: Node; offset: number } {\n if (offset >= toMove) {\n offset -= toMove;\n return { element, offset };\n } else {\n const previousTextNode = this.findPreviousTextNodeInDomTree(element);\n if (previousTextNode) {\n return this.backwardOffset(\n {\n element: previousTextNode,\n offset: this.getNormalizedInnerText(previousTextNode).length,\n },\n toMove - offset\n );\n } else {\n offset = 0;\n return { element, offset };\n }\n }\n }\n\n private findElementAtOffset(\n root: Node,\n offset: number\n ): { element: Node; offset: number } {\n if (root.nodeType === Node.TEXT_NODE) {\n return { element: root as Text, offset: offset };\n } else {\n let cumulativeOffset = 0;\n for (let i = 0; i < root.childNodes.length; i++) {\n if (Marker.isBlackListedElementNode(root.childNodes[i])) {\n continue;\n }\n const childSize = this.getNormalizedInnerText(\n root.childNodes[i]\n ).length;\n cumulativeOffset += childSize;\n if (cumulativeOffset < offset) {\n continue;\n }\n return this.findElementAtOffset(\n root.childNodes[i],\n offset - (cumulativeOffset - childSize)\n );\n }\n throw new Error(\"failed to findElementAtOffset\");\n }\n }\n\n private trimRangeSpaces(range: Range) {\n let start = this.getInnerText(range.startContainer).substr(\n range.startOffset\n );\n let startTrimmed = start.trimStart();\n range.setStart(\n range.startContainer,\n range.startOffset + (start.length - startTrimmed.length)\n );\n\n let end = this.getInnerText(range.endContainer).substr(0, range.endOffset);\n let endTrimmed = end.trimEnd();\n range.setEnd(\n range.endContainer,\n range.endOffset - (end.length - endTrimmed.length)\n );\n }\n\n private convertTextNodeToHighlightElement(word: Node) {\n const decoratedElement = document.createElement(HighlightTagName);\n word.parentElement?.insertBefore(decoratedElement, word.nextSibling);\n word.parentElement?.removeChild(word);\n decoratedElement.appendChild(word);\n return decoratedElement;\n }\n\n private buildContext(highlightId: string): EventHandlerContext {\n return {\n serializedRange: this.state.uidToSerializedRange[highlightId],\n marker: this,\n };\n }\n\n private adjustRangeAroundBlackListedElement(range: Range) {\n let ptr = range.startContainer;\n let blacklistedParentOfStartContainer = null;\n while (ptr) {\n if (Marker.isBlackListedElementNode(ptr)) {\n blacklistedParentOfStartContainer = ptr;\n }\n ptr = ptr.parentElement as any;\n }\n\n ptr = range.endContainer;\n let blacklistedParentOfEndContainer = null;\n while (ptr) {\n if (Marker.isBlackListedElementNode(ptr)) {\n blacklistedParentOfEndContainer = ptr;\n }\n ptr = ptr.parentElement as any;\n }\n if (\n blacklistedParentOfStartContainer &&\n blacklistedParentOfEndContainer &&\n blacklistedParentOfStartContainer === blacklistedParentOfEndContainer\n ) {\n throw new Error(\"cannot highlight blacklisted element\");\n }\n\n if (blacklistedParentOfStartContainer) {\n range.setStart(\n this.findNextTextNodeInDomTree(\n blacklistedParentOfStartContainer\n ) as any,\n 0\n );\n }\n if (blacklistedParentOfEndContainer) {\n let prevNode = this.findPreviousTextNodeInDomTree(\n blacklistedParentOfEndContainer\n ) as any;\n range.setEnd(prevNode, this.getInnerText(prevNode).length);\n }\n }\n\n public getSerializedRangeFromUid(uid: string): SerializedRange | null {\n return this.state.uidToSerializedRange[uid] || null;\n }\n\n resolveSerializedRangeOffsetInText(\n text: any,\n serializedRange: SerializedRange\n ): number {\n // TODO: optimize algorithm, maybe use https://github.com/google/diff-match-patch\n const textBeforeNormalized = Marker.normalizeText(\n serializedRange.textBefore\n );\n const textAfterNormalized = Marker.normalizeText(serializedRange.textAfter);\n const textNormalized = Marker.normalizeText(serializedRange.text);\n\n for (let strategy of resolveSerializedRangeOffsetInTextStrategies) {\n const textToSearch =\n (strategy.textBefore ? textBeforeNormalized : \"\") +\n textNormalized +\n (strategy.textAfter ? textAfterNormalized : \"\");\n\n const index = text.indexOf(textToSearch);\n if (index >= 0) {\n return index + (strategy.textBefore ? textBeforeNormalized.length : 0);\n }\n }\n\n throw new DeserializationError(`failed to deserialize range`);\n }\n}\n\nconst resolveSerializedRangeOffsetInTextStrategies = [\n {\n textBefore: true,\n textAfter: true,\n },\n {\n textBefore: false,\n textAfter: true,\n },\n {\n textBefore: true,\n textAfter: false,\n },\n {\n textBefore: false,\n textAfter: false,\n },\n];\n\nexport default Marker;\nexport type { MarkerConstructorArgs };\n","import Marker, { MarkerConstructorArgs } from \"./lib/classes/Marker\";\nimport DeserializationError, {\n isDeserializationError,\n} from \"./lib/classes/errors/DeserializationError\";\nimport SerializedRange from \"./lib/classes/SerializedRange\";\nimport Context from \"./lib/classes/Context\";\nimport EventHandler from \"./lib/classes/EventHandler\";\nimport HighlightPainter from \"./lib/classes/HighlightPainter\";\n\nconst Errors = {\n isDeserializationError,\n};\n\nexport { Marker };\nexport { Errors };\n\nexport type {\n Context,\n EventHandler,\n HighlightPainter,\n SerializedRange,\n MarkerConstructorArgs,\n DeserializationError,\n};\n"],"sourceRoot":""}
|
package/package.json
CHANGED
package/.github/dependabot.yml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
-
# package ecosystems to update and where the package manifests are located.
|
|
3
|
-
# Please see the documentation for all configuration options:
|
|
4
|
-
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
5
|
-
|
|
6
|
-
version: 2
|
|
7
|
-
updates:
|
|
8
|
-
- package-ecosystem: "npm" # See documentation for possible values
|
|
9
|
-
directory: "/" # Location of package manifests
|
|
10
|
-
schedule:
|
|
11
|
-
interval: "daily"
|