datalog-theme 0.9.0 → 0.9.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/CITATION.cff +2 -2
- data/_data/i18n/en.yml +24 -0
- data/_data/i18n/es.yml +24 -0
- data/_data/i18n/pt.yml +24 -0
- data/_includes/components/academic-dashboard.html +4 -4
- data/_includes/components/author-list.html +1 -1
- data/_includes/components/breadcrumbs.html +6 -4
- data/_includes/components/citation-tools.html +5 -53
- data/_includes/components/comments-thread.html +1 -1
- data/_includes/components/contact-form.html +1 -1
- data/_includes/components/correction-report.html +1 -1
- data/_includes/components/hero.html +1 -1
- data/_includes/components/moderation-inbox.html +1 -1
- data/_includes/components/post-hero.html +2 -2
- data/_includes/components/reactions.html +1 -1
- data/_includes/components/reading-list.html +3 -0
- data/_includes/components/reading-mode-toggle.html +2 -0
- data/_includes/components/reading-state-panel.html +0 -9
- data/_includes/components/reading-state-resume.html +17 -0
- data/_includes/components/subscribe-form.html +1 -1
- data/_includes/components/subscription-manage.html +2 -1
- data/_includes/components/visualization-card.html +1 -1
- data/_includes/components/webmentions.html +1 -1
- data/_includes/footer/nav-column.html +1 -1
- data/_includes/footer.html +2 -2
- data/_includes/head.html +13 -12
- data/_includes/header/navigation.html +2 -2
- data/_includes/header.html +1 -1
- data/_includes/layouts/default/article.html +2 -2
- data/_includes/meta/math-config.html +3 -0
- data/_includes/meta/person-json.html +7 -7
- data/_includes/meta/publisher.html +1 -1
- data/_includes/meta/schema.html +32 -30
- data/_includes/meta/scholarly.html +4 -3
- data/_includes/post/related-posts.html +1 -1
- data/_layouts/dataset.html +1 -1
- data/_layouts/home.html +2 -2
- data/_layouts/notebook.html +1 -1
- data/_layouts/package.html +5 -5
- data/_layouts/portfolio.html +1 -1
- data/_layouts/post.html +12 -7
- data/_layouts/project.html +3 -3
- data/_layouts/research.html +7 -67
- data/_plugins/authors.rb +22 -4
- data/_plugins/citation_exports.rb +93 -0
- data/_plugins/image_optimizer.rb +24 -16
- data/_plugins/licenses.rb +15 -3
- data/_plugins/math_preprocessor.rb +65 -3
- data/_plugins/references.rb +30 -8
- data/_plugins/reproducibility.rb +20 -3
- data/_plugins/responsive_content.rb +40 -0
- data/_plugins/revisions.rb +1 -0
- data/_plugins/scholarly.rb +5 -0
- data/_plugins/statements.rb +2 -2
- data/_sass/_base.scss +5 -0
- data/_sass/_layout.scss +18 -1
- data/_sass/_mathematical.scss +11 -1
- data/_sass/_print.scss +16 -8
- data/_sass/_syntax-highlighting.scss +1 -1
- data/assets/js/dist/chunks/chunk-VZ5WKQVA.js +1 -0
- data/assets/js/dist/chunks/chunk-WIRUK3OZ.js +1 -0
- data/assets/js/dist/comments.js +2 -2
- data/assets/js/dist/contact.js +1 -1
- data/assets/js/dist/corrections.js +1 -1
- data/assets/js/dist/moderation.js +1 -1
- data/assets/js/dist/reactions.js +1 -1
- data/assets/js/dist/reading-state.js +1 -1
- data/assets/js/dist/sources.json +16 -16
- data/assets/js/dist/subscriptions.js +1 -1
- data/assets/js/dist/visualizations.js +2 -2
- data/assets/js/dist/webmentions.js +1 -1
- data/lib/datalog/theme/version.rb +1 -1
- metadata +7 -4
- data/assets/js/dist/chunks/chunk-2DYDWUFX.js +0 -1
- data/assets/js/dist/chunks/chunk-V7734B2G.js +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "nokogiri"
|
|
4
|
+
|
|
5
|
+
module Datalog
|
|
6
|
+
# A table keeps its native semantics and desktop width while its enclosing
|
|
7
|
+
# region can scroll with either touch or the keyboard on a narrow screen.
|
|
8
|
+
module ResponsiveContent
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
def process(document)
|
|
12
|
+
return unless document.output_ext == ".html" && document.content.to_s.include?("<table")
|
|
13
|
+
|
|
14
|
+
html = Nokogiri::HTML5.fragment(document.content)
|
|
15
|
+
tables = html.css("table").to_a
|
|
16
|
+
tables.reject! do |table|
|
|
17
|
+
table["class"].to_s.split.include?("rouge-table") || table.ancestors(".content-table").any?
|
|
18
|
+
end
|
|
19
|
+
return if tables.empty?
|
|
20
|
+
|
|
21
|
+
locale = I18n.locale_code(document.site, document.data["lang"])
|
|
22
|
+
label = I18n.lookup(document.site, locale, "references.table") || "Table"
|
|
23
|
+
tables.each_with_index do |table, index|
|
|
24
|
+
wrapper = Nokogiri::XML::Node.new("div", html)
|
|
25
|
+
wrapper["class"] = "content-table"
|
|
26
|
+
wrapper["role"] = "region"
|
|
27
|
+
wrapper["tabindex"] = "0"
|
|
28
|
+
caption = table.at_css("caption")&.text.to_s.strip
|
|
29
|
+
wrapper["aria-label"] = caption.empty? ? "#{label} #{index + 1}" : caption
|
|
30
|
+
table.add_previous_sibling(wrapper)
|
|
31
|
+
wrapper.add_child(table)
|
|
32
|
+
end
|
|
33
|
+
document.content = html.to_html
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Jekyll::Hooks.register %i[pages documents], :post_convert do |document|
|
|
39
|
+
Datalog::ResponsiveContent.process(document)
|
|
40
|
+
end
|
data/_plugins/revisions.rb
CHANGED
data/_plugins/scholarly.rb
CHANGED
|
@@ -40,6 +40,11 @@ module Datalog
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
module ScholarlyFilters
|
|
43
|
+
# JSON embedded in a script must not contain an HTML closing tag.
|
|
44
|
+
def jsonify_script(value)
|
|
45
|
+
jsonify(value).gsub("<", '\\u003c').gsub("\u2028", '\\u2028').gsub("\u2029", '\\u2029')
|
|
46
|
+
end
|
|
47
|
+
|
|
43
48
|
# A Liquid filter's name cannot end with "?".
|
|
44
49
|
def scholarly(page) # rubocop:disable Naming/PredicateMethod
|
|
45
50
|
Scholarly.scholarly?(page, @context["site"])
|
data/_plugins/statements.rb
CHANGED
|
@@ -28,7 +28,7 @@ module Datalog
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def render(context)
|
|
31
|
-
attributes = References.attributes(@markup, context)
|
|
31
|
+
attributes = References.attributes(@markup, context, @kind)
|
|
32
32
|
id = References.validate_id(attributes["id"], @kind)
|
|
33
33
|
custom = attributes["label"]
|
|
34
34
|
References.validate_label(custom, @kind)
|
|
@@ -52,7 +52,7 @@ module Datalog
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def render(context)
|
|
55
|
-
attributes = References.attributes(@markup, context)
|
|
55
|
+
attributes = References.attributes(@markup, context, "proof")
|
|
56
56
|
target = attributes["for"]
|
|
57
57
|
body = References.markdown(context, super)
|
|
58
58
|
heading_id = "proof-#{target ? References.validate_id(target, 'proof') : Statements.next_proof(context)}"
|
data/_sass/_base.scss
CHANGED
data/_sass/_layout.scss
CHANGED
|
@@ -62,7 +62,8 @@ body.dark-mode .page-meta {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
.package-docs__sidebar,
|
|
66
|
+
.notebook-article__sidebar {
|
|
66
67
|
position: sticky;
|
|
67
68
|
top: 6.5rem;
|
|
68
69
|
}
|
|
@@ -1154,6 +1155,22 @@ body.dark-mode .post-category {
|
|
|
1154
1155
|
}
|
|
1155
1156
|
}
|
|
1156
1157
|
|
|
1158
|
+
.post-content,
|
|
1159
|
+
.page-content {
|
|
1160
|
+
min-width: 0;
|
|
1161
|
+
|
|
1162
|
+
p, li, a {
|
|
1163
|
+
overflow-wrap: anywhere;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
.content-table {
|
|
1169
|
+
max-width: 100%;
|
|
1170
|
+
min-width: 0;
|
|
1171
|
+
overflow-x: auto;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1157
1174
|
body.dark-mode .post-content {
|
|
1158
1175
|
blockquote {
|
|
1159
1176
|
border-left-color: $dark-accent-primary;
|
data/_sass/_mathematical.scss
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
background: rgba($color-neutral-100, 0.9);
|
|
13
13
|
box-shadow: 0 12px 30px rgba($color-neutral-900, 0.08);
|
|
14
14
|
display: grid;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
max-width: 100%;
|
|
17
|
+
overflow-x: auto;
|
|
15
18
|
gap: map.get($spacing, 3);
|
|
16
19
|
transition: border-color $transition-snappy, box-shadow $transition-snappy, background $transition-snappy;
|
|
17
20
|
|
|
@@ -22,7 +25,14 @@
|
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
mjx-container[display='true'] {
|
|
25
|
-
justify-self:
|
|
28
|
+
justify-self: start;
|
|
29
|
+
min-width: max-content;
|
|
30
|
+
margin-inline: auto;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.katex-display {
|
|
34
|
+
min-width: max-content;
|
|
35
|
+
margin-inline: auto;
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
|
data/_sass/_print.scss
CHANGED
|
@@ -83,9 +83,7 @@ body.reading-mode {
|
|
|
83
83
|
.open-science-badges,
|
|
84
84
|
.author-bio,
|
|
85
85
|
.post-related,
|
|
86
|
-
.post-pagination
|
|
87
|
-
.back-to-top,
|
|
88
|
-
[data-back-to-top] {
|
|
86
|
+
.post-pagination {
|
|
89
87
|
display: none !important;
|
|
90
88
|
}
|
|
91
89
|
|
|
@@ -140,12 +138,18 @@ body.reading-mode {
|
|
|
140
138
|
.post-pagination,
|
|
141
139
|
.post-tools,
|
|
142
140
|
.reading-mode-bar,
|
|
143
|
-
.back-to-top,
|
|
144
|
-
[data-back-to-top],
|
|
145
141
|
.code-copy,
|
|
146
142
|
.citation-tools__exports,
|
|
147
143
|
.viz-table-toggle,
|
|
148
|
-
[aria-live]
|
|
144
|
+
.visually-hidden[aria-live],
|
|
145
|
+
.service-form__status,
|
|
146
|
+
.comments-thread__status,
|
|
147
|
+
.reading-data__status,
|
|
148
|
+
.moderation__status,
|
|
149
|
+
.reactions__status,
|
|
150
|
+
.subscription-manage__status,
|
|
151
|
+
.webmentions__status,
|
|
152
|
+
.enhanced-code-block__feedback {
|
|
149
153
|
display: none !important;
|
|
150
154
|
}
|
|
151
155
|
|
|
@@ -262,6 +266,10 @@ body.reading-mode {
|
|
|
262
266
|
overflow: visible !important;
|
|
263
267
|
}
|
|
264
268
|
|
|
269
|
+
.rouge-gutter {
|
|
270
|
+
display: none !important;
|
|
271
|
+
}
|
|
272
|
+
|
|
265
273
|
body.dark-mode .highlight span {
|
|
266
274
|
color: #000 !important;
|
|
267
275
|
background: none !important;
|
|
@@ -271,8 +279,8 @@ body.reading-mode {
|
|
|
271
279
|
iframe,
|
|
272
280
|
canvas,
|
|
273
281
|
video,
|
|
274
|
-
[data-viz-type] >
|
|
275
|
-
.interactive-embed >
|
|
282
|
+
[data-viz-type] > *:not(.viz-table-container),
|
|
283
|
+
.interactive-embed > *:not(.viz-table-container) {
|
|
276
284
|
display: none !important;
|
|
277
285
|
}
|
|
278
286
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as k,b as D}from"./chunk-PATLC23F.js";var B="/capabilities",G="/health",K={401:"unauthorized",403:"forbidden",404:"not_found",409:"conflict",422:"invalid",429:"rate_limited"},J=new Set(["timeout","network","rate_limited","server"]),j=new Set(["GET","HEAD","OPTIONS"]),I={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}}",retry_after:"Try again in {{seconds}} seconds."},a=class extends Error{constructor(r,i,n={}){var u,c,y,p,w,b,g,_;super(i),this.name="ServiceError",this.kind=r,this.status=(u=n.status)!=null?u:null,this.code=(c=n.code)!=null?c:null,this.requestId=(y=n.requestId)!=null?y:null,this.retryAfter=(p=n.retryAfter)!=null?p:null,this.errors=(w=n.errors)!=null?w:null,this.expected=(b=n.expected)!=null?b:null,this.actual=(g=n.actual)!=null?g:null,this.retryable=(_=n.retryable)!=null?_:J.has(r)}};function X(e=globalThis){let r=e.DatalogDynamicServices;return r&&typeof r=="object"?r:{}}function z(e){let r=String(e!=null?e:"1").trim()||"1";return/^v/i.test(r)?`v${r.slice(1)}`:`v${r}`}function W(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 Q(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 V(e,r,i){let n=e.status,u=K[n]||(n>=500?"server":"http"),c=r&&typeof r=="object"?r.error||r:{},y=c&&(c.message||c.title)||`The service answered ${n}`;return new a(u,y,{status:n,code:c&&c.code||null,requestId:i,retryAfter:W(e.headers.get("Retry-After")),errors:c&&c.errors||null})}function ee(e,r={}){let i=e&&e.kind?e.kind:"http",n=r[i]||I[i]||r.http||I.http;if((e==null?void 0:e.retryAfter)!=null&&Number.isFinite(e.retryAfter)){let u=r.retry_after||I.retry_after;n+=` ${u.split("{{seconds}}").join(String(Math.ceil(e.retryAfter)))}`}if(e&&e.requestId){let u=r.reference||I.reference;return`${n} ${u.split("{{id}}").join(e.requestId)}`}return n}function Z(e=X(),r={}){let i=r.fetch||((...t)=>globalThis.fetch(...t)),n=r.delay||(t=>new Promise(s=>setTimeout(s,t))),u=r.document===void 0?globalThis.document:r.document,c=String(e.base_url||"").trim(),y=c.replace(/\/+$/,""),p=z(e.api_version),w=Number(e.timeout_ms)>0?Number(e.timeout_ms):8e3,b=["omit","same-origin","include"].includes(e.credentials)?e.credentials:"omit",g=e.features&&typeof e.features=="object"?e.features:{},_=e.paths&&typeof e.paths=="object"?e.paths:{},$=c!=="",E=null;function C(t){return/^https?:\/\//i.test(t)?t:`${y}/${p}${t.startsWith("/")?t:`/${t}`}`}function U(t){let s=_[t];return typeof s=="string"&&s!==""?s:`/${t}`}async function H(t,s,o){var P,F,M,O;if((P=o.signal)!=null&&P.aborted)throw new a("aborted","The request was cancelled",{retryable:!1});let d=new AbortController,N=setTimeout(()=>d.abort(),w),T=!1,A=()=>{T=!0,d.abort()};(F=o.signal)==null||F.addEventListener("abort",A,{once:!0});let l=k({Accept:"application/json"},o.headers||{}),x={method:t,headers:l,credentials:b,signal:d.signal};if(o.body!==void 0&&(l["Content-Type"]="application/json",x.body=JSON.stringify(o.body)),o.idempotencyKey&&(l["Idempotency-Key"]=o.idempotencyKey),!j.has(t)&&e.csrf_header&&e.csrf_cookie){let S=Q(u,e.csrf_cookie);S&&(l[e.csrf_header]=S)}let f,q;try{f=await i(C(s),x),q=await f.text()}catch(S){throw T?new a("aborted","The request was cancelled",{retryable:!1}):d.signal.aborted?new a("timeout",`No answer within ${w} ms`):new a("network","The service could not be reached")}finally{clearTimeout(N),(M=o.signal)==null||M.removeEventListener("abort",A)}let v=f.headers.get("X-Request-Id")||null,h=null;if(q)try{h=JSON.parse(q)}catch(S){if(f.ok)throw new a("malformed","The service did not answer with JSON",{status:f.status,requestId:v,retryable:!1})}if(v=v||(h==null?void 0:h.request_id)||((O=h==null?void 0:h.error)==null?void 0:O.request_id)||null,!f.ok)throw V(f,h,v);return{data:h,status:f.status,requestId:v,headers:f.headers}}async function m(t,s,o={}){var A;if(!$)throw new a("disabled","Dynamic services are not configured for this site",{retryable:!1});let d=String(t).toUpperCase(),N=(A=o.retries)!=null?A:j.has(d)?2:0,T=0;for(;;)try{return await H(d,s,o)}catch(l){let x=l.retryAfter!==null&&l.retryAfter>10;if(!(l instanceof a)||!l.retryable||T>=N||x)throw l;T+=1,await n(l.retryAfter!==null?l.retryAfter*1e3:300*T)}}function L(){return E||(E=m("GET",B).then(({data:t})=>{var d;let s=String((d=t&&t.api_version)!=null?d:"").replace(/^v/i,""),o=p.slice(1);if(s!==o)throw new a("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 Y(t){if(!$)throw new a("disabled","Dynamic services are not configured for this site",{retryable:!1});if(g[t]===!1)throw new a("disabled",`${t} is off in this site's settings`,{retryable:!1});let s=await L();if(!s||!s.features||!s.features[t])throw new a("unsupported",`The service does not offer ${t}`,{retryable:!1});return!0}return{enabled:$,base:y,version:p,timeout:w,credentials:b,urlFor:C,pathFor:U,request:m,get:(t,s)=>m("GET",t,s),post:(t,s,o={})=>m("POST",t,D(k({},o),{body:s})),patch:(t,s,o={})=>m("PATCH",t,D(k({},o),{body:s})),delete:(t,s)=>m("DELETE",t,s),capabilities:L,feature:Y,health:()=>m("GET",G).then(({data:t})=>t)}}var R=null;function te(){return R||(R=Z()),R}export{ee as a,Z as b,te as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as c}from"./chunk-VZ5WKQVA.js";var b=["idle","pending","success","invalid","error","disabled"];function g(r=null){let t=new Map,i=()=>t.clear();return r&&["input","change","reset"].forEach(e=>r.addEventListener(e,i)),{key(e,n=""){var a,o,d;let s=JSON.stringify(e);if(((a=t.get(n))==null?void 0:a.fingerprint)!==s){let u=((d=(o=globalThis.crypto)==null?void 0:o.randomUUID)==null?void 0:d.call(o))||`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;t.set(n,{fingerprint:s,key:u})}return t.get(n).key},clear(e=""){t.delete(e)},reset:i}}function S(r,t,i,e={}){let n=null;return()=>(n||(n=r.feature(t).then(s=>(i.dataset.state==="error"&&l(i,"idle"),s)).catch(s=>{throw n=null,["disabled","unsupported","version"].includes(s.kind)?l(i,"disabled",c(s,e)):h(i,s,e),s})),n)}function f(r,t){let i=r.elements.namedItem(t);return i?typeof i.setAttribute=="function"?[i]:Array.from(i):[]}function y(r){r.querySelectorAll("[aria-invalid]").forEach(t=>{t.removeAttribute("aria-invalid");let i=(t.getAttribute("aria-describedby")||"").split(/\s+/).filter(e=>e&&!e.endsWith("-error")).join(" ");i?t.setAttribute("aria-describedby",i):t.removeAttribute("aria-describedby")}),r.querySelectorAll("[data-error-for]").forEach(t=>{t.textContent="",t.hidden=!0})}function p(r,t){let i=0,e=null;return Object.keys(t||{}).forEach(n=>{let s=Array.isArray(t[n])?t[n].join(" "):String(t[n]),a=r.querySelector(`[data-error-for="${n}"]`);a&&(a.textContent=s,a.hidden=!1,a.id||(a.id=`${r.id||"form"}-${n}-error`)),f(r,n).forEach(o=>{if(o.setAttribute("aria-invalid","true"),a){let d=(o.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean);d.includes(a.id)||d.push(a.id),o.setAttribute("aria-describedby",d.join(" "))}e=e||o,i+=1})}),e&&typeof e.focus=="function"&&e.focus(),i}function l(r,t,i="",e=null){r.dataset.state=b.includes(t)?t:"idle";let n=t==="pending";r.setAttribute("aria-busy",n?"true":"false"),r.querySelectorAll("button[type=submit], [data-form-submit]").forEach(a=>{a.disabled=n||t==="disabled"}),r.querySelectorAll("fieldset").forEach(a=>{a.disabled=t==="disabled"});let s=r.querySelector("[data-form-status]");s&&(s.setAttribute("role",t==="error"||t==="invalid"?"alert":"status"),s.textContent=i,s.hidden=i===""),y(r),t==="invalid"&&e&&p(r,e)}function v(r){let t={};return new FormData(r).forEach((i,e)=>{let n=typeof i=="string"?i.trim():i;e in t?t[e]=[].concat(t[e],n):t[e]=n}),t}function h(r,t,i={}){let e=c(t,i);t&&t.kind==="invalid"?l(r,"invalid",e,t.errors||null):l(r,"error",e)}export{g as a,S as b,l as c,v as d,h as e};
|
data/assets/js/dist/comments.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
`).forEach((
|
|
1
|
+
import{a as P,c as x,d as V,e as W}from"./chunks/chunk-WIRUK3OZ.js";import{a as L,b as J,c as K}from"./chunks/chunk-VZ5WKQVA.js";import{a as F,b as I}from"./chunks/chunk-PATLC23F.js";var R="comments",ee=3,Y=/^https?:\/\//i,te=new Set(["disabled","unsupported","version"]);function ne(e,t){let n=e.querySelector(t);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(a){return{}}}function re(e,t){return Object.keys(t).reduce((n,a)=>n.split(`{{${a}}}`).join(t[a]),e)}function ae(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return String(e||"");try{return n.toLocaleString(t||void 0,{dateStyle:"medium",timeStyle:"short"})}catch(a){return n.toISOString()}}function se(e,t=!0){let n=Array.isArray(e)?e.filter(i=>i&&typeof i=="object"):[],a=new Map;n.forEach(i=>a.set(String(i.id),{comment:i,replies:[]}));let f=[];a.forEach(i=>{let s=i.comment.parent_id,p=t&&s!==null&&s!==void 0?a.get(String(s)):null;p&&p!==i?p.replies.push(i):f.push(i)});let m=(i,s)=>(Date.parse(i.comment.created_at)||0)-(Date.parse(s.comment.created_at)||0),g=i=>(i.sort(m),i.forEach(s=>g(s.replies)),i);return g(f)}function z(e,t,n={}){let{labels:a={},lang:f,replies:m=!1,onReply:g}=n,i=t.status==="pending",s=e.createElement("li");s.className=i?"comment comment--pending":"comment",t.id!==null&&t.id!==void 0&&(s.id=`comment-${t.id}`);let p=e.createElement("article");p.className="comment__card";let _=e.createElement("header");_.className="comment__meta";let h=t.author&&typeof t.author=="object"?t.author:{},y=String(h.name||"").trim()||a.anonymous||"Anonymous",o;if(Y.test(String(h.url||""))?(o=e.createElement("a"),o.href=h.url,o.rel="nofollow noopener ugc"):o=e.createElement("span"),o.className="comment__author",o.textContent=y,_.appendChild(o),t.created_at){let c=e.createElement("time");c.className="comment__time",c.dateTime=String(t.created_at),c.textContent=ae(t.created_at,f),_.appendChild(c)}if(i){let c=e.createElement("span");c.className="comment__pending",c.textContent=a.pending||"Awaiting moderation",_.appendChild(c)}p.appendChild(_);let C=e.createElement("div");if(C.className="comment__body",String(t.body||"").split(/\n{2,}/).forEach(c=>{let b=e.createElement("p");c.split(`
|
|
2
|
+
`).forEach((N,E)=>{E>0&&b.appendChild(e.createElement("br")),b.appendChild(e.createTextNode(N))}),C.appendChild(b)}),p.appendChild(C),m&&g&&!i&&t.id!==null&&t.id!==void 0){let c=e.createElement("button");c.type="button",c.className="comment__reply post-tool",c.textContent=a.reply||"Reply",c.addEventListener("click",()=>g(t)),p.appendChild(c)}return s.appendChild(p),s}function G(e,t){let n=t.querySelector(":scope > .comments-thread__replies");return n||(n=e.createElement("ol"),n.className="comments-thread__replies",t.appendChild(n)),n}function H(e,t,n,a){n.forEach(f=>{let m=z(e,f.comment,a);f.replies.length>0&&H(e,G(e,m),f.replies,a),t.appendChild(m)})}function ie(e,t){let n={name:e.name||""};return e.email&&(n.email=e.email),e.url&&(n.url=e.url),{path:t,parent_id:e.parent_id||null,author:n,body:e.body||""}}function oe(e,t,n={}){let a={};return e.author.name||(a.name=n.name_required||"Say who you are."),e.author.email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.author.email)&&(a.email=n.email_invalid||"That does not look like an email address."),e.author.url&&!Y.test(e.author.url)&&(a.url=n.url_invalid||"A website address starts with http:// or https://."),e.body.trim().length<ee&&(a.body=n.body_short||"Say a little more."),t.website&&(a.website="spam"),Object.keys(a).length>0?a:null}function le(e,t={}){let n=e.ownerDocument,a=t.window||n.defaultView,f=e.dataset.commentsEndpoint||"",m=t.client||(f?J(I(F({},a&&a.DatalogDynamicServices||{}),{base_url:f})):K()),g=e.dataset.commentsPath||"/",i=e.dataset.commentsReplies!=="false",s=ne(e,"[data-comments-labels]"),p=s.errors||{},_=n.documentElement.lang||void 0,h=e.querySelector("[data-comments-status]"),y=e.querySelector("[data-comments-list]"),o=e.querySelector("form"),C=P(o),c=o?o.elements.namedItem("parent_id"):null,b=e.querySelector("[data-comments-replying]"),N=e.querySelector("[data-comments-replying-to]"),E=null,D=!1,j=!1,O=new Map,v=(r,d="",u={})=>{if(e.dataset.state=r,!!h&&(h.textContent=d,h.hidden=d==="",h.setAttribute("role",u.alert?"alert":"status"),u.retry)){let l=n.createElement("button");l.type="button",l.className="post-tool",l.setAttribute("data-comments-retry",""),l.textContent=s.retry||"Try again",l.addEventListener("click",()=>A.load()),h.appendChild(n.createTextNode(" ")),h.appendChild(l)}},k=()=>(E||(E=m.feature(R).catch(r=>{throw E=null,r})),E),$=r=>{if(!c)return;if(c.value=String(r.id),N){let u=r.author&&r.author.name?r.author.name:s.anonymous||"Anonymous";N.textContent=re(s.replying_to||"Replying to {{name}}",{name:u})}b&&(b.hidden=!1);let d=o.elements.namedItem("body");d&&typeof d.focus=="function"&&d.focus()},T=()=>{c&&(c.value=""),b&&(b.hidden=!0)},M={labels:s,lang:_,replies:i,onReply:$},Z=(r,d)=>{let u=r.id?n.getElementById(r.id):null;if(u&&y.contains(u)){let S=u.querySelector(":scope > .comments-thread__replies");S&&r.appendChild(S),u.replaceWith(r);return}let l=i&&d!==null&&d!==void 0?y.querySelector(`#comment-${CSS.escape(String(d))}`):null;(l?G(n,l):y).appendChild(r),y.hidden=!1,e.dataset.state==="empty"&&v("loaded")},A={root:e,form:o,reply:$,cancelReply:T,async load(){if(D)return null;D=!0,v("loading",s.loading||"");try{await k();let r=await m.get(`${m.pathFor(R)}?path=${encodeURIComponent(g)}`),d=r&&r.data&&Array.isArray(r.data.comments)?[...r.data.comments]:[];d.forEach(l=>{(l==null?void 0:l.id)!=null&&O.delete(String(l.id))}),d.push(...O.values()),y.textContent="";let u=se(d,i);return H(n,y,u,M),y.hidden=u.length===0,v(u.length>0?"loaded":"empty",u.length>0?"":s.empty||""),j=!0,d}catch(r){return r&&te.has(r.kind)?(v("disabled",L(r,p)),o&&(o.hidden=!0)):v("error",L(r,p),{alert:!0,retry:!0}),null}finally{D=!1}},async submit(){let r=V(o),d=ie(r,g),u=oe(d,r,s);if(u)return u.website?(x(o,"success",s.posted_pending||""),null):(x(o,"invalid",p.invalid||"",u),null);x(o,"pending",s.sending||"");try{await k();let l=await m.post(m.pathFor(R),d,{idempotencyKey:C.key(d)}),S=l&&l.data&&typeof l.data=="object"?l.data:{},w=S.comment&&typeof S.comment=="object"?S.comment:null,B=S.status==="pending"||w!==null&&w.status==="pending";if(w){let q=B?I(F({},w),{status:"pending"}):w;q.id!=null&&O.set(String(q.id),q),Z(z(n,q,M),w.parent_id)}return C.clear(),o.reset(),T(),x(o,"success",B?s.posted_pending||"":s.posted||""),l}catch(l){return W(o,l,p),null}}};o&&(o.addEventListener("submit",r=>{r.preventDefault(),A.submit()}),e.querySelectorAll("[data-comments-cancel-reply]").forEach(r=>{r.addEventListener("click",T)}));let U=()=>{j||A.load()};if(t.immediate||!a||typeof a.IntersectionObserver!="function")U();else{let r=new a.IntersectionObserver(d=>{d.some(u=>u.isIntersecting)&&(r.disconnect(),U())},{rootMargin:"400px 0px"});r.observe(e)}return A}function Q(e=document){return Array.from(e.querySelectorAll("[data-comments-thread]")).map(t=>le(t))}function X(){Q(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",X,{once:!0}):X();
|
data/assets/js/dist/contact.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as g,b as v,c as a,d as S,e as j}from"./chunks/chunk-WIRUK3OZ.js";import{c as h}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var w="contact",x=20;function C(t,r){let n=t.querySelector(r);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(e){return{}}}function _(t,r){let n={category:t.category||"other",name:t.name||"",email:t.email||"",subject:t.subject||"",message:t.message||"",source_url:r};return t.affiliation&&(n.affiliation=t.affiliation),n}function k(t,r,n={}){let e={};return t.name||(e.name=n.name_required||"Say who you are."),/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.email)||(e.email=n.email_invalid||"That does not look like an email address."),t.subject||(e.subject=n.subject_required||"Give the message a subject."),t.message.length<x&&(e.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(x))),r.website&&(e.website="spam"),Object.keys(e).length>0?e:null}function M(t,r={}){let n=r.client||h(),e=t.querySelector("form"),o=C(t,"[data-contact-labels]"),q=C(t,"[data-contact-prompts]"),s=o.errors||{},A=t.dataset.sourceUrl||"",c=e.elements.namedItem("category"),i=t.querySelector("[data-contact-hint]"),L=i?i.textContent:"",b=g(e),m=()=>{i&&(i.textContent=c&&q[c.value]||L)};if(c&&(c.addEventListener("change",m),m()),!n.enabled)return a(e,"disabled",s.disabled||""),{form:e,available:!1,submit:async()=>null};let p=v(n,w,e,s);e.addEventListener("focusin",()=>p().catch(()=>{}),{once:!0});let y={form:e,available:!0,async submit(){let u=S(e),d=_(u,A),f=k(d,u,o);if(f)return f.website?(a(e,"success",o.success||""),null):(a(e,"invalid",s.invalid||"",f),null);a(e,"pending",o.pending||"");try{await p()}catch(l){return null}try{let l=await n.post(n.pathFor(w),d,{idempotencyKey:b.key(d)});return b.clear(),e.reset(),m(),a(e,"success",o.success||""),l}catch(l){return j(e,l,s),null}}};return e.addEventListener("submit",u=>{u.preventDefault(),y.submit()}),y}function E(t=document){return Array.from(t.querySelectorAll("[data-contact-form]")).map(r=>M(r))}function F(){E(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",F,{once:!0}):F();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b as
|
|
1
|
+
import{a as C,b as w,c as s,d as E,e as A}from"./chunks/chunk-WIRUK3OZ.js";import{c as q}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var _="corrections",L=20,k=500;function D(e){let t=e.querySelector("[data-correction-labels]");if(!t)return{};try{return JSON.parse(t.textContent)||{}}catch(n){return{}}}function O(e,t){!e||!t||t.querySelectorAll("h2[id], h3[id]").forEach(n=>{let o=e.ownerDocument.createElement("option");o.value=n.id,o.textContent=n.textContent.trim(),e.appendChild(o)})}function F(e,t){let n=e.getSelection&&e.getSelection();if(!n||n.isCollapsed||n.rangeCount===0||!t)return"";let o=n.getRangeAt(0);return t.contains(o.commonAncestorContainer)?n.toString().trim().slice(0,k):""}function T(e,t){let n={category:e.category||"other",message:e.message||"",article:{url:t.url,title:t.title}};return e.section&&(n.section=e.section),e.contact_email&&(n.contact_email=e.contact_email),e.quote&&(n.quote=e.quote),n}function I(e,t,n={}){let o={};return e.message.length<L&&(o.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(L))),e.contact_email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.contact_email)&&(o.contact_email=n.email_invalid||"That does not look like an email address."),t.website&&(o.website="spam"),Object.keys(o).length>0?o:null}function M(e,t={}){var x;let n=e.ownerDocument,o=t.window||n.defaultView,u=t.client||q(),y=t.content===void 0?n.querySelector(".post-content"):t.content,r=e.querySelector("form"),l=D(e),m=l.errors||{},R={url:e.dataset.articleUrl||"",title:e.dataset.articleTitle||""},d=r.elements.namedItem("quote"),a=e.querySelector("[data-correction-quote]"),b=C(r);if(O(r.elements.namedItem("section"),y),!u.enabled)return s(r,"disabled",m.disabled||""),{form:r,available:!1,submit:async()=>null};let h=w(u,_,r,m),f=e.tagName==="DETAILS"?e:e.querySelector("details");if(f){let i="";(x=f.querySelector("summary"))==null||x.addEventListener("pointerdown",()=>{i=F(o,y)}),f.addEventListener("toggle",()=>{if(!f.open)return;let c=F(o,y)||i;i="",d&&c&&(d.value=c,a&&(a.textContent=c,a.hidden=!1)),h().catch(()=>{})})}let v={form:r,available:!0,async submit(){let i=E(r),c=T(i,R),g=I(c,i,l);if(g)return g.website?(s(r,"success",l.success||""),null):(s(r,"invalid",m.invalid||"",g),null);s(r,"pending",l.pending||"");try{await h()}catch(p){return null}try{let p=await u.post(u.pathFor(_),c,{idempotencyKey:b.key(c)});return b.clear(),r.reset(),d&&(d.value=""),a&&(a.textContent="",a.hidden=!0),s(r,"success",l.success||""),p}catch(p){return A(r,p,m),null}}};return r.addEventListener("submit",i=>{i.preventDefault(),v.submit()}),v}function S(e=document){return Array.from(e.querySelectorAll("[data-correction-report]")).map(t=>M(t))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>S()):S();export{S as initCorrectionReports};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as H}from"./chunks/chunk-WIRUK3OZ.js";import{a as T,b as W}from"./chunks/chunk-VZ5WKQVA.js";import{a as O,b as B}from"./chunks/chunk-PATLC23F.js";var P="moderation",et=["comment","correction","abuse"],nt={approve:"approved",spam:"spam",hide:"hidden",delete:"deleted",reviewed:"reviewed",accept:"accepted",reject:"rejected",resolve:"resolved",dismiss:"dismissed"},ot={comment:{pending:["approve","spam","delete"],approved:["hide","spam","delete"],spam:["approve","delete"],hidden:["approve","delete"]},correction:{new:["reviewed","accept","reject"],reviewed:["accept","reject"],accepted:["resolve","reject"]},abuse:{open:["dismiss","hide","delete"]}},at={comment:["pending"],correction:["new","reviewed","accepted"],abuse:["open"]},Y=/^https?:\/\//i,rt=new Set(["unauthorized","forbidden"]),it=new Set(["disabled","unsupported","version"]);function st(t,e){let i=t.querySelector(e);if(!i)return{};try{return JSON.parse(i.textContent)||{}}catch(s){return{}}}function r(t){return typeof t=="string"?t:""}function G(t){return(ot[t.type]||{})[t.status]||[]}function J(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=r(t.type).toLowerCase();if(t.id===null||t.id===void 0||!et.includes(e))return null;let i=t.author&&typeof t.author=="object"?t.author:{},s=t.context&&typeof t.context=="object"?t.context:{},c=s.parent&&typeof s.parent=="object"?s.parent:null,u=t.resolution&&typeof t.resolution=="object"?t.resolution:{},_=Array.isArray(t.history)?t.history:[];return{id:String(t.id),type:e,status:r(t.status).toLowerCase(),created_at:r(t.created_at),path:r(t.path),title:r(t.title),author:{name:r(i.name),email:r(i.email)},body:r(t.body)||r(t.message),category:r(t.category),section:r(t.section),quote:r(t.quote),reason:r(t.reason),parent:c?{author:r(c.author&&c.author.name),body:r(c.body)}:null,link:Y.test(r(u.url))?u.url:"",history:_.filter(g=>g&&typeof g=="object").map(g=>({action:r(g.action),at:r(g.at),moderator:r(g.moderator),note:r(g.note)}))}}function lt(t={},e=""){let i=new URLSearchParams;["type","status","path","category","since","q"].forEach(c=>{let u=r(t[c]).trim();u&&u!=="all"&&i.set(c,u)}),e&&i.set("cursor",e);let s=i.toString();return s?`?${s}`:""}function K(t,e){let i=new Date(t);if(Number.isNaN(i.getTime()))return t;try{return i.toLocaleString(e||void 0,{dateStyle:"medium",timeStyle:"short"})}catch(s){return i.toISOString()}}function o(t,e,i,s,c){let u=t.createElement(i);return s&&(u.className=s),c!==void 0&&(u.textContent=c),e.appendChild(u),u}function V(t,e,i={}){let{labels:s={},lang:c,siteUrl:u="",onAction:_}=i,g=s.types||{},h=s.statuses||{},j=s.actions||{},C=t.createElement("li");C.className=`moderation-item moderation-item--${e.type}`,C.dataset.itemId=e.id,C.dataset.itemStatus=e.status;let b=o(t,C,"article","moderation-item__card"),x=o(t,b,"header","moderation-item__meta");if(o(t,x,"span","moderation-item__type",g[e.type]||e.type),o(t,x,"span","moderation-item__status",h[e.status]||e.status),e.category&&o(t,x,"span","moderation-item__category",(s.categories||{})[e.category]||e.category),e.created_at){let l=o(t,x,"time","moderation-item__time",K(e.created_at,c));l.dateTime=e.created_at}if(e.path){let l=o(t,b,"p","moderation-item__where"),d=o(t,l,"a","",e.title||e.path);e.path.startsWith("/")&&!e.path.startsWith("//")&&(d.href=`${u.replace(/\/+$/,"")}${e.path}${e.section?`#${encodeURIComponent(e.section)}`:""}`)}if((e.author.name||e.author.email)&&o(t,b,"p","moderation-item__author",[e.author.name,e.author.email].filter(Boolean).join(" \xB7 ")),e.parent){let l=o(t,b,"blockquote","moderation-item__context");o(t,l,"p","",`${s.in_reply_to||"In reply to"} ${e.parent.author||""}`.trim()),o(t,l,"p","",e.parent.body)}e.quote&&o(t,b,"blockquote","moderation-item__quote",e.quote),e.reason&&o(t,b,"p","moderation-item__reason",e.reason);let v=o(t,b,"div","moderation-item__body");if(e.body.split(/\n{2,}/).forEach(l=>o(t,v,"p","",l)),e.link){let l=o(t,b,"p","moderation-item__link"),d=o(t,l,"a","",e.link);d.href=e.link,d.rel="noopener"}if(e.history.length>0){let l=o(t,b,"ol","moderation-item__history");e.history.forEach(d=>{let E=[j[d.action]||d.action,d.moderator,d.at?K(d.at,c):"",d.note].filter(Boolean).join(" \xB7 ");o(t,l,"li","",E)})}let A=G(e);if(A.length>0&&_){let l=o(t,b,"div","moderation-item__actions"),d=`moderation-note-${e.id}`,E=o(t,l,"label","moderation-item__note-label",s.note||"Note");E.htmlFor=d;let q=o(t,l,"input","moderation-item__note");q.type="text",q.id=d,q.name="note";let k=null;if(A.includes("resolve")){let m=`moderation-link-${e.id}`,L=o(t,l,"label","moderation-item__note-label",s.link||"Issue, pull request or revision");L.htmlFor=m,k=o(t,l,"input","moderation-item__note"),k.type="url",k.id=m,k.name="link"}let U=o(t,l,"div","moderation-item__buttons");A.forEach(m=>{let L=o(t,U,"button","post-tool",j[m]||m);L.type="button",L.dataset.moderationAction=m,L.addEventListener("click",()=>_(e,m,{note:q.value.trim(),link:k?k.value.trim():""}))})}let S=o(t,b,"p","moderation-item__message");return S.setAttribute("data-item-message",""),S.setAttribute("role","status"),S.hidden=!0,C}function dt(t,e={}){let i=t.ownerDocument,s=i.defaultView,c=s&&s.DatalogDynamicServices||{},u=t.dataset.moderationEndpoint||"",_=e.client||W(B(O({},c),{features:u?{}:c.features,base_url:u||c.base_url||"",credentials:t.dataset.moderationCredentials||"include"})),g=H(),h=st(t,"[data-moderation-labels]"),j=h.errors||{},C=i.documentElement.lang||void 0,b=t.dataset.moderationSite||"",x=t.querySelector("[data-moderation-status]"),v=t.querySelector("[data-moderation-list]"),A=t.querySelector("[data-moderation-filters]"),S=t.querySelector("[data-moderation-more]"),l=t.querySelector("[data-moderation-sign-in]"),d="",E=!1,q=0,k={},U=0,m=(n,a="",y=!1)=>{t.dataset.state=n,t.setAttribute("aria-busy",n==="loading"?"true":"false"),x&&(x.textContent=a,x.hidden=a==="",x.setAttribute("role",y?"alert":"status")),l&&(l.hidden=n!=="unauthorized")},L=()=>{let n={};return A&&new FormData(A).forEach((a,y)=>{n[y]=String(a)}),n},Q=n=>{v.textContent="",S&&(S.hidden=!0),n&&n.kind==="unauthorized"?m("unauthorized",h.unauthorized||"",!0):n&&n.kind==="forbidden"?m("forbidden",h.forbidden||"",!0):n&&it.has(n.kind)?m("disabled",T(n,j)):m("error",T(n,j),!0)},N=(n,a,y=!1)=>{let f=n.querySelector("[data-item-message]");f&&(f.textContent=a,f.hidden=a==="",f.setAttribute("role",y?"alert":"status"))},tt=n=>{let a=r(k.status).trim();return a?a===n.status:(at[n.type]||[]).includes(n.status)},w={root:t,client:_,async load(n=!1,a=n?k:L()){if(E&&n)return null;let y=++q,f=U;E=!0,n||(d=""),m("loading",h.loading||"");try{await _.feature(P);let I=await _.get(`${_.pathFor(P)}/items${lt(a,n?d:"")}`);if(y!==q)return null;if(f!==U)return E=!1,w.load(n,a);k=a;let $=I&&I.data&&typeof I.data=="object"?I.data:{},p=(Array.isArray($.items)?$.items:[]).map(J).filter(Boolean);n||(v.textContent=""),p.forEach(F=>v.appendChild(V(i,F,{labels:h,lang:C,siteUrl:b,onAction:w.act}))),d=r($.next_cursor),S&&(S.hidden=d==="");let D=v.children.length;return m(D>0?"loaded":"empty",D>0?"":h.empty||""),p}catch(I){return y!==q?null:f!==U?(E=!1,w.load(n,a)):(Q(I),null)}finally{y===q&&(E=!1)}},async act(n,a,y={}){let f=Array.from(v.children).find(p=>p.dataset.itemId===n.id);if(!f||!G(n).includes(a))return null;if(a==="resolve"&&!Y.test(y.link||""))return N(f,h.link_required||"",!0),null;let I=Array.from(f.querySelectorAll("button"));I.forEach(p=>{p.disabled=!0}),f.setAttribute("aria-busy","true"),N(f,h.working||"");let $={action:a};y.note&&($.note=y.note),a==="resolve"&&($.link=y.link);try{let p=await _.post(`${_.pathFor(P)}/items/${encodeURIComponent(n.id)}/actions`,$,{idempotencyKey:g.key($,n.id)});g.clear(n.id),U+=1;let F=J(p&&p.data&&p.data.item)||B(O({},n),{status:nt[a]||n.status}),z=Array.from(v.children).find(R=>R.dataset.itemId===n.id);if(!z)return F;let M=(h.done||"{{action}}").split("{{action}}").join((h.actions||{})[a]||a);if(tt(F)){let R=V(i,F,{labels:h,lang:C,siteUrl:b,onAction:w.act});v.replaceChild(R,z),N(R,M)}else z.remove(),m(v.children.length>0?"loaded":"empty",v.children.length>0?M:`${M} ${h.empty||""}`.trim());return F}catch(p){return p&&rt.has(p.kind)?Q(p):(f.setAttribute("aria-busy","false"),I.forEach(D=>{D.disabled=!1}),N(f,T(p,j),!0)),null}}};return A&&(A.addEventListener("submit",n=>{n.preventDefault(),w.load()}),A.addEventListener("reset",()=>{Promise.resolve().then(()=>w.load())})),S&&S.addEventListener("click",()=>w.load(!0)),_.enabled?(w.load(),w):(m("disabled",j.disabled||""),w)}function X(t=document){return Array.from(t.querySelectorAll("[data-moderation-inbox]")).map(e=>dt(e))}function Z(){X(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Z,{once:!0}):Z();
|
data/assets/js/dist/reactions.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as L}from"./chunks/chunk-WIRUK3OZ.js";import{a as A,c as j}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var x="reactions",M="datalog-reaction:",N=new Set(["disabled","unsupported","version"]);function $(n,r){let s=n.querySelector(r);if(!s)return{};try{return JSON.parse(s.textContent)||{}}catch(o){return{}}}function B(n,r){try{return n?n.getItem(M+r):null}catch(s){return null}}function G(n,r,s){try{n&&n.setItem(M+r,s)}catch(o){}}function D(n){let r=n&&typeof n=="object"?n.counts:null;if(!r||typeof r!="object"||Array.isArray(r))return null;let s={};return Object.keys(r).forEach(o=>{let c=r[o];Number.isInteger(c)&&c>=0&&(s[o]=c)}),s}function J(n,r={}){let s=n.ownerDocument,o=r.window||s.defaultView,c=r.client||j(),E=r.storage===void 0?K(o):r.storage,d=n.dataset.reactionsPath||"/",U=n.dataset.reactionsCounts!=="false",C=L(),f=$(n,"[data-reactions-labels]"),I=f.errors||{},b=n.querySelector("[data-reactions-status]"),i=Array.from(n.querySelectorAll("[data-reaction]")),m=null,p=!1,h=!1,y=B(E,d),g=0,u=(e,t=!1)=>{b&&(b.textContent=e,b.hidden=e==="",b.setAttribute("role",t?"alert":"status"))},l=e=>{n.dataset.state=e},w=()=>{i.forEach(e=>{e.setAttribute("aria-pressed",e.dataset.reaction===y?"true":"false")})},S=e=>{i.forEach(t=>{let a=t.querySelector("[data-reaction-count]");if(!a)return;let F=U&&e?e[t.dataset.reaction]:void 0;Number.isInteger(F)?(a.textContent=String(F),a.hidden=!1):(a.textContent="",a.hidden=!0)})},O=e=>{n.setAttribute("aria-busy",e?"true":"false"),i.forEach(t=>{t.disabled=e})},q=e=>{l("disabled"),S(null),i.forEach(t=>{t.disabled=!0}),u(A(e,I))},R=()=>(m||(m=c.feature(x).catch(e=>{throw m=null,e})),m),v={root:n,get selected(){return y},async load(){let e=++g;l("loading");try{await R();let t=await c.get(`${c.pathFor(x)}?path=${encodeURIComponent(d)}`);if(e!==g||h)return null;let a=D(t&&t.data);return S(a),l("loaded"),p=!0,a}catch(t){return e!==g||h||(t&&N.has(t.kind)?q(t):(S(null),l("unavailable"))),null}},async react(e){if(h||!i.some(t=>t.dataset.reaction===e))return null;if(e===y)return u(f.already||""),null;h=!0,g+=1,O(!0),l("pending"),u(f.sending||"");try{await R();let t=await c.post(c.pathFor(x),{path:d,reaction:e},{idempotencyKey:C.key({path:d,reaction:e})});C.clear(),y=e,G(E,d,e),w();let a=D(t&&t.data);return a&&S(a),l("selected"),u(f.thanks||""),t}catch(t){return t&&N.has(t.kind)?q(t):t&&t.kind==="conflict"?(w(),l(y?"selected":p?"loaded":"unavailable"),u(f.already||"")):(l(p?"loaded":"unavailable"),u(A(t,I),!0)),null}finally{h=!1,n.dataset.state!=="disabled"&&O(!1)}}};w(),i.forEach(e=>{e.addEventListener("click",()=>{v.react(e.dataset.reaction)})});let k=()=>{p||v.load()};if(r.immediate||!o||typeof o.IntersectionObserver!="function")k();else{let e=new o.IntersectionObserver(t=>{t.some(a=>a.isIntersecting)&&(e.disconnect(),k())},{rootMargin:"400px 0px"});e.observe(n)}return v}function K(n){try{return n&&n.localStorage?n.localStorage:null}catch(r){return null}}function P(n=document){return Array.from(n.querySelectorAll("[data-reactions]")).map(r=>J(r))}function T(){P(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",T,{once:!0}):T();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as v,b as k}from"./chunks/chunk-PATLC23F.js";var lt=new Set(["SCRIPT","STYLE","TEMPLATE","NOSCRIPT"]),z=3;function F(t){let e=t.ownerDocument,n=[],r="",a=e.createTreeWalker(t,4,{acceptNode(o){return lt.has(o.parentNode&&o.parentNode.nodeName)?2:1}});for(let o=a.nextNode();o;o=a.nextNode())n.push({node:o,start:r.length,end:r.length+o.data.length}),r+=o.data;return{text:r,nodes:n}}function M(t,e){return!!(t.compareDocumentPosition(e)&4)}function J(t,e,n){if(e.nodeType===z){let o=t.nodes.find(i=>i.node===e);return o?o.start+n:0}let r=e.childNodes[n];if(!r){let o=t.nodes.find(i=>!e.contains(i.node)&&M(e,i.node));return o?o.start:t.text.length}let a=t.nodes.find(o=>o.node===r||r.contains(o.node)||M(r,o.node));return a?a.start:t.text.length}function ct(t,e){let n=e.nodeType===z?e.parentNode:e,r=null;return t.querySelectorAll("h2[id], h3[id], h4[id]").forEach(a=>{(a===n||a.contains(n)||M(a,n))&&(r=a.id)}),r}function G(t,e){let n=F(e),r=J(n,t.startContainer,t.startOffset),a=J(n,t.endContainer,t.endOffset);return a<=r?null:{quote:n.text.slice(r,a),prefix:n.text.slice(Math.max(0,r-32),r),suffix:n.text.slice(a,a+32),section:ct(e,t.startContainer)}}function Y(t,e){let n=[],r=t.indexOf(e);for(;r!==-1;)n.push(r),r=t.indexOf(e,r+1);return n}function K(t){let e="",n=[],r=!1;for(let a=0;a<t.length;a+=1){let o=t[a];/\s/.test(o)?r||(e+=" ",n.push(a),r=!0):(e+=o,n.push(a),r=!1)}return{out:e,map:n}}function dt(t,e){let n=0;for(;n<t.length&&n<e.length&&t[t.length-1-n]===e[e.length-1-n];)n+=1;return n}function ut(t,e){let n=0;for(;n<t.length&&n<e.length&&t[n]===e[n];)n+=1;return n}function ft(t,e,n){let r=t.nodes.find(i=>e>=i.start&&e<i.end)||t.nodes.find(i=>e===i.end),a=t.nodes.find(i=>n>i.start&&n<=i.end);if(!r||!a)return null;let o=r.node.ownerDocument.createRange();return o.setStart(r.node,e-r.start),o.setEnd(a.node,n-a.start),o}function I(t,e){if(!e||typeof e.quote!="string"||e.quote==="")return null;let n=F(t),r=Y(n.text,e.quote).map(o=>({start:o,end:o+e.quote.length}));if(r.length===0){let o=K(n.text),i=K(e.quote).out.trim();i&&(r=Y(o.out,i).map(s=>({start:o.map[s],end:o.map[s+i.length-1]+1})))}if(r.length===0)return null;let a=r.map(o=>k(v({},o),{score:dt(n.text.slice(Math.max(0,o.start-32),o.start),e.prefix||"")+ut(n.text.slice(o.end,o.end+32),e.suffix||"")}));return a.sort((o,i)=>i.score-o.score),ft(n,a[0].start,a[0].end)}var pt="datalog-annotation",W="reading-highlight";function ht(t=window){return!!(t&&t.CSS&&"highlights"in t.CSS&&typeof t.Highlight=="function")}function gt(t){t.querySelectorAll(`mark.${W}`).forEach(e=>{let n=e.parentNode;for(;e.firstChild;)n.insertBefore(e.firstChild,e);n.removeChild(e),n.normalize()})}function mt(t,e){let n=t.startContainer.ownerDocument,r=t.commonAncestorContainer,a=[];if(r.nodeType===3)a.push(r);else{let o=n.createTreeWalker(r,4);for(let i=o.nextNode();i;i=o.nextNode())t.intersectsNode(i)&&a.push(i)}a.forEach(o=>{let i=n.createRange();if(i.setStart(o,o===t.startContainer?t.startOffset:0),i.setEnd(o,o===t.endContainer?t.endOffset:o.data.length),i.collapsed)return;let s=n.createElement("mark");s.className=W,s.dataset.annotationId=e,i.surroundContents(s)})}function Q(t,e,n={}){let r=t.ownerDocument.defaultView,a=n.api===void 0?ht(r):n.api,o=[],i=[];gt(t);let s=[];return e.forEach(c=>{let h=I(t,c);h?(o.push(c.id),s.push([c.id,h])):i.push(c.id)}),a?r.CSS.highlights.set(pt,new r.Highlight(...s.map(([,c])=>c))):s.reverse().forEach(([c,h])=>mt(h,c)),{found:o,lost:i}}var O="datalog-reading:";function yt(t=window){try{let e=t.localStorage,n=`${O}probe`;return e.setItem(n,"1"),e.removeItem(n),e}catch(e){return null}}function w(t,e=""){return{article:t,title:e,bookmarked:!1,annotations:[]}}function St(t){return!!(t&&typeof t.id=="string"&&typeof t.quote=="string"&&t.quote.length>0)}function $(t){try{let e=JSON.parse(t);return e&&typeof e=="object"?e:null}catch(e){return null}}function N(t){if(!t||typeof t.article!="string"||t.article==="")return null;let e=w(t.article,typeof t.title=="string"?t.title:"");return e.bookmarked=t.bookmarked===!0,e.annotations=Array.isArray(t.annotations)?t.annotations.filter(St):[],t.progress&&typeof t.progress.ratio=="number"&&(e.progress=t.progress),typeof t.saved_at=="string"&&(e.saved_at=t.saved_at),typeof t.updated_at=="string"&&(e.updated_at=t.updated_at),e}function Z(t=yt()){let e=!!t,n=l=>`${O}${l}`;function r(){let l=[];for(let d=0;d<t.length;d+=1){let p=t.key(d);p&&p.startsWith(O)&&p!==`${O}probe`&&l.push(p)}return l}function a(l){if(!e)return null;try{return N($(t.getItem(n(l))))}catch(d){return null}}function o(l,d){if(!e)return!1;try{let p=N(k(v({},d),{article:l}));return p?(p.updated_at=new Date().toISOString(),t.setItem(n(l),JSON.stringify(p)),!0):!1}catch(p){return!1}}function i(l){if(!e)return!1;try{return t.removeItem(n(l)),!0}catch(d){return!1}}function s(){if(!e)return[];try{return r().map(l=>N($(t.getItem(l)))).filter(Boolean)}catch(l){return[]}}function c(){if(!e)return!1;try{return r().forEach(l=>t.removeItem(l)),!0}catch(l){return!1}}function h(){return JSON.stringify({format:1,exported_at:new Date().toISOString(),articles:s()},null,2)}function m(l){let d=$(l),p=Array.isArray(d)?d:d&&Array.isArray(d.articles)?d.articles:null;if(!p)throw new Error("Not a reading data export");return p.reduce((x,T)=>{let b=N(T);return b&&o(b.article,b)?x+1:x},0)}return{available:e,read:a,write:o,remove:i,all:s,clear:c,exportJSON:h,importJSON:m}}var xt=.4;function Et({scrollY:t,innerHeight:e,contentTop:n,contentHeight:r,headings:a}){let o=t+e*xt,i=r>0?Math.min(1,Math.max(0,(o-n)/r)):0,s=null;return a.forEach(c=>{c.top<=o&&(s=c.id)}),{ratio:Math.round(i*1e3)/1e3,anchor:s}}function tt(t,e,n){return!!(t&&typeof t.ratio=="number"&&t.ratio>=.05&&t.ratio<=.92&&e>n*1.5)}function et({content:t,store:e,article:n,title:r,win:a=window,interval:o=1e3}){let i=null,s=null,c=()=>{let l=t.getBoundingClientRect(),d=Array.from(t.querySelectorAll("h2[id], h3[id], h4[id]")).map(p=>({id:p.id,top:p.getBoundingClientRect().top+a.scrollY}));return Et({scrollY:a.scrollY,innerHeight:a.innerHeight,contentTop:l.top+a.scrollY,contentHeight:l.height,headings:d})},h=()=>{let l=c();if(s&&Math.abs(s.ratio-l.ratio)<.01)return;s=l;let d=e.read(n)||w(n,r);d.title=d.title||r,d.progress=k(v({},l),{updated_at:new Date().toISOString()}),e.write(n,d)},m=()=>{i||(i=a.setTimeout(()=>{i=null,h()},o))};return a.addEventListener("scroll",m,{passive:!0}),{stop(){a.removeEventListener("scroll",m),i&&a.clearTimeout(i)},save:h,snapshot:c}}var vt=new Set(["INPUT","TEXTAREA","SELECT"]);function B(t,e){return Object.keys(e).reduce((n,r)=>n.split(`{{${r}}}`).join(String(e[r])),t||"")}function kt(){let t=globalThis.crypto;return t&&typeof t.randomUUID=="function"?t.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function bt(t){let e=t.activeElement;return!!(e&&(vt.has(e.tagName)||e.isContentEditable))}function nt(t,e){if(!e)return"";let n=t.ownerDocument.getElementById(e);return n&&t.contains(n)?n.textContent.trim():e}function Ct(t,e){let n=t.startContainer.nodeType===3?t.startContainer.parentElement:t.startContainer;n&&typeof n.scrollIntoView=="function"&&n.scrollIntoView({block:"center"});let r=e.getSelection&&e.getSelection();r&&(r.removeAllRanges(),r.addRange(t))}function ot(t,e){let n=t.dataset.article,r=t.dataset.title||"",a=t.querySelector("[data-bookmark-label]")||t,o=()=>{let i=e.read(n),s=!!(i&&i.bookmarked);t.setAttribute("aria-pressed",s?"true":"false"),a.textContent=s?t.dataset.labelSaved:t.dataset.labelSave};return e.available?(t.addEventListener("click",()=>{let i=e.read(n)||w(n,r);i.title=i.title||r,i.bookmarked=!i.bookmarked,i.saved_at=i.bookmarked?new Date().toISOString():void 0,e.write(n,i),o()}),o(),{refresh:o}):(t.disabled=!0,t.title=t.dataset.unavailable||"",{refresh:o})}function rt(t,e,n,r){let a=t.ownerDocument,o=a.defaultView,i=t.querySelector("[data-reading-status]"),s=d=>{i&&(i.textContent=d)},c=t.querySelector("[data-reading-export]");c&&c.addEventListener("click",()=>{let d=new o.Blob([e.exportJSON()],{type:"application/json"}),p=o.URL.createObjectURL(d),x=a.createElement("a");x.href=p,x.download="datalog-reading-data.json",a.body.appendChild(x),x.click(),x.remove(),o.URL.revokeObjectURL(p),s(c.dataset.done||"")});let h=t.querySelector("[data-reading-import]");h&&h.addEventListener("change",()=>{let d=h.files&&h.files[0];d&&(d.text().then(p=>{let x=e.importJSON(p);s(B(h.dataset.done,{count:x})),n()}).catch(()=>s(h.dataset.failed||"")),h.value="")});let m=t.querySelector("[data-reading-erase-article]");m&&r&&m.addEventListener("click",()=>{e.remove(r),s(m.dataset.done||""),n()});let l=t.querySelector("[data-reading-erase-all]");l&&l.addEventListener("click",()=>{l.dataset.confirm&&!o.confirm(l.dataset.confirm)||(e.clear(),s(l.dataset.done||""),n())})}function qt(t,e,n={}){let r=t.ownerDocument,a=r.defaultView,o=t.dataset.article,i=t.dataset.title||"",s=n.content||r.querySelector(".post-content"),c=t.dataset.progress!=="false",h=t.dataset.highlights!=="false",m=t.querySelector("[data-reading-resume]"),l=t.querySelector("[data-reading-toolbar]"),d=t.querySelector("[data-reading-list-items]"),p=t.querySelector("[data-reading-empty]"),x=t.querySelector("[data-reading-item-template]"),T=t.querySelector("[data-reading-unavailable]"),b=n.bookmark?ot(n.bookmark,e):null,A=null,P=[],E=()=>e.read(o)||w(o,i),D=u=>{u.title=u.title||i,e.write(o,u)};if(!e.available)return T&&(T.hidden=!1),t.querySelectorAll("button, input").forEach(u=>{u.disabled=!0}),{available:!1,record:E,addAnnotation:()=>null,removeAnnotation:()=>!1,repaint:()=>null};let U=()=>{if(!s||!h)return{found:[],lost:[]};let u=Q(s,E().annotations);return P=u.lost,u},at=()=>{if(!d||!x)return;let u=E().annotations;d.textContent="",p&&(p.hidden=u.length>0),u.forEach(f=>{let g=x.content.firstElementChild.cloneNode(!0);g.dataset.annotation=f.id;let y=g.querySelector("[data-annotation-quote]");y.textContent=f.quote.length>160?`${f.quote.slice(0,157)}\u2026`:f.quote;let S=g.querySelector("[data-annotation-section]");S.textContent=nt(s,f.section);let q=g.querySelector("[data-annotation-lost]");q.hidden=!P.includes(f.id);let _=g.querySelector("[data-annotation-note]");_.value=f.note||"",_.addEventListener("change",()=>{let R=E(),V=R.annotations.find(st=>st.id===f.id);V&&(V.note=_.value,D(R))}),g.querySelector("[data-annotation-go]").addEventListener("click",()=>{let R=s&&I(s,f);R&&Ct(R,a)}),g.querySelector("[data-annotation-remove]").addEventListener("click",()=>{C.removeAnnotation(f.id)}),d.appendChild(g)})},L=()=>{U(),at(),b&&b.refresh()},X=()=>{l&&(l.hidden=!0)},it=u=>{if(l&&(A=u,l.hidden=!1,typeof u.getBoundingClientRect=="function")){let f=u.getBoundingClientRect();l.style.top=`${Math.max(0,f.top+a.scrollY-l.offsetHeight-8)}px`,l.style.left=`${Math.max(0,f.left+a.scrollX)}px`}},j=()=>{let u=a.getSelection&&a.getSelection();if(!u||u.rangeCount===0||u.isCollapsed||!s)return null;let f=u.getRangeAt(0);return s.contains(f.commonAncestorContainer)?f:null},C={available:!0,record:E,repaint:U,addAnnotation(u,f=""){if(!s)return null;let g=G(u,s);if(!g||g.quote.trim()==="")return null;let y=k(v({id:kt()},g),{note:f,created_at:new Date().toISOString()}),S=E();return S.annotations.push(y),D(S),L(),y},removeAnnotation(u){let f=E(),g=f.annotations.length;return f.annotations=f.annotations.filter(y=>y.id!==u),f.annotations.length===g?!1:(D(f),L(),!0)},highlightSelection(u=!1){let f=A||j();if(!f)return null;let g=C.addAnnotation(f);A=null,X();let y=a.getSelection&&a.getSelection();if(y&&y.removeAllRanges(),g&&u&&d){let S=d.querySelector(`[data-annotation="${g.id}"] [data-annotation-note]`);S&&S.focus()}return g}};if(h&&l&&s){let u=null;r.addEventListener("selectionchange",()=>{u&&a.clearTimeout(u),u=a.setTimeout(()=>{let y=j();y?it(y.cloneRange()):l.contains(r.activeElement)||(A=null,X())},150)});let f=l.querySelector("[data-reading-highlight]"),g=l.querySelector("[data-reading-note]");f&&f.addEventListener("click",()=>C.highlightSelection(!1)),g&&g.addEventListener("click",()=>C.highlightSelection(!0)),r.addEventListener("keydown",y=>{if(!y.altKey||!y.shiftKey||bt(r))return;let S=y.key.toLowerCase();(S==="h"||S==="n")&&(y.preventDefault(),C.highlightSelection(S==="n"))})}if(c&&s){let u=E().progress;if(m&&!a.location.hash&&tt(u,s.getBoundingClientRect().height,a.innerHeight)){let f=m.querySelector("[data-reading-resume-detail]");if(f){let S=nt(s,u.anchor),q=Math.round(u.ratio*100);f.textContent=`${S?`${S} \xB7 `:""}${B(m.dataset.progressLabel,{percent:q})}`}m.hidden=!1;let g=m.querySelector("[data-reading-resume-go]");g&&g.addEventListener("click",()=>{let S=u.anchor&&r.getElementById(u.anchor);if(S&&typeof S.scrollIntoView=="function")S.scrollIntoView({block:"start"});else{let q=s.getBoundingClientRect();a.scrollTo(0,q.top+a.scrollY+q.height*u.ratio-a.innerHeight*.4)}m.hidden=!0});let y=m.querySelector("[data-reading-resume-dismiss]");y&&y.addEventListener("click",()=>{m.hidden=!0})}et({content:s,store:e,article:o,title:i,win:a})}return rt(t,e,L,o),L(),C}function wt(t,e){let n=t.ownerDocument,r=t.querySelector("[data-reading-list-items]"),a=t.querySelector("[data-reading-list-empty]"),o=t.querySelector("[data-reading-unavailable]"),i=()=>{if(!r)return;let s=e.all().filter(c=>c.bookmarked||c.progress||c.annotations.length>0).sort((c,h)=>String(h.updated_at||"").localeCompare(String(c.updated_at||"")));r.textContent="",a&&(a.hidden=s.length>0),s.forEach(c=>{let h=n.createElement("li");h.className="reading-list__item";let m=n.createElement("a");m.href=c.article,m.textContent=c.title||c.article,h.appendChild(m);let l=n.createElement("span");l.className="reading-list__meta";let d=[];c.bookmarked&&d.push(t.dataset.savedLabel||""),c.progress&&d.push(B(t.dataset.progressLabel,{percent:Math.round(c.progress.ratio*100)})),c.annotations.length>0&&d.push(B(t.dataset.highlightsLabel,{count:c.annotations.length})),l.textContent=d.filter(Boolean).join(" \xB7 "),h.appendChild(l);let p=n.createElement("button");p.type="button",p.className="post-tool",p.textContent=t.dataset.removeLabel||"",p.addEventListener("click",()=>{e.remove(c.article),i()}),h.appendChild(p),r.appendChild(h)})};return e.available?(rt(t,e,i),i(),{render:i}):(o&&(o.hidden=!1),t.querySelectorAll("button, input").forEach(s=>{s.disabled=!0}),{render:i})}function H(t=document,e=Z()){let n=t.querySelector("[data-reading-state]"),r=t.querySelector("[data-reading-list]"),a=t.querySelector("[data-bookmark-toggle]"),o={article:null,list:null};return n?o.article=qt(n,e,{bookmark:a}):a&&ot(a,e),r&&(o.list=wt(r,e)),o}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>H()):H();export{H as initReadingState};
|
|
1
|
+
import{a as C,b as q}from"./chunks/chunk-PATLC23F.js";var fe=new Set(["SCRIPT","STYLE","TEMPLATE","NOSCRIPT"]),W=3;function Q(e){let t=e.ownerDocument,n=[],a="",r=t.createTreeWalker(e,4,{acceptNode(o){return fe.has(o.parentNode&&o.parentNode.nodeName)?2:1}});for(let o=r.nextNode();o;o=r.nextNode())n.push({node:o,start:a.length,end:a.length+o.data.length}),a+=o.data;return{text:a,nodes:n}}function P(e,t){return!!(e.compareDocumentPosition(t)&4)}function F(e,t,n){if(t.nodeType===W){let o=e.nodes.find(i=>i.node===t);return o?o.start+n:0}let a=t.childNodes[n];if(!a){let o=e.nodes.find(i=>!t.contains(i.node)&&P(t,i.node));return o?o.start:e.text.length}let r=e.nodes.find(o=>o.node===a||a.contains(o.node)||P(a,o.node));return r?r.start:e.text.length}function Z(e,t){let n=t.nodeType===W?t.parentNode:t,a=null;return e.querySelectorAll("h2[id], h3[id], h4[id]").forEach(r=>{(r===n||r.contains(n)||P(r,n))&&(a=r.id)}),a}function ee(e,t){let n=Q(t),a=F(n,e.startContainer,e.startOffset),r=F(n,e.endContainer,e.endOffset);return r<=a?null:{quote:n.text.slice(a,r),prefix:n.text.slice(Math.max(0,a-32),a),suffix:n.text.slice(r,r+32),section:Z(t,e.startContainer)}}function K(e,t){let n=[],a=e.indexOf(t);for(;a!==-1;)n.push(a),a=e.indexOf(t,a+1);return n}function z(e){let t="",n=[],a=!1;for(let r=0;r<e.length;r+=1){let o=e[r];/\s/.test(o)?a||(t+=" ",n.push(r),a=!0):(t+=o,n.push(r),a=!1)}return{out:t,map:n}}function pe(e,t){let n=0;for(;n<e.length&&n<t.length&&e[e.length-1-n]===t[t.length-1-n];)n+=1;return n}function ge(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n+=1;return n}function G(e,t,n){let a=e.nodes.find(i=>t>=i.start&&t<i.end)||e.nodes.find(i=>t===i.end),r=e.nodes.find(i=>n>i.start&&n<=i.end);if(!a||!r)return null;let o=a.node.ownerDocument.createRange();return o.setStart(a.node,t-a.start),o.setEnd(r.node,n-r.start),o}function D(e,t){if(!t||typeof t.quote!="string"||t.quote==="")return null;let n=Q(e),a=K(n.text,t.quote).map(o=>({start:o,end:o+t.quote.length}));if(a.length===0){let o=z(n.text),i=z(t.quote).out.trim();i&&(a=K(o.out,i).map(s=>({start:o.map[s],end:o.map[s+i.length-1]+1})))}if(a.length===0)return null;let r=a.map(o=>q(C({},o),{section:Z(e,G(n,o.start,o.end).startContainer),score:pe(n.text.slice(Math.max(0,o.start-32),o.start),t.prefix||"")+ge(n.text.slice(o.end,o.end+32),t.suffix||"")}));if(t.section){let o=r.filter(i=>i.section===t.section);if(o.length)r=o;else return null}return r.sort((o,i)=>i.score-o.score),r.length>1&&(r[0].score===0||r[0].score===r[1].score)||!t.section&&(t.prefix||t.suffix)&&r[0].score===0?null:G(n,r[0].start,r[0].end)}var he="datalog-annotation",te="reading-highlight";function me(e=window){return!!(e&&e.CSS&&"highlights"in e.CSS&&typeof e.Highlight=="function")}function ye(e){e.querySelectorAll(`mark.${te}`).forEach(t=>{let n=t.parentNode;for(;t.firstChild;)n.insertBefore(t.firstChild,t);n.removeChild(t),n.normalize()})}function Se(e,t){let n=e.startContainer.ownerDocument,a=e.commonAncestorContainer,r=[];if(a.nodeType===3)r.push(a);else{let o=n.createTreeWalker(a,4);for(let i=o.nextNode();i;i=o.nextNode())e.intersectsNode(i)&&r.push(i)}r.forEach(o=>{var l;if(!o.data.trim()||((l=o.parentElement)==null?void 0:l.namespaceURI)!=="http://www.w3.org/1999/xhtml")return;let i=n.createRange();if(i.setStart(o,o===e.startContainer?e.startOffset:0),i.setEnd(o,o===e.endContainer?e.endOffset:o.data.length),i.collapsed)return;let s=n.createElement("mark");s.className=te,s.dataset.annotationId=t,i.surroundContents(s)})}function ne(e,t,n={}){let a=e.ownerDocument.defaultView,r=n.api===void 0?me(a):n.api,o=[],i=[];ye(e);let s=[];return t.forEach(l=>{let g=D(e,l);g?(o.push(l.id),s.push([l.id,g])):i.push(l.id)}),r?a.CSS.highlights.set(he,new a.Highlight(...s.map(([,l])=>l))):s.reverse().forEach(([l,g])=>Se(g,l)),{found:o,lost:i}}var _="datalog-reading:";function ve(e=window){try{let t=e.localStorage,n=`${_}probe`;return t.setItem(n,"1"),t.removeItem(n),t}catch(t){if(t.name==="QuotaExceededError"||t.code===22)try{return e.localStorage.getItem(`${_}probe`),e.localStorage}catch(n){return null}return null}}function A(e,t=""){return{article:e,title:t,bookmarked:!1,annotations:[]}}function xe(e){return!!(e&&typeof e.id=="string"&&typeof e.quote=="string"&&e.quote.length>0)}function U(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:null}catch(t){return null}}function B(e){if(!e||typeof e.article!="string"||e.article==="")return null;let t=A(e.article,typeof e.title=="string"?e.title:"");t.bookmarked=e.bookmarked===!0;let n=new Map;return(Array.isArray(e.annotations)?e.annotations:[]).filter(xe).forEach(a=>{let r={id:a.id,quote:a.quote};["prefix","suffix","section","note","created_at"].forEach(o=>{typeof a[o]=="string"&&(r[o]=a[o])}),n.set(r.id,r)}),t.annotations=[...n.values()],e.progress&&Number.isFinite(e.progress.ratio)&&(t.progress={ratio:Math.min(1,Math.max(0,e.progress.ratio)),anchor:typeof e.progress.anchor=="string"?e.progress.anchor:null},typeof e.progress.updated_at=="string"&&(t.progress.updated_at=e.progress.updated_at)),typeof e.saved_at=="string"&&(t.saved_at=e.saved_at),typeof e.updated_at=="string"&&(t.updated_at=e.updated_at),t}function re(e=ve()){let t=!!e,n=c=>`${_}${c}`;function a(){let c=[];for(let f=0;f<e.length;f+=1){let p=e.key(f);p&&p.startsWith(_)&&p!==`${_}probe`&&c.push(p)}return c}function r(c){if(!t)return null;try{return B(U(e.getItem(n(c))))}catch(f){return null}}function o(c,f){if(!t)return!1;try{let p=B(q(C({},f),{article:c}));return p?(p.updated_at=new Date().toISOString(),e.setItem(n(c),JSON.stringify(p)),!0):!1}catch(p){return!1}}function i(c){if(!t)return!1;try{return e.removeItem(n(c)),!0}catch(f){return!1}}function s(){if(!t)return[];try{return a().map(c=>B(U(e.getItem(c)))).filter(Boolean)}catch(c){return[]}}function l(){if(!t)return!1;try{return a().forEach(c=>e.removeItem(c)),!0}catch(c){return!1}}function g(){return JSON.stringify({format:1,exported_at:new Date().toISOString(),articles:s()},null,2)}function h(c){let f=U(c),p=Array.isArray(f)?f:f&&Array.isArray(f.articles)?f.articles:null;if(!p)throw new Error("Not a reading data export");return p.reduce((x,k)=>{var N;let m=B(k);if(!m)return x;let E=r(m.article);if(E&&(m.annotations=[...new Map([...E.annotations,...m.annotations].map(w=>[w.id,w])).values()],m.bookmarked=m.bookmarked||E.bookmarked,m.title=m.title||E.title,m.saved_at=m.saved_at||E.saved_at,(!m.progress||(Date.parse((N=E.progress)==null?void 0:N.updated_at)||0)>(Date.parse(m.progress.updated_at)||0))&&(m.progress=E.progress)),!o(m.article,m))throw new Error("Reading data could not be saved");return x+1},0)}return{available:t,read:r,write:o,remove:i,all:s,clear:l,exportJSON:g,importJSON:h}}var Ee=.4;function ke({scrollY:e,innerHeight:t,contentTop:n,contentHeight:a,headings:r}){let o=e+t*Ee,i=a>0?Math.min(1,Math.max(0,(o-n)/a)):0,s=null;return r.forEach(l=>{l.top<=o&&(s=l.id)}),{ratio:Math.round(i*1e3)/1e3,anchor:s}}function oe(e,t,n){return!!(e&&typeof e.ratio=="number"&&e.ratio>=.05&&e.ratio<=.92&&t>n*1.5)}function ae({content:e,store:t,article:n,title:a,win:r=window,interval:o=1e3,shouldSave:i=()=>!0,onError:s=()=>{}}){let l=null,g=null,h=()=>{let k=e.getBoundingClientRect(),m=Array.from(e.querySelectorAll("h2[id], h3[id], h4[id]")).map(E=>({id:E.id,top:E.getBoundingClientRect().top+r.scrollY}));return ke({scrollY:r.scrollY,innerHeight:r.innerHeight,contentTop:k.top+r.scrollY,contentHeight:k.height,headings:m})},c=()=>{let k=h();if(!i(k)||g&&Math.abs(g.ratio-k.ratio)<.01)return;let m=t.read(n)||A(n,a);m.title=m.title||a,m.progress=q(C({},k),{updated_at:new Date().toISOString()}),t.write(n,m)?g=k:s()},f=()=>{l||(l=r.setTimeout(()=>{l=null,c()},o))},p=()=>{l!==null&&(r.clearTimeout(l),l=null,c())},x=()=>{r.document.visibilityState==="hidden"&&p()};return r.addEventListener("scroll",f,{passive:!0}),r.addEventListener("pagehide",p),r.document.addEventListener("visibilitychange",x),{stop(){r.removeEventListener("scroll",f),r.removeEventListener("pagehide",p),r.document.removeEventListener("visibilitychange",x),l&&r.clearTimeout(l),l=null},save:c,snapshot:h}}var be=new Set(["INPUT","TEXTAREA","SELECT"]);function M(e,t){return Object.keys(t).reduce((n,a)=>n.split(`{{${a}}}`).join(String(t[a])),e||"")}function Ce(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function qe(e){let t=e.activeElement;return!!(t&&(be.has(t.tagName)||t.isContentEditable))}function I(e){var a,r;let t=e.querySelector("[data-reading-status]"),n=((a=e.dataset)==null?void 0:a.saveFailed)||((r=e.querySelector("[data-reading-unavailable]"))==null?void 0:r.textContent)||"Reading data could not be saved.";t&&(t.textContent=n)}function ie(e,t){if(!t)return"";let n=e.ownerDocument.getElementById(t);return n&&e.contains(n)?n.textContent.trim():t}function we(e,t){let n=e.startContainer.nodeType===3?e.startContainer.parentElement:e.startContainer;n&&typeof n.scrollIntoView=="function"&&n.scrollIntoView({block:"center"});let a=t.getSelection&&t.getSelection();a&&(a.removeAllRanges(),a.addRange(e))}function se(e,t){let n=e.dataset.article,a=e.dataset.title||"",r=e.querySelector("[data-bookmark-label]")||e,o=()=>{let i=t.read(n),s=!!(i&&i.bookmarked);e.setAttribute("aria-pressed",s?"true":"false"),r.textContent=s?e.dataset.labelSaved:e.dataset.labelSave};return t.available?(e.addEventListener("click",()=>{let i=t.read(n)||A(n,a);i.title=i.title||a,i.bookmarked=!i.bookmarked,i.saved_at=i.bookmarked?new Date().toISOString():void 0,t.write(n,i)||I(e.ownerDocument),o()}),o(),{refresh:o}):(e.disabled=!0,e.title=e.dataset.unavailable||"",{refresh:o})}function le(e,t,n,a){let r=e.ownerDocument,o=r.defaultView,i=e.querySelector("[data-reading-status]"),s=f=>{i&&(i.textContent=f)},l=e.querySelector("[data-reading-export]");l&&l.addEventListener("click",()=>{let f=new o.Blob([t.exportJSON()],{type:"application/json"}),p=o.URL.createObjectURL(f),x=r.createElement("a");x.href=p,x.download="datalog-reading-data.json",r.body.appendChild(x),x.click(),x.remove(),o.URL.revokeObjectURL(p),s(l.dataset.done||"")});let g=e.querySelector("[data-reading-import]");g&&g.addEventListener("change",()=>{let f=g.files&&g.files[0];f&&(f.text().then(p=>{let x=t.importJSON(p);s(M(g.dataset.done,{count:x})),n()}).catch(()=>s(g.dataset.failed||"")),g.value="")});let h=e.querySelector("[data-reading-erase-article]");h&&a&&h.addEventListener("click",()=>{if(!t.remove(a))return I(e);s(h.dataset.done||""),n("erase")});let c=e.querySelector("[data-reading-erase-all]");c&&c.addEventListener("click",()=>{if(!(c.dataset.confirm&&!o.confirm(c.dataset.confirm))){if(!t.clear())return I(e);s(c.dataset.done||""),n("erase")}})}function Le(e,t,n={}){let a=e.ownerDocument,r=a.defaultView,o=e.dataset.article,i=e.dataset.title||"",s=n.content||a.querySelector(".post-content"),l=e.dataset.progress!=="false",g=e.dataset.highlights!=="false",h=a.querySelector("[data-reading-resume]"),c=e.querySelector("[data-reading-toolbar]"),f=e.querySelector("[data-reading-list-items]"),p=e.querySelector("[data-reading-empty]"),x=e.querySelector("[data-reading-item-template]"),k=e.querySelector("[data-reading-unavailable]"),m=n.bookmark?se(n.bookmark,t):null,E=null,N=[],w=null,b=()=>t.read(o)||A(o,i),$=d=>{d.title=d.title||i;let u=t.write(o,d);return u||I(e),u};if(!t.available)return k&&(k.hidden=!1),e.querySelectorAll("button, input").forEach(d=>{d.disabled=!0}),{available:!1,record:b,addAnnotation:()=>null,removeAnnotation:()=>!1,repaint:()=>null};let X=()=>{if(!s||!g)return{found:[],lost:[]};let d=ne(s,b().annotations);return N=d.lost,d},ce=()=>{if(!f||!x)return;let d=b().annotations;f.textContent="",p&&(p.hidden=d.length>0),d.forEach(u=>{let y=x.content.firstElementChild.cloneNode(!0);y.dataset.annotation=u.id;let S=y.querySelector("[data-annotation-quote]");S.textContent=u.quote.length>160?`${u.quote.slice(0,157)}\u2026`:u.quote;let v=y.querySelector("[data-annotation-section]");v.textContent=ie(s,u.section);let T=y.querySelector("[data-annotation-lost]");T.hidden=!N.includes(u.id);let H=y.querySelector("[data-annotation-note]");H.value=u.note||"",H.addEventListener("change",()=>{let O=b(),Y=O.annotations.find(ue=>ue.id===u.id);Y&&(Y.note=H.value,$(O))}),y.querySelector("[data-annotation-go]").addEventListener("click",()=>{let O=s&&D(s,u);O&&we(O,r)}),y.querySelector("[data-annotation-remove]").addEventListener("click",()=>{R.removeAnnotation(u.id)}),f.appendChild(y)})},L=()=>{X(),ce(),m&&m.refresh()},j=()=>{c&&(c.hidden=!0)},de=d=>{if(c&&(E=d,c.hidden=!1,typeof d.getBoundingClientRect=="function")){let u=d.getBoundingClientRect();c.style.top=`${Math.max(0,u.top+r.scrollY-c.offsetHeight-8)}px`,c.style.left=`${Math.max(0,u.left+r.scrollX)}px`}},J=()=>{let d=r.getSelection&&r.getSelection();if(!d||d.rangeCount===0||d.isCollapsed||!s)return null;let u=d.getRangeAt(0);return s.contains(u.commonAncestorContainer)?u:null},R={available:!0,record:b,repaint:X,addAnnotation(d,u=""){if(!s)return null;let y=ee(d,s);if(!y||y.quote.trim()==="")return null;let S=q(C({id:Ce()},y),{note:u,created_at:new Date().toISOString()}),v=b();return v.annotations.push(S),$(v)?(L(),S):null},removeAnnotation(d){let u=b(),y=u.annotations.length;return u.annotations=u.annotations.filter(S=>S.id!==d),u.annotations.length===y||!$(u)?!1:(L(),!0)},highlightSelection(d=!1){let u=E||J();if(!u)return null;let y=R.addAnnotation(u);if(!y)return null;E=null,j();let S=r.getSelection&&r.getSelection();if(S&&S.removeAllRanges(),y&&d&&f){let v=f.querySelector(`[data-annotation="${y.id}"] [data-annotation-note]`);v&&v.focus()}return y}};if(g&&c&&s){let d=null;a.addEventListener("selectionchange",()=>{d&&r.clearTimeout(d),d=r.setTimeout(()=>{let S=J();S?de(S.cloneRange()):c.contains(a.activeElement)||(E=null,j())},150)});let u=c.querySelector("[data-reading-highlight]"),y=c.querySelector("[data-reading-note]");u&&u.addEventListener("click",()=>R.highlightSelection(!1)),y&&y.addEventListener("click",()=>R.highlightSelection(!0)),a.addEventListener("keydown",S=>{if(!e.isConnected||S.defaultPrevented||S.isComposing||!S.altKey||!S.shiftKey||qe(a))return;let v=S.code?S.code.replace(/^Key/,"").toLowerCase():S.key.toLowerCase();(v==="h"||v==="n")&&(S.preventDefault(),R.highlightSelection(v==="n"))})}if(l&&s){let d=b().progress;if(h&&!r.location.hash&&oe(d,s.getBoundingClientRect().height,r.innerHeight)){let u=h.querySelector("[data-reading-resume-detail]");if(u){let v=ie(s,d.anchor),T=Math.round(d.ratio*100);u.textContent=`${v?`${v} \xB7 `:""}${M(h.dataset.progressLabel,{percent:T})}`}h.hidden=!1;let y=h.querySelector("[data-reading-resume-go]");y&&y.addEventListener("click",()=>{let v=d.anchor&&a.getElementById(d.anchor);if(v&&typeof v.scrollIntoView=="function")v.scrollIntoView({block:"start"});else{let T=s.getBoundingClientRect();r.scrollTo(0,T.top+r.scrollY+T.height*d.ratio-r.innerHeight*.4)}h.hidden=!0});let S=h.querySelector("[data-reading-resume-dismiss]");S&&S.addEventListener("click",()=>{h.hidden=!0})}w=ae({content:s,store:t,article:o,title:i,win:r,shouldSave:u=>!h||h.hidden?!0:u.ratio<d.ratio?!1:(h.hidden=!0,!0),onError:()=>I(e)})}return le(e,t,d=>{d==="erase"&&(w==null||w.stop(),h&&(h.hidden=!0)),L()},o),a.addEventListener("datalog:math-ready",L),a.addEventListener("datalog:viz-rendered",L),L(),R}function Re(e,t){let n=e.ownerDocument,a=e.querySelector("[data-reading-list-items]"),r=e.querySelector("[data-reading-list-empty]"),o=e.querySelector("[data-reading-unavailable]"),i=()=>{if(!a)return;let s=t.all().filter(l=>l.bookmarked||l.progress||l.annotations.length>0).sort((l,g)=>String(g.updated_at||"").localeCompare(String(l.updated_at||"")));a.textContent="",r&&(r.hidden=s.length>0),s.forEach(l=>{let g=n.createElement("li");g.className="reading-list__item";let h=n.createElement("a");h.href=l.article,h.textContent=l.title||l.article,g.appendChild(h);let c=n.createElement("span");c.className="reading-list__meta";let f=[];l.bookmarked&&f.push(e.dataset.savedLabel||""),l.progress&&f.push(M(e.dataset.progressLabel,{percent:Math.round(l.progress.ratio*100)})),l.annotations.length>0&&f.push(M(e.dataset.highlightsLabel,{count:l.annotations.length})),c.textContent=f.filter(Boolean).join(" \xB7 "),g.appendChild(c);let p=n.createElement("button");p.type="button",p.className="post-tool",p.textContent=e.dataset.removeLabel||"",p.addEventListener("click",()=>{if(!t.remove(l.article))return I(e);i()}),g.appendChild(p),a.appendChild(g)})};return t.available?(le(e,t,i),i(),{render:i}):(o&&(o.hidden=!1),e.querySelectorAll("button, input").forEach(s=>{s.disabled=!0}),{render:i})}function V(e=document,t=re()){let n=e.querySelector("[data-reading-state]"),a=e.querySelector("[data-reading-list]"),r=e.querySelector("[data-bookmark-toggle]"),o={article:null,list:null};return n?o.article=Le(n,t,{bookmark:r}):r&&se(r,t),a&&(o.list=Re(a,t)),o}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>V()):V();export{V as initReadingState};
|