var qe=Object.defineProperty;var Ie=(t,e,n)=>e in t?qe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var re=(t,e,n)=>(Ie(t,typeof e!="symbol"?e+"":e,n),n);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))l(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&l(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function l(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function F(){}function Me(t){return t()}function ye(){return Object.create(null)}function B(t){t.forEach(Me)}function Ue(t){return typeof t=="function"}function ae(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let ne;function J(t,e){return t===e?!0:(ne||(ne=document.createElement("a")),ne.href=e,t===ne.href)}function Pe(t){return Object.keys(t).length===0}function g(t,e){t.appendChild(e)}function U(t,e,n){t.insertBefore(e,n||null)}function O(t){t.parentNode&&t.parentNode.removeChild(t)}function Ne(t,e){for(let n=0;nt.removeEventListener(e,n,l)}function Be(t){return function(e){return e.preventDefault(),t.call(this,e)}}function h(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function He(t){return Array.from(t.childNodes)}function x(t,e){e=""+e,t.data!==e&&(t.data=e)}function Q(t,e){t.value=e??""}function ve(t,e,n){for(let l=0;lt.indexOf(l)===-1?e.push(l):n.push(l)),n.forEach(l=>l()),V=e}const le=new Set;let X;function Se(){X={r:0,c:[],p:X}}function Te(){X.r||B(X.c),X=X.p}function P(t,e){t&&t.i&&(le.delete(t),t.i(e))}function W(t,e,n,l){if(t&&t.o){if(le.has(t))return;le.add(t),X.c.push(()=>{le.delete(t),l&&(n&&t.d(1),l())}),t.o(e)}else l&&l()}function Y(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Qe(t,e){t.d(1),e.delete(t.key)}function Ye(t,e,n,l,s,i,o,r,u,_,p,c){let d=t.length,w=i.length,a=d;const m={};for(;a--;)m[t[a].key]=a;const k=[],N=new Map,L=new Map,E=[];for(a=w;a--;){const y=c(s,i,a),A=n(y);let M=o.get(A);M?l&&E.push(()=>M.p(y,e)):(M=_(A,y),M.c()),N.set(A,k[a]=M),A in m&&L.set(A,Math.abs(a-m[A]))}const q=new Set,C=new Set;function D(y){P(y,1),y.m(r,p),o.set(y.key,y),p=y.first,w--}for(;d&&w;){const y=k[w-1],A=t[d-1],M=y.key,T=A.key;y===A?(p=y.first,d--,w--):N.has(T)?!o.has(M)||q.has(M)?D(y):C.has(T)?d--:L.get(M)>L.get(T)?(C.add(M),D(y)):(q.add(T),d--):(u(A,o),d--)}for(;d--;){const y=t[d];N.has(y.key)||u(y,o)}for(;w;)D(k[w-1]);return B(E),k}function Ze(t,e,n){const l=t.$$.props[e];l!==void 0&&(t.$$.bound[l]=n,n(t.$$.ctx[l]))}function Re(t){t&&t.c()}function pe(t,e,n){const{fragment:l,after_update:s}=t.$$;l&&l.m(e,n),oe(()=>{const i=t.$$.on_mount.map(Me).filter(Ue);t.$$.on_destroy?t.$$.on_destroy.push(...i):B(i),t.$$.on_mount=[]}),s.forEach(oe)}function he(t,e){const n=t.$$;n.fragment!==null&&(Je(n.after_update),B(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function $e(t,e){t.$$.dirty[0]===-1&&(G.push(t),Ge(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const a=w.length?w[0]:d;return _.ctx&&s(_.ctx[c],_.ctx[c]=a)&&(!_.skip_bound&&_.bound[c]&&_.bound[c](a),p&&$e(t,c)),d}):[],_.update(),p=!0,B(_.before_update),_.fragment=l?l(_.ctx):!1,e.target){if(e.hydrate){const c=He(e.target);_.fragment&&_.fragment.l(c),c.forEach(O)}else _.fragment&&_.fragment.c();e.intro&&P(t.$$.fragment),pe(t,e.target,e.anchor),Fe()}$(u)}class me{constructor(){re(this,"$$");re(this,"$$set")}$destroy(){he(this,1),this.$destroy=F}$on(e,n){if(!Ue(n))return F;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(n),()=>{const s=l.indexOf(n);s!==-1&&l.splice(s,1)}}$set(e){this.$$set&&!Pe(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const xe="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(xe);function et(t){let e,n,l,s,i,o,r,u=(t[0].from_name||" ")+"",_,p,c,d=t[0].html+"",w,a,m=t[1][t[0].group_id][1]+"",k,N,L,E,q;return{c(){e=v("div"),n=v("img"),i=R(),o=v("div"),r=v("div"),_=H(u),p=R(),c=v("div"),w=R(),a=v("div"),k=H(m),N=R(),L=v("a"),E=v("time"),q=H(t[3]),h(n,"class","avatar svelte-trlp67"),J(n.src,l=ue("LUOXU_URL")+"/avatar/"+t[0].from_id+".jpg")||h(n,"src",l),h(n,"height","64"),h(n,"width","64"),h(n,"alt",s=t[0].from_name+" 的头像"),h(r,"class","name svelte-trlp67"),h(c,"class","text svelte-trlp67"),h(E,"datetime",t[4]),h(E,"title",t[2]),h(L,"href",t[5]),h(L,"class","svelte-trlp67"),h(a,"class","time svelte-trlp67"),h(o,"class","content svelte-trlp67"),h(e,"class","message svelte-trlp67")},m(C,D){U(C,e,D),g(e,n),g(e,i),g(e,o),g(o,r),g(r,_),g(o,p),g(o,c),c.innerHTML=d,g(o,w),g(o,a),g(a,k),g(a,N),g(a,L),g(L,E),g(E,q)},p(C,[D]){D&1&&!J(n.src,l=ue("LUOXU_URL")+"/avatar/"+C[0].from_id+".jpg")&&h(n,"src",l),D&1&&s!==(s=C[0].from_name+" 的头像")&&h(n,"alt",s),D&1&&u!==(u=(C[0].from_name||" ")+"")&&x(_,u),D&1&&d!==(d=C[0].html+"")&&(c.innerHTML=d),D&3&&m!==(m=C[1][C[0].group_id][1]+"")&&x(k,m)},i:F,o:F,d(C){C&&O(e)}}}function tt(t,e){const n={year:31536e6,month:2628e6,day:864e5,hour:36e5,minute:6e4,second:1e3},l=new Intl.RelativeTimeFormat,s=t.valueOf()-e.valueOf();for(const[i,o]of Object.entries(n))if(Math.abs(s)>o||i==="second")return l.format(Math.round(s/o),i)}function nt(t,e,n){let{msg:l}=e,{groupinfo:s}=e,{now:i}=e;const r=new Intl.DateTimeFormat(void 0,{timeStyle:"full",dateStyle:"full",hour12:!1}).format;let u=new Date(l.t*1e3),_=l.edited?new Date(l.edited*1e3):null,p=r(u)+(_?`
最后编辑于:${r(_)}`:""),c=tt(u,i),d=u.toISOString(),w=s[l.group_id][0]?`https://t.me/${s[l.group_id][0]}/${l.id}`:`tg://privatepost?channel=${l.group_id}&post=${l.id}`;return t.$$set=a=>{"msg"in a&&n(0,l=a.msg),"groupinfo"in a&&n(1,s=a.groupinfo),"now"in a&&n(6,i=a.now)},[l,s,p,c,d,w,i]}class lt extends me{constructor(e){super(),ge(this,e,nt,et,ae,{msg:0,groupinfo:1,now:6})}}function ke(t,e,n){const l=t.slice();return l[25]=e[n],l[27]=n,l}function Ee(t,e){let n,l,s,i=e[25][1]+"",o,r,u,_;return{key:t,first:null,c(){n=v("li"),l=v("img"),o=H(i),r=R(),J(l.src,s=e[6]+"/avatar/"+e[25][0]+".jpg")||h(l,"src",s),h(l,"alt","avatar"),h(l,"class","svelte-1xopsdo"),h(n,"data-idx",u=e[27]),h(n,"title",_=e[25][1]),h(n,"class","svelte-1xopsdo"),se(n,"selected",e[27]===e[1]),this.first=n},m(p,c){U(p,n,c),g(n,l),g(n,o),g(n,r)},p(p,c){e=p,c&4&&!J(l.src,s=e[6]+"/avatar/"+e[25][0]+".jpg")&&h(l,"src",s),c&4&&i!==(i=e[25][1]+"")&&x(o,i),c&4&&u!==(u=e[27])&&h(n,"data-idx",u),c&4&&_!==(_=e[25][1])&&h(n,"title",_),c&6&&se(n,"selected",e[27]===e[1])},d(p){p&&O(n)}}}function st(t){let e,n,l,s,i,o,r,u=[],_=new Map,p,c,d=Y(t[2]);const w=a=>a[25];for(let a=0;a{};function rt(t,e,n){let{group:l}=e,{selected:s}=e,{selected_init:i}=e,o="",r,u,_=[],p=ue("LUOXU_URL"),c,d,w=!1,a=new AbortController;je(()=>{const f=c.getBoundingClientRect();n(4,d.style.top=`${f.height-1}px`,d),n(4,d.style.width=`${f.width-2}px`,d)});function m(){const f=c.getBoundingClientRect();n(4,d.style.width=`${f.width-2}px`,d)}function k(){u&&clearTimeout(u),u=setTimeout(function(){N()},300)}async function N(){if(c.value){n(1,r=null),a.abort(),a=new AbortController;try{const b=await(await fetch(`${p}/names?g=${l}&q=${c.value}`,{signal:a.signal})).json();a.signal.aborted||n(2,_=b.names)}catch(f){f instanceof DOMException&&f.name==="AbortError"||console.error(f)}}}function L(f){let b=f.target;b.tagName==="IMG"&&(b=b.parentNode),b.tagName=="LI"&&(n(1,r=parseInt(b.dataset.idx)),E(),c.focus(),n(5,w=!0))}function E(){n(0,s=_[r][0]),o=_[r][1],n(3,c.value=o,c),n(12,i=null)}function q(){!s||s===i||(c.value?n(3,c.value=o,c):(n(0,s=i),o=""))}function C(f){f.key==="ArrowDown"||f.key==="n"&&f.altKey?(D(1),f.preventDefault()):f.key==="ArrowUp"||f.key==="p"&&f.altKey?(D(-1),f.preventDefault()):f.key==="Enter"&&(E(),f.preventDefault())}function D(f){typeof r=="number"?f>0?n(1,r=(r+1)%_.length):n(1,r=(r-1)%_.length):f>0?n(1,r=0):n(1,r=_.length-1)}function y(f){te[f?"unshift":"push"](()=>{c=f,n(3,c)})}const A=()=>{n(5,w=!1),k()},M=()=>n(5,w=!1),T=()=>{n(5,w=!0),q()};function S(f){te[f?"unshift":"push"](()=>{d=f,n(4,d)})}return t.$$set=f=>{"group"in f&&n(13,l=f.group),"selected"in f&&n(0,s=f.selected),"selected_init"in f&&n(12,i=f.selected_init)},[s,r,_,c,d,w,p,m,k,L,q,C,i,l,y,A,M,T,S]}class it extends me{constructor(e){super(),ge(this,e,rt,st,ae,{group:13,selected:0,selected_init:12})}}function ut(t){return new Promise((n,l)=>{setTimeout(n,t)})}function Le(t,e,n){const l=t.slice();return l[25]=e[n],l}function Ce(t,e,n){const l=t.slice();return l[2]=e[n],l}function ft(t){let e,n,l,s,i=t[10]&&at(),o=Y(t[0]),r=[];for(let u=0;ut[17].call(e))},m(u,_){U(u,e,_),i&&i.m(e,null),g(e,n);for(let p=0;p搜索消息时,搜索字符串不区分简繁(会使用 OpenCC
自动转换),也不进行分词(请手动将可能不连在一起的词语以空格分开)。
搜索字符串支持以下功能:
- 以空格分开的多个搜索词是「与」的关系
- 使用 OR(全大写)来表达「或」条件
- 使用 - 来表达排除,如 落絮 - 测试
- 使用小括号来分组
人名补全支持上下方向键和 Alt+N/P 进行选择。
搜索结果右下角的时间,悬停可查看绝对时间、最后编辑时间(如编辑过),点击可跳转到
Telegram 中展示该消息。
`},m(n,l){U(n,e,l)},p:F,i:F,o:F,d(n){n&&O(e)}}}function dt(t){let e,n,l=Y(t[4].messages),s=[];for(let o=0;oW(s[o],1,1,()=>{s[o]=null});return{c(){for(let o=0;o正在加载...',h(e,"class","info svelte-1rpa33b")},m(n,l){U(n,e,l)},p:F,d(n){n&&O(e)}}}function gt(t){let e;return{c(){e=v("div"),e.innerHTML='到底了。
',h(e,"class","info svelte-1rpa33b")},m(n,l){U(n,e,l)},p:F,d(n){n&&O(e)}}}function mt(t){let e;return{c(){e=v("div"),e.innerHTML='没有匹配的消息。
',h(e,"class","info svelte-1rpa33b")},m(n,l){U(n,e,l)},p:F,d(n){n&&O(e)}}}function bt(t){let e,n;return{c(){e=v("p"),n=H(t[3]),h(e,"class","error svelte-1rpa33b")},m(l,s){U(l,e,s),g(e,n)},p(l,s){s&8&&x(n,l[3])},d(l){l&&O(e)}}}function Ae(t){let e,n,l,s;return{c(){e=v("div"),n=v("button"),n.textContent="加载更多",h(n,"class","svelte-1rpa33b"),h(e,"class","info svelte-1rpa33b")},m(i,o){U(i,e,o),g(e,n),l||(s=j(n,"click",t[14]),l=!0)},p:F,d(i){i&&O(e),l=!1,s()}}}function wt(t){let e,n,l,s,i,o,r,u,_,p,c,d,w,a,m,k;function N(f,b){return f[0].length===0?ct:ft}let L=N(t),E=L(t);function q(f){t[21](f)}let C={group:t[2],selected_init:t[8]};t[7]!==void 0&&(C.selected=t[7]),o=new it({props:C}),te.push(()=>Ze(o,"selected",q));const D=[dt,_t],y=[];function A(f,b){return f[4]?0:!f[6]&&!f[3]?1:-1}~(c=A(t))&&(d=y[c]=D[c](t));function M(f,b){return f[6]?ht:pt}let T=M(t),S=T(t);return{c(){e=v("main"),n=v("div"),E.c(),l=R(),s=v("input"),i=R(),Re(o.$$.fragment),u=R(),_=v("button"),_.textContent="搜索",p=R(),d&&d.c(),w=R(),S.c(),h(s,"type","search"),h(s,"class","svelte-1rpa33b"),h(_,"class","svelte-1rpa33b"),h(n,"id","searchbox"),h(n,"class","svelte-1rpa33b"),h(e,"class","svelte-1rpa33b")},m(f,b){U(f,e,b),g(e,n),E.m(n,null),g(n,l),g(n,s),Q(s,t[1]),g(n,i),pe(o,n,null),g(n,u),g(n,_),g(e,p),~c&&y[c].m(e,null),g(e,w),S.m(e,null),a=!0,m||(k=[j(window,"hashchange",t[16]),j(s,"input",t[18]),j(s,"input",t[19]),j(s,"keydown",t[20]),j(_,"click",t[22])],m=!0)},p(f,[b]){L===(L=N(f))&&E?E.p(f,b):(E.d(1),E=L(f),E&&(E.c(),E.m(n,l))),b&2&&s.value!==f[1]&&Q(s,f[1]);const I={};b&4&&(I.group=f[2]),b&256&&(I.selected_init=f[8]),!r&&b&128&&(r=!0,I.selected=f[7],Ve(()=>r=!1)),o.$set(I);let K=c;c=A(f),c===K?~c&&y[c].p(f,b):(d&&(Se(),W(y[K],1,1,()=>{y[K]=null}),Te()),~c?(d=y[c],d?d.p(f,b):(d=y[c]=D[c](f),d.c()),P(d,1),d.m(e,w)):d=null),T===(T=M(f))&&S?S.p(f,b):(S.d(1),S=T(f),S&&(S.c(),S.m(e,null)))},i(f){a||(P(o.$$.fragment,f),P(d),a=!0)},o(f){W(o.$$.fragment,f),W(d),a=!1},d(f){f&&O(e),E.d(),he(o),~c&&y[c].d(),S.d(),m=!1,B(k)}}}const Z="https://search-pub.xtaolabs.com/luoxu";function yt(){const t=location.hash;if(t)return new URLSearchParams(t.substring(1))}function vt(t,e,n){const l=Z.startsWith("http://localhost");let s=[],i,o,r,u,_=new Date,p=!1,c=!1,d,w,a=!1,m=new AbortController;Ke("LUOXU_URL",Z),je(async()=>{for(k();;)try{const f=await fetch(`${Z}/groups`);n(0,s=(await f.json()).groups),n(15,c=!0),i||n(2,i="");break}catch(f){console.error("failed to fetch group info, will retry",f),await ut(1e3)}});function k(){const f=yt();f&&(n(1,o=""),n(2,i=""),n(4,u=null),f.has("g")&&n(2,i=f.get("g")),f.has("q")&&n(1,o=f.get("q")),f.has("sender")&&(n(7,d=f.get("sender")),n(8,w=d)),(i||l)&&o&&(n(4,u=null),L()))}let N=0;async function L(f){N+=1;try{if(m.abort(),m=new AbortController,!i&&!l){n(3,r="请选择要搜索的群组");return}if(!o&&!l&&!d){n(3,r="请输入搜索关键字");return}n(3,r=""),n(9,a=!0),console.log(`searching ${o} for group ${i}, older than ${f}, from ${d}`);const b=new URLSearchParams;i&&b.append("g",i),o&&b.append("q",o),d&&b.append("sender",d);let I;const K=b.toString();f?I=`${Z}/search?${b}&end=${f}`:(location.hash=`#${K}`,n(15,c=!0),u&&n(4,u.messages=[],u),I=`${Z}/search?${K}`),n(5,_=new Date),n(6,p=!0);try{const we=await(await fetch(I,{signal:m.signal})).json();if(n(6,p=!1),m.signal.aborted)return[];if(f)return we;n(4,u=we)}catch(be){N<=1&&(n(3,r=be),n(6,p=!1))}n(9,a=!1)}finally{N-=1}}async function E(){n(3,r=""),o&&await L()}async function q(){const f=u.messages[u.messages.length-1].t,b=u.messages,I=await L(f);n(4,u.messages=[...b,...I.messages],u),n(4,u.has_more=I.has_more,u)}const C=()=>{a||k()};function D(){i=Xe(this),n(2,i),n(0,s)}function y(){o=this.value,n(1,o)}const A=()=>n(3,r=""),M=f=>{f.key==="Enter"&&L()};function T(f){d=f,n(7,d)}const S=()=>L();return t.$$.update=()=>{if(t.$$.dirty&32775&&c&&s){let f;for(const b of s)b.group_id===i&&(f=b.name);o&&f?document.title=`搜索:${o} 于 ${f} - 落絮`:o?document.title=`搜索:${o} - 落絮`:f?document.title=`搜索 ${f} - 落絮`:document.title="落絮",n(15,c=!1)}},[s,o,i,r,u,_,p,d,w,a,l,k,L,E,q,c,C,D,y,A,M,T,S]}class kt extends me{constructor(e){super(),ge(this,e,vt,wt,ae,{})}}new kt({target:document.body});