@rathnasgala/theme 0.0.19 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/.gala/managed-files.json +23 -20
- package/payload/eleventy.config.js +15 -1
- package/payload/lib/site-config.js +20 -9
- package/payload/package-lock.json +487 -2
- package/payload/package.json +7 -6
- package/payload/scripts/build-reader.js +24 -0
- package/payload/scripts/lint.js +21 -0
- package/payload/src/_data/site.js +12 -1
- package/payload/src/_includes/components/ui.njk +26 -17
- package/payload/src/_includes/layouts/base.njk +10 -11
- package/payload/src/_includes/layouts/post.njk +5 -6
- package/payload/src/accent.11ty.js +10 -0
- package/payload/src/assets/engagement-comments.js +115 -234
- package/payload/src/assets/engagement-transport.js +10 -4
- package/payload/src/assets/interactions.js +61 -1
- package/payload/src/assets/reader.js +2 -0
- package/payload/src/assets/theme.css +1 -588
- package/payload/src/client/reader.js +5 -0
- package/payload/src/styles/theme.css +811 -0
- package/payload/src/assets/vendor/hooks.js +0 -2
- package/payload/src/assets/vendor/htm.js +0 -2
- package/payload/src/assets/vendor/preact.js +0 -2
- package/payload/src/assets/vendor/signals-core.js +0 -2
- package/payload/src/assets/vendor/signals.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(()=>{var w=["system","light","dark"],O="gala-color-mode";function D(){let e=document.documentElement.dataset.mode;return w.includes(e)?e:"system"}function Y(){try{let e=localStorage.getItem(O);if(w.includes(e))return e}catch{return D()}return D()}function k(e){document.documentElement.dataset.mode=e;let t=w[(w.indexOf(e)+1)%w.length];document.querySelectorAll("[data-theme-mode-toggle]").forEach(a=>{let n=a.querySelector?.("[data-theme-mode-label]");n?n.textContent=`Theme: ${e}`:a.textContent=`Theme: ${e}`,a.setAttribute("aria-label",`Color mode: ${e}. Activate for ${t}.`)})}document.addEventListener("DOMContentLoaded",()=>{k(Y()),document.querySelectorAll("[data-theme-mode-toggle]").forEach(e=>{e.addEventListener("click",()=>{let t=w[(w.indexOf(document.documentElement.dataset.mode)+1)%w.length];try{localStorage.setItem(O,t)}catch{}k(t)})})});var P="gala-language-preference";function B(){try{return localStorage.getItem(P)}catch{return null}}function M(e,t){return[...e.options].find(a=>a.value===t)}document.addEventListener("DOMContentLoaded",()=>{let e=B();document.querySelectorAll("[data-language-preference]").forEach(t=>{e!=null&&M(t,e)!=null&&(t.value=e),t.addEventListener("change",()=>{try{localStorage.setItem(P,t.value)}catch{}if(!t.hasAttribute("data-navigate-on-selection"))return;let a=M(t,t.value);a?.dataset.url&&window.location.assign(a.dataset.url)})})});function _(e){let t=e.closest(".gala-share"),a=t?.querySelector(".gala-share__fallback");a?.classList.add("gala-share__fallback--visible"),a?.focus(),a?.select();let n=t?.querySelector(".gala-share__status");n&&(n.textContent="Select and copy the URL shown.")}document.addEventListener("click",async e=>{let t=e.target.closest("[data-gala-embed-load]");if(t){let r=t.closest("[data-gala-embed]"),i=t.dataset.galaEmbedSrc,u=t.dataset.galaEmbedLoad;if(!r||!i||!["youtube","codepen"].includes(u))return;let c=document.createElement("iframe");c.src=i,c.title=u==="youtube"?"YouTube video":"CodePen example",c.loading="eager",c.referrerPolicy="strict-origin-when-cross-origin",c.setAttribute("sandbox","allow-forms allow-popups allow-presentation allow-same-origin allow-scripts"),c.setAttribute("allow",u==="youtube"?"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture; web-share":"fullscreen"),c.setAttribute("allowfullscreen",""),r.replaceChildren(c);return}let a=e.target.closest("[data-open-dialog]");if(a){let r=document.getElementById(a.dataset.openDialog);r instanceof HTMLDialogElement&&r.showModal();return}let n=e.target.closest("[data-reaction]");if(n){let r=n.closest("[data-engagement-url]");if(!r)return;if(!y)return q({kind:"reaction",region:r,selector:`[data-reaction="${n.dataset.reaction}"]`});let i=n.getAttribute("aria-pressed")!=="true";if(!await F(r,i?"reaction.add":"reaction.remove",{articleId:r.dataset.articleId,reaction:n.dataset.reaction}))return;n.setAttribute("aria-pressed",String(i));return}let s=e.target.closest("[data-follow-article]");if(s){let r=s.closest("[data-engagement-url]");if(!r)return;if(!y)return q({kind:"follow",region:r,selector:"[data-follow-article]"});let i=s.getAttribute("aria-pressed")!=="true";if(!await F(r,i?"follow.add":"follow.remove",{targetType:"articles",targetId:r.dataset.articleId}))return;s.setAttribute("aria-pressed",String(i)),s.textContent=i?"Unfollow article":"Follow article";return}let o=e.target.closest("[data-copy-url]");if(o){let r=o.dataset.copyUrl;if(!window.isSecureContext||!navigator.clipboard?.writeText){_(o);return}try{await navigator.clipboard.writeText(r);let i=o.closest(".gala-share")?.querySelector(".gala-share__status");i&&(i.textContent="Link copied.")}catch{_(o)}return}let l=e.target.closest("[data-native-share]");if(l){if(navigator.share)try{await navigator.share({title:document.title,url:l.dataset.nativeShare})}catch(r){r.name!=="AbortError"&&_(l)}else _(l);return}let p=e.target.closest("[data-copy-code]");if(!p)return;let E=p.closest(".gala-code-block")?.querySelector("code");if(!(!E||!navigator.clipboard?.writeText||!window.isSecureContext))try{await navigator.clipboard.writeText(E.textContent),p.textContent="Copied"}catch{p.textContent="Select code to copy"}});var K=new Set([...document.querySelectorAll("pre code")].map(e=>e.closest("pre")).filter(Boolean));K.forEach(e=>{let t=document.createElement("div");t.className="gala-code-block",e.before(t),t.append(e);let a=document.createElement("button");a.type="button",a.dataset.copyCode="",a.textContent="Copy code",a.setAttribute("aria-label","Copy code block"),t.prepend(a)});function C(e,t,a){let n=document.createElement(e);return n.textContent=t,a&&(n.className=a),n}function z(e){return[["Reactions",Object.values(e.reactions??{}).reduce((a,n)=>a+(Number.isSafeInteger(n)?n:0),0)],["Comments",Number.isSafeInteger(e.comments?.totalCount)?e.comments.totalCount:0],["Views",Number.isSafeInteger(e.views?.count)?e.views.count:0]]}function J(e,t,a=!1){let n=t?.data;if(!n||typeof n!="object")throw new TypeError("Engagement data is invalid");let s=e.querySelector("[data-engagement-live]");if(s){if(a||s.replaceChildren(),!a&&n.profile){let o=document.createElement("section");o.className="gala-engagement-profile",o.setAttribute("aria-label","Author profile"),o.append(C("h2",n.profile.displayName)),n.profile.username&&o.append(C("p",`@${n.profile.username}`)),Number.isSafeInteger(n.profile.followerCount)&&o.append(C("p",`${n.profile.followerCount} followers`)),s.append(o)}if(!a){let o=document.createElement("dl");for(let[l,p]of z(n)){let E=document.createElement("div");E.append(C("dt",l),C("dd",String(p))),o.append(E)}s.append(o)}e.querySelector("[data-engagement-snapshot]")?.remove(),e.querySelector(".gala-engagement__placeholder")?.remove()}}async function U(e,t="",a=!1,n=!1){let s=e.querySelector("[data-engagement-status]");try{let o=new URL(e.dataset.engagementUrl);t&&o.searchParams.set("commentsCursor",t);let l=await fetch(o,{headers:{Accept:"application/json"},credentials:"omit",cache:n?"no-store":"default"});if(!l.ok)throw new Error(`Engagement returned HTTP ${l.status}`);let p=await l.json();J(e,p,a),s&&(s.textContent=p.errors?.length?"Some engagement data is temporarily unavailable.":"")}catch{s&&(s.textContent="Live engagement data is temporarily unavailable.")}}function X(){let e=new URL(window.location.href).searchParams,t={};for(let a of["utm_source","utm_medium","utm_campaign","utm_content","utm_term"]){let n=e.get(a);n&&[...n].length<=128&&(t[a]=n)}return t}function Z(e){let t=new URL(e.dataset.engagementUrl);t.pathname=t.pathname.replace(/\/engagement$/,"/views"),fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({language:document.documentElement.lang||void 0,referrer:document.referrer||void 0,campaign:X()}),credentials:"omit",keepalive:!0}).catch(()=>{})}document.addEventListener("gala-request-sign-in",e=>{y||b||q({kind:e.detail?.kind??"comment"})});var y=null,G=null,N=null,v=new Map,b=null;function q(e){let t=e.field;b={kind:e.kind,region:e.region,selector:e.selector,draft:t?t.value:null,caret:t?t.selectionStart:null};let a=document.querySelector("[data-gala-session-frame]"),n=document.querySelector("[data-engagement-status]");if(!a)return;let s=new URL(a.getAttribute("src"),window.location.href),o=new URL("/v1/widget/session/sign-in",s.origin);o.searchParams.set("siteId",s.searchParams.get("siteId")??""),t&&t.blur(),window.open(o,"gala-sign-in","popup,width=520,height=680")||(b=null,n&&(n.textContent="Allow pop-ups for this site to sign in, then try again."))}function $(){let e=b;if(!e||!document.hasFocus())return;let t=e.region?.querySelector(e.selector);if(t){if(b=null,e.kind==="comment"){e.draft!=null&&t.value===""&&(t.value=e.draft),t.focus(),e.caret!=null&&typeof t.setSelectionRange=="function"&&t.setSelectionRange(e.caret,e.caret);return}t.click()}}window.addEventListener("focus",()=>{y&&b&&$()});window.addEventListener("message",e=>{let t=document.querySelector("[data-gala-session-frame]");if(!t||e.data?.type!=="gala-session-established")return;let a=new URL(t.src).origin;e.origin===a&&t.contentWindow?.postMessage({type:"gala-session-recheck"},a)});document.querySelectorAll("[data-engagement-url]").forEach(e=>{U(e),Z(e)});var I=document.querySelector("[data-gala-session-frame]");function j(e){return e==="AUTHENTICATION_REQUIRED"||e==="INVALID_BEARER_TOKEN"||e==="REAUTHENTICATION_REQUIRED"?"Sign in again to continue.":e==="ENGAGEMENT_RATE_LIMITED"?"You are posting too quickly; try again shortly.":e==="CONTACT_RATE_LIMITED"?"You are sending too quickly; try again later.":e==="RESOURCE_NOT_FOUND"?"That item is no longer available.":e==="INVALID_ENGAGEMENT_WRITE"||e==="INVALID_CONTACT_SUBMISSION"||e==="INVALID_REQUEST"?"Check your entry and try again.":e==="ACCESS_DENIED"?"That action is not available for this account.":e==="IDEMPOTENCY_CONFLICT"||e==="ENGAGEMENT_STATE_CONFLICT"?"The item changed; reload and try again.":"The action could not be completed. Try again."}function W(e,t){if(!I||!y)return Promise.reject(new Error("AUTHENTICATION_REQUIRED"));let a=crypto.randomUUID();return new Promise((n,s)=>{let o=setTimeout(()=>{v.delete(a),s(new Error("REQUEST_TIMEOUT"))},1e4);v.set(a,{resolve:l=>{clearTimeout(o),n(l)},reject:l=>{clearTimeout(o),s(l)}}),I.contentWindow.postMessage({type:"gala-engagement-write",requestId:a,operation:e,payload:t},new URL(I.src).origin)})}document.addEventListener("submit",async e=>{let t=e.target.closest("[data-contact-form] form");if(!t)return;e.preventDefault();let a=t.closest("[data-contact-form]"),n=a.querySelector("[data-contact-status]");if(!y){n.textContent="Sign in with the account button before sending.";return}let s=new FormData(t);try{n.textContent="Sending\u2026",await W("contact.submit",{siteId:a.dataset.siteId,subject:s.get("subject"),message:s.get("message"),website:s.get("website")||null,phone:s.get("phone")||null}),t.reset(),n.textContent="Message sent."}catch(o){n.textContent=j(o.message)}});async function F(e,t,a){let n=e.querySelector("[data-engagement-status]");try{return n&&(n.textContent="Saving\u2026"),await W(t,a),n&&(n.textContent="Saved."),await U(e,"",!1,!0),!0}catch(s){return n&&(n.textContent=j(s.message)),!1}}if(I){let e=new URL(I.src).origin;window.addEventListener("message",t=>{if(t.origin!==e||t.source!==I.contentWindow)return;if(t.data?.type==="gala-engagement-result"){let o=v.get(t.data.requestId);if(!o)return;v.delete(t.data.requestId),t.data.ok===!0?o.resolve(t.data.result):o.reject(new Error(t.data.error?.code||"ENGAGEMENT_WRITE_FAILED"));return}if(t.data?.type==="gala-reader-state-result"){if(t.data.requestId!==N||t.data.ok!==!0)return;N=null;let o=new Set(Array.isArray(t.data.state?.reactions)?t.data.state.reactions:[]);document.querySelectorAll("[data-reaction]").forEach(l=>{l.setAttribute("aria-pressed",String(o.has(l.dataset.reaction)))}),document.querySelectorAll("[data-follow-article]").forEach(l=>{let p=t.data.state?.following===!0;l.setAttribute("aria-pressed",String(p)),l.setAttribute("aria-label",p?"Unfollow article":"Follow article"),l.title=p?"Unfollow article":"Follow article"});return}if(t.data?.type==="gala-session-height"){let o=Number(t.data.height);Number.isFinite(o)&&o>0&&o<2e3&&(I.style.height=`${Math.ceil(o)}px`);return}if(t.data?.type!=="gala-session")return;y=t.data.user&&typeof t.data.user.id=="string"?t.data.user:null;let a=document.querySelector("[data-user-control]"),n=y?.displayName;if(a){a.setAttribute("aria-label",n?`Account: ${n}`:"Sign in or view account"),a.title=n?`Account: ${n}`:"Account";let o=a.querySelector("[data-user-label]");o&&(o.textContent=n||"Sign in")}let s=G!==(y?.id??null);if(G=y?.id??null,y){let o=document.querySelector("[data-article-id]");o&&(N=crypto.randomUUID(),I.contentWindow.postMessage({type:"gala-reader-state-request",requestId:N,articleId:o.dataset.articleId},e))}document.querySelectorAll("[data-engagement-url]").forEach(o=>{s&&U(o)}),y&&b&&$()})}document.querySelectorAll("[data-gala-search]").forEach(e=>{let t=e.querySelector("form"),a=t?.elements.namedItem("q"),n=e.querySelector("[data-search-status]"),s=e.querySelector("[data-search-results]"),o=e.dataset.indexUrl,l,p=u=>String(u??"").normalize("NFKC").toLocaleLowerCase();function E(u,c){s.replaceChildren();for(let m of u){let d=document.createElement("li"),g=document.createElement("article"),h=document.createElement("h2"),A=document.createElement("a");if(A.href=m.url,A.lang=m.language,A.textContent=m.title,h.append(A),g.append(h),m.description){let x=document.createElement("p");x.textContent=m.description,g.append(x)}d.append(g),s.append(d)}n.textContent=`${u.length} result${u.length===1?"":"s"} for \u201C${c}\u201D.`}async function r(u){let c=u.trim();if(c===""){s.replaceChildren(),n.textContent="Enter a search term.";return}n.textContent="Searching\u2026";try{l??=fetch(o,{headers:{Accept:"application/json"}}).then(async g=>{if(!g.ok)throw new Error(`Search index returned HTTP ${g.status}`);let h=await g.json();if(h?.schemaVersion!==1||!Array.isArray(h.entries))throw new TypeError("Search index schema is unsupported");return h.entries});let m=p(c),d=(await l).filter(g=>p([g.title,g.description,g.language,...Array.isArray(g.tags)?g.tags:[],g.body].join(`
|
|
2
|
+
`)).includes(m));E(d,c)}catch{s.replaceChildren(),n.textContent="Search is temporarily unavailable."}}t?.addEventListener("submit",u=>{u.preventDefault();let c=a.value,m=new URL(window.location.href);c.trim()===""?m.searchParams.delete("q"):m.searchParams.set("q",c),window.history.replaceState(null,"",m),r(c)});let i=new URLSearchParams(window.location.search).get("q")??"";a&&(a.value=i),r(i)});var T={value:null},S=document.querySelector("[data-gala-session-frame]"),H=S?new URL(S.src).origin:null,L=new Map;function V(e){return e==="AUTHENTICATION_REQUIRED"||e==="INVALID_BEARER_TOKEN"||e==="REAUTHENTICATION_REQUIRED"?"Sign in again to continue.":e==="ENGAGEMENT_RATE_LIMITED"?"You are posting too quickly; try again shortly.":e==="CONTACT_RATE_LIMITED"?"You are sending too quickly; try again later.":e==="RESOURCE_NOT_FOUND"?"That item is no longer available.":e==="INVALID_ENGAGEMENT_WRITE"||e==="INVALID_CONTACT_SUBMISSION"||e==="INVALID_REQUEST"?"Check your entry and try again.":e==="ACCESS_DENIED"?"That action is not available for this account.":e==="IDEMPOTENCY_CONFLICT"||e==="ENGAGEMENT_STATE_CONFLICT"?"The item changed; reload and try again.":"The action could not be completed. Try again."}function Q(e,t){if(!S||!T.value)return Promise.reject(new Error("AUTHENTICATION_REQUIRED"));let a=crypto.randomUUID();return new Promise((n,s)=>{let o=setTimeout(()=>{L.delete(a),s(new Error("REQUEST_TIMEOUT"))},1e4);L.set(a,{resolve:l=>{clearTimeout(o),n(l)},reject:l=>{clearTimeout(o),s(l)}}),S.contentWindow.postMessage({type:"gala-engagement-write",requestId:a,operation:e,payload:t},H)})}function R(e){document.dispatchEvent(new CustomEvent("gala-request-sign-in",{detail:e}))}S&&window.addEventListener("message",e=>{if(e.origin!==H||e.source!==S.contentWindow)return;if(e.data?.type==="gala-engagement-result"){let a=L.get(e.data.requestId);if(!a)return;L.delete(e.data.requestId),e.data.ok===!0?a.resolve(e.data.result):a.reject(new Error(e.data.error?.code||"ENGAGEMENT_WRITE_FAILED"));return}if(e.data?.type!=="gala-session")return;let t=e.data.user;T.value=t&&typeof t.id=="string"?t:null,window.dispatchEvent(new CustomEvent("gala-session-change"))});var ee=5,f=(e,t,a)=>{let n=document.createElement(e);return t&&(n.className=t),a!==void 0&&(n.textContent=a),n};function te(e){let t=new Map;for(let n of e){let s=n.parentCommentId??"";t.has(s)||t.set(s,[]),t.get(s).push(n)}let a=(n,s)=>(t.get(n)??[]).map(o=>({...o,depth:s,replies:a(o.commentId,s+1)}));return a("",0)}function ae(e,t){let a={items:[],cursor:null,total:0,busy:!1,status:"",loading:!0},n=/\/v1\/articles\/([^/]+)\/engagement/.exec(t)?.[1]??"";async function s(r="",{append:i=!1,fresh:u=!1}={}){let c=new URL(t);r&&c.searchParams.set("commentsCursor",r);let m=await fetch(c,{headers:{Accept:"application/json"},credentials:"omit",cache:u?"no-store":"default"});if(!m.ok)throw new Error(`Comments returned HTTP ${m.status}`);let d=(await m.json())?.data?.comments;if(!d||!Array.isArray(d.items))throw new TypeError("Comment page is invalid");a.items=i?[...a.items,...d.items]:d.items,a.cursor=d.nextCursor??null,Number.isSafeInteger(d.totalCount)&&(a.total=d.totalCount)}async function o(r,i){if(!T.value)return R({kind:"comment"}),!1;a.busy=!0,a.status="",E();try{return await Q(r,i),await s("",{fresh:!0}),!0}catch(u){return a.status=V(u.message),!1}finally{a.busy=!1,E()}}function l(r,i,u){let c=f("form","gala-comment__form"),m=f("textarea");m.rows=3,m.value=i,m.placeholder=r,m.setAttribute("aria-label",r);let d=f("button","","Post");return d.type="submit",d.disabled=a.busy,c.append(m,d),c.addEventListener("submit",async g=>{g.preventDefault();let h=m.value.trim();h&&await u(h)&&(m.value="")}),c}function p(r){let i=f("li","gala-comment");i.dataset.commentId=r.commentId,i.dataset.depth=r.depth;let u=f("p","gala-comment__meta");if(u.append(f("strong","",r.author?.displayName??"[deleted]")),r.createdAt){let c=f("time","",new Date(r.createdAt).toLocaleDateString());c.dateTime=r.createdAt,u.append(c)}if(i.append(u,f("p","gala-comment__body",r.deleted?"[deleted]":r.body)),!r.deleted){let c=f("div","gala-comment-actions");if(r.depth<ee){let d=f("button","","Reply");d.type="button",d.dataset.replyComment=r.commentId,d.addEventListener("click",()=>{let g=i.querySelector(":scope > .gala-comment__form");if(g){g.remove();return}c.after(l(`Reply to ${r.author?.displayName??"this comment"}`,"",h=>o("comment.create",{articleId:n,parentCommentId:r.commentId,body:h})))}),c.append(d)}if(T.value&&r.author?.userId===T.value.id){let d=f("button","","Edit");d.type="button",d.dataset.editComment=r.commentId,d.addEventListener("click",()=>c.after(l("Edit your comment",r.body??"",h=>o("comment.edit",{articleId:n,commentId:r.commentId,body:h}))));let g=f("button","","Delete");g.type="button",g.dataset.deleteComment=r.commentId,g.addEventListener("click",()=>o("comment.delete",{articleId:n,commentId:r.commentId})),c.append(d,g)}else{let d=f("button","","Report");d.type="button",d.dataset.reportComment=r.commentId,d.addEventListener("click",()=>o("comment.report",{articleId:n,commentId:r.commentId,reason:"OTHER"})),c.append(d)}i.append(c)}if(r.replies.length){let c=f("ol","gala-comment-replies");c.append(...r.replies.map(p)),i.append(c)}return i}function E(){let r=f("section","gala-comments-island");if(r.setAttribute("aria-label","Comments"),r.append(f("h2","gala-comments__heading",a.total===1?"1 comment":`${a.total} comments`)),T.value)r.append(l("Add a comment","",i=>o("comment.create",{articleId:n,body:i})));else{let i=f("p","gala-comments__prompt"),u=f("button","","Sign in to join the conversation");u.type="button",u.addEventListener("click",()=>R({kind:"comment"})),i.append(u),r.append(i)}if(a.status){let i=f("p","gala-comments__status",a.status);i.role="status",r.append(i)}if(a.loading)r.append(f("p","gala-comments__status","Loading comments\u2026"));else if(!a.items.length)r.append(f("p","gala-comments__empty","No comments yet."));else{let i=f("ol","gala-comments");i.append(...te(a.items).map(p)),r.append(i)}if(a.cursor){let i=f("button","gala-comments__more","Show more comments");i.type="button",i.disabled=a.busy,i.addEventListener("click",async()=>{a.busy=!0,E();try{await s(a.cursor,{append:!0})}catch{a.status="Could not load more comments."}a.busy=!1,E()}),r.append(i)}e.replaceChildren(r)}window.addEventListener("gala-session-change",E),E(),s().catch(()=>{a.status="Comments are temporarily unavailable."}).finally(()=>{a.loading=!1,E()})}document.querySelectorAll("[data-gala-comments]").forEach(e=>{let t=e.closest("[data-engagement-url]")?.dataset.engagementUrl;t&&ae(e,t)});})();
|