datalog-theme 0.9.0 → 0.9.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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/CITATION.cff +2 -2
  4. data/_data/i18n/en.yml +24 -0
  5. data/_data/i18n/es.yml +24 -0
  6. data/_data/i18n/pt.yml +24 -0
  7. data/_includes/components/academic-dashboard.html +4 -4
  8. data/_includes/components/author-list.html +1 -1
  9. data/_includes/components/breadcrumbs.html +6 -4
  10. data/_includes/components/citation-tools.html +5 -53
  11. data/_includes/components/comments-thread.html +1 -1
  12. data/_includes/components/contact-form.html +1 -1
  13. data/_includes/components/correction-report.html +1 -1
  14. data/_includes/components/hero.html +1 -1
  15. data/_includes/components/moderation-inbox.html +1 -1
  16. data/_includes/components/post-hero.html +2 -2
  17. data/_includes/components/reactions.html +1 -1
  18. data/_includes/components/reading-list.html +3 -0
  19. data/_includes/components/reading-mode-toggle.html +2 -0
  20. data/_includes/components/reading-state-panel.html +0 -9
  21. data/_includes/components/reading-state-resume.html +17 -0
  22. data/_includes/components/subscribe-form.html +1 -1
  23. data/_includes/components/subscription-manage.html +2 -1
  24. data/_includes/components/visualization-card.html +1 -1
  25. data/_includes/components/webmentions.html +1 -1
  26. data/_includes/footer/nav-column.html +1 -1
  27. data/_includes/footer.html +2 -2
  28. data/_includes/head.html +13 -12
  29. data/_includes/header/navigation.html +2 -2
  30. data/_includes/header.html +1 -1
  31. data/_includes/layouts/default/article.html +2 -2
  32. data/_includes/meta/math-config.html +3 -0
  33. data/_includes/meta/person-json.html +7 -7
  34. data/_includes/meta/publisher.html +1 -1
  35. data/_includes/meta/schema.html +32 -30
  36. data/_includes/meta/scholarly.html +4 -3
  37. data/_includes/post/related-posts.html +1 -1
  38. data/_layouts/dataset.html +1 -1
  39. data/_layouts/home.html +2 -2
  40. data/_layouts/notebook.html +1 -1
  41. data/_layouts/package.html +5 -5
  42. data/_layouts/portfolio.html +1 -1
  43. data/_layouts/post.html +12 -7
  44. data/_layouts/project.html +3 -3
  45. data/_layouts/research.html +7 -67
  46. data/_plugins/authors.rb +22 -4
  47. data/_plugins/citation_exports.rb +93 -0
  48. data/_plugins/image_optimizer.rb +16 -14
  49. data/_plugins/licenses.rb +15 -3
  50. data/_plugins/math_preprocessor.rb +23 -1
  51. data/_plugins/references.rb +30 -8
  52. data/_plugins/reproducibility.rb +20 -3
  53. data/_plugins/responsive_content.rb +40 -0
  54. data/_plugins/revisions.rb +1 -0
  55. data/_plugins/scholarly.rb +5 -0
  56. data/_plugins/statements.rb +2 -2
  57. data/_sass/_base.scss +5 -0
  58. data/_sass/_layout.scss +18 -1
  59. data/_sass/_mathematical.scss +11 -1
  60. data/_sass/_print.scss +16 -8
  61. data/_sass/_syntax-highlighting.scss +1 -1
  62. data/assets/js/dist/chunks/chunk-VZ5WKQVA.js +1 -0
  63. data/assets/js/dist/chunks/chunk-WIRUK3OZ.js +1 -0
  64. data/assets/js/dist/comments.js +2 -2
  65. data/assets/js/dist/contact.js +1 -1
  66. data/assets/js/dist/corrections.js +1 -1
  67. data/assets/js/dist/moderation.js +1 -1
  68. data/assets/js/dist/reactions.js +1 -1
  69. data/assets/js/dist/reading-state.js +1 -1
  70. data/assets/js/dist/sources.json +16 -16
  71. data/assets/js/dist/subscriptions.js +1 -1
  72. data/assets/js/dist/visualizations.js +2 -2
  73. data/assets/js/dist/webmentions.js +1 -1
  74. data/lib/datalog/theme/version.rb +1 -1
  75. metadata +7 -4
  76. data/assets/js/dist/chunks/chunk-2DYDWUFX.js +0 -1
  77. data/assets/js/dist/chunks/chunk-V7734B2G.js +0 -1
