From 7a8fc36ec0fbd8d56afd10a13b9630bc5ac3b03f Mon Sep 17 00:00:00 2001 From: vlw Date: Wed, 5 Mar 2025 11:16:54 +0000 Subject: [PATCH] feat: new website design and update to Vegvisir 3.1 (#2) Brand new design for the website following the new design language I used for [version 2.0 of my personal website](https://codeberg.org/vlw/vlw.se/releases/tag/2.0.0). Reviewed-on: https://codeberg.org/vegvisir/website/pulls/2 Co-authored-by: vlw Co-committed-by: vlw --- .gitignore | 1 + .gitmodules | 3 + Consts.php | 8 + README.md | 15 +- modules/docs/contribute.php | 12 - modules/docs/contribute/style.css | 29 -- modules/docs/legend-js.php | 24 -- modules/docs/legend-php.php | 12 - modules/snippet/Snippet.php | 33 -- modules/snippet/snippet.js | 19 - .../EVENTS/description-additional.js | 3 - .../API/JS/Navigation/EVENTS/description.js | 4 - .../API/JS/Navigation/EVENTS/example-0-0.js | 3 - .../API/JS/Navigation/MODE/description.js | 4 - .../API/JS/Navigation/POSITION/description.js | 6 - .../API/JS/Navigation/TARGET/description.js | 6 - .../API/JS/Navigation/TARGET/example-0-0.php | 1 - .../API/JS/Navigation/TARGET/example-0-1.php | 4 - .../API/JS/Navigation/abort/description.js | 1 - .../JS/Navigation/bindElements/description.js | 1 - .../JS/Navigation/bindElements/example-0-0.js | 5 - .../JS/Navigation/constructor/description.js | 4 - .../JS/Navigation/constructor/example-0-0.js | 2 - .../JS/Navigation/constructor/example-0-1.js | 2 - .../JS/Navigation/constructor/example-0-2.js | 6 - .../docs/API/JS/Navigation/navigate/0.js | 4 - .../docs/API/JS/Navigation/navigate/1.js | 5 - .../docs/API/JS/Navigation/navigate/2.js | 8 - .../API/JS/Navigation/navigate/description.js | 5 - .../API/JS/Navigation/navigate/example-0-0.js | 6 - .../API/JS/Navigation/options/description.js | 3 - .../snippets/docs/API/PHP/VV/css/0.php | 4 - .../snippets/docs/API/PHP/VV/css/1.php | 1 - .../snippets/docs/API/PHP/VV/css/2.php | 1 - .../docs/API/PHP/VV/css/description.php | 4 - .../docs/API/PHP/VV/css/example-1-0.css | 6 - .../docs/API/PHP/VV/css/example-1-1.php | 4 - .../snippets/docs/API/PHP/VV/embed/0.php | 4 - .../snippets/docs/API/PHP/VV/embed/1.php | 1 - .../snippets/docs/API/PHP/VV/embed/2.php | 1 - .../docs/API/PHP/VV/embed/description.php | 4 - .../docs/API/PHP/VV/embed/example-1-0.php | 3 - .../docs/API/PHP/VV/embed/example-1-1.php | 5 - .../snippets/docs/API/PHP/VV/include/0.php | 4 - .../snippets/docs/API/PHP/VV/include/1.php | 1 - .../snippets/docs/API/PHP/VV/include/2.php | 1 - .../docs/API/PHP/VV/include/description.php | 4 - .../docs/API/PHP/VV/include/example-1-0.php | 5 - .../docs/API/PHP/VV/include/example-1-1.php | 6 - .../snippet/snippets/docs/API/PHP/VV/js/0.php | 4 - .../snippet/snippets/docs/API/PHP/VV/js/1.php | 1 - .../snippet/snippets/docs/API/PHP/VV/js/2.php | 1 - .../docs/API/PHP/VV/js/description.php | 4 - .../docs/API/PHP/VV/js/example-1-0.js | 5 - .../docs/API/PHP/VV/js/example-1-1.php | 4 - .../snippets/docs/API/PHP/VV/root/0.php | 1 - .../snippets/docs/API/PHP/VV/root/1.txt | 1 - .../snippets/docs/API/PHP/VV/root/2.php | 9 - .../snippets/docs/API/PHP/VV/root/3.php | 11 - .../docs/API/PHP/VV/root/description.php | 3 - .../snippets/docs/API/PHP/VV/shell/0.php | 1 - .../docs/API/PHP/VV/shell/description.php | 3 - .../docs/API/PHP/VV/shell/example-0-0.php | 4 - .../docs/API/PHP/VV/shell/example-0-1.php | 5 - .../snippet/snippets/docs/installation/0.txt | 1 - .../snippet/snippets/docs/installation/1.txt | 1 - .../snippet/snippets/docs/installation/2.txt | 16 - .../snippet/snippets/docs/installation/3.txt | 1 - .../snippet/snippets/docs/installation/4.txt | 1 - .../snippet/snippets/docs/installation/5.txt | 10 - public/assets/css/document.css | 267 ------------ public/assets/css/fonts.css | 8 + public/assets/css/pages/demos.css | 26 -- public/assets/css/pages/docs/aside.css | 22 + public/assets/css/pages/docs/header.css | 86 ++++ public/assets/css/pages/docs/layout.css | 89 ++++ public/assets/css/pages/error.css | 4 + public/assets/css/pages/examples.css | 56 +++ public/assets/css/pages/features.css | 32 ++ public/assets/css/pages/index.css | 188 ++------- public/assets/css/pages/why.css | 15 - public/assets/css/shell.css | 384 ++++++++++++++++++ public/assets/css/shells/docs.css | 274 ------------- .../css/snippets/HTMLCodeDemoElement.css | 113 ++++++ .../css/snippets/HTMLNavMenuElement.css | 61 +++ public/assets/css/snippets/split.css | 71 ++++ public/assets/css/syntax.css | 27 ++ public/assets/fonts/roboto-mono.woff2 | Bin 0 -> 103796 bytes public/assets/js/CustomElement.mjs | 45 ++ public/assets/js/pages/docs/layout.js | 9 + public/assets/js/shell.js | 9 + public/assets/js/shells/docs.js | 9 - public/assets/js/shells/document.js | 9 - .../js/snippets/HTMLCodeDemoElement.mjs | 40 ++ .../assets/js/snippets/HTMLNavMenuElement.mjs | 36 ++ public/assets/media/arrow.svg | 1 + public/assets/media/compass-points.svg | 1 + public/assets/media/compass.svg | 1 + public/assets/media/icons/chevron.svg | 1 + public/assets/media/icons/hamburger.svg | 1 + public/assets/media/icons/languages/css.svg | 1 + public/assets/media/icons/languages/html.svg | 1 + public/assets/media/icons/languages/js.svg | 1 + public/assets/media/icons/languages/php.svg | 1 + public/assets/media/icons/languages/txt.svg | 1 + public/assets/media/img/genemate-se.avif | Bin 0 -> 11425 bytes public/assets/media/img/icellate-com.avif | Bin 0 -> 8392 bytes public/assets/media/img/vegvisir-website.avif | Bin 0 -> 12204 bytes public/assets/media/img/vlw-se.avif | Bin 0 -> 5883 bytes public/assets/media/logo.svg | 2 +- public/assets/media/spinner.gif | Bin 0 -> 1806 bytes public/demos.php | 18 - public/docs/API/JS/Navigation/EVENTS.php | 75 ---- public/docs/API/JS/Navigation/MODE.php | 51 --- public/docs/API/JS/Navigation/POSITION.php | 65 --- public/docs/API/JS/Navigation/TARGET.php | 77 ---- public/docs/API/JS/Navigation/abort.php | 33 -- .../docs/API/JS/Navigation/bindElements.php | 35 -- public/docs/API/JS/Navigation/constructor.php | 69 ---- public/docs/API/JS/Navigation/index.php | 13 - public/docs/API/JS/Navigation/navigate.php | 92 ----- public/docs/API/JS/Navigation/options.php | 64 --- public/docs/API/JS/index.php | 14 - public/docs/API/PHP/VV/css.php | 82 ---- public/docs/API/PHP/VV/embed.php | 71 ---- public/docs/API/PHP/VV/include.php | 77 ---- public/docs/API/PHP/VV/index.php | 15 - public/docs/API/PHP/VV/js.php | 82 ---- public/docs/API/PHP/VV/root.php | 76 ---- public/docs/API/PHP/VV/shell.php | 74 ---- public/docs/API/PHP/index.php | 26 -- public/docs/API/index.php | 1 - public/docs/Reference/Env.php | 7 + public/docs/Reference/JavaScript/EVENTS.php | 7 + public/docs/Reference/JavaScript/MODE.php | 7 + public/docs/Reference/JavaScript/POSITION.php | 7 + public/docs/Reference/JavaScript/TARGET.php | 7 + public/docs/Reference/JavaScript/abort.php | 7 + .../Reference/JavaScript/bindElements.php | 7 + .../docs/Reference/JavaScript/constructor.php | 7 + public/docs/Reference/JavaScript/index.php | 7 + public/docs/Reference/JavaScript/navigate.php | 7 + public/docs/Reference/JavaScript/options.php | 7 + public/docs/Reference/PHP/VV/css.php | 7 + public/docs/Reference/PHP/VV/embed.php | 7 + public/docs/Reference/PHP/VV/include.php | 7 + public/docs/Reference/PHP/VV/init.php | 7 + public/docs/Reference/PHP/VV/js.php | 7 + public/docs/Reference/PHP/index.php | 7 + public/docs/Reference/index.php | 7 + public/docs/Reference/vv-attributes.php | 7 + public/docs/get-started.php | 7 + public/docs/header.php | 21 + public/docs/index.php | 22 +- public/docs/installation.php | 92 +---- public/docs/v3.1.4/Reference/Env.php | 47 +++ .../v3.1.4/Reference/JavaScript/EVENTS.php | 30 ++ .../docs/v3.1.4/Reference/JavaScript/MODE.php | 29 ++ .../v3.1.4/Reference/JavaScript/POSITION.php | 39 ++ .../v3.1.4/Reference/JavaScript/TARGET.php | 41 ++ .../v3.1.4/Reference/JavaScript/abort.php | 29 ++ .../Reference/JavaScript/bindElements.php | 22 + .../Reference/JavaScript/constructor.php | 24 ++ .../v3.1.4/Reference/JavaScript/index.php | 10 + .../v3.1.4/Reference/JavaScript/navigate.php | 55 +++ .../v3.1.4/Reference/JavaScript/options.php | 55 +++ public/docs/v3.1.4/Reference/PHP/VV/css.php | 52 +++ public/docs/v3.1.4/Reference/PHP/VV/embed.php | 52 +++ .../docs/v3.1.4/Reference/PHP/VV/include.php | 51 +++ public/docs/v3.1.4/Reference/PHP/VV/index.php | 6 + public/docs/v3.1.4/Reference/PHP/VV/init.php | 35 ++ public/docs/v3.1.4/Reference/PHP/VV/js.php | 52 +++ public/docs/v3.1.4/Reference/PHP/VV/root.php | 36 ++ public/docs/v3.1.4/Reference/PHP/index.php | 10 + public/docs/v3.1.4/Reference/aside.php | 89 ++++ public/docs/v3.1.4/Reference/index.php | 15 + public/docs/v3.1.4/Reference/layout.php | 4 + .../docs/v3.1.4/Reference/vv-attributes.php | 42 ++ public/docs/v3.1.4/aside.php | 33 ++ public/docs/v3.1.4/get-started.php | 43 ++ public/docs/v3.1.4/index.php | 19 + public/docs/v3.1.4/installation.php | 86 ++++ public/docs/v3.1.4/layout.php | 4 + public/error.php | 3 + public/examples.php | 47 +++ public/features.php | 55 +++ public/index.php | 112 ++--- public/robots.txt | 2 + public/shell.php | 124 ++++++ shells/docs.php | 24 -- shells/document.php | 83 ---- .../HTMLCodeDemoElement.php | 80 ++++ .../v3.1.4/JS/abort/description/syntax.js.php | 1 + .../JS/abort/example_abort/example.js.php | 1 + .../JS/bindElements/description/syntax.js.php | 1 + .../bindElements/example_bind/example.js.php | 1 + .../JS/constructor/description/syntax.js.php | 1 + .../JS/events/description/syntax.js.php | 1 + .../v3.1.4/JS/mode/description/syntax.js.php | 1 + .../JS/navigate/description/syntax.js.php | 1 + .../example_element_navigate/example.js.php | 1 + .../example_shell_navigate/example.js.php | 1 + .../JS/options/description/syntax.js.php | 1 + .../JS/position/description/syntax.js.php | 1 + .../JS/target/description/syntax.js.php | 1 + .../PHP/VV/css/description/syntax.php.php | 1 + .../PHP/VV/css/example_import/index.php.php | 1 + .../PHP/VV/embed/description/syntax.php.php | 1 + .../VV/embed/example_import/compiled.html.php | 1 + .../PHP/VV/embed/example_import/icon.svg.php | 1 + .../PHP/VV/embed/example_import/index.php.php | 1 + .../PHP/VV/include/description/syntax.php.php | 1 + .../VV/include/example_import/banner.php.php | 1 + .../include/example_import/compiled.html.php | 1 + .../VV/include/example_import/index.php.php | 1 + .../PHP/VV/init/description/syntax.php.php | 1 + .../VV/init/example_init/compiled.html.php | 1 + .../PHP/VV/init/example_init/index.php.php | 1 + .../PHP/VV/init/example_init/shell.php.php | 1 + .../PHP/VV/js/description/syntax.php.php | 1 + .../PHP/VV/js/example_import/index.php.php | 1 + .../PHP/VV/root/description/syntax.php.php | 1 + .../PHP/VV/root/example_import/index.php.php | 1 + .../v3.1.4/get-started/nginx/nginx.conf.php | 1 + .../run_install_script/shell.sh.php | 1 + .../introduction_version/example.txt.php | 1 + .../features/vv-include/shell.php.php | 1 + .../features/vv-nav/shell.php.php | 1 + .../index_assets/compiled.html.php | 1 + .../index_assets/demo.css.php | 1 + .../index_assets/demo.js.php | 1 + .../index_assets/demo.php.php | 1 + .../index_softnav/fs-tree.txt.php | 1 + .../index_softnav/index.php.php | 1 + .../HTMLNavMenuElement/HTMLNavMenuElement.php | 57 +++ vegvisir | 1 + 236 files changed, 2822 insertions(+), 2480 deletions(-) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 Consts.php delete mode 100644 modules/docs/contribute.php delete mode 100644 modules/docs/contribute/style.css delete mode 100644 modules/docs/legend-js.php delete mode 100644 modules/docs/legend-php.php delete mode 100644 modules/snippet/Snippet.php delete mode 100644 modules/snippet/snippet.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description-additional.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/example-0-0.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/MODE/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/POSITION/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/TARGET/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-0.php delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-1.php delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/abort/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/bindElements/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/bindElements/example-0-0.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/constructor/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-0.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-1.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-2.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/navigate/0.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/navigate/1.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/navigate/2.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/navigate/description.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/navigate/example-0-0.js delete mode 100644 modules/snippet/snippets/docs/API/JS/Navigation/options/description.js delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/2.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/example-1-0.css delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/css/example-1-1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/2.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/2.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/example-1-0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/include/example-1-1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/2.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/example-1-0.js delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/js/example-1-1.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/root/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/root/1.txt delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/root/2.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/root/3.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/root/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/shell/0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/shell/description.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-0.php delete mode 100644 modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-1.php delete mode 100644 modules/snippet/snippets/docs/installation/0.txt delete mode 100644 modules/snippet/snippets/docs/installation/1.txt delete mode 100644 modules/snippet/snippets/docs/installation/2.txt delete mode 100644 modules/snippet/snippets/docs/installation/3.txt delete mode 100644 modules/snippet/snippets/docs/installation/4.txt delete mode 100644 modules/snippet/snippets/docs/installation/5.txt delete mode 100644 public/assets/css/document.css create mode 100644 public/assets/css/fonts.css delete mode 100644 public/assets/css/pages/demos.css create mode 100644 public/assets/css/pages/docs/aside.css create mode 100644 public/assets/css/pages/docs/header.css create mode 100644 public/assets/css/pages/docs/layout.css create mode 100644 public/assets/css/pages/error.css create mode 100644 public/assets/css/pages/examples.css create mode 100644 public/assets/css/pages/features.css delete mode 100644 public/assets/css/pages/why.css create mode 100644 public/assets/css/shell.css delete mode 100644 public/assets/css/shells/docs.css create mode 100644 public/assets/css/snippets/HTMLCodeDemoElement.css create mode 100644 public/assets/css/snippets/HTMLNavMenuElement.css create mode 100644 public/assets/css/snippets/split.css create mode 100644 public/assets/css/syntax.css create mode 100644 public/assets/fonts/roboto-mono.woff2 create mode 100644 public/assets/js/CustomElement.mjs create mode 100644 public/assets/js/pages/docs/layout.js create mode 100644 public/assets/js/shell.js delete mode 100644 public/assets/js/shells/docs.js delete mode 100644 public/assets/js/shells/document.js create mode 100644 public/assets/js/snippets/HTMLCodeDemoElement.mjs create mode 100644 public/assets/js/snippets/HTMLNavMenuElement.mjs create mode 100644 public/assets/media/arrow.svg create mode 100644 public/assets/media/compass-points.svg create mode 100644 public/assets/media/compass.svg create mode 100644 public/assets/media/icons/chevron.svg create mode 100644 public/assets/media/icons/hamburger.svg create mode 100644 public/assets/media/icons/languages/css.svg create mode 100644 public/assets/media/icons/languages/html.svg create mode 100644 public/assets/media/icons/languages/js.svg create mode 100644 public/assets/media/icons/languages/php.svg create mode 100644 public/assets/media/icons/languages/txt.svg create mode 100644 public/assets/media/img/genemate-se.avif create mode 100644 public/assets/media/img/icellate-com.avif create mode 100644 public/assets/media/img/vegvisir-website.avif create mode 100644 public/assets/media/img/vlw-se.avif create mode 100644 public/assets/media/spinner.gif delete mode 100644 public/demos.php delete mode 100644 public/docs/API/JS/Navigation/EVENTS.php delete mode 100644 public/docs/API/JS/Navigation/MODE.php delete mode 100644 public/docs/API/JS/Navigation/POSITION.php delete mode 100644 public/docs/API/JS/Navigation/TARGET.php delete mode 100644 public/docs/API/JS/Navigation/abort.php delete mode 100644 public/docs/API/JS/Navigation/bindElements.php delete mode 100644 public/docs/API/JS/Navigation/constructor.php delete mode 100644 public/docs/API/JS/Navigation/index.php delete mode 100644 public/docs/API/JS/Navigation/navigate.php delete mode 100644 public/docs/API/JS/Navigation/options.php delete mode 100644 public/docs/API/JS/index.php delete mode 100644 public/docs/API/PHP/VV/css.php delete mode 100644 public/docs/API/PHP/VV/embed.php delete mode 100644 public/docs/API/PHP/VV/include.php delete mode 100644 public/docs/API/PHP/VV/index.php delete mode 100644 public/docs/API/PHP/VV/js.php delete mode 100644 public/docs/API/PHP/VV/root.php delete mode 100644 public/docs/API/PHP/VV/shell.php delete mode 100644 public/docs/API/PHP/index.php delete mode 100644 public/docs/API/index.php create mode 100644 public/docs/Reference/Env.php create mode 100644 public/docs/Reference/JavaScript/EVENTS.php create mode 100644 public/docs/Reference/JavaScript/MODE.php create mode 100644 public/docs/Reference/JavaScript/POSITION.php create mode 100644 public/docs/Reference/JavaScript/TARGET.php create mode 100644 public/docs/Reference/JavaScript/abort.php create mode 100644 public/docs/Reference/JavaScript/bindElements.php create mode 100644 public/docs/Reference/JavaScript/constructor.php create mode 100644 public/docs/Reference/JavaScript/index.php create mode 100644 public/docs/Reference/JavaScript/navigate.php create mode 100644 public/docs/Reference/JavaScript/options.php create mode 100644 public/docs/Reference/PHP/VV/css.php create mode 100644 public/docs/Reference/PHP/VV/embed.php create mode 100644 public/docs/Reference/PHP/VV/include.php create mode 100644 public/docs/Reference/PHP/VV/init.php create mode 100644 public/docs/Reference/PHP/VV/js.php create mode 100644 public/docs/Reference/PHP/index.php create mode 100644 public/docs/Reference/index.php create mode 100644 public/docs/Reference/vv-attributes.php create mode 100644 public/docs/get-started.php create mode 100644 public/docs/header.php create mode 100644 public/docs/v3.1.4/Reference/Env.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/EVENTS.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/MODE.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/POSITION.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/TARGET.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/abort.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/bindElements.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/constructor.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/index.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/navigate.php create mode 100644 public/docs/v3.1.4/Reference/JavaScript/options.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/css.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/embed.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/include.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/index.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/init.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/js.php create mode 100644 public/docs/v3.1.4/Reference/PHP/VV/root.php create mode 100644 public/docs/v3.1.4/Reference/PHP/index.php create mode 100644 public/docs/v3.1.4/Reference/aside.php create mode 100644 public/docs/v3.1.4/Reference/index.php create mode 100644 public/docs/v3.1.4/Reference/layout.php create mode 100644 public/docs/v3.1.4/Reference/vv-attributes.php create mode 100644 public/docs/v3.1.4/aside.php create mode 100644 public/docs/v3.1.4/get-started.php create mode 100644 public/docs/v3.1.4/index.php create mode 100644 public/docs/v3.1.4/installation.php create mode 100644 public/docs/v3.1.4/layout.php create mode 100644 public/error.php create mode 100644 public/examples.php create mode 100644 public/features.php create mode 100644 public/robots.txt create mode 100644 public/shell.php delete mode 100644 shells/docs.php delete mode 100644 shells/document.php create mode 100644 snippets/HTMLCodeDemoElement/HTMLCodeDemoElement.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/abort/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/abort/example_abort/example.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/bindElements/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/bindElements/example_bind/example.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/constructor/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/events/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/mode/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/navigate/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/navigate/example_element_navigate/example.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/navigate/example_shell_navigate/example.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/options/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/position/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/JS/target/description/syntax.js.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/css/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/css/example_import/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/embed/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/embed/example_import/compiled.html.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/embed/example_import/icon.svg.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/embed/example_import/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/include/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/include/example_import/banner.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/include/example_import/compiled.html.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/include/example_import/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/init/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/init/example_init/compiled.html.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/init/example_init/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/init/example_init/shell.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/js/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/js/example_import/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/root/description/syntax.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/PHP/VV/root/example_import/index.php.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/get-started/nginx/nginx.conf.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/get-started/run_install_script/shell.sh.php create mode 100644 snippets/HTMLCodeDemoElement/docs/v3.1.4/introduction_version/example.txt.php create mode 100644 snippets/HTMLCodeDemoElement/features/vv-include/shell.php.php create mode 100644 snippets/HTMLCodeDemoElement/features/vv-nav/shell.php.php create mode 100644 snippets/HTMLCodeDemoElement/index_assets/compiled.html.php create mode 100644 snippets/HTMLCodeDemoElement/index_assets/demo.css.php create mode 100644 snippets/HTMLCodeDemoElement/index_assets/demo.js.php create mode 100644 snippets/HTMLCodeDemoElement/index_assets/demo.php.php create mode 100644 snippets/HTMLCodeDemoElement/index_softnav/fs-tree.txt.php create mode 100644 snippets/HTMLCodeDemoElement/index_softnav/index.php.php create mode 100644 snippets/HTMLNavMenuElement/HTMLNavMenuElement.php create mode 160000 vegvisir diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d16b98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +vegvisir \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3b5234f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vegvisir"] + path = vegvisir + url = https://codeberg.org/vegvisir/vegvisir diff --git a/Consts.php b/Consts.php new file mode 100644 index 0000000..c17bc35 --- /dev/null +++ b/Consts.php @@ -0,0 +1,8 @@ + -
- -

Contribute? 💕

-

Have you found a problem om this page? Would you like to help make this little project a bit better?

- -
-
\ No newline at end of file diff --git a/modules/docs/contribute/style.css b/modules/docs/contribute/style.css deleted file mode 100644 index 39b6f6b..0000000 --- a/modules/docs/contribute/style.css +++ /dev/null @@ -1,29 +0,0 @@ -section.contribute { - grid-area: contribute; - width: 100%; - background-color: rgba(var(--primer-color-deep), .1); -} - -section.contribute container { - justify-content: center; - flex-direction: column; -} - -section.contribute ul { - display: flex; - padding: var(--padding); - list-style: none; - gap: var(--padding); -} - -/* # Size queries */ - -@media (max-width: 950px) { - section.contribute ul { - flex-direction: column; - } - - section.contribute button { - width: 100%; - } -} \ No newline at end of file diff --git a/modules/docs/legend-js.php b/modules/docs/legend-js.php deleted file mode 100644 index 88e935f..0000000 --- a/modules/docs/legend-js.php +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/modules/docs/legend-php.php b/modules/docs/legend-php.php deleted file mode 100644 index 819d38b..0000000 --- a/modules/docs/legend-php.php +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/Snippet.php b/modules/snippet/Snippet.php deleted file mode 100644 index e3785b8..0000000 --- a/modules/snippet/Snippet.php +++ /dev/null @@ -1,33 +0,0 @@ -value); - - // Bail out if snippet can't be found - if (!is_file($path)) { - return "
!REF#
"; - } - - // Use enum name in lowercase as highlight.js lanuage definer - $output = "
";
-				$output .= htmlspecialchars(file_get_contents($path));
-				$output .= "
"; - - return $output; - } - } - -?> - - \ No newline at end of file diff --git a/modules/snippet/snippet.js b/modules/snippet/snippet.js deleted file mode 100644 index 0eefd2a..0000000 --- a/modules/snippet/snippet.js +++ /dev/null @@ -1,19 +0,0 @@ -import hljs from "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/es/highlight.min.js"; - -import php from "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/es/languages/php.min.js"; -import css from "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/es/languages/css.min.js"; -import plaintext from "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/es/languages/plaintext.min.js"; -import javascript from "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/es/languages/javascript.min.js"; - -hljs.registerLanguage("php", php); -hljs.registerLanguage("css", css); -hljs.registerLanguage("plaintext", plaintext); -hljs.registerLanguage("javascript", javascript); - -// Initialize syntax highlighting for all code snippets on this page -const highlightElements = () => { - [...document.querySelectorAll("pre code")].forEach(element => hljs.highlightElement(element)); -} - -document.querySelector("[vv-shell-id='6ccb0465']").addEventListener(vegvisir.Navigation.EVENTS.FINISHED, () => highlightElements); -highlightElements(); diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description-additional.js b/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description-additional.js deleted file mode 100644 index 106a2c7..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description-additional.js +++ /dev/null @@ -1,3 +0,0 @@ -{ - target: HTMLElement -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description.js deleted file mode 100644 index b3ebdcd..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/description.js +++ /dev/null @@ -1,4 +0,0 @@ -static Navigation.EVENTS = { - STARTED: "navstarted", - FINISHED: "navfinished" -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/example-0-0.js b/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/example-0-0.js deleted file mode 100644 index e58f8c6..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/EVENTS/example-0-0.js +++ /dev/null @@ -1,3 +0,0 @@ -document.addEventListener(vegvisir.Navigation.EVENTS.STARTED, (event) => { - console.log(event.detail.target); -}); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/MODE/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/MODE/description.js deleted file mode 100644 index 06714d6..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/MODE/description.js +++ /dev/null @@ -1,4 +0,0 @@ -static Navigation.MODE = { - REPLACE: "replace", - INSERT: "insert" -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/POSITION/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/POSITION/description.js deleted file mode 100644 index 45bba4a..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/POSITION/description.js +++ /dev/null @@ -1,6 +0,0 @@ -static Navigation.POSITION = { - AFTEREND: "afterend", - BEFOREEND: "beforeend", - AFTERBEGIN: "afterbegin", - BEFOREBEGIN: "beforebegin" -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/description.js deleted file mode 100644 index 3cbd36c..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/description.js +++ /dev/null @@ -1,6 +0,0 @@ -static Navigation.TARGET = { - TOP: "_top", - SELF: "_self", - BLANK: "_blank", - PARENT: "_parent" -}; \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-0.php b/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-0.php deleted file mode 100644 index 3f1b1de..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-0.php +++ /dev/null @@ -1 +0,0 @@ -Click here to replace this button with the contents of /some-page \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-1.php b/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-1.php deleted file mode 100644 index 6d9658f..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/TARGET/example-0-1.php +++ /dev/null @@ -1,4 +0,0 @@ -
-

