From 4f0f2a57f5da920af4e4310c4610b23b7c9461f0 Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Tue, 11 Feb 2025 17:16:20 +0100 Subject: [PATCH] wip: 2025-02-11T11:47:18+0100 (1739270838) --- elements/HTMLCodeDemoElement.php | 57 +++ 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 --------------- .../css/elements/HTMLCodeDemoElement.css | 70 ++++ public/assets/css/fonts.css | 8 + public/assets/css/pages/demos.css | 26 -- public/assets/css/pages/index.css | 193 ++--------- public/assets/css/pages/why.css | 15 - public/assets/css/shell.css | 324 ++++++++++++++++++ public/assets/css/shells/docs.css | 274 --------------- public/assets/css/snippets/footer.css | 5 + public/assets/fonts/roboto-mono.woff2 | Bin 0 -> 103796 bytes public/assets/js/elements/CustomElement.mjs | 32 ++ .../js/elements/HTMLCodeDemoElement.mjs | 13 + public/assets/media/compass-points.svg | 1 + public/assets/media/compass.svg | 1 + public/assets/media/icons/chevron.svg | 1 + public/assets/media/logo.svg | 2 +- public/assets/media/spinner.gif | Bin 0 -> 1806 bytes public/demos.php | 18 - public/index.php | 83 ++--- public/shell.php | 96 ++++++ .../index_assets/demo.php.php | 1 + snippets/footer.php | 18 + src/Consts.php | 11 + 90 files changed, 697 insertions(+), 1177 deletions(-) create mode 100644 elements/HTMLCodeDemoElement.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/elements/HTMLCodeDemoElement.css create mode 100644 public/assets/css/fonts.css delete mode 100644 public/assets/css/pages/demos.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/footer.css create mode 100644 public/assets/fonts/roboto-mono.woff2 create mode 100644 public/assets/js/elements/CustomElement.mjs create mode 100644 public/assets/js/elements/HTMLCodeDemoElement.mjs 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/spinner.gif delete mode 100644 public/demos.php create mode 100644 public/shell.php create mode 100644 snippets/HTMLCodeDemoElement/index_assets/demo.php.php create mode 100644 snippets/footer.php create mode 100644 src/Consts.php diff --git a/elements/HTMLCodeDemoElement.php b/elements/HTMLCodeDemoElement.php new file mode 100644 index 0000000..e1b4f77 --- /dev/null +++ b/elements/HTMLCodeDemoElement.php @@ -0,0 +1,57 @@ +namespace = array_key_exists("id", $_GET) ? $_GET["id"] : null; + + if ($this->namespace) { + $this->dir = "snippets/HTMLCodeDemoElement/{$this->namespace}/"; + + if (is_dir(VV::root($this->dir))) { + // Strip "." and ".." + $this->files = array_filter(scandir(VV::root($this->dir)), function (string $item) { + return substr($item, 0, 1) !== "."; + }); + + $this->valid = true; + } + } + } + + public function file_path(string $file): string { + return $this->dir . $file; + } + } + +?> + +
+ files as $file): ?> + + + +
+
+ + files as $file): ?> +
+ file_path($file)) ?> +
+ + +
+
+ \ No newline at end of file diff --git a/modules/docs/contribute.php b/modules/docs/contribute.php deleted file mode 100644 index 355e265..0000000 --- a/modules/docs/contribute.php +++ /dev/null @@ -1,12 +0,0 @@ - -
- -

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/elements/HTMLCodeDemoElement.css b/public/assets/css/elements/HTMLCodeDemoElement.css new file mode 100644 index 0000000..e156adf --- /dev/null +++ b/public/assets/css/elements/HTMLCodeDemoElement.css @@ -0,0 +1,70 @@ +code-demo { + --primer-color-base: 31, 31, 31; + --color-base: rgb(var(--primer-color-base)); + --height: calc(var(--padding) * 2.5); + + min-width: 700px; + border-radius: 12px; + background-color: var(--color-base); +} + +/* # Header */ + +code-demo .header { + display: flex; + 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; +} + +/* # Body */ + +code-demo .body { + padding: var(--padding); +} + +/* # Syntax highliting */ + +code-demo .mtk1 { color: #cccccc; } +code-demo .mtk2 { color: #1f1f1f; } +code-demo .mtk3 { color: #d4d4d4; } +code-demo .mtk4 { color: #000080; } +code-demo .mtk5 { color: #6a9955; } +code-demo .mtk6 { color: #569cd6; } +code-demo .mtk7 { color: #b5cea8; } +code-demo .mtk8 { color: #646695; } +code-demo .mtk9 { color: #d7ba7d; } +code-demo .mtk10 { color: #9cdcfe; } +code-demo .mtk11 { color: #f44747; } +code-demo .mtk12 { color: #ce9178; } +code-demo .mtk13 { color: #6796e6; } +code-demo .mtk14 { color: #808080; } +code-demo .mtk15 { color: #d16969; } +code-demo .mtk16 { color: #dcdcaa; } +code-demo .mtk17 { color: #4ec9b0; } +code-demo .mtk18 { color: #c586c0; } +code-demo .mtk19 { color: #4fc1ff; } +code-demo .mtk20 { color: #c8c8c8; } +code-demo .mtk21 { color: #cd9731; } +code-demo .mtk22 { color: #b267e6; } +code-demo .mtki { font-style: italic; } +code-demo .mtkb { font-weight: bold; } +code-demo .mtks { text-decoration: line-through; } \ 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/index.css b/public/assets/css/pages/index.css index 2a189f5..2363e13 100644 --- a/public/assets/css/pages/index.css +++ b/public/assets/css/pages/index.css @@ -1,188 +1,53 @@ -:root { - --wavelength: 20vw; +/* # Components */ + +section.split { + display: grid; + grid-template-columns: repeat(2, 1fr); } -body { - background-color: var(--color-deep); -} - -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; +section.split > div { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; } /* # 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: 70svh; } -section#intro h1 { - font-size: 50px; -} +/* ### Compass */ -section#intro div { - display: flex; - flex-direction: column; - justify-content: center; - align-items: baseline; -} +section#intro div.compass svg { + --size: 50svh; -/* ### Waves */ - -section.waves { - --easing: .2; - - position: relative; - height: 300px; - user-select: none; - pointer-events: none; - z-index: -1; -} - -section.waves img { - margin: auto; - margin-top: -14%; - width: 50%; - transform-origin: 50% 100%; - animation: ship 6s alternate infinite ease; -} - -@keyframes ship { - 0% { - transform: translate(0, -7px) rotate(-7deg); - } - - 100% { - transform: translate(5px, 10px) rotate(4deg); - } -} - -section.waves .wave { + width: var(--size); + height: var(--size); 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); } -@keyframes wave { - to { transform: scale(1.5) translateX(100px); } +section#intro div.compass svg.points { + opacity: .2; + animation: spin 10s alternate infinite linear; } -section.waves + section { - background-color: #4ca6ff; +@keyframes spin { + to { transform: rotate(30deg); } } -section.waves .wave:first-child { - background-image: url("/assets/media/waves/0.svg"); +section#intro div.compass svg:nth-child(2) { + --size: calc(var(--size) - 30px); + + animation-duration: 15s; + animation-direction: alternate-reverse; } -section.waves .wave:last-child { - animation-duration: 5s; - background-image: url("/assets/media/waves/1.svg"); -} +/* ## Assets */ -/* ## 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"); -} - -/* # Size queries */ - -@media (max-width: 950px) { - section.waves { - display: none; - } - - section.info container { - min-height: unset; - } - - section.info svg { - width: 300px; - } - - section#lead h1 { - font-size: 20px; - } +section#assets { + height: 100svh; } \ 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..646c426 --- /dev/null +++ b/public/assets/css/shell.css @@ -0,0 +1,324 @@ +: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: "Roboto Mono", sans-serif; + color: inherit; + font-size: inherit; +} + +::-webkit-scrollbar { + display: none; +} + +body { + display: grid; + justify-items: center; + grid-template-rows: var(--running-size) 1fr; + overscroll-behavior: none; + background-color: white; + color: black; + overflow-x: hidden; + min-height: 100svh; + font-size: 15px; +} + +body::before { + transition: 1s opacity; + content: ""; + position: absolute; + top: -5%; + right: 0; + width: 20%; + height: 5%; + border-radius: 100%; + z-index: 1000; + box-shadow: + 0 0 30svh 10svh rgba(var(--primer-color-accent), .2), + 0 0 30svh 60svh rgba(var(--primer-color-accent), .1), + 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: 100%; + display: flex; + 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; +} + +/* ### 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); +} + +/* ### 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; +} + +/* # 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 (min-width: 700px) { + :root { + --header-search-size: 250px; + } + + /* # Cornerstones */ + + body::before { + right: unset; + left: 0; + 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) + ; + } +} \ 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/footer.css b/public/assets/css/snippets/footer.css new file mode 100644 index 0000000..73fd61f --- /dev/null +++ b/public/assets/css/snippets/footer.css @@ -0,0 +1,5 @@ +footer { + width: 100%; + height: var(--running-size); + background-color: var(--color-accent); +} \ 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/elements/CustomElement.mjs b/public/assets/js/elements/CustomElement.mjs new file mode 100644 index 0000000..5499283 --- /dev/null +++ b/public/assets/js/elements/CustomElement.mjs @@ -0,0 +1,32 @@ +const PUBLIC_ELEMENT_STYLESHEET_DIR = "/assets/css/elements/"; + +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); + } +} \ No newline at end of file diff --git a/public/assets/js/elements/HTMLCodeDemoElement.mjs b/public/assets/js/elements/HTMLCodeDemoElement.mjs new file mode 100644 index 0000000..820b627 --- /dev/null +++ b/public/assets/js/elements/HTMLCodeDemoElement.mjs @@ -0,0 +1,13 @@ +import { CustomElement } from "./CustomElement.mjs"; + +export const TAG_NAME = "code-demo"; + +class HTMLCodeDemoElement extends CustomElement { + constructor() { + super(); + + this.importElementStylesheet(this.constructor.name); + } +} + +globalThis.customElements.define(TAG_NAME, HTMLCodeDemoElement); \ 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/logo.svg b/public/assets/media/logo.svg index 510be1a..5c52250 100644 --- a/public/assets/media/logo.svg +++ b/public/assets/media/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/public/assets/media/spinner.gif b/public/assets/media/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5975c047d17e5e80ab2024a712ee4dfee57693d GIT binary patch literal 1806 zcmZ?wbhEHbdXVG?IV zZ?^oGB;6SxGfwMh$947JVrUY*L6#XJAT#zRvGfR?&}Qa{$PjK>7)ZKrfbp{Ow64yh ziHcF2uXxof@<~r&V9zLM&+EE0)8XYo$yRa$M2q`Ugipb|0L4R0{!e51+1TR)mlq8p198P3n6u94ZbD?RGlsep$xDo%GBi%#xCMs7gkrq(AJ`1n!wd z+%A6P7}By#BTMFvV4#}i#~hslR1H$;e~W!Z^t#@K+quxb`I$M-v1Ne@+^85z?z zNj?%z^sWAQaoHz+CNj-9DYVEyL+A7~yWPL}>qs|45af=NLP^cq5*s(&+w+^B^n?mE zVo|g9oYu|v_EeLT`9ZG8lvu=^$hvjf37{*g$n?ohA+Q+~_+;8nfko8;7nR>#-19q> Hfx#L8XrSo} literal 0 HcmV?d00001 diff --git a/public/demos.php b/public/demos.php deleted file mode 100644 index da2e789..0000000 --- a/public/demos.php +++ /dev/null @@ -1,18 +0,0 @@ - -
- -

WIP

-

Sorry, this whole website is a work in progress.. this page especially so.

-
-
-
- -

Websites built with Vegvisir

- -
-
\ No newline at end of file diff --git a/public/index.php b/public/index.php index e422b19..f099a48 100644 --- a/public/index.php +++ b/public/index.php @@ -1,58 +1,33 @@ + -
- -
-

Vegvisir

-

A PHP and JavaScript Web Framework

-

that handles navigation and routing, and nothing else

-
-
+
+
+

Vegvisir

+

is a PHP and JavaScript web framework with

+

native soft-navigation and asset injection

+

that also gives you

+

automatic soft-navigation from an MPA-like file structure

+
+
+ + + +
-
-
- -
 
- -
-
-
-
- -

This is a framework for building complete websites with automatic soft-navigation between pages that follow a traditional "multi-page" (MPA) file structure

-
-
-
- - -
-

Soft-navigation by design

-

Vegvisir will automatically soft-navigate between your pages. Dive deeper and fetch only the parts of your site that haven't been loaded yet with the help of shells.

-
-
-
-
- - - -
-
- - -
-

TypeScript, Bootstrap, something else?

-

No problem, Vegvisir's primary ethos is to not lock you down a specific paradigm. That is why Vegvisir will always try to interfere as little as possible with how and with what you build your website by being as simple as possible.

-

Bring-Your-Own-Experience

-
-
-
-
- - -
-

It's a GNU!

-

The big names in PHP frameworks are all licensed under the permissive MIT license. This legally allows those frameworks to be used to develop proprietary malware. Vegvisir is free to use and will always respects your rights.

-

Free as in -dom AND beer

-
-
+
+
+

Asset injection

+

Vegvisir allows you to bundle your page JavaScript and CSS directly into a soft-navigated page using native PHP templating and the VV PHP class.

+
+
+ +
+ \ No newline at end of file diff --git a/public/shell.php b/public/shell.php new file mode 100644 index 0000000..26482b9 --- /dev/null +++ b/public/shell.php @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + Vegvisir + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/snippets/HTMLCodeDemoElement/index_assets/demo.php.php b/snippets/HTMLCodeDemoElement/index_assets/demo.php.php new file mode 100644 index 0000000..d769d72 --- /dev/null +++ b/snippets/HTMLCodeDemoElement/index_assets/demo.php.php @@ -0,0 +1 @@ +
<style><?= VV::css("demo.css"?></style>
    <section>
        <h1>Hello world</h1>
    </section>
<script><?= VV::css("demo.js"?></script>
\ No newline at end of file diff --git a/snippets/footer.php b/snippets/footer.php new file mode 100644 index 0000000..482b6bf --- /dev/null +++ b/snippets/footer.php @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/src/Consts.php b/src/Consts.php new file mode 100644 index 0000000..1aa6300 --- /dev/null +++ b/src/Consts.php @@ -0,0 +1,11 @@ +