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
data/_data/i18n/pt.yml CHANGED
@@ -156,6 +156,228 @@ article:
156
156
  published: Publicado
157
157
  updated: Atualizado
158
158
  author: Autor
159
+ authors: Autores
160
+ corrections:
161
+ summary: Comunicar um erro ou sugerir uma correção
162
+ intro: "Encontrou um erro na matemática, nos factos, numa citação, no código ou na reprodutibilidade? Diga o quê e onde. O relato vai para o autor, não para a página."
163
+ category: Que tipo de problema
164
+ section: Onde
165
+ section_any: O artigo inteiro
166
+ message: O que está errado, e o que deveria dizer
167
+ message_hint: Pelo menos 20 caracteres. Cite a passagem, se puder.
168
+ contact_email: O seu email (opcional)
169
+ contact_hint: Só se quiser uma resposta. Nunca é mostrado no site.
170
+ send: Enviar o relato
171
+ pending: A enviar o relato…
172
+ success: "Obrigado. O relato chegou ao autor e fica privado; uma correção apareceria no histórico de revisões do artigo."
173
+ message_short: "Diga um pouco mais: pelo menos {{min}} caracteres."
174
+ email_invalid: Isso não parece um endereço de email.
175
+ categories:
176
+ mathematical-error: Erro matemático
177
+ factual-error: Erro factual
178
+ citation: Citação errada ou quebrada
179
+ code: Código desatualizado ou quebrado
180
+ reproducibility: Falha de reprodutibilidade
181
+ typo: Gralha que muda o sentido
182
+ accessibility: Problema de acessibilidade
183
+ other: Outra coisa
184
+ moderation:
185
+ unavailable: A moderação não está configurada neste site.
186
+ boundary: "Esta página é apenas uma janela. A autenticação, e o que uma conta pode fazer, são decididos pelo serviço de moderação em cada pedido; nada aqui é protegido pela própria página."
187
+ filters: Filtros
188
+ type: O quê
189
+ status: Estado
190
+ category: Categoria do relato
191
+ path: Caminho da página
192
+ since: Desde
193
+ search: Texto
194
+ apply: Aplicar
195
+ reset: Limpar
196
+ queue: A aguardar decisão
197
+ any_type: Tudo
198
+ any_category: Qualquer categoria
199
+ loading: A carregar a fila…
200
+ empty: Nada aqui.
201
+ more: Carregar mais
202
+ working: A tratar…
203
+ done: "Feito: {{action}}."
204
+ unauthorized: Não tem sessão iniciada no serviço de moderação.
205
+ forbidden: Esta conta não pode moderar este site.
206
+ sign_in: Iniciar sessão
207
+ sign_in_hint: Inicie sessão no serviço de moderação e recarregue esta página.
208
+ link_required: "Indique o endereço do issue, pull request ou revisão (http:// ou https://)."
209
+ note: Nota, guardada com a ação
210
+ link: Issue, pull request ou revisão
211
+ in_reply_to: Em resposta a
212
+ types:
213
+ comment: Comentário
214
+ correction: Relato de correção
215
+ abuse: Denúncia
216
+ statuses:
217
+ pending: Pendente
218
+ approved: Aprovado
219
+ spam: Spam
220
+ hidden: Oculto
221
+ deleted: Apagado
222
+ new: Novo
223
+ reviewed: Revisto
224
+ accepted: Aceite
225
+ rejected: Rejeitado
226
+ resolved: Resolvido
227
+ open: Aberto
228
+ dismissed: Arquivado
229
+ actions:
230
+ approve: Aprovar
231
+ spam: Marcar como spam
232
+ hide: Ocultar
233
+ delete: Apagar
234
+ reviewed: Marcar como revisto
235
+ accept: Aceitar para ação editorial
236
+ reject: Rejeitar
237
+ resolve: Resolver com uma ligação
238
+ dismiss: Arquivar
239
+ subscriptions:
240
+ topics_legend: O que receber
241
+ topics:
242
+ new-articles: Novos artigos
243
+ research-notes: Notas de investigação
244
+ datasets: Conjuntos de dados
245
+ consent: "Vai receber estes emails e nada mais, e todos têm uma ligação para cancelar."
246
+ consent_double: "Vai receber um email a pedir confirmação; nada mais é enviado até confirmar. Todos os emails têm uma ligação para cancelar."
247
+ privacy_link: Política de privacidade
248
+ sending: A subscrever…
249
+ pending: Quase. Veja a sua caixa de entrada e siga a ligação para confirmar.
250
+ confirmed: Está subscrito. Obrigado.
251
+ duplicate: Este endereço já está subscrito.
252
+ email_invalid: Isso não parece um endereço de email.
253
+ topics_required: Escolha pelo menos um.
254
+ manage:
255
+ idle: "Esta página confirma, altera ou termina uma subscrição da newsletter. Abra-a a partir da ligação num dos emails."
256
+ unavailable: As subscrições não estão configuradas neste site.
257
+ confirming: A confirmar a sua subscrição…
258
+ confirmed: A sua subscrição está confirmada. Obrigado.
259
+ invalid_link: Esta ligação já não é válida. Subscreva de novo para receber outra.
260
+ unsubscribe_question: Parar todos os emails para este endereço?
261
+ unsubscribe: Cancelar a subscrição
262
+ unsubscribing: A cancelar a subscrição…
263
+ unsubscribed: A subscrição foi cancelada. Não serão enviados mais emails.
264
+ loading: A carregar as suas preferências…
265
+ preferences: O que recebe
266
+ save: Guardar
267
+ saving: A guardar…
268
+ saved: As suas preferências foram guardadas.
269
+ webmentions:
270
+ heading: Mencionado noutros sites
271
+ intro: "Ligações, respostas e partilhas de outros sites, tal como o recetor deste site as verificou. Não são comentários neste site."
272
+ loading: A procurar menções noutros sites…
273
+ empty: Ainda não há menções de outros sites.
274
+ retry: Tentar de novo
275
+ types:
276
+ mention: Menção
277
+ reply: Resposta
278
+ repost: Partilha
279
+ like: Gosto
280
+ reactions:
281
+ prompt: Foi útil?
282
+ sending: A enviar a sua opinião…
283
+ thanks: Obrigado. A sua opinião foi contada.
284
+ already: A sua opinião já tinha sido contada.
285
+ types:
286
+ useful: Útil
287
+ clear: Claro
288
+ interesting: Interessante
289
+ needs-clarification: Precisa de clarificação
290
+ comments:
291
+ loading: A carregar a discussão…
292
+ empty: Ainda não há comentários. Comece a discussão.
293
+ noscript: A discussão precisa de JavaScript para carregar.
294
+ retry: Tentar de novo
295
+ reply: Responder
296
+ replying_to: "A responder a {{name}}"
297
+ cancel_reply: Cancelar a resposta
298
+ anonymous: Anónimo
299
+ pending: A aguardar moderação
300
+ form_heading: Participe na discussão
301
+ name: O seu nome
302
+ email: O seu email (opcional)
303
+ email_hint: Nunca é mostrado. Só se quiser saber das respostas.
304
+ url: O seu site (opcional)
305
+ body: O seu comentário
306
+ send: Publicar o comentário
307
+ sending: A publicar o comentário…
308
+ posted: Obrigado. O seu comentário está publicado.
309
+ posted_pending: Obrigado. O seu comentário aguarda leitura e aparecerá depois de aprovado.
310
+ moderated: Os comentários são lidos antes de aparecerem. O seu email nunca é mostrado.
311
+ privacy: O seu email nunca é mostrado.
312
+ name_required: Diga quem é.
313
+ email_invalid: Isso não parece um endereço de email.
314
+ url_invalid: Um endereço de site começa por http:// ou https://.
315
+ body_short: Diga um pouco mais.
316
+ contact:
317
+ legend: Contacto
318
+ intro: "Diga o que tem em mente e como o contactar. A mensagem vai para o autor, não para o site."
319
+ category: Sobre o que é
320
+ name: O seu nome
321
+ email: O seu email
322
+ affiliation: Afiliação (opcional)
323
+ subject: Assunto
324
+ message: Mensagem
325
+ message_hint: Pelo menos 20 caracteres.
326
+ privacy: "A sua mensagem e o seu endereço vão para o autor e nunca são mostrados no site."
327
+ send: Enviar a mensagem
328
+ pending: A enviar a mensagem…
329
+ success: "Obrigado. A mensagem chegou ao autor, que responderá para o endereço indicado."
330
+ name_required: Diga quem é.
331
+ email_invalid: Isso não parece um endereço de email.
332
+ subject_required: Dê um assunto à mensagem.
333
+ message_short: "Diga um pouco mais: pelo menos {{min}} caracteres."
334
+ fallback: "Este site não tem serviço de mensagens; escreva para {{email}}."
335
+ categories:
336
+ research-collaboration: Colaboração em investigação
337
+ consulting: Consultoria ou um projeto
338
+ speaking: Palestra ou ensino
339
+ mentoring: Mentoria
340
+ reproducibility: Uma questão sobre dados ou reprodutibilidade
341
+ media: Imprensa ou uma entrevista
342
+ other: Outra coisa
343
+ prompts:
344
+ research-collaboration: "Diga que questão, dados ou método tem em mente, e o prazo."
345
+ consulting: "Diga qual é o projeto, o seu âmbito e quando precisa dele."
346
+ speaking: "Diga o evento, a data, o local (ou online), o público e o tema."
347
+ mentoring: "Diga onde está agora e em que quer melhorar."
348
+ reproducibility: "Indique o artigo ou o conjunto de dados, e o que não reproduziu ou não está claro."
349
+ media: "Diga o órgão, o tema e o seu prazo."
350
+ dynamic_services:
351
+ errors:
352
+ disabled: Esta funcionalidade não está configurada neste site.
353
+ unsupported: O serviço por trás deste site não oferece esta funcionalidade.
354
+ version: Este site e o seu serviço esperam versões diferentes da API; quem mantém o site precisa de atualizar um deles.
355
+ timeout: O serviço demorou demasiado a responder. Tente de novo dentro de momentos.
356
+ network: Não foi possível contactar o serviço. Verifique a ligação e tente de novo.
357
+ malformed: O serviço respondeu de uma forma que este site não conseguiu ler.
358
+ unauthorized: Precisa de iniciar sessão para isto.
359
+ forbidden: Não tem permissão para isto.
360
+ not_found: O serviço não tem nada nesse endereço.
361
+ conflict: Isto já foi feito, ou algo mudou entretanto.
362
+ invalid: Parte do que escreveu precisa de correção.
363
+ rate_limited: Demasiados pedidos por agora. Aguarde um pouco e tente de novo.
364
+ server: O serviço encontrou um problema. Tente mais tarde.
365
+ http: O serviço recusou o pedido.
366
+ aborted: O pedido foi cancelado.
367
+ reference: "Referência: {{id}}"
368
+ references:
369
+ figure: Figura
370
+ table: Tabela
371
+ theorem: Teorema
372
+ lemma: Lema
373
+ proposition: Proposição
374
+ corollary: Corolário
375
+ definition: Definição
376
+ assumption: Pressuposto
377
+ example: Exemplo
378
+ remark: Observação
379
+ proof: Demonstração
380
+ proof_of: "Demonstração de {{target}}"
159
381
  post:
