datalog-theme 0.7.0 → 0.8.0

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +125 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +23 -17
  5. data/_data/cdn-integrity.yml +0 -30
  6. data/_includes/analytics/dashboard.html +3 -1
  7. data/_includes/components/api-function.html +20 -1
  8. data/_includes/components/enhanced-code-block.html +1 -1
  9. data/_includes/csp-meta.html +115 -11
  10. data/_includes/footer.html +19 -20
  11. data/_includes/head.html +60 -23
  12. data/_includes/header/navigation.html +12 -15
  13. data/_includes/header.html +28 -19
  14. data/_includes/layouts/default/article.html +5 -1
  15. data/_includes/meta/math-config.html +9 -5
  16. data/_includes/meta/schema.html +5 -2
  17. data/_includes/meta/scripts-loader.html +16 -32
  18. data/_includes/post/related-posts.html +4 -7
  19. data/_includes/search/index-data.json +9 -34
  20. data/_layouts/dataset.html +1 -0
  21. data/_layouts/default.html +16 -8
  22. data/_layouts/notebook.html +1 -0
  23. data/_layouts/package.html +1 -0
  24. data/_layouts/portfolio.html +1 -0
  25. data/_layouts/post.html +20 -5
  26. data/_layouts/project.html +2 -1
  27. data/_plugins/analytics_dashboard.rb +9 -3
  28. data/_plugins/config_validator.rb +12 -7
  29. data/_plugins/csp_generator.rb +18 -28
  30. data/_plugins/datalog_bibliography.rb +9 -7
  31. data/_plugins/datalog_comments.rb +8 -5
  32. data/_plugins/datalog_slides.rb +9 -8
  33. data/_plugins/i18n.rb +7 -8
  34. data/_plugins/image_optimizer.rb +17 -6
  35. data/_plugins/math_preprocessor.rb +33 -3
  36. data/_plugins/notebook_converter.rb +23 -4
  37. data/_plugins/plugin_loader.rb +3 -1
  38. data/_plugins/publications_generator.rb +8 -2
  39. data/_plugins/rouge_highlight_filter.rb +42 -0
  40. data/_plugins/search_code_blocks.rb +30 -0
  41. data/_plugins/search_normalizer.rb +15 -53
  42. data/_plugins/search_pages.rb +3 -4
  43. data/_sass/_academic-dashboard.scss +262 -0
  44. data/_sass/_base.scss +12 -0
  45. data/_sass/_components.scss +64 -1153
  46. data/_sass/_features.scss +17 -0
  47. data/_sass/_layout.scss +1 -1
  48. data/_sass/_notebooks.scss +322 -0
  49. data/_sass/_open-science-badges.scss +56 -0
  50. data/_sass/{_phase1-enhancements.scss → _post-components.scss} +1 -1
  51. data/_sass/_search-page.scss +530 -0
  52. data/_sass/_search.scss +46 -0
  53. data/_sass/_syntax-highlighting.scss +212 -97
  54. data/_sass/_theme.scss +29 -19
  55. data/_sass/_typography.scss +14 -0
  56. data/assets/css/main.scss +14 -0
  57. data/assets/js/dist/academic.js +1 -1
  58. data/assets/js/dist/analytics-dashboard.js +1 -1
  59. data/assets/js/dist/chunks/chunk-225H5YXE.js +1 -0
  60. data/assets/js/dist/core.js +1 -1
  61. data/assets/js/dist/loader.js +1 -1
  62. data/assets/js/dist/notebook.js +1 -1
  63. data/assets/js/dist/search.js +1 -1
  64. data/assets/js/dist/visualizations.js +11 -2
  65. data/assets/js/loader.js +3 -1
  66. data/datalog-theme.gemspec +36 -23
  67. data/lib/datalog/cli.rb +34 -14
  68. data/lib/datalog/plugin_system/dependency_resolver.rb +0 -2
  69. data/lib/datalog/theme/package.rb +57 -0
  70. data/lib/datalog/theme/repository_checkout.rb +90 -0
  71. data/lib/datalog/theme/version.rb +1 -1
  72. data/lib/datalog/warning_filter.rb +5 -11
  73. data/lib/datalog-theme.rb +5 -0
  74. metadata +48 -133
  75. data/_data/academic.yml +0 -217
  76. data/_data/config/author.yml +0 -121
  77. data/_data/datasets.yml +0 -28
  78. data/_data/js_meta.json +0 -371
  79. data/_data/navigation.yml +0 -145
  80. data/_data/projects.yml +0 -41
  81. data/_data/publications.yml +0 -28
  82. data/_data/social.yml +0 -73
  83. data/_data/visualizations.yml +0 -51
  84. data/_includes/components/advanced-search.html +0 -682
  85. data/_includes/components/bookmark-system.html +0 -96
  86. data/_includes/components/comments.html +0 -244
  87. data/_includes/components/content-recommendations.html +0 -228
  88. data/_includes/components/email-preferences.html +0 -200
  89. data/_includes/components/enhanced-metadata.html +0 -228
  90. data/_includes/components/language-switcher.html +0 -396
  91. data/_includes/components/navigation-enhancements.html +0 -454
  92. data/_includes/components/newsletter-signup.html +0 -178
  93. data/_includes/components/popular-posts.html +0 -233
  94. data/_includes/components/reading-progress.html +0 -133
  95. data/_includes/components/reading-time.html +0 -121
  96. data/_includes/components/series-navigation.html +0 -124
  97. data/_includes/components/social-proof.html +0 -34
  98. data/_includes/components/user-preferences.html +0 -566
  99. data/_includes/meta/syntax-config.html +0 -19
  100. data/_layouts/archive.html +0 -282
  101. data/_layouts/post-sidebar.html +0 -183
  102. data/_sass/_phase3-enhancements.scss +0 -874
  103. data/_sass/_phase4-enhancements.scss +0 -1214
  104. data/_sass/_phase5-enhancements.scss +0 -414
  105. data/assets/js/academic.js +0 -262
  106. data/assets/js/analytics-dashboard.js +0 -382
  107. data/assets/js/core/dark-mode.js +0 -79
  108. data/assets/js/core/github-cards.js +0 -123
  109. data/assets/js/core/language-filter.js +0 -69
  110. data/assets/js/core/navigation.js +0 -184
  111. data/assets/js/core/scroll-progress.js +0 -45
  112. data/assets/js/core/search-hotkeys.js +0 -62
  113. data/assets/js/core/skip-links.js +0 -62
  114. data/assets/js/dist/manifest.json +0 -22
  115. data/assets/js/dist/meta.json +0 -371
  116. data/assets/js/main.js +0 -23
  117. data/assets/js/math.js +0 -818
  118. data/assets/js/notebook.js +0 -158
  119. data/assets/js/search/analytics.js +0 -91
  120. data/assets/js/search/app.js +0 -271
  121. data/assets/js/search/autocomplete.js +0 -120
  122. data/assets/js/search/engine.js +0 -260
  123. data/assets/js/search/filters.js +0 -45
  124. data/assets/js/search/render.js +0 -217
  125. data/assets/js/search/utils.js +0 -99
  126. data/assets/js/search.js +0 -354
  127. data/assets/js/visualizations.js +0 -816
  128. data/assets/publications/datalog-publications.bib +0 -8
  129. data/assets/publications/datalog-publications.ris +0 -9
  130. data/assets/publications/publications.bib +0 -30
  131. data/assets/templates/diogo-ribeiro-cv.md +0 -31
  132. data/assets/templates/diogo-ribeiro-cv.tex +0 -32
  133. data/lib/datalog/theme/theme.rb +0 -18
@@ -2,9 +2,14 @@
2
2
 
3
3
  @use 'variables' as *;
4
4
 
5
- // Prism.js inspired syntax highlighting tuned for analytical workloads
5
+ // Syntax highlighting for Rouge, which highlights code as the site builds:
6
+ // kramdown's fenced code blocks, and the includes that use the rouge_highlight
7
+ // filter. Rouge marks tokens with short Pygments class names, such as k for a
8
+ // keyword, s2 for a double-quoted string and nf for a function name.
6
9
  pre[class*='language-'],
