wiki-plugin-roster
Version:
Federated Wiki - Roster Plugin
9 lines (8 loc) • 2.36 kB
JavaScript
/* wiki-plugin-roster - 0.4.0 - Sat, 03 May 2025 11:05:37 GMT */
(()=>{var s={};var A=t=>{let r=t.split(" ");for(;r.length;){let o=r.shift();wiki.neighborhoodObject.registerNeighbor(o)}},R=(t,r)=>{let o={all:[]},i=null,a=[],y={},c=[];t!=null&&(t.addClass("roster-source"),t.get(0).getRoster=()=>o);let p=r.text.split(/\r?\n/),k=n=>{o.all.push(n),a.push(n);let e=a.length>=18?d():"";return`<img class="remote" src="${wiki.site(n).flag()}" title="${n}" data-site="${n}" data-slug="welcome-visitors">${e}`},d=()=>{if(a.length){let n=[];return[n,a]=[a,[]],i!=null&&(o[i]||=[],n.forEach(e=>o[i].push(e))),` <a class="loadsites" href="/#" data-sites="${n.join(" ")}" title="add these ${n.length} sites
to neighborhood">\xBB</a><br> `}else return"<br>"},x=n=>i=n,E=(n,e)=>{if(y[e]!=null)return`<span>trouble looping ${e}</span>`;if(y[e]=!0,s[e]!=null)return[].unshift.apply(p,s[e]),"";{let[f,u]=e.split("/");wiki.site(f).get(`${u}.json`,(g,h)=>{if(g)console.log(`unable to get ${e}`);else{s[e]=[`<span>trouble loading ${e}</span>`];for(let l of h.story)if(l.type==="roster"){s[e]=l.text.split(/\r?\n/);break}t.empty(),w(t,r),b(t,r)}return`<span>loading ${e}</span>`})}},z=(n,e)=>{if(s[e])return[].unshift.apply(p,s[e]),"";{let[f,u]=e.split("/");return wiki.site(f).get(`${u}.json`,(g,h)=>{if(g)console.log(`unable to get ${e}"`);else{s[e]=[];for(let l of h.story)l.type=="reference"&&s[e].indexOf(l.site)<0&&s[e].push(l.site);t.empty(),w(t,r),b(t,r)}}),`<span>loading ${e}</span>`}},j=n=>n.replace(/^$/,d).replace(/^([a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+)(:\d+)?$/,k).replace(/^localhost(:\d+)?$/,k).replace(/^ROSTER ([A-Za-z0-9.\-:]+\/[a-z0-9-]+)$/,E).replace(/^REFERENCES ([A-Za-z0-9.\-:]+\/[a-z0-9-]+)$/,z).replace(/^([^<].*)$/,x);for(;p.length;)c.push(j(p.shift()));return c.push(d()),c.join(" ")},w=(t,r)=>{t.append(`
<p style="background-color:#eee;padding:15px;">
${R(t,r)}
</p>
`)},b=(t,r)=>{t.on("dblclick",o=>{o.shiftKey?wiki.dialog("Roster Categories",`<pre>${JSON.stringify(t.get(0).getRoster(),null,2)}</pre>`):wiki.textEditor(t,r)}),t.find(".loadsites").on("click",o=>{o.preventDefault(),o.stopPropagation(),console.log("roster sites",$(o.target).data("sites").split(" ")),A($(o.target).data("sites"))})};typeof window<"u"&&(window.plugins.roster={emit:w,bind:b});var O=typeof window>"u"?{parse:R}:void 0;})();
//# sourceMappingURL=roster.js.map