PageSourceSearch

https://www.ottohub.cn/assets/CommentReplyThread-nFtxr0fG.js

js ottohub.cn collected 2026-10-06 13:14:40 UTC 17,745 bytes, 4 lines download raw bytes

1import{B as e,C as t,E as n,F as r,H as i,J as a,K as o,M as s,N as c,O as l,S as u,T as d,W as f,Z as p,c as m,ct as h,et as g,g as _,it as v,k as y,n as b,st as x,ut as S,y as C}from"./vendor-vue-Bu-KQjoC.js";import{s as ee,st as te}from"./index-BE2-dWra.js";import{t as ne}from"./useUsernameMatchSuggest-B2gsM2St.js";import{n as w}from"./imageApi-DfRzG9lf.js";import{t as T}from"./BlogContentRenderer-qER_0Wwh.js";import{i as E}from"./detailSeo-DAA_xaZS.js";var D=`153 * 3`,re=`otto-blog-comment-draft-v1`,ie=`otto-blog-comment-reply-draft-v1`,ae=`otto-video-comment-draft-v1`,oe=`otto-video-comment-reply-draft-v1`;function O(){return{text:``,images:[]}}function se(e,t){let n=e.replace(/\s+$/,``),r=t.map(e=>e.trim()).filter(Boolean).map(e=>`![](${e})`);return r.length===0?n.trim():n.trim()?`${n}\n${r.join(`
2`)}`:r.join(`
3`)}function k(e,t){return se(e,t).length}function A(e,t){if(k(e,t)<=459)return e;let n=e;for(;n.length>0&&k(n,t)>459;)n=n.slice(0,-1);return n}function ce(e){if(typeof window>`u`)return O();try{let t=window.localStorage.getItem(e);if(!t)return O();let n=JSON.parse(t);return{text:typeof n.text==`string`?n.text:``,images:Array.isArray(n.images)?n.images.filter(e=>typeof e==`string`&&e.length>0):[]}}catch{return O()}}function le(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(e,JSON.stringify({text:t.text??``,images:Array.isArray(t.images)?t.images:[]}))}catch{}}function ue(e){if(!(typeof window>`u`))try{window.localStorage.removeItem(e)}catch{}}function de(e,t){if(t<0)return null;let n=e.slice(0,t),r=n.lastIndexOf(`@`);if(r===-1)return null;if(r>0){let t=e[r-1];if(t!==` `&&t!==`
4`)return null}let i=n.slice(r+1);return!i||/[\s\n]/.test(i)?null:{query:i,start:r,end:t}}function fe(e,t,n){let r=`@${n} `;return{text:e.slice(0,t.start)+r+e.slice(t.end),cursor:t.start+r.length}}var pe={class:`space-y-2`},me={class:`relative`},he=[`rows`,`disabled`,`placeholder`],ge=[`aria-label`],_e={key:0,class:`px-3 py-2 text-[12px] text-muted`},ve={key:1,class:`px-3 py-2 text-[12px] text-secondary`},ye=[`aria-selected`,`onMouseenter`,`onMousedown`],be=[`src`],xe={key:1,class:`flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-border bg-elevated text-[10px] text-muted`},Se={class:`min-w-0 truncate text-[13px] font-medium`},Ce={class:`shrink-0 text-[11px] text-muted`},we={key:0,class:`px-3 py-2 text-center text-[12px] text-muted`},Te={key:0,class:`flex flex-wrap gap-2`},Ee=[`src`],De=[`onClick`],Oe={class:`flex flex-wrap items-center justify-between gap-2`},ke={class:`flex flex-wrap items-center gap-2`},Ae=[`disabled`,`title`],je={key:0,class:`text-[11px] text-muted`},Me={key:1,class:`inline-flex cursor-pointer select-none items-center gap-1.5 text-[11px] text-muted`},Ne={class:`flex items-center gap-2`},Pe=[`disabled`],j=r({__name:`BlogCommentComposer`,props:{scope:{default:`blog`},disabled:{type:Boolean,default:!1},placeholder:{},compact:{type:Boolean,default:!1},submitLabel:{},showSyncDanmakuOption:{type:Boolean,default:!1},onSubmit:{}},emits:[`error`],setup(r,{expose:m,emit:ee}){let T=r,E=ee,{t:O}=b(),j=te(),M=(()=>{switch(T.scope){case`blog-reply`:return ie;case`video`:return ae;case`video-reply`:return oe;default:return re}})(),N=v(``),P=v([]),F=v(!1),I=v(!1),L=v(!1),R=v(!0),z=v(null),B=v(null),V=v(null),H=v(null),U=v(0),{suggestions:W,loading:G,loadingMore:K,hasMore:Fe,hasQuery:q,schedule:Ie,clear:J,loadMore:Y}=ne(),Le=()=>!!(H.value?.query&&(G.value||K.value||W.value.length>0||q.value&&!G.value)),X=d(()=>k(N.value,P.value)),Re=d(()=>X.value>459),ze=d(()=>X.value>=459);i(()=>{let e=ce(M);N.value=A(e.text,e.images),P.value=e.images,F.value=!0}),p([N,P],()=>{F.value&&le(M,{text:N.value,images:P.value})});let Be=()=>T.placeholder??(T.compact?O(`blog.replyPlaceholder`):O(`blog.commentPlaceholder`)),Ve=()=>T.submitLabel??O(`blog.sendComment`);function He(){return B.value?.selectionStart??N.value.length}function Z(){if(!F.value||T.disabled||L.value){J(),H.value=null;return}let e=He(),t=de(N.value,e);if(H.value=t,!t?.query){J();return}Ie(t.query),U.value=0}function Q(){J(),H.value=null,U.value=0}function $(){j.openAuth(`login`)}function Ue(){if(!j.activeAccount?.token){$();return}z.value?.click()}async function We(e){let t=e.target,n=t.files?.[0];if(t.value=``,!n)return;let r=j.activeAccount?.token;if(!r){$();return}
4I.value=!0,E(`error`,null);try{let e=await w(r,n),t=[...P.value,e];if(k(N.value,t)>459){E(`error`,O(`blog.commentTooLong`,{max:D,len:k(N.value,t)}));return}P.value=t}catch(e){E(`error`,e instanceof Error?e.message:O(`blog.uploadFailed`))}finally{I.value=!1}}function Ge(e){P.value=P.value.filter((t,n)=>n!==e)}function Ke(e){let t=e.target;N.value=A(t.value,P.value),Z()}function qe(){Z()}function Je(t){let n=H.value;if(!n)return;let{text:r,cursor:i}=fe(N.value,n,t.username);N.value=A(r,P.value),Q(),e(()=>{let e=B.value;if(e){e.focus();try{e.setSelectionRange(i,i)}catch{}}})}function Ye(e){if(Le()&&W.value.length>0){if(e.key===`ArrowDown`){e.preventDefault(),U.value=(U.value+1)%W.value.length,U.value>=W.value.length-2&&Y();return}if(e.key===`ArrowUp`){e.preventDefault(),U.value=(U.value-1+W.value.length)%W.value.length;return}if(e.key===`Enter`||e.key===`Tab`){e.preventDefault();let t=W.value[U.value];t&&Je(t);return}if(e.key===`Escape`){e.preventDefault(),Q();return}}}function Xe(){window.setTimeout(()=>Q(),120)}function Ze(){let e=V.value;!e||K.value||!Fe.value||e.scrollTop+e.clientHeight>=e.scrollHeight-24&&Y()}async function Qe(){let e=se(N.value,P.value);if(!e.trim()){E(`error`,T.compact?O(`blog.replyEmpty`):O(`blog.commentEmpty`));return}if(e.length>459){E(`error`,O(`blog.commentTooLong`,{max:D,len:e.length}));return}if(!j.activeAccount?.token){$();return}L.value=!0,E(`error`,null);try{let t=T.showSyncDanmakuOption&&T.scope===`video`?{syncDanmaku:R.value}:void 0;await T.onSubmit(e,t)&&(N.value=``,P.value=[],ue(M),Q())}finally{L.value=!1}}function $e(e){let t=N.value;t.startsWith(e)||(N.value=A(e+t,P.value))}function et(){let e=B.value;if(!e)return;let t=e.value.length;e.focus();try{e.setSelectionRange(t,t)}catch{}Z()}return m({reset(){N.value=``,P.value=[],ue(M),Q()},prependMentionPrefix:$e,focusTextarea:et,setText(e){N.value=A(e,P.value)}}),(e,i)=>{let d=a(`MaterialIcon`);return f(),y(`div`,pe,[n(`div`,me,[g(n(`textarea`,{ref_key:`textareaRef`,ref:B,"onUpdate:modelValue":i[0]||(i[0]=e=>N.value=e),rows:r.compact?2:3,disabled:r.disabled||L.value,placeholder:Be(),class:`nico-input w-full resize-y text-[13px]`,onInput:Ke,onClick:qe,onKeyup:qe,onKeydown:Ye,onBlur:Xe},null,40,he),[[C,N.value]]),Le()?(f(),y(`ul`,{key:0,ref_key:`listRef`,ref:V,class:`absolute inset-x-0 top-full z-30 mt-1 max-h-64 overflow-y-auto rounded-[var(--radius-default)] border border-border bg-surface shadow-md`,role:`listbox`,"aria-label":x(O)(`message.userSuggest`),onScroll:Ze},[x(G)&&x(W).length===0?(f(),y(`li`,_e,S(x(O)(`message.searchingUsers`)),1)):x(q)&&!x(G)&&x(W).length===0?(f(),y(`li`,ve,S(x(O)(`message.noUserMatch`)),1)):(f(),y(t,{key:2},[(f(!0),y(t,null,o(x(W),(e,t)=>(f(),y(`li`,{key:e.uid},[n(`button`,{type:`button`,role:`option`,"aria-selected":t===U.value,class:h([`flex w-full items-center gap-2 px-3 py-2 text-left transition-colors`,t===U.value?`bg-accent-muted text-primary`:`hover:bg-elevated`]),onMouseenter:e=>U.value=t,onMousedown:u(t=>Je(e),[`prevent`])},[e.avatar_url?(f(),y(`img`,{key:0,src:e.avatar_url,alt:``,class:`h-7 w-7 shrink-0 rounded-full border border-border object-cover`},null,8,be)):(f(),y(`span`,xe,S(e.username.slice(0,1).toUpperCase()),1)),n(`span`,Se,S(e.username),1),n(`span`,Ce,`OID `+S(e.uid),1)],42,ye)]))),128)),x(K)?(f(),y(`li`,we,S(x(O)(`message.searchingUsers`)),1)):l(``,!0)],64))],40,ge)):l(``,!0)]),P.value.length>0?(f(),y(`div`,Te,[(f(!0),y(t,null,o(P.value,(e,t)=>(f(),y(`div`,{key:e,class:`relative h-16 w-16 overflow-hidden rounded-[var(--radius-default)] border border-border`},[n(`img`,{src:e,alt:``,class:`h-full w-full object-cover`},null,8,Ee),n(`button`,{type:`button`,class:`absolute right-0 top-0 flex h-5 w-5 items-center justify-center bg-black/60 text-white`,onClick:e=>Ge(t)},[c(d,{name:`close`,size:12})],8,De)]))),128))])):l(``,!0),n(`div`,Oe,[n(`div`,ke,[n(`button`,{type:`button`,class:`nico-icon-btn text-muted`,disabled:r.disabled||I.value||L.value||ze.value,title:x(O)(`blog.addImage`),onClick:Ue},[c(d,{name:`image`,size:18})],8,Ae),n(`input`,{ref_key:`fileInputRef`,ref:z,type:`file`,accept:`image/*`,class:`hidden`,onChange:We},null,544),I.value?(f(),y(`span`,je,S(x(O)(`blog.uploading`)),1)):l(``,!0),r.showSyncDanmakuOption&&r.scope===`video`?(f(),y(`label`,Me,[g(n(`input`,{"onUpdate:modelValue":i[1]||(i[1]=e=>R.value=e),type:`checkbox`,class:`rounded border-border`},null,512),[[_,R.value]]),s(` `+S(x(O)(`video.syncDanmaku`)),1)])):l(``,!0)]),n(`div`,Ne,[n(`span`,{class:h([`text-[11px] tabular-nums`,Re.value?`text-danger`:ze.value?`text-accent`:`text-muted`])},S(X.value)+`/`+S(x(D)),3),n(`button`,{type:`button`,class:`nico-btn nico-btn-sm nico-btn-primary px-4 text-[13px] disabled:opacity-50`,disabled:r.disabled||L.value||I.value||Re.value,onClick:Qe},S(Ve()),9,Pe)])])])}}}),M={key:0,class:`flex flex-wrap items-center justify-center gap-1.5`},N=[`disabled`],P={key:0,class:`px-1 text-muted`},F=[`disabled`,`onClick`],I=[`disabled`],L={key:0,class:`flex flex-wrap items-center gap-2`},R={class:`text-muted`},z=[`max`,`disabled`],B=[`disabled`],V={key:1,class:`min-w-0 flex-1`},H={class:`flex flex-wrap items-center justify-end gap-1.5`},U={class:`text-[11px] text-muted`},W=[`disabled`,`onClick`],G=r({__name:`CommentPagination`,props:{page:{},totalPages:{},totalCount:{},pageSize:{},pageSizeOptions:{},loading:{type:Boolean},flush:{type:Boolean,default:!1}},emits:[`change-page`,`change-page-size`],setup(e,{emit:r}){let i=e,a=r,{t:s}=b(),c=v(``),p=d(()=>{let e=[],t=i.totalPages,n=i.page;if(t<=7)for(let n=1;n<=t;n++)e.push(n);else if(n<=4)e.push(1,2,3,4,5,`ellipsis`,t);else if(n>=t-3){e.push(1,`ellipsis`);for(let n=t-4;n<=t;n++)e.push(n)}else e.push(1,`ellipsis`,n-1,n,n+1,`ellipsis`,t);return e});function m(e){e<1||e>i.totalPages||e===i.page||i.loading||a(`change-page`,e)}function _(){let e=Number(c.value);Number.isFinite(e)&&(m(e),c.value=``)}return(r,i)=>e.totalCount>0?(f(),y(`div`,{key:0,class:h([`space-y-3`,e.flush?``:`mt-4 border-t border-border pt-3`])},[e.totalPages>1?(f(),y(`div`,M,[n(`button`,{type:`button`,class:`nico-btn nico-btn-sm border border-border bg-base px-3 text-primary disabled:cursor-not-allowed disabled:opacity-40`,disabled:e.page<=1||e.loading,onClick:i[0]||(i[0]=t=>m(e.page-1))},S(x(s)(`user.prevPage`)),9,N),(f(!0),y(t,null,o(p.value,(n,r)=>(f(),y(t,{key:`${n}-${r}`},[n===`ellipsis`?(f(),y(`span`,P,`…`)):(f(),y(`button`,{key:1,type:`button`,class:h([`nico-btn nico-btn-sm min-w-8 px-2`,n===e.page?`nico-btn-primary`:`border border-border bg-base text-primary`]),disabled:e.loading,onClick:e=>m(n)},S(n),11,F))],64))),128)),n(`button`,{type:`button`,class:`nico-btn nico-btn-sm border border-border bg-base px-3 text-primary disabled:cursor-not-allowed disabled:opacity-40`,disabled:e.page>=e.totalPages||e.loading,onClick:i[1]||(i[1]=t=>m(e.page+1))},S(x(s)(`user.nextPage`)),9,I)])):l(``,!0),n(`form`,{class:`flex flex-wrap items-center justify-between gap-2 text-[12px]`,onSubmit:u(_,[`prevent`])},[e.totalPages>1?(f(),y(`div`,L,[n(`label`,R,S(x(s)(`user.jumpTo`)),1),g(n(`input`,{"onUpdate:modelValue":i[2]||(i[2]=e=>c.value=e),type:`number`,min:`1`,max:e.totalPages,class:`h-8 w-16 rounded-[var(--radius-default)] border border-border bg-base px-2 text-primary`,disabled:e.loading},null,8,z),[[C,c.value]]),n(`button`,{type:`submit`,class:`nico-btn nico-btn-sm border border-border bg-base px-3 text-primary`,disabled:e.loading},S(x(s)(`user.go`)),9,B)])):(f(),y(`div`,V)),n(`div`,H,[n(`span`,U,S(x(s)(`comment.pageSize`)),1),(f(!0),y(t,null,o(e.pageSizeOptions,t=>(f(),y(`button`,{key:t,type:`button`,class:h([`nico-btn nico-btn-sm px-2 text-[11px]`,e.pageSize===t?`nico-btn-primary`:`border border-border bg-base text-primary`]),disabled:e.loading,onClick:e=>a(`change-page-size`,t)},S(t),11,W))),128))])],32)],2)):l(``,!0)}}),K={class:`flex flex-wrap items-center gap-1.5`},Fe={key:0,class:`inline-flex items-center gap-0.5 rounded-[var(--radius-default)] bg-accent-muted px-1.5 py-0.5 text-[10px] font-medium text-accent`},q=[`title`,`aria-label`,`disabled`],Ie=[`title`,`disabled`],J=[`title`,`disabled`],Y=r({__name:`CommentPinControls`,props:{pinned:{type:Boolean},busy:{type:Boolean},canManage:{type:Boolean},showSort:{type:Boolean},canMoveUp:{type:Boolean},canMoveDown:{type:Boolean}},emits:[`toggle`,`moveUp`,`moveDown`],setup(e,{emit:r}){let i=r,{t:o}=b();return(r,u)=>{let d=a(`MaterialIcon`);return f(),y(`div`,K,[e.pinned?(f(),y(`span`,Fe,[c(d,{name:`push_pin`,size:11,variant:`filled`}),s(` `+S(x(o)(`comment.pin.pinned`)),1)])):l(``,!0),e.canManage?(f(),y(t,{key:1},[n(`button`,{type:`button`,class:`inline-flex h-6 w-6 items-center justify-center rounded-full border border-border bg-surface text-secondary hover:text-accent disabled:opacity-50`,title:e.pinned?x(o)(`comment.pin.unpin`):x(o)(`comment.pin.pin`),"aria-label":e.pinned?x(o)(`comment.pin.unpin`):x(o)(`comment.pin.pin`),disabled:e.busy,onClick:u[0]||(u[0]=e=>i(`toggle`))},[c(d,{name:`push_pin`,size:13,variant:e.pinned?`filled`:`outlined`},null,8,[`variant`])],8,q),e.showSort&&e.pinned?(f(),y(t,{key:0},[n(`button`,{type:`button`,class:`inline-flex h-6 w-6 items-center justify-center rounded-full border border-border bg-surface text-secondary hover:text-accent disabled:opacity-50`,title:x(o)(`comment.pin.moveUp`),disabled:e.busy||!e.canMoveUp,onClick:u[1]||(u[1]=e=>i(`moveUp`))},[c(d,{name:`arrow_upward`,size:13})],8,Ie),n(`button`,{type:`button`,class:`inline-flex h-6 w-6 items-center justify-center rounded-full border border-border bg-surface text-secondary hover:text-accent disabled:opacity-50`,title:x(o)(`comment.pin.moveDown`),disabled:e.busy||!e.canMoveDown,onClick:u[2]||(u[2]=e=>i(`moveDown`))},[c(d,{name:`arrow_downward`,size:13})],8,J)],64)):l(``,!0)],64)):l(``,!0)])}}}),Le={key:0,class:`comment-reply-thread mt-2.5 rounded-[var(--radius-default)] border border-border bg-reader px-2.5 py-2`},X=[`href`,`onClick`],Re=[`src`,`alt`],ze={key:1,class:`mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full border border-border bg-surface text-[10px] text-muted`},Be={class:`min-w-0 flex-1`},Ve={class:`flex flex-wrap items-center gap-1`},He=[`href`,`onClick`],Z={class:`mt-1 text-[13px] leading-relaxed text-primary`},Q={class:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-muted`},$=[`onClick`],Ue=[`onClick`],We=[`onClick`],Ge=[`disabled`],Ke=r({__name:`CommentReplyThread`,props:{localeScope:{},parentId:{},replies:{},expanded:{type:Boolean},totalReplyCount:{},hasMore:{type:Boolean},loadingMore:{type:Boolean},actionLoading:{type:Boolean},composerScope:{},onSubmitReply:{type:Function}},emits:[`openAll`,`replyTo`,`report`,`delete`,`loadMore`,`composerError`],setup(e,{expose:r,emit:i}){let a=e,s=i,{t:u}=b(),d=m(),p=te(),g=v(null);r({prependReplyMention(e){g.value?.prependMentionPrefix(e),g.value?.focusTextarea()}});function _(e,t){ee(e,d,t)}function C(e){let t=e?.split(`,`).map(e=>
4e.trim()).filter(Boolean)??[];return t.length>0&&t[0]===`吉吉国民`?t.slice(1):t}function ne(e){return!!(e.ifMyComment||p.activeAccount&&Number(e.uid)===p.activeAccount.uid)}function w(e,t){return u(`${a.localeScope}.${e}`,t??{})}return(r,i)=>e.expanded||e.replies.length>0||e.totalReplyCount>0?(f(),y(`div`,Le,[(f(!0),y(t,null,o(e.replies,r=>(f(),y(`div`,{key:r.id,class:`flex items-start gap-2 py-1.5 first:pt-0 last:pb-0`},[r.avatarUrl?(f(),y(`a`,{key:0,href:`/u/${r.uid}`,class:`mt-0.5 shrink-0`,onClick:e=>_(e,`/u/${r.uid}`)},[n(`img`,{src:r.avatarUrl,alt:r.username,class:`h-6 w-6 rounded-full border border-border object-cover`},null,8,Re)],8,X)):(f(),y(`div`,ze,` ? `)),n(`div`,Be,[n(`div`,Ve,[n(`a`,{href:`/u/${r.uid}`,class:`text-[13px] font-semibold text-primary hover:text-accent`,onClick:e=>_(e,`/u/${r.uid}`)},S(r.username),9,He),(f(!0),y(t,null,o(C(r.honour),e=>(f(),y(`span`,{key:e,class:`rounded-[var(--radius-default)] bg-accent-muted px-1.5 py-0.5 text-[10px] font-medium text-accent`},S(e),1))),128))]),n(`div`,Z,[c(T,{variant:`comment`,"open-internal-in-new-tab":``,content:r.content},null,8,[`content`])]),n(`div`,Q,[n(`span`,null,S(x(E)(r.time)),1),n(`button`,{type:`button`,class:`hover:text-accent`,onClick:e=>s(`replyTo`,r)},S(w(`reply`)),9,$),e.expanded?(f(),y(t,{key:0},[n(`button`,{type:`button`,class:`hover:text-danger`,onClick:e=>s(`report`,r.id)},S(w(`report`)),9,Ue),ne(r)?(f(),y(`button`,{key:0,type:`button`,class:`hover:text-danger`,onClick:e=>s(`delete`,r.id)},S(w(`delete`)),9,We)):l(``,!0)],64)):l(``,!0)])])]))),128)),!e.expanded&&e.totalReplyCount>0?(f(),y(`button`,{key:0,type:`button`,class:`mt-1 w-full py-1 text-left text-[12px] text-muted hover:text-accent`,onClick:i[0]||(i[0]=e=>s(`openAll`))},S(w(`viewAllReplies`,{count:e.totalReplyCount})),1)):l(``,!0),e.expanded?(f(),y(t,{key:1},[e.hasMore?(f(),y(`button`,{key:0,type:`button`,class:`mt-1 py-1 text-[12px] text-muted hover:text-accent disabled:opacity-60`,disabled:e.loadingMore,onClick:i[1]||(i[1]=e=>s(`loadMore`))},S(e.loadingMore?w(`loadingMore`):w(`loadMoreReplies`)),9,Ge)):l(``,!0),e.onSubmitReply?(f(),y(`div`,{key:1,class:h(e.replies.length>0?`mt-2 border-t border-border pt-2`:``)},[c(j,{ref_key:`composerRef`,ref:g,scope:e.composerScope,compact:``,disabled:e.actionLoading,"submit-label":w(`reply`),"on-submit":e.onSubmitReply,onError:i[2]||(i[2]=e=>s(`composerError`,e??``))},null,8,[`scope`,`disabled`,`submit-label`,`on-submit`])],2)):l(``,!0)],64)):l(``,!0)])):l(``,!0)}});
4export{j as i,Y as n,G as r,Ke as t};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.