datalog-theme 0.7.0 → 0.9.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 (203) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +188 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +25 -17
  5. data/_data/cdn-integrity.yml +0 -30
  6. data/_data/i18n/en.yml +297 -0
  7. data/_data/i18n/es.yml +297 -0
  8. data/_data/i18n/pt.yml +297 -0
  9. data/_data/js_manifest.json +16 -0
  10. data/_includes/analytics/dashboard.html +3 -1
  11. data/_includes/components/api-function.html +20 -1
  12. data/_includes/components/author-bio.html +21 -11
  13. data/_includes/components/author-list.html +32 -0
  14. data/_includes/components/citation-tools.html +33 -25
  15. data/_includes/components/comments-thread.html +90 -0
  16. data/_includes/components/contact-form.html +120 -0
  17. data/_includes/components/correction-report.html +82 -0
  18. data/_includes/components/enhanced-code-block.html +1 -1
  19. data/_includes/components/enhanced-toc.html +6 -7
  20. data/_includes/components/license-link.html +13 -0
  21. data/_includes/components/license-notice.html +28 -0
  22. data/_includes/components/moderation-inbox.html +139 -0
  23. data/_includes/components/reactions.html +49 -0
  24. data/_includes/components/reading-list.html +31 -0
  25. data/_includes/components/reading-mode-toggle.html +65 -0
  26. data/_includes/components/reading-state-bookmark.html +27 -0
  27. data/_includes/components/reading-state-panel.html +71 -0
  28. data/_includes/components/reproducibility.html +61 -0
  29. data/_includes/components/responsive-image.html +3 -3
  30. data/_includes/components/revision-history.html +39 -0
  31. data/_includes/components/revision-notice.html +35 -0
  32. data/_includes/components/series-nav.html +64 -0
  33. data/_includes/components/subscribe-form.html +88 -0
  34. data/_includes/components/subscription-manage.html +68 -0
  35. data/_includes/components/webmentions.html +48 -0
  36. data/_includes/csp-meta.html +135 -11
  37. data/_includes/footer.html +22 -20
  38. data/_includes/head.html +111 -63
  39. data/_includes/header/navigation.html +12 -15
  40. data/_includes/header.html +28 -19
  41. data/_includes/layouts/default/article.html +9 -7
  42. data/_includes/meta/dynamic-services-config.html +14 -0
  43. data/_includes/meta/math-config.html +18 -10
  44. data/_includes/meta/person-json.html +27 -0
  45. data/_includes/meta/publisher.html +45 -0
  46. data/_includes/meta/schema.html +67 -30
  47. data/_includes/meta/scholarly.html +121 -0
  48. data/_includes/meta/scripts-loader.html +18 -32
  49. data/_includes/meta/webmention-discovery.html +14 -0
  50. data/_includes/post/related-posts.html +4 -7
  51. data/_includes/scripts.html +57 -0
  52. data/_includes/search/index-data.json +9 -34
  53. data/_layouts/dataset.html +5 -3
  54. data/_layouts/default.html +16 -8
  55. data/_layouts/notebook.html +1 -0
  56. data/_layouts/package.html +4 -2
  57. data/_layouts/page.html +15 -0
  58. data/_layouts/portfolio.html +1 -0
  59. data/_layouts/post.html +102 -23
  60. data/_layouts/project.html +4 -3
  61. data/_layouts/research.html +20 -8
  62. data/_plugins/analytics_dashboard.rb +9 -3
  63. data/_plugins/authors.rb +133 -0
  64. data/_plugins/config_validator.rb +231 -23
  65. data/_plugins/critical_css_check.rb +42 -0
  66. data/_plugins/csp_generator.rb +18 -28
  67. data/_plugins/datalog_bibliography.rb +9 -7
  68. data/_plugins/datalog_comments.rb +8 -5
  69. data/_plugins/datalog_slides.rb +9 -8
  70. data/_plugins/i18n.rb +13 -12
  71. data/_plugins/image_optimizer.rb +241 -178
  72. data/_plugins/licenses.rb +135 -0
  73. data/_plugins/math_preprocessor.rb +59 -7
  74. data/_plugins/notebook_converter.rb +23 -4
  75. data/_plugins/plugin_loader.rb +3 -1
  76. data/_plugins/publications_generator.rb +8 -2
  77. data/_plugins/references.rb +238 -0
  78. data/_plugins/reproducibility.rb +150 -0
  79. data/_plugins/revisions.rb +101 -0
  80. data/_plugins/rouge_highlight_filter.rb +42 -0
  81. data/_plugins/scholarly.rb +50 -0
  82. data/_plugins/search_code_blocks.rb +30 -0
  83. data/_plugins/search_normalizer.rb +15 -53
  84. data/_plugins/search_pages.rb +3 -4
  85. data/_plugins/series.rb +104 -0
  86. data/_plugins/statements.rb +87 -0
  87. data/_sass/_academic-dashboard.scss +262 -0
  88. data/_sass/_base.scss +20 -1
  89. data/_sass/_comments-thread.scss +159 -0
  90. data/_sass/_components.scss +64 -1153
  91. data/_sass/_features.scss +17 -0
  92. data/_sass/_layout.scss +385 -1
  93. data/_sass/_mathematical.scss +27 -0
  94. data/_sass/_moderation.scss +222 -0
  95. data/_sass/_notebooks.scss +322 -0
  96. data/_sass/_open-science-badges.scss +56 -0
  97. data/_sass/{_phase1-enhancements.scss → _post-components.scss} +5 -3
  98. data/_sass/_print.scss +291 -0
  99. data/_sass/_reactions.scss +89 -0
  100. data/_sass/_reading-state.scss +290 -0
  101. data/_sass/_search-page.scss +530 -0
  102. data/_sass/_search.scss +46 -0
  103. data/_sass/_service-forms.scss +204 -0
  104. data/_sass/_subscriptions.scss +140 -0
  105. data/_sass/_syntax-highlighting.scss +212 -97
  106. data/_sass/_theme.scss +40 -19
  107. data/_sass/_typography.scss +130 -0
  108. data/_sass/_utilities.scss +5 -0
  109. data/_sass/_variables.scss +6 -0
  110. data/_sass/_webmentions.scss +125 -0
  111. data/assets/css/main.scss +14 -0
  112. data/assets/js/dist/academic.js +1 -1
  113. data/assets/js/dist/analytics-dashboard.js +1 -1
  114. data/assets/js/dist/chunks/chunk-2DYDWUFX.js +1 -0
  115. data/assets/js/dist/chunks/chunk-PATLC23F.js +1 -0
  116. data/assets/js/dist/chunks/chunk-V7734B2G.js +1 -0
  117. data/assets/js/dist/comments.js +2 -0
  118. data/assets/js/dist/contact.js +1 -0
  119. data/assets/js/dist/core.js +1 -1
  120. data/assets/js/dist/corrections.js +1 -0
  121. data/assets/js/dist/loader.js +1 -1
  122. data/assets/js/dist/math.js +1 -1
  123. data/assets/js/dist/moderation.js +1 -0
  124. data/assets/js/dist/notebook.js +1 -1
  125. data/assets/js/dist/reactions.js +1 -0
  126. data/assets/js/dist/reading-state.js +1 -0
  127. data/assets/js/dist/search.js +1 -1
  128. data/assets/js/dist/sources.json +52 -0
  129. data/assets/js/dist/subscriptions.js +1 -0
  130. data/assets/js/dist/visualizations.js +11 -2
  131. data/assets/js/dist/webmentions.js +1 -0
  132. data/assets/js/loader.js +37 -1
  133. data/datalog-theme.gemspec +35 -23
  134. data/lib/datalog/cli.rb +43 -15
  135. data/lib/datalog/critical_css.rb +168 -0
  136. data/lib/datalog/plugin_system/dependency_resolver.rb +0 -2
  137. data/lib/datalog/plugins/comments.rb +33 -3
  138. data/lib/datalog/theme/installed_files.rb +113 -0
  139. data/lib/datalog/theme/package.rb +57 -0
  140. data/lib/datalog/theme/repository_checkout.rb +94 -0
  141. data/lib/datalog/theme/version.rb +5 -1
  142. data/lib/datalog/warning_filter.rb +5 -11
  143. data/lib/datalog-theme.rb +6 -0
  144. metadata +96 -147
  145. data/_data/academic.yml +0 -217
  146. data/_data/config/author.yml +0 -121
  147. data/_data/datasets.yml +0 -28
  148. data/_data/js_meta.json +0 -371
  149. data/_data/navigation.yml +0 -145
  150. data/_data/projects.yml +0 -41
  151. data/_data/publications.yml +0 -28
  152. data/_data/social.yml +0 -73
  153. data/_data/visualizations.yml +0 -51
  154. data/_includes/components/advanced-search.html +0 -682
  155. data/_includes/components/bookmark-system.html +0 -96
  156. data/_includes/components/comments.html +0 -244
  157. data/_includes/components/content-recommendations.html +0 -228
  158. data/_includes/components/email-preferences.html +0 -200
  159. data/_includes/components/enhanced-metadata.html +0 -228
  160. data/_includes/components/language-switcher.html +0 -396
  161. data/_includes/components/navigation-enhancements.html +0 -454
  162. data/_includes/components/newsletter-signup.html +0 -178
  163. data/_includes/components/popular-posts.html +0 -233
  164. data/_includes/components/reading-progress.html +0 -133
  165. data/_includes/components/reading-time.html +0 -121
  166. data/_includes/components/series-navigation.html +0 -124
  167. data/_includes/components/social-proof.html +0 -34
  168. data/_includes/components/user-preferences.html +0 -566
  169. data/_includes/meta/syntax-config.html +0 -19
  170. data/_layouts/archive.html +0 -282
  171. data/_layouts/post-sidebar.html +0 -183
  172. data/_sass/_phase3-enhancements.scss +0 -874
  173. data/_sass/_phase4-enhancements.scss +0 -1214
  174. data/_sass/_phase5-enhancements.scss +0 -414
  175. data/assets/js/academic.js +0 -262
  176. data/assets/js/analytics-dashboard.js +0 -382
  177. data/assets/js/core/dark-mode.js +0 -79
  178. data/assets/js/core/github-cards.js +0 -123
  179. data/assets/js/core/language-filter.js +0 -69
  180. data/assets/js/core/navigation.js +0 -184
  181. data/assets/js/core/scroll-progress.js +0 -45
  182. data/assets/js/core/search-hotkeys.js +0 -62
  183. data/assets/js/core/skip-links.js +0 -62
  184. data/assets/js/dist/manifest.json +0 -22
  185. data/assets/js/dist/meta.json +0 -371
  186. data/assets/js/main.js +0 -23
  187. data/assets/js/math.js +0 -818
  188. data/assets/js/notebook.js +0 -158
  189. data/assets/js/search/analytics.js +0 -91
  190. data/assets/js/search/app.js +0 -271
  191. data/assets/js/search/autocomplete.js +0 -120
  192. data/assets/js/search/engine.js +0 -260
  193. data/assets/js/search/filters.js +0 -45
  194. data/assets/js/search/render.js +0 -217
  195. data/assets/js/search/utils.js +0 -99
  196. data/assets/js/search.js +0 -354
  197. data/assets/js/visualizations.js +0 -816
  198. data/assets/publications/datalog-publications.bib +0 -8
  199. data/assets/publications/datalog-publications.ris +0 -9
  200. data/assets/publications/publications.bib +0 -30
  201. data/assets/templates/diogo-ribeiro-cv.md +0 -31
  202. data/assets/templates/diogo-ribeiro-cv.tex +0 -32
  203. data/lib/datalog/theme/theme.rb +0 -18
