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.
This commit is contained in:
Lucien Cartier-Tilet 2020-04-24 18:14:52 +02:00
parent 79a6001b11
commit 37d735cfdd
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
16 changed files with 337 additions and 1921 deletions

View File

@ -9,6 +9,7 @@ environment:
dependencies:
js: '^0.6.1+1'
html: '^0.14.0+3'
dev_dependencies:
build_runner: ^1.8.0

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
$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;
}

View File

@ -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 */

View File

@ -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 */

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
$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;
}

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
@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;
}
}

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
.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;
}

View File

@ -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);
}

View File

@ -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 <hr> element after the content div
querySelector('#content').appendHtml('<hr>');
// 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);
}

View File

@ -0,0 +1,38 @@
import 'dart:html' show HttpRequest;
import 'package:html/parser.dart' show parse;
// Get the sitemap content
Future<String> getSitemap() async {
const path = 'sitemap.html';
try {
return await HttpRequest.getString(path);
} catch (e) {
print('Couldnt open $path');
}
return 'Error';
}
// This function returns a Map which contains all links to languages detected
// from the sitemap.
Future<Map<String, String>> parseSitemap() async {
var links = <String, String>{};
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('<a')) {
elem = elem.firstChild;
final text = elem.firstChild.text;
final url = elem.attributes['href'];
if (!url.contains('index')) {
links[url] = text;
}
} else {
print('Sitemap folder:\n${elem.innerHtml}');
}
}
});
return links;
}

View File

@ -0,0 +1,174 @@
import 'dart:html';
import './parse_sitemap.dart' show parseSitemap;
// Returns the title of the current webpage
String getPageTitle() {
return querySelector('title').text;
}
class Navbar {
Navbar() {
navbar = Element.ul()..classes.add('navbar-nav');
}
// Inserts the element in a <li class='nav-item'></li>
void addElement(final Element elem, [List<String> 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<Element> makeNavbar() async {
addElement(Element.a()
..attributes['href']
..innerText = 'Accueil');
}
Future<void> 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<Element> 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<Element> 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('''
<li class="nav-item has-dropdown">
<a href="#"><i class="fas fa-sun" id="themeBtn"></i></a>
<ul class="dropdown" id="theme-dropdown">
<li class="dropdown-item"><i class="fas fa-sun"></i> Clair</li>
<li class="dropdown-item"><i class="fas fa-moon"></i> Sombre</li>
</ul>
</li>'''));
// Navbar content added to navbar
final navbar = Element.nav()
..classes.add('navbar')
..append(navbar_content);
return navbar;
}
Element addIcon(Element navbar, List<String> 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<void> wrapTables() async {
for (var table in querySelectorAll('table')) {
var largetable = DivElement()..className = 'largetable';
table.before(largetable);
largetable.children.add(table);
}
}
Future<void> makeHeader() async {
querySelector('body')
.insertAdjacentElement('afterBegin', Element.tag('header'));
querySelector('header').append(querySelector('h1'));
querySelector('header').append(querySelector('.subtitle'));
}
Future<void> reorganizeHtml() async {
await makeHeader();
await wrapTables();
await makeNavbar().then((navbar) {
querySelector('body').insertAdjacentElement('afterBegin', navbar);
});
querySelector('body')
..classes.add('light')
// Add a <hr> element after the content div
..appendHtml('<hr>')
// Move the postamble in the content div
..append(querySelector('#postamble'));
}

View File

@ -30,15 +30,11 @@
#+HTML_HEAD_EXTRA: <meta name="twitter:card" content="summary" />
#+HTML_HEAD_EXTRA: <meta name="twitter:site" content="@phundrak" />
#+HTML_HEAD_EXTRA: <meta name="twitter:creator" content="@phundrak" />
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="./css/main.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="./css/htmlize.min.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" id="theme" href="./css/dark.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="./style/style.css"/>
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/mahakala-128x128.png" type="img/png" media="screen" />
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/favicon.ico" type="image/x-icon" media="screen" />
#+HTML_HEAD_EXTRA: <script defer src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
#+HTML_HEAD_EXTRA: <script defer src="dart/main.dart.js"></script>
#+HTML_HEAD_EXTRA: <script defer src="https://kit.fontawesome.com/4d42d0c8c5.js"></script>
#+INFOJS_OPT: view:info home:https://langue.phundrak.com toc:t
# ### MACROS ###################################################################
#+MACRO: newline @@latex:\hspace{0pt}\\@@ @@html:<br>@@

View File

@ -1,6 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Langues construites de Pundrak
#+INFOJS_OPT: view:showall toc:1
#+HTML_HEAD: <meta name="description" content="Collection de documents et pages webs de linguistique et de langues construites de Pundrak" />
#+HTML_HEAD: <meta property="og:title" content="Langues construites de Pundrak" />
#+HTML_HEAD: <meta property="og:description" content="Collection de documents et pages webs de linguistique et de langues construites de Pundrak" />

2
web/style/style.css Normal file
View File

@ -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 */

120
web/style/style.scss Normal file
View File

@ -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;
}
}