UNPKG

unified-doc-dom

Version:
3 lines (2 loc) 2.95 kB
import{saveAs as e}from"file-saver";import t from"resize-observer-polyfill";import n from"rangy";async function i(e){const t=await e.text(),{name:n,type:i}=e;let o="";const r=n.split(".");return r.length>1&&(o=r.pop()),{content:t,extension:o,name:n,stem:r.join("."),type:i}}function o(e){const{content:t,name:n,type:i}=e;return new File([t],n,{type:i})}function r(t){const n=o(t);e(n)}const s={background:"rgba(11, 95, 255, 0.2)",durationMs:5e3,highlighterClassName:"unified-doc-highlighter",selector:e=>`[data-mark-id='${e}']`};class l{constructor(e,t){const{background:n,durationMs:i,highlighterClassName:o}=t,r=document.querySelector("."+o);r&&r.remove(),this.highlighterElement=document.createElement("div"),this.highlighterElement.className=o,this.highlighterElement.style.background=n,this.highlighterElement.style.left="0",this.highlighterElement.style.position="fixed",this.highlighterElement.style.right="0",this.highlighterElement.style.top="0",this.highlighterElement.style.animationDuration=i+"ms",e&&e.append(this.highlighterElement)}destroy(){this.highlighterElement.remove()}update({height:e,left:t,top:n,width:i}){this.highlighterElement.style.height=e+"px",this.highlighterElement.style.left=t+"px",this.highlighterElement.style.top=n+"px",this.highlighterElement.style.width=i+"px"}}function h(e,n,i){const o={...s,...i},{durationMs:r,selector:h}=o,c=e.querySelectorAll(h(n)),u=c[0],m=c[c.length-1],a=new l(u,o),g=new t(()=>f());g.observe(e),window.addEventListener("scroll",f);const d=setTimeout(()=>p(),r);function f(){u&&m&&a.update(function(e,t,n){const i=e.getBoundingClientRect(),o=t.getBoundingClientRect();return{height:n.getBoundingClientRect().bottom-o.top,left:i.left,top:o.top,width:i.width}}(e,u,m))}function p(){clearTimeout(d),a.destroy(),g.unobserve(e),window.removeEventListener("scroll",f)}return p}function c(e,t){}function u(e,t,n={}){const i=e.querySelectorAll("[data-mark-id]"),{onClick:o=c,onMouseEnter:r=c,onMouseOut:s=c}=n,l=t.reduce((e,t)=>(e[t.id]={click:e=>o(e,t),mouseenter:e=>r(e,t),mouseout:e=>s(e,t)},e),{});function h(e){const t=e.getAttribute("data-mark-id");return l[t]}return i.forEach(e=>{const{click:t,mouseenter:n,mouseout:i}=h(e)||{};t&&e.addEventListener("click",t),n&&e.addEventListener("mouseenter",n),i&&e.addEventListener("mouseout",i)}),function(){i.forEach(e=>{const{click:t,mouseenter:n,mouseout:i}=h(e)||{};t&&e.removeEventListener("click",t),n&&e.removeEventListener("mouseenter",n),i&&e.removeEventListener("mouseout",i)})}}const m={callback:e=>{}};function a(e,t=m){function i(){const i=n.getSelection(),o=i.getBookmark(e),{start:r,end:s}=o.rangeBookmarks[0];if(s>=r){const n=e.textContent.slice(r,s);t.callback({start:r,end:s,value:n})}i.removeAllRanges()}return e.addEventListener("mouseup",i),function(){e.removeEventListener("mouseup",i)}}export{i as fromFile,h as highlight,u as registerMarks,r as saveFile,a as selectText,o as toFile}; //# sourceMappingURL=index.modern.js.map