@@ -0,0 +1,89 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+
5
+ // "Was this useful?" (components/reactions.html, assets/js/reactions/widget.js):
6
+ // a quiet strip after the article, not a competitor to it.
7
+
8
+ .reactions {
9
+ max-width: $max-width-reading;
10
+ margin-top: map.get($spacing, 5);
11
+ padding-top: map.get($spacing, 3);
12
+ border-top: 1px solid rgba($color-neutral-500, 0.25);
13
+ font-size: map.get($font-size-scale, sm);
14
+ }
15
+
16
+ .reactions__prompt {
17
+ margin: 0 0 map.get($spacing, 2);
18
+ font-weight: 600;
19
+ color: $color-ink-700;
20
+ }
21
+
22
+ .reactions__choices {
23
+ display: flex;
24
+ flex-wrap: wrap;
25
+ gap: map.get($spacing, 2);
26
+ }
27
+
28
+ .reactions__choice {
29
+ display: inline-flex;
30
+ align-items: baseline;
31
+ gap: map.get($spacing, 1);
32
+
33
+ &[aria-pressed='true'] {
34
+ background: $color-accent-primary;
35
+ border-color: $color-accent-primary;
36
+ color: $color-surface-50;
37
+ }
38
+ }
39
+
40
+ // The count inherits the button's colour at full strength: dimmed, it fell
41
+ // below 4.5:1 on the pressed button.
42
+ .reactions__count {
43
+ font-variant-numeric: tabular-nums;
44
+
45
+ &::before {
46
+ content: '·';
47
+ margin-right: map.get($spacing, 1);
48
+ }
49
+ }
50
+
51
+ .reactions__status {
52
+ margin: map.get($spacing, 2) 0 0;
53
+ color: $color-ink-500;
54
+
55
+ .reactions[data-state='disabled'] & {
56
+ color: $color-ink-500;
57
+ }
58
+ }
59
+
60
+ // A missing service leaves the strip usable but without counts; nothing else changes.
61
+ .reactions[data-state='disabled'] .reactions__choices {
62
+ opacity: 0.6;
63
+ }
64
+
65
+ body.dark-mode {
66
+ .reactions {
67
+ border-top-color: rgba($dark-ink-500, 0.35);
68
+ }
69
+
70
+ .reactions__prompt {
71
+ color: $dark-ink-700;
72
+ }
73
+
74
+ .reactions__status {
75
+ color: $dark-ink-500;
76
+ }
77
+
78
+ .reactions__choice[aria-pressed='true'] {
79
+ background: $dark-accent-primary;
80
+ border-color: $dark-accent-primary;
81
+ color: $dark-surface-100;
82
+ }
83
+ }
84
+
85
+ @media print {
86
+ .reactions {
87
+ display: none !important;
88
+ }
89
+ }
@@ -0,0 +1,290 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+ @use 'mixins' as *;
5
+
6
+ // Local reading state (assets/js/reading-state): the tools bar above a post,
7
+ // the resume prompt, the toolbar over a selection, the highlights and the
8
+ // panel of private notes, and the list of saved articles on a page. The
9
+ // buttons share .post-tool with the reading-mode control (_print.scss).
10
+
11
+ .post-tools {
12
+ display: flex;
13
+ flex-wrap: wrap;
14
+ align-items: center;
15
+ justify-content: flex-end;
16
+ gap: map.get($spacing, 2);
17
+ }
18
+
19
+ .post-tool--link {
20
+ text-decoration: none;
21
+ }
22
+
23
+ .bookmark-toggle[aria-pressed='true'] svg {
24
+ fill: currentColor;
25
+ }
26
+
27
+ // display: flex would override the `hidden` attribute's display: none.
28
+ .reading-resume[hidden],
29
+ .reading-toolbar[hidden] {
30
+ display: none;
31
+ }
32
+
33
+ // The resume prompt
34
+ .reading-resume {
35
+ @include callout($color-accent-secondary);
36
+ display: flex;
37
+ flex-wrap: wrap;
38
+ align-items: center;
39
+ justify-content: space-between;
40
+ gap: map.get($spacing, 2) map.get($spacing, 4);
41
+ margin-top: map.get($spacing, 4);
42
+ font-size: map.get($font-size-scale, sm);
43
+ max-width: $max-width-reading;
44
+
45
+ p {
46
+ margin: 0;
47
+ }
48
+ }
49
+
50
+ .reading-resume__actions {
51
+ display: flex;
52
+ gap: map.get($spacing, 2);
53
+ }
54
+
55
+ // The toolbar over a selection
56
+ .reading-toolbar {
57
+ position: absolute;
58
+ z-index: 20;
59
+ display: flex;
60
+ gap: 2px;
61
+ padding: 4px;
62
+ border-radius: map.get($radius, md);
63
+ background: $color-ink-900;
64
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
65
+
66
+ button {
67
+ padding: 0.35rem 0.6rem;
68
+ border: 0;
69
+ border-radius: map.get($radius, sm);
70
+ background: transparent;
71
+ color: #fff;
72
+ font: inherit;
73
+ font-size: map.get($font-size-scale, sm);
74
+ cursor: pointer;
75
+
76
+ &:hover,
77
+ &:focus-visible {
78
+ background: rgba(255, 255, 255, 0.18);
79
+ }
80
+ }
81
+ }
82
+
83
+ // The highlights themselves: the Custom Highlight API where the browser has
84
+ // it, marks elsewhere.
85
+ ::highlight(datalog-annotation) {
86
+ background-color: rgba(250, 204, 21, 0.45);
87
+ color: inherit;
88
+ }
89
+
90
+ mark.reading-highlight {
91
+ background-color: rgba(250, 204, 21, 0.45);
92
+ color: inherit;
93
+ }
94
+
95
+ body.dark-mode ::highlight(datalog-annotation),
96
+ body.dark-mode mark.reading-highlight {
97
+ background-color: rgba(250, 204, 21, 0.3);
98
+ }
99
+
100
+ // The panel of private highlights and the data controls
101
+ .reading-notes {
102
+ @include callout($color-accent-tertiary);
103
+ margin-top: map.get($spacing, 5);
104
+ font-size: map.get($font-size-scale, sm);
105
+ max-width: $max-width-reading;
106
+
107
+ a {
108
+ color: $color-accent-primary-text;
109
+ }
110
+ }
111
+
112
+ .reading-notes__heading {
113
+ margin: 0 0 map.get($spacing, 1);
114
+ font-size: map.get($font-size-scale, base);
115
+ }
116
+
117
+ .reading-notes__intro,
118
+ .reading-notes__empty,
119
+ .reading-notes__unavailable,
120
+ .reading-list__empty {
121
+ margin: 0 0 map.get($spacing, 3);
122
+ color: $color-ink-500;
123
+ }
124
+
125
+ .reading-notes__list {
126
+ display: grid;
127
+ gap: map.get($spacing, 3);
128
+ margin: 0 0 map.get($spacing, 3);
129
+ padding: 0;
130
+ list-style: none;
131
+ }
132
+
133
+ .reading-note {
134
+ padding-top: map.get($spacing, 2);
135
+ border-top: 1px solid rgba($color-neutral-200, 0.7);
136
+ }
137
+
138
+ .reading-note__quote {
139
+ margin: 0 0 map.get($spacing, 1);
140
+ padding: 0 0 0 map.get($spacing, 3);
141
+ border-left: 3px solid rgba(250, 204, 21, 0.9);
142
+ background: none;
143
+ font-style: italic;
144
+ }
145
+
146
+ .reading-note__meta {
147
+ margin: 0 0 map.get($spacing, 1);
148
+ font-size: map.get($font-size-scale, xs);
149
+ color: $color-ink-500;
150
+ }
151
+
152
+ .reading-note__lost {
153
+ font-weight: 600;
154
+ color: $color-warning-text;
155
+ }
156
+
157
+ .reading-note__label {
158
+ display: grid;
159
+ gap: 2px;
160
+
161
+ span {
162
+ font-size: map.get($font-size-scale, xs);
163
+ font-weight: 600;
164
+ text-transform: uppercase;
165
+ letter-spacing: 0.04em;
166
+ color: $color-ink-500;
167
+ }
168
+
169
+ textarea {
170
+ width: 100%;
171
+ padding: 0.35rem 0.5rem;
172
+ border: 1px solid rgba($color-neutral-200, 0.9);
173
+ border-radius: map.get($radius, sm);
174
+ background: $color-surface-50;
175
+ color: $color-ink-700;
176
+ font: inherit;
177
+ font-size: map.get($font-size-scale, sm);
178
+ }
179
+ }
180
+
181
+ .reading-note__actions,
182
+ .reading-data__actions {
183
+ display: flex;
184
+ flex-wrap: wrap;
185
+ gap: map.get($spacing, 2);
186
+ margin-top: map.get($spacing, 2);
187
+ }
188
+
189
+ .reading-data {
190
+ margin-top: map.get($spacing, 3);
191
+
192
+ summary {
193
+ cursor: pointer;
194
+ font-weight: 600;
195
+ }
196
+ }
197
+
198
+ .reading-data__import {
199
+ position: relative;
200
+ overflow: hidden;
201
+
202
+ input {
203
+ position: absolute;
204
+ inset: 0;
205
+ width: 100%;
206
+ opacity: 0;
207
+ cursor: pointer;
208
+ }
209
+ }
210
+
211
+ .reading-data__status {
212
+ margin: map.get($spacing, 2) 0 0;
213
+ color: $color-ink-500;
214
+ }
215
+
216
+ // The saved articles on a page
217
+ .reading-list__items {
218
+ display: grid;
219
+ gap: map.get($spacing, 3);
220
+ margin: 0 0 map.get($spacing, 4);
221
+ padding: 0;
222
+ list-style: none;
223
+ }
224
+
225
+ .reading-list__item {
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ align-items: baseline;
229
+ gap: map.get($spacing, 1) map.get($spacing, 3);
230
+
231
+ a {
232
+ font-weight: 600;
233
+ }
234
+ }
235
+
236
+ .reading-list__meta {
237
+ font-size: map.get($font-size-scale, sm);
238
+ color: $color-ink-500;
239
+ }
240
+
241
+ body.dark-mode {
242
+ .reading-resume {
243
+ border-left-color: $dark-accent-secondary;
244
+ }
245
+
246
+ .reading-notes {
247
+ border-left-color: $dark-accent-tertiary;
248
+ }
249
+
250
+ .reading-notes__intro,
251
+ .reading-notes__empty,
252
+ .reading-notes__unavailable,
253
+ .reading-list__empty,
254
+ .reading-note__meta,
255
+ .reading-note__label span,
256
+ .reading-data__status,
257
+ .reading-list__meta {
258
+ color: $dark-ink-500;
259
+ }
260
+
261
+ .reading-note {
262
+ border-top-color: rgba($dark-ink-500, 0.25);
263
+ }
264
+
265
+ .reading-note__lost {
266
+ color: $dark-warning;
267
+ }
268
+
269
+ .reading-note__label textarea {
270
+ border-color: rgba($dark-ink-500, 0.35);
271
+ background: $dark-surface-300;
272
+ color: $dark-ink-700;
273
+ }
274
+ }
275
+
276
+ @media print {
277
+ .reading-resume,
278
+ .reading-toolbar,
279
+ .reading-note__actions,
280
+ .reading-data,
281
+ .reading-notes__empty,
282
+ .reading-notes__unavailable {
283
+ display: none !important;
284
+ }
285
+
286
+ .reading-notes {
287
+ border-left-color: currentColor;
288
+ background: none;
289
+ }
290
+ }