...

- Click here to replace this button and its siblings with /some-page - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/abort/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/abort/description.js deleted file mode 100644 index 08afca9..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/abort/description.js +++ /dev/null @@ -1 +0,0 @@ -Navigation.abort: AbortController \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/description.js deleted file mode 100644 index e02da3b..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/description.js +++ /dev/null @@ -1 +0,0 @@ -static Navigation.bindElements(): void \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/example-0-0.js b/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/example-0-0.js deleted file mode 100644 index e31c81f..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/bindElements/example-0-0.js +++ /dev/null @@ -1,5 +0,0 @@ -// The programatically appended anchor tag will not have Vegvisir event listeners on it yet -document.body.appendChild(document.createElement("a")); - -// It will have Vegvisir event listeners after this method is called -vegvisir.Navigation.bindElements(); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/constructor/description.js deleted file mode 100644 index b42d7a7..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/description.js +++ /dev/null @@ -1,4 +0,0 @@ -new globalThis.vegvisir.Navigation( - URL|String url = window.location, - Object options = vegvisir.Navigation.options -): Navigation \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-0.js b/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-0.js deleted file mode 100644 index 6494008..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-0.js +++ /dev/null @@ -1,2 +0,0 @@ -// Pathname string with leading slash -const nav = new vegvisir.Navigation("/some-page"); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-1.js b/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-1.js deleted file mode 100644 index 7e8d07a..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-1.js +++ /dev/null @@ -1,2 +0,0 @@ -// Pathname string without leading slash and a search parameter -const nav = new vegvisir.Navigation("some-page?foo=bar"); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-2.js b/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-2.js deleted file mode 100644 index a45cada..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/constructor/example-0-2.js +++ /dev/null @@ -1,6 +0,0 @@ -// URL object with a pathname and search parameter -const url = new URL(window.location); -url.pathname = "/some-page"; -url.searchParams.set("foo", "bar"); - -const nav = new vegvisir.Navigation(url); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/0.js b/modules/snippet/snippets/docs/API/JS/Navigation/navigate/0.js deleted file mode 100644 index 02e89ef..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/0.js +++ /dev/null @@ -1,4 +0,0 @@ -const nav = new vegvisir.Navigation("/some-page"); - -// Will navigate the top shell to /some-page -nav.navigate(); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/1.js b/modules/snippet/snippets/docs/API/JS/Navigation/navigate/1.js deleted file mode 100644 index 970bf78..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/1.js +++ /dev/null @@ -1,5 +0,0 @@ -const target = document.querySelector("#target"); -const nav = new vegvisir.Navigation("/some-page"); - -// Will replace the contents of an element with id #target with the contents of /some-page -nav.navigate(target); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/2.js b/modules/snippet/snippets/docs/API/JS/Navigation/navigate/2.js deleted file mode 100644 index 1ce57bd..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/2.js +++ /dev/null @@ -1,8 +0,0 @@ -const target = document.querySelector("#target"); -const nav = new vegvisir.Navigation("/some-page"); - -// Will place the contents of /some-page after the target element as a sibling -nav.navigate(target, vegvisir.Navigation.POSITION.AFTEREND); - -// Tip: You can also pass an insertAdjacentElement position string directly -nav.navigate(target, "afterend"); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/navigate/description.js deleted file mode 100644 index 1714708..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/description.js +++ /dev/null @@ -1,5 +0,0 @@ -Navigation.navigate( - target: HTMLELement = Navigation.#rootShellElement - position: Navigation.POSITION = Navigation.POSITION.BEFOREEND, - mode: Navigation.MODE = Navigation.MODE.REPLACE -): void \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/example-0-0.js b/modules/snippet/snippets/docs/API/JS/Navigation/navigate/example-0-0.js deleted file mode 100644 index 54c9df6..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/navigate/example-0-0.js +++ /dev/null @@ -1,6 +0,0 @@ -const target = document.querySelector("#update-this-element"); -const button = document.querySelector("#click-me-to-refresh"); - -const nav = new vegvisir.Navigation("/page-with-new-content"); - -button.addEventListener("click", () => nav.navigate(target)); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/JS/Navigation/options/description.js b/modules/snippet/snippets/docs/API/JS/Navigation/options/description.js deleted file mode 100644 index c2bc5aa..0000000 --- a/modules/snippet/snippets/docs/API/JS/Navigation/options/description.js +++ /dev/null @@ -1,3 +0,0 @@ -{ - pushHistory: boolean -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/0.php b/modules/snippet/snippets/docs/API/PHP/VV/css/0.php deleted file mode 100644 index ebb4007..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/0.php +++ /dev/null @@ -1,4 +0,0 @@ - - -// Without file extension (appended automatically) - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/1.php b/modules/snippet/snippets/docs/API/PHP/VV/css/1.php deleted file mode 100644 index 0c6476c..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/1.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/2.php b/modules/snippet/snippets/docs/API/PHP/VV/css/2.php deleted file mode 100644 index 77d81a2..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/2.php +++ /dev/null @@ -1 +0,0 @@ -"const hello = ()=>console.log('Hello world');hello()" \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/description.php b/modules/snippet/snippets/docs/API/PHP/VV/css/description.php deleted file mode 100644 index 3251b2c..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/description.php +++ /dev/null @@ -1,4 +0,0 @@ -VV::css( - string $pathname, - bool $relative = true -): string \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-0.css b/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-0.css deleted file mode 100644 index 0d2c803..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-0.css +++ /dev/null @@ -1,6 +0,0 @@ -/* File: /var/www/my-website/public/assets/css/style.css */ - -p { - color: blue; - background-color: red; -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-1.php b/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-1.php deleted file mode 100644 index dfb160d..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/css/example-1-1.php +++ /dev/null @@ -1,4 +0,0 @@ -// File: /var/www/my-website/public/index.php - - -

