diff --git a/pubspec.yaml b/pubspec.yaml
index 0dd65d7..a939a1c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -9,6 +9,7 @@ environment:
dependencies:
js: '^0.6.1+1'
+ html: '^0.14.0+3'
dev_dependencies:
build_runner: ^1.8.0
diff --git a/web/css/dark.scss b/web/css/dark.scss
deleted file mode 100644
index 35733ef..0000000
--- a/web/css/dark.scss
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- Copyright (C) 2019-2020 Lucien Cartier-Tilet
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-*/
-
-$bg: #2c3e50;
-$darkerbg: #34495e;
-$textcolor: #ecf0f1;
-$tablecolor: #263646;
-
-html {
- background-color: $darkerbg;
-}
-
-thead {
- tr {
- @extend html;
- }
-}
-
-.tooltiptext {
- @extend html;
-}
-
-.tooltiptext::after {
- border-color: $darkerbg transparent transparent transparent;
-}
-
-body {
- color: $textcolor;
-}
-
-.title {
- @extend body;
-}
-
-a {
- @extend body;
-}
-
-th {
- border: 1px solid $tablecolor;
-}
-
-td {
- @extend th;
-}
-
-pre {
- @extend th;
-}
-
-table {
- border: 2px solid $tablecolor;
-}
-
-#content {
- background-color: $bg;
-}
-
-#postamble{
- background-color: $bg;
-}
diff --git a/web/css/htmlize.css b/web/css/htmlize.css
deleted file mode 100644
index 37a52d0..0000000
--- a/web/css/htmlize.css
+++ /dev/null
@@ -1,765 +0,0 @@
-.org-bold {
- /* bold */
- font-weight: bold;
-}
-
-.org-bold-italic {
- /* bold-italic */
- font-weight: bold;
- font-style: italic;
-}
-
-.org-buffer-menu-buffer {
- /* buffer-menu-buffer */
- font-weight: bold;
-}
-
-.org-builtin {
- /* font-lock-builtin-face */
- color: #7a378b;
-}
-
-.org-button {
- /* button */
- text-decoration: underline;
-}
-
-.org-calendar-today {
- /* calendar-today */
- text-decoration: underline;
-}
-
-.org-change-log-acknowledgement {
- /* change-log-acknowledgement */
- color: #b22222;
-}
-
-.org-change-log-conditionals {
- /* change-log-conditionals */
- color: #a0522d;
-}
-
-.org-change-log-date {
- /* change-log-date */
- color: #8b2252;
-}
-
-.org-change-log-email {
- /* change-log-email */
- color: #a0522d;
-}
-
-.org-change-log-file {
- /* change-log-file */
- color: #0000ff;
-}
-
-.org-change-log-function {
- /* change-log-function */
- color: #a0522d;
-}
-
-.org-change-log-list {
- /* change-log-list */
- color: #a020f0;
-}
-
-.org-change-log-name {
- /* change-log-name */
- color: #008b8b;
-}
-
-.org-comint-highlight-input {
- /* comint-highlight-input */
- font-weight: bold;
-}
-
-.org-comint-highlight-prompt {
- /* comint-highlight-prompt */
- color: #00008b;
-}
-
-.org-comment {
- /* font-lock-comment-face */
- color: #999988;
- font-style: italic;
-}
-
-.org-comment-delimiter {
- /* font-lock-comment-delimiter-face */
- color: #999988;
- font-style: italic;
-}
-
-.org-completions-annotations {
- /* completions-annotations */
- font-style: italic;
-}
-
-.org-completions-common-part {
- /* completions-common-part */
- color: #000000;
- background-color: #ffffff;
-}
-
-.org-completions-first-difference {
- /* completions-first-difference */
- font-weight: bold;
-}
-
-.org-constant {
- /* font-lock-constant-face */
- color: #008b8b;
-}
-
-.org-diary {
- /* diary */
- color: #ff0000;
-}
-
-.org-diff-context {
- /* diff-context */
- color: #7f7f7f;
-}
-
-.org-diff-file-header {
- /* diff-file-header */
- background-color: #b3b3b3;
- font-weight: bold;
-}
-
-.org-diff-function {
- /* diff-function */
- background-color: #cccccc;
-}
-
-.org-diff-header {
- /* diff-header */
- background-color: #cccccc;
-}
-
-.org-diff-hunk-header {
- /* diff-hunk-header */
- background-color: #cccccc;
-}
-
-.org-diff-index {
- /* diff-index */
- background-color: #b3b3b3;
- font-weight: bold;
-}
-
-.org-diff-nonexistent {
- /* diff-nonexistent */
- background-color: #b3b3b3;
- font-weight: bold;
-}
-
-.org-diff-refine-change {
- /* diff-refine-change */
- background-color: #d9d9d9;
-}
-
-.org-dired-directory {
- /* dired-directory */
- color: #0000ff;
-}
-
-.org-dired-flagged {
- /* dired-flagged */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-dired-header {
- /* dired-header */
- color: #228b22;
-}
-
-.org-dired-ignored {
- /* dired-ignored */
- color: #7f7f7f;
-}
-
-.org-dired-mark {
- /* dired-mark */
- color: #008b8b;
-}
-
-.org-dired-marked {
- /* dired-marked */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-dired-perm-write {
- /* dired-perm-write */
- color: #b22222;
-}
-
-.org-dired-symlink {
- /* dired-symlink */
- color: #a020f0;
-}
-
-.org-dired-warning {
- /* dired-warning */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-doc {
- /* font-lock-doc-face */
- color: #8b2252;
-}
-
-.org-escape-glyph {
- /* escape-glyph */
- color: #a52a2a;
-}
-
-.org-file-name-shadow {
- /* file-name-shadow */
- color: #7f7f7f;
-}
-
-.org-flyspell-duplicate {
- /* flyspell-duplicate */
- color: #cdad00;
- font-weight: bold;
- text-decoration: underline;
-}
-
-.org-flyspell-incorrect {
- /* flyspell-incorrect */
- color: #ff4500;
- font-weight: bold;
- text-decoration: underline;
-}
-
-.org-fringe {
- /* fringe */
- background-color: #f2f2f2;
-}
-
-.org-function-name {
- /* font-lock-function-name-face */
- color: teal;
-}
-
-.org-header-line {
- /* header-line */
- color: #333333;
- background-color: #e5e5e5;
-}
-
-.org-help-argument-name {
- /* help-argument-name */
- font-style: italic;
-}
-
-.org-highlight {
- /* highlight */
- background-color: #b4eeb4;
-}
-
-.org-holiday {
- /* holiday */
- background-color: #ffc0cb;
-}
-
-.org-isearch {
- /* isearch */
- color: #b0e2ff;
- background-color: #cd00cd;
-}
-
-.org-isearch-fail {
- /* isearch-fail */
- background-color: #ffc1c1;
-}
-
-.org-italic {
- /* italic */
- font-style: italic;
-}
-
-.org-keyword {
- /* font-lock-keyword-face */
- color: #0086b3;
-}
-
-.org-lazy-highlight {
- /* lazy-highlight */
- background-color: #afeeee;
-}
-
-.org-link {
- /* link */
- color: #0000ff;
- text-decoration: underline;
-}
-
-.org-link-visited {
- /* link-visited */
- color: #8b008b;
- text-decoration: underline;
-}
-
-.org-log-edit-header {
- /* log-edit-header */
- color: #a020f0;
-}
-
-.org-log-edit-summary {
- /* log-edit-summary */
- color: #0000ff;
-}
-
-.org-log-edit-unknown-header {
- /* log-edit-unknown-header */
- color: #b22222;
-}
-
-.org-match {
- /* match */
- background-color: #ffff00;
-}
-
-.org-next-error {
- /* next-error */
- background-color: #eedc82;
-}
-
-.org-nobreak-space {
- /* nobreak-space */
- color: #a52a2a;
- text-decoration: underline;
-}
-
-.org-org-archived {
- /* org-archived */
- color: #7f7f7f;
-}
-
-.org-org-block {
- /* org-block */
- color: #7f7f7f;
-}
-
-.org-org-block-begin-line {
- /* org-block-begin-line */
- color: #b22222;
-}
-
-.org-org-block-end-line {
- /* org-block-end-line */
- color: #b22222;
-}
-
-.org-org-checkbox {
- /* org-checkbox */
- font-weight: bold;
-}
-
-.org-org-checkbox-statistics-done {
- /* org-checkbox-statistics-done */
- color: #228b22;
- font-weight: bold;
-}
-
-.org-org-checkbox-statistics-todo {
- /* org-checkbox-statistics-todo */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-org-clock-overlay {
- /* org-clock-overlay */
- background-color: #ffff00;
-}
-
-.org-org-code {
- /* org-code */
- color: #7f7f7f;
-}
-
-.org-org-column {
- /* org-column */
- background-color: #e5e5e5;
-}
-
-.org-org-column-title {
- /* org-column-title */
- background-color: #e5e5e5;
- font-weight: bold;
- text-decoration: underline;
-}
-
-.org-org-date {
- /* org-date */
- color: #a020f0;
- text-decoration: underline;
-}
-
-.org-org-document-info {
- /* org-document-info */
- color: #191970;
-}
-
-.org-org-document-info-keyword {
- /* org-document-info-keyword */
- color: #7f7f7f;
-}
-
-.org-org-document-title {
- /* org-document-title */
- color: #191970;
- font-size: 144%;
- font-weight: bold;
-}
-
-.org-org-done {
- /* org-done */
- color: #228b22;
- font-weight: bold;
-}
-
-.org-org-drawer {
- /* org-drawer */
- color: #0000ff;
-}
-
-.org-org-ellipsis {
- /* org-ellipsis */
- color: #b8860b;
- text-decoration: underline;
-}
-
-.org-org-footnote {
- /* org-footnote */
- color: #a020f0;
- text-decoration: underline;
-}
-
-.org-org-formula {
- /* org-formula */
- color: #b22222;
-}
-
-.org-org-headline-done {
- /* org-headline-done */
- color: #bc8f8f;
-}
-
-.org-org-hide {
- /* org-hide */
- color: #ffffff;
-}
-
-.org-org-latex-and-export-specials {
- /* org-latex-and-export-specials */
- color: #8b4513;
-}
-
-.org-org-level-1 {
- /* org-level-1 */
- color: #0000ff;
-}
-
-.org-org-level-2 {
- /* org-level-2 */
- color: #a0522d;
-}
-
-.org-org-level-3 {
- /* org-level-3 */
- color: #a020f0;
-}
-
-.org-org-level-4 {
- /* org-level-4 */
- color: #b22222;
-}
-
-.org-org-level-5 {
- /* org-level-5 */
- color: #228b22;
-}
-
-.org-org-level-6 {
- /* org-level-6 */
- color: #008b8b;
-}
-
-.org-org-level-7 {
- /* org-level-7 */
- color: #7a378b;
-}
-
-.org-org-level-8 {
- /* org-level-8 */
- color: #8b2252;
-}
-
-.org-org-link {
- /* org-link */
- color: #0000ff;
- text-decoration: underline;
-}
-
-.org-org-meta-line {
- /* org-meta-line */
- color: #b22222;
-}
-
-.org-org-mode-line-clock {
- /* org-mode-line-clock */
- color: #000000;
- background-color: #bfbfbf;
-}
-
-.org-org-mode-line-clock-overrun {
- /* org-mode-line-clock-overrun */
- color: #000000;
- background-color: #ff0000;
-}
-
-.org-org-quote {
- /* org-quote */
- color: #7f7f7f;
-}
-
-.org-org-scheduled {
- /* org-scheduled */
- color: #006400;
-}
-
-.org-org-scheduled-previously {
- /* org-scheduled-previously */
- color: #b22222;
-}
-
-.org-org-scheduled-today {
- /* org-scheduled-today */
- color: #006400;
-}
-
-.org-org-sexp-date {
- /* org-sexp-date */
- color: #a020f0;
-}
-
-.org-org-special-keyword {
- /* org-special-keyword */
- color: #a020f0;
-}
-
-.org-org-table {
- /* org-table */
- color: #0000ff;
-}
-
-.org-org-tag {
- /* org-tag */
- font-weight: bold;
-}
-
-.org-org-target {
- /* org-target */
- text-decoration: underline;
-}
-
-.org-org-time-grid {
- /* org-time-grid */
- color: #b8860b;
-}
-
-.org-org-todo {
- /* org-todo */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-org-upcoming-deadline {
- /* org-upcoming-deadline */
- color: #b22222;
-}
-
-.org-org-verbatim {
- /* org-verbatim */
- color: #7f7f7f;
-}
-
-.org-org-verse {
- /* org-verse */
- color: #7f7f7f;
-}
-
-.org-org-warning {
- /* org-warning */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-outline-1 {
- /* outline-1 */
- color: #0000ff;
-}
-
-.org-outline-2 {
- /* outline-2 */
- color: #a0522d;
-}
-
-.org-outline-3 {
- /* outline-3 */
- color: #a020f0;
-}
-
-.org-outline-4 {
- /* outline-4 */
- color: #b22222;
-}
-
-.org-outline-5 {
- /* outline-5 */
- color: #228b22;
-}
-
-.org-outline-6 {
- /* outline-6 */
- color: #008b8b;
-}
-
-.org-outline-7 {
- /* outline-7 */
- color: #7a378b;
-}
-
-.org-outline-8 {
- /* outline-8 */
- color: #8b2252;
-}
-
-.org-preprocessor {
- /* font-lock-preprocessor-face */
- color: #7a378b;
-}
-
-.org-query-replace {
- /* query-replace */
- color: #b0e2ff;
- background-color: #cd00cd;
-}
-
-.org-regexp-grouping-backslash {
- /* font-lock-regexp-grouping-backslash */
- font-weight: bold;
-}
-
-.org-regexp-grouping-construct {
- /* font-lock-regexp-grouping-construct */
- font-weight: bold;
-}
-
-.org-region {
- /* region */
- background-color: #eedc82;
-}
-
-.org-secondary-selection {
- /* secondary-selection */
- background-color: #ffff00;
-}
-
-.org-shadow {
- /* shadow */
- color: #7f7f7f;
-}
-
-.org-show-paren-match {
- /* show-paren-match */
- background-color: #40e0d0;
-}
-
-.org-show-paren-mismatch {
- /* show-paren-mismatch */
- color: #ffffff;
- background-color: #a020f0;
-}
-
-.org-string {
- /* font-lock-string-face */
- color: #dd1144;
-}
-
-.org-tool-bar {
- /* tool-bar */
- color: #000000;
- background-color: #bfbfbf;
-}
-
-.org-tooltip {
- /* tooltip */
- color: #000000;
- background-color: #ffffe0;
-}
-
-.org-trailing-whitespace {
- /* trailing-whitespace */
- background-color: #ff0000;
-}
-
-.org-type {
- /* font-lock-type-face */
- color: #228b22;
-}
-
-.org-underline {
- /* underline */
- text-decoration: underline;
-}
-
-.org-variable-name {
- /* font-lock-variable-name-face */
- color: teal;
-}
-
-.org-warning {
- /* font-lock-warning-face */
- color: #ff0000;
- font-weight: bold;
-}
-
-.org-widget-button {
- /* widget-button */
- font-weight: bold;
-}
-
-.org-widget-button-pressed {
- /* widget-button-pressed */
- color: #ff0000;
-}
-
-.org-widget-documentation {
- /* widget-documentation */
- color: #006400;
-}
-
-.org-widget-field {
- /* widget-field */
- background-color: #d9d9d9;
-}
-
-.org-widget-inactive {
- /* widget-inactive */
- color: #7f7f7f;
-}
-
-.org-widget-single-line-field {
- /* widget-single-line-field */
- background-color: #d9d9d9;
-}
-
-/*# sourceMappingURL=htmlize.css.map */
diff --git a/web/css/htmlize.min.css b/web/css/htmlize.min.css
deleted file mode 100644
index a34a2bf..0000000
--- a/web/css/htmlize.min.css
+++ /dev/null
@@ -1,620 +0,0 @@
-.org-bold {
- font-weight: 700;
-}
-
-.org-bold-italic {
- font-weight: 700;
- font-style: italic;
-}
-
-.org-buffer-menu-buffer {
- font-weight: 700;
-}
-
-.org-builtin {
- color: #7a378b;
-}
-
-.org-button {
- text-decoration: underline;
-}
-
-.org-calendar-today {
- text-decoration: underline;
-}
-
-.org-change-log-acknowledgement {
- color: #b22222;
-}
-
-.org-change-log-conditionals {
- color: sienna;
-}
-
-.org-change-log-date {
- color: #8b2252;
-}
-
-.org-change-log-email {
- color: sienna;
-}
-
-.org-change-log-file {
- color: #00f;
-}
-
-.org-change-log-function {
- color: sienna;
-}
-
-.org-change-log-list {
- color: #a020f0;
-}
-
-.org-change-log-name {
- color: #008b8b;
-}
-
-.org-comint-highlight-input {
- font-weight: 700;
-}
-
-.org-comint-highlight-prompt {
- color: #00008b;
-}
-
-.org-comment {
- color: #998;
- font-style: italic;
-}
-
-.org-comment-delimiter {
- color: #998;
- font-style: italic;
-}
-
-.org-completions-annotations {
- font-style: italic;
-}
-
-.org-completions-common-part {
- color: #000;
- background-color: #fff;
-}
-
-.org-completions-first-difference {
- font-weight: 700;
-}
-
-.org-constant {
- color: #008b8b;
-}
-
-.org-diary {
- color: red;
-}
-
-.org-diff-context {
- color: #7f7f7f;
-}
-
-.org-diff-file-header {
- background-color: #b3b3b3;
- font-weight: 700;
-}
-
-.org-diff-function {
- background-color: #ccc;
-}
-
-.org-diff-header {
- background-color: #ccc;
-}
-
-.org-diff-hunk-header {
- background-color: #ccc;
-}
-
-.org-diff-index {
- background-color: #b3b3b3;
- font-weight: 700;
-}
-
-.org-diff-nonexistent {
- background-color: #b3b3b3;
- font-weight: 700;
-}
-
-.org-diff-refine-change {
- background-color: #d9d9d9;
-}
-
-.org-dired-directory {
- color: #00f;
-}
-
-.org-dired-flagged {
- color: red;
- font-weight: 700;
-}
-
-.org-dired-header {
- color: #228b22;
-}
-
-.org-dired-ignored {
- color: #7f7f7f;
-}
-
-.org-dired-mark {
- color: #008b8b;
-}
-
-.org-dired-marked {
- color: red;
- font-weight: 700;
-}
-
-.org-dired-perm-write {
- color: #b22222;
-}
-
-.org-dired-symlink {
- color: #a020f0;
-}
-
-.org-dired-warning {
- color: red;
- font-weight: 700;
-}
-
-.org-doc {
- color: #8b2252;
-}
-
-.org-escape-glyph {
- color: brown;
-}
-
-.org-file-name-shadow {
- color: #7f7f7f;
-}
-
-.org-flyspell-duplicate {
- color: #cdad00;
- font-weight: 700;
- text-decoration: underline;
-}
-
-.org-flyspell-incorrect {
- color: #ff4500;
- font-weight: 700;
- text-decoration: underline;
-}
-
-.org-fringe {
- background-color: #f2f2f2;
-}
-
-.org-function-name {
- color: teal;
-}
-
-.org-header-line {
- color: #333;
- background-color: #e5e5e5;
-}
-
-.org-help-argument-name {
- font-style: italic;
-}
-
-.org-highlight {
- background-color: #b4eeb4;
-}
-
-.org-holiday {
- background-color: pink;
-}
-
-.org-isearch {
- color: #b0e2ff;
- background-color: #cd00cd;
-}
-
-.org-isearch-fail {
- background-color: #ffc1c1;
-}
-
-.org-italic {
- font-style: italic;
-}
-
-.org-keyword {
- color: #0086b3;
-}
-
-.org-lazy-highlight {
- background-color: #afeeee;
-}
-
-.org-link {
- color: #00f;
- text-decoration: underline;
-}
-
-.org-link-visited {
- color: #8b008b;
- text-decoration: underline;
-}
-
-.org-log-edit-header {
- color: #a020f0;
-}
-
-.org-log-edit-summary {
- color: #00f;
-}
-
-.org-log-edit-unknown-header {
- color: #b22222;
-}
-
-.org-match {
- background-color: #ff0;
-}
-
-.org-next-error {
- background-color: #eedc82;
-}
-
-.org-nobreak-space {
- color: brown;
- text-decoration: underline;
-}
-
-.org-org-archived {
- color: #7f7f7f;
-}
-
-.org-org-block {
- color: #7f7f7f;
-}
-
-.org-org-block-begin-line {
- color: #b22222;
-}
-
-.org-org-block-end-line {
- color: #b22222;
-}
-
-.org-org-checkbox {
- font-weight: 700;
-}
-
-.org-org-checkbox-statistics-done {
- color: #228b22;
- font-weight: 700;
-}
-
-.org-org-checkbox-statistics-todo {
- color: red;
- font-weight: 700;
-}
-
-.org-org-clock-overlay {
- background-color: #ff0;
-}
-
-.org-org-code {
- color: #7f7f7f;
-}
-
-.org-org-column {
- background-color: #e5e5e5;
-}
-
-.org-org-column-title {
- background-color: #e5e5e5;
- font-weight: 700;
- text-decoration: underline;
-}
-
-.org-org-date {
- color: #a020f0;
- text-decoration: underline;
-}
-
-.org-org-document-info {
- color: #191970;
-}
-
-.org-org-document-info-keyword {
- color: #7f7f7f;
-}
-
-.org-org-document-title {
- color: #191970;
- font-size: 144%;
- font-weight: 700;
-}
-
-.org-org-done {
- color: #228b22;
- font-weight: 700;
-}
-
-.org-org-drawer {
- color: #00f;
-}
-
-.org-org-ellipsis {
- color: #b8860b;
- text-decoration: underline;
-}
-
-.org-org-footnote {
- color: #a020f0;
- text-decoration: underline;
-}
-
-.org-org-formula {
- color: #b22222;
-}
-
-.org-org-headline-done {
- color: #bc8f8f;
-}
-
-.org-org-hide {
- color: #fff;
-}
-
-.org-org-latex-and-export-specials {
- color: #8b4513;
-}
-
-.org-org-level-1 {
- color: #00f;
-}
-
-.org-org-level-2 {
- color: sienna;
-}
-
-.org-org-level-3 {
- color: #a020f0;
-}
-
-.org-org-level-4 {
- color: #b22222;
-}
-
-.org-org-level-5 {
- color: #228b22;
-}
-
-.org-org-level-6 {
- color: #008b8b;
-}
-
-.org-org-level-7 {
- color: #7a378b;
-}
-
-.org-org-level-8 {
- color: #8b2252;
-}
-
-.org-org-link {
- color: #00f;
- text-decoration: underline;
-}
-
-.org-org-meta-line {
- color: #b22222;
-}
-
-.org-org-mode-line-clock {
- color: #000;
- background-color: #bfbfbf;
-}
-
-.org-org-mode-line-clock-overrun {
- color: #000;
- background-color: red;
-}
-
-.org-org-quote {
- color: #7f7f7f;
-}
-
-.org-org-scheduled {
- color: #006400;
-}
-
-.org-org-scheduled-previously {
- color: #b22222;
-}
-
-.org-org-scheduled-today {
- color: #006400;
-}
-
-.org-org-sexp-date {
- color: #a020f0;
-}
-
-.org-org-special-keyword {
- color: #a020f0;
-}
-
-.org-org-table {
- color: #00f;
-}
-
-.org-org-tag {
- font-weight: 700;
-}
-
-.org-org-target {
- text-decoration: underline;
-}
-
-.org-org-time-grid {
- color: #b8860b;
-}
-
-.org-org-todo {
- color: red;
- font-weight: 700;
-}
-
-.org-org-upcoming-deadline {
- color: #b22222;
-}
-
-.org-org-verbatim {
- color: #7f7f7f;
-}
-
-.org-org-verse {
- color: #7f7f7f;
-}
-
-.org-org-warning {
- color: red;
- font-weight: 700;
-}
-
-.org-outline-1 {
- color: #00f;
-}
-
-.org-outline-2 {
- color: sienna;
-}
-
-.org-outline-3 {
- color: #a020f0;
-}
-
-.org-outline-4 {
- color: #b22222;
-}
-
-.org-outline-5 {
- color: #228b22;
-}
-
-.org-outline-6 {
- color: #008b8b;
-}
-
-.org-outline-7 {
- color: #7a378b;
-}
-
-.org-outline-8 {
- color: #8b2252;
-}
-
-.org-preprocessor {
- color: #7a378b;
-}
-
-.org-query-replace {
- color: #b0e2ff;
- background-color: #cd00cd;
-}
-
-.org-regexp-grouping-backslash {
- font-weight: 700;
-}
-
-.org-regexp-grouping-construct {
- font-weight: 700;
-}
-
-.org-region {
- background-color: #eedc82;
-}
-
-.org-secondary-selection {
- background-color: #ff0;
-}
-
-.org-shadow {
- color: #7f7f7f;
-}
-
-.org-show-paren-match {
- background-color: #40e0d0;
-}
-
-.org-show-paren-mismatch {
- color: #fff;
- background-color: #a020f0;
-}
-
-.org-string {
- color: #d14;
-}
-
-.org-tool-bar {
- color: #000;
- background-color: #bfbfbf;
-}
-
-.org-tooltip {
- color: #000;
- background-color: #ffffe0;
-}
-
-.org-trailing-whitespace {
- background-color: red;
-}
-
-.org-type {
- color: #228b22;
-}
-
-.org-underline {
- text-decoration: underline;
-}
-
-.org-variable-name {
- color: teal;
-}
-
-.org-warning {
- color: red;
- font-weight: 700;
-}
-
-.org-widget-button {
- font-weight: 700;
-}
-
-.org-widget-button-pressed {
- color: red;
-}
-
-.org-widget-documentation {
- color: #006400;
-}
-
-.org-widget-field {
- background-color: #d9d9d9;
-}
-
-.org-widget-inactive {
- color: #7f7f7f;
-}
-
-.org-widget-single-line-field {
- background-color: #d9d9d9;
-}
-
-/*# sourceMappingURL=htmlize.min.css.map */
diff --git a/web/css/light.scss b/web/css/light.scss
deleted file mode 100644
index ee571bf..0000000
--- a/web/css/light.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- Copyright (C) 2019-2020 Lucien Cartier-Tilet
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-*/
-
-$bg: #eee;
-$darkerbg: #ddd;
-$textcolor: #444;
-
-html {
- background-color: $bg;
-}
-
-thead {
- tr {
- @extend html;
- }
-}
-
-.tooltiptext {
- @extend html;
-}
-
-.tooltiptext::after {
- border-color: $darkerbg transparent transparent transparent;
-}
-
-body {
- color: $textcolor;
-}
-
-.title {
- @extend body;
-}
-
-a {
- @extend body;
-}
-
-th {
- border: 1px solid $textcolor;
-}
-
-td {
- @extend th;
-}
-
-pre {
- @extend th;
-}
-
-table {
- border: 2px solid $textcolor;
-}
-
-#content {
- background-color: $darkerbg;
-}
-
-#postamble{
- @extend #content;
-}
diff --git a/web/css/main.scss b/web/css/main.scss
deleted file mode 100644
index 021d303..0000000
--- a/web/css/main.scss
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- Copyright (C) 2019-2020 Lucien Cartier-Tilet
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-*/
-
-@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic|Roboto+Slab:400,700|Inconsolata:400,700);
-
-@font-face {
- font-family: "DoulosSIL";
- font-display: swap;
- src: url("https://langue.phundrak.com/fonts/DoulosSIL-R.woff");
-}
-
-@font-face {
- font-family: "Noto Sans Runes";
- font-display: swap;
- src: url("../fonts/NotoSansRunic-Regular.ttf");
-}
-
-@font-face {
- font-family: "Helvetica Neue";
- font-display: swap;
- src: url("../fonts/HelveticaNeue.ttf");
-}
-
-body {
- font-family: "Noto Sans Runes", "DoulosSIL", "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
- font-weight: normal;
- overflow-x: hidden;
- font-size: 105%;
- height: 100%;
- margin: 10px;
-}
-
-#postamble {
- text-align: center;
- margin-bottom: 20px;
-}
-
-#content {
- max-width: 1100px;
- margin: 20px auto;
- padding: 20px;
- box-shadow: 5px 5px 7px rgba(1, 1, 1, .6);
-}
-
-hr {
- display: block;
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- margin-left: auto;
- margin-right: auto;
- border-style: inset;
- border-width: 1px;
-}
-
-.outline-2 {
- margin: 0 2px;
- padding: 0 10px;
-}
-
-.outline-text-2 {
- @extend .outline-2;
- margin-bottom: 20px;
-}
-
-.outline-4 {
- @extend .outline-2;
-}
-
-.outline-text-4 {
- @extend .outline-text-2;
-}
-
-.outline-5 {
- @extend .outline-2;
-}
-
-.outline-text-5 {
- @extend .outline-text-2;
-}
-
-.outline-6 {
- @extend .outline-2;
-}
-
-.outline-text-6 {
- @extend .outline-text-2;
-}
-
-h1 {
- @extend legend;
- font-size: 4em;
- box-shadow: inset 0 -50px 0 #1abc9c;
-}
-
-h2 {
- @extend legend;
- font-size: 150%;
- box-shadow: inset 0 -20px 0 #16a085;
-}
-
-h3 {
- @extend legend;
- font-size: 125%;
- box-shadow: inset 0 -16px 0 #27ae60;
-}
-
-h4 {
- @extend legend;
- font-size: 115%;
- box-shadow: inset 0 -15px 0 #e67e22;
-}
-
-h5 {
- @extend legend;
- font-size: 110%;
- box-shadow: inset 0 -14px 0 #9b59b6;
-}
-
-h4,
-h5 {
- font-weight: 300;
-}
-
-p {
- text-align: justify;
-}
-
-$linkColor: #9b59b6;
-
-a {
- text-decoration: none;
- box-shadow: inset 0 -3px 0 $linkColor;
- transition: all .3s ease-out;
-}
-
-a:hover {
- box-shadow: inset 0 -21px 0 $linkColor;
- transition: all .3s ease-in;
-}
-
-a[href^="img/"],
-a[href^="img/"]:hover {
- box-shadow: 0 0;
-}
-
-.figure {
- display: block;
- overflow-x: auto;
-
- p {
- margin: 0 0;
- }
-}
-
-.largetable {
- display: block;
- overflow-x: auto;
-}
-
-img {
- margin: auto;
-}
-
-legend {
- font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
- font-weight: 700;
- display: inline-block;
-}
-
-table {
- margin: auto;
- border-collapse: collapse;
-}
-
-th,
-td {
- padding: 10px;
-}
-
-.vertical {
- writing-mode: vertical-rl;
- text-align: right;
-}
-
-pre {
- box-shadow: 3px 3px 3px rgba(1, 1, 1, .6);
-}
-
-/* scrollbar *****************************************************************/
-
-/* width */
-::-webkit-scrollbar {
- width: 5px;
- height: 5px;
-}
-
-/* Track */
-::-webkit-scrollbar-track {
- border-radius: 10px;
-}
-
-/* Handle */
-::-webkit-scrollbar-thumb {
- background: #7f8c8d;
- border-radius: 10px;
-}
-
-/* Theme switcher ************************************************************/
-
-.themeBtn {
- position: fixed;
- bottom: 25px;
- right: 25px;
- padding-top:10px;
- height: 40px;
- width: 50px;
- border-radius: 25px;
- background-color: #1e5b50;
- text-align: center;
- box-shadow: 3px 3px 6px rgba(1, 1, 1, .6);
- cursor: pointer;
-
- .fas {
- font-size: 30px;
- }
-}
diff --git a/web/css/nyqy.scss b/web/css/nyqy.scss
deleted file mode 100644
index bac0baf..0000000
--- a/web/css/nyqy.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- Copyright (C) 2019-2020 Lucien Cartier-Tilet
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-*/
-
-.tooltip {
- position: relative;
- display: inline-block;
- border-bottom: 1px dotted #1e5b50;
-
- .tooltiptext {
- visibility: hidden;
- width: 120px;
- text-align: center;
- padding: 5px 0;
- border-radius: 6px;
-
- /* position the tooltip text */
- position: absolute;
- z-index: 1;
- bottom: 125;
- left: 50%;
- margin-left: -60%;
-
- /* Fade in tooltip */
- opacity: 0;
- transition: opacity 0.3s;
-
- }
-
- .tooltiptext::after {
- content: "";
- top: 100%;
- margin-left: -5%;
- border-width: 5px;
- border-style: solid;
- transition: opacity 0.2s;
- }
-}
-
-.tooltip:hover {
- .tooltiptext {
- visibility: visible;
- opacity: 1;
- }
-}
-
-.tooltiptext {
- padding: 7px !important;
-}
-
-.largetable {
- $tablepadding: 40px;
- padding-top: $tablepadding !important;
- padding-bottom: $tablepadding !important;
-}
diff --git a/web/dart/cookie.dart b/web/dart/cookie.dart
deleted file mode 100644
index 7dbef43..0000000
--- a/web/dart/cookie.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-@JS()
-library cookie;
-
-import 'package:js/js.dart';
-
-@JS()
-class Cookies {
- // external factory Cookie();
- external static String get(String name);
- external static void set(String name, String value);
-}
diff --git a/web/dart/main.dart b/web/dart/main.dart
index db6bd35..4c8022c 100644
--- a/web/dart/main.dart
+++ b/web/dart/main.dart
@@ -1,66 +1,5 @@
-@JS()
-library main;
-
-import 'dart:html';
-
-import 'package:js/js.dart';
-
-import './cookie.dart';
+import './reorganize_html.dart' show reorganizeHtml;
void main() {
reorganizeHtml();
- createThemeSwitcher();
- themeSwitch(isThemeDark());
- querySelector('.themeBtn').onClick.listen(themeSwitchMouse);
-}
-
-String cookieThemeName = 'theme';
-
-void createThemeSwitcher() {
- // set the correct CSS depending on the cookie, dark is enabled by default
- var isDark = isThemeDark();
- // Set the correct symbol in the theme switcher button
- querySelector('body').append(DivElement()..className = 'themeBtn');
- querySelector('.themeBtn')
- .children
- .add(Element.tag('i')..className = 'fas fa-' + (isDark ? 'sun' : 'moon'));
-}
-
-bool isThemeDark() {
- if (Cookies.get(cookieThemeName) == 'light') {
- return false;
- }
- Cookies.set(cookieThemeName, 'dark');
- return true;
-}
-
-void reorganizeHtml() {
- // Add a
element after the content div
- querySelector('#content').appendHtml('
');
-
- // Move the postamble in the content div
- querySelector('#content').append(querySelector('#postamble'));
-
- for (var table in querySelectorAll('table')) {
- var largetable = DivElement();
- largetable.className = 'largetable';
- table.before(largetable);
- largetable.children.add(table);
- }
-}
-
-bool setTheme(bool dark) {
- Cookies.set(cookieThemeName, (dark ? 'dark' : 'light'));
- return !dark;
-}
-
-void themeSwitch(bool isDark) {
- querySelector('.fas').className = 'fas fa-' + (isDark ? 'sun' : 'moon');
- querySelector('#theme').attributes['href'] =
- 'https://langue.phundrak.com/css/' + (isDark ? 'dark' : 'light') + '.css';
-}
-
-void themeSwitchMouse(MouseEvent event) {
- bool isDark = setTheme(!isThemeDark());
- themeSwitch(isDark);
}
diff --git a/web/dart/parse_sitemap.dart b/web/dart/parse_sitemap.dart
new file mode 100644
index 0000000..fe95187
--- /dev/null
+++ b/web/dart/parse_sitemap.dart
@@ -0,0 +1,38 @@
+import 'dart:html' show HttpRequest;
+
+import 'package:html/parser.dart' show parse;
+
+// Get the sitemap content
+Future getSitemap() async {
+ const path = 'sitemap.html';
+ try {
+ return await HttpRequest.getString(path);
+ } catch (e) {
+ print('Couldn’t open $path');
+ }
+ return 'Error';
+}
+
+// This function returns a Map which contains all links to languages detected
+// from the sitemap.
+Future