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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -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 +24 -16
  49. data/_plugins/licenses.rb +15 -3
  50. data/_plugins/math_preprocessor.rb +65 -3
  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
@@ -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
@@ -34,6 +34,7 @@ module Datalog
34
34
 
35
35
  def normalize!(document)
36
36
  data = document.data
37
+ data["last_modified_at"] ||= to_time(data["updated"]) if data["updated"]
37
38
  return unless data.key?("revisions")
38
39
 
39
40
  revisions = entries(data["revisions"], document)
@@ -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"])
@@ -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
@@ -47,6 +47,11 @@ iframe {
47
47
  max-width: 100%;
48
48
  }
49
49
 
50
+ img,
51
+ video {
52
+ height: auto;
53
+ }
54
+
50
55
  a {
51
56
  color: $color-accent-primary;
52
57
  text-decoration-thickness: 0.12em;
data/_sass/_layout.scss CHANGED
@@ -62,7 +62,8 @@ body.dark-mode .page-meta {
62
62
  }
63
63
  }
64
64
 
65
- aside {
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;
@@ -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: center;
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
 
@@ -158,7 +158,7 @@ pre.highlight {
158
158
  overflow: visible;
159
159
  }
160
160
 
161
- .highlight .rouge-gutter {
161
+ .highlight .rouge-table td.rouge-gutter {
162
162
  padding-right: map.get($spacing, 4);
163
163
  color: $color-ink-500;
164
164
  text-align: right;
@@ -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};
@@ -1,2 +1,2 @@
1
- import{a as v,b as K,c as B}from"./chunks/chunk-V7734B2G.js";import{a as I,b as U,c as M}from"./chunks/chunk-2DYDWUFX.js";import{a as T,b as q}from"./chunks/chunk-PATLC23F.js";var O="comments",Q=3,J=/^https?:\/\//i,W=new Set(["disabled","unsupported","version"]);function X(e,t){let n=e.querySelector(t);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(a){return{}}}function Z(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function ee(e,t){return Object.keys(t).reduce((n,a)=>n.split(`{{${a}}}`).join(t[a]),e)}function te(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 ne(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 o=i.comment.parent_id,u=t&&o!==null&&o!==void 0?a.get(String(o)):null;u&&u!==i?u.replies.push(i):f.push(i)});let p=(i,o)=>String(i.comment.created_at||"").localeCompare(String(o.comment.created_at||"")),y=i=>(i.sort(p),i.forEach(o=>y(o.replies)),i);return y(f)}function P(e,t,n={}){let{labels:a={},lang:f,replies:p=!1,onReply:y}=n,i=t.status==="pending",o=e.createElement("li");o.className=i?"comment comment--pending":"comment",t.id!==null&&t.id!==void 0&&(o.id=`comment-${t.id}`);let u=e.createElement("article");u.className="comment__card";let S=e.createElement("header");S.className="comment__meta";let h=t.author&&typeof t.author=="object"?t.author:{},g=String(h.name||"").trim()||a.anonymous||"Anonymous",s;if(J.test(String(h.url||""))?(s=e.createElement("a"),s.href=h.url,s.rel="nofollow noopener ugc"):s=e.createElement("span"),s.className="comment__author",s.textContent=g,S.appendChild(s),t.created_at){let l=e.createElement("time");l.className="comment__time",l.dateTime=String(t.created_at),l.textContent=te(t.created_at,f),S.appendChild(l)}if(i){let l=e.createElement("span");l.className="comment__pending",l.textContent=a.pending||"Awaiting moderation",S.appendChild(l)}u.appendChild(S);let b=e.createElement("div");if(b.className="comment__body",String(t.body||"").split(/\n{2,}/).forEach(l=>{let _=e.createElement("p");l.split(`
2
- `).forEach((C,w)=>{w>0&&_.appendChild(e.createElement("br")),_.appendChild(e.createTextNode(C))}),b.appendChild(_)}),u.appendChild(b),p&&y&&!i&&t.id!==null&&t.id!==void 0){let l=e.createElement("button");l.type="button",l.className="comment__reply post-tool",l.textContent=a.reply||"Reply",l.addEventListener("click",()=>y(t)),u.appendChild(l)}return o.appendChild(u),o}function V(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 Y(e,t,n,a){n.forEach(f=>{let p=P(e,f.comment,a);f.replies.length>0&&Y(e,V(e,p),f.replies,a),t.appendChild(p)})}function re(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 ae(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&&!J.test(e.author.url)&&(a.url=n.url_invalid||"A website address starts with http:// or https://."),e.body.trim().length<Q&&(a.body=n.body_short||"Say a little more."),t.website&&(a.website="spam"),Object.keys(a).length>0?a:null}function oe(e,t={}){let n=e.ownerDocument,a=t.window||n.defaultView,f=e.dataset.commentsEndpoint||"",p=t.client||(f?U(q(T({},a&&a.DatalogDynamicServices||{}),{base_url:f})):M()),y=e.dataset.commentsPath||"/",i=e.dataset.commentsReplies!=="false",o=X(e,"[data-comments-labels]"),u=o.errors||{},S=n.documentElement.lang||void 0,h=e.querySelector("[data-comments-status]"),g=e.querySelector("[data-comments-list]"),s=e.querySelector("form"),b=s?s.elements.namedItem("parent_id"):null,l=e.querySelector("[data-comments-replying]"),_=e.querySelector("[data-comments-replying-to]"),C=null,w=!1,F=!1,x=(r,c="",d={})=>{if(e.dataset.state=r,!!h&&(h.textContent=c,h.hidden=c==="",h.setAttribute("role",d.alert?"alert":"status"),d.retry)){let m=n.createElement("button");m.type="button",m.className="post-tool",m.setAttribute("data-comments-retry",""),m.textContent=o.retry||"Try again",m.addEventListener("click",()=>N.load()),h.appendChild(n.createTextNode(" ")),h.appendChild(m)}},L=()=>(C||(C=p.feature(O).catch(r=>{throw C=null,r})),C),R=r=>{if(!b)return;if(b.value=String(r.id),_){let d=r.author&&r.author.name?r.author.name:o.anonymous||"Anonymous";_.textContent=ee(o.replying_to||"Replying to {{name}}",{name:d})}l&&(l.hidden=!1);let c=s.elements.namedItem("body");c&&typeof c.focus=="function"&&c.focus()},D=()=>{b&&(b.value=""),l&&(l.hidden=!0)},j={labels:o,lang:S,replies:i,onReply:R},H=(r,c)=>{let d=i&&c!==null&&c!==void 0?g.querySelector(`#comment-${CSS.escape(String(c))}`):null;(d?V(n,d):g).appendChild(r),g.hidden=!1,e.dataset.state==="empty"&&x("loaded")},N={root:e,form:s,reply:R,cancelReply:D,async load(){if(w)return null;w=!0,x("loading",o.loading||"");try{await L();let r=await p.get(`${p.pathFor(O)}?path=${encodeURIComponent(y)}`),c=r&&r.data&&Array.isArray(r.data.comments)?r.data.comments:[];g.textContent="";let d=ne(c,i);return Y(n,g,d,j),g.hidden=d.length===0,x(d.length>0?"loaded":"empty",d.length>0?"":o.empty||""),F=!0,c}catch(r){return r&&W.has(r.kind)?(x("disabled",I(r,u)),s&&(s.hidden=!0)):x("error",I(r,u),{alert:!0,retry:!0}),null}finally{w=!1}},async submit(){let r=K(s),c=re(r,y),d=ae(c,r,o);if(d)return d.website?(v(s,"success",o.posted_pending||""),null):(v(s,"invalid",u.invalid||"",d),null);v(s,"pending",o.sending||"");try{await L();let m=await p.post(p.pathFor(O),c,{idempotencyKey:Z()}),A=m&&m.data&&typeof m.data=="object"?m.data:{},E=A.comment&&typeof A.comment=="object"?A.comment:null,k=A.status==="pending"||E!==null&&E.status==="pending";return E&&H(P(n,k?q(T({},E),{status:"pending"}):E,j),E.parent_id),s.reset(),D(),v(s,"success",k?o.posted_pending||"":o.posted||""),m}catch(m){return B(s,m,u),null}}};s&&(s.addEventListener("submit",r=>{r.preventDefault(),N.submit()}),e.querySelectorAll("[data-comments-cancel-reply]").forEach(r=>{r.addEventListener("click",D)}));let $=()=>{F||N.load()};if(t.immediate||!a||typeof a.IntersectionObserver!="function")$();else{let r=new a.IntersectionObserver(c=>{c.some(d=>d.isIntersecting)&&(r.disconnect(),$())},{rootMargin:"400px 0px"});r.observe(e)}return N}function z(e=document){return Array.from(e.querySelectorAll("[data-comments-thread]")).map(t=>oe(t))}function G(){z(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",G,{once:!0}):G();
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();
@@ -1 +1 @@
1
- import{a as o,b as v,c as y}from"./chunks/chunk-V7734B2G.js";import{c as g}from"./chunks/chunk-2DYDWUFX.js";import"./chunks/chunk-PATLC23F.js";var S="contact",w=20;function j(t,r){let n=t.querySelector(r);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(e){return{}}}function U(){let t=globalThis.crypto;return t&&typeof t.randomUUID=="function"?t.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function A(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 L(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<w&&(e.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(w))),r.website&&(e.website="spam"),Object.keys(e).length>0?e:null}function _(t,r={}){let n=r.client||g(),e=t.querySelector("form"),s=j(t,"[data-contact-labels]"),C=j(t,"[data-contact-prompts]"),c=s.errors||{},F=t.dataset.sourceUrl||"",i=e.elements.namedItem("category"),l=t.querySelector("[data-contact-hint]"),q=l?l.textContent:"",u=null,f=()=>{l&&(l.textContent=i&&C[i.value]||q)};if(i&&(i.addEventListener("change",f),f()),!n.enabled)return o(e,"disabled",c.disabled||""),{form:e,available:!1,submit:async()=>null};let b=()=>(u||(u=n.feature(S).catch(a=>{throw u=null,y(e,a,c),e.dataset.state="disabled",e.querySelectorAll("button[type=submit]").forEach(m=>{m.disabled=!0}),a})),u);e.addEventListener("focusin",()=>b().catch(()=>{}),{once:!0});let h={form:e,available:!0,async submit(){let a=v(e),m=A(a,F),p=L(m,a,s);if(p)return p.website?(o(e,"success",s.success||""),null):(o(e,"invalid",c.invalid||"",p),null);o(e,"pending",s.pending||"");try{await b()}catch(d){return null}try{let d=await n.post(n.pathFor(S),m,{idempotencyKey:U()});return e.reset(),f(),o(e,"success",s.success||""),d}catch(d){return y(e,d,c),null}}};return e.addEventListener("submit",a=>{a.preventDefault(),h.submit()}),h}function x(t=document){return Array.from(t.querySelectorAll("[data-contact-form]")).map(r=>_(r))}function E(){x(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",E,{once:!0}):E();
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 x,c as b}from"./chunks/chunk-V7734B2G.js";import{c as v}from"./chunks/chunk-2DYDWUFX.js";import"./chunks/chunk-PATLC23F.js";var C="corrections",E=20,_=500;function D(t){let e=t.querySelector("[data-correction-labels]");if(!e)return{};try{return JSON.parse(e.textContent)||{}}catch(n){return{}}}function U(){let t=globalThis.crypto;return t&&typeof t.randomUUID=="function"?t.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function F(t,e){!t||!e||e.querySelectorAll("h2[id], h3[id]").forEach(n=>{let o=t.ownerDocument.createElement("option");o.value=n.id,o.textContent=n.textContent.trim(),t.appendChild(o)})}function I(t,e){let n=t.getSelection&&t.getSelection();if(!n||n.isCollapsed||n.rangeCount===0||!e)return"";let o=n.getRangeAt(0);return e.contains(o.commonAncestorContainer)?n.toString().trim().slice(0,_):""}function L(t,e){let n={category:t.category||"other",message:t.message||"",article:{url:e.url,title:e.title}};return t.section&&(n.section=t.section),t.contact_email&&(n.contact_email=t.contact_email),t.quote&&(n.quote=t.quote),n}function R(t,e,n={}){let o={};return t.message.length<E&&(o.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(E))),t.contact_email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.contact_email)&&(o.contact_email=n.email_invalid||"That does not look like an email address."),e.website&&(o.website="spam"),Object.keys(o).length>0?o:null}function T(t,e={}){let n=t.ownerDocument,o=e.window||n.defaultView,l=e.client||v(),S=e.content===void 0?n.querySelector(".post-content"):e.content,r=t.querySelector("form"),c=D(t),u=c.errors||{},A={url:t.dataset.articleUrl||"",title:t.dataset.articleTitle||""},p=r.elements.namedItem("quote"),s=t.querySelector("[data-correction-quote]"),d=null;if(F(r.elements.namedItem("section"),S),!l.enabled)return a(r,"disabled",u.disabled||""),{form:r,available:!1,submit:async()=>null};let w=()=>(d||(d=l.feature(C).catch(i=>{throw d=null,b(r,i,u),r.dataset.state="disabled",r.querySelectorAll("button[type=submit]").forEach(m=>{m.disabled=!0}),i})),d),y=t.tagName==="DETAILS"?t:t.querySelector("details");y&&y.addEventListener("toggle",()=>{if(!y.open)return;let i=I(o,S);p&&i&&!p.value&&(p.value=i,s&&(s.textContent=i,s.hidden=!1)),w().catch(()=>{})});let q={form:r,available:!0,async submit(){let i=x(r),m=L(i,A),g=R(m,i,c);if(g)return g.website?(a(r,"success",c.success||""),null):(a(r,"invalid",u.invalid||"",g),null);a(r,"pending",c.pending||"");try{await w()}catch(f){return null}try{let f=await l.post(l.pathFor(C),m,{idempotencyKey:U()});return r.reset(),s&&(s.hidden=!0),a(r,"success",c.success||""),f}catch(f){return b(r,f,u),null}}};return r.addEventListener("submit",i=>{i.preventDefault(),q.submit()}),q}function h(t=document){return Array.from(t.querySelectorAll("[data-correction-report]")).map(e=>T(e))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>h()):h();export{h as initCorrectionReports};
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 U,b as O}from"./chunks/chunk-2DYDWUFX.js";import{a as T,b as N}from"./chunks/chunk-PATLC23F.js";var z="moderation",V=["comment","correction","abuse"],Y={approve:"approved",spam:"spam",hide:"hidden",delete:"deleted",reviewed:"reviewed",accept:"accepted",reject:"rejected",resolve:"resolved",dismiss:"dismissed"},G={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"]}},X={comment:["pending"],correction:["new","reviewed","accepted"],abuse:["open"]},Q=/^https?:\/\//i,Z=new Set(["unauthorized","forbidden"]),tt=new Set(["disabled","unsupported","version"]);function et(t,e){let s=t.querySelector(e);if(!s)return{};try{return JSON.parse(s.textContent)||{}}catch(d){return{}}}function nt(){let t=globalThis.crypto;return t&&typeof t.randomUUID=="function"?t.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function i(t){return typeof t=="string"?t:""}function W(t){return(G[t.type]||{})[t.status]||[]}function B(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=i(t.type).toLowerCase();if(t.id===null||t.id===void 0||!V.includes(e))return null;let s=t.author&&typeof t.author=="object"?t.author:{},d=t.context&&typeof t.context=="object"?t.context:{},m=d.parent&&typeof d.parent=="object"?d.parent:null,f=t.resolution&&typeof t.resolution=="object"?t.resolution:{},_=Array.isArray(t.history)?t.history:[];return{id:String(t.id),type:e,status:i(t.status).toLowerCase(),created_at:i(t.created_at),path:i(t.path),title:i(t.title),author:{name:i(s.name),email:i(s.email)},body:i(t.body)||i(t.message),category:i(t.category),section:i(t.section),quote:i(t.quote),reason:i(t.reason),parent:m?{author:i(m.author&&m.author.name),body:i(m.body)}:null,link:Q.test(i(f.url))?f.url:"",history:_.filter(l=>l&&typeof l=="object").map(l=>({action:i(l.action),at:i(l.at),moderator:i(l.moderator),note:i(l.note)}))}}function ot(t={},e=""){let s=new URLSearchParams;["type","status","path","category","since","q"].forEach(m=>{let f=i(t[m]).trim();f&&f!=="all"&&s.set(m,f)}),e&&s.set("cursor",e);let d=s.toString();return d?`?${d}`:""}function P(t,e){let s=new Date(t);if(Number.isNaN(s.getTime()))return t;try{return s.toLocaleString(e||void 0,{dateStyle:"medium",timeStyle:"short"})}catch(d){return s.toISOString()}}function o(t,e,s,d,m){let f=t.createElement(s);return d&&(f.className=d),m!==void 0&&(f.textContent=m),e.appendChild(f),f}function K(t,e,s={}){let{labels:d={},lang:m,siteUrl:f="",onAction:_}=s,l=d.types||{},q=d.statuses||{},C=d.actions||{},k=t.createElement("li");k.className=`moderation-item moderation-item--${e.type}`,k.dataset.itemId=e.id,k.dataset.itemStatus=e.status;let p=o(t,k,"article","moderation-item__card"),y=o(t,p,"header","moderation-item__meta");if(o(t,y,"span","moderation-item__type",l[e.type]||e.type),o(t,y,"span","moderation-item__status",q[e.status]||e.status),e.category&&o(t,y,"span","moderation-item__category",(d.categories||{})[e.category]||e.category),e.created_at){let r=o(t,y,"time","moderation-item__time",P(e.created_at,m));r.dateTime=e.created_at}if(e.path){let r=o(t,p,"p","moderation-item__where"),c=o(t,r,"a","",e.title||e.path);e.path.startsWith("/")&&!e.path.startsWith("//")&&(c.href=`${f.replace(/\/+$/,"")}${e.path}${e.section?`#${encodeURIComponent(e.section)}`:""}`)}if((e.author.name||e.author.email)&&o(t,p,"p","moderation-item__author",[e.author.name,e.author.email].filter(Boolean).join(" \xB7 ")),e.parent){let r=o(t,p,"blockquote","moderation-item__context");o(t,r,"p","",`${d.in_reply_to||"In reply to"} ${e.parent.author||""}`.trim()),o(t,r,"p","",e.parent.body)}e.quote&&o(t,p,"blockquote","moderation-item__quote",e.quote),e.reason&&o(t,p,"p","moderation-item__reason",e.reason);let A=o(t,p,"div","moderation-item__body");if(e.body.split(/\n{2,}/).forEach(r=>o(t,A,"p","",r)),e.link){let r=o(t,p,"p","moderation-item__link"),c=o(t,r,"a","",e.link);c.href=e.link,c.rel="noopener"}if(e.history.length>0){let r=o(t,p,"ol","moderation-item__history");e.history.forEach(c=>{let g=[C[c.action]||c.action,c.moderator,c.at?P(c.at,m):"",c.note].filter(Boolean).join(" \xB7 ");o(t,r,"li","",g)})}let S=W(e);if(S.length>0&&_){let r=o(t,p,"div","moderation-item__actions"),c=`moderation-note-${e.id}`,g=o(t,r,"label","moderation-item__note-label",d.note||"Note");g.htmlFor=c;let E=o(t,r,"input","moderation-item__note");E.type="text",E.id=c,E.name="note";let w=null;if(S.includes("resolve")){let x=`moderation-link-${e.id}`,h=o(t,r,"label","moderation-item__note-label",d.link||"Issue, pull request or revision");h.htmlFor=x,w=o(t,r,"input","moderation-item__note"),w.type="url",w.id=x,w.name="link"}let $=o(t,r,"div","moderation-item__buttons");S.forEach(x=>{let h=o(t,$,"button","post-tool",C[x]||x);h.type="button",h.dataset.moderationAction=x,h.addEventListener("click",()=>_(e,x,{note:E.value.trim(),link:w?w.value.trim():""}))})}let I=o(t,p,"p","moderation-item__message");return I.setAttribute("data-item-message",""),I.setAttribute("role","status"),I.hidden=!0,k}function at(t,e={}){let s=t.ownerDocument,d=s.defaultView,m=d&&d.DatalogDynamicServices||{},f=t.dataset.moderationEndpoint||"",_=e.client||O(N(T({},m),{base_url:f||m.base_url||"",credentials:t.dataset.moderationCredentials||"include"})),l=et(t,"[data-moderation-labels]"),q=l.errors||{},C=s.documentElement.lang||void 0,k=t.dataset.moderationSite||"",p=t.querySelector("[data-moderation-status]"),y=t.querySelector("[data-moderation-list]"),A=t.querySelector("[data-moderation-filters]"),S=t.querySelector("[data-moderation-more]"),I=t.querySelector("[data-moderation-sign-in]"),r="",c=!1,g=(n,a="",b=!1)=>{t.dataset.state=n,t.setAttribute("aria-busy",n==="loading"?"true":"false"),p&&(p.textContent=a,p.hidden=a==="",p.setAttribute("role",b?"alert":"status")),I&&(I.hidden=n!=="unauthorized")},E=()=>{let n={};return A&&new FormData(A).forEach((a,b)=>{n[b]=String(a)}),n},w=n=>{y.textContent="",S&&(S.hidden=!0),n&&n.kind==="unauthorized"?g("unauthorized",l.unauthorized||"",!0):n&&n.kind==="forbidden"?g("forbidden",l.forbidden||"",!0):n&&tt.has(n.kind)?g("disabled",U(n,q)):g("error",U(n,q),!0)},$=(n,a,b=!1)=>{let u=n.querySelector("[data-item-message]");u&&(u.textContent=a,u.hidden=a==="",u.setAttribute("role",b?"alert":"status"))},x=n=>{let a=i(E().status).trim();return a?a===n.status:(X[n.type]||[]).includes(n.status)},h={root:t,client:_,async load(n=!1){if(c)return null;c=!0,n||(r=""),g("loading",l.loading||"");try{await _.feature(z);let a=await _.get(`${_.pathFor(z)}/items${ot(E(),n?r:"")}`),b=a&&a.data&&typeof a.data=="object"?a.data:{},u=(Array.isArray(b.items)?b.items:[]).map(B).filter(Boolean);n||(y.textContent=""),u.forEach(L=>y.appendChild(K(s,L,{labels:l,lang:C,siteUrl:k,onAction:h.act}))),r=i(b.next_cursor),S&&(S.hidden=r==="");let j=y.children.length;return g(j>0?"loaded":"empty",j>0?"":l.empty||""),u}catch(a){return w(a),null}finally{c=!1}},async act(n,a,b={}){let u=Array.from(y.children).find(v=>v.dataset.itemId===n.id);if(!u||!W(n).includes(a))return null;if(a==="resolve"&&!Q.test(b.link||""))return $(u,l.link_required||"",!0),null;let j=Array.from(u.querySelectorAll("button"));j.forEach(v=>{v.disabled=!0}),u.setAttribute("aria-busy","true"),$(u,l.working||"");let L={action:a};b.note&&(L.note=b.note),a==="resolve"&&(L.link=b.link);try{let v=await _.post(`${_.pathFor(z)}/items/${encodeURIComponent(n.id)}/actions`,L,{idempotencyKey:nt()}),F=B(v&&v.data&&v.data.item)||N(T({},n),{status:Y[a]||n.status}),D=(l.done||"{{action}}").split("{{action}}").join((l.actions||{})[a]||a);if(x(F)){let R=K(s,F,{labels:l,lang:C,siteUrl:k,onAction:h.act});y.replaceChild(R,u),$(R,D)}else u.remove(),g(y.children.length>0?"loaded":"empty",y.children.length>0?D:`${D} ${l.empty||""}`.trim());return F}catch(v){return v&&Z.has(v.kind)?w(v):(u.setAttribute("aria-busy","false"),j.forEach(M=>{M.disabled=!1}),$(u,U(v,q),!0)),null}}};return A&&(A.addEventListener("submit",n=>{n.preventDefault(),h.load()}),A.addEventListener("reset",()=>{Promise.resolve().then(()=>h.load())})),S&&S.addEventListener("click",()=>h.load(!0)),_.enabled?(h.load(),h):(g("disabled",q.disabled||""),h)}function H(t=document){return Array.from(t.querySelectorAll("[data-moderation-inbox]")).map(e=>at(e))}function J(){H(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",J,{once:!0}):J();
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();
@@ -1 +1 @@
1
- import{a as v,c as U}from"./chunks/chunk-2DYDWUFX.js";import"./chunks/chunk-PATLC23F.js";var x="reactions",j="datalog-reaction:",k=new Set(["disabled","unsupported","version"]);function N(e,r){let a=e.querySelector(r);if(!a)return{};try{return JSON.parse(a.textContent)||{}}catch(s){return{}}}function T(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function K(e,r){try{return e?e.getItem(j+r):null}catch(a){return null}}function q(e,r,a){try{e&&e.setItem(j+r,a)}catch(s){}}function D(e){let r=e&&typeof e=="object"?e.counts:null;if(!r||typeof r!="object"||Array.isArray(r))return null;let a={};return Object.keys(r).forEach(s=>{let c=r[s];Number.isInteger(c)&&c>=0&&(a[s]=c)}),a}function P(e,r={}){let a=e.ownerDocument,s=r.window||a.defaultView,c=r.client||U(),m=r.storage===void 0?B(s):r.storage,d=e.dataset.reactionsPath||"/",M=e.dataset.reactionsCounts!=="false",f=N(e,"[data-reactions-labels]"),E=f.errors||{},y=e.querySelector("[data-reactions-status]"),i=Array.from(e.querySelectorAll("[data-reaction]")),p=null,g=!1,S=!1,h=K(m,d),u=(t,n=!1)=>{y&&(y.textContent=t,y.hidden=t==="",y.setAttribute("role",n?"alert":"status"))},l=t=>{e.dataset.state=t},w=()=>{i.forEach(t=>{t.setAttribute("aria-pressed",t.dataset.reaction===h?"true":"false")})},b=t=>{i.forEach(n=>{let o=n.querySelector("[data-reaction-count]");if(!o)return;let F=M&&t?t[n.dataset.reaction]:void 0;Number.isInteger(F)?(o.textContent=String(F),o.hidden=!1):(o.textContent="",o.hidden=!0)})},I=t=>{e.setAttribute("aria-busy",t?"true":"false"),i.forEach(n=>{n.disabled=t})},C=t=>{l("disabled"),b(null),i.forEach(n=>{n.disabled=!0}),u(v(t,E))},O=()=>(p||(p=c.feature(x).catch(t=>{throw p=null,t})),p),A={root:e,get selected(){return h},async load(){l("loading");try{await O();let t=await c.get(`${c.pathFor(x)}?path=${encodeURIComponent(d)}`),n=D(t&&t.data);return b(n),l("loaded"),g=!0,n}catch(t){return t&&k.has(t.kind)?C(t):(b(null),l("unavailable")),null}},async react(t){if(S||!i.some(n=>n.dataset.reaction===t))return null;if(t===h)return u(f.already||""),null;S=!0,I(!0),l("pending"),u(f.sending||"");try{await O();let n=await c.post(c.pathFor(x),{path:d,reaction:t},{idempotencyKey:T()});h=t,q(m,d,t),w();let o=D(n&&n.data);return o&&b(o),l("selected"),u(f.thanks||""),n}catch(n){return n&&k.has(n.kind)?C(n):n&&n.kind==="conflict"?(h=t,q(m,d,t),w(),l("selected"),u(f.already||"")):(l(g?"loaded":"unavailable"),u(v(n,E),!0)),null}finally{S=!1,e.dataset.state!=="disabled"&&I(!1)}}};w(),i.forEach(t=>{t.addEventListener("click",()=>{A.react(t.dataset.reaction)})});let R=()=>{g||A.load()};if(r.immediate||!s||typeof s.IntersectionObserver!="function")R();else{let t=new s.IntersectionObserver(n=>{n.some(o=>o.isIntersecting)&&(t.disconnect(),R())},{rootMargin:"400px 0px"});t.observe(e)}return A}function B(e){try{return e&&e.localStorage?e.localStorage:null}catch(r){return null}}function L(e=document){return Array.from(e.querySelectorAll("[data-reactions]")).map(r=>P(r))}function $(){L(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$,{once:!0}):$();
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};