Some content...

\ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/0.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/0.php deleted file mode 100644 index ebb4007..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/0.php +++ /dev/null @@ -1,4 +0,0 @@ - - -// Without file extension (appended automatically) - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/1.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/1.php deleted file mode 100644 index 0c6476c..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/1.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/2.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/2.php deleted file mode 100644 index 77d81a2..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/2.php +++ /dev/null @@ -1 +0,0 @@ -"const hello = ()=>console.log('Hello world');hello()" \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/description.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/description.php deleted file mode 100644 index 70b5401..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/description.php +++ /dev/null @@ -1,4 +0,0 @@ -VV::embed( - string $pathname, - bool $relative = true -): string \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-0.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-0.php deleted file mode 100644 index c1826be..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-0.php +++ /dev/null @@ -1,3 +0,0 @@ -/* File: /var/www/my-website/public/assets/media/logo.svg */ - -... \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-1.php b/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-1.php deleted file mode 100644 index 5c07fee..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/embed/example-1-1.php +++ /dev/null @@ -1,5 +0,0 @@ -// File: /var/www/my-website/shells/document.php - -
- -
\ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/0.php b/modules/snippet/snippets/docs/API/PHP/VV/include/0.php deleted file mode 100644 index a6f6f0e..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/0.php +++ /dev/null @@ -1,4 +0,0 @@ - - -// Without file extension (appended automatically) - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/1.php b/modules/snippet/snippets/docs/API/PHP/VV/include/1.php deleted file mode 100644 index c5ca0f1..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/1.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/2.php b/modules/snippet/snippets/docs/API/PHP/VV/include/2.php deleted file mode 100644 index 77d81a2..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/2.php +++ /dev/null @@ -1 +0,0 @@ -"const hello = ()=>console.log('Hello world');hello()" \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/description.php b/modules/snippet/snippets/docs/API/PHP/VV/include/description.php deleted file mode 100644 index c154efc..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/description.php +++ /dev/null @@ -1,4 +0,0 @@ -VV::include( - string $pathname, - bool $relative = true -): never \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-0.php b/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-0.php deleted file mode 100644 index 1fbceb6..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-0.php +++ /dev/null @@ -1,5 +0,0 @@ -/* File: /var/www/my-website/modules/banner.php */ - - -

