From 37d735cfddb298885e58c9d1f7c4f25d3c7095f7 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Fri, 24 Apr 2020 18:14:52 +0200 Subject: [PATCH] Beginning rewrite of dart and scss code, no more infojs for org New look for the website, rewrite and optimization of dart code. Infojs has been removed entirely. --- pubspec.yaml | 1 + web/css/dark.scss | 75 -- web/css/htmlize.css | 765 ------------------ web/css/htmlize.min.css | 620 -------------- web/css/light.scss | 74 -- web/css/main.scss | 240 ------ web/css/nyqy.scss | 68 -- web/dart/cookie.dart | 11 - web/dart/main.dart | 63 +- web/dart/parse_sitemap.dart | 38 + web/dart/reorganize_html.dart | 174 ++++ web/headers | 6 +- web/index.org | 1 - .../style.scssc | Bin 0 -> 34856 bytes web/style/style.css | 2 + web/style/style.scss | 120 +++ 16 files changed, 337 insertions(+), 1921 deletions(-) delete mode 100644 web/css/dark.scss delete mode 100644 web/css/htmlize.css delete mode 100644 web/css/htmlize.min.css delete mode 100644 web/css/light.scss delete mode 100644 web/css/main.scss delete mode 100644 web/css/nyqy.scss delete mode 100644 web/dart/cookie.dart create mode 100644 web/dart/parse_sitemap.dart create mode 100644 web/dart/reorganize_html.dart create mode 100644 web/style/.sass-cache/56138fd1e36a8566d3251fb8a3699a18f607794c/style.scssc create mode 100644 web/style/style.css create mode 100644 web/style/style.scss 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> parseSitemap() async { + var links = {}; + await getSitemap().then((String content) { + final sitemap = parse(content).getElementsByClassName('org-ul')[0].children; + for (var elem in sitemap) { + // TODO: make this recursive so prefixes in nested folders can be added to + // each other + if (elem.innerHtml.startsWith(' + void addElement(final Element elem, [List classes, String id]) { + var wrapper = Element.li() + ..classes.add('nav-item') + ..append(elem); + if (classes != null) { + for (var c in classes) { + wrapper.classes.add(c); + } + } + if (id != null) () => wrapper.attributes['id'] = id; + navbar.append(wrapper); + } + + Future makeNavbar() async { + addElement(Element.a() + ..attributes['href'] + ..innerText = 'Accueil'); + } + + Future addLanguages() async { + var languages = Element.ul()..classes.add('dropdown'); + await parseSitemap().then((final sitemap) => { + sitemap.forEach((url, name) { + final link = Element.a() + ..attributes['href'] = url + ..innerText = name; + + final linkLi = Element.li() + ..classes.add('dropdown-item') + ..insertAdjacentElement('afterBegin', link); + + languages.insertAdjacentElement('beforeEnd', linkLi); + }) + }); + final langLink = Element.a() + ..attributes['href'] = '#' + ..innerText = 'Langues'; + addElement(langLink, ['has-dropdown'], 'langList'); + querySelector('#langList').insertAdjacentElement('beforeEnd', languages); + } + + Element navbar; +} + +Future addLanguages(Element navbar) async { + // Languages + var languages = Element.ul()..classes.add('dropdown'); + await parseSitemap().then((final sitemap) => { + sitemap.forEach((url, name) { + final link = Element.a() + ..attributes['href'] = url + ..innerText = name; + + final linkLi = Element.li() + ..classes.add('dropdown-item') + ..insertAdjacentElement('afterBegin', link); + + languages.insertAdjacentElement('beforeEnd', linkLi); + }) + }); + navbar.append(Element.li() + ..append(Element.a() + ..attributes['href'] = '#' + ..innerText = 'Langues') + ..classes.add('nav-item') + ..classes.add('has-dropdown') + ..insertAdjacentElement('beforeEnd', languages)); + return navbar; +} + +// Add a navbar atop of the HTML body, containing two buttons: +// - One back to home +// - A dropdown to each language detected in the sitemap +Future makeNavbar() async { + var _navbar = Navbar(); + + // Home + var navbar_content = Element.ul()..classes.add('navbar-nav'); + navbar_content.append(Element.li() + ..classes.add('nav-item') + ..insertAdjacentElement( + 'afterBegin', + Element.a() + ..attributes['href'] = '/' + ..innerText = 'Accueil')); + + // Add languages + // navbar_content.append(Element.html(''' + + // ''')); + navbar_content = await addLanguages(navbar_content); + + // Page title + navbar_content.append(Element.li() + ..classes.add('nav-item') + ..innerText = getPageTitle()); + + // Share icon + // Add dropdown for sharing on multiple platforms + navbar_content = addIcon(navbar_content, ['fas', 'fa-share-alt'], 'shareBtn'); + + // Theme changer + // Add dropdown for theming + // navbar_content = addIcon(navbar_content, ['fas', 'fa-sun'], 'themeBtn'); + navbar_content.append(Element.html(''' +''')); + + // Navbar content added to navbar + final navbar = Element.nav() + ..classes.add('navbar') + ..append(navbar_content); + + return navbar; +} + +Element addIcon(Element navbar, List classes, String id) { + var elem = Element.tag('i')..attributes['id'] = id; + for (var c in classes) { + elem.classes.add(c); + } + navbar.append(Element.li()..append(elem)); + return navbar; +} + +Future wrapTables() async { + for (var table in querySelectorAll('table')) { + var largetable = DivElement()..className = 'largetable'; + table.before(largetable); + largetable.children.add(table); + } +} + +Future makeHeader() async { + querySelector('body') + .insertAdjacentElement('afterBegin', Element.tag('header')); + querySelector('header').append(querySelector('h1')); + querySelector('header').append(querySelector('.subtitle')); +} + +Future reorganizeHtml() async { + await makeHeader(); + await wrapTables(); + await makeNavbar().then((navbar) { + querySelector('body').insertAdjacentElement('afterBegin', navbar); + }); + + querySelector('body') + ..classes.add('light') + // Add a
element after the content div + ..appendHtml('
') + // Move the postamble in the content div + ..append(querySelector('#postamble')); +} diff --git a/web/headers b/web/headers index 33d5c4d..2b85095 100644 --- a/web/headers +++ b/web/headers @@ -30,15 +30,11 @@ #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: -#+HTML_HEAD_EXTRA: -#+HTML_HEAD_EXTRA: -#+HTML_HEAD_EXTRA: +#+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: -#+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: -#+INFOJS_OPT: view:info home:https://langue.phundrak.com toc:t # ### MACROS ################################################################### #+MACRO: newline @@latex:\hspace{0pt}\\@@ @@html:
@@ diff --git a/web/index.org b/web/index.org index 0b68dc3..732667c 100644 --- a/web/index.org +++ b/web/index.org @@ -1,6 +1,5 @@ # -*- org-confirm-babel-evaluate: nil -*- #+TITLE: Langues construites de P’undrak -#+INFOJS_OPT: view:showall toc:1 #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: diff --git a/web/style/.sass-cache/56138fd1e36a8566d3251fb8a3699a18f607794c/style.scssc b/web/style/.sass-cache/56138fd1e36a8566d3251fb8a3699a18f607794c/style.scssc new file mode 100644 index 0000000000000000000000000000000000000000..ff8f2feedb5ec8da377bd5bbabd3c75daa0add8c GIT binary patch literal 34856 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 literal 0 HcmV?d00001 diff --git a/web/style/style.css b/web/style/style.css new file mode 100644 index 0000000..29a60aa --- /dev/null +++ b/web/style/style.css @@ -0,0 +1,2 @@ +@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{margin:0;padding:0;font-family:"Noto Sans Runes", "DoulosSIL", "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif}ul{list-style-type:none;margin:0;padding:0}a{color:currentColor;text-decoration:none}.navbar{height:70px;width:100%;background:black;color:white}.navbar-nav{display:flex;align-items:center;justify-content:space-evenly;height:100%}header{padding:1em;background:red;margin-bottom:1em;padding-bottom:3.5em;text-align:center;clip-path:polygon(50% 0%, 100% 0, 100% 65%, 50% 100%, 0 65%, 0 0)}.dropdown{position:absolute;width:500px;opacity:0;z-index:2;background:blue;border-top:2px solid white;border-bottom-right-radius:8px;border-bottom-left-radius:8px;display:flex;align-items:center;justify-content:space-around;height:3rem;margin-top:2rem;padding:0.5rem;box-shadow:rgba(2,8,20,0.1) 0px 0.175em 0.5em;transform:translateX(-40%);transition:opacity .15s ease-out}#theme-dropdown{width:300px;transform:translateX(-60%)}.has-dropdown:focus-within .dropdown{opacity:1;pointer-events:auto}.dropdown-item a{width:100%;height:100%;size:0.7rem;padding-left:10px;font-weight:bold} +/*# sourceMappingURL=style.css.map */ diff --git a/web/style/style.scss b/web/style/style.scss new file mode 100644 index 0000000..3a9daa0 --- /dev/null +++ b/web/style/style.scss @@ -0,0 +1,120 @@ +@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"); +} + +/* Colors ********************************************************************/ +$dark: rgba(52, 73, 94, 1); +$accent1: rgba(66, 191, 221, 1); +$accent2: rgba(92, 172, 126, 1); +$accent3: rgba(197, 193, 155, 1); +$light: rgba(250, 250, 255, 1); +$gradient-top: linear-gradient(0deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-right: linear-gradient(90deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-bottom: linear-gradient(180deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-left: linear-gradient(270deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-top-right: linear-gradient(45deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-bottom-right: linear-gradient(135deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-top-left: linear-gradient(225deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-bottom-left: linear-gradient(315deg, $dark, $accent1, $accent2, $accent3, $light); +$gradient-radial: radial-gradient( $dark, $accent1, $accent2, $accent3, $light); + +body { + margin: 0; + padding: 0; + font-family: "Noto Sans Runes", "DoulosSIL", "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif; +} + +ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +a { + color: currentColor; + text-decoration: none; +} + +.navbar { + height: 70px; + width: 100%; + background: black; + color: white; +} + +.navbar-nav { + display: flex; + align-items: center; + justify-content: space-evenly; + height: 100%; +} + +header { + padding: 1em; + background: red; + margin-bottom: 1em; + padding-bottom: 3.5em; + text-align: center; + clip-path: polygon(50% 0%, 100% 0, 100% 65%, 50% 100%, 0 65%, 0 0); +} + +.dropdown { + position: absolute; + width: 500px; + opacity: 0; + z-index: 2; + background: blue; + border-top: 2px solid white; + + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; + + display: flex; + align-items: center; + justify-content: space-around; + height: 3rem; + margin-top: 2rem; + padding: 0.5rem; + + box-shadow: rgba(2, 8, 20, 0.1) 0px 0.175em 0.5em; + transform: translateX(-40%); + + transition: opacity .15s ease-out; +} + +#theme-dropdown { + width: 300px; + transform: translateX(-60%); +} + +.has-dropdown { + &:focus-within { + .dropdown { + opacity: 1; + pointer-events: auto; + } + } +} + +.dropdown-item { + a { + width: 100%; + height: 100%; + size: 0.7rem; + padding-left: 10px; + font-weight: bold; + } +}