160
382
  provenance:
161
383
  heading: Nota do autor e editorial
@@ -163,10 +385,85 @@ post:
163
385
  evidence: Evidência utilizada
164
386
  method: Método
165
387
  reviewed: Revisto
388
+ revisions:
389
+ heading: Histórico de revisões
390
+ corrected_on: "Corrigido em {{date}}."
391
+ updated_on: "Atualizado em {{date}}."
392
+ details: Detalhes
393
+ history_link: Histórico de revisões
394
+ types:
395
+ correction: Correção
396
+ update: Atualização
397
+ review: Revisão
398
+ editorial: Editorial
399
+ published: Publicado
400
+ license:
401
+ content: "Texto e figuras sob {{license}}."
402
+ code: "Exemplos de código sob {{license}}."
403
+ reserved: Todos os direitos reservados.
404
+ series:
405
+ label: Série
406
+ part_of: "Parte {{part}} de {{total}}"
407
+ nav_label: "Série: {{title}}"
408
+ previous: Parte anterior
409
+ next: Parte seguinte
410
+ reproduce:
411
+ heading: Reproduzir esta análise
412
+ intro: O código, os dados e o ambiente por trás deste artigo.
413
+ code: Código-fonte
414
+ data: Dados
415
+ notebook: Notebook
416
+ environment: Ambiente
417
+ results: Resultados
418
+ ref: "em {{ref}}"
419
+ version: "versão {{version}}"
420
+ container: Contentor
421
+ archive: Ambiente arquivado
422
+ reading_mode:
423
+ enter: Modo de leitura
424
+ exit: Sair do modo de leitura
425
+ hint: Esconde a navegação do site e os painéis à volta do artigo; prima Escape para sair.
426
+ print:
427
+ source: Online em
428
+ reading_state:
429
+ save: Guardar para depois
430
+ saved: Guardado
431
+ saved_list: Artigos guardados
432
+ unavailable: Este navegador não deixa o site guardar dados, pelo que guardar, o progresso e os destaques estão desligados.
433
+ resume: Retomar onde ficou
434
+ progress: "{{percent}}% lido"
435
+ resume_button: Retomar
436
+ dismiss: Ignorar
437
+ highlight: Destacar
438
+ note: Destacar com uma nota
439
+ shortcuts: "Com texto selecionado, Alt+Shift+H destaca-o e Alt+Shift+N acrescenta uma nota."
440
+ highlights_heading: Os seus destaques privados
441
+ data_heading: Os seus dados de leitura
442
+ intro: Guardados apenas neste navegador e nunca enviados. São as suas notas, não comentários.
443
+ empty: Selecione uma passagem do artigo para a destacar.
444
+ note_label: Nota
445
+ go_to: Ir para
446
+ remove: Remover
447
+ lost: Não encontrado no texto atual
448
+ export: Exportar como JSON
449
+ exported: Os seus dados de leitura foram transferidos.
450
+ import: Importar JSON
451
+ imported: "{{count}} artigos importados."
452
+ import_failed: Esse ficheiro não é uma exportação de dados de leitura.
453
+ erase_article: Apagar os dados deste artigo
454
+ erased_article: Os dados deste artigo foram apagados.
455
+ erase_all: Apagar todos os dados de leitura
456
+ erase_confirm: Apagar todos os artigos guardados, posições e destaques neste navegador?
457
+ erased_all: Todos os dados de leitura foram apagados.
458
+ list_empty: Ainda não há artigos guardados. Guarde um com "Guardar para depois" num artigo.
459
+ highlights_count: "{{count}} destaques"
166
460
  article_information: Informações do artigo