@@ -1,4 +1,4 @@
1
- (function(){let Z=typeof process!="undefined"&&process.env&&process.env.VITEST==="true",_="[data-viz-type]",I='script[type="application/json"]',F='script[type="application/vnd.jupyter.widget-state+json"]',K='script[type="application/vnd.jupyter.widget-view+json"]',q=new Map,L=new Set,k="viz-table-fallback-template",z=(t,e={})=>{if(!t)return Promise.reject(new Error("Missing script source"));if(q.has(t))return q.get(t);let r=new Promise((n,s)=>{let o=document.createElement("script");o.src=t,o.async=e.async!==!1,e.integrity&&(o.integrity=e.integrity,o.crossOrigin=e.crossOrigin||"anonymous"),o.onload=()=>n(o),o.onerror=a=>s(a),document.head.appendChild(o)});return q.set(t,r),r},Q=t=>!t||L.has(t)?Promise.resolve():new Promise((e,r)=>{let n=document.createElement("link");n.rel="stylesheet",n.href=t,n.onload=()=>{L.add(t),e(n)},n.onerror=s=>r(s),document.head.appendChild(n)}),b=t=>Object.prototype.toString.call(t)==="[object Object]",y=t=>t===null||typeof t=="undefined"?"":t instanceof Date?t.toISOString():Array.isArray(t)?t.map(e=>y(e)).join(", "):b(t)?Object.entries(t).map(([e,r])=>`${e}: ${y(r)}`).join("; "):typeof t=="boolean"?t?"Yes":"No":typeof t=="number"?Number.isFinite(t)?`${t}`:"":String(t),T=(t,e=[])=>b(t)?Object.entries(t).reduce((r,[n,s])=>{let o=e.concat([n]);return b(s)?Object.assign(r,T(s,o)):Array.isArray(s)?r[o.join(" \u203A ")]=s.map(a=>y(a)).join(", "):r[o.join(" \u203A ")]=s,r},{}):{[e.join(" \u203A ")||"Value"]:t},m=t=>{if(!t)return[];if(Array.isArray(t)){if(!t.length)return[];if(t.every(e=>b(e)))return t.map(e=>T(e));if(Array.isArray(t[0])){let e=t[0],r=e.every(o=>typeof o=="string"||typeof o=="number"),n=e.map((o,a)=>r?y(o):`Column ${a+1}`),s=r?1:0;return t.slice(s).map((o,a)=>{let c={};return Array.isArray(o)?(n.forEach((i,l)=>{c[i]=o[l]}),n.length||o.forEach((i,l)=>{c[`Column ${l+1}`]=i})):c[`Row ${a+1}`]=o,c})}return t.map((e,r)=>({Index:r+1,Value:e}))}return b(t)?Array.isArray(t.data)?m(t.data):Array.isArray(t.values)?m(t.values):Array.isArray(t.rows)?m(t.rows):[T(t)]:[{Value:t}]},tt=t=>{let e=["Series","Trace","Group","Category","Index","X","Y","Z","Value","Text"],r=[];return e.forEach(n=>{t.includes(n)&&r.push(n)}),t.filter(n=>!e.includes(n)).sort().forEach(n=>r.push(n)),r},et=t=>{let e=t.getAttribute("data-viz-title");if(e)return e;let r=t.querySelector(".viz-title");return r&&r.textContent?r.textContent.trim():t.getAttribute("data-viz-slug")||"Visualization data"},rt=()=>{let t=document.getElementById(k);if(t)return t;t=document.createElement("template"),t.id=k;let e=document.createElement("div");return e.insertAdjacentHTML("afterbegin",'<div class="viz-table-container" data-viz-table-container><button type="button" class="viz-table-toggle" data-viz-table-toggle aria-expanded="false">Show data table</button><div class="viz-table-wrapper" data-viz-table-wrapper hidden><table class="viz-table" data-viz-table><caption data-viz-table-caption></caption><thead data-viz-table-head></thead><tbody data-viz-table-body></tbody></table></div></div>'),t.content.appendChild(e.firstElementChild),document.body.appendChild(t),t},E=(t,e={})=>{let{caption:r,rows:n}=e,s=m(n);if(!s.length)return;let o=Array.from(s.reduce((p,f)=>(Object.keys(f).forEach(O=>p.add(O)),p),new Set));if(!o.length)return;let a=tt(o),i=rt().content.firstElementChild.cloneNode(!0),l=i.querySelector("[data-viz-table-toggle]"),u=i.querySelector("[data-viz-table-wrapper]"),H=i.querySelector("[data-viz-table]"),w=i.querySelector("[data-viz-table-caption]"),h=i.querySelector("[data-viz-table-head]"),S=i.querySelector("[data-viz-table-body]"),A=`${t.getAttribute("data-viz-slug")||t.id||"viz"}-table`;H.id=A,l.setAttribute("aria-controls",A),w.textContent=r||et(t);let x=document.createElement("tr");a.forEach(p=>{let f=document.createElement("th");f.scope="col",f.textContent=p,x.appendChild(f)}),h.appendChild(x),s.forEach(p=>{let f=document.createElement("tr");a.forEach((O,yt)=>{let X=y(p[O]);if(yt===0){let v=document.createElement("th");v.scope="row",v.textContent=X,f.appendChild(v)}else{let v=document.createElement("td");v.textContent=X,f.appendChild(v)}}),S.appendChild(f)}),l.addEventListener("click",()=>{let p=l.getAttribute("aria-expanded")==="true";l.setAttribute("aria-expanded",String(!p)),l.textContent=p?"Show data table":"Hide data table",p?u.setAttribute("hidden",""):u.removeAttribute("hidden")});let Y=t.querySelector("[data-viz-table-container]");Y&&Y.remove(),t.appendChild(i),(t.querySelector("[data-viz-canvas]")||t).setAttribute("aria-describedby",A)},N=(t=[])=>{let e=[];return t.forEach((r,n)=>{let s=r.name||`Series ${n+1}`,o=Array.isArray(r.x)?r.x:[],a=Array.isArray(r.y)?r.y:[],c=Array.isArray(r.text)?r.text:[],i=r.z;if(Array.isArray(i)&&i.length&&Array.isArray(i[0])){let u=o.length?o:i[0].map((w,h)=>h+1);(a.length?a:i.map((w,h)=>h+1)).forEach((w,h)=>{let S=i[h]||[];u.forEach((A,x)=>{e.push({Series:s,Y:w,X:A,Value:Array.isArray(S)?S[x]:S,Text:c[h]?y(c[h]):""})})});return}let l=Math.max(o.length,a.length,c.length);for(let u=0;u<l;u+=1)e.push({Series:s,X:o[u],Y:a[u],Text:c[u]})}),e.length?e:null},M=t=>t?Array.isArray(t)?t:b(t)&&Array.isArray(t.data)?t.data:t:null,V=t=>{let e=t.querySelector("script[data-observable-data]");if(!e)return null;try{return JSON.parse(e.textContent||"null")}catch(r){return null}},g=null,j=new Set,C=(t,e)=>{if(typeof window[e]!="undefined")return Promise.resolve(window[e]);let r=()=>z(t).then(()=>window[e]);if(g)return g.then(o=>new Promise((a,c)=>{o([t],i=>a(i||window[e]),c)}),r);let n=r();j.add(n);let s=()=>j.delete(n);return n.then(s,s),n},D=()=>C("https://cdn.jsdelivr.net/npm/plotly.js-dist-min@2.27.0/plotly.min.js","Plotly"),nt=()=>C("https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js","d3"),ot=()=>C("https://cdn.jsdelivr.net/npm/@bokeh/bokehjs@3.3.3/build/js/bokeh.min.js","Bokeh").then(t=>t&&t.Plotting?t:z("https://cdn.jsdelivr.net/npm/@bokeh/bokehjs@3.3.3/build/js/bokeh-api.min.js").then(()=>window.Bokeh)),R=()=>(g||(g=Promise.allSettled([...j]).then(()=>typeof window.requirejs!="undefined"?window.requirejs:z("https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js",{async:!1}).then(()=>window.requirejs))),g),st=()=>R().then(t=>{let e=window.__datalogWidgetManagerPromise;if(e)return e;let r=new Promise((n,s)=>{t.config({paths:{"@jupyter-widgets/html-manager":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@1.0.8/dist/embed-amd","@jupyter-widgets/base":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/base@6.0.7/dist/index","@jupyter-widgets/controls":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/controls@5.0.7/dist/index","@lumino/coreutils":"https://cdn.jsdelivr.net/npm/@lumino/coreutils@2.1.1/dist/index","@lumino/widgets":"https://cdn.jsdelivr.net/npm/@lumino/widgets@2.3.1/dist/index"}}),t(["@jupyter-widgets/html-manager"],o=>n(o),o=>s(o))});return window.__datalogWidgetManagerPromise=r,r}),at=(t,e)=>{let r=document.createElement("button");return r.type="button",r.className="viz-toolbar__button",r.textContent=t,r.addEventListener("click",n=>{n.preventDefault(),e(n)}),r},d=(t,e,r="info")=>{let n=t.querySelector("[data-viz-status]");n&&(n.textContent=e,n.dataset.tone=r)},$=t=>{let e=t.getAttribute("data-viz-version"),r=t.getAttribute("data-viz-updated"),n=t.querySelector("[data-viz-meta]");if(!n)return;let s=[];e&&s.push(`v${e}`),r&&s.push(`Updated ${r}`),n.textContent=s.join(" \xB7 ")},it=t=>{let e=t.querySelector("[data-viz-canvas]")||t,r=t.querySelector(I);if(!r)return d(t,"Missing Plotly specification","error"),Promise.resolve();let n={};try{n=JSON.parse(r.textContent||"{}")}catch(a){return d(t,"Invalid Plotly specification","error"),Promise.resolve()}let s=Array.isArray(n.data)?n.data:[],o=Object.assign({autosize:!0},n.layout||{});return D().then(a=>a.newPlot(e,s,o,{responsive:!0,displaylogo:!1})).then(()=>{d(t,"Interactive");let a=t.querySelector("[data-viz-export]");a&&(a.replaceChildren(),a.appendChild(at("Download PNG",()=>{D().then(i=>{i.downloadImage(e,{format:"png",filename:t.getAttribute("data-viz-slug")||"visualization"})})})));let c=N(s);c&&E(t,{caption:o&&o.title?y(o.title.text||o.title):void 0,rows:c})}).catch(()=>{d(t,"Plotly failed to load","error")})},B=(t,e,r,n)=>{let s={args:n,done:!1,error:null,result:void 0},o=document.createElement("script"),a=t.nonce||t.getAttribute("nonce");a&&(o.nonce=a),o.datalogRun=s,o.textContent=`(function (run) {
1
+ (function(){let Z=typeof process!="undefined"&&process.env&&process.env.VITEST==="true",I="[data-viz-type]",_='script[type="application/json"]',F='script[type="application/vnd.jupyter.widget-state+json"]',K='script[type="application/vnd.jupyter.widget-view+json"]',q=new Map,k=new Set,L="viz-table-fallback-template",z=(t,e={})=>{if(!t)return Promise.reject(new Error("Missing script source"));if(q.has(t))return q.get(t);let r=new Promise((n,s)=>{let o=document.createElement("script");o.src=t,o.async=e.async!==!1,e.integrity&&(o.integrity=e.integrity,o.crossOrigin=e.crossOrigin||"anonymous"),o.onload=()=>n(o),o.onerror=a=>s(a),document.head.appendChild(o)});return q.set(t,r),r},Q=t=>!t||k.has(t)?Promise.resolve():new Promise((e,r)=>{let n=document.createElement("link");n.rel="stylesheet",n.href=t,n.onload=()=>{k.add(t),e(n)},n.onerror=s=>r(s),document.head.appendChild(n)}),b=t=>Object.prototype.toString.call(t)==="[object Object]",y=t=>t===null||typeof t=="undefined"?"":t instanceof Date?t.toISOString():Array.isArray(t)?t.map(e=>y(e)).join(", "):b(t)?Object.entries(t).map(([e,r])=>`${e}: ${y(r)}`).join("; "):typeof t=="boolean"?t?"Yes":"No":typeof t=="number"?Number.isFinite(t)?`${t}`:"":String(t),T=(t,e=[])=>b(t)?Object.entries(t).reduce((r,[n,s])=>{let o=e.concat([n]);return b(s)?Object.assign(r,T(s,o)):Array.isArray(s)?r[o.join(" \u203A ")]=s.map(a=>y(a)).join(", "):r[o.join(" \u203A ")]=s,r},{}):{[e.join(" \u203A ")||"Value"]:t},m=t=>{if(!t)return[];if(Array.isArray(t)){if(!t.length)return[];if(t.every(e=>b(e)))return t.map(e=>T(e));if(Array.isArray(t[0])){let e=t[0],r=e.every(o=>typeof o=="string"||typeof o=="number"),n=e.map((o,a)=>r?y(o):`Column ${a+1}`),s=r?1:0;return t.slice(s).map((o,a)=>{let c={};return Array.isArray(o)?(n.forEach((i,l)=>{c[i]=o[l]}),n.length||o.forEach((i,l)=>{c[`Column ${l+1}`]=i})):c[`Row ${a+1}`]=o,c})}return t.map((e,r)=>({Index:r+1,Value:e}))}return b(t)?Array.isArray(t.data)?m(t.data):Array.isArray(t.values)?m(t.values):Array.isArray(t.rows)?m(t.rows):[T(t)]:[{Value:t}]},tt=t=>{let e=["Series","Trace","Group","Category","Index","X","Y","Z","Value","Text"],r=[];return e.forEach(n=>{t.includes(n)&&r.push(n)}),t.filter(n=>!e.includes(n)).sort().forEach(n=>r.push(n)),r},et=t=>{let e=t.getAttribute("data-viz-title");if(e)return e;let r=t.querySelector(".viz-title");return r&&r.textContent?r.textContent.trim():t.getAttribute("data-viz-slug")||"Visualization data"},rt=()=>{let t=document.getElementById(L);if(t)return t;t=document.createElement("template"),t.id=L;let e=document.createElement("div");return e.insertAdjacentHTML("afterbegin",'<div class="viz-table-container" data-viz-table-container><button type="button" class="viz-table-toggle" data-viz-table-toggle aria-expanded="false">Show data table</button><div class="viz-table-wrapper" data-viz-table-wrapper hidden><table class="viz-table" data-viz-table><caption data-viz-table-caption></caption><thead data-viz-table-head></thead><tbody data-viz-table-body></tbody></table></div></div>'),t.content.appendChild(e.firstElementChild),document.body.appendChild(t),t},E=(t,e={})=>{let{caption:r,rows:n}=e,s=m(n);if(!s.length)return;let o=Array.from(s.reduce((p,f)=>(Object.keys(f).forEach(O=>p.add(O)),p),new Set));if(!o.length)return;let a=tt(o),i=rt().content.firstElementChild.cloneNode(!0),l=i.querySelector("[data-viz-table-toggle]"),u=i.querySelector("[data-viz-table-wrapper]"),H=i.querySelector("[data-viz-table]"),w=i.querySelector("[data-viz-table-caption]"),h=i.querySelector("[data-viz-table-head]"),S=i.querySelector("[data-viz-table-body]"),A=`${t.getAttribute("data-viz-slug")||t.id||"viz"}-table`;H.id=A,l.setAttribute("aria-controls",A),w.textContent=r||et(t);let x=document.createElement("tr");a.forEach(p=>{let f=document.createElement("th");f.scope="col",f.textContent=p,x.appendChild(f)}),h.appendChild(x),s.forEach(p=>{let f=document.createElement("tr");a.forEach((O,yt)=>{let X=y(p[O]);if(yt===0){let v=document.createElement("th");v.scope="row",v.textContent=X,f.appendChild(v)}else{let v=document.createElement("td");v.textContent=X,f.appendChild(v)}}),S.appendChild(f)}),l.addEventListener("click",()=>{let p=l.getAttribute("aria-expanded")==="true";l.setAttribute("aria-expanded",String(!p)),l.textContent=p?"Show data table":"Hide data table",p?u.setAttribute("hidden",""):u.removeAttribute("hidden")});let Y=t.querySelector("[data-viz-table-container]");Y&&Y.remove(),t.appendChild(i),(t.querySelector("[data-viz-canvas]")||t).setAttribute("aria-describedby",A)},M=(t=[])=>{let e=[];return t.forEach((r,n)=>{let s=r.name||`Series ${n+1}`,o=Array.isArray(r.x)?r.x:[],a=Array.isArray(r.y)?r.y:[],c=Array.isArray(r.text)?r.text:[],i=r.z;if(Array.isArray(i)&&i.length&&Array.isArray(i[0])){let u=o.length?o:i[0].map((w,h)=>h+1);(a.length?a:i.map((w,h)=>h+1)).forEach((w,h)=>{let S=i[h]||[];u.forEach((A,x)=>{e.push({Series:s,Y:w,X:A,Value:Array.isArray(S)?S[x]:S,Text:c[h]?y(c[h]):""})})});return}let l=Math.max(o.length,a.length,c.length);for(let u=0;u<l;u+=1)e.push({Series:s,X:o[u],Y:a[u],Text:c[u]})}),e.length?e:null},N=t=>t?Array.isArray(t)?t:b(t)&&Array.isArray(t.data)?t.data:t:null,V=t=>{let e=t.querySelector("script[data-observable-data]");if(!e)return null;try{return JSON.parse(e.textContent||"null")}catch(r){return null}},g=null,j=new Set,C=(t,e)=>{if(typeof window[e]!="undefined")return Promise.resolve(window[e]);let r=()=>z(t).then(()=>window[e]);if(g)return g.then(o=>new Promise((a,c)=>{o([t],i=>a(i||window[e]),c)}),r);let n=r();j.add(n);let s=()=>j.delete(n);return n.then(s,s),n},D=()=>C("https://cdn.jsdelivr.net/npm/plotly.js-dist-min@2.27.0/plotly.min.js","Plotly"),nt=()=>C("https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js","d3"),ot=()=>C("https://cdn.jsdelivr.net/npm/@bokeh/bokehjs@3.3.3/build/js/bokeh.min.js","Bokeh").then(t=>t&&t.Plotting?t:z("https://cdn.jsdelivr.net/npm/@bokeh/bokehjs@3.3.3/build/js/bokeh-api.min.js").then(()=>window.Bokeh)),R=()=>(g||(g=Promise.allSettled([...j]).then(()=>typeof window.requirejs!="undefined"?window.requirejs:z("https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js",{async:!1}).then(()=>window.requirejs))),g),st=()=>R().then(t=>{let e=window.__datalogWidgetManagerPromise;if(e)return e;let r=new Promise((n,s)=>{t.config({paths:{"@jupyter-widgets/html-manager":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@1.0.8/dist/embed-amd","@jupyter-widgets/base":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/base@6.0.7/dist/index","@jupyter-widgets/controls":"https://cdn.jsdelivr.net/npm/@jupyter-widgets/controls@5.0.7/dist/index","@lumino/coreutils":"https://cdn.jsdelivr.net/npm/@lumino/coreutils@2.1.1/dist/index","@lumino/widgets":"https://cdn.jsdelivr.net/npm/@lumino/widgets@2.3.1/dist/index"}}),t(["@jupyter-widgets/html-manager"],o=>n(o),o=>s(o))});return window.__datalogWidgetManagerPromise=r,r}),at=(t,e)=>{let r=document.createElement("button");return r.type="button",r.className="viz-toolbar__button",r.textContent=t,r.addEventListener("click",n=>{n.preventDefault(),e(n)}),r},d=(t,e,r="info")=>{let n=t.querySelector("[data-viz-status]");n&&(n.textContent=e,n.dataset.tone=r),(e==="Interactive"||e==="Embedded")&&queueMicrotask(()=>document.dispatchEvent(new CustomEvent("datalog:viz-rendered",{detail:{element:t}})))},$=t=>{let e=t.getAttribute("data-viz-version"),r=t.getAttribute("data-viz-updated"),n=t.querySelector("[data-viz-meta]");if(!n)return;let s=[];e&&s.push(`v${e}`),r&&s.push(`Updated ${r}`),n.textContent=s.join(" \xB7 ")},it=t=>{let e=t.querySelector("[data-viz-canvas]")||t,r=t.querySelector(_);if(!r)return d(t,"Missing Plotly specification","error"),Promise.resolve();let n={};try{n=JSON.parse(r.textContent||"{}")}catch(a){return d(t,"Invalid Plotly specification","error"),Promise.resolve()}let s=Array.isArray(n.data)?n.data:[],o=Object.assign({autosize:!0},n.layout||{});return D().then(a=>a.newPlot(e,s,o,{responsive:!0,displaylogo:!1})).then(()=>{d(t,"Interactive");let a=t.querySelector("[data-viz-export]");a&&(a.replaceChildren(),a.appendChild(at("Download PNG",()=>{D().then(i=>{i.downloadImage(e,{format:"png",filename:t.getAttribute("data-viz-slug")||"visualization"})})})));let c=M(s);c&&E(t,{caption:o&&o.title?y(o.title.text||o.title):void 0,rows:c})}).catch(()=>{d(t,"Plotly failed to load","error")})},B=(t,e,r,n)=>{let s={args:n,done:!1,error:null,result:void 0},o=document.createElement("script"),a=t.nonce||t.getAttribute("nonce");a&&(o.nonce=a),o.datalogRun=s,o.textContent=`(function (run) {
2
2
  try {
3
3
  run.result = (function (${e.join(", ")}) {
4
4
  ${r}
@@ -8,4 +8,4 @@ run.done = true;
8
8
  run.error = error;
9
9
  }
10
10
  })(document.currentScript.datalogRun);`;try{document.head.appendChild(o)}finally{o.remove()}if(s.error)throw s.error;if(!s.done)throw new Error("The Content Security Policy did not allow the visualization script to run");return s.result},ct=t=>{let e=t.querySelector("[data-d3-script]");return e?nt().then(r=>{let n=e.textContent||"",s=t.querySelector("[data-viz-canvas]")||t;s.replaceChildren();let o=[],a=c=>{typeof c!="undefined"&&o.push(c)};try{let c=`${n}
11
- ;try { if (typeof data !== 'undefined') captureData(data); } catch (instrumentationError) {}`,i=B(e,["d3","element","captureData"],c,[r,s,a]);typeof i!="undefined"&&a(i);let l=o.length?o[o.length-1]:null,u=M(l);u&&E(t,{rows:u}),d(t,"Interactive")}catch(c){s.replaceChildren(),d(t,"D3 rendering error","error")}}).catch(()=>d(t,"D3 assets failed to load","error")):(d(t,"Missing D3 rendering instructions","error"),Promise.resolve())},dt=t=>{try{let e=new URL(t,"https://observablehq.com");if(e.origin!=="https://observablehq.com")return null;let r=Array.from(e.searchParams,([n,s])=>`${encodeURIComponent(n)}=${encodeURIComponent(s)}`).join("&");return"https://observablehq.com"+e.pathname+(r?"?"+r:"")}catch(e){return null}},lt=t=>{let e=t.getAttribute("data-observable-src")||t.getAttribute("data-viz-src");if(!e)return d(t,"Missing Observable notebook source","error"),Promise.resolve();let r=dt(e);if(!r)return d(t,"Observable embeds must come from observablehq.com","error"),Promise.resolve();let n=document.createElement("iframe");n.src=r,n.loading="lazy",n.title=t.getAttribute("data-viz-title")||"Observable visualization",n.setAttribute("allowfullscreen",""),n.setAttribute("sandbox","allow-scripts allow-same-origin allow-popups allow-forms"),n.className="viz-embed",(t.querySelector("[data-viz-canvas]")||t).replaceChildren(n),d(t,"Embedded");let o=V(t);return o&&E(t,{rows:o}),Promise.resolve()},ut=t=>{let e=t.querySelector(I),r=t.querySelector("[data-bokeh-script]"),n=t.querySelector("[data-viz-canvas]")||t;return!e&&!r?(d(t,"Missing Bokeh specification","error"),Promise.resolve()):ot().then(s=>{if(e){let o={};try{o=JSON.parse(e.textContent||"{}")}catch(c){d(t,"Invalid Bokeh specification","error");return}let a=n.id||`bokeh-${Math.random().toString(36).slice(2)}`;n.id=a;try{s.embed.embed_item(o,a),d(t,"Interactive")}catch(c){d(t,"Bokeh rendering error","error")}return}if(r){let o=r.textContent||"";n.replaceChildren();try{B(r,["Bokeh","element"],o,[s,n]),d(t,"Interactive")}catch(a){d(t,"Bokeh rendering error","error")}}}).catch(s=>{d(t,"Bokeh assets failed to load","error")})},pt=t=>{let e=t.getAttribute("data-shiny-src");if(!e)return d(t,"Missing Shiny application source","error"),Promise.resolve();let r=document.createElement("iframe");r.src=e,r.loading="lazy",r.title=t.getAttribute("data-viz-title")||"R Shiny application",r.className="viz-embed",r.setAttribute("allow","fullscreen"),r.setAttribute("sandbox","allow-scripts allow-forms allow-same-origin");let n=t.getAttribute("data-shiny-height");return r.style.height=n||"640px",(t.querySelector("[data-viz-canvas]")||t).replaceChildren(r),d(t,"Embedded"),Promise.resolve()},ht=t=>{let e=t.querySelector(F),r=t.querySelector(K);if(!e||!r)return d(t,"Missing widget state payload","error"),Promise.resolve();let n,s;try{n=JSON.parse(e.textContent||"{}"),s=JSON.parse(r.textContent||"{}")}catch(a){return d(t,"Invalid widget payload","error"),Promise.resolve()}let o=t.querySelector("[data-viz-canvas]")||t;return o.replaceChildren(),st().then(a=>{let c=new a.HTMLManager({loader:a.requireLoader});return c.set_state(n).then(()=>c.get_model(s.model_id)).then(i=>c.create_view(i)).then(i=>c.display_view(i,o)).then(()=>d(t,"Interactive")).catch(i=>{d(t,"Widget rendering error","error")})}).catch(a=>{d(t,"Widget assets failed to load","error")})},P=t=>{let e=t.getAttribute("data-viz-type");switch($(t),e){case"plotly":return it(t);case"observable":return lt(t);case"d3":return ct(t);case"bokeh":return ut(t);case"shiny":return pt(t);case"ipywidgets":return ht(t);default:return d(t,"Unsupported visualization type","error"),Promise.resolve()}},W=()=>{if(!("IntersectionObserver"in window)){document.querySelectorAll(_).forEach(e=>{P(e)});return}let t=new IntersectionObserver((e,r)=>{e.filter(n=>n.isIntersecting).forEach(n=>{let s=n.target;r.unobserve(s),P(s)})},{rootMargin:"200px 0px"});document.querySelectorAll(_).forEach(e=>{t.observe(e)})},U=t=>{document.querySelectorAll("[data-viz-card]").forEach(r=>{let n=!t.tech||r.dataset.vizTech===t.tech,s=(r.dataset.vizTags||"").split(",").map(a=>a.trim()).filter(Boolean),o=!t.tag||s.includes(t.tag);r.hidden=!(n&&o)})},G=()=>{let t=document.querySelector("[data-viz-gallery]");if(!t)return;let e=t.querySelector('[data-viz-filter="tech"]'),r=t.querySelector('[data-viz-filter="tag"]'),n=()=>{U({tech:e&&e.value!=="all"?e.value:"",tag:r&&r.value!=="all"?r.value:""})};e&&e.addEventListener("change",n),r&&r.addEventListener("change",n),n()},J=()=>{W(),G()},ft={loadScript:z,loadStyle:Q,loadUmd:C,ensureRequire:R,resetRequireLoading:()=>{g=null,j.clear()},normalizeRecords:m,stringifyValue:y,buildDataTable:E,annotateVersionMetadata:$,buildPlotlyRecords:N,buildD3Records:M,buildObservableRecords:V,filterGallery:U,renderVisualization:P,initializeVisualizations:W,initializeGallery:G};typeof globalThis!="undefined"&&(globalThis.__DATALOG_VIZ_INTERNALS__=ft),Z||(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",J):J())})();
11
+ ;try { if (typeof data !== 'undefined') captureData(data); } catch (instrumentationError) {}`,i=B(e,["d3","element","captureData"],c,[r,s,a]);typeof i!="undefined"&&a(i);let l=o.length?o[o.length-1]:null,u=N(l);u&&E(t,{rows:u}),d(t,"Interactive")}catch(c){s.replaceChildren(),d(t,"D3 rendering error","error")}}).catch(()=>d(t,"D3 assets failed to load","error")):(d(t,"Missing D3 rendering instructions","error"),Promise.resolve())},dt=t=>{try{let e=new URL(t,"https://observablehq.com");if(e.origin!=="https://observablehq.com")return null;let r=Array.from(e.searchParams,([n,s])=>`${encodeURIComponent(n)}=${encodeURIComponent(s)}`).join("&");return"https://observablehq.com"+e.pathname+(r?"?"+r:"")}catch(e){return null}},lt=t=>{let e=t.getAttribute("data-observable-src")||t.getAttribute("data-viz-src");if(!e)return d(t,"Missing Observable notebook source","error"),Promise.resolve();let r=dt(e);if(!r)return d(t,"Observable embeds must come from observablehq.com","error"),Promise.resolve();let n=document.createElement("iframe");n.src=r,n.loading="lazy",n.title=t.getAttribute("data-viz-title")||"Observable visualization",n.setAttribute("allowfullscreen",""),n.setAttribute("sandbox","allow-scripts allow-same-origin allow-popups allow-forms"),n.className="viz-embed",(t.querySelector("[data-viz-canvas]")||t).replaceChildren(n),d(t,"Embedded");let o=V(t);return o&&E(t,{rows:o}),Promise.resolve()},ut=t=>{let e=t.querySelector(_),r=t.querySelector("[data-bokeh-script]"),n=t.querySelector("[data-viz-canvas]")||t;return!e&&!r?(d(t,"Missing Bokeh specification","error"),Promise.resolve()):ot().then(s=>{if(e){let o={};try{o=JSON.parse(e.textContent||"{}")}catch(c){d(t,"Invalid Bokeh specification","error");return}let a=n.id||`bokeh-${Math.random().toString(36).slice(2)}`;n.id=a;try{s.embed.embed_item(o,a),d(t,"Interactive")}catch(c){d(t,"Bokeh rendering error","error")}return}if(r){let o=r.textContent||"";n.replaceChildren();try{B(r,["Bokeh","element"],o,[s,n]),d(t,"Interactive")}catch(a){d(t,"Bokeh rendering error","error")}}}).catch(s=>{d(t,"Bokeh assets failed to load","error")})},pt=t=>{let e=t.getAttribute("data-shiny-src");if(!e)return d(t,"Missing Shiny application source","error"),Promise.resolve();let r=document.createElement("iframe");r.src=e,r.loading="lazy",r.title=t.getAttribute("data-viz-title")||"R Shiny application",r.className="viz-embed",r.setAttribute("allow","fullscreen"),r.setAttribute("sandbox","allow-scripts allow-forms allow-same-origin");let n=t.getAttribute("data-shiny-height");return r.style.height=n||"640px",(t.querySelector("[data-viz-canvas]")||t).replaceChildren(r),d(t,"Embedded"),Promise.resolve()},ht=t=>{let e=t.querySelector(F),r=t.querySelector(K);if(!e||!r)return d(t,"Missing widget state payload","error"),Promise.resolve();let n,s;try{n=JSON.parse(e.textContent||"{}"),s=JSON.parse(r.textContent||"{}")}catch(a){return d(t,"Invalid widget payload","error"),Promise.resolve()}let o=t.querySelector("[data-viz-canvas]")||t;return o.replaceChildren(),st().then(a=>{let c=new a.HTMLManager({loader:a.requireLoader});return c.set_state(n).then(()=>c.get_model(s.model_id)).then(i=>c.create_view(i)).then(i=>c.display_view(i,o)).then(()=>d(t,"Interactive")).catch(i=>{d(t,"Widget rendering error","error")})}).catch(a=>{d(t,"Widget assets failed to load","error")})},P=t=>{let e=t.getAttribute("data-viz-type");switch($(t),e){case"plotly":return it(t);case"observable":return lt(t);case"d3":return ct(t);case"bokeh":return ut(t);case"shiny":return pt(t);case"ipywidgets":return ht(t);default:return d(t,"Unsupported visualization type","error"),Promise.resolve()}},W=()=>{if(!("IntersectionObserver"in window)){document.querySelectorAll(I).forEach(e=>{P(e)});return}let t=new IntersectionObserver((e,r)=>{e.filter(n=>n.isIntersecting).forEach(n=>{let s=n.target;r.unobserve(s),P(s)})},{rootMargin:"200px 0px"});document.querySelectorAll(I).forEach(e=>{t.observe(e)})},U=t=>{document.querySelectorAll("[data-viz-card]").forEach(r=>{let n=!t.tech||r.dataset.vizTech===t.tech,s=(r.dataset.vizTags||"").split(",").map(a=>a.trim()).filter(Boolean),o=!t.tag||s.includes(t.tag);r.hidden=!(n&&o)})},G=()=>{let t=document.querySelector("[data-viz-gallery]");if(!t)return;let e=t.querySelector('[data-viz-filter="tech"]'),r=t.querySelector('[data-viz-filter="tag"]'),n=()=>{U({tech:e&&e.value!=="all"?e.value:"",tag:r&&r.value!=="all"?r.value:""})};e&&e.addEventListener("change",n),r&&r.addEventListener("change",n),n()},J=()=>{W(),G()},ft={loadScript:z,loadStyle:Q,loadUmd:C,ensureRequire:R,resetRequireLoading:()=>{g=null,j.clear()},normalizeRecords:m,stringifyValue:y,buildDataTable:E,annotateVersionMetadata:$,buildPlotlyRecords:M,buildD3Records:N,buildObservableRecords:V,filterGallery:U,renderVisualization:P,initializeVisualizations:W,initializeGallery:G};typeof globalThis!="undefined"&&(globalThis.__DATALOG_VIZ_INTERNALS__=ft),Z||(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",J):J())})();
@@ -1 +1 @@
1
- import{a as N,c as A}from"./chunks/chunk-2DYDWUFX.js";import"./chunks/chunk-PATLC23F.js";var S="webmentions",_=["mention","reply"],O=["mention","reply","repost","like"],D=200,F=280,T=/^https?:\/\//i,M=new Set(["disabled","unsupported","version"]);function U(e,t){let r=e.querySelector(t);if(!r)return{};try{return JSON.parse(r.textContent)||{}}catch(s){return{}}}function x(e,t){if(typeof e!="string")return"";let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1).trimEnd()}\u2026`:r}function j(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch(t){return""}}function k(e,t=_){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=typeof e.source=="string"?e.source.trim():"",s=typeof e.type=="string"?e.type.trim().toLowerCase():"mention";if(e.verified!==!0||!T.test(r)||!t.includes(s))return null;let a=e.author&&typeof e.author=="object"?e.author:{},f=typeof a.url=="string"&&T.test(a.url.trim())?a.url.trim():"",i=typeof e.published_at=="string"&&!Number.isNaN(Date.parse(e.published_at))?e.published_at:"";return{id:e.id===null||e.id===void 0?"":String(e.id),source:r,host:j(r),type:s,title:x(e.title,D),excerpt:x(e.excerpt,F),author:{name:x(a.name,120),url:f},published_at:i}}function R(e,t=_){return(e&&typeof e=="object"&&Array.isArray(e.mentions)?e.mentions:[]).map(s=>k(s,t)).filter(Boolean).sort((s,a)=>a.published_at.localeCompare(s.published_at))}function q(e,t){let r=new Date(e);if(Number.isNaN(r.getTime()))return"";try{return r.toLocaleDateString(t||void 0,{dateStyle:"medium"})}catch(s){return r.toISOString().slice(0,10)}}function W(e,t,r={}){let{labels:s={},lang:a}=r,f=s.types||{},i=e.createElement("li");i.className=`webmention webmention--${t.type}`,t.id&&(i.dataset.mentionId=t.id);let c=e.createElement("span");c.className="webmention__type",c.textContent=f[t.type]||t.type,i.appendChild(c);let d=e.createElement("a");d.className="webmention__title",d.href=t.source,d.rel="nofollow noopener ugc",d.textContent=t.title||t.host||t.source,i.appendChild(d);let u=e.createElement("span");if(u.className="webmention__meta",t.author.name){let n;t.author.url?(n=e.createElement("a"),n.href=t.author.url,n.rel="nofollow noopener ugc"):n=e.createElement("span"),n.className="webmention__author",n.textContent=t.author.name,u.appendChild(n)}if(t.host&&t.title){let n=e.createElement("span");n.className="webmention__host",n.textContent=t.host,u.appendChild(n)}if(t.published_at){let n=e.createElement("time");n.className="webmention__time",n.dateTime=t.published_at,n.textContent=q(t.published_at,a),u.appendChild(n)}if(u.childNodes.length>0&&i.appendChild(u),t.excerpt){let n=e.createElement("p");n.className="webmention__excerpt",n.textContent=t.excerpt,i.appendChild(n)}return i}function $(e,t={}){let r=e.ownerDocument,s=t.window||r.defaultView,a=t.client||A(),f=e.dataset.webmentionsTarget||"",i=(e.dataset.webmentionsTypes||_.join(",")).split(",").map(o=>o.trim().toLowerCase()).filter(o=>O.includes(o)),c=U(e,"[data-webmentions-labels]"),d=c.errors||{},u=r.documentElement.lang||void 0,n=e.querySelector("[data-webmentions-status]"),w=e.querySelector("[data-webmentions-list]"),h=null,g=!1,C=!1,b=(o,l="",p={})=>{if(e.dataset.state=o,!!n&&(n.textContent=l,n.hidden=l==="",n.setAttribute("role",p.alert?"alert":"status"),p.retry)){let m=r.createElement("button");m.type="button",m.className="post-tool",m.setAttribute("data-webmentions-retry",""),m.textContent=c.retry||"Try again",m.addEventListener("click",()=>y.load()),n.appendChild(r.createTextNode(" ")),n.appendChild(m)}},I=()=>(h||(h=a.feature(S).catch(o=>{throw h=null,o})),h),y={root:e,types:i,async load(){if(g)return null;g=!0,b("loading",c.loading||"");try{await I();let o=await a.get(`${a.pathFor(S)}?target=${encodeURIComponent(f)}`),l=R(o&&o.data,i);return w.textContent="",l.forEach(p=>w.appendChild(W(r,p,{labels:c,lang:u}))),w.hidden=l.length===0,b(l.length>0?"loaded":"empty",l.length>0?"":c.empty||""),C=!0,l}catch(o){return o&&M.has(o.kind)?(b("disabled"),e.hidden=!0):b("error",N(o,d),{alert:!0,retry:!0}),null}finally{g=!1}}},E=()=>{C||y.load()};if(t.immediate||!s||typeof s.IntersectionObserver!="function")E();else{let o=new s.IntersectionObserver(l=>{l.some(p=>p.isIntersecting)&&(o.disconnect(),E())},{rootMargin:"400px 0px"});o.observe(e)}return y}function L(e=document){return Array.from(e.querySelectorAll("[data-webmentions]")).map(t=>$(t))}function v(){L(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",v,{once:!0}):v();
1
+ import{a as N,c as A}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var S="webmentions",_=["mention","reply"],I=["mention","reply","repost","like"],O=200,F=280,T=/^https?:\/\//i,M=new Set(["disabled","unsupported","version"]);function U(e,t){let r=e.querySelector(t);if(!r)return{};try{return JSON.parse(r.textContent)||{}}catch(s){return{}}}function x(e,t){if(typeof e!="string")return"";let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1).trimEnd()}\u2026`:r}function j(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch(t){return""}}function k(e,t=_){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=typeof e.source=="string"?e.source.trim():"",s=typeof e.type=="string"?e.type.trim().toLowerCase():"mention";if(e.verified!==!0||!T.test(r)||!t.includes(s))return null;let a=e.author&&typeof e.author=="object"?e.author:{},f=typeof a.url=="string"&&T.test(a.url.trim())?a.url.trim():"",i=typeof e.published_at=="string"&&!Number.isNaN(Date.parse(e.published_at))?e.published_at:"";return{id:e.id===null||e.id===void 0?"":String(e.id),source:r,host:j(r),type:s,title:x(e.title,O),excerpt:x(e.excerpt,F),author:{name:x(a.name,120),url:f},published_at:i}}function R(e,t=_){return(e&&typeof e=="object"&&Array.isArray(e.mentions)?e.mentions:[]).map(s=>k(s,t)).filter(Boolean).sort((s,a)=>(Date.parse(a.published_at)||0)-(Date.parse(s.published_at)||0))}function q(e,t){let r=new Date(e);if(Number.isNaN(r.getTime()))return"";try{return r.toLocaleDateString(t||void 0,{dateStyle:"medium"})}catch(s){return r.toISOString().slice(0,10)}}function W(e,t,r={}){let{labels:s={},lang:a}=r,f=s.types||{},i=e.createElement("li");i.className=`webmention webmention--${t.type}`,t.id&&(i.dataset.mentionId=t.id);let c=e.createElement("span");c.className="webmention__type",c.textContent=f[t.type]||t.type,i.appendChild(c);let d=e.createElement("a");d.className="webmention__title",d.href=t.source,d.rel="nofollow noopener ugc",d.textContent=t.title||t.host||t.source,i.appendChild(d);let u=e.createElement("span");if(u.className="webmention__meta",t.author.name){let n;t.author.url?(n=e.createElement("a"),n.href=t.author.url,n.rel="nofollow noopener ugc"):n=e.createElement("span"),n.className="webmention__author",n.textContent=t.author.name,u.appendChild(n)}if(t.host&&t.title){let n=e.createElement("span");n.className="webmention__host",n.textContent=t.host,u.appendChild(n)}if(t.published_at){let n=e.createElement("time");n.className="webmention__time",n.dateTime=t.published_at,n.textContent=q(t.published_at,a),u.appendChild(n)}if(u.childNodes.length>0&&i.appendChild(u),t.excerpt){let n=e.createElement("p");n.className="webmention__excerpt",n.textContent=t.excerpt,i.appendChild(n)}return i}function $(e,t={}){let r=e.ownerDocument,s=t.window||r.defaultView,a=t.client||A(),f=e.dataset.webmentionsTarget||"",i=(e.dataset.webmentionsTypes||_.join(",")).split(",").map(o=>o.trim().toLowerCase()).filter(o=>I.includes(o)),c=U(e,"[data-webmentions-labels]"),d=c.errors||{},u=r.documentElement.lang||void 0,n=e.querySelector("[data-webmentions-status]"),w=e.querySelector("[data-webmentions-list]"),h=null,g=!1,C=!1,b=(o,l="",p={})=>{if(e.dataset.state=o,!!n&&(n.textContent=l,n.hidden=l==="",n.setAttribute("role",p.alert?"alert":"status"),p.retry)){let m=r.createElement("button");m.type="button",m.className="post-tool",m.setAttribute("data-webmentions-retry",""),m.textContent=c.retry||"Try again",m.addEventListener("click",()=>y.load()),n.appendChild(r.createTextNode(" ")),n.appendChild(m)}},D=()=>(h||(h=a.feature(S).catch(o=>{throw h=null,o})),h),y={root:e,types:i,async load(){if(g)return null;g=!0,b("loading",c.loading||"");try{await D();let o=await a.get(`${a.pathFor(S)}?target=${encodeURIComponent(f)}`),l=R(o&&o.data,i);return w.textContent="",l.forEach(p=>w.appendChild(W(r,p,{labels:c,lang:u}))),w.hidden=l.length===0,b(l.length>0?"loaded":"empty",l.length>0?"":c.empty||""),C=!0,l}catch(o){return o&&M.has(o.kind)?(b("disabled"),e.hidden=!0):b("error",N(o,d),{alert:!0,retry:!0}),null}finally{g=!1}}},E=()=>{C||y.load()};if(t.immediate||!s||typeof s.IntersectionObserver!="function")E();else{let o=new s.IntersectionObserver(l=>{l.some(p=>p.isIntersecting)&&(o.disconnect(),E())},{rootMargin:"400px 0px"});o.observe(e)}return y}function L(e=document){return Array.from(e.querySelectorAll("[data-webmentions]")).map(t=>$(t))}function v(){L(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",v,{once:!0}):v();
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Datalog
4
4
  module Theme
5
- VERSION = "0.9.0" unless const_defined?(:VERSION)
5
+ VERSION = "0.9.1" unless const_defined?(:VERSION)
6
6
  # The Ruby the gem installs on, for the gemspec and `datalog check`. The
7
7
  # release workflow rewrites every quoted version assigned to a name ending
8
8
  # in VERSION in this file, so this name must not end that way.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datalog-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diogo Ribeiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-18 00:00:00.000000000 Z
11
+ date: 2026-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -324,6 +324,7 @@ files:
324
324
  - _includes/components/reading-mode-toggle.html
325
325
  - _includes/components/reading-state-bookmark.html
326
326
  - _includes/components/reading-state-panel.html
327
+ - _includes/components/reading-state-resume.html
327
328
  - _includes/components/reproducibility.html
328
329
  - _includes/components/responsive-image.html
329
330
  - _includes/components/revision-history.html
@@ -376,6 +377,7 @@ files:
376
377
  - _layouts/research.html
377
378
  - _plugins/analytics_dashboard.rb
378
379
  - _plugins/authors.rb
380
+ - _plugins/citation_exports.rb
379
381
  - _plugins/config_validator.rb
380
382
  - _plugins/critical_css_check.rb
381
383
  - _plugins/csp_generator.rb
@@ -393,6 +395,7 @@ files:
393
395
  - _plugins/reading_time.rb
394
396
  - _plugins/references.rb
395
397
  - _plugins/reproducibility.rb
398
+ - _plugins/responsive_content.rb
396
399
  - _plugins/revisions.rb
397
400
  - _plugins/rouge_highlight_filter.rb
398
401
  - _plugins/scholarly.rb
@@ -448,9 +451,9 @@ files:
448
451
  - assets/img/social-card.png
449
452
  - assets/js/dist/academic.js
450
453
  - assets/js/dist/analytics-dashboard.js
451
- - assets/js/dist/chunks/chunk-2DYDWUFX.js
452
454
  - assets/js/dist/chunks/chunk-PATLC23F.js
453
- - assets/js/dist/chunks/chunk-V7734B2G.js
455
+ - assets/js/dist/chunks/chunk-VZ5WKQVA.js
456
+ - assets/js/dist/chunks/chunk-WIRUK3OZ.js
454
457
  - assets/js/dist/comments.js
455
458
  - assets/js/dist/contact.js
456
459
  - assets/js/dist/core.js
@@ -1 +0,0 @@
1
- import{a as x,b as $}from"./chunk-PATLC23F.js";var O="/capabilities",M="/health",U={401:"unauthorized",403:"forbidden",404:"not_found",409:"conflict",422:"invalid",429:"rate_limited"},j=new Set(["timeout","network","rate_limited","server"]),q=new Set(["GET","HEAD","OPTIONS"]),N={disabled:"This feature is not set up on this site.",unsupported:"The service behind this site does not offer this feature.",version:"This site and its service expect different API versions.",timeout:"The service took too long to answer. Try again in a moment.",network:"The service could not be reached. Check your connection and try again.",malformed:"The service answered in a way this site could not read.",unauthorized:"You need to sign in for this.",forbidden:"You are not allowed to do this.",not_found:"The service has nothing at that address.",conflict:"This was already done, or something changed in the meantime.",invalid:"Some of what you entered needs a correction.",rate_limited:"Too many requests for now. Please wait a little and try again.",server:"The service ran into a problem. Try again later.",http:"The service refused the request.",aborted:"The request was cancelled.",reference:"Reference: {{id}}"},c=class extends Error{constructor(r,i,n={}){var h,a,f,T,b,v,A,m;super(i),this.name="ServiceError",this.kind=r,this.status=(h=n.status)!=null?h:null,this.code=(a=n.code)!=null?a:null,this.requestId=(f=n.requestId)!=null?f:null,this.retryAfter=(T=n.retryAfter)!=null?T:null,this.errors=(b=n.errors)!=null?b:null,this.expected=(v=n.expected)!=null?v:null,this.actual=(A=n.actual)!=null?A:null,this.retryable=(m=n.retryable)!=null?m:j.has(r)}};function H(e=globalThis){let r=e.DatalogDynamicServices;return r&&typeof r=="object"?r:{}}function Y(e){let r=String(e!=null?e:"1").trim()||"1";return/^v/i.test(r)?`v${r.slice(1)}`:`v${r}`}function G(e,r=Date.now()){if(!e)return null;let i=Number(e);if(Number.isFinite(i))return Math.max(0,i);let n=Date.parse(e);return Number.isNaN(n)?null:Math.max(0,Math.round((n-r)/1e3))}function K(e,r){if(!e||typeof e.cookie!="string")return null;let i=e.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${r}=`));return i?decodeURIComponent(i.slice(r.length+1)):null}function B(e,r,i){let n=e.status,h=U[n]||(n>=500?"server":"http"),a=r&&typeof r=="object"?r.error||r:{},f=a&&(a.message||a.title)||`The service answered ${n}`;return new c(h,f,{status:n,code:a&&a.code||null,requestId:i,retryAfter:G(e.headers.get("Retry-After")),errors:a&&a.errors||null})}function X(e,r={}){let i=e&&e.kind?e.kind:"http",n=r[i]||N[i]||r.http||N.http;if(e&&e.requestId){let h=r.reference||N.reference;return`${n} ${h.split("{{id}}").join(e.requestId)}`}return n}function J(e=H(),r={}){let i=r.fetch||((...t)=>globalThis.fetch(...t)),n=r.delay||(t=>new Promise(s=>setTimeout(s,t))),h=r.document===void 0?globalThis.document:r.document,a=String(e.base_url||"").replace(/\/+$/,""),f=Y(e.api_version),T=Number(e.timeout_ms)>0?Number(e.timeout_ms):8e3,b=["omit","same-origin","include"].includes(e.credentials)?e.credentials:"omit",v=e.features&&typeof e.features=="object"?e.features:{},A=e.paths&&typeof e.paths=="object"?e.paths:{},m=a!=="",E=null;function R(t){return/^https?:\/\//i.test(t)?t:`${a}/${f}${t.startsWith("/")?t:`/${t}`}`}function L(t){let s=A[t];return typeof s=="string"&&s!==""?s:`/${t}`}async function P(t,s,o){let u=new AbortController,_=setTimeout(()=>u.abort(),T),w=!1;o.signal&&o.signal.addEventListener("abort",()=>{w=!0,u.abort()});let p=x({Accept:"application/json"},o.headers||{}),d={method:t,headers:p,credentials:b,signal:u.signal};if(o.body!==void 0&&(p["Content-Type"]="application/json",d.body=JSON.stringify(o.body)),o.idempotencyKey&&(p["Idempotency-Key"]=o.idempotencyKey),!q.has(t)&&e.csrf_header&&e.csrf_cookie){let g=K(h,e.csrf_cookie);g&&(p[e.csrf_header]=g)}let l,k;try{l=await i(R(s),d),k=await l.text()}catch(g){throw w?new c("aborted","The request was cancelled",{retryable:!1}):u.signal.aborted?new c("timeout",`No answer within ${T} ms`):new c("network","The service could not be reached")}finally{clearTimeout(_)}let I=l.headers.get("X-Request-Id")||null,S=null;if(k)try{S=JSON.parse(k)}catch(g){if(l.ok)throw new c("malformed","The service did not answer with JSON",{status:l.status,requestId:I,retryable:!1})}if(!l.ok)throw B(l,S,I);return{data:S,status:l.status,requestId:I,headers:l.headers}}async function y(t,s,o={}){var p;if(!m)throw new c("disabled","Dynamic services are not configured for this site",{retryable:!1});let u=String(t).toUpperCase(),_=(p=o.retries)!=null?p:q.has(u)?2:0,w=0;for(;;)try{return await P(u,s,o)}catch(d){let l=d.retryAfter!==null&&d.retryAfter>10;if(!(d instanceof c)||!d.retryable||w>=_||l)throw d;w+=1,await n(d.retryAfter!==null?d.retryAfter*1e3:300*w)}}function C(){return E||(E=y("GET",O).then(({data:t})=>{var u;let s=String((u=t&&t.api_version)!=null?u:"").replace(/^v/i,""),o=f.slice(1);if(s!==o)throw new c("version",`The service speaks API version ${s||"unknown"}; this site expects ${o}`,{expected:o,actual:s,retryable:!1});return t}).catch(t=>{throw E=null,t})),E}async function F(t){if(!m)throw new c("disabled","Dynamic services are not configured for this site",{retryable:!1});if(v[t]===!1)throw new c("disabled",`${t} is off in this site's settings`,{retryable:!1});let s=await C();if(!s||!s.features||!s.features[t])throw new c("unsupported",`The service does not offer ${t}`,{retryable:!1});return!0}return{enabled:m,base:a,version:f,timeout:T,credentials:b,urlFor:R,pathFor:L,request:y,get:(t,s)=>y("GET",t,s),post:(t,s,o={})=>y("POST",t,$(x({},o),{body:s})),patch:(t,s,o={})=>y("PATCH",t,$(x({},o),{body:s})),delete:(t,s)=>y("DELETE",t,s),capabilities:C,feature:F,health:()=>y("GET",M).then(({data:t})=>t)}}var D=null;function z(){return D||(D=J()),D}export{X as a,J as b,z as c};
@@ -1 +0,0 @@
1
- import{a as l}from"./chunk-2DYDWUFX.js";var u=["idle","pending","success","invalid","error","disabled"];function b(e,t){let i=e.elements.namedItem(t);return i?typeof i.setAttribute=="function"?[i]:Array.from(i):[]}function f(e){e.querySelectorAll("[aria-invalid]").forEach(t=>{t.removeAttribute("aria-invalid");let i=(t.getAttribute("aria-describedby")||"").split(/\s+/).filter(r=>r&&!r.endsWith("-error")).join(" ");i?t.setAttribute("aria-describedby",i):t.removeAttribute("aria-describedby")}),e.querySelectorAll("[data-error-for]").forEach(t=>{t.textContent="",t.hidden=!0})}function y(e,t){let i=0,r=null;return Object.keys(t||{}).forEach(n=>{let o=Array.isArray(t[n])?t[n].join(" "):String(t[n]),s=e.querySelector(`[data-error-for="${n}"]`);s&&(s.textContent=o,s.hidden=!1,s.id||(s.id=`${e.id||"form"}-${n}-error`)),b(e,n).forEach(d=>{if(d.setAttribute("aria-invalid","true"),s){let a=(d.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean);a.includes(s.id)||a.push(s.id),d.setAttribute("aria-describedby",a.join(" "))}r=r||d,i+=1})}),r&&typeof r.focus=="function"&&r.focus(),i}function c(e,t,i="",r=null){e.dataset.state=u.includes(t)?t:"idle";let n=t==="pending";e.setAttribute("aria-busy",n?"true":"false"),e.querySelectorAll("button[type=submit], [data-form-submit]").forEach(s=>{s.disabled=n||t==="disabled"}),e.querySelectorAll("fieldset").forEach(s=>{s.disabled=t==="disabled"});let o=e.querySelector("[data-form-status]");o&&(o.setAttribute("role",t==="error"||t==="invalid"?"alert":"status"),o.textContent=i,o.hidden=i===""),f(e),t==="invalid"&&r&&y(e,r)}function A(e){let t={};return new FormData(e).forEach((i,r)=>{let n=typeof i=="string"?i.trim():i;r in t?t[r]=[].concat(t[r],n):t[r]=n}),t}function h(e,t,i={}){let r=l(t,i);t&&t.kind==="invalid"?c(e,"invalid",r,t.errors||null):c(e,"error",r)}export{c as a,A as b,h as c};