7
- code[class*='language-'] {
10
+ code[class*='language-'],
11
+ pre.highlight,
12
+ pre.highlight code {
8
13
  color: $color-ink-900;
9
14
  background: transparent;
10
15
  font-family: $font-family-mono;
@@ -12,117 +17,227 @@ code[class*='language-'] {
12
17
  line-height: 1.6;
13
18
  }
14
19
 
15
- pre[class*='language-'] {
20
+ pre[class*='language-'],
21
+ pre.highlight {
16
22
  position: relative;
17
23
  padding-top: map.get($spacing, 5);
18
24
  }
19
25
 
20
26
  :not(pre) > code[class*='language-'],
21
- pre[class*='language-'] {
27
+ pre[class*='language-'],
28
+ pre.highlight {
22
29
  background: rgba($color-surface-900, 0.02);
23
30
  }
24
31
 
25
- .token.comment,
26
- .token.prolog,
27
- .token.doctype,
28
- .token.cdata {
29
- color: $color-ink-300;
30
- font-style: italic;
31
- }
32
-
33
- .token.punctuation {
32
+ .highlight {
33
+ .c,
34
+ .ch,
35
+ .cd,
36
+ .cm,
37
+ .cpf,
38
+ .c1,
39
+ .cs {
40
+ color: $color-ink-500;
41
+ font-style: italic;
42
+ }
43
+
44
+ .p {
45
+ color: $color-ink-500;
46
+ }
47
+
48
+ .nt,
49
+ .no,
50
+ .ss,
51
+ .gd {
52
+ color: $color-accent-tertiary;
53
+ }
54
+
55
+ .m,
56
+ .mb,
57
+ .mf,
58
+ .mh,
59
+ .mi,
60
+ .il,
61
+ .mo,
62
+ .mx,
63
+ .kc {
64
+ color: $color-accent-secondary-text;
65
+ }
66
+
67
+ .s,
68
+ .sa,
69
+ .sb,
70
+ .sc,
71
+ .dl,
72
+ .sd,
73
+ .s2,
74
+ .se,
75
+ .sh,
76
+ .si,
77
+ .sx,
78
+ .s1,
79
+ .na,
80
+ .nb,
81
+ .bp,
82
+ .gi {
83
+ color: $color-success;
84
+ }
85
+
86
+ .o,
87
+ .ni,
88
+ .nv,
89
+ .vc,
90
+ .vg,
91
+ .vi,
92
+ .vm {
93
+ color: $color-accent-primary;
94
+ }
95
+
96
+ .k,
97
+ .kd,
98
+ .kn,
99
+ .kp,
100
+ .kr,
101
+ .kt,
102
+ .kv,
103
+ .ow,
104
+ .cp {
105
+ color: $color-accent-secondary-text;
106
+ }
107
+
108
+ .nf,
109
+ .fm,
110
+ .nc,
111
+ .nd,
112
+ .ne {
113
+ color: $color-accent-primary;
114
+ font-weight: 600;
115
+ }
116
+
117
+ .sr,
118
+ .gr,
119
+ .gt {
120
+ color: $color-warning;
121
+ }
122
+
123
+ .gh,
124
+ .gu,
125
+ .gs {
126
+ font-weight: 700;
127
+ }
128
+
129
+ .ge {
130
+ font-style: italic;
131
+ }
132
+ }
133
+
134
+ // With line numbers on, Rouge lays a block out as a table: the numbers in the
135
+ // first cell, the code in the second, each in its own <pre>. The site's table,
136
+ // cell and <pre> styles would give it borders, padding and nested boxes.
137
+ .highlight .rouge-table {
138
+ width: auto;
139
+ margin: 0;
140
+ border: 0;
141
+ border-collapse: collapse;
142
+ font-size: inherit;
143
+ }
144
+
145
+ .highlight .rouge-table td {
146
+ padding: 0;
147
+ border: 0;
148
+ vertical-align: top;
149
+ }
150
+
151
+ .highlight .rouge-table pre {
152
+ margin: 0;
153
+ padding: 0;
154
+ border: 0;
155
+ border-radius: 0;
156
+ background: none;
157
+ box-shadow: none;
158
+ overflow: visible;
159
+ }
160
+
161
+ .highlight .rouge-gutter {
162
+ padding-right: map.get($spacing, 4);
34
163
  color: $color-ink-500;
35
- }
36
-
37
- .token.property,
38
- .token.tag,
39
- .token.constant,
40
- .token.symbol,
41
- .token.deleted {
42
- color: $color-accent-tertiary;
43
- }
44
-
45
- .token.boolean,
46
- .token.number {
47
- color: $color-accent-secondary-text;
48
- }
49
-
50
- .token.selector,
51
- .token.attr-name,
52
- .token.string,
53
- .token.char,
54
- .token.builtin,
55
- .token.inserted {
56
- color: $color-success;
57
- }
58
-
59
- .token.operator,
60
- .token.entity,
61
- .token.url,
62
- .token.variable {
63
- color: $color-accent-primary;
64
- }
65
-
66
- .token.atrule,
67
- .token.attr-value,
68
- .token.keyword {
69
- color: $color-accent-secondary-text;
70
- }
71
-
72
- .token.function,
73
- .token.class-name {
74
- color: $color-accent-primary;
75
- font-weight: 600;
76
- }
77
-
78
- .token.regex,
79
- .token.important {
80
- color: $color-warning;
81
- }
82
-
83
- .token.important,
84
- .token.bold {
85
- font-weight: 700;
86
- }
87
-
88
- .token.italic {
89
- font-style: italic;
164
+ text-align: right;
165
+ user-select: none;
90
166
  }
91
167
 
92
168
  body.dark-mode pre[class*='language-'],
93
- body.dark-mode code[class*='language-'] {
169
+ body.dark-mode code[class*='language-'],
170
+ body.dark-mode pre.highlight,
171
+ body.dark-mode pre.highlight code {
94
172
  color: $dark-ink-900;
95
173
  }
96
174
 
97
- body.dark-mode pre[class*='language-'] {
175
+ body.dark-mode pre[class*='language-'],
176
+ body.dark-mode pre.highlight {
98
177
  background: rgba($dark-surface-300, 0.8);
99
178
  }
100
179
 
101
- body.dark-mode .token.comment,
102
- body.dark-mode .token.prolog,
103
- body.dark-mode .token.doctype,
104
- body.dark-mode .token.cdata {
105
- color: rgba($dark-ink-500, 0.7);
106
- }
107
-
108
- body.dark-mode .token.boolean,
109
- body.dark-mode .token.number {
110
- color: $dark-accent-secondary;
111
- }
112
-
113
- body.dark-mode .token.selector,
114
- body.dark-mode .token.attr-name,
115
- body.dark-mode .token.string,
116
- body.dark-mode .token.inserted {
117
- color: #5fe3aa;
118
- }
119
-
120
- body.dark-mode .token.keyword,
121
- body.dark-mode .token.operator {
122
- color: $dark-accent-primary;
123
- }
124
-
125
- body.dark-mode .token.function,
126
- body.dark-mode .token.class-name {
127
- color: #9fb6ff;
180
+ body.dark-mode .highlight {
181
+ .c,
182
+ .ch,
183
+ .cd,
184
+ .cm,
185
+ .cpf,
186
+ .c1,
187
+ .cs,
188
+ .rouge-gutter {
189
+ color: $dark-ink-500;
190
+ }
191
+
192
+ .m,
193
+ .mb,
194
+ .mf,
195
+ .mh,
196
+ .mi,
197
+ .il,
198
+ .mo,
199
+ .mx,
200
+ .kc {
201
+ color: $dark-accent-secondary;
202
+ }
203
+
204
+ .s,
205
+ .sa,
206
+ .sb,
207
+ .sc,
208
+ .dl,
209
+ .sd,
210
+ .s2,
211
+ .se,
212
+ .sh,
213
+ .si,
214
+ .sx,
215
+ .s1,
216
+ .na,
217
+ .nb,
218
+ .bp,
219
+ .gi {
220
+ color: #5fe3aa;
221
+ }
222
+
223
+ .k,
224
+ .kd,
225
+ .kn,
226
+ .kp,
227
+ .kr,
228
+ .kt,
229
+ .kv,
230
+ .ow,
231
+ .cp,
232
+ .o {
233
+ color: $dark-accent-primary;
234
+ }
235
+
236
+ .nf,
237
+ .fm,
238
+ .nc,
239
+ .nd,
240
+ .ne {
241
+ color: #9fb6ff;
242
+ }
128
243
  }
data/_sass/_theme.scss CHANGED
@@ -1,31 +1,41 @@
1
1
  // Primary manifest for the DataLog theme.
2
2
  // Provides CSS custom properties and composes the Sass partials.
3
3
  @use "sass:color";
4
+ @use "sass:meta";
4
5
  // 1) Modules FIRST (no CSS before these)
5
6
  @use 'variables' as *; // gives access to Sass tokens here
6
7
  @use 'mixins' as *;
8
+ @use 'features';
7
9
 
8
10
  // Each partial below MUST import its own tokens if it references them.
9
- // `@use` here does NOT leak variables into those files' scopes.
10
- @use 'font-fallbacks';
11
- @use 'base';
12
- @use 'typography';
13
- @use 'layout';
14
- @use 'header';
15
- @use 'components';
16
- @use 'utilities';
17
- @use 'syntax-highlighting';
18
- @use 'mathematical';
19
- @use 'interactive';
20
- @use 'search';
21
- @use 'visualizations';
22
- @use 'phase1-enhancements';
23
- @use 'phase3-enhancements';
24
- @use 'phase4-enhancements';
25
- @use 'phase5-enhancements';
26
- @use 'package-docs';
11
+ // Loading it here does NOT leak variables into that file's scope.
12
+ // meta.load-css emits a partial's CSS at the point it is included, in this
13
+ // order, and unlike @use it may sit inside @if: the partials for optional
14
+ // features load only when their flag in _features.scss is on.
15
+ @include meta.load-css('font-fallbacks');
16
+ @include meta.load-css('base');
17
+ @include meta.load-css('typography');
18
+ @include meta.load-css('layout');
19
+ @include meta.load-css('header');
20
+ @include meta.load-css('components');
21
+ @include meta.load-css('utilities');
22
+ @include meta.load-css('syntax-highlighting');
23
+ @include meta.load-css('mathematical');
24
+ @if features.$visualizations {
25
+ @include meta.load-css('interactive');
26
+ }
27
+ @if features.$search {
28
+ @include meta.load-css('search');
29
+ }
30
+ @if features.$visualizations {
31
+ @include meta.load-css('visualizations');
32
+ }
33
+ @include meta.load-css('post-components');
34
+ @if features.$packages {
35
+ @include meta.load-css('package-docs');
36
+ }
27
37
 
28
- // 2) CSS rules AFTER all @use/@forward
38
+ // 2) CSS rules AFTER the partials
29
39
  :root {
30
40
  // Surface/background colors
31
41
  --color-surface: #{$color-surface-50};
@@ -146,3 +146,17 @@ pre code {
146
146
  text-transform: uppercase;
147
147
  letter-spacing: 0.08em;
148
148
  }
149
+
150
+ // Keyboard keys, such as the shortcut hints on the search page.
151
+ kbd {
152
+ display: inline-block;
153
+ padding: 0.25rem 0.5rem;
154
+ background: var(--color-background-secondary, #f7fafc);
155
+ border: 1px solid var(--color-border, #cbd5e0);
156
+ border-radius: 4px;
157
+ font-family: var(--font-mono, monospace);
158
+ font-size: 0.8125rem;
159
+ font-weight: 600;
160
+ color: var(--color-text-primary, #1a202c);
161
+ box-shadow: 0 2px 0 var(--color-border, #cbd5e0);
162
+ }
data/assets/css/main.scss CHANGED
@@ -1,4 +1,18 @@
1
1
  ---
2
2
  # Only front matter so Jekyll processes this file
3
3
  ---
4
+ {%- comment -%}
5
+ Configures _sass/_features.scss before the theme loads it, so the stylesheet
6
+ carries the styles of an optional feature only when this site uses it. A site
7
+ that copies this file to add its own rules keeps these lines.
8
+ {%- endcomment -%}
9
+ {%- assign notebook_pages = site.pages | where: "layout", "notebook" -%}
10
+ @use "features" with (
11
+ $search: {% if site.features.search %}true{% else %}false{% endif %},
12
+ $visualizations: {% if site.features.visualizations %}true{% else %}false{% endif %},
13
+ $notebooks: {% if notebook_pages.size > 0 %}true{% else %}false{% endif %},
14
+ $packages: {% if site.packages.size > 0 %}true{% else %}false{% endif %},
15
+ $academic-dashboard: {% if site.features.academic_dashboard %}true{% else %}false{% endif %},
16
+ $open-science-badges: {% if site.data.academic.badges.size > 0 %}true{% else %}false{% endif %}
17
+ );
4
18
  @use "theme";
@@ -1 +1 @@
1
- function u(){let e=window.DatalogAcademic||{},a=window.DatalogPublications||{},t=a.metrics||(e.citations?e.citations.metrics:{})||{},o=a.yearly_totals||(e.citations?e.citations.yearly_totals:{})||{};document.querySelectorAll("[data-citation-metric]").forEach(i=>{let c=i.getAttribute("data-citation-metric");if(!c)return;let n;switch(c){case"total":n=t.total;break;case"h_index":case"h-index":n=t.h_index;break;case"i10_index":case"i10-index":n=t.i10_index;break;case"since_total":n=t.since_2019?t.since_2019.total:void 0;break;case"since_h_index":n=t.since_2019?t.since_2019.h_index:void 0;break;case"since_i10":n=t.since_2019?t.since_2019.i10_index:void 0;break;default:if(c.startsWith("year_")){let s=c.replace("year_","");n=o[s]}break}typeof n=="number"?i.textContent=n.toLocaleString():n&&(i.textContent=n)})}function f(){let e=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).citation_totals||(e.citations?e.citations.per_publication:{})||{};document.querySelectorAll("[data-publication-citations]").forEach(o=>{let i=o.getAttribute("data-publication-citations");if(!i)return;let c=i.toLowerCase(),n;t[i]?n=t[i].total||t[i]:t[c]&&(n=t[c].total||t[c]),typeof n=="number"&&(o.textContent=n.toLocaleString())})}function p(){let e=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).yearly_totals||(e.citations?e.citations.yearly_totals:{})||{},o=document.querySelector("[data-citation-timeline]");o&&t&&o.querySelectorAll("li[data-year]").forEach(c=>{let n=c.getAttribute("data-year");if(!n)return;let s=c.querySelector("[data-year-total]"),r=t[n];s&&typeof r!="undefined"&&(s.textContent=Number(r).toLocaleString(),c.style.setProperty("--timeline-value",Math.min(Number(r)/5,100)))})}function l(e,a){document.querySelectorAll(e).forEach(t=>{t.addEventListener("click",()=>{let o=typeof a=="function"?a(t):a;o&&navigator.clipboard&&navigator.clipboard.writeText&&navigator.clipboard.writeText(o).then(()=>{t.dataset.copied="true",t.textContent="Copied!",setTimeout(()=>{t.dataset.copied="false",t.textContent=t.dataset.originalText||"Copy"},2e3)}).catch(()=>{t.dataset.copied="error",t.textContent="Error"})}),t.dataset.originalText=t.textContent})}function y(){l("[data-copy-citation]",e=>{let a=e.getAttribute("data-target");if(!a)return"";let t=document.getElementById(a);return t?t.value:""}),l("[data-copy-bibliography]",e=>{let a=e.getAttribute("data-target");if(!a)return"";let t=document.getElementById(a);return t?t.value:""})}function b(){let e=document.querySelector("[data-submission-filter]");if(e){let a=document.querySelectorAll(".submission-card"),t=()=>{let o=e.value;a.forEach(i=>{if(!o){i.hidden=!1;return}let c=i.getAttribute("data-submission-status");i.hidden=c!==o})};e.addEventListener("change",t),t()}}function m(){let e=document.querySelector("[data-calendar-filter]"),a=document.querySelector("[data-academic-calendar]");if(e&&a){let t=a.querySelectorAll("li[data-event-type]"),o=()=>{let i=e.value;t.forEach(c=>{if(!i){c.hidden=!1;return}let n=c.getAttribute("data-event-type");c.hidden=n!==i})};e.addEventListener("change",o),o()}}function x(){document.querySelectorAll(".open-science-badge").forEach(a=>{let t=a.querySelector(".open-science-badge__description"),o=a.querySelector(".open-science-badge__criteria"),i=[];t&&i.push(t.textContent.trim()),o&&i.push(o.textContent.trim()),i.length&&a.setAttribute("title",i.join(" \u2022 "))})}function d(){u(),f(),p(),y(),b(),m(),x()}typeof window!="undefined"&&document.readyState!=="loading"?d():typeof window!="undefined"&&document.addEventListener("DOMContentLoaded",d);export{l as attachCopyHandler,d as initAcademicFeatures,m as initCalendarFilter,y as initCopyHandlers,x as initOpenScienceBadges,b as initSubmissionFilter,u as populateCitationMetrics,p as populateCitationTimeline,f as populatePublicationCitations};
1
+ import"./chunks/chunk-225H5YXE.js";function d(){let a=window.DatalogAcademic||{},c=window.DatalogPublications||{},t=c.metrics||(a.citations?a.citations.metrics:{})||{},o=c.yearly_totals||(a.citations?a.citations.yearly_totals:{})||{};document.querySelectorAll("[data-citation-metric]").forEach(e=>{let n=e.getAttribute("data-citation-metric");if(!n)return;let i;switch(n){case"total":i=t.total;break;case"h_index":case"h-index":i=t.h_index;break;case"i10_index":case"i10-index":i=t.i10_index;break;case"since_total":i=t.since_2019?t.since_2019.total:void 0;break;case"since_h_index":i=t.since_2019?t.since_2019.h_index:void 0;break;case"since_i10":i=t.since_2019?t.since_2019.i10_index:void 0;break;default:if(n.startsWith("year_")){let s=n.replace("year_","");i=o[s]}break}typeof i=="number"?e.textContent=i.toLocaleString():i&&(e.textContent=i)})}function u(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).citation_totals||(a.citations?a.citations.per_publication:{})||{};document.querySelectorAll("[data-publication-citations]").forEach(o=>{let e=o.getAttribute("data-publication-citations");if(!e)return;let n=e.toLowerCase(),i;t[e]?i=t[e].total||t[e]:t[n]&&(i=t[n].total||t[n]),typeof i=="number"&&(o.textContent=i.toLocaleString())})}function f(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).yearly_totals||(a.citations?a.citations.yearly_totals:{})||{},o=document.querySelector("[data-citation-timeline]");o&&t&&o.querySelectorAll("li[data-year]").forEach(n=>{let i=n.getAttribute("data-year");if(!i)return;let s=n.querySelector("[data-year-total]"),r=t[i];s&&typeof r!="undefined"&&(s.textContent=Number(r).toLocaleString(),n.style.setProperty("--timeline-value",Math.min(Number(r)/5,100)))})}function y(){let a=document.querySelector("[data-submission-filter]");if(a){let c=document.querySelectorAll(".submission-card"),t=()=>{let o=a.value;c.forEach(e=>{if(!o){e.hidden=!1;return}let n=e.getAttribute("data-submission-status");e.hidden=n!==o})};a.addEventListener("change",t),t()}}function p(){let a=document.querySelector("[data-calendar-filter]"),c=document.querySelector("[data-academic-calendar]");if(a&&c){let t=c.querySelectorAll("li[data-event-type]"),o=()=>{let e=a.value;t.forEach(n=>{if(!e){n.hidden=!1;return}let i=n.getAttribute("data-event-type");n.hidden=i!==e})};a.addEventListener("change",o),o()}}function b(){document.querySelectorAll(".open-science-badge").forEach(c=>{let t=c.querySelector(".open-science-badge__description"),o=c.querySelector(".open-science-badge__criteria"),e=[];t&&e.push(t.textContent.trim()),o&&e.push(o.textContent.trim()),e.length&&c.setAttribute("title",e.join(" \u2022 "))})}function l(){d(),u(),f(),y(),p(),b()}typeof window!="undefined"&&document.readyState!=="loading"?l():typeof window!="undefined"&&document.addEventListener("DOMContentLoaded",l);export{l as initAcademicFeatures,p as initCalendarFilter,b as initOpenScienceBadges,y as initSubmissionFilter,d as populateCitationMetrics,f as populateCitationTimeline,u as populatePublicationCitations};
@@ -1 +1 @@
1
- function m(){return window.__DATALOG_ANALYTICS__||{}}function E(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function f(e){return!e||!Array.isArray(e.rows)?[]:e.rows}function d(e,a){return new Intl.NumberFormat(void 0,a||{maximumFractionDigits:0}).format(e||0)}function h(e,a,n){var r;if(!e)return;let c=n||((r=e.closest("table"))==null?void 0:r.querySelectorAll("th").length)||1,i=document.createElement("tr");i.className="placeholder";let s=document.createElement("td");s.setAttribute("colspan",c),s.textContent=a,i.appendChild(s),e.replaceChildren(i)}function v(){let e=document.getElementById("analytics-top-posts"),a=f(m().top_posts);if(e){if(!a.length){h(e,e.dataset.emptyMessage||"No data available",3);return}e.replaceChildren(),a.forEach(n=>{var b,y,C;let c=n.dimensionValues||[],i=n.metricValues||[],s=((b=c[0])==null?void 0:b.value)||"",r=Number(((y=i[0])==null?void 0:y.value)||0),t=Number(((C=i[1])==null?void 0:C.value)||0),o=document.createElement("tr"),l=document.createElement("a");l.href=s.startsWith("/")?s:`/${s}`,l.textContent=s||"\u2014",l.rel="noopener",l.className="analytics-link";let u=document.createElement("td");u.appendChild(l);let p=document.createElement("td");p.textContent=d(r);let g=document.createElement("td");g.textContent=d(t,{maximumFractionDigits:0}),o.append(u,p,g),e.appendChild(o)})}}function w(){let e=document.getElementById("analytics-search-terms");if(!e)return;let a=f(m().search_terms);if(!a.length){h(e,e.dataset.emptyMessage||"No search queries recorded",2);return}e.replaceChildren(),a.forEach(n=>{var u,p;let c=n.dimensionValues||[],i=n.metricValues||[],s=((u=c[0])==null?void 0:u.value)||"(not provided)",r=Number(((p=i[0])==null?void 0:p.value)||0),t=document.createElement("tr"),o=document.createElement("td");o.textContent=s;let l=document.createElement("td");l.textContent=d(r),t.append(o,l),e.appendChild(t)})}function N(e){return!e||e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}function _(){let e=document.getElementById("analytics-visitors-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().visitor_trends);if(!a.length)return;let n=a.map(t=>{var o,l;return N((l=(o=t.dimensionValues)==null?void 0:o[0])==null?void 0:l.value)}),c=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[0])==null?void 0:l.value)||0)}),i=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[1])==null?void 0:l.value)||0)}),s=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[2])==null?void 0:l.value)||0)}),r=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[3])==null?void 0:l.value)||0)});new Chart(e,{type:"line",data:{labels:n,datasets:[{label:"Total users",data:c,borderColor:"#2563eb",backgroundColor:"rgba(37, 99, 235, 0.15)",tension:.35,fill:!0},{label:"New users",data:i,borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.12)",tension:.35,fill:!1},{label:"Sessions",data:s,borderColor:"#9333ea",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.35,fill:!1},{label:"Page views",data:r,borderColor:"#f97316",backgroundColor:"rgba(249, 115, 22, 0.1)",borderDash:[6,6],tension:.35,fill:!1}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}},plugins:{legend:{position:"top"}}}})}function A(){let e=document.getElementById("analytics-engagement-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().engagement_by_page).slice(0,10);if(!a.length)return;let n=a.map(s=>{var r,t;return((t=(r=s.dimensionValues)==null?void 0:r[0])==null?void 0:t.value)||"\u2014"}),c=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[2])==null?void 0:t.value)||0)}),i=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[0])==null?void 0:t.value)||0)});new Chart(e,{type:"bar",data:{labels:n,datasets:[{label:"Engaged sessions",data:c,backgroundColor:"rgba(59, 130, 246, 0.7)"},{label:"Page views",data:i,backgroundColor:"rgba(14, 165, 233, 0.5)"}]},options:{responsive:!0,maintainAspectRatio:!1,indexAxis:"y",scales:{x:{beginAtZero:!0,ticks:{callback:s=>d(s)}}},plugins:{legend:{position:"top"}}}})}function k(){let e=document.getElementById("analytics-key-events");if(!e)return;let a=f(m().key_events);if(!a.length){let n=document.createElement("li");n.className="placeholder",n.textContent="No tracked events in the selected window.",e.replaceChildren(n);return}e.replaceChildren(),a.forEach(n=>{var t,o,l,u;let c=((o=(t=n.dimensionValues)==null?void 0:t[0])==null?void 0:o.value)||"event",i=Number(((u=(l=n.metricValues)==null?void 0:l[0])==null?void 0:u.value)||0),s=document.createElement("li"),r=document.createElement("strong");r.textContent=d(i),s.appendChild(r),s.appendChild(document.createTextNode(` ${c.replace(/_/g," ")}`)),e.appendChild(s)})}function x(){let e=m().scholar||{},a=document.querySelector('[data-field="scholar-total"]'),n=document.querySelector('[data-field="scholar-h-index"]'),c=document.querySelector('[data-field="scholar-i10-index"]');a&&(a.textContent=e.total?d(Number(e.total)):"\u2014"),n&&(n.textContent=e.h_index?d(Number(e.h_index)):"\u2014"),c&&(c.textContent=e.i10_index?d(Number(e.i10_index)):"\u2014");let i=document.getElementById("analytics-scholar-chart");if(!i||typeof Chart=="undefined")return;let s=e.yearly_totals||{},r=Object.entries(s).map(([t,o])=>[Number(t),Number(o)]).sort((t,o)=>t[0]-o[0]);r.length&&new Chart(i,{type:"bar",data:{labels:r.map(t=>t[0]),datasets:[{label:"Citations",data:r.map(t=>t[1]),backgroundColor:"rgba(99, 102, 241, 0.8)"}]},options:{responsive:!0,maintainAspectRatio:!1,scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}}}})}function V(){let e=document.getElementById("analytics-monthly-reports");if(!e)return;let a=Array.isArray(m().monthly_reports)?m().monthly_reports:[];if(!a.length){h(e,e.dataset.emptyMessage||"No monthly reports available",5);return}e.replaceChildren(),a.forEach(n=>{let c=document.createElement("tr"),i=document.createElement("td");i.textContent=n.month||"\u2014";let s=document.createElement("td");s.textContent=d(n.total_users||0);let r=document.createElement("td");r.textContent=d(n.new_users||0);let t=document.createElement("td");t.textContent=d(n.sessions||0);let o=document.createElement("td");o.textContent=d(n.page_views||0),c.append(i,s,r,t,o),e.appendChild(c)})}function I(){if(m().status!=="ok"){["analytics-top-posts","analytics-search-terms","analytics-monthly-reports"].forEach(n=>{let c=document.getElementById(n);c&&h(c,m().message||"Analytics data unavailable.")});let a=document.getElementById("analytics-key-events");if(a){let n=document.createElement("li");n.className="placeholder",n.textContent=m().message||"Analytics data unavailable.",a.replaceChildren(n)}x();return}v(),w(),_(),A(),k(),x(),V()}typeof window!="undefined"&&!window.__VITEST__&&E(I);export{h as ensurePlaceholder,N as formatDateLabel,d as formatNumber,E as onReady,f as parseRows,I as render,A as renderEngagementChart,k as renderKeyEvents,V as renderMonthlyReports,x as renderScholar,w as renderSearchTerms,v as renderTopPosts,_ as renderVisitorChart};
1
+ import"./chunks/chunk-225H5YXE.js";function m(){return window.__DATALOG_ANALYTICS__||{}}function E(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function f(e){return!e||!Array.isArray(e.rows)?[]:e.rows}function d(e,a){return new Intl.NumberFormat(void 0,a||{maximumFractionDigits:0}).format(e||0)}function h(e,a,n){var r;if(!e)return;let c=n||((r=e.closest("table"))==null?void 0:r.querySelectorAll("th").length)||1,i=document.createElement("tr");i.className="placeholder";let s=document.createElement("td");s.setAttribute("colspan",c),s.textContent=a,i.appendChild(s),e.replaceChildren(i)}function v(){let e=document.getElementById("analytics-top-posts"),a=f(m().top_posts);if(e){if(!a.length){h(e,e.dataset.emptyMessage||"No data available",3);return}e.replaceChildren(),a.forEach(n=>{var b,y,C;let c=n.dimensionValues||[],i=n.metricValues||[],s=((b=c[0])==null?void 0:b.value)||"",r=Number(((y=i[0])==null?void 0:y.value)||0),t=Number(((C=i[1])==null?void 0:C.value)||0),o=document.createElement("tr"),l=document.createElement("a");l.href=s.startsWith("/")?s:`/${s}`,l.textContent=s||"\u2014",l.rel="noopener",l.className="analytics-link";let u=document.createElement("td");u.appendChild(l);let p=document.createElement("td");p.textContent=d(r);let g=document.createElement("td");g.textContent=d(t,{maximumFractionDigits:0}),o.append(u,p,g),e.appendChild(o)})}}function w(){let e=document.getElementById("analytics-search-terms");if(!e)return;let a=f(m().search_terms);if(!a.length){h(e,e.dataset.emptyMessage||"No search queries recorded",2);return}e.replaceChildren(),a.forEach(n=>{var u,p;let c=n.dimensionValues||[],i=n.metricValues||[],s=((u=c[0])==null?void 0:u.value)||"(not provided)",r=Number(((p=i[0])==null?void 0:p.value)||0),t=document.createElement("tr"),o=document.createElement("td");o.textContent=s;let l=document.createElement("td");l.textContent=d(r),t.append(o,l),e.appendChild(t)})}function N(e){return!e||e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}function _(){let e=document.getElementById("analytics-visitors-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().visitor_trends);if(!a.length)return;let n=a.map(t=>{var o,l;return N((l=(o=t.dimensionValues)==null?void 0:o[0])==null?void 0:l.value)}),c=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[0])==null?void 0:l.value)||0)}),i=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[1])==null?void 0:l.value)||0)}),s=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[2])==null?void 0:l.value)||0)}),r=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[3])==null?void 0:l.value)||0)});new Chart(e,{type:"line",data:{labels:n,datasets:[{label:"Total users",data:c,borderColor:"#2563eb",backgroundColor:"rgba(37, 99, 235, 0.15)",tension:.35,fill:!0},{label:"New users",data:i,borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.12)",tension:.35,fill:!1},{label:"Sessions",data:s,borderColor:"#9333ea",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.35,fill:!1},{label:"Page views",data:r,borderColor:"#f97316",backgroundColor:"rgba(249, 115, 22, 0.1)",borderDash:[6,6],tension:.35,fill:!1}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}},plugins:{legend:{position:"top"}}}})}function A(){let e=document.getElementById("analytics-engagement-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().engagement_by_page).slice(0,10);if(!a.length)return;let n=a.map(s=>{var r,t;return((t=(r=s.dimensionValues)==null?void 0:r[0])==null?void 0:t.value)||"\u2014"}),c=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[2])==null?void 0:t.value)||0)}),i=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[0])==null?void 0:t.value)||0)});new Chart(e,{type:"bar",data:{labels:n,datasets:[{label:"Engaged sessions",data:c,backgroundColor:"rgba(59, 130, 246, 0.7)"},{label:"Page views",data:i,backgroundColor:"rgba(14, 165, 233, 0.5)"}]},options:{responsive:!0,maintainAspectRatio:!1,indexAxis:"y",scales:{x:{beginAtZero:!0,ticks:{callback:s=>d(s)}}},plugins:{legend:{position:"top"}}}})}function k(){let e=document.getElementById("analytics-key-events");if(!e)return;let a=f(m().key_events);if(!a.length){let n=document.createElement("li");n.className="placeholder",n.textContent="No tracked events in the selected window.",e.replaceChildren(n);return}e.replaceChildren(),a.forEach(n=>{var t,o,l,u;let c=((o=(t=n.dimensionValues)==null?void 0:t[0])==null?void 0:o.value)||"event",i=Number(((u=(l=n.metricValues)==null?void 0:l[0])==null?void 0:u.value)||0),s=document.createElement("li"),r=document.createElement("strong");r.textContent=d(i),s.appendChild(r),s.appendChild(document.createTextNode(` ${c.replace(/_/g," ")}`)),e.appendChild(s)})}function x(){let e=m().scholar||{},a=document.querySelector('[data-field="scholar-total"]'),n=document.querySelector('[data-field="scholar-h-index"]'),c=document.querySelector('[data-field="scholar-i10-index"]');a&&(a.textContent=e.total?d(Number(e.total)):"\u2014"),n&&(n.textContent=e.h_index?d(Number(e.h_index)):"\u2014"),c&&(c.textContent=e.i10_index?d(Number(e.i10_index)):"\u2014");let i=document.getElementById("analytics-scholar-chart");if(!i||typeof Chart=="undefined")return;let s=e.yearly_totals||{},r=Object.entries(s).map(([t,o])=>[Number(t),Number(o)]).sort((t,o)=>t[0]-o[0]);r.length&&new Chart(i,{type:"bar",data:{labels:r.map(t=>t[0]),datasets:[{label:"Citations",data:r.map(t=>t[1]),backgroundColor:"rgba(99, 102, 241, 0.8)"}]},options:{responsive:!0,maintainAspectRatio:!1,scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}}}})}function V(){let e=document.getElementById("analytics-monthly-reports");if(!e)return;let a=Array.isArray(m().monthly_reports)?m().monthly_reports:[];if(!a.length){h(e,e.dataset.emptyMessage||"No monthly reports available",5);return}e.replaceChildren(),a.forEach(n=>{let c=document.createElement("tr"),i=document.createElement("td");i.textContent=n.month||"\u2014";let s=document.createElement("td");s.textContent=d(n.total_users||0);let r=document.createElement("td");r.textContent=d(n.new_users||0);let t=document.createElement("td");t.textContent=d(n.sessions||0);let o=document.createElement("td");o.textContent=d(n.page_views||0),c.append(i,s,r,t,o),e.appendChild(c)})}function I(){if(m().status!=="ok"){["analytics-top-posts","analytics-search-terms","analytics-monthly-reports"].forEach(n=>{let c=document.getElementById(n);c&&h(c,m().message||"Analytics data unavailable.")});let a=document.getElementById("analytics-key-events");if(a){let n=document.createElement("li");n.className="placeholder",n.textContent=m().message||"Analytics data unavailable.",a.replaceChildren(n)}x();return}v(),w(),_(),A(),k(),x(),V()}typeof window!="undefined"&&!window.__VITEST__&&E(I);export{h as ensurePlaceholder,N as formatDateLabel,d as formatNumber,E as onReady,f as parseRows,I as render,A as renderEngagementChart,k as renderKeyEvents,V as renderMonthlyReports,x as renderScholar,w as renderSearchTerms,v as renderTopPosts,_ as renderVisitorChart};
@@ -0,0 +1 @@
1
+ var f=Object.defineProperty;var d=Object.getOwnPropertySymbols;var g=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable;var e=(c,a,b)=>a in c?f(c,a,{enumerable:!0,configurable:!0,writable:!0,value:b}):c[a]=b,i=(c,a)=>{for(var b in a||(a={}))g.call(a,b)&&e(c,b,a[b]);if(d)for(var b of d(a))h.call(a,b)&&e(c,b,a[b]);return c};export{i as a};
@@ -1 +1 @@
1
- var f="datalog-color-mode",u="dark-mode";function I(e){let t=localStorage.getItem(f);return t==="dark"?!0:t==="light"?!1:e.matches}function h(){let e=document.querySelector("[data-toggle-dark-mode]"),t=document.body,n=window.matchMedia("(prefers-color-scheme: dark)");I(n)&&t.classList.add(u);let r=()=>{let i=t.classList.contains(u)?"dark":"light";t.dataset.theme=i,document.documentElement.dataset.theme=i},o=()=>{r(),e&&e.setAttribute("aria-pressed",t.classList.contains(u))};o(),e&&e.addEventListener("click",()=>{let i=t.classList.toggle(u);e.setAttribute("aria-pressed",String(i)),localStorage.setItem(f,i?"dark":"light"),r()}),n.addEventListener("change",i=>{localStorage.getItem(f)||(i.matches?t.classList.add(u):t.classList.remove(u),o())})}var C="datalog-github-";function m(e,t){return`${C}${e}-${t}`}function N(e,t,n){try{let r=localStorage.getItem(m(e,t));if(!r)return null;let o=JSON.parse(r);return!o||typeof o!="object"?null:Date.now()-o.timestamp>n?(localStorage.removeItem(m(e,t)),null):o.data}catch(r){return null}}function P(e,t,n){try{localStorage.setItem(m(e,t),JSON.stringify({timestamp:Date.now(),data:n}))}catch(r){}}async function D(e,t,n,r){let o=N(e,t,r);if(o)return o;try{let i=await fetch(`${n}/${e}/${t}`);if(!i.ok)throw new Error(`GitHub API error: ${i.status}`);let c=await i.json();return P(e,t,c),c}catch(i){return null}}function G(e,t){e.querySelectorAll("[data-github-stat]").forEach(r=>{let o=r.getAttribute("data-github-stat");if(!o)return;let i=t[o];typeof i=="number"?r.textContent=i.toLocaleString():typeof i=="string"&&i.length>0&&(r.textContent=i)})}function p(){let e=document.querySelectorAll("[data-github-owner][data-github-repo]");if(!e.length)return Promise.resolve();let n=(window.DatalogIntegrations||{}).github||{};if(n.enabled===!1)return Promise.resolve();let r=n.api_base||"https://api.github.com/repos",o=Number(n.cache_ttl||43200)*1e3,i=Array.from(e).map(c=>{let l=c.getAttribute("data-github-owner"),d=c.getAttribute("data-github-repo");return!l||!d?Promise.resolve():D(l,d,r,o).then(a=>{a&&G(c,a)})});return Promise.all(i)}var H="[data-language-filter], [data-navigate-on-change]";function $(e){if(typeof e!="string")return null;let t=Array.from(e).filter(r=>{let o=r.codePointAt(0);return o>31&&o!==127}).join("").trim();if(!t)return null;let n=/^[a-z][a-z0-9+.-]*:/i.exec(t);return n&&!/^https?:$/i.test(n[0])?null:t}function y(){let e=document.querySelectorAll(H);e.length!==0&&e.forEach(t=>{t.addEventListener("change",n=>{let r=$(n.target&&n.target.value);r&&(window.location.href=r)})})}var q="(min-width: 48rem)",b="#site-nav",L=".nav-toggle",g="nav-open";function S(e){return e.replace(/index\.html$/,"").replace(/\/$/,"")}function O(e){let t=e.getAttribute("href");if(!t)return null;try{let n=new URL(t,window.location.origin);if(!n.hash)return null;let r=new URL(window.location.href);return S(n.pathname)!==S(r.pathname)?null:n.hash.replace("#","")}catch(n){return null}}function R(e){if(!e)return!1;let t=document.getElementById(e);return t?(t.scrollIntoView({behavior:"smooth",block:"start"}),!0):!1}function v(){let e=document.querySelector(b);if(!e)return;let t=document.querySelector(L),n=document.body,r=window.matchMedia(q),o=a=>{if(a){e.dataset.open="true",n.classList.remove(g),t&&(t.setAttribute("aria-expanded","false"),t.classList.remove("is-active"));return}let s=e.dataset.open==="true";s||(e.dataset.open="false"),t&&(t.setAttribute("aria-expanded",String(s)),t.classList.toggle("is-active",s))},i=({focusToggle:a=!1}={})=>{r.matches||(e.dataset.open="false",n.classList.remove(g),t&&(t.setAttribute("aria-expanded","false"),t.classList.remove("is-active"),a&&t.focus()))},c=()=>{r.matches||(e.dataset.open="true",n.classList.add(g),t&&(t.setAttribute("aria-expanded","true"),t.classList.add("is-active")))},l=()=>{r.matches||(e.dataset.open==="true"?i():c())};r.matches||(e.dataset.open="false"),o(r.matches),r.addEventListener("change",a=>{a.matches?o(!0):(i(),e.dataset.open="false",o(!1))}),e.querySelectorAll(".nav-link").forEach(a=>{let s=O(a);a.addEventListener("click",x=>{r.matches||i(),s&&R(s)&&x.preventDefault()})}),t&&t.addEventListener("click",()=>{l()}),document.addEventListener("keydown",a=>{a.key==="Escape"&&i({focusToggle:!0})}),document.addEventListener("click",a=>{if(r.matches||e.dataset.open!=="true")return;let s=a.target;!s||typeof s.closest!="function"||s.closest(b)||t&&s.closest(L)||i()})}function _(e,t){let n=window.pageYOffset||document.documentElement.scrollTop,r=document.documentElement.scrollHeight-window.innerHeight,o=r>0?Math.min(n/r*100,100):0;e.tagName==="PROGRESS"?e.setAttribute("value",String(o)):e.style.setProperty("--progress",`${o}%`),t&&(t.textContent=Math.round(o))}function E(){let e=document.querySelector("[data-scroll-progress]");if(!e)return;let t=document.querySelector("[data-scroll-progress-value]"),n=()=>_(e,t);n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)}function k(e){if(!e)return;let t=e.querySelector("input[type='search']"),n=e.getAttribute("action");t?(t.focus(),t.select()):n&&(window.location.href=n)}function K(e){if(!e)return!1;if(e.isContentEditable)return!0;let t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"}function w(){let e=document.querySelector(".site-search");e&&document.addEventListener("keydown",t=>{K(document.activeElement)||(t.key==="/"&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&(t.preventDefault(),k(e)),(t.key==="k"||t.key==="K")&&(t.ctrlKey||t.metaKey)&&(t.preventDefault(),k(e)))})}function M(e){if(!e)return;e.getAttribute("tabindex")===null&&(e.setAttribute("tabindex","-1"),e.dataset.skipLinkTempTabindex="true"),e.addEventListener("blur",()=>{e.dataset.skipLinkTempTabindex&&(e.removeAttribute("tabindex"),delete e.dataset.skipLinkTempTabindex)},{once:!0}),e.focus()}function A(){let e=document.querySelectorAll(".skip-link[href^='#']");e.length&&e.forEach(t=>{t.addEventListener("click",n=>{let o=(t.getAttribute("href")||"").slice(1);if(!o)return;let i=document.getElementById(o);i&&(n.preventDefault(),M(i))})})}function T(){A(),v(),h(),y(),E(),w(),p()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",T):T();export{T as initializeCore};
1
+ import{a as h}from"./chunks/chunk-225H5YXE.js";var _="[data-copy-citation], [data-copy-bibliography]";var p=!1;function G(t){let e=t.getAttribute("data-target"),n=e?document.getElementById(e):null;return n?"value"in n?n.value:n.textContent||"":""}async function O(t){let e=G(t);if(!(!e||!navigator.clipboard||!navigator.clipboard.writeText)){t.dataset.originalText===void 0&&(t.dataset.originalText=t.textContent);try{await navigator.clipboard.writeText(e),t.dataset.copied="true",t.textContent="Copied!",setTimeout(()=>{t.dataset.copied="false",t.textContent=t.dataset.originalText},2e3)}catch(n){t.dataset.copied="error",t.textContent="Error"}}}function g(){p||(p=!0,document.addEventListener("click",t=>{let e=t.target instanceof Element?t.target.closest(_):null;e&&O(e)}))}var y="datalog-color-mode",l="dark-mode";function b(){try{return localStorage.getItem(y)}catch(t){return null}}function $(t){try{localStorage.setItem(y,t)}catch(e){}}function q(t){let e=b();return e==="dark"?!0:e==="light"?!1:t.matches}function E(){let t=document.querySelector("[data-toggle-dark-mode]"),e=document.body,n=window.matchMedia("(prefers-color-scheme: dark)");q(n)&&e.classList.add(l);let r=()=>{let a=e.classList.contains(l)?"dark":"light";e.dataset.theme=a,document.documentElement.dataset.theme=a},o=()=>{r(),t&&t.setAttribute("aria-pressed",e.classList.contains(l))};o(),t&&t.addEventListener("click",()=>{let a=e.classList.toggle(l);t.setAttribute("aria-pressed",String(a)),$(a?"dark":"light"),r()}),n.addEventListener("change",a=>{b()||(a.matches?e.classList.add(l):e.classList.remove(l),o())})}var H="datalog-github-";var S=Symbol("recently-failed");function f(t,e){return`${H}${t}-${e}`}function K(t,e,n){try{let r=localStorage.getItem(f(t,e));if(!r)return null;let o=JSON.parse(r);if(!o||typeof o!="object")return null;let a=o.failed?6e5:n;return Date.now()-o.timestamp>a?(localStorage.removeItem(f(t,e)),null):o.failed?S:o.data}catch(r){return null}}function L(t,e,n){try{localStorage.setItem(f(t,e),JSON.stringify(h({timestamp:Date.now()},n)))}catch(r){}}async function M(t,e,n,r){let o=K(t,e,r);if(o===S)return null;if(o)return o;try{let a=await fetch(`${n}/${t}/${e}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let s=await a.json();return L(t,e,{data:s}),s}catch(a){return L(t,e,{failed:!0}),null}}function B(t,e){t.querySelectorAll("[data-github-stat]").forEach(r=>{let o=r.getAttribute("data-github-stat");if(!o)return;let a=e[o];typeof a=="number"?r.textContent=a.toLocaleString():typeof a=="string"&&a.length>0&&(r.textContent=a)})}function F(t){t.dataset.githubState="error";let e=t.getAttribute("data-github-unavailable");e&&t.querySelectorAll("[data-github-stat]").forEach(n=>{n.textContent=e})}function v(){let t=document.querySelectorAll("[data-github-owner][data-github-repo]");if(!t.length)return Promise.resolve();let n=(window.DatalogIntegrations||{}).github||{};if(n.enabled===!1)return Promise.resolve();let r=n.api_base||"https://api.github.com/repos",o=Number(n.cache_ttl||43200)*1e3,a=Array.from(t).map(s=>{let u=s.getAttribute("data-github-owner"),d=s.getAttribute("data-github-repo");return!u||!d?Promise.resolve():(s.dataset.githubState="loading",M(u,d,r,o).then(i=>{if(!i){F(s);return}B(s,i),s.dataset.githubState="ready"}))});return Promise.all(a)}var z="[data-language-filter], [data-navigate-on-change]";function U(t){if(typeof t!="string")return null;let e=Array.from(t).filter(r=>{let o=r.codePointAt(0);return o>31&&o!==127}).join("").trim();if(!e)return null;let n=/^[a-z][a-z0-9+.-]*:/i.exec(e);return n&&!/^https?:$/i.test(n[0])?null:e}function A(){let t=document.querySelectorAll(z);t.length!==0&&t.forEach(e=>{e.addEventListener("change",n=>{let r=U(n.target&&n.target.value);r&&(window.location.href=r)})})}var V="(min-width: 48rem)",T="#site-nav",k=".nav-toggle",m="nav-open";function w(t){return t.replace(/index\.html$/,"").replace(/\/$/,"")}function j(t){let e=t.getAttribute("href");if(!e)return null;try{let n=new URL(e,window.location.origin);if(!n.hash)return null;let r=new URL(window.location.href);return w(n.pathname)!==w(r.pathname)?null:n.hash.replace("#","")}catch(n){return null}}function Y(t){if(!t)return!1;let e=document.getElementById(t);return e?(e.scrollIntoView({behavior:"smooth",block:"start"}),!0):!1}function x(){let t=document.querySelector(T);if(!t)return;let e=document.querySelector(k),n=document.body,r=window.matchMedia(V),o=i=>{if(i){t.dataset.open="true",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"));return}let c=t.dataset.open==="true";c||(t.dataset.open="false"),e&&(e.setAttribute("aria-expanded",String(c)),e.classList.toggle("is-active",c))},a=({focusToggle:i=!1}={})=>{r.matches||(t.dataset.open="false",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"),i&&e.focus()))},s=()=>{r.matches||(t.dataset.open="true",n.classList.add(m),e&&(e.setAttribute("aria-expanded","true"),e.classList.add("is-active")))},u=()=>{r.matches||(t.dataset.open==="true"?a():s())};r.matches||(t.dataset.open="false"),o(r.matches),r.addEventListener("change",i=>{i.matches?o(!0):(a(),t.dataset.open="false",o(!1))}),t.querySelectorAll(".nav-link").forEach(i=>{let c=j(i);i.addEventListener("click",R=>{r.matches||a(),c&&Y(c)&&R.preventDefault()})}),e&&e.addEventListener("click",()=>{u()}),document.addEventListener("keydown",i=>{i.key==="Escape"&&t.dataset.open==="true"&&a({focusToggle:!0})}),document.addEventListener("click",i=>{if(r.matches||t.dataset.open!=="true")return;let c=i.target;!c||typeof c.closest!="function"||c.closest(T)||e&&c.closest(k)||a()})}function J(t,e){let n=window.pageYOffset||document.documentElement.scrollTop,r=document.documentElement.scrollHeight-window.innerHeight,o=r>0?Math.min(n/r*100,100):0;t.tagName==="PROGRESS"?t.setAttribute("value",String(o)):t.style.setProperty("--progress",`${o}%`),e&&(e.textContent=Math.round(o))}function C(){let t=document.querySelector("[data-scroll-progress]");if(!t)return;let e=document.querySelector("[data-scroll-progress-value]"),n=()=>J(t,e);n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)}function I(t){if(!t)return;let e=t.querySelector("input[type='search']"),n=t.getAttribute("action");e?(e.focus(),e.select()):n&&(window.location.href=n)}function X(t){if(!t)return!1;if(t.isContentEditable)return!0;let e=t.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function N(){let t=document.querySelector(".site-search");t&&document.addEventListener("keydown",e=>{X(document.activeElement)||(e.key==="/"&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),I(t)),(e.key==="k"||e.key==="K")&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),I(t)))})}function Q(t){if(!t)return;t.getAttribute("tabindex")===null&&(t.setAttribute("tabindex","-1"),t.dataset.skipLinkTempTabindex="true"),t.addEventListener("blur",()=>{t.dataset.skipLinkTempTabindex&&(t.removeAttribute("tabindex"),delete t.dataset.skipLinkTempTabindex)},{once:!0}),t.focus()}function P(){let t=document.querySelectorAll(".skip-link[href^='#']");t.length&&t.forEach(e=>{e.addEventListener("click",n=>{let o=(e.getAttribute("href")||"").slice(1);if(!o)return;let a=document.getElementById(o);a&&(n.preventDefault(),Q(a))})})}var Z=[P,x,E,A,C,N,v,g];function D(t=Z){t.forEach(e=>{try{e()}catch(n){}})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>D()):D();export{D as initializeCore};
@@ -1 +1 @@
1
- function y(){let e=document.getElementById("datalog-js-manifest");if(!e||!e.textContent)return{};try{return JSON.parse(e.textContent)}catch(n){return{}}}function l(e){return`feature${e.replace(/(^|-)([a-z])/g,(n,o,s)=>s.toUpperCase())}`}function r(e,n){let o=document.body;if(!o)return;let s=`${l(e)}State`;o.dataset[s]=n}async function d(e){return import(e)}var p=[{name:"search",test:()=>document.querySelector("[data-search-app]")||document.querySelector(".site-search")},{name:"visualizations",test:()=>document.querySelector("[data-viz-type]")},{name:"math",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureMath)==="true"}},{name:"academic",test:()=>document.querySelector("[data-citation-metric], [data-citation-table], [data-citation-chart]")},{name:"notebook",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureNotebook)==="true"||document.querySelector(".notebook-output")}}];async function i(e){let n=e||y(),{core:o,features:s={}}=n;if(!o)return;try{r("core","loading"),await d(o),r("core","ready")}catch(t){r("core","error");return}let u=document.body;if(!u)return;let m=p.filter(t=>{let c=l(t.name),a=u.dataset[c];return a==="true"||a==="auto"?a==="auto"&&typeof t.test=="function"?!!t.test():!0:!1}).map(async({name:t,test:c})=>{let a=s[t];if(a){r(t,"loading");try{if(typeof c=="function"&&!c()){r(t,"skipped");return}await d(a),r(t,"ready")}catch(f){r(t,"error")}}});await Promise.all(m)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>i()):i();export{i as bootstrapFeatures};
1
+ import"./chunks/chunk-225H5YXE.js";function y(){let e=document.getElementById("datalog-js-manifest");if(!e||!e.textContent)return{};try{return JSON.parse(e.textContent)}catch(n){return{}}}function l(e){return`feature${e.replace(/(^|-)([a-z])/g,(n,o,s)=>s.toUpperCase())}`}function r(e,n){let o=document.body;if(!o)return;let s=`${l(e)}State`;o.dataset[s]=n}async function u(e){return import(e)}var p=[{name:"search",test:()=>document.querySelector("[data-search-app]")},{name:"visualizations",test:()=>document.querySelector("[data-viz-type]")},{name:"math",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureMath)==="true"}},{name:"academic",test:()=>document.querySelector("[data-citation-metric], [data-citation-table], [data-citation-chart]")},{name:"notebook",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureNotebook)==="true"||document.querySelector(".notebook-output")}}];async function i(e){let n=e||y(),{core:o,features:s={}}=n;if(!o)return;try{r("core","loading"),await u(o),r("core","ready")}catch(t){r("core","error");return}let d=document.body;if(!d)return;let f=p.filter(t=>{let c=l(t.name),a=d.dataset[c];return a==="true"||a==="auto"?a==="auto"&&typeof t.test=="function"?!!t.test():!0:!1}).map(async({name:t,test:c})=>{let a=s[t];if(a){r(t,"loading");try{if(typeof c=="function"&&!c()){r(t,"skipped");return}await u(a),r(t,"ready")}catch(m){r(t,"error")}}});await Promise.all(f)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>i()):i();export{i as bootstrapFeatures};
@@ -1 +1 @@
1
- var c=t=>new Promise((r,o)=>{if(document.querySelector(`script[src="${t}"]`)){r();return}let e=document.createElement("script");e.src=t,e.async=!0,e.onload=()=>r(),e.onerror=n=>o(n),document.head.appendChild(e)}),i=()=>{let t=document.querySelectorAll(".notebook-output-plotly");return t.length?(typeof window.Plotly!="undefined"?Promise.resolve(window.Plotly):c("https://cdn.plot.ly/plotly-2.27.0.min.js").then(()=>window.Plotly)).then(o=>{t.forEach(e=>{try{let n=JSON.parse(e.dataset.plotly||"{}"),l=n.layout||{},a=Array.isArray(n.data)?n.data:Array.isArray(n)?n:[];o.newPlot(e,a,l,{responsive:!0})}catch(n){e.replaceChildren(),e.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly figure could not be rendered. Open in Binder or Colab to interact.</p>')}})}):Promise.resolve()},d=()=>{let t=document.querySelectorAll(".notebook-output-vega");return t.length?c("https://cdn.jsdelivr.net/npm/vega@5").then(()=>c("https://cdn.jsdelivr.net/npm/vega-lite@5")).then(()=>c("https://cdn.jsdelivr.net/npm/vega-embed@6")).then(()=>{t.forEach(o=>{try{let e=JSON.parse(o.dataset.vega||"{}");window.vegaEmbed(o,e,{actions:!1})}catch(e){o.replaceChildren(),o.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega specification could not be parsed. Open in Binder for the interactive version.</p>')}})}):Promise.resolve()},p=()=>{document.querySelectorAll(".notebook-segment").forEach((r,o)=>{let e=r.id||`cell-${o+1}`;r.id=e,r.setAttribute("data-cell-anchor",e)})},u=()=>{let t={root:null,rootMargin:"0px 0px -65%",threshold:0},r=document.querySelectorAll(".notebook-segment"),o=document.querySelectorAll("[data-cell-anchor-link]");if(!r.length||!o.length)return;let e=new IntersectionObserver(n=>{n.forEach(l=>{l.isIntersecting&&o.forEach(a=>{a.classList.toggle("is-active",a.hash===`#${l.target.id}`)})})},t);r.forEach(n=>e.observe(n))},s=()=>{p(),i().catch(()=>{document.querySelectorAll(".notebook-output-plotly").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),d().catch(()=>{document.querySelectorAll(".notebook-output-vega").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),u()};typeof window!="undefined"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",s):typeof window!="undefined"&&s();export{p as annotateCells,u as handleScrollSpy,s as initNotebookFeatures,i as initPlotly,d as initVega,c as loadScript};
1
+ import"./chunks/chunk-225H5YXE.js";var a=t=>new Promise((r,o)=>{if(document.querySelector(`script[src="${t}"]`)){r();return}let e=document.createElement("script");e.src=t,e.async=!0,e.onload=()=>r(),e.onerror=n=>o(n),document.head.appendChild(e)}),i=()=>{let t=document.querySelectorAll(".notebook-output-plotly");return t.length?(typeof window.Plotly!="undefined"?Promise.resolve(window.Plotly):a("https://cdn.jsdelivr.net/npm/plotly.js-dist-min@2.27.0/plotly.min.js").then(()=>window.Plotly)).then(o=>{t.forEach(e=>{try{let n=JSON.parse(e.dataset.plotly||"{}"),l=n.layout||{},s=Array.isArray(n.data)?n.data:Array.isArray(n)?n:[];o.newPlot(e,s,l,{responsive:!0})}catch(n){e.replaceChildren(),e.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly figure could not be rendered. Open in Binder or Colab to interact.</p>')}})}):Promise.resolve()},d=()=>{let t=document.querySelectorAll(".notebook-output-vega");return t.length?a("https://cdn.jsdelivr.net/npm/vega@5").then(()=>a("https://cdn.jsdelivr.net/npm/vega-lite@5")).then(()=>a("https://cdn.jsdelivr.net/npm/vega-embed@6")).then(()=>{t.forEach(o=>{try{let e=JSON.parse(o.dataset.vega||"{}");window.vegaEmbed(o,e,{actions:!1})}catch(e){o.replaceChildren(),o.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega specification could not be parsed. Open in Binder for the interactive version.</p>')}})}):Promise.resolve()},p=()=>{document.querySelectorAll(".notebook-segment").forEach((r,o)=>{let e=r.id||`cell-${o+1}`;r.id=e,r.setAttribute("data-cell-anchor",e)})},u=()=>{let t={root:null,rootMargin:"0px 0px -65%",threshold:0},r=document.querySelectorAll(".notebook-segment"),o=document.querySelectorAll("[data-cell-anchor-link]");if(!r.length||!o.length)return;let e=new IntersectionObserver(n=>{n.forEach(l=>{l.isIntersecting&&o.forEach(s=>{s.classList.toggle("is-active",s.hash===`#${l.target.id}`)})})},t);r.forEach(n=>e.observe(n))},c=()=>{p(),i().catch(()=>{document.querySelectorAll(".notebook-output-plotly").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),d().catch(()=>{document.querySelectorAll(".notebook-output-vega").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),u()};typeof window!="undefined"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",c):typeof window!="undefined"&&c();export{p as annotateCells,u as handleScrollSpy,c as initNotebookFeatures,i as initPlotly,d as initVega,a as loadScript};