167
461
  meta:
168
462
  published: Publicado
463
+ updated: Atualizado
169
464
  author: Autor
465
+ authors: Autores
466
+ contributors: Colaboradores
170
467
  reading_time: Tempo de leitura
171
468
  difficulty: Dificuldade
172
469
  runtime: Duração
@@ -2,6 +2,14 @@
2
2
  "core": "/assets/js/dist/core.js",
3
3
  "loader": "/assets/js/dist/loader.js",
4
4
  "features": {
5
+ "reading-state": "/assets/js/dist/reading-state.js",
6
+ "corrections": "/assets/js/dist/corrections.js",
7
+ "contact": "/assets/js/dist/contact.js",
8
+ "comments": "/assets/js/dist/comments.js",
9
+ "reactions": "/assets/js/dist/reactions.js",
10
+ "webmentions": "/assets/js/dist/webmentions.js",
11
+ "subscriptions": "/assets/js/dist/subscriptions.js",
12
+ "moderation": "/assets/js/dist/moderation.js",
5
13
  "search": "/assets/js/dist/search.js",
6
14
  "math": "/assets/js/dist/math.js",
7
15
  "visualizations": "/assets/js/dist/visualizations.js",
@@ -10,6 +18,14 @@
10
18
  "analytics-dashboard": "/assets/js/dist/analytics-dashboard.js"
11
19
  },