Important text!

-
\ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-1.php b/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-1.php deleted file mode 100644 index 777ce4e..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/include/example-1-1.php +++ /dev/null @@ -1,6 +0,0 @@ -// File: /var/www/my-website/public/index.php - -
-

Some header content

- -
\ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/0.php b/modules/snippet/snippets/docs/API/PHP/VV/js/0.php deleted file mode 100644 index 3fc3023..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/0.php +++ /dev/null @@ -1,4 +0,0 @@ - - -// Without file extension (appended automatically) - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/1.php b/modules/snippet/snippets/docs/API/PHP/VV/js/1.php deleted file mode 100644 index 983cfef..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/1.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/2.php b/modules/snippet/snippets/docs/API/PHP/VV/js/2.php deleted file mode 100644 index 77d81a2..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/2.php +++ /dev/null @@ -1 +0,0 @@ -"const hello = ()=>console.log('Hello world');hello()" \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/description.php b/modules/snippet/snippets/docs/API/PHP/VV/js/description.php deleted file mode 100644 index fe7dea6..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/description.php +++ /dev/null @@ -1,4 +0,0 @@ -VV::js( - string $pathname, - bool $relative = true -): string \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-0.js b/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-0.js deleted file mode 100644 index a4e944e..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-0.js +++ /dev/null @@ -1,5 +0,0 @@ -// File: /var/www/my-website/public/assets/js/script.js - -const hello = () => { - console.log("Hello world!"); -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-1.php b/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-1.php deleted file mode 100644 index a9a296e..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/js/example-1-1.php +++ /dev/null @@ -1,4 +0,0 @@ -// File: /var/www/my-website/public/index.php - -

Some content...

- \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/root/0.php b/modules/snippet/snippets/docs/API/PHP/VV/root/0.php deleted file mode 100644 index 34f4b5a..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/root/0.php +++ /dev/null @@ -1 +0,0 @@ -VV::root("/src/databases"); \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/root/1.txt b/modules/snippet/snippets/docs/API/PHP/VV/root/1.txt deleted file mode 100644 index 38f9b6d..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/root/1.txt +++ /dev/null @@ -1 +0,0 @@ -"/var/www/my-website/src/databases" \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/root/2.php b/modules/snippet/snippets/docs/API/PHP/VV/root/2.php deleted file mode 100644 index c5b8f90..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/root/2.php +++ /dev/null @@ -1,9 +0,0 @@ -// File: /var/www/my-website/src/MyClass.php - - -

A normal Vegvisir page whch has access to MyClass

\ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/root/description.php b/modules/snippet/snippets/docs/API/PHP/VV/root/description.php deleted file mode 100644 index 6bf4ff6..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/root/description.php +++ /dev/null @@ -1,3 +0,0 @@ -VV::root( - string $pathname = "" -): string \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/shell/0.php b/modules/snippet/snippets/docs/API/PHP/VV/shell/0.php deleted file mode 100644 index 0df0de9..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/shell/0.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/shell/description.php b/modules/snippet/snippets/docs/API/PHP/VV/shell/description.php deleted file mode 100644 index 9d82be9..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/shell/description.php +++ /dev/null @@ -1,3 +0,0 @@ -VV::shell( - string $pathname = "" -): never \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-0.php b/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-0.php deleted file mode 100644 index 091a064..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-0.php +++ /dev/null @@ -1,4 +0,0 @@ -// File: /var/www/my-website/public/some-page.php - -

Inner content

- \ No newline at end of file diff --git a/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-1.php b/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-1.php deleted file mode 100644 index 9dad618..0000000 --- a/modules/snippet/snippets/docs/API/PHP/VV/shell/example-0-1.php +++ /dev/null @@ -1,5 +0,0 @@ -// File: /var/www/my-website/shells/some-shell.php - -

This paragraph will be above the wrapped content

- -

This parahraph will be below the wrapped content

\ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/0.txt b/modules/snippet/snippets/docs/installation/0.txt deleted file mode 100644 index 6a68fe0..0000000 --- a/modules/snippet/snippets/docs/installation/0.txt +++ /dev/null @@ -1 +0,0 @@ -git clone https://codeberg.org/vegvisir/vegvisir.git --depth 1 \ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/1.txt b/modules/snippet/snippets/docs/installation/1.txt deleted file mode 100644 index 312037a..0000000 --- a/modules/snippet/snippets/docs/installation/1.txt +++ /dev/null @@ -1 +0,0 @@ -composer install --optimize-autoloader \ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/2.txt b/modules/snippet/snippets/docs/installation/2.txt deleted file mode 100644 index 92a4de8..0000000 --- a/modules/snippet/snippets/docs/installation/2.txt +++ /dev/null @@ -1,16 +0,0 @@ -# You might need to alter this block to suit your NGINX configuration -# The important thing is that all requests should be routed to /public/index.php - -server { - listen 80; - server_name _; - - root /var/www/vegvisir/public; - - location / { - try_files /index.php =503; - - include snippets/fastcgi-php.conf; - fastcgi_pass unix:/run/php/php8.3-fpm.sock; - } -} \ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/3.txt b/modules/snippet/snippets/docs/installation/3.txt deleted file mode 100644 index 8b30c60..0000000 --- a/modules/snippet/snippets/docs/installation/3.txt +++ /dev/null @@ -1 +0,0 @@ -mkdir /var/www/my-website \ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/4.txt b/modules/snippet/snippets/docs/installation/4.txt deleted file mode 100644 index 038eaa1..0000000 --- a/modules/snippet/snippets/docs/installation/4.txt +++ /dev/null @@ -1 +0,0 @@ -cp -p /var/www/vegvisir/.env.example.ini /var/www/vegvisir/.env.ini \ No newline at end of file diff --git a/modules/snippet/snippets/docs/installation/5.txt b/modules/snippet/snippets/docs/installation/5.txt deleted file mode 100644 index 7c45f5b..0000000 --- a/modules/snippet/snippets/docs/installation/5.txt +++ /dev/null @@ -1,10 +0,0 @@ -# /var/www/vegvisir/.env.ini - -; +--------------------+ -; | Base configuration | -; +--------------------+ - -; An absolute path to the root directory of your website -root_path = "/var/www/my-website" - -... \ No newline at end of file diff --git a/public/assets/css/document.css b/public/assets/css/document.css deleted file mode 100644 index 524af4b..0000000 --- a/public/assets/css/document.css +++ /dev/null @@ -1,267 +0,0 @@ -:root { - --primer-color-deep: 0, 128, 255; - --primer-color-light: 135, 255, 255; - --color-deep: rgba(var(--primer-color-deep)); - --color-light: rgba(var(--primer-color-light)); - - --border-style-width: 1px; - --border-style: solid var(--border-style-width) rgba(var(--primer-color-deep), .2); - - --padding: 10px; - --running-size: 70px; - --max-width: 1400px; -} - -/* # Cornerstones */ - -* { - margin: 0; - color: inherit; - font-size: inherit; - box-sizing: border-box; - font-family: monospace; -} - -body { - font-size: 15px; - overflow-x: hidden; - overscroll-behavior: none; -} - -body.menuOpen { - overflow: hidden; -} - -a { - color: inherit; - display: contents; - text-decoration: none; -} - -/* # Components */ - -:is(h1, h2, h3, p, li) > a { - --underline-tickness: 3px; - - display: initial; - text-decoration: underline; - text-decoration-color: var(--color-accent); - text-underline-offset: var(--underline-tickness); - text-decoration-thickness: var(--underline-tickness); -} - -@media (hover: hover) { - :is(h1, h2, h3, p, li) > a:hover { - text-decoration-color: var(--color-deep); - } -} - -h1 { - font-size: 30px; - color: var(--color-accent); -} - -h2 { - font-size: 25px; -} - -h3 { - font-size: 18px; -} - -/* ## Container */ - -container { - margin: auto; - height: 100%; - display: flex; - width: clamp(200px, 100%, 80vw); - max-width: var(--max-width); - align-items: center; - gap: var(--padding); - padding: var(--padding) 0; -} - -container.split { - display: grid; - grid-template-columns: repeat(2, 1fr); -} - -container.split.reverse div:last-child { - order: -1; -} - -container.split > div { - display: flex; - flex-direction: column; - align-items: baseline; - gap: var(--padding); -} - -/* ## Button */ - -button { - border: unset; - fill: black; - cursor: pointer; - padding: 10px 15px; - border-radius: 4px; - background-color: rgba(0, 0, 0, 0); - border: solid var(--border-style-width) transparent; -} - -button.solid { - fill: white; - color: white; - background-color: var(--color-deep); -} - -button.shade { - background-color: rgba(0, 0, 0, .05); -} - -@media (hover: hover) { - button:hover { - background-color: rgba(var(--primer-color-light), .3); - } - - button.solid:hover { - color: var(--color-light); - background-color: var(--color-deep); - } -} - -button svg { - fill: inherit; - width: 1em; -} - -/* # Content */ - -/* ## Runners */ - -:is(header, footer) ul { - display: flex; - padding-left: 0; - list-style: none; - gap: var(--padding); -} - -:is(header, footer) ul:last-of-type { - margin-left: auto; -} - -:is(header, footer) container > button { - display: none; - margin-left: auto; -} - -/* ### Header */ - -header { - --border-width: 2px; - - top: 0px; - position: sticky; - background-color: white; - height: calc(var(--running-size) + var(--border-style-width)); - border-bottom: var(--border-style); - z-index: 1000; -} - -header .logo { - height: 40px; - padding: 5px; - border-radius: 4px; - background-color: var(--color-deep); -} - -[vv-top-page="/"] header:not(.transparent) a[href="/"] button, -[vv-top-page="/help"] header a[href="/help"] button, -[vv-top-page^="/docs"] header a[href="/docs"] button, -[vv-top-page="/demos"] header a[href="/demos"] button, -[vv-top-page="/why"] header a[href="/why"] button { - font-weight: bold; - color: var(--color-deep); - border: var(--border-style); -} - -/* ### Footer */ - -footer { - padding: var(--padding); - color: var(--color-light); - background-color: var(--color-deep); -} - -/* ### Menu */ - -menu { - display: none; - position: fixed; - top: var(--running-size); - left: 0; - width: 100svw; - padding: calc(var(--padding) * 2); - height: calc(100svh - var(--running-size)); - background-color: var(--color-deep); -} - -body.menuOpen menu { - display: initial; -} - -menu ul { - list-style: none; - padding-left: unset; -} - -menu button { - color: white; - width: 100%; - margin-top: var(--padding); -} - -/* # Size queries */ - -@media (max-width: 950px) { - container { - min-width: unset; - width: 100%; - padding: calc(var(--padding) * 2); - } - - container.split { - display: flex; - flex-direction: column; - } - - container.split.reverse { - flex-direction: column-reverse; - } - - header ul button.solid, - :is(header, footer) ul:not(:last-of-type) { - display: none; - } - - :is(header, footer) container > button { - display: initial; - } - - footer :is(container, ul) { - flex-direction: column; - } - - footer button, - footer ul:last-of-type { - width: 100%; - margin-left: unset; - } -} - -@media (min-width: 950px) { - body.menuOpen menu { - display: none; - } -} \ No newline at end of file diff --git a/public/assets/css/fonts.css b/public/assets/css/fonts.css new file mode 100644 index 0000000..782405f --- /dev/null +++ b/public/assets/css/fonts.css @@ -0,0 +1,8 @@ +@font-face { + font-family: "Roboto Mono"; + src: + url("/assets/fonts/roboto-mono.woff2") format("woff2 supports variations"), + url("/assets/fonts/roboto-mono.woff2") format("woff2-variations") + ; + font-weight: 100 900; +} \ No newline at end of file diff --git a/public/assets/css/pages/demos.css b/public/assets/css/pages/demos.css deleted file mode 100644 index 036cef3..0000000 --- a/public/assets/css/pages/demos.css +++ /dev/null @@ -1,26 +0,0 @@ -/* # WIP */ - -section#wip { - background-color: rgba(var(--primer-color-light), .3); -} - -section#wip container { - flex-direction: column; - gap: var(--padding); -} - -/* # Websites */ - -section#websites container { - flex-direction: column; -} - -section#websites ul { - list-style: none; - padding-left: unset; -} - -section#websites button { - margin-top: var(--padding); - width: 100%; -} \ No newline at end of file diff --git a/public/assets/css/pages/docs/aside.css b/public/assets/css/pages/docs/aside.css new file mode 100644 index 0000000..e056190 --- /dev/null +++ b/public/assets/css/pages/docs/aside.css @@ -0,0 +1,22 @@ +aside { + grid-area: aside; + padding: var(--padding); +} + +aside > p { + text-align: center; + margin: var(--padding) 0; +} + +aside nav { + display: flex; + flex-direction: column; + gap: calc(var(--padding) / 2); +} + +aside .spacer { + width: 100%; + height: 1px; + background-color: rgba(var(--primer-color-accent), .1); + margin: var(--padding) 0; +} \ No newline at end of file diff --git a/public/assets/css/pages/docs/header.css b/public/assets/css/pages/docs/header.css new file mode 100644 index 0000000..f8c81e2 --- /dev/null +++ b/public/assets/css/pages/docs/header.css @@ -0,0 +1,86 @@ +/* # Overrides */ + +header { + position: relative; + border-bottom: none; +} + +/* # Sections */ + +/* ## Header */ + +section.header { + top: 0; + width: 100%; + z-index: 100; + display: flex; + color: white; + position: sticky; + overflow: hidden; + grid-area: header; + align-items: stretch; + height: calc(var(--running-size) - var(--padding)); + grid-template-rows: var(--running-size); + background-color: var(--color-accent); + box-shadow: + 0 2px 0 0 white, + 20svw 0 0 0 var(--color-accent), + -20svw 0 0 0 var(--color-accent) + ; +} + +/* ### Nav */ + +section.header nav { + display: flex; + align-items: center; + padding: var(--padding); + justify-content: baseline; +} + +section.header nav:last-of-type { + justify-content: end; + gap: calc(var(--padding) / 2); +} + +/* ### Spacer */ + +section.header nav > div { + width: 2px; + height: 80%; + margin: 0 var(--padding); + background-color: rgba(0, 0, 0, .07); +} + +/* ### Buttons */ + +section.header button.inline:not(.solid):hover, +section.header button.inline { + fill: white; + color: white; +} + +section.header button.inline.solid { + color: var(--color-accent); + background-color: white; +} + +/* ## Menu */ + +section.header button.menu { + display: none; +} + +/* # Size queries */ + +@media (max-width: 950px) { + section.header > *:not(button.menu) { + display: none; + } + + section.header button.menu { + width: 100%; + justify-content: center; + display: flex; + } +} \ No newline at end of file diff --git a/public/assets/css/pages/docs/layout.css b/public/assets/css/pages/docs/layout.css new file mode 100644 index 0000000..a3cd3cb --- /dev/null +++ b/public/assets/css/pages/docs/layout.css @@ -0,0 +1,89 @@ +vv-shell { + display: grid; + grid-template-rows: calc(var(--running-size) - var(--padding)) 1fr var(--running-size); + grid-template-areas: + "header header" + "aside main" + "footer footer" + ; + grid-template-columns: 300px 1fr; +} + +/* # Main */ + +main { + --primer-color-accent: 0, 0, 0; + --color-accent: black; + + gap: var(--padding); + display: flex; + padding: var(--padding); + grid-area: main; + font-family: sans-serif; + flex-direction: column; +} + +main code { + color: white; + padding: 0 5px; + font-weight: normal; + font-family: monospace; + border-radius: 6px; + background-color: #212121; +} + +main h2 { + font-size: 1.5em; +} + +main h3 { + font-size: 1em; + margin-bottom: 5px; +} + +/* # Sections */ + +section.md { + gap: 5px; + display: flex; + align-items: baseline; + flex-direction: column; +} + +section.md :is(ol, ul) li { + margin: calc(var(--padding) / 2) 0; +} + +/* # Size queries */ + +@media (max-width: 950px) { + vv-shell { + grid-template-rows: calc(var(--running-size) - var(--padding)) 1fr var(--running-size); + grid-template-areas: + "header" + "main" + "footer" + ; + grid-template-columns: 100svw; + } + + aside { + display: none; + } + + vv-shell.menu-open { + grid-template-areas: + "header" + "aside" + "footer" + ; + } + + vv-shell.menu-open aside { + display: initial; + } + + vv-shell.menu-open main { + display: none; + } +} \ No newline at end of file diff --git a/public/assets/css/pages/error.css b/public/assets/css/pages/error.css new file mode 100644 index 0000000..0497f60 --- /dev/null +++ b/public/assets/css/pages/error.css @@ -0,0 +1,4 @@ +vv-shell { + margin: auto; + text-align: center; +} \ No newline at end of file diff --git a/public/assets/css/pages/examples.css b/public/assets/css/pages/examples.css new file mode 100644 index 0000000..01e6438 --- /dev/null +++ b/public/assets/css/pages/examples.css @@ -0,0 +1,56 @@ +vv-shell { + gap: var(--padding); + padding: var(--padding); +} + +/* # Sections */ + +/* ## Heading */ + +section.heading { + text-align: center; +} + +/* ## Grid */ + +section.grid { + gap: var(--padding); + display: grid; + grid-template-columns: repeat(3, 1fr); +} + +section.grid button { + width: 100%; + flex-direction: column; + justify-content: space-between; +} + +section.grid button img { + width: 100%; + border-radius: 6px; +} + +section.grid button > div { + display: flex; + text-align: right; + gap: var(--padding); + align-items: center; +} + +section.grid button p { + color: black; +} + +/* # Size queries */ + +@media (max-width: 1000px) { + section.grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 550px) { + section.grid { + grid-template-columns: 1fr; + } +} \ No newline at end of file diff --git a/public/assets/css/pages/features.css b/public/assets/css/pages/features.css new file mode 100644 index 0000000..ae1da35 --- /dev/null +++ b/public/assets/css/pages/features.css @@ -0,0 +1,32 @@ +vv-shell { + padding: 0 var(--padding); +} + +/* # Section */ + +/* ## This stays */ + +section#this-stays { + display: flex; + align-items: center; + text-align: center; + fill: var(--color-accent); + justify-content: space-evenly; + height: var(--running-size); +} + +section#this-stays svg { + height: 70%; +} + +section#this-stays svg:last-child { + transform: rotateY(180deg); +} + +/* # Size queries */ + +@media (max-width: 950px) { + section#this-stays { + height: calc(var(--running-size) * 2); + } +} \ No newline at end of file diff --git a/public/assets/css/pages/index.css b/public/assets/css/pages/index.css index 2a189f5..ae129ec 100644 --- a/public/assets/css/pages/index.css +++ b/public/assets/css/pages/index.css @@ -1,188 +1,76 @@ -:root { - --wavelength: 20vw; +vv-shell { + overflow-x: hidden; + padding: 0 var(--padding); } -body { - background-color: var(--color-deep); -} +/* # Components */ -section h2 { - color: white; - background-color: black; -} - -header.transparent { - color: white; - background-color: transparent; - border-color: rgba(255, 255, 255, .1); -} - -header.transparent .logo { - fill: var(--color-deep); -} - -header.transparent button { - fill: white; -} - -header.transparent button.solid { - fill: var(--color-deep); - color: var(--color-deep); - background-color: white; +code-demo { + width: 100%; + max-width: 700px; } /* # Sections */ -/* ## Divider */ - -section.divider { - width: 100%; - overflow: hidden; - line-height: 0; - background-color: white; -} - -section.divider svg { - position: relative; - display: block; - width: calc(148% + 1.3px); - height: 79px; -} - -section.divider .shape-fill { - fill: var(--color-deep); -} - /* ## Intro */ section#intro { - display: grid; - color: white; - min-height: 300px; + min-height: min(50svh, 1000px); } -section#intro h1 { +section#intro .text h1 { font-size: 50px; + line-height: 50px; } -section#intro div { - display: flex; - flex-direction: column; - justify-content: center; - align-items: baseline; +/* ### Compass */ + +section#intro div.compass { + align-self: center; } -/* ### Waves */ +section#intro div.compass svg { + --size: 50svh; -section.waves { - --easing: .2; - - position: relative; - height: 300px; - user-select: none; - pointer-events: none; + width: var(--size); + height: var(--size); + position: absolute; z-index: -1; } -section.waves img { - margin: auto; - margin-top: -14%; - width: 50%; - transform-origin: 50% 100%; - animation: ship 6s alternate infinite ease; +section#intro div.compass svg.points { + opacity: .2; + animation: spin 10s alternate infinite linear; } -@keyframes ship { - 0% { - transform: translate(0, -7px) rotate(-7deg); - } - - 100% { - transform: translate(5px, 10px) rotate(4deg); - } +@keyframes spin { + to { transform: rotate(30deg); } } -section.waves .wave { - position: absolute; - width: 100%; - height: 100%; - transform: scale(1.5); - bottom: 70px; - animation: wave 7s alternate infinite cubic-bezier(var(--easing), 0, calc(1 - var(--easing)), 1); +section#intro div.compass svg:nth-child(2) { + --size: 60svh; + + animation-duration: 15s; + animation-direction: alternate-reverse; } -@keyframes wave { - to { transform: scale(1.5) translateX(100px); } -} +/* ## Assets */ -section.waves + section { - background-color: #4ca6ff; -} +/* ## Freedom */ -section.waves .wave:first-child { - background-image: url("/assets/media/waves/0.svg"); -} - -section.waves .wave:last-child { - animation-duration: 5s; - background-image: url("/assets/media/waves/1.svg"); -} - -/* ## Softnav */ - -section#softnav { - color: white; - background: linear-gradient(0deg, rgba(0,128,255,1) 0%, rgba(76,166,255,1) 100%); -} - -/* ## BYOE */ - -section.info { - background-color: white; -} - -section.info container { - min-height: 400px; -} - -section.info svg { - justify-self: center; - width: 400px; -} - -/* ## Lead */ - -section#lead h1 { - color: white; - text-align: center; - font-weight: normal; -} - -/* ## Free */ - -section#free { - box-shadow: inset 0 0 20px 20px white, inset 0 0 140px 20px white; - background-color: rgba(255, 255, 255, .9); - background-blend-mode: screen; - background-image: url("/assets/media/gnu.png"); +section#freedom > div > svg { + height: 300px; } /* # Size queries */ @media (max-width: 950px) { - section.waves { - display: none; + section#intro { + min-height: min(40svh, 1000px); } - section.info container { - min-height: unset; - } - - section.info svg { - width: 300px; - } - - section#lead h1 { - font-size: 20px; + section#intro div.compass { + opacity: .3; + z-index: -1; } } \ No newline at end of file diff --git a/public/assets/css/pages/why.css b/public/assets/css/pages/why.css deleted file mode 100644 index d2fded6..0000000 --- a/public/assets/css/pages/why.css +++ /dev/null @@ -1,15 +0,0 @@ -/* # Sections */ - -/* ## Free */ - -section#freedom { - background-position: 50% 50%; - background-size: 400px; - background-color: var(--color-deep); - background-blend-mode: lighten; - background-image: url("/assets/media/gnu.png"); -} - -section#freedom svg { - filter: drop-shadow(0 0 40px rgba(255, 255, 255, .3)); -} \ No newline at end of file diff --git a/public/assets/css/shell.css b/public/assets/css/shell.css new file mode 100644 index 0000000..2993f92 --- /dev/null +++ b/public/assets/css/shell.css @@ -0,0 +1,384 @@ +:root { + --primer-color-accent: 0, 128, 255; + --color-accent: rgb(var(--primer-color-accent)); + + --padding: 20px; + --running-size: 80px; +} + +/* # Cornerstones */ + +* { + margin: 0; + fill: inherit; + box-sizing: border-box; + font-family: inherit; + color: inherit; + font-size: inherit; +} + +::-webkit-scrollbar { + display: none; +} + +body { + display: grid; + justify-items: center; + grid-template-rows: var(--running-size) 1fr var(--running-size); + overscroll-behavior: none; + background-color: white; + color: black; + overflow-x: hidden; + min-height: 100svh; + font-size: 15px; + font-family: "Roboto Mono", sans-serif; +} + +body::before { + transition: 1s opacity; + content: ""; + position: absolute; + top: -5%; + left: 0; + width: 20%; + height: 5%; + border-radius: 100%; + z-index: 1000; + box-shadow: + 0 0 30svh 10svh rgba(var(--primer-color-accent), .1), + 0 0 30svh 60svh rgba(var(--primer-color-accent), .05), + 0 0 30svh 150svh rgba(var(--primer-color-accent), .02) + ; + opacity: 0; +} + +/* "enable" the corner glow effect on initial load when a page has been fully loaded */ +body[vv-top-page]::before { + opacity: 1; +} + +a { + display: contents; + color: inherit; + text-decoration: none; +} + +/* ## vv-shell */ + +vv-shell { + width: 100svw; + display: flex; + max-width: 1500px; + position: relative; + flex-direction: column; +} + +/* # Components */ + +:is(h1, h2, h3, p, li) > a { + --underline-tickness: 3px; + + display: initial; + text-decoration: underline; + text-decoration-thickness: var(--underline-tickness); + text-underline-offset: var(--underline-tickness); + text-decoration-color: var(--color-accent); +} + +h1 { + font-size: 30px; + color: var(--color-accent); +} + +h2 { + font-size: 30px; +} + +h3 { + font-size: 25px; +} + +/* ## Page transition */ + +[vv-loading] * { + transition: 200ms opacity; +} + +[vv-loading="true"] * { + opacity: 0; + pointer-events: none; +} + +[vv-loading="true"]::after { + content: ""; + position: fixed; + top: 50%; + left: 50%; + width: 45px; + height: 49px; + background-size: contain; + image-rendering: pixelated; + transform: translate(-50%, -50%); + background-image: url("/assets/media/spinner.gif"); + -webkit-filter: hue-rotate(var(--hue-accent)); + filter: hue-rotate(var(--hue-accent)); +} + +/* ## Buttons */ + +button { + border: none; + background-color: transparent; + color: inherit; + fill: inherit; + cursor: pointer; +} + +button * { + pointer-events: none; +} + +/* ### Inline */ + +button.inline { + gap: 10px; + display: flex; + border-radius: 7px; + align-items: center; + fill: var(--color-accent); + color: var(--color-accent); + padding: calc(var(--padding) / 1.5); + background: linear-gradient(139deg, rgba(0, 0, 0, 0) 0%, rgba(var(--primer-color-accent), .1) 100%); +} + +button.inline:not(.solid, .sly) { + box-shadow: + 0 0 0 2px rgba(var(--primer-color-accent), .1), + 10px 7px 40px 3px rgba(var(--primer-color-accent), .06) + ; +} + +button.inline svg { + flex: none; + height: 1em; +} + +button.inline svg:last-child { + width: 1.5em; + margin-left: auto; +} + +button.inline svg.chevron:last-child { + transform: rotate(-90deg); +} + +/* #### Solid */ + +button.inline.solid { + fill: white; + color: white; + border-color: var(--color-accent); + background-color: var(--color-accent); + border: solid 2px rgba(var(--primer-color-accent), 1); +} + +/* #### Sly */ + +button.sly { + border-color: transparent; + background: transparent; + box-shadow: none; +} + +button.sly > svg.chevron { + transition: 200ms width; + width: 0; +} + +button.sly:hover > svg.chevron { + width: 1.5em; +} + +/* ## Header */ + +header { + --border-style: solid 1px rgba(0, 0, 0, .07); + + top: 0; + width: 100%; + z-index: 100; + display: grid; + position: sticky; + overflow: hidden; + align-items: stretch; + backdrop-filter: blur(20px); + height: var(--running-size); + border-bottom: var(--border-style); + -webkit-backdrop-filter: blur(20px); + grid-template-rows: var(--running-size); + background-color: rgba(255, 255, 255, .8); + grid-template-columns: var(--running-size) repeat(2, 1fr); +} + +/* ### Nav */ + +header nav { + display: flex; + align-items: center; + padding: var(--padding); + justify-content: baseline; +} + +header nav:last-of-type { + justify-content: end; + gap: calc(var(--padding) / 2); +} + +:is(header, footer) nav.m { + display: none; +} + +/* ### Spacer */ + +header nav > div { + width: 2px; + height: 80%; + margin: 0 var(--padding); + background-color: rgba(0, 0, 0, .07); +} + +/* ### Buttons */ + +header button { + --icon-size: 25px; + + display: grid; + border-left: var(--border-style); + grid-template-columns: 1fr; + align-items: center; + justify-items: center; + padding: var(--padding); + gap: var(--padding); + fill: var(--color-accent); + font-size: 13px; + color: rgba(255, 255, 255, .5); + cursor: pointer; +} + +header button:not(.logo) svg { + width: var(--icon-size); +} + +header button.search p { + display: none; +} + +/* ## Footer */ + +footer { + width: 100%; + display: grid; + color: white; + position: sticky; + overflow: hidden; + align-items: stretch; + height: var(--running-size); + grid-template-rows: var(--running-size); + background-color: var(--color-accent); + grid-template-columns: repeat(2, 1fr); +} + +/* ### Nav */ + +footer nav { + display: flex; + align-items: center; + padding: var(--padding); + justify-content: baseline; +} + +footer nav:last-of-type { + justify-content: end; + gap: calc(var(--padding) / 2); +} + +/* ### Spacer */ + +footer nav > div { + width: 2px; + height: 80%; + margin: 0 var(--padding); + background-color: rgba(0, 0, 0, .07); +} + +/* ### Buttons */ + +footer button.inline:not(.solid):hover, +footer button.inline { + fill: white; + color: white; +} + +footer button.inline.solid { + color: var(--color-accent); + background-color: white; +} + +/* # Feature queries */ + +@media (hover: hover) { + :is(h1, h2, h3, p, li) > a:hover { + text-underline-offset: 1px; + text-decoration-thickness: calc(var(--underline-tickness) * 2); + color: var(--color-accent); + } + + /* # Components */ + + button.inline { + transition-duration: 300ms; + transition-property: background-color, border-color, box-shadow, color, fill; + } + + button:hover { + border-color: rgba(255, 255, 255, .2); + background-color: rgba(255, 255, 255, .1); + } + + button.inline:hover { + fill: var(--color-accent); + color: var(--color-accent); + } + + button.inline:not(.solid):hover { + box-shadow: + 0 0 0 2px rgba(var(--primer-color-accent), 1), + 10px 7px 30px 3px rgba(var(--primer-color-accent), .07) + ; + } + + button.solid:hover { + border-color: rgba(var(--primer-color-accent), .2); + background-color: rgba(var(--primer-color-accent), .2); + box-shadow: 0 -10px 20px 10px rgba(var(--primer-color-accent), .05); + } +} + +/* # Size queries */ + +@media (max-width: 950px) { + footer, + header { + grid-template-columns: var(--running-size) 1fr; + } + + :is(header, footer) nav.m { + display: flex; + padding-left: calc(var(--padding) / 2); + justify-content: space-between; + } + + :is(header, footer) nav:not(.m) { + display: none; + } +} \ No newline at end of file diff --git a/public/assets/css/shells/docs.css b/public/assets/css/shells/docs.css deleted file mode 100644 index 7573160..0000000 --- a/public/assets/css/shells/docs.css +++ /dev/null @@ -1,274 +0,0 @@ -body { - background-color: rgba(var(--primer-color-deep), .01); -} - -[vv-shell-id="/"] { - display: grid; - min-height: calc(100svh - var(--running-size) - var(--border-style-width)); - grid-template-areas: - "aside main" - "contribute contribute" - ; - grid-template-columns: 400px 1fr; - grid-template-rows: 1fr 200px; - gap: calc(var(--padding) * 2); - margin: auto; -} - -[vv-shell-id="6ccb0465"] { - grid-area: main; - display: flex; - flex-direction: column; - gap: calc(var(--padding) * 2); - margin-top: calc(var(--padding) * 2); - padding-right: calc(var(--padding) * 2); -} - -hr { - border: unset; - border-top: var(--border-style); -} - -/* # Aside */ - -aside { - grid-area: aside; - height: 100%; - display: flex; - flex-direction: column; - padding: var(--padding) 0; - padding-left: calc(var(--padding) * 2); - border-right: var(--border-style); -} - -aside button { - width: calc(100% - (var(--padding) * 2)); - text-align: left; -} - -aside hr { - margin: calc(var(--padding) * 2) 0; -} - -aside ul { - list-style: none; - padding-left: 0; -} - -aside ul ul { - padding-left: var(--padding); -} - -aside ul > p { - margin: var(--padding) 0; -} - -/* ---- */ - -aside .cc + ul { - display: none; -} - -aside .cc.php button { - background-color: rgba(122, 134, 184, .2); -} - -aside .cc.js button { - background-color: rgba(240, 219, 79, .3); -} - -[vv-page^="/docs/API/PHP"] aside .cc.php + ul, -[vv-page^="/docs/API/JS"] aside .cc.js + ul { - display: initial; -} - -/* # Collapsible */ - -details { - border: 1px solid #aaa; - border-radius: 4px; - padding: 0.5em 0.5em 0; -} - -summary { - margin: -0.5em -0.5em 0; - padding: 0.5em; - cursor: pointer; -} - -details[open] { - width: 100%; - padding: 0.5em; -} - -details[open] summary { - border-bottom: 1px solid #aaa; - margin-bottom: 0.5em; -} - -/* # Sections */ - -/* ## Inset */ - -section.inset { - padding-left: var(--padding); -} - -/* ## Markdown */ - -section.md container { - padding-top: 0; - flex-direction: column; - align-items: baseline; -} - -section.md :is(h1, h2, h3) { - cursor: pointer; -} - -section.md h1::before { - content: "#"; - opacity: 1; - padding: 0 10px; - margin-right: .5em; - color: var(--color-light); - background-color: var(--color-deep); -} - -section.md h2::before { - content: "#"; - opacity: 1; - margin-right: .5em; - color: var(--color-deep); -} - -/* ## Code inline */ - -:is(h1, h2, h3, a, p, quote) > code { - padding: 5px; - border-radius: 6px; - white-space: nowrap; - font-family: 'Courier New', monospace; - background-color: rgba(0, 0, 0, .05); -} - -code.tag::before { - content: "<"; -} - -code.tag::after { - content: ">"; -} - -/* ## Code block */ - -section.md pre { - width: 100%; - max-width: calc(100svw - (var(--padding) * 4)); - tab-size: 3; - overflow: scroll; -} - -section.md pre code { - --copy-size: 37px; - --copy-inset: 5px; - --copy-border-size: 1px; - - overflow: scroll; - position: relative; - padding-right: calc(var(--copy-size) + (var(--copy-inset) * 2) + var(--padding)); - border-radius: 6px; -} - -section.md pre code::after { - content: "📋"; - display: grid; - font-size: 20px; - cursor: pointer; - position: absolute; - border-radius: 4px; - align-items: center; - justify-items: center; - top: var(--copy-inset); - width: var(--copy-size); - right: var(--copy-inset); - height: var(--copy-size); - border: solid 1px rgba(255, 255, 255, .1); - background-color: rgba(255, 255, 255, .1); -} - -@media (hover: hover) { - section.md h1:hover::before { - background-color: black; - } - - section.md :is(h1, h2, h3):hover::after { - content: " <- click to copy link"; - font-size: .5em; - opacity: .5; - } - - section.md pre code:hover::after { - border: solid 1px rgba(255, 255, 255, .3); - background-color: rgba(255, 255, 255, .2); - } -} - -/* ## Menu */ - -section.menu { - display: none; - fill: white; - color: white; - grid-area: menu; - cursor: pointer; - background-color: rgba(var(--primer-color-deep), .8); -} - -section.menu container svg { - width: 1em; -} - -section.menu p::before { - content: "Open "; -} - -/* # Size queries */ - -@media (max-width: 950px) { - [vv-shell-id="/"] { - grid-template-areas: - "menu" - "main" - "contribute" - ; - grid-template-columns: 1fr; - grid-template-rows: var(--running-size) 1fr 300px; - } - - body.docsMenuOpen [vv-shell-id="/"] { - grid-template-areas: - "menu" - "aside" - ; - grid-template-rows: var(--running-size) 1fr; - } - - body.docsMenuOpen [vv-shell-id="6ccb0465"], - body.docsMenuOpen section.contribute, - body:not(.docsMenuOpen) aside { - display: none; - } - - /* ---- */ - - [vv-shell-id="6ccb0465"] { - margin-top: unset; - } - - /* ---- */ - - section.menu { - display: initial; - } -} \ No newline at end of file diff --git a/public/assets/css/snippets/HTMLCodeDemoElement.css b/public/assets/css/snippets/HTMLCodeDemoElement.css new file mode 100644 index 0000000..225e269 --- /dev/null +++ b/public/assets/css/snippets/HTMLCodeDemoElement.css @@ -0,0 +1,113 @@ +code-demo { + --primer-color-base: 31, 31, 31; + --color-base: rgb(var(--primer-color-base)); + --height: calc(var(--padding) * 2.5); + + display: block; + min-width: 700px; + border-radius: 12px; + font-family: monospace; + background-color: var(--color-base); +} + +/* # Header */ + +code-demo .header { + display: flex; + overflow-x: scroll; + height: var(--height); + border-bottom: solid 1px rgba(255, 255, 255, .1); +} + +code-demo .header button.inline { + border: solid 1px rgba(255, 255, 255, .1); + border-bottom: unset; + border-radius: unset; + box-shadow: unset; +} + +code-demo .header button.inline:hover { + box-shadow: unset; +} + +code-demo .header button:first-child { + margin-left: var(--height); +} + +code-demo .header button.inline + button.inline { + border-left: unset; +} + +/* ## Active */ + +code-demo .header button { + --primer-color-accent: 255, 255, 255; + --color-accent: rgb(var(--primer-color-accent)); +} + +code-demo .header button.active { + border-top: solid 4px var(--color-accent); + pointer-events: none; +} + +/* ## Languages */ + +code-demo .header button[data-lang="js"] { + --primer-color-accent: 241, 224, 90; + --color-accent: rgb(var(--primer-color-accent)); +} + +code-demo .header button[data-lang="css"] { + --primer-color-accent: 81, 154, 186; + --color-accent: rgb(var(--primer-color-accent)); +} + +code-demo .header button[data-lang="php"] { + --primer-color-accent: 160, 116, 196; + --color-accent: rgb(var(--primer-color-accent)); +} + +code-demo .header button[data-lang="html"] { + --primer-color-accent: 221, 120, 49; + --color-accent: rgb(var(--primer-color-accent)); +} + +/* # Body */ + +code-demo .body { + overflow: scroll; + padding: var(--padding); +} + +code-demo .body .view-line { + white-space: pre; +} + +/* ## Tabs */ + +code-demo .body [data-file] { + display: none; +} + +code-demo .body [data-file].active { + display: initial; +} + +code-demo .body a { + display: inline; + text-decoration: underline; + text-decoration-color: white; +} + +code-demo .body a:hover { + text-decoration-thickness: 2px; +} + +/* # Size queries */ + +@media (max-width: 950px) { + code-demo { + width: 100%; + min-width: unset; + } +} \ No newline at end of file diff --git a/public/assets/css/snippets/HTMLNavMenuElement.css b/public/assets/css/snippets/HTMLNavMenuElement.css new file mode 100644 index 0000000..428a8b2 --- /dev/null +++ b/public/assets/css/snippets/HTMLNavMenuElement.css @@ -0,0 +1,61 @@ +nav-menu { + display: none; +} + +@media (max-width: 950px) { + /* # Overrides */ + + body.menu-open { + overflow: hidden; + } + + /* ## Header */ + + body.menu-open header { + background-color: var(--color-accent); + } + + body.menu-open header nav p { + color: white; + } + + /* # Nav menu */ + + nav-menu { + top: var(--running-size); + left: 0; + width: 100%; + overflow-y: scroll; + height: calc(100svh - var(--running-size)); + display: none; + position: fixed; + align-items: center; + flex-direction: column; + background-color: white; + } + + nav-menu.active { + display: flex; + } + + /* ## Sections */ + + nav-menu nav { + gap: calc(var(--padding) / 2); + width: 100%; + max-width: 600px; + display: flex; + padding: var(--padding); + flex-direction: column; + } + + nav-menu nav:last-child { + margin-top: auto; + } + + nav-menu nav.horizontal { + gap: var(--padding); + flex-direction: row; + justify-content: center; + } +} \ No newline at end of file diff --git a/public/assets/css/snippets/split.css b/public/assets/css/snippets/split.css new file mode 100644 index 0000000..d69d691 --- /dev/null +++ b/public/assets/css/snippets/split.css @@ -0,0 +1,71 @@ +/* # Split */ + +section.split { + display: grid; + grid-template-columns: repeat(2, 1fr); + margin: 10svh 0; +} + +section.split.center { + justify-items: center; +} + +section.split > div { + grid-row: 1; + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; +} + +section.split.reverse > div:last-child { + grid-column: 1; +} + +section.split.reverse > div:first-child { + grid-column: 2; +} + +/* ## Text */ + +section.split .text { + width: 70%; + display: flex; + align-items: baseline; + flex-direction: column; +} + +section.split.reverse .text { + align-items: end; + justify-self: end; + text-align: right; +} + +/* ## Buttons */ + +section.split .buttons { + display: flex; + gap: var(--padding); + margin-top: var(--padding); +} + +/* # Size queries */ + +@media (max-width: 950px) { + section.split { + display: flex; + margin: 5svh 0; + gap: var(--padding); + flex-direction: column; + } + + section.split .text { + width: 100%; + } + + section.split .buttons { + width: 100%; + flex-direction: column; + gap: calc(var(--padding) / 2); + } +} \ No newline at end of file diff --git a/public/assets/css/syntax.css b/public/assets/css/syntax.css new file mode 100644 index 0000000..90e8d50 --- /dev/null +++ b/public/assets/css/syntax.css @@ -0,0 +1,27 @@ +/* # Syntax highliting */ + +.mtk1 { color: #cccccc; } +.mtk2 { color: #1f1f1f; } +.mtk3 { color: #d4d4d4; } +.mtk4 { color: #000080; } +.mtk5 { color: #6a9955; } +.mtk6 { color: #569cd6; } +.mtk7 { color: #b5cea8; } +.mtk8 { color: #646695; } +.mtk9 { color: #d7ba7d; } +.mtk10 { color: #9cdcfe; } +.mtk11 { color: #f44747; } +.mtk12 { color: #ce9178; } +.mtk13 { color: #6796e6; } +.mtk14 { color: #808080; } +.mtk15 { color: #d16969; } +.mtk16 { color: #dcdcaa; } +.mtk17 { color: #4ec9b0; } +.mtk18 { color: #c586c0; } +.mtk19 { color: #4fc1ff; } +.mtk20 { color: #c8c8c8; } +.mtk21 { color: #cd9731; } +.mtk22 { color: #b267e6; } +.mtki { font-style: italic; } +.mtkb { font-weight: bold; } +.mtks { text-decoration: line-through; } \ No newline at end of file diff --git a/public/assets/fonts/roboto-mono.woff2 b/public/assets/fonts/roboto-mono.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..26e996b471c9baf3fbd4fe3c47f3f1bc72185826 GIT binary patch literal 103796 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 z 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 literal 0 HcmV?d00001 diff --git a/public/assets/js/CustomElement.mjs b/public/assets/js/CustomElement.mjs new file mode 100644 index 0000000..456774b --- /dev/null +++ b/public/assets/js/CustomElement.mjs @@ -0,0 +1,45 @@ +const PUBLIC_ELEMENT_STYLESHEET_DIR = "/assets/css/snippets/"; + +export class CustomElement extends HTMLElement { + constructor() { + super(); + } + + /** + * Return a pathname to a custom element CSS stylesheet + * @param {String} stylesheet + * @returns {String} + */ + static #getElementStylesheetHref(stylesheet) { + return `${PUBLIC_ELEMENT_STYLESHEET_DIR}${stylesheet}.css`; + } + + /** + * Include a stylesheet for a custom element + * @param {String} stylesheet + */ + importElementStylesheet(stylesheet) { + if (document.head.querySelector(`link[href="${CustomElement.#getElementStylesheetHref(stylesheet)}"]`)) { + return; + } + + const element = document.createElement("link"); + element.href = CustomElement.#getElementStylesheetHref(stylesheet); + element.rel = "stylesheet"; + + document.head.appendChild(element); + } + + connectedCallback() { + if ("connected" in this) { + this.connected(); + } + } + + disconnectedCallback() { + if ("disconnected" in this) { + this.disconnected(); + } + } + +} \ No newline at end of file diff --git a/public/assets/js/pages/docs/layout.js b/public/assets/js/pages/docs/layout.js new file mode 100644 index 0000000..6a1960d --- /dev/null +++ b/public/assets/js/pages/docs/layout.js @@ -0,0 +1,9 @@ +// Toggle documentation menu with CSS when button in sub-header is clicked +document.querySelector("section.header button.menu").addEventListener("click", () => { + vegvisir.Navigation.shellElement.classList.toggle("menu-open"); +}); + +// Close documentation menu when shell is being navigated +vegvisir.Navigation.shellElement.addEventListener(vegvisir.Navigation.EVENTS.STARTED, () => { + vegvisir.Navigation.shellElement.classList.remove("menu-open"); +}); \ No newline at end of file diff --git a/public/assets/js/shell.js b/public/assets/js/shell.js new file mode 100644 index 0000000..f84c4a7 --- /dev/null +++ b/public/assets/js/shell.js @@ -0,0 +1,9 @@ +import { TAG_NAME } from "/assets/js/snippets/HTMLNavMenuElement.mjs"; + +// Bind toggles for the nav menu +[...document.querySelectorAll("[data-menu]")].forEach(element => { + element.addEventListener("click", () => document.querySelector(TAG_NAME).toggle()); +}); + +// Scroll page to the top on navigations +document.addEventListener(vegvisir.Navigation.EVENTS.FINISHED, () => window.scrollTo({ top: 0 })); \ No newline at end of file diff --git a/public/assets/js/shells/docs.js b/public/assets/js/shells/docs.js deleted file mode 100644 index c5dd70b..0000000 --- a/public/assets/js/shells/docs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Handle docs menu open/close -{ - const CLASSNAME_DOCS_MENU_OPEN = "docsMenuOpen"; - - // Toggle docs menu on button click - document.querySelector("section.menu").addEventListener("click", () => document.body.classList.toggle(CLASSNAME_DOCS_MENU_OPEN)); - // Hide docs menu on navigation - document.addEventListener(vegvisir.Navigation.EVENTS.STARTED, () => document.body.classList.remove(CLASSNAME_DOCS_MENU_OPEN)); -} \ No newline at end of file diff --git a/public/assets/js/shells/document.js b/public/assets/js/shells/document.js deleted file mode 100644 index 27bdc5f..0000000 --- a/public/assets/js/shells/document.js +++ /dev/null @@ -1,9 +0,0 @@ -// Handle global menu open/close events -{ - const CLASSNAME_MENU_OPEN = "menuOpen"; - - // Toggle menu on menu button click - document.querySelector("header .menuToggle").addEventListener("click", () => document.body.classList.toggle(CLASSNAME_MENU_OPEN)); - // Close menu on navigation - document.addEventListener(vegvisir.Navigation.EVENTS.STARTED, () => document.body.classList.remove(CLASSNAME_MENU_OPEN)); -} \ No newline at end of file diff --git a/public/assets/js/snippets/HTMLCodeDemoElement.mjs b/public/assets/js/snippets/HTMLCodeDemoElement.mjs new file mode 100644 index 0000000..d8305ec --- /dev/null +++ b/public/assets/js/snippets/HTMLCodeDemoElement.mjs @@ -0,0 +1,40 @@ +import { CustomElement } from "../CustomElement.mjs"; + +export const TAG_NAME = "code-demo"; + +const SELECTOR_HEADER_BUTTON = ".header button"; + +class HTMLCodeDemoElement extends CustomElement { + constructor() { + super(); + + this.importElementStylesheet(this.constructor.name); + } + + /** + * Set a tab as active by passing an HTMLElement with a data-lang attribute + * @param {HTMLElement} target + */ + #setActiveTab(target) { + [...this.querySelectorAll("[data-file]")].forEach(element => { + element.classList.remove("active"); + + // Set active if current element lang is target lang + if (element.dataset.file === target.dataset.file) { + element.classList.add("active"); + } + }); + } + + connected() { + // Bind event listeners for language tabs + [...this.querySelectorAll(SELECTOR_HEADER_BUTTON)].forEach(element => { + element.addEventListener("click", (event) => this.#setActiveTab(event.target.closest(SELECTOR_HEADER_BUTTON))) + }); + + // Make the first tab active on load + this.#setActiveTab(this.querySelector(SELECTOR_HEADER_BUTTON)); + } +} + +globalThis.customElements.define(TAG_NAME, HTMLCodeDemoElement); \ No newline at end of file diff --git a/public/assets/js/snippets/HTMLNavMenuElement.mjs b/public/assets/js/snippets/HTMLNavMenuElement.mjs new file mode 100644 index 0000000..61b6eb2 --- /dev/null +++ b/public/assets/js/snippets/HTMLNavMenuElement.mjs @@ -0,0 +1,36 @@ +import { CustomElement } from "../CustomElement.mjs"; + +export const TAG_NAME = "nav-menu"; + +class HTMLNavMenuElement extends CustomElement { + constructor() { + super(); + + this.importElementStylesheet(this.constructor.name); + } + + open() { + document.body.classList.add("menu-open"); + this.classList.add("active"); + } + + close() { + this.classList.remove("active"); + + // Remove classname from body tag if this was the last menu that was open + if (!document.querySelector(TAG_NAME + ".active")) { + document.body.classList.remove("menu-open"); + } + } + + toggle() { + this.classList.contains("active") ? this.close() : this.open(); + } + + connected() { + // Close menu when a link is clicked + [...document.querySelectorAll("a")].forEach(element => element.addEventListener("click", () => this.close())); + } +} + +globalThis.customElements.define(TAG_NAME, HTMLNavMenuElement); \ No newline at end of file diff --git a/public/assets/media/arrow.svg b/public/assets/media/arrow.svg new file mode 100644 index 0000000..3fd37f2 --- /dev/null +++ b/public/assets/media/arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/compass-points.svg b/public/assets/media/compass-points.svg new file mode 100644 index 0000000..e97dcf2 --- /dev/null +++ b/public/assets/media/compass-points.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/compass.svg b/public/assets/media/compass.svg new file mode 100644 index 0000000..4a7390f --- /dev/null +++ b/public/assets/media/compass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/chevron.svg b/public/assets/media/icons/chevron.svg new file mode 100644 index 0000000..5f067d3 --- /dev/null +++ b/public/assets/media/icons/chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/hamburger.svg b/public/assets/media/icons/hamburger.svg new file mode 100644 index 0000000..bfa139a --- /dev/null +++ b/public/assets/media/icons/hamburger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/languages/css.svg b/public/assets/media/icons/languages/css.svg new file mode 100644 index 0000000..b19f6e1 --- /dev/null +++ b/public/assets/media/icons/languages/css.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/languages/html.svg b/public/assets/media/icons/languages/html.svg new file mode 100644 index 0000000..b1b23b5 --- /dev/null +++ b/public/assets/media/icons/languages/html.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/languages/js.svg b/public/assets/media/icons/languages/js.svg new file mode 100644 index 0000000..70a97c9 --- /dev/null +++ b/public/assets/media/icons/languages/js.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/languages/php.svg b/public/assets/media/icons/languages/php.svg new file mode 100644 index 0000000..32c9700 --- /dev/null +++ b/public/assets/media/icons/languages/php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/icons/languages/txt.svg b/public/assets/media/icons/languages/txt.svg new file mode 100644 index 0000000..082cfe9 --- /dev/null +++ b/public/assets/media/icons/languages/txt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/img/genemate-se.avif b/public/assets/media/img/genemate-se.avif new file mode 100644 index 0000000000000000000000000000000000000000..ad2eb348c50b9f0ed27254a582a08e29240d9565 GIT binary patch literal 11425 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 literal 0 HcmV?d00001 diff --git a/public/assets/media/img/icellate-com.avif b/public/assets/media/img/icellate-com.avif new file mode 100644 index 0000000000000000000000000000000000000000..67b403f7e867581b7d3d667f6ff0c2ba35f8ee8e GIT binary patch literal 8392 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 literal 0 HcmV?d00001 diff --git a/public/assets/media/img/vlw-se.avif b/public/assets/media/img/vlw-se.avif new file mode 100644 index 0000000000000000000000000000000000000000..e73bc052b96bfe24183d05b72733925536a686e6 GIT binary patch literal 5883 zcmXw3byO7W(_MN&LRz{dr6r}L8$r68rMqDl1f-j#8>G9tyI}$8ZV*sH`os4-znOF9 z-nn9?J^tMNbYH5jbSY@Pp~ z0sxL6Q`i6Te`pIb`QI~`jv!aN|2(+YN)EDhF#Xp_003~W`L6=thyeintyj(f0@?q! z`#*>HwK0ePH~czd?9R?1?qKWi-%4wcqqF0yE)Q}vb$CTQkc*@Fzd-;1Sq%U{sCy-E z9YLO;e+mK+2z&)}V|Nbm03iB53D?xY*4f_F))N5#n#hn>i4f#yXZ+85jn~5v;o!d^ zzFu`?XJ+h*13*I~W^zt8?}3L$4&t0<#_2{*1LcZdbzvO#wEjwjL6{lUe#y*Al2#cL z?nxQH=b75{@BM9#m$$>@!9_JE59(R8MXu$~jbn#E5(+U|jj)=w)R^q`y4Fgr zXDPAu0>#{k zGkk_hTZq;o5D?@@UA-F@)1c_w3y!4;Lb|GNc)4?6ho2MpQRUHc!x%bS?wiiGd70w2Dh6ws z*U$5k#(ebl8aWy3iPN9~%Ea4GvfF<&!P;-~NMoQuZp4`MN{=%$vx5^vPYQx@b>#3! z9p+KD9M9-RN?)+ZJayiFB~}TJhh}Xy3~&+nWrpx;_BO`(of!jDtH5$(vFc#cc$7Ry zVTRe}^8L)UesP#8RTe3p-5+uWHSQlD!Qe0R5 z$ObI%YVX8Ow!;#ENvN++iz7DdPyR`oF)vgtBLtP)n2p7ib2j?%&eXPJwCLPff^N`(dkOVPVH5FWyMJn6v;s_<+KvC zuzvgx%omrYIGC)8GUMlcxO!4ke=XYhDw5V>1B7M?-1|=Rn9nT;sGLKKQJQ+D*3*fZ z>aCdii0dU34u8Mc_ZQ1;mv54<3S={ulk}9R6rM0X!M}4N82Bqz_}dbOw%#b6MJYVIR1W=((<-aiht%?ikhUnOx1Mam1kK%{S1GP3OB1O6iVtM8eHSLVhOLYj6-zM-}D z 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