選択範囲に似ているリンクを入力補完するUserScript
code:script.js
var se,g,Ye,Mr,W,ze,Je,Rr,ie={},Qe=[],Cr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|inech|zoo|^ord|itera/i;function A(e,t){for(var r in t)er=tr;return e}function Ze(e){var t=e.parentNode;t&&t.removeChild(e)}function x(e,t,r){var o,s,n,c={};for(n in t)n=="key"?o=tn:n=="ref"?s=tn:cn=tn;if(arguments.length>2&&(c.children=arguments.length>3?se.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(n in e.defaultProps)cn===void 0&&(cn=e.defaultPropsn);return ae(e,c,o,s,null)}function ae(e,t,r,o,s){var n={type:e,props:t,key:r,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:s??++Ye};return s==null&&g.vnode!=null&&g.vnode(n),n}function N(e){return e.children}function ce(e,t){this.props=e,this.context=t}function K(e,t){if(t==null)return e.__?K(e.__,e.__.__k.indexOf(e)+1):null;for(var r;t<e.__k.length;t++)if((r=e.__kt)!=null&&r.__e!=null)return r.__e;return typeof e.type=="function"?K(e):null}function et(e){var t,r;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((r=e.__kt)!=null&&r.__e!=null){e.__e=e.__c.base=r.__e;break}return et(e)}}function tt(e){(!e.__d&&(e.__d=!0)&&W.push(e)&&!le.__r++||Je!==g.debounceRendering)&&((Je=g.debounceRendering)||ze)(le)}function le(){for(var e;le.__r=W.length;)e=W.sort(function(t,r){return t.__v.__b-r.__v.__b}),W=[],e.some(function(t){var r,o,s,n,c,l;t.__d&&(c=(n=(r=t).__v).__e,(l=r.__P)&&(o=[],(s=A({},n)).__v=n.__v+1,Le(l,n,s,r.__n,l.ownerSVGElement!==void 0,n.__h!=null?c:null,o,c??K(n),n.__h),ct(o,n),n.__e!=c&&et(n)))})}function rt(e,t,r,o,s,n,c,l,a,u){var i,m,p,d,f,M,h,_=o&&o.__k||Qe,b=_.length;for(r.__k=[],i=0;i<t.length;i++)if((d=r.__ki=(d=ti)==null||typeof d=="boolean"?null:typeof d=="string"||typeof d=="number"||typeof d=="bigint"?ae(null,d,null,null,d):Array.isArray(d)?ae(N,{children:d},null,null,null):d.__b>0?ae(d.type,d.props,d.key,null,d.__v):d)!=null){if(d.__=r,d.__b=r.__b+1,(p=_i)===null||p&&d.key==p.key&&d.type===p.type)_i=void 0;else for(m=0;m<b;m++){if((p=_m)&&d.key==p.key&&d.type===p.type){_m=void 0;break}p=null}Le(e,d,p=p||ie,s,n,c,l,a,u),f=d.__e,(m=d.ref)&&p.ref!=m&&(h||(h=[]),p.ref&&h.push(p.ref,null,d),h.push(m,d.__c||f,d)),f!=null?(M==null&&(M=f),typeof d.type=="function"&&d.__k===p.__k?d.__d=a=ot(d,a,e):a=nt(e,d,p,_,f,a),typeof r.type=="function"&&(r.__d=a)):a&&p.__e==a&&a.parentNode!=e&&(a=K(p))}for(r.__e=M,i=b;i--;)_i!=null&&(typeof r.type=="function"&&_i.__e!=null&&_i.__e==r.__d&&(r.__d=K(o,i+1)),ut(_i,_i));if(h)for(i=0;i<h.length;i++)lt(hi,h++i,h++i)}function ot(e,t,r){for(var o,s=e.__k,n=0;s&&n<s.length;n++)(o=sn)&&(o.__=e,t=typeof o.type=="function"?ot(o,t,r):nt(r,o,o,s,o.__e,t));return t}function nt(e,t,r,o,s,n){var c,l,a;if(t.__d!==void 0)c=t.__d,t.__d=void 0;else if(r==null||s!=n||s.parentNode==null)e:if(n==null||n.parentNode!==e)e.appendChild(s),c=null;else{for(l=n,a=0;(l=l.nextSibling)&&a<o.length;a+=2)if(l==s)break e;e.insertBefore(s,n),c=n}return c!==void 0?c:s.nextSibling}function Nr(e,t,r,o,s){var n;for(n in r)n==="children"||n==="key"||n in t||ue(e,n,null,rn,o);for(n in t)s&&typeof tn!="function"||n==="children"||n==="key"||n==="value"||n==="checked"||rn===tn||ue(e,n,tn,rn,o)}function st(e,t,r){t0==="-"?e.setProperty(t,r):et=r==null?"":typeof r!="number"||Cr.test(t)?r:r+"px"}function ue(e,t,r,o,s){var n;e:if(t==="style")if(typeof r=="string")e.style.cssText=r;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(t in o)r&&t in r||st(e.style,t,"");if(r)for(t in r)o&&rt===ot||st(e.style,t,rt)}else if(t0==="o"&&t1==="n")n=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.lt+n=r,r?o||e.addEventListener(t,n?at:it,n):e.removeEventListener(t,n?at:it,n);else if(t!=="dangerouslySetInnerHTML"){if(s)t=t.replace(/xlinkH:h/,"h").replace(/sName$/,"s");else if(t!=="href"&&t!=="list"&&t!=="form"&&t!=="tabIndex"&&t!=="download"&&t in e)try{et=r??"";break e}catch{}typeof r=="function"||(r!=null&&(r!==!1||t0==="a"&&t1==="r")?e.setAttribute(t,r):e.removeAttribute(t))}}function it(e){this.le.type+!1(g.event?g.event(e):e)}function at(e){this.le.type+!0(g.event?g.event(e):e)}function Le(e,t,r,o,s,n,c,l,a){var u,i,m,p,d,f,M,h,_,b,P,v=t.type;if(t.constructor!==void 0)return null;r.__h!=null&&(a=r.__h,l=t.__e=r.__e,t.__h=null,n=l),(u=g.__b)&&u(t);try{e:if(typeof v=="function"){if(h=t.props,_=(u=v.contextType)&&ou.__c,b=u?_?_.props.value:u.__:o,r.__c?M=(i=t.__c=r.__c).__=i.__E:("prototype"in v&&v.prototype.render?t.__c=i=new v(h,b):(t.__c=i=new ce(h,b),i.constructor=v,i.render=Dr),_&&_.sub(i),i.props=h,i.state||(i.state={}),i.context=b,i.__n=o,m=i.__d=!0,i.__h=[]),i.__s==null&&(i.__s=i.state),v.getDerivedStateFromProps!=null&&(i.__s==i.state&&(i.__s=A({},i.__s)),A(i.__s,v.getDerivedStateFromProps(h,i.__s))),p=i.props,d=i.state,m)v.getDerivedStateFromProps==null&&i.componentWillMount!=null&&i.componentWillMount(),i.componentDidMount!=null&&i.__h.push(i.componentDidMount);else{if(v.getDerivedStateFromProps==null&&h!==p&&i.componentWillReceiveProps!=null&&i.componentWillReceiveProps(h,b),!i.__e&&i.shouldComponentUpdate!=null&&i.shouldComponentUpdate(h,i.__s,b)===!1||t.__v===r.__v){i.props=h,i.state=i.__s,t.__v!==r.__v&&(i.__d=!1),i.__v=t,t.__e=r.__e,t.__k=r.__k,t.__k.forEach(function(B){B&&(B.__=t)}),i.__h.length&&c.push(i);break e}i.componentWillUpdate!=null&&i.componentWillUpdate(h,i.__s,b),i.componentDidUpdate!=null&&i.__h.push(function(){i.componentDidUpdate(p,d,f)})}i.context=b,i.props=h,i.state=i.__s,(u=g.__r)&&u(t),i.__d=!1,i.__v=t,i.__P=e,u=i.render(i.props,i.state,i.context),i.state=i.__s,i.getChildContext!=null&&(o=A(A({},o),i.getChildContext())),m||i.getSnapshotBeforeUpdate==null||(f=i.getSnapshotBeforeUpdate(p,d)),P=u!=null&&u.type===N&&u.key==null?u.props.children:u,rt(e,Array.isArray(P)?P:P,t,r,o,s,n,c,l,a),i.base=t.__e,t.__h=null,i.__h.length&&c.push(i),M&&(i.__E=i.__=null),i.__e=!1}else n==null&&t.__v===r.__v?(t.__k=r.__k,t.__e=r.__e):t.__e=jr(r.__e,t,r,o,s,n,c,a);(u=g.diffed)&&u(t)}catch(B){t.__v=null,(a||n!=null)&&(t.__e=l,t.__h=!!a,nn.indexOf(l)=null),g.__e(B,t,r)}}function ct(e,t){g.__c&&g.__c(t,e),e.some(function(r){try{e=r.__h,r.__h=[],e.some(function(o){o.call(r)})}catch(o){g.__e(o,r.__v)}})}function jr(e,t,r,o,s,n,c,l){var a,u,i,m=r.props,p=t.props,d=t.type,f=0;if(d==="svg"&&(s=!0),n!=null){for(;f<n.length;f++)if((a=nf)&&"setAttribute"in a==!!d&&(d?a.localName===d:a.nodeType===3)){e=a,nf=null;break}}if(e==null){if(d===null)return document.createTextNode(p);e=s?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),n=null,l=!1}if(d===null)m===p||l&&e.data===p||(e.data=p);else{if(n=n&&se.call(e.childNodes),u=(m=r.props||ie).dangerouslySetInnerHTML,i=p.dangerouslySetInnerHTML,!l){if(n!=null)for(m={},f=0;f<e.attributes.length;f++)m[e.attributes[f].name]=e.attributes[f].value;(i||u)&&(i&&(u&&i.__html==u.__html||i.__html===e.innerHTML)||(e.innerHTML=i&&i.__html||""))}if(Nr(e,p,m,s,l),i)t.__k=[];else if(f=t.props.children,rt(e,Array.isArray(f)?f:f,t,r,o,s&&d!=="foreignObject",n,c,n?n0:r.__k&&K(r,0),l),n!=null)for(f=n.length;f--;)nf!=null&&Ze(nf);l||("value"in p&&(f=p.value)!==void 0&&(f!==m.value||f!==e.value||d==="progress"&&!f)&&ue(e,"value",f,m.value,!1),"checked"in p&&(f=p.checked)!==void 0&&f!==e.checked&&ue(e,"checked",f,m.checked,!1))}return e}function lt(e,t,r){try{typeof e=="function"?e(t):e.current=t}catch(o){g.__e(o,r)}}function ut(e,t,r){var o,s;if(g.unmount&&g.unmount(e),(o=e.ref)&&(o.current&&o.current!==e.__e||lt(o,null,t)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(n){g.__e(n,t)}o.base=o.__P=null}if(o=e.__k)for(s=0;s<o.length;s++)os&&ut(os,t,typeof e.type!="function");r||e.__e==null||Ze(e.__e),e.__e=e.__d=void 0}function Dr(e,t,r){return this.constructor(e,r)}function Se(e,t,r){var o,s,n;g.__&&g.__(e,t),s=(o=typeof r=="function")?null:r&&r.__k||t.__k,n=[],Le(t,e=(!o&&r||t).__k=x(N,null,e),s||ie,ie,t.ownerSVGElement!==void 0,!o&&r?r:s?null:t.firstChild?se.call(t.childNodes):null,n,!o&&r?r:s?s.__e:t.firstChild,o),ct(n,e)}se=Qe.slice,g={__e:function(e,t){for(var r,o,s;t=t.__;)if((r=t.__c)&&!r.__)try{if((o=r.constructor)&&o.getDerivedStateFromError!=null&&(r.setState(o.getDerivedStateFromError(e)),s=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(e),s=r.__d),s)return r.__E=r}catch(n){e=n}throw e}},Ye=0,Mr=function(e){return e!=null&&e.constructor===void 0},ce.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=A({},this.state),typeof e=="function"&&(e=e(A({},r),this.props)),e&&A(r,e),e!=null&&this.__v&&(t&&this.__h.push(t),tt(this))},ce.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),tt(this))},ce.prototype.render=N,W=[],ze=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,le.__r=0,Rr=0;var de,D,dt,X=0,Pe=[],pt=g.__b,mt=g.__r,ft=g.diffed,gt=g.__c,ht=g.unmount;function Te(e,t){g.__h&&g.__h(D,e,X||t),X=0;var r=D.__H||(D.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__e}function C(e){return X=1,Ie(_t,e)}function Ie(e,t,r){var o=Te(de++,2);return o.t=e,o.__c||(o.__=[r?r(t):_t(void 0,t),function(s){var n=o.t(o.__0,s);o.__0!==n&&(o.__=[n,o.__1],o.__c.setState({}))}],o.__c=D),o.__}function w(e,t){var r=Te(de++,3);!g.__s&&bt(r.__H,t)&&(r.__=e,r.__H=t,D.__H.__h.push(r))}function pe(e){return X=5,j(function(){return{current:e}},[])}function j(e,t){var r=Te(de++,7);return bt(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function T(e,t){return X=8,j(function(){return e},t)}function Or(){var e;for(Pe.sort(function(t,r){return t.__v.__b-r.__v.__b});e=Pe.pop();)if(e.__P)try{e.__H.__h.forEach(me),e.__H.__h.forEach(Me),e.__H.__h=[]}catch(t){e.__H.__h=[],g.__e(t,e.__v)}}g.__b=function(e){D=null,pt&&pt(e)},g.__r=function(e){mt&&mt(e),de=0;var t=(D=e.__c).__H;t&&(t.__h.forEach(me),t.__h.forEach(Me),t.__h=[])},g.diffed=function(e){ft&&ft(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Pe.push(t)!==1&&dt===g.requestAnimationFrame||((dt=g.requestAnimationFrame)||function(r){var o,s=function(){clearTimeout(n),xt&&cancelAnimationFrame(o),setTimeout(r)},n=setTimeout(s,100);xt&&(o=requestAnimationFrame(s))})(Or)),D=null},g.__c=function(e,t){t.some(function(r){try{r.__h.forEach(me),r.__h=r.__h.filter(function(o){return!o.__||Me(o)})}catch(o){t.some(function(s){s.__h&&(s.__h=[])}),t=[],g.__e(o,r.__v)}}),gt&>(e,t)},g.unmount=function(e){ht&&ht(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(o){try{me(o)}catch(s){t=s}}),t&&g.__e(t,r.__v))};var xt=typeof requestAnimationFrame=="function";function me(e){var t=D,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),D=t}function Me(e){var t=D;e.__c=e.__(),D=t}function bt(e,t){return!e||e.length!==t.length||t.some(function(r,o){return r!==eo})}function _t(e,t){return typeof t=="function"?t(e):t}var Y=e=>e==null,fe=e=>typeof e=="string",ge=e=>typeof e=="number";var Br=e=>typeof e=="object"&&e!==null,Hr=e=>Br(e)?(e.name===void 0||typeof e.name=="string")&&typeof e.message=="string":!1,yt=e=>{try{let t=typeof e=="string"?JSON.parse(e):e;return Hr(t)?t:!1}catch(t){if(t instanceof SyntaxError)return!1;throw t}};var Et=(e,t)=>{if(!Array.isArray(e))throw new TypeError("${t}" must be an array but actual is "${e}")};var vt=(e,t)=>{if(!(e instanceof HTMLTextAreaElement))throw new TypeError("${t}" must be HTMLTextAreaElement but actual is "${e}")};var F=()=>{let e=document.getElementById("text-input");if(!!e)return vt(e,"textarea#text-input"),e};var kt=e=>{if(Y(e))return;if(ge(e))return Fr(e)?.id;if(fe(e))return e.startsWith("L")?e.slice(1):e;if(e.classList.contains("line"))return e.id.slice(1);let t=e.closest(".line");if(t)return t.id.slice(1)};var Fr=e=>{if(Y(e))return;if(ge(e))return wt()e;let t=kt(e);return t?wt().find(r=>r.id===t):void 0},Re=e=>{if($r(e))return e;let t=kt(e);if(Y(t))return t;let r=document.getElementById(L${t});if(!Y(r))return r},$r=e=>e instanceof HTMLDivElement&&e.classList.contains("line");var wt=()=>(Et(scrapbox.Page.lines,"scrapbox.Page.lines"),scrapbox.Page.lines);var Ar=e=>e instanceof HTMLSpanElement&&e.classList.contains("char-index");var z=(e,t)=>{let r=Re(e)?.getElementsByClassName?.(c-${t})?.0;return Ar(r)?r:void 0};var G=(e,t)=>{let{noModifiedKeys:r=!1,...o}=t??{},s={bubbles:!0,cancelable:!0,keyCode:Ure,...r?{}:{...o}},n=F();if(!n)throw Error("#text-input must exist.");n.dispatchEvent(new KeyboardEvent("keydown",s)),n.dispatchEvent(new KeyboardEvent("keyup",s))},Ur={Backspace:8,Tab:9,Enter:13,Delete:46,Escape:27," ":32,PageUp:33,PageDown:34,End:35,Home:36,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,a:65,A:65,b:66,B:66,c:67,C:67,d:68,D:68,e:69,E:69,f:70,F:70,g:71,G:71,h:72,H:72,i:73,I:73,j:74,J:74,k:75,K:75,l:76,L:76,m:77,M:77,n:78,N:78,o:79,O:79,p:80,P:80,q:81,Q:81,r:82,R:82,s:83,S:83,t:84,T:84,u:85,U:85,v:86,V:86,w:87,W:87,x:88,X:88,y:89,Y:89,z:90,Z:90,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,F1:113,F2:114,F3:115,F4:116,F5:117,F6:118,F7:119,F8:120,F9:121,F10:122,F11:123,F12:124,":":186,"*":186,";":187,"+":187,"-":189,"=":189,".":190,">":190,"/":191,"?":191,"@":192,"":192,"[":219,"{":219,"\\":220,"|":220,"]":221,"}":221,"^":222,"~":222,_:226};var he=e=>new Promise(t=>setTimeout(()=>t(),e));var Lt=async(e,t)=>{let r={button:t.button??0,clientX:t.X,clientY:t.Y,bubbles:!0,cancelable:!0,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,view:window};e.dispatchEvent(new MouseEvent("mousedown",r)),e.dispatchEvent(new MouseEvent("mouseup",r)),e.dispatchEvent(new MouseEvent("click",r)),await he(10)};var St=e=>{let{top:t,bottom:r}=e.getBoundingClientRect();return t>=0&&r<=window.innerHeight};function*Ce(e,t){for(let r=e;r<t;r++)yield r}var Pt=()=>{G("Home"),G("Home")};var Tt=async e=>{await Kr(Re(e))},Kr=async e=>{if(!e)throw Error("The target line DOM is failed to find.");St(e)||e.scrollIntoView({block:"center"});let{right:t,top:r,height:o}=e.getElementsByClassName("text")[0].getBoundingClientRect();await Lt(e,{X:t+1,Y:r+o/2})};var It=async(e,t,r)=>{await Tt(e),Pt();for(let o of Ce(e,t))G("ArrowDown",{shiftKey:!0});G("End",{shiftKey:!0}),await Ne(r)};var Ne=async e=>{let t=F();if(!t)throw Error("#text-input is not ditected.");t.focus(),t.value=e;let r=new InputEvent("input",{bubbles:!0});t.dispatchEvent(r),await he(1)};var J=e=>e.replaceAll(" ","_").toLowerCase(),Mt=e=>e.replaceAll("_"," "),$=e=>[...e].map((t,r)=>t===" "?"_":!Gr.includes(t)||r===e.length-1&&Vr.includes(t)?encodeURIComponent(t):t).join(""),Gr='@$&+=:;",',Vr=':;",';var xe=()=>{let e=F();if(!e)throw Error("#text-input is not found.");let t=Object.keys(e).find(n=>n.startsWith("__reactFiber"));if(!t)throw Error('#text-input must has the property whose name starts with "__reactFiber"');let r=e[t].return.return.stateNode._stores,o=r.find(n=>n.constructor.name==="Cursor");if(!o)throw Error('#text-input must has a "Cursor" store.');let s=r.find(n=>n.constructor.name==="Selection");if(!s)throw Error('#text-input must has a "Selection" store.');return{cursor:o,selection:s}};var Q=()=>xe().cursor;var Rt=()=>xe().selection;var Ct=()=>{let[e,t]=C({start:{line:0,char:0},end:{line:0,char:0}}),[r,o]=C("");return w(()=>{let s=Rt(),n=()=>{t(s.getRange()),o(s.getSelectedText())};return s.addChangeListener(n),()=>s.removeChangeListener(n)},[]),{text:r,range:e}};var Nt=({title:e,projects:t,selected:r,confirm:o})=>x("div",{className:candidate${r?" selected":""}},x(Wr,{title:e,confirm:o}),t.map(s=>x(Xr,{project:s.name,title:e,mark:s.mark,confirm:s.confirm}))),Wr=({title:e,confirm:t})=>x("a",{className:"button",tabIndex:0,role:"menuitem",href:./${$(e)},onClick:jt(t)},e),Xr=({project:e,title:t,mark:r,confirm:o})=>r===""?x(N,null):x("a",{className:"mark",tabIndex:0,href:../${e}/${$(t)},onClick:jt(o),title:/${e}/${$(t)}},r instanceof URL?x("img",{src:r.href}):${r}),jt=e=>T(t=>{t.metaKey||t.ctrlKey||t.altKey||t.shiftKey||(t.preventDefault(),t.stopPropagation(),e())},[e]);var Dt=e=>{let[t,r]=C(-1);w(()=>r(-1),[e]);let o=T(l=>r(a=>l?.cyclic?(a+1)%e:Math.min(a+1,e)),[e]),s=T(l=>r(a=>a<0?e-1:l?.cyclic?(a+e-1)%e:Math.max(a-1,0)),[e]),n=T(()=>r(0),[]),c=T(()=>r(e-1),[e]);return{selectedIndex:t,next:o,prev:s,selectFirst:n,selectLast:c}};var be=(e,t)=>t.some(r=>e instanceof r),Ot,Bt;function Yr(){return Ot||(Ot=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function zr(){return Bt||(Bt=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}var Ht=new WeakMap,je=new WeakMap,Ft=new WeakMap,De=new WeakMap,Z=new WeakMap;function Jr(e){let t=new Promise((r,o)=>{let s=()=>{e.removeEventListener("success",n),e.removeEventListener("error",c)},n=()=>{r(O(e.result)),s()},c=()=>{o(e.error),s()};e.addEventListener("success",n),e.addEventListener("error",c)});return t.then(r=>{r instanceof IDBCursor&&Ht.set(r,e)}).catch(()=>{}),Z.set(t,e),t}function Qr(e){if(je.has(e))return;let t=new Promise((r,o)=>{let s=()=>{e.removeEventListener("complete",n),e.removeEventListener("error",c),e.removeEventListener("abort",c)},n=()=>{r(),s()},c=()=>{o(e.error||new DOMException("AbortError","AbortError")),s()};e.addEventListener("complete",n),e.addEventListener("error",c),e.addEventListener("abort",c)});je.set(e,t)}var Oe={get(e,t,r){if(e instanceof IDBTransaction){if(t==="done")return je.get(e);if(t==="objectStoreNames")return e.objectStoreNames||Ft.get(e);if(t==="store")return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return O(e[t])},set(e,t,r){return e[t]=r,!0},has(e,t){return e instanceof IDBTransaction&&(t==="done"||t==="store")?!0:t in e}};function V(e){Oe=e(Oe)}function Zr(e){return e===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(t,...r){let o=e.call(U(this),t,...r);return Ft.set(o,t.sort?t.sort():[t]),O(o)}:zr().includes(e)?function(...t){return e.apply(U(this),t),O(Ht.get(this))}:function(...t){return O(e.apply(U(this),t))}}function eo(e){return typeof e=="function"?Zr(e):(e instanceof IDBTransaction&&Qr(e),be(e,Yr())?new Proxy(e,Oe):e)}function O(e){if(e instanceof IDBRequest)return Jr(e);if(De.has(e))return De.get(e);let t=eo(e);return t!==e&&(De.set(e,t),Z.set(t,e)),t}var U=e=>Z.get(e);var to=["get","getKey","getAll","getAllKeys","count"],ro=["put","add","delete","clear"],Be=new Map;function $t(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t=="string"))return;if(Be.get(t))return Be.get(t);let r=t.replace(/FromIndex$/,""),o=t!==r,s=ro.includes(r);if(!(r in(o?IDBIndex:IDBObjectStore).prototype)||!(s||to.includes(r)))return;let n=async function(c,...l){let a=this.transaction(c,s?"readwrite":"readonly"),u=a.store;return o&&(u=u.index(l.shift())),(await Promise.all([u[r](...l),s&&a.done]))[0]};return Be.set(t,n),n}V(e=>({...e,get:(t,r,o)=>$t(t,r)||e.get(t,r,o),has:(t,r)=>!!$t(t,r)||e.has(t,r)}));var oo=["continue","continuePrimaryKey","advance"],At={},He=new WeakMap,Ut=new WeakMap,no={get(e,t){if(!oo.includes(t))return e[t];let r=At[t];return r||(r=At[t]=function(...o){He.set(this,Ut.get(this)[t](...o))}),r}};async function*so(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;t=t;let r=new Proxy(t,no);for(Ut.set(r,t),Z.set(r,U(t));t;)yield r,t=await(He.get(r)||t.continue()),He.delete(r)}function qt(e,t){return t===Symbol.asyncIterator&&be(e,[IDBIndex,IDBObjectStore,IDBCursor])||t==="iterate"&&be(e,[IDBIndex,IDBObjectStore])}V(e=>({...e,get(t,r,o){return qt(t,r)?so:e.get(t,r,o)},has(t,r){return qt(t,r)||e.has(t,r)}}));function Kt(e,t,{blocked:r,upgrade:o,blocking:s,terminated:n}={}){let c=indexedDB.open(e,t),l=O(c);return o&&c.addEventListener("upgradeneeded",a=>{o(O(c.result),a.oldVersion,a.newVersion,O(c.transaction),a)}),r&&c.addEventListener("blocked",a=>r(a.oldVersion,a.newVersion,a)),l.then(a=>{n&&a.addEventListener("close",()=>n()),s&&a.addEventListener("versionchange",u=>s(u.oldVersion,u.newVersion,u))}).catch(()=>{}),l}var io=["get","getKey","getAll","getAllKeys","count"],ao=["put","add","delete","clear"],Fe=new Map;function Gt(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t=="string"))return;if(Fe.get(t))return Fe.get(t);let r=t.replace(/FromIndex$/,""),o=t!==r,s=ao.includes(r);if(!(r in(o?IDBIndex:IDBObjectStore).prototype)||!(s||io.includes(r)))return;let n=async function(c,...l){let a=this.transaction(c,s?"readwrite":"readonly"),u=a.store;return o&&(u=u.index(l.shift())),(await Promise.all([u[r](...l),s&&a.done]))[0]};return Fe.set(t,n),n}V(e=>({...e,get:(t,r,o)=>Gt(t,r)||e.get(t,r,o),has:(t,r)=>!!Gt(t,r)||e.has(t,r)}));var E=e=>{let{fetch:t=globalThis.fetch,hostName:r="scrapbox.io",...o}=e;return{fetch:t,hostName:r,...o}};var ee=class extends Error{constructor(t){super(${t.status} ${t.statusText} when fetching ${t.url});this.response=t;this.name="UnexpectedResponseError";Error.captureStackTrace&&Error.captureStackTrace(this,ee)}},I=async e=>{let t=e.clone(),r=await t.text(),o=yt(r);if(!o)throw new ee(t);return{ok:!1,value:o}};var L=e=>connect.sid=${e};var Vt=(e,t,r)=>{let{sid:o,hostName:s,followRename:n,projects:c}=E(r??{}),l=new URLSearchParams;l.append("followRename",${n??!0});for(let u of c??[])l.append("projects",u);let a=https://${s}/api/pages/${e}/${$(t)}?${l.toString()};return new Request(a,o?{headers:{Cookie:L(o)}}:void 0)},Wt=async e=>{if(!e.ok)return e.status===414?{ok:!1,value:{name:"TooLongURIError",message:"project ids may be too much."}}:I(e);let t=await e.json();return{ok:!0,value:t}},Xt=async(e,t,r)=>{let{fetch:o}=E(r??{}),s=Vt(e,t,r),n=await o(s);return await Wt(n)};Xt.toRequest=Vt;Xt.fromResponse=Wt;var Yt=(e,t)=>{let{sid:r,hostName:o,sort:s,limit:n,skip:c}=E(t??{}),l=new URLSearchParams;s!==void 0&&l.append("sort",s),n!==void 0&&l.append("limit",${n}),c!==void 0&&l.append("skip",${c});let a=https://${o}/api/pages/${e}?${l.toString()};return new Request(a,r?{headers:{Cookie:L(r)}}:void 0)},zt=async e=>{if(!e.ok)return I(e);let t=await e.json();return{ok:!0,value:t}},Jt=async(e,t)=>{let{fetch:r}=E(t??{}),o=await r(Yt(e,t));return await zt(o)};Jt.toRequest=Yt;Jt.fromResponse=zt;var Qt=(e,t,r,o)=>{let{sid:s,hostName:n}=E(o??{}),c=https://${n}/api/table/${e}/${$(t)}/${encodeURIComponent(r)}.csv;return new Request(c,s?{headers:{Cookie:L(s)}}:void 0)},Zt=async e=>e.ok?{ok:!0,value:await e.text()}:e.status===404?{ok:!1,value:{name:"NotFoundError",message:"Table not found."}}:I(e),er=async(e,t,r,o)=>{let{fetch:s}=E(o??{}),n=Qt(e,t,r,o),c=await s(n);return await Zt(c)};er.toRequest=Qt;er.fromResponse=Zt;var tr=(e,t)=>{let{sid:r,hostName:o}=E(t??{});return new Request(https://${o}/api/projects/${e},r?{headers:{Cookie:L(r)}}:void 0)},rr=async e=>{if(!e.ok)return I(e);let t=await e.json();return{ok:!0,value:t}},te=async(e,t)=>{let{fetch:r}=E(t??{}),o=tr(e,t),s=await r(o);return rr(s)};te.toRequest=tr;te.fromResponse=rr;var or=(e,t)=>{let{sid:r,hostName:o}=E(t??{}),s=new URLSearchParams;for(let n of e)s.append("ids",n);return new Request(https://${o}/api/projects?${s.toString()},r?{headers:{Cookie:L(r)}}:void 0)},nr=async e=>{if(!e.ok)return I(e);let t=await e.json();return{ok:!0,value:t}},re=async(e,t)=>{let{fetch:r}=E(t??{}),o=await r(or(e,t));return nr(o)};re.toRequest=or;re.fromResponse=nr;var sr=async(e,t)=>{let{sid:r,hostName:o,fetch:s,followingId:n}=E(t??{}),c=new Request(https://${o}/api/pages/${e}/search/titles${n??followingId=${n}:""},r?{headers:{Cookie:L(r)}}:void 0),l=await s(c);if(!l.ok)return l.status===422?{ok:!1,value:{name:"InvalidFollowingIdError",message:await l.text()}}:I(l);let a=await l.json();return{ok:!0,value:{pages:a,followingId:l.headers.get("X-following-id")??""}}},Ae=async(e,t)=>{let r=await sr(e,t);return r.ok?async function*(){yield r.value.pages;let o=r.value.followingId;for(;o;){let s=await sr(e,{followingId:o,...t});if(!s.ok)throw new Error("The authorization cannot be unavailable");yield s.value.pages,o=s.value.followingId}}():r.value};var ir=!1,ar=e=>{ir=e},co="[scrapbox-select-suggestion]",S=Object.fromEntries([...Object.entries(console)].map(([e,t])=>typeof t!="function"?[e,t]:[e,(r,...o)=>{!ir||t(typeof r=="string"?${co} ${r}:r,...o)}]));var cr=async(e,t)=>{let r=await Ue(),o="[scrapbox-select-suggestion]";S.debug("check updates of links...");let s=[],n=[];try{{let a=r.transaction("status","readwrite");await Promise.all(e.map(async u=>{let i=await a.store.get(u);if(i?.isValid===!1)return;let m=i?.checked??0,p=new Date().getTime()/1e3;if(m+t>p||i?.updating&&m+600>p)return;let d={project:u,id:i?.id,isValid:!0,checked:m,updated:i?.updated??0,updating:!0};s.push(d),a.store.put(d)})),await a.done}if(S.debug(checked. ${s.length} projects maybe need upgrade.),s.length===0)return[];let c=new BroadcastChannel(dr),l=[];for await(let a of lo(s)){if(!a.ok)switch(n.push({project:a.value.project,isValid:!1}),a.value.name){case"NotFoundError":console.warn(${o} "${a.value.project}" is not found.);continue;case"NotMemberError":console.warn(${o} You are not a member of "${a.value.project}".);continue;case"NotLoggedInError":console.warn(${o} You are not a member of "${a.value.project}" or You are not logged in yet.);continue}if(a.value.updated<a.value.checked)S.debug(no updates in "${a.value.name}");else{let u={project:a.value.name,links:await po(a.value.name)};l.push(u),S.time(write data of "${a.value.name}"),await uo(u),c.postMessage({type:"update",project:a.value.name}),S.timeEnd(write data of "${a.value.name}")}n.push({project:a.value.name,isValid:!0,id:a.value.id,checked:new Date().getTime()/1e3,updated:a.value.updated,updating:!1})}return c.close(),l}finally{let c=r.transaction("status","readwrite"),l=c.store;await Promise.all(n.map(a=>l.put(a))),await c.done}},lr=async e=>{let t=[],r=read links of ${e.length} projects;S.time(r);{let o=(await Ue()).transaction("source","readonly");await Promise.all(e.map(async s=>{let n=await o.store.get(s);n?t.push(n):t.push({project:s,links:[]})})),await o.done}return S.timeEnd(r),t},ur=(e,t)=>{let r=new BroadcastChannel(dr),o=s=>{!e.includes(s.data.project)||t(s.data)};return r.addEventListener("message",o),()=>{r.removeEventListener("message",o),r.close()}},_e,Ue=async()=>_e||(_e=await Kt("userscript-links",5,{upgrade(e){S.time("update DB");for(let t of e.objectStoreNames)e.deleteObjectStore(t);e.createObjectStore("source",{keyPath:"project"}),e.createObjectStore("status",{keyPath:"project"}),S.timeEnd("update DB")}}),_e);async function*lo(e){let t=[],r=[],o=new Map;for(let n of e)n.id?t.push(n.id):r.push(n.project),o.set(n.project,n.checked);let s=await re(t);if(!s.ok)r=e.map(n=>n.project);else for(let n of s.value.projects)!o.has(n.name)||(yield{ok:!0,value:{...n,checked:o.get(n.name)??0}});for(let n of r){let c=await te(n);yield c.ok?{ok:!0,value:{...c.value,checked:o.get(n)??0}}:{ok:!1,value:{...c.value,project:n}}}}var uo=async e=>(await Ue()).put("source",e),dr="userscript-store-notify",po=async e=>{let t=await Ae(e);if("name"in t)throw console.error(t),new Error(${t.name}: ${t.message});let r=download and create Links of "${e}";S.time(r);let o=new Map;for await(let s of t)for(let n of s){let c=J(n.title),l=o.get(c);o.set(c,{title:n.title,hasIcon:n.hasIcon,updated:n.updated,links:n.links.length,linked:l?.linked??0});for(let a of n.links){let u=J(a),i=o.get(u);o.set(u,{title:i?.title??a,hasIcon:i?.hasIcon??!1,updated:i?.updated??0,links:i?.links??0,linked:(i?.linked??0)+1})}}return S.timeEnd(r),[...o.entries()].map(([s,n])=>[n.title,s,n.hasIcon,n.links,n.linked,n.updated])};var pr=e=>{let[t,r]=C([]),o=T(s=>{let n=new Map;for(let{project:c,links:l}of s)for(let[a,u,i,,,m]of l){let p=n.get(u);n.set(u,{title:p?.title??a,updated:Math.max(p?.updated??0,m),metadata:[...p?.metadata??[],{project:c,hasIcon:i}]})}r([...n.entries()].map(([c,l])=>({titleLc:c,...l})))},[]);return w(()=>{let s=!1,n=async()=>{let i=await lr(e);s||o(i)};n();let c,l=ur(e,()=>{clearTimeout(c),c=setTimeout(n,1e4)}),a=async()=>{(await cr(e,600)).length===0||s||n()};a();let u=setInterval(a,600*1e3);return()=>{s=!0,clearTimeout(c),clearInterval(u),l()}},[e]),t};var mr=e=>{let t=pe(null),r=j(()=>{if(!t.current)return{};let o=t.current.parentNode;if(!(o instanceof ShadowRoot))throw Error('The parent of "div.container" must be ShadowRoot');let s=o.host?.parentElement?.getBoundingClientRect?.(),c=z(e.line,e.char)?.getBoundingClientRect?.();return!c||!s?{}:{top:${c.bottom-s.top}px,left:${c?.left??0-s.left}px,right:${s.right-(c?.left??0)}px}},[e.line,e.char]);return{ref:t,...r}};var fr=e=>{let t=new Map,r=[...e].reverse();{let c=1;for(let l of r){t.set(l,(t.get(l)??0)|c);let a=l.toLowerCase();t.set(a,(t.get(a)??0)|c);let u=l.toUpperCase();t.set(u,(t.get(u)??0)|c),c<<=1}}let o=r.length,s=~(~0<<o),n=1<<o-1;return c=>{let l=0,a=s,u=[...c].reverse(),i=[],m=u.length;i[m]=o;for(let p of u){let d=t.get(p)??0,f=d|l,M=(d&a)+a^a|d,h=l|~(M|a),_=a&M;i[m-1]=i[m]+((h&n)!=0?1:(_&n)!=0?-1:0),a=_<<1|~(f|h<<1),l=h<<1&f,m--}return i}};var mo=[0,0,0,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6],gr=e=>{let t=Mt(e.trim()).split(/\s+/).sort((r,o)=>o.length-r.length);if(!(t.length===0||t.every(r=>r==="")))return r=>{let o=[...r];for(let s of t)o=fo(s,o);return o}},fo=(e,t)=>{let r=[...e].length,o=mo[r],s=fr(e);return t.flatMap(({title:n,dist:c,matches:l,...a})=>{l??=[],c??=0;let u=s(n).flatMap((m,p)=>m<=o&&l.every(([d,f])=>p+r<=d||f<p)?[[p,m]]:[]);if(u.length===0)return[];let i=u.reduce((m,[p,d])=>(m.dist<=d||(m.dist=d,m.start=p),m),{dist:r,start:0});return l.push([i.start,i.start+r-1]),[{title:n,dist:i.dist+c,matches:l,...a}]})};var hr=(e,t,r,o)=>{let s=gr(e);if(!s)return r([]),()=>{};let n=!1,c,l=[],a=()=>{r(l),c=void 0},u=o?.chunk??1e3,i=Math.floor(t.length/u)+1;return(async()=>{for(let m=0;m<i;m++){if(await new Promise(p=>requestAnimationFrame(p)),n)return;S.time(${m}/${i-1} search for "${e}"),l.push(...s(t.slice(m*u,(m+1)*u))),S.timeEnd(${m}/${i-1} search for "${e}"),c===void 0&&(a(),c=setTimeout(a,o?.interval??500))}})(),()=>{n=!0,clearTimeout(c)}};var xr=e=>{let t=Object.fromEntries(e.map((r,o)=>[r,o]));return(r,o)=>{let s=r.dist-o.dist;if(s!==0)return s;let n=r.matches.map(([u])=>u).sort(),c=o.matches.map(([u])=>u).sort();for(let u=0;u<n.length;u++){let i=n[u]-(c[u]??c.length);if(i!==0)return i}let l=r.title.length-o.title.length;if(l!==0)return l;let a=Math.min(...r.metadata.map(u=>t[u.project]??e.length))-Math.min(...o.metadata.map(u=>t[u.project]??e.length));return a!==0?a:o.updated-r.updated}};var qe="enableProjectsOnSuggestion",br=(e,t)=>{let[r,o]=C(ye(e,t)),s=T((n,c)=>{go(n,c,e,t),o(ye(e,t))},[e,t.enableSelfProjectOnStart]);return w(()=>{let n=c=>{c.key===qe&&o(ye(e,t))};return addEventListener("storage",n),()=>removeEventListener("storage",n)},[e,t.enableSelfProjectOnStart]),{projects:r,set:s}},Ke=!0,ye=(e,t)=>{try{let r=localStorage.getItem(qe);if(r===null)return Ee(e),e;let o=JSON.parse(r);return Array.isArray(o)&&o.every(s=>typeof s=="string")?!t.enableSelfProjectOnStart||!e.includes(scrapbox.Project.name)?o:o.includes(scrapbox.Project.name)?Ke?o:o.filter(s=>s!==scrapbox.Project.name):Ke?[...o,scrapbox.Project.name]:o:(Ee(e),e)}catch(r){if(!(r instanceof TypeError))throw r;return Ee(e),e}},go=(e,t,r,o)=>{let s=ye(r,o);o.enableSelfProjectOnStart&&e===scrapbox.Project.name&&(Ke=t),Ee(t?[...s,e]:s.filter(n=>n!==e))},Ee=e=>localStorage.setItem(qe,JSON.stringify(e));var oe=(e,t)=>{if(e instanceof URL)return e;try{return new URL(e)}catch(r){if(!(r instanceof TypeError))throw r;if(!t||!/^\.\/|^\.\.\/|^\//.test(e))return e;try{return new URL(e,t)}catch(o){if(!(o instanceof TypeError))throw o;return e}}};var _r=({query:e,position:t,state:r,limit:o,range:s,context:n,enableSelfProjectOnStart:c,callback:l,projects:a,dispatch:u,mark:i})=>{let{projects:m,set:p}=br(a,{enableSelfProjectOnStart:c}),d=pr(a),[f,M]=C([]),h=j(()=>xr(a),[a]);w(()=>{if(r!=="completion"){M([]);return}return hr(e,d,k=>M(k.sort(h).map(y=>({title:y.title,projects:y.metadata.map(({project:R})=>R)}))),{chunk:5e3})},[r,d,e,h]);let _=T((k,y)=>{u({type:"cancel"});let R=y?/${y}/${k}:${k};if(n==="selection"){Ne(R);return}let we=Q().getPosition().line;if(scrapbox.Layout!=="page")return;let Xe=scrapbox.Page.lines[we].text;It(we,we,${Xe.slice(0,s?.start??0)}${R}${Xe.slice((s?.end??0)+1)})},[n,s?.start,s?.end]),b=j(()=>{S.time("filtering by projects");let k=f.filter(y=>y.projects.some(R=>m.includes(R))).slice(0,o).map(y=>({title:y.title,projects:y.projects.flatMap(R=>m.includes(R)?[{name:R,mark:R===scrapbox.Project.name&&a.length<2?"":oe(i[R]??"",import.meta.url)||R[0],confirm:()=>_(y.title,R)}]:[]),confirm:()=>_(y.title)}));return S.timeEnd("filtering by projects"),k},[m,a.length,f,o,i,_]),{selectedIndex:P,next:v,prev:B,selectLast:H,selectFirst:ne}=Dt(b.length),Ve=T(()=>P===-1?!1:(b.at(P)?.confirm?.(),!0),[P,b]);w(()=>l(b.length===0?void 0:{selectNext:k=>(v(k),!0),selectPrev:k=>(B(k),!0),selectFirst:()=>(ne(),!0),selectLast:()=>(H(),!0),confirm:Ve,cancel:()=>(u({type:"cancel"}),!0)}),[l,v,B,ne,H,Ve]);let Sr=j(()=>{let k=new Set;for(let y of f)for(let R of y.projects)k.add(R);return a.flatMap(y=>k.has(y)?[{name:y,enable:m.includes(y),mark:oe(i[y]??"",import.meta.url)||y[0],onClick:()=>{p(y,!m.includes(y)),F().focus()}}]:[])},[f,a,m,i]),{ref:Pr,top:q,left:ve,right:ke}=mr(t??{line:0,char:0}),Tr=j(()=>r==="completion"&&b.length>0&&q!=null&&ve!=null?{top:q,left:ve}:{display:"none"},[b.length,q,ve,r]),We=j(()=>document.documentElement.dataset.os??"",[]),Ir=j(()=>r==="completion"&&f.length>0&&q!=null&&ke!=null&&a.length>1?{top:q,right:ke}:{display:"none"},[q,ke,f.length,a.length,r]);return x(N,null,x("div",{className:"container projects","data-os":We,style:Ir},Sr.map(k=>x(ho,{...k}))),x("div",{ref:Pr,className:"container candidates","data-os":We,style:Tr},b.map((k,y)=>x(Nt,{key:k.title,...k,selected:P===y})),f.length>o&&x("div",{className:"counter"},${f.length-o} more links)))},ho=e=>x("div",{className:e.enable?"mark":"mark disabled",onClick:e.onClick,title:e.name},e.mark instanceof URL?x("img",{src:e.mark.href}):${e.mark});var yr=e=>{let t=j(()=>oe(e.style,import.meta.url),[e.style]);return x(N,null,t!==""&&(t instanceof URL?x("link",{rel:"stylesheet",href:t.href}):x("style",null,t)))};var Er=()=>x("style",null,.container { position: absolute;
margin-top: 14px;
max-height: 80vh;
z-index: 301;
background-color: var(--select-suggest-bg, #111); font-family: var(--select-suggest-font-family, "Open Sans", Helvetica, Arial, "Hiragino Sans", sans-serif);
font-size: 14px;
color: var(--select-suggest-text-color, #eee); border-radius: 4px;
}
.candidates {
max-width: 80vw;
}
font-size:11px;
}
.projects {
margin-right: 4px;
display: grid;
grid-template-rows: repeat(4, min-content);
grid-auto-flow: column;
direction: rtl;
}
padding: 6px;
}
.candidates > :not(:first-child) {
border-top: 1px solid var(--select-suggest-border-color, #eee); }
.candidates > *{
line-height: 1.2em;
padding: 0.5em 10px;
}
.candidate {
display: flex;
}
a {
display: block;
text-decoration: none;
color: inherit;
}
a:not(.mark) {
width: 100%;
}
.selected a {
background-color: var(--select-suggest-selected-bg, #222); text-decoration: underline
}
img {
height: 1.3em;
width: 1.3em;
position: relative;
object-fit: cover;
object-position: 0% 0%;
}
.disabled {
filter: grayscale(1.0) opacity(0.5);
}
.counter {
color: var(--select-suggest-information-text-color, #aaa); font-size: 80%;
font-style: italic;
});var Ge=(e,t)=>{let r=z(e,t);if(!r)return;let o=r.closest('a.page-link:not([type="hashTag"])');if(!o)return;if(!(o instanceof HTMLAnchorElement))throw TypeError('a.page-link:not([type="hashTag"]) is not HTMLAnchorElement');let s=o.getElementsByClassName("char-index");if(s.length===0)throw Error("a.page-link must have a char at least.");let n=parseInt(s[0].dataset.charIndex??"0"),c=parseInt(s[s.length-1].dataset.charIndex??"0"),a=o.closest(".cursor-line")!=null?{start:n,end:c}:{start:n-1,end:c+1};if(a.start!==t)return a};var vr=(e,t)=>{let{state:r,...o}=e;if(r==="disabled")return t.type==="enable"?{state:"idle",...o}:e;switch(t.type){case"completionupdate":{let{type:s,...n}=t;return e.state==="canceled"?e:{state:"completion",...n}}case"completionend":return r==="idle"?e:{state:"idle",...o};case"cancel":return r==="canceled"?e:{state:"canceled",...o};case"disable":return{state:"disabled",...o};case"enable":return e}};var kr={selectNext:()=>!1,selectPrev:()=>!1,selectFirst:()=>!1,selectLast:()=>!1,confirm:()=>!1,cancel:()=>!1},wr=e=>{let{callback:t,projects:r,style:o,...s}=e,[n,c]=Ie(vr,{state:"idle",query:""}),[l,a]=C(!1);w(()=>{if(l){c({type:"disable"});return}let b=()=>c({type:scrapbox.Layout==="page"?"enable":"disable"});return b(),scrapbox.addListener("layout:changed",b),()=>scrapbox.removeListener("layout:changed",b)},[l]);let{text:u,range:i}=Ct();w(()=>{if(n.state!=="idle"&&n.state!=="completion"&&n.state!=="canceled"||scrapbox.Layout!=="page")return;let b=scrapbox.Page.lines[i.start.line];if(!xo(b,u)){n.state==="completion"&&n.context==="input"||(console.info("End completion due to no selection"),c({type:"completionend"}));return}if(n.state==="canceled")return;let P=Math.min(i.start.line,i.end.line),v=i.start.line<i.end.line?i.start.char:i.start.line===i.start.line?Math.min(i.start.char,i.end.char):i.end.char;c({type:"completionupdate",query:u.trim(),context:"selection",position:{line:P,char:v}})},[n.state,n.context,u,i]);let[m,p]=C(!1);w(()=>{if(n.state!=="idle"&&n.state!=="completion"&&n.state!=="canceled"){p(!1);return}if(n.state==="completion"&&n.context==="selection"){p(!1);return}let b=Q(),P=()=>{let{line:v,char:B}=b.getPosition(),H=Ge(v,B);if(!H){p(!1),c({type:"completionend"});return}if(p(n.state!=="canceled"),scrapbox.Layout!=="page"||n.state==="canceled")return;let ne=scrapbox.Page.lines[v];c({type:"completionupdate",query:ne.text.slice(H.start+1,H.end),context:"input",range:H,position:{line:v,char:H.start}})};return scrapbox.addListener("lines:changed",P),()=>scrapbox.removeListener("lines:changed",P)},[n.state,n.context]),w(()=>{if(!m)return;let b=Q(),P=()=>{let{line:v,char:B}=b.getPosition();Ge(v,B)||c({type:"completionend"})};return b.addChangeListener(P),()=>b.removeChangeListener(P)},[m]);let d=T(()=>a(!1),[]),f=T(()=>a(!0),[]),M=pe({...kr,enable:d,disable:f}),[h,_]=C();return w(()=>{Object.assign(M.current,n.state!=="completion"||!h?kr:h)},[n.state,h]),w(()=>t(M.current),[t]),x(N,null,x(Er,null),x(yr,{style:o}),x(_r,{callback:_,projects:r,dispatch:c,...n,...s}))},xo=(e,t)=>!(t.trim()===""||t.includes(
`)||"codeBlock"in e||"title"in e||"tableBlock"in e&&e.tableBlock.start);var Lr=e=>{let t=document.createElement("div");t.dataset.userscriptName="scrapbox-select-suggestion";let r=t.attachShadow({mode:"open"});document.body.append(t);let{limit:o=5,debug:s=!1,mark:n={},style:c="",enableSelfProjectOnStart:l=!0}=e??{},a=(()=>{if(!e?.projects||e.projects.length===0)returnscrapbox.Project.name;let u=l?scrapbox.Project.name,...e.projects:e.projects;return u.filter((i,m)=>!u.some((p,d)=>d<m&&p===i))})();return ar(s),new Promise(u=>Se(x(wr,{limit:o,projects:a,mark:n,style:c,callback:u,enableSelfProjectOnStart:l}),r))};await Lr();