1document.currentScript.stellarMount=function(e,s){const t=s.serviceUtils;Array.from(e.getElementsByClassName("ds-memos")).forEach(e=>{const a=e.dataset.api;if(!a)return;const r=e.getAttribute("avatar")||def.avatar,i=e.getAttribute("limit"),n=a.match(/https:\/\/(.*?)\/(.*)/i)[1];t.request(e,a,async s=>{const a=await s.json();let u=l.identify(a);if("feature"===u.version)return;const o=e.getAttribute("user")?.split(",")||[],m=e.getAttribute("hide")?.split(",")||[];await Promise.all(u.data.slice(0,i||u.data.length).map(s=>async function(e,s,t,a,r,i){const n=l[s.version]||l.feature;return`<div class="timenode">\n <div class="header">${t.length||a.includes("user")?"":await n.buildUser(e,s,r)}\n <span>${n.buildDate(e).toLocaleString()}</span></div>\n <div class="body">${marked.parse(e.content||"")}\n <p>${n.buildImages(e,i).join("")}</p>\n </div></div>`}(s,u,o,m,r,n).then(s=>t.dom(e).append(s))))});const l={"22-":{buildUser:async(e,s,t)=>`<div class="user-info">${t?`<img src="${t}">`:""}<span>${e.creatorName}</span></div>`,buildDate:e=>new Date(1e3*e.createdTs),buildImages:(e,s)=>(e.resourceList||[]).filter(e=>e.type?.includes("image/")).map(e=>`<p><img src="${e.externalLink||`https://${s}/o/r/${e.id}`}"></p>`)},"22+":{buildUser:async(e,a,r)=>{const i=e?.creator.split("/")[1];let n=a.users.find(e=>e.id===parseInt(i));n||(a.requests[i]||(a.requests[i]=t.requestWithoutLoading(`${a.site}/api/v1/users/${i}`,{service:"memos-user"}).then(e=>e.json()).then(e=>{e.username?(n=e,a.users.push(e)):n=null}).catch(()=>{n=null}).finally(()=>delete a.requests[i])),await a.requests[i],s.signal.throwIfAborted(),n=a.users.find(e=>e.id===parseInt(i)));const l=n?n.nickname||n.username:"memos",u=n?.avatarUrl?`${a.site}${n.avatarUrl}`:r||"";return`<div class="user-info">${u?`<img src="${u}">`:""}<span>${l}</span></div>`},buildDate:e=>new Date(e.createTime),buildImages:e=>(e.resources||[]).filter(e=>e.type?.includes("image/")).map(e=>`<p><img src="${e.externalLink||`https://${n}/o/r/${e.id}`}"></p>`)},"25+":{buildUser:async(e,a,r)=>{const i=e?.creator.split("/")[1];let n=a.users.find(e=>e.name.split("/")[1]===i);n||(a.requests[i]||(a.requests[i]=t.requestWithoutLoading(`${a.site}/api/v1/users/${i}`,{service:"memos-user"}).then(e=>e.json()).then(e=>{e.username?(n=e,a.users.push(e)):n=null}).catch(()=>{n=null}).finally(()=>delete a.requests[i])),await a.requests[i],s.signal.throwIfAborted(),n=a.users.find(e=>e.name.split("/")[1]===i));const l=n?n.displayName||n.username:"memos",u=n?.avatarUrl?`${a.site}${n.avatarUrl}`:r||"";return`<div class="user-info">${u?`<img src="${u}">`:""}<span>${l}</span></div>`},buildDate:e=>new Date(e.createTime),buildImages:e=>(e.attachments||[]).filter(e=>e.type?.includes("image/")).map(e=>`<div class="image-bg"><img src="${e.externalLink||`https://${n}/file/${e.name}/${e.filename}`}"></div>`)},v1:{buildUser:async(e,a,r)=>{const i=e?.creator||"",n=i.split("/")[1]||i,l=()=>a.users.find(e=>(e.name||"").split("/")[1]===n||String(e.id)===n);let u=l();u||a.requests[n]||(a.requests[n]=t.requestWithoutLoading(`${a.site}/api/v1/users/${encodeURIComponent(i)}`,{service:"memos-user"}).then(e=>e.json()).then(e=>{e.username&&(a.users.push(e),u=e)}).catch(()=>{}).finally(()=>delete a.requests[n])),a.requests[n]&&(await a.requests[n],s.signal.throwIfAborted(),u=l());const o=u?u.displayName||u.username:"memos",m=u?.avatarUrl?u.avatarUrl.startsWith("http")?u.avatarUrl:`${a.site}${u.avatarUrl}`:r||"";return`<div class="user-info">${m?`<img src="${m}">`:""}<span>${o}</span></div>`},buildDate:e=>{const s=new Date(e.createTime);return isNaN(s.getTime())?new Date:s},buildImages:(e,s)=>(e.attachments||e.resources||[]).filter(e=>e&&e.type&&String(e.type).includes("image/")).map(e=>`<div class="image-bg"><img src="${e.externalLink||e.url||`https://${s}/file/${e.name}/${e.filename}`}"></div>`)},feature:{buildUser:async()=>"memos",buildDate:()=>new Date,buildImages:()=>[]},identify:e=>{let s={version:"feature",users:[],site:a.split("/api/v1")[0],requests:{},data:[]};if(Array.isArray(e))s.version="22-",s.data=e,console.log("å½åMemosçæ¬ä¸º22-");else if(e&&Array.isArray(e.memos)&&e.memos.length>0){const t=e.memos[0],a=String(t.creator||"").split("/")[1]||"";null!=t.createTime&&a.length>0&&!/^\d+$/.test(a)?(s.version="v1",s.data=e.memos,console.log("å½åMemosçæ¬ä¸ºv1")):t.attachments?(s.version="25+",s.data=e.memos,console.log("å½åMemosçæ¬ä¸º25+")):(s.version="22+",s.data=e.memos,console.log("å½åMemosçæ¬ä¸º22+"))}else s.version="feature",console.log("å½åMemosçæ¬è¿é«ï¼è¯·å°Stellar社åºåé¦");return s}}})};
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.