12
20
  "entrypoints": {
21
+ "reading-state": "/assets/js/dist/reading-state.js",
22
+ "corrections": "/assets/js/dist/corrections.js",
23
+ "contact": "/assets/js/dist/contact.js",
24
+ "comments": "/assets/js/dist/comments.js",
25
+ "reactions": "/assets/js/dist/reactions.js",
26
+ "webmentions": "/assets/js/dist/webmentions.js",
27
+ "subscriptions": "/assets/js/dist/subscriptions.js",
28
+ "moderation": "/assets/js/dist/moderation.js",
13
29
  "core": "/assets/js/dist/core.js",
14
30
  "loader": "/assets/js/dist/loader.js",
15
31
  "search": "/assets/js/dist/search.js",
@@ -145,5 +145,7 @@
145
145
  window.__DATALOG_ANALYTICS__ = {};
146
146
  {% endif %}
147
147
  </script>
148
- <script src="{{ '/assets/js/analytics-dashboard.js' | relative_url }}" defer></script>
148
+ {%- comment -%} The built bundle, as a module: the script uses `export`, which a classic script cannot parse. {%- endcomment %}
149
+ {%- assign dashboard_bundle = site.data.js_manifest.entrypoints['analytics-dashboard'] | default: '/assets/js/dist/analytics-dashboard.js' %}
150
+ <script type="module" src="{{ dashboard_bundle | relative_url }}"></script>
149
151
  </div>
@@ -74,19 +74,38 @@ Parameters:
74
74
  <div class="api-function__section">
75
75
  <h4 class="api-function__section-title">Examples</h4>
76
76
  <div class="api-function__examples">
77
+ {%- comment -%}
78
+ Examples are code. Through markdownify, a Python comment such as
79
+ "# Two-sample t-test" became a page heading. Examples written as
80
+ Markdown with fenced code blocks still render as Markdown.
81
+ {%- endcomment -%}
82
+ {% if include.examples contains '```' %}
77
83
  {{ include.examples | markdownify }}
84
+ {% else %}
85
+ {% assign example_language = include.language | default: page.language | default: 'text' | downcase %}
86
+ <pre class="highlight" tabindex="0"><code class="language-{{ example_language }}">{{ include.examples | strip | rouge_highlight: example_language }}</code></pre>
87
+ {% endif %}
78
88
  </div>
79
89
  </div>
80
90
  {% endif %}
81
91
 
82
92
  {% if include.see_also %}
93
+ {%- comment -%}
94
+ `see_also` is a comma-separated list of functions documented on the same page, such as
95
+ `see_also="mannwhitneyu, anova"`. The loop used to take the whole string as one item, so two
96
+ names made a single link to an anchor that did not exist.
97
+ {%- endcomment -%}
98
+ {% assign see_also_items = include.see_also | split: "," %}
83
99
  <div class="api-function__section">
84
100
  <h4 class="api-function__section-title">See Also</h4>
85
101
  <ul class="api-function__see-also">
86
- {% for item in include.see_also %}
102
+ {% for raw_item in see_also_items %}
103
+ {% assign item = raw_item | strip %}
104
+ {% if item != "" %}
87
105
  <li>
88
106
  <a href="#{{ item | slugify }}"><code>{{ item }}</code></a>
89
107
  </li>
108
+ {% endif %}
90
109
  {% endfor %}
91
110
  </ul>
92
111
  </div>
@@ -1,23 +1,30 @@
1
1
  {%- comment -%}
2
2
  Author bio card with social links and credentials
3
3
  Parameters:
4
- - author: Author name (default: page.author or site.author.name)
4
+ - person: An author record from `page | page_authors` (default: the page's first author)
5
+ - author: An author's name or _data/authors.yml key, when no person is given
5
6
  - show_avatar: Show author avatar (default: true)
6
7
  - show_social: Show social links (default: true)
7
- - compact: Compact layout (default: false)
8
+ - compact: Avatar, name, affiliation and links only (default: false)
8
9
  {%- endcomment -%}
9
10
 
10
- {%- assign author_name = include.author | default: page.author | default: site.author.name -%}
11
11
  {%- assign show_avatar = include.show_avatar | default: true -%}
12
12
  {%- assign show_social = include.show_social | default: true -%}
13
13
  {%- assign compact = include.compact | default: false -%}
14
14
 
15
- {%- comment -%} Get author details from site.data.authors or site.author {%- endcomment -%}
16
- {%- if site.data.authors and site.data.authors[author_name] -%}
17
- {%- assign author_data = site.data.authors[author_name] -%}
15
+ {%- if include.person -%}
16
+ {%- assign author_data = include.person -%}
17
+ {%- elsif include.author -%}
18
+ {%- if site.data.authors and site.data.authors[include.author] -%}
19
+ {%- assign author_data = site.data.authors[include.author] -%}
20
+ {%- else -%}
21
+ {%- assign author_data = site.author -%}
22
+ {%- endif -%}
18
23
  {%- else -%}
19
- {%- assign author_data = site.author -%}
24
+ {%- assign bio_authors = page | page_authors -%}
25
+ {%- assign author_data = bio_authors | first -%}
20
26
  {%- endif -%}
27
+ {%- assign author_name = author_data.name | default: include.author | default: site.author.name | escape -%}
21
28
 
22
29
  <aside class="author-bio{% if compact %} author-bio--compact{% endif %}" itemscope itemtype="https://schema.org/Person">
23
30
  <div class="author-bio__inner">
@@ -33,7 +40,10 @@ Parameters:
33
40
  height="80">
34
41
  {%- else -%}
35
42
  {%- comment -%} Fallback avatar with initials {%- endcomment -%}
36
- {%- assign initials = author_name | split: ' ' | map: 'first' | slice: 0, 2 | join: '' | upcase -%}
43
+ {%- comment -%} `map: 'first'` on a list of words returned nothing, so the placeholder showed no initials. {%- endcomment -%}
44
+ {%- assign name_words = author_data.name | default: author_name | split: ' ' -%}
45
+ {%- capture initials -%}{%- for word in name_words limit: 2 -%}{{ word | slice: 0 }}{%- endfor -%}{%- endcapture -%}
46
+ {%- assign initials = initials | upcase | escape -%}
37
47
  <div class="author-bio__avatar-placeholder" role="img" aria-label="{{ author_name }}">
38
48
  <span aria-hidden="true">{{ initials }}</span>
39
49
  </div>
@@ -46,17 +56,17 @@ Parameters:
46
56
 
47
57
  {%- if author_data.affiliation -%}
48
58
  <p class="author-bio__affiliation" itemprop="affiliation">
49
- {{ author_data.affiliation }}
59
+ {{ author_data.affiliation | escape }}
50
60
  </p>
51
61
  {%- endif -%}
52
62
 
53
- {%- if author_data.biography or author_data.bio -%}
63
+ {%- if compact != true and author_data.biography or compact != true and author_data.bio -%}
54
64
  <p class="author-bio__description" itemprop="description">
55
65
  {{ author_data.biography | default: author_data.bio }}
56
66
  </p>
57
67
  {%- endif -%}
58
68
 
59
- {%- if author_data.research_areas and author_data.research_areas.size > 0 -%}
69
+ {%- if compact != true and author_data.research_areas and author_data.research_areas.size > 0 -%}
60
70
  <div class="author-bio__research">
61
71
  <strong class="author-bio__research-label">Research interests:</strong>
62
72
  <span class="author-bio__research-list">{{ author_data.research_areas | join: ', ' }}</span>
@@ -0,0 +1,32 @@
1
+ {%- comment -%}
2
+ ---
3
+ required:
4
+ - people
5
+ optional:
6
+ - property
7
+ - show_affiliation
8
+ ---
9
+ Lists the people who wrote or contributed to a page as schema.org Person
10
+ items: each name, linked to the person's url when there is one, with their
11
+ role and affiliation. `people` comes from `page | page_authors` or
12
+ `page | page_contributors`; `property` is the microdata property, author
13
+ (the default) or contributor.
14
+ {%- endcomment -%}
15
+ {%- assign list_property = include.property | default: 'author' -%}
16
+ <ul class="author-list">
17
+ {%- for person in include.people -%}
18
+ <li class="author-list__person" itemprop="{{ list_property }}" itemscope itemtype="https://schema.org/Person">
19
+ {%- if person.url -%}
20
+ {%- assign person_href = person.url -%}
21
+ {%- unless person_href contains '://' -%}{%- assign person_href = person_href | relative_url -%}{%- endunless -%}
22
+ <a href="{{ person_href | escape }}" itemprop="url"><span itemprop="name">{{ person.name | escape }}</span></a>
23
+ {%- else -%}
24
+ <span itemprop="name">{{ person.name | escape }}</span>
25
+ {%- endif -%}
26
+ {%- if person.role %} <span class="author-list__role">({{ person.role | escape }})</span>{%- endif -%}
27
+ {%- if person.affiliation and include.show_affiliation != false -%}
28
+ <span class="post-author-affiliation" itemprop="affiliation">{{ person.affiliation | escape }}</span>
29
+ {%- endif -%}
30
+ </li>
31
+ {%- endfor -%}
32
+ </ul>
@@ -2,27 +2,36 @@
2
2
  {% assign citation_url = include.url | default: page.url | default: '/' | absolute_url %}
3
3
  {% assign citation_date = include.date | default: page.date %}
4
4
  {% assign citation_year = citation_date | date: '%Y' %}
5
- {% assign authors_source = include.authors | default: page.authors | default: page.author | default: site.author.name %}
6
- {% assign authors_array = authors_source | arrayify %}
7
- {% assign publisher = include.publisher | default: site.author.affiliation | default: site.title %}
5
+ {%- comment -%} `authors`: records from `page | page_authors`, or names. Without it, the page's authors. {%- endcomment -%}
6
+ {% if include.authors %}
7
+ {% assign authors_array = include.authors %}
8
+ {% else %}
9
+ {% assign authors_array = page | page_authors %}
10
+ {% endif %}
11
+ {%- comment -%} A configured publisher, else the site's name. The author's affiliation is not the publisher. {%- endcomment -%}
12
+ {% assign publisher = include.publisher | default: site.publisher.name | default: site.title %}
8
13
  {% assign doi = include.doi | default: page.doi %}
9
14
  {% assign citation_type = include.citation_type | default: include.type | default: 'article' %}
10
15
  {% assign citation_key = include.citation_key | default: page.citation_key | default: page.slug | default: citation_title | slugify %}
11
- {% capture author_line %}
12
- {% for author in authors_array %}
13
- {% if author.name %}
14
- {{ author.name | strip }}{% unless forloop.last %} and {% endunless %}
15
- {% else %}
16
- {{ author | strip }}{% unless forloop.last %} and {% endunless %}
17
- {% endif %}
18
- {% endfor %}
19
- {% endcapture %}
20
- {% capture ris_authors %}
21
- {% for author in authors_array %}
22
- {% assign author_name = author.name | default: author %}
23
- AU - {{ author_name | strip }}
24
- {% endfor %}
25
- {% endcapture %}
16
+ {%- comment -%}
17
+ The author loops trim their whitespace: with several authors, the indentation
18
+ ended up inside the BibTeX author field and between the RIS author lines.
19
+ {%- endcomment -%}
20
+ {%- capture author_line -%}
21
+ {%- for author in authors_array -%}
22
+ {{- author.name | default: author | strip | escape -}}{%- unless forloop.last %} and {% endunless -%}
23
+ {%- endfor -%}
24
+ {%- endcapture -%}
25
+ {%- capture ris_authors -%}
26
+ {%- for author in authors_array %}
27
+ AU - {{ author.name | default: author | strip | escape }}
28
+ {%- endfor -%}
29
+ {%- endcapture -%}
30
+ {%- capture endnote_authors -%}
31
+ {%- for author in authors_array %}
32
+ %A {{ author.name | default: author | strip | escape }}
33
+ {%- endfor -%}
34
+ {%- endcapture -%}
26
35
  {% capture bibtex_entry %}@{{ citation_type }}{ {{ citation_key }},
27
36
  title = { {{ citation_title | strip }} },
28
37
  author = { {{ author_line | strip }} },
@@ -44,7 +53,7 @@ ER -
44
53
  {% endcapture %}
45
54
  {% capture endnote_entry %}%0 {{ citation_type | capitalize }}
46
55
  %T {{ citation_title | strip }}
47
- {{ ris_authors | strip | replace: 'AU', '%A' }}
56
+ {{ endnote_authors | strip }}
48
57
  {% if citation_year %}%D {{ citation_year }}
49
58
  {% endif %}
50
59
  {% if publisher %}%I {{ publisher | strip }}
@@ -53,12 +62,11 @@ ER -
53
62
  {% endif %}
54
63
  %U {{ citation_url }}
55
64
  {% endcapture %}
56
- {% capture authors_plain %}
57
- {% for author in authors_array %}
58
- {% assign author_name = author.name | default: author %}
59
- {{ author_name | strip }}{% unless forloop.last %}, {% endunless %}
60
- {% endfor %}
61
- {% endcapture %}
65
+ {%- capture authors_plain -%}
66
+ {%- for author in authors_array -%}
67
+ {{- author.name | default: author | strip | escape -}}{%- unless forloop.last -%}, {% endunless -%}
68
+ {%- endfor -%}
69
+ {%- endcapture -%}
62
70
  {% capture citation_text %}
63
71
  {{ authors_plain | strip }}{% if citation_year %} ({{ citation_year }}){% endif %}. {{ citation_title | strip }}. {{ publisher | strip }}. {{ citation_url }}.
64
72
  {% endcapture %}