diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5f18790 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +insert_final_newline = false +max_line_length = 120 + +[*.{css,scss}] +tab_width = 2 +indent_size = tab diff --git a/.eleventy.js b/.eleventy.js new file mode 100644 index 0000000..bd53224 --- /dev/null +++ b/.eleventy.js @@ -0,0 +1,88 @@ +/* jshint strict: false */ + +import {HtmlBasePlugin} from "@11ty/eleventy"; + +// noinspection JSUnusedGlobalSymbols +export default async function (eleventyConfig) { + eleventyConfig.addPlugin(HtmlBasePlugin); + + eleventyConfig.setLiquidOptions({ + // greedy: false, + // trimOutputLeft: true, + // trimOutputRight: true, + // trimTagLeft: true, + // trimTagRight : true, + }); + + eleventyConfig.setNunjucksEnvironmentOptions({ + // throwOnUndefined: true, + trimBlocks: true + }); + + eleventyConfig.addGlobalData('permalink', () => { + return (data) => `${data.page.filePathStem}.${data.page.outputFileExtension}`; + }); + + let demoMode = false; + let pageBase = demoMode ? './demo/' : './'; + + eleventyConfig.addGlobalData('hippie', { + pageBase: pageBase, + brand: 'hippie', + titlePrefix: '', + titlePostfix: ' - HIPPIE', + placeholders: { + name: 'Vorname Nachname', + address: 'Straße Nr., PLZ Ort', + phone: '+49 (0)101 1337 48', + mail: 'name@domain.tld' + }, + debugMode: true, + legacyMode: false + }); + + eleventyConfig.addShortcode('text', function (text, attrId, attrClass) { + return `${text}`; + }); + + eleventyConfig.addShortcode('link', function (target, text, attrId, attrClass) { + if (text === '') { + text = target; + } + + if (target.indexOf('@') !== -1) { + target = 'mailto:' + target; + } + + return `${text}`; + }); + + eleventyConfig.addPassthroughCopy({'source/art/images': 'art'}); + + eleventyConfig.addPassthroughCopy({'source/art/favicons/**/*.+(ico|png|svg)': '.'}); + + eleventyConfig.addPassthroughCopy({'source/code/**/*.js': 'js'}); + + eleventyConfig.addPassthroughCopy({'source/data/**/*.json': 'json'}); + + eleventyConfig.addPassthroughCopy('vendor'); + eleventyConfig.addPassthroughCopy({'node_modules/bootstrap-icons': 'vendor/bootstrap-icons'}); + eleventyConfig.addPassthroughCopy({ + 'node_modules/jquery/dist/jquery.min.js': 'vendor/jquery.min.js', + 'node_modules/jquery/dist/jquery.min.map': 'vendor/jquery.min.map' + }); + eleventyConfig.addPassthroughCopy({'node_modules/hippie-script/index.js': 'vendor/hippie-script.js'}); + + eleventyConfig.addWatchTarget('./source/style/'); + + return { + dir: { + input: 'source/screens', + output: 'build', + includes: '../templates', + data: '../data' + }, + templateFormats: ['html', 'liquid', 'njk', 'md'] + // pathPrefix: './demo/' + }; +} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..30984d4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,27 @@ +module.exports = { + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "extends": "eslint:recommended", + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ] + } +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore index b251e3f..6ae690a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,67 @@ -# ========================= -# Operating System Files -# ========================= +# HIPPIE +################### +build/** +deploy/** +reports/** +source/art/sprites/ +source/art/images/sprite.* -# Windows -# ========================= +# IDE +.idea/ -# Windows image file caches +# https://gist.github.com/octocat/9257657 +################### +################### + +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes + +# https://github.com/github/gitignore +################### +################### + +# https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +################### +# Windows thumbnail cache files Thumbs.db ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump # Folder config file Desktop.ini @@ -24,27 +78,22 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -# OSX -# ========================= - -.DS_Store +# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +################### +# General +*.DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon - -# Thumbnails -._* - # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd -.Spotlight-V100 .TemporaryItems -.Trashes .VolumeIcon.icns +.com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB @@ -53,9 +102,85 @@ Network Trash Folder Temporary Items .apdisk -# ========================= -# Other files -# ========================= +https://github.com/github/gitignore/blob/master/Global/Linux.gitignore +################### +*~ +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# https://github.com/github/gitignore/blob/master/Node.gitignore +################### +# Logs +logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# https://github.com/github/gitignore/blob/master/Sass.gitignore +################### .sass-cache/ *.css.map +*.sass.map +*.scss.map \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..068fd29 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "source/style/hippie-style"] + path = source/style/hippie-style + url = https://quelltext.interaktionsweise.de/interaktionsweise/hippie-style.git + branch = development diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..24ef2fe --- /dev/null +++ b/.jshintrc @@ -0,0 +1,33 @@ +{ + "bitwise": true, + "curly": false, + "devel": true, + "eqeqeq": true, + "esversion": 11, + "forin": true, + "freeze": true, + "jquery": true, + "noarg": true, + "noempty": true, + "strict": true, + "undef": true, + "unused": false, + "browser": true, + "globals": { + "HIPPIE": false, + "hippie": true, + "viewHover": true, + "basicEase": true, + "debugOn": true, + "TimeDisplay": true, + "DateDisplay": true, + "checkButtonAndTarget": false, + "getClosestEdgeToElement": false, + "getClosestEdgeToMouse": false, + "centerElementUnderCursor": false, + "setAttributesAccordingToPosition": false, + "randomIntFrom": false, + "replaceLineBreaks": false, + "HippieTaskBar": true + } +} diff --git a/.sasslintrc b/.sasslintrc new file mode 100644 index 0000000..9fbd935 --- /dev/null +++ b/.sasslintrc @@ -0,0 +1,55 @@ +{ + "options": { + "merge-default-rules": false, + "formatter": "html" + }, + "rules": { + "extends-before-mixins": 2, + "extends-before-declarations": 2, + "placeholder-in-extend": 2, + "mixins-before-declarations": [ + 2, + { + "exclude": [ + "breakpoint", + "mq" + ] + } + ], + "no-warn": 1, + "no-debug": 1, + "no-ids": 2, + "no-important": 2, + "hex-notation": [ + 2, + { + "style": "uppercase" + } + ], + "indentation": [ + 2, + { + "size": 2 + } + ], + "property-sort-order": [ + 1, + { + "order": [ + "display", + "margin" + ], + "ignore-custom-properties": true + } + ], + "variable-for-property": [ + 2, + { + "properties": [ + "margin", + "content" + ] + } + ] + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2c9dd37 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,52 @@ +| Commit | Version | Description | +| :--- | :----: | :--- | +| 6095870ce33fd3775718a1de3d33f604fd0630ab | 0.4.2 | Javascript again | +| 50a1a6d9257b272e076c2e3b5bac39c7d17b2793 | 0.5.0 | Changes to content | +| e2bbe9273a292a3806de1599f752258a2721d067 | 0.5.1 | | +| 3d4eef5eb0a1632b43e1e3372e38a70cd4b58914 | 0.5.2 | | +| 371cb450f81cd0d692c9005952af35ec066e01e1 | 0.6.0 | New es6 coding standard | +| 175816c3595d783e7d8b48f5336fbdd54dae145b | 0.6.1 | | +| 67e3cc1eca359bc2b927b8e971ccd7ba71f4c5a2 | 0.6.2 | | +| abeb843718988fab978de7c75d6d45806f5d35a7 | 0.6.3 | | +| 4401761a6bec9db19293353942479aea7bb8ead1 | 0.6.4 | | +| 83464a1cf4ba3efc6382eafb6f68f106c6650161 | 0.6.5 | | +| 6f95393409b502fef9ad9677b3c1ed1fe07ecc28 | 0.6.6 | | +| 63b54f2749ed5a4d9a7a53c27540e7d6f8dff63d | 0.6.7 | | +| 830037f5e5237d33ad66fe89ba45167a62d87829 | 0.6.8 | | +| d205031fff29ee4d48251e30b17090143ae5458c | 0.7.0 | switched to style submodule usage | +| d18254b61d87eb3d09d17b93783117dad7d13686 | 0.7.1 | | +| 9b9b0cb1c631273f574d3cd7618bd799f561db6c | 0.7.2 | | +| 11b30671d4948dfd30b7da14fe7295f386b54257 | 0.7.3 | | +| 767b3024fa3bbededab2a8d665b4b35b55854a1c | 0.7.4 | | +| 5c3cda58b147f16e1b9fdf1ed7b5499651df943d | 0.8.0 | changes to license file and submodule update | +| 8567604ea6b129ded8b0e6108362a30d039235a7 | 0.8.1 | | +| b2ea5b01aa47783b5f797310e16f1897e1839eb9 | 0.9.0 | Requirements updated and new nunjucks variables | +| df064b8a942f00dd3277a9dde696e91324dfd166 | 0.9.1 | | +| d812ed62084c90d4fac18b6c56a6dd3bf9bd7cba | 0.9.2 | | +| 84957f75a017d5d06a32874282d9eb9f3d537534 | 0.9.3 | | +| 489786aadc30bb589be769fe627389611c4f71f5 | 0.9.4 | | +| 003a1159231241140a262ae67bb1236978b22ec0 | 0.9.5 | | +| 731c19dd61215b8f373af9100ad5c23f19a4c2a3 | 0.9.6 | | +| dd5ff43e1695d2de0b5a0a9614c1f31ad7e7b85b | 0.9.7 | | +| dde26ec45eeb8d28a986093b8b5b29d8165e5a11 | 0.9.8 | | +| 06ba1113929183f51e8501d440c950e4b4d9f0d2 | 0.9.9 | | +| 827e6c1cde0aa4ca65e6c170174eae91da9aa4c9 | 0.9.10 | | +| 202729f9ba098b5ff07f6af43acce7a67007cd1b | 0.9.11 | | +| d22828400125f8572cfbe6243e2521ffab519adf | 0.9.12 | | +| bf1a6ca7421a0385f664f864a82850f0805522c0 | 0.9.13 | | +| 32215de810546f6ebd7f552816fc5bf3281a0a13 | 0.9.14 | | +| f7dd7c93e3a06bc430fcf4e12f4be3d3b1aa29c6 | 0.10.0 | Added card and portal modules | +| f54dbe92d912b9e7553a3a2263b009ed05017b0b | 0.10.1 | | +| 6b217b6ebbfcfa2f3e14bdf41e21bb36f88050a5 | 0.10.2 | | +| 534115ff282de4648c294ae78fe768d79e23d379 | 0.10.3 | | +| f7a5481fd2e1d1c96f7e9d82eb2c3db9483b5784 | 0.10.4 | | +| 31e896462e7693a4a6ba10d52657caf919e7f482 | 0.10.5 | | +| 778d7d14d5e8d4dbcce2f9cb996afbc4d7accf27 | 0.11.0 | logPerf without JQuery | +| 1d7f2eb839472524d73f395365ffb43e8fc5d115 | 0.12.0 | Migration to new home | +| 69c04c32349d3d11820da933ed2bbd648fabb040 | 0.12.1 | | +| 9415d4d9573a4f2a4e1c479c74c59abe3a69cd57 | 0.12.2 | | +| 6e7615b44d9ef26ade73a00102878804272cf717 | 0.12.3 | | +| b6ec313f26dde6b379da16edb65de082c6ca9b65 | 0.12.4 | | +| e856e5311439d5a64478f7cda79998476ebdfe33 | 0.12.5 | | +| ef9d665849f370b2284ae8d985d9625b5083fe37 | 0.13.0 | Introduced 11ty | +| 3358e1858bc764e520dad65cc614c842b4f66245 | 0.13.1 | | \ No newline at end of file diff --git a/LICENSE b/LICENSE.md similarity index 95% rename from LICENSE rename to LICENSE.md index 58ebd36..7f1b2db 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 Stephan +Copyright (c) 2016 till today Stephan Hagedorn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index bfa9760..83ea378 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,93 @@ # HIPPIE -## USE +Hippie interweaves preeminent personal interface elements -Copy the source folder to your projects style folder. +> WORK IN PROGRESS (it is not ready to be used) -Compile the SCSS files, for example like a so `sass --watch source/:./`. +This is a [Node.js](https://nodejs.org/) based generator for static HTML documents. -Load the screen.css file within the head section of your HTML document. `` +It uses the [gulp](https://gulpjs.com/) module to fiddle everything together. Styling is powered by the CSS extension language [SASS](https://sass-lang.com/). The HTML pages itself are made with the templating engine [Nunjucks](https://mozilla.github.io/nunjucks/). + +## Installing + +Clone the repository `https://quelltext.interaktionsweise.de/interaktionsweise/hippie.git` to a folder to create your build environment. + +Change to the newly created folder. By default this would be *hippie*. + +Run the command `git submodule update --init`. +This will load the submodules. + +Run the command `npm install`. +This will install all dependencies into the folder *node_modules*. + +## Usage + +The command `gulp --tasks` will give you an overview of possible actions. + +Run the command `gulp` for a live development environment. +This will create a folder *build* with the resulting files. +Also the source files will be watched for changes which are reflected live at [localhost:3000](http://localhost:3000) and the *build* directory. + +`gulp build` will create the resulting *build* directory ready for deployment. + +HIPPIE is intended to be used as a basis when creating HTML sites. It can be used without changes. It can be modified to have a different look and feel. It also can be used to build a new basis on top of it. + +## Content + +### Intro + +There is an *intro* page which explains the main elements and their intended usage. It uses the default styling methods and also shows variations. The page is written in german language. However it has a semantic structure and the text itself can also just be seen as example content. + +### Sass (CSS) + +Everything has its default style. + +CSS classes follow a naming scheme of `_`. + +- *Object* usually is the name of the HTML element. If it is not a element directly it is the thing which receives the styling +- *Description* is a name of the style e.g. what it does, how it looks + +### JavaScript (JS) + +The codebase uses ECMAScript 2023 Language Specification (14th edition). +However, currently the JSHint configuration only allows 11 as highest version. + +ID values are written in *camelCase*. The scheme further uses parts for specific contexts. + +If the ID is for an interactive element the first part is an abbreviation of the action. + +- `add` - Add +- `qry` - Query +- `rmv` - Remove +- `set` - Set +- `slt` - Select +- `tgl` - Toggle + +## Versioning + +This project uses [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://quelltext.interaktionsweise.de/interaktionsweise/hippie/tags). + +## Contribution + +For contribution please use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#summary) specification. +The commit *type* can include the following: + +- feat – A new feature is introduced with the changes +- fix – A bug fix has occurred +- chore – Changes that do not relate to a fix or feature and don't modify src or test files (for example updating dependencies) +- refactor – Refactored code that neither fixes a bug nor adds a feature +- docs – Updates to documentation such as a the README or other markdown files +- style – Changes that do not affect the meaning of the code, likely related to code formatting such as white-space, missing semi-colons, and so on. +- test – Including new or correcting previous tests +- perf – Performance improvements +- ci – Continuous integration related +- build – Changes that affect the build system or external dependencies +- revert – Reverts a previous commit + +## Authors + +**Stephan Hagedorn** - *Initial work* - [Interaktionsweise](https://interaktionsweise.de) + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6af7f1b --- /dev/null +++ b/TODO.md @@ -0,0 +1,144 @@ +# General + +- Remove gulp and legacy files +- Better README with more info for the content section + - Explain eleventy usage +- Complete CHANGELOG +- Automatic versioning for package.json and CHANGELOG +- Add dynamic content to robots.txt during build process +- Add dynamic content to sitemap.xml + +# CSS + +- Check style for every basic element +- Uniform spelling of classes and identifiers +- Direct class dependencies instead of repeating element names in classes +- Change io stuff + - Find name for styled interactive elements + - Find name for io module with nested class names +- Change demo module + - Keep placeholder and demo stuff + - Move other things + - Prevent styles to be global + +# JS + +- Use delegation for action attributes like: https://javascript.info/event-delegation#delegation-example-actions-in-markup +- Proxy for class options: https://javascript.info/proxy + +# Content + +- *Intro* + - Complete with description for all basic elements, according to [HTML Standard - The elements of HTML](https://html.spec.whatwg.org/multipage/semantics.html#semantics) + - Sections + - [x] body + - [x] article + - [x] section + - [x] nav + - [x] aside + - [x] h1-h6 + - [x] hgroup + - [x] header + - [x] footer + - [x] address (put to grouping content) + - Grouping content + - [x] p + - [x] hr + - [x] pre + - [x] blockquote + - [x] ol + - [x] ul + - [ ] menu (new) + - [x] li + - [x] dl + - [x] dt + - [x] dd + - [x] figure + - [x] figcaption + - [x] main + - [ ] search (new) + - [x] div + - Text-level semantics + - [x] a + - [x] em + - [x] strong + - [x] small + - [x] s + - [x] cite + - [x] q + - [x] dfn + - [x] abbr + - [x] ruby + - [x] rb (deprecated) + - [x] rt + - [x] rtc (deprecated) + - [x] rp + - [x] data + - [x] time + - [x] code + - [x] var + - [x] samp + - [x] kbd + - [x] sub + - [x] sup + - [x] i + - [x] b + - [x] u + - [x] mark + - [x] bdi + - [x] bdo + - [x] span + - [x] br (mentioned in grouping content) + - [x] wbr + - Edits + - [x] ins + - [x] del + - Embedded content + - [x] picture + - [x] source + - [x] img + - [ ] iframe + - [ ] embed + - [ ] object + - [ ] param (deprecated) + - [ ] video + - [ ] audio + - [ ] track + - [ ] map + - [ ] area + - Tabular data + - [ ] table + - [ ] caption + - [ ] colgroup + - [ ] col + - [ ] tbody + - [ ] thead + - [ ] tfoot + - [ ] tr + - [ ] td + - [ ] th + - Forms + - [x] form + - [x] label + - [x] input + - [x] button + - [ ] select + - [ ] datalist + - [ ] optgroup + - [ ] option + - [ ] textarea + - [ ] output + - [ ] progress + - [ ] meter (new) + - [x] fieldset + - [x] legend + - Interactive elements + - [ ] details + - [ ] summary + - [ ] dialog + - Scripting + - [ ] script + - [ ] noscript + - [ ] template + - [ ] slot + - [ ] canvas \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0f4acd1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2121 @@ +{ + "name": "hippie", + "version": "0.13.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hippie", + "version": "0.13.1", + "license": "MIT", + "dependencies": { + "@11ty/eleventy": "^3.1.2", + "@11ty/eleventy-upgrade-help": "^3.0.2", + "bootstrap-icons": "^1.13.1", + "hippie-script": "git+https://quelltext.interaktionsweise.de/interaktionsweise/hippie-script.git", + "jquery": "^3.7.1", + "sass": "^1.93.0" + }, + "devDependencies": { + "normalize.css": "^8.0.1" + } + }, + "node_modules/@11ty/dependency-tree": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-4.0.2.tgz", + "integrity": "sha512-RTF6VTZHatYf7fSZBUN3RKwiUeJh5dhWV61gDPrHhQF2/gzruAkYz8yXuvGLx3w3ZBKreGrR+MfYpSVkdbdbLA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1" + } + }, + "node_modules/@11ty/dependency-tree-esm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.4.tgz", + "integrity": "sha512-MYKC0Ac77ILr1HnRJalzKDlb9Z8To3kXQCltx299pUXXUFtJ1RIONtULlknknqW8cLe19DLVgmxVCtjEFm7h0A==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.7", + "acorn": "^8.15.0", + "dependency-graph": "^1.0.0", + "normalize-path": "^3.0.0" + } + }, + "node_modules/@11ty/eleventy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.2.tgz", + "integrity": "sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg==", + "license": "MIT", + "dependencies": { + "@11ty/dependency-tree": "^4.0.0", + "@11ty/dependency-tree-esm": "^2.0.0", + "@11ty/eleventy-dev-server": "^2.0.8", + "@11ty/eleventy-plugin-bundle": "^3.0.6", + "@11ty/eleventy-utils": "^2.0.7", + "@11ty/lodash-custom": "^4.17.21", + "@11ty/posthtml-urls": "^1.0.1", + "@11ty/recursive-copy": "^4.0.2", + "@sindresorhus/slugify": "^2.2.1", + "bcp-47-normalize": "^2.3.0", + "chokidar": "^3.6.0", + "debug": "^4.4.1", + "dependency-graph": "^1.0.0", + "entities": "^6.0.1", + "filesize": "^10.1.6", + "gray-matter": "^4.0.3", + "iso-639-1": "^3.1.5", + "js-yaml": "^4.1.0", + "kleur": "^4.1.5", + "liquidjs": "^10.21.1", + "luxon": "^3.6.1", + "markdown-it": "^14.1.0", + "minimist": "^1.2.8", + "moo": "^0.5.2", + "node-retrieve-globals": "^6.0.1", + "nunjucks": "^3.2.4", + "picomatch": "^4.0.2", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.6", + "posthtml-match-helper": "^2.0.3", + "semver": "^7.7.2", + "slugify": "^1.6.6", + "tinyglobby": "^0.2.14" + }, + "bin": { + "eleventy": "cmd.cjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz", + "integrity": "sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1", + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "finalhandler": "^1.3.1", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.4", + "please-upgrade-node": "^3.2.0", + "send": "^1.1.0", + "ssri": "^11.0.0", + "urlpattern-polyfill": "^10.0.0", + "ws": "^8.18.1" + }, + "bin": { + "eleventy-dev-server": "cmd.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-plugin-bundle": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.7.tgz", + "integrity": "sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.2", + "debug": "^4.4.0", + "posthtml-match-helper": "^2.0.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-upgrade-help": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-upgrade-help/-/eleventy-upgrade-help-3.0.2.tgz", + "integrity": "sha512-1vnYgNQ0vPSSuD7fVa0wGFn1EUr6zqffj203rdO+yC0xUFp5E55Io2JHuVXY7oLxFpFEIsWaTNKHcIG77C6TPA==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.3", + "kleur": "^4.1.5", + "minimist": "^1.2.8", + "posthtml-match-helper": "^2.0.3", + "semver": "^7.7.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz", + "integrity": "sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@11ty/eleventy/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@11ty/eleventy/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@11ty/lodash-custom": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", + "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/posthtml-urls": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.2.tgz", + "integrity": "sha512-0vaV3Wt0surZ+oS1VdKKe0axeeupuM+l7W/Z866WFQwF+dGg2Tc/nmhk/5l74/Y55P8KyImnLN9CdygNw2huHg==", + "license": "MIT", + "dependencies": { + "evaluate-value": "^2.0.0", + "http-equiv-refresh": "^2.0.1", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@11ty/recursive-copy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.3.tgz", + "integrity": "sha512-SX48BTLEGX8T/OsKWORsHAAeiDsbFl79Oa/0Wg/mv/d27b7trCVZs7fMHvpSgDvZz/fZqx5rDk8+nx5oyT7xBw==", + "license": "ISC", + "dependencies": { + "errno": "^1.0.0", + "junk": "^3.1.0", + "maximatch": "^0.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-normalize": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", + "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", + "license": "MIT", + "dependencies": { + "bcp-47": "^2.0.0", + "bcp-47-match": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz", + "integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/errno/-/errno-1.0.0.tgz", + "integrity": "sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ==", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm-import-transformer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz", + "integrity": "sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/evaluate-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/evaluate-value/-/evaluate-value-2.0.0.tgz", + "integrity": "sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/hippie-script": { + "version": "1.2.1", + "resolved": "git+https://quelltext.interaktionsweise.de/interaktionsweise/hippie-script.git#dfc13e61586fbf466a7bbdb5667c5b02f41abd44", + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/http-equiv-refresh": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz", + "integrity": "sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/iso-639-1": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", + "integrity": "sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/liquidjs": { + "version": "10.24.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.24.0.tgz", + "integrity": "sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==", + "license": "MIT", + "dependencies": { + "commander": "^10.0.0" + }, + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "node_modules/list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", + "license": "MIT" + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "license": "MIT", + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "node_modules/morphdom": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.8.tgz", + "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-retrieve-globals": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz", + "integrity": "sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", + "esm-import-transformer": "^3.0.3" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "peer": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-match-helper": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz", + "integrity": "sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "posthtml": "^0.16.6" + } + }, + "node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/ssri": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-11.0.0.tgz", + "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "license": "MIT" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..99b4954 --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "hippie", + "version": "0.13.1", + "description": "Hippie interweaves preeminent personal interface elements", + "keywords": [ + "hippie", + "www site template" + ], + "homepage": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie", + "bugs": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie/issues", + "license": "MIT", + "author": "Stephan Hagedorn (https://karte.interaktionsweise.de)", + "main": "", + "repository": { + "type": "git", + "url": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie.git" + }, + "type": "module", + "scripts": { + "hello": "echo -n \"This is \" && node -p \"process.env.npm_package_name\" | tr '[:lower:]' '[:upper:]'", + "test": "echo \"Error: no test specified\" && exit 1", + "clean": "npm run clean:build & npm run clean:deploy & npm run clean:report & npm run clean:test", + "clean:build": "rm -rf build/*", + "clean:deploy": "rm -rf deploy/*", + "clean:report": "rm -rf report/*", + "clean:test": "rm -rf test/*", + "style:compile": "sass source/style:build/css --load-path=vendor", + "style:deploy": "sass source/style:deploy/css --load-path=vendor", + "style:watch": "sass --watch source/style:build/css --load-path=vendor", + "build:new": "npm run clean:build && npx @11ty/eleventy && npm run style:compile", + "build": "npx @11ty/eleventy && npm run style:compile", + "deploy": "npm run clean:deploy && npx @11ty/eleventy --output=deploy --pathprefix=hippie && npm run style:deploy", + "serve": "npm run style:watch & npx @11ty/eleventy --serve" + }, + "private": true, + "devDependencies": { + "normalize.css": "^8.0.1" + }, + "dependencies": { + "@11ty/eleventy": "^3.1.2", + "@11ty/eleventy-upgrade-help": "^3.0.2", + "bootstrap-icons": "^1.13.1", + "hippie-script": "git+https://quelltext.interaktionsweise.de/interaktionsweise/hippie-script.git", + "jquery": "^3.7.1", + "sass": "^1.93.0" + } +} diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..aa661c6 --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +user-agent: * +disallow: /private/ +sitemap: http://domain.tld/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..5778295 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,10 @@ + + + + + http://domain.tld/ + YYYY-MM-DD + monthly + 1.0 + + \ No newline at end of file diff --git a/source/art/favicons/favicon.ico b/source/art/favicons/favicon.ico new file mode 100644 index 0000000..745351c Binary files /dev/null and b/source/art/favicons/favicon.ico differ diff --git a/source/art/images/bullet.gif b/source/art/images/bullet.gif new file mode 100644 index 0000000..55a84ab Binary files /dev/null and b/source/art/images/bullet.gif differ diff --git a/source/art/images/flag_websafe_128x80.gif b/source/art/images/flag_websafe_128x80.gif new file mode 100644 index 0000000..7be5d95 Binary files /dev/null and b/source/art/images/flag_websafe_128x80.gif differ diff --git a/source/art/images/flag_websafe_128x80.webp b/source/art/images/flag_websafe_128x80.webp new file mode 100644 index 0000000..71a25db Binary files /dev/null and b/source/art/images/flag_websafe_128x80.webp differ diff --git a/source/code/drag.js b/source/code/drag.js new file mode 100644 index 0000000..7bdd8e9 --- /dev/null +++ b/source/code/drag.js @@ -0,0 +1,115 @@ +// Creates a div element which is draggable +class NewDiv { + constructor(x, y, width, height, backgroundColor, content) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.backgroundColor = backgroundColor; + this.element = null; + this.content = content; + } + + // Create the div element + createDiv() { + this.element = this._content; + this.element.style.position = 'absolute'; + this.element.style.left = `${this.x}px`; + this.element.style.top = `${this.y}px`; + this.element.style.width = `${this.width}px`; + this.element.style.height = `${this.height}px`; + this.element.style.background = this.backgroundColor; + this.element.style.cursor = 'move'; + + // Add event listeners for dragging + let isDown = false; + let offset = [0, 0]; + + this + .element + .addEventListener('mousedown', (event) => { + if (event.button === 0) { // Left mouse button + isDown = true; + offset = [ + this.element.offsetLeft - event.clientX, + this.element.offsetTop - event.clientY + ]; + } + }); + + document.addEventListener('mouseup', () => { + isDown = false; + }); + + document.addEventListener('mousemove', (event) => { + if (isDown) { + const maxX = window.innerWidth - this.element.offsetWidth; + const maxY = window.innerHeight - this.element.offsetHeight; + let x = event.clientX + offset[0]; + let y = event.clientY + offset[1]; + + // Boundary checks + if (x < 0) + x = 0; + if (y < 0) + y = 0; + if (x > maxX) + x = maxX; + if (y > maxY) + y = maxY; + + this.element.style.left = `${x}px`; + this.element.style.top = `${y}px`; + } + }); + + // Save position and size + const saveData = () => { + const data = { + x: this.element.offsetLeft, + y: this.element.offsetTop, + width: this.element.offsetWidth, + height: this.element.offsetHeight + }; + // Save data to local storage or a database + localStorage.setItem(`divData${this.element.id}`, JSON.stringify(data)); + }; + + // Load saved data + const loadData = () => { + const data = localStorage.getItem(`divData${this.element.id}`); + if (data) { + const parsedData = JSON.parse(data); + this.element.style.left = `${parsedData.x}px`; + this.element.style.top = `${parsedData.y}px`; + this.element.style.width = `${parsedData.width}px`; + this.element.style.height = `${parsedData.height}px`; + } + }; + + // Call the save function when the user stops dragging + document.addEventListener('mouseup', saveData); + + // Load saved data on page load + loadData(); + } + + // FIXME: this.element wird von appendToFrame() verwendet + get content() { + return this._content = this.content; + } + + set content(value) { + if (!value) { + value = document.createElement('div'); + } + + this._content = value; + } + + // Append the div to the space + appendToFrame(space) { + this.element.id = `newDiv${space.children.length}`; + space.appendChild(this.element); + } +} diff --git a/source/code/hippie/app.js b/source/code/hippie/app.js new file mode 100644 index 0000000..d5f077f --- /dev/null +++ b/source/code/hippie/app.js @@ -0,0 +1,723 @@ +// TODO: Inhalte angleichen nach Zusammenfassung von app.js und function.js. +// Benennung und Beschreibungen verbessern. + +// This is called everytime +function setup() { + 'use strict'; + + console.group('Document information'); + console.info('\n', HIPPIE.brand, '\n\n'); + console.info('HTML:', hippie.screen, '\nBODY:', hippie.body); + console.groupEnd(); + if (debugOn) { + console.group('Debug information'); + console.dir(hippie); + console.groupEnd(); + } +} + +// MODULE Scroll navigation +// Using constructor function +function HippieScroll($tp, $dn) { + 'use strict'; + + // this.$tp = $tp; + // Define initial situation + let initLeft = false; + const initY = hippie.screen.vh; + + $tp.addClass('di_none'); + + // Check scroll position and toggle element + this.check = function () { + hippie.screen.y = Math.min($(document).scrollTop(), document.documentElement.scrollTop); + if (hippie.screen.y > initY) { + if (!initLeft) { + $tp.removeClass('di_none'); + console.info('Initial viewport left'); + } + initLeft = true; + } else { + if (initLeft) { + $tp.addClass('di_none'); + console.info('Initial viewport entered'); + } + initLeft = false; + } + }; + + // Add events to navigation elements + $tp.click(function (event) { + event.preventDefault(); + $('html, body').stop().animate({ + scrollTop: 0 + }, basicEase); + // console.log('Scrolled to top'); + }); + $dn.click(function (event) { + event.preventDefault(); + const pos = Math.max(hippie.screen.dh, hippie.body.h) - hippie.screen.vh; + $('html').scrollTop(pos); + // document.documentElement.scrollTop = pos; + console.info('Scrolled down to', pos); + }); +} + +function HippieFade(toggleElement, initState) { + 'use strict'; + + const fragment = document.createDocumentFragment(); + const overlay = document.createElement('div'); + + overlay.id = 'mouse-overlay'; + + if (initState) { + overlay.classList.add('active'); + } + + toggleElement.addEventListener('click', function () { + overlay.classList.toggle('active'); + }); + + fragment.appendChild(overlay); + document.body.style.position = 'relative'; + document.body.prepend(fragment); +} + +// MODULE Meta elements +function HippieMeta($ma, $pp) { + 'use strict'; + + let metaOn = false; + + $ma.click(function () { + let $wrap, $pop; + + // if (metaOn !== true) { + if (!metaOn) { + metaOn = true; + + $pp.each(function () { + // if ($(this).css('position') === 'static') { + // $(this).addClass('js_changed_pos'); + // $(this).css('position', 'relative'); + // } + // $pop = $(this).next('.exp_pop').detach(); + // $wrap = $(this).wrap('').parent().prepend('').prepend(''); + // $wrap.after($pop); + + $('
').addClass('exp_overlay').css({ + position: 'absolute', + width: '100%', + height: '100%', + top: 0, + left: 0 + }).appendTo($(this).addClass('exp_wrap')); + + // Displays explanation popup following the mouse + $(this).on({ + mouseenter: function () { + // if ($(this).attr('emmet')) { + // + // } + $(this).next('.exp_pop').show(); + }, + mouseleave: function () { + $(this).next('.exp_pop').hide(); + }, + mousemove: function (event) { + $(this).next('.exp_pop').css({ + 'top': event.pageY - $(this).next('.exp_pop').outerHeight() - 4, + 'left': event.pageX + 8 + // 'left': event.pageX - $(this).offset().left + 8 + }); + } + }); + }); + + } else { + $pp.each(function () { + $(this).off('mouseenter mouseleave mousemove'); + + $(this).removeClass('exp_wrap').find('.exp_overlay').remove(); + // $wrap = $(this).parent('.exp_wrap'); + // $pop = $wrap.next('.exp_pop').detach(); + // $wrap.find('.exp_marker_pop').remove(); + // $(this).unwrap('.exp_wrap'); + // $(this).after($pop); + // if ($(this).hasClass('js_changed_pos')) { + // $(this).css('position', ''); + // if ($(this).attr('style') === '') { + // $(this).removeAttr('style'); + // } + // $(this).removeClass('js_changed_pos'); + // } + }); + + metaOn = false; + } + console.log('Explanation mode', metaOn); + }); +} + +// Sets the href attribute to mailto: with given information +function composeMail(tag, name, prov, suffix, text, topic) { + 'use strict'; + + let trigger = tag.indexOf('.'); + let mailString = name + '@' + prov + '.' + suffix; + let textString = mailString.replace(/@/g, '(at)'); + let descString = 'Nachricht an ' + mailString; + + if (!text) { + text = mailString; + } else if (text === 'at') { + text = textString; + } else if (text === 'to') { + text = descString; + } + + if (topic) { + topic = '?subject=' + topic; + } else { + topic = ''; + } + + if (trigger === -1) { + const el = document.getElementById(tag); + const elContent = el.innerHTML; + + el.innerHTML = elContent + text; + el.setAttribute('href', 'mailto:' + mailString + topic); + } else { + const els = document.getElementsByClassName(tag.slice(1)); + + for (let el of els) { + const elContent = el.innerHTML; + + el.innerHTML = elContent + text; + el.setAttribute('href', 'mailto:' + mailString + topic); + } + } +} + +// get document coordinates of the element +// function getCoords (elem) { +// let box = elem.getBoundingClientRect(); +// +// return { +// top: box.top + pageYOffset, +// left: box.left + pageXOffset +// }; +// } + +// https://stackoverflow.com/a/488073/1444149 +// function Utils () {} +// +// Utils.prototype = { +// constructor: Utils, +// isElementInView: function (element, fullyInView) { +// var pageTop = $(window).scrollTop(); +// var pageBottom = pageTop + $(window).height(); +// var elementTop = $(element).offset().top; +// var elementBottom = elementTop + $(element).height(); +// +// if (fullyInView === true) { +// return ((pageTop < elementTop) && (pageBottom > elementBottom)); +// } else { +// return ((elementTop <= pageBottom) && (elementBottom >= pageTop)); +// } +// } +// }; +// +// var Utils = new Utils(); + +class TimeDisplay { + constructor(element, options, interval) { + this.element = element; + this.options = options || {hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false}; + this.interval = interval || 1000; + this.isPaused = false; + this.locale = navigator.language || 'en-US'; + + this.updateTime(); + + console.group('Time information'); + console.info('\nOptions:', this.options, '\n\n'); + console.info('Interval:', this.interval); + console.groupEnd(); + } + + formatTime(time) { + return time.toLocaleTimeString(this.locale, this.options); + } + + // TODO: Zeit nur im Sekundentakt aktualisieren wenn Sekunden angezeigt werden + async updateTime() { + while (true) { + if (!this.isPaused) { + const now = new Date(); + this.element.textContent = this.formatTime(now); + } + await new Promise(resolve => setTimeout(resolve, this.interval)); + } + } + + pause() { + this.isPaused = true; + } + + resume() { + this.isPaused = false; + } +} + +class DateDisplay { + constructor(element, options, direction) { + this.element = element; + this.options = options || {year: 'numeric', month: 'long', day: 'numeric'}; + this.direction = direction || 0; + + this.updateDate(); + this.checkForDateChange(); + + console.group('Date information'); + console.info('\nOptions:', this.options, '\n\n'); + console.info('Remaining minutes:', Math.floor(this.getTimeUntilNextMidnight() / 3600)); + console.groupEnd(); + } + + formatDate(date) { + const formatter = new Intl.DateTimeFormat(navigator.language, this.options); + + switch (this.direction) { + case 1: + const dateString = formatter + .formatToParts(date) + .map(({type, value}) => { + // if (type === 'day' || type === 'month') { + if (type === 'literal') { + return `${value}
`; + } else { + return value; + } + }) + .join(''); + + return dateString; + case 0: + default: + return formatter.format(date); + } + } + + updateDate() { + const now = new Date(); + + this.element.innerHTML = this.formatDate(now); + } + + changeFormat(format, direction) { + this.options = format; + this.direction = direction; + + this.updateDate(); + } + + getTimeUntilNextMidnight() { + const now = new Date(); + const nextMidnight = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1); + + return nextMidnight - now; + } + + checkForDateChange() { + const timeUntilNextMidnight = this.getTimeUntilNextMidnight(); + + setTimeout(() => { + this.updateDate(); + this.checkForDateChange(); + }, timeUntilNextMidnight); + } +} + +function checkButtonAndTarget(event, element, button = 0) { + return ( + event.button === button && + event.target === element + ); +} + +function getClosestEdgeToElement(element) { + 'use strict'; + + const bounding = element.getBoundingClientRect(); + const distances = { + top: bounding.top, + right: window.innerWidth - bounding.right, + bottom: window.innerHeight - bounding.bottom, + left: bounding.left + }; + + return Object.keys(distances).reduce((a, b) => distances[a] < distances[b] ? a : b); +} + +function getClosestEdgeToMouse(event) { + 'use strict'; + + const mouseX = event.clientX; + const mouseY = event.clientY; + const distances = { + left: mouseX, + right: window.innerWidth - mouseX, + top: mouseY, + bottom: window.innerHeight - mouseY + }; + + return Object.keys(distances).reduce((a, b) => + distances[a] < distances[b] ? a : b + ); +} + +function centerElementUnderCursor(event, element) { + 'use strict'; + + const offsetX = element.getBoundingClientRect().width / 2; + const offsetY = element.getBoundingClientRect().height / 2; + const x = event.clientX - offsetX; + const y = event.clientY - offsetY; + + element.style.left = `${x}px`; + element.style.top = `${y}px`; +} + +function setAttributesAccordingToPosition(element, position, attributes) { + 'use strict'; + + element.classList.remove(...Object.values(attributes).map(pos => pos.className)); + Object.keys(attributes[position].styles).forEach(key => { + element.style[key] = ''; + }); + + element.classList.add(attributes[position].className); + Object.entries(attributes[position].styles).forEach(([key, value]) => { + element.style[key] = value; + }); +} + +/** + * Gibt eine Zahl zwischen und aus. + * Die Werte und sind dabei mit eingeschlossen. + * Mit kann der Exponent für eine 10er-Teilung angegeben werden. + * + * @param {number} min + * @param {number} max + * @param {number} pos + * @returns {number} + */ +function randomIntFrom(min, max, pos = 0) { + pos = Math.pow(10, pos); + min = Math.ceil(min); + max = Math.floor(max); + + return Math.floor((Math.random() * (max - min + 1) + min) / pos) * pos; +} + +function randomFloatFrom(min, max, dec = 0) { + dec = Math.pow(10, dec); + + return Math.round((Math.random() * (max - min + 1) + min) * dec) / dec; +} + +/** + * Ersetzt \n durch
. + * + * @param {string} text + * @returns {string} + */ +function replaceLineBreaks(text) { + if (text === '' || !text.includes('\n')) { + return text; + } + + return text.split('\n').join('
'); +} + +/** + * Gibt eine zufällige Farbe als HEX-Wert aus. + * + * @returns {string} + */ +function getRandomColor() { + const letters = '0123456789ABCDEF'; + let color = '#'; + + for (let i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)]; + } + + return color; +} + +function getRandomFormattedString(chars = 2, digits = 6, separator = '-') { + const getRandomUppercase = () => String.fromCharCode(Math.floor(Math.random() * 26) + 65); + const getRandomDigit = () => Math.floor(Math.random() * 10); + let string = ''; + + for (let i = 0; i < chars; i++) { + string += getRandomUppercase(); + } + + string += separator; + + for (let i = 0; i < digits; i++) { + string += getRandomDigit(); + } + + return string; +} + +function toggleColumn(table, index) { + const rows = table.rows; + const isHidden = rows[0].cells[index].classList.contains('di_none'); + + for (let i = 0; i < rows.length; i++) { + const cell = rows[i].cells[index]; + + if (isHidden) { + cell.classList.remove('di_none'); + } else { + cell.classList.add('di_none'); + } + } +} + +function convertToRomanNumeral(num) { + const romanNumeralMap = [ + {value: 1000, numeral: 'M'}, + {value: 900, numeral: 'CM'}, + {value: 500, numeral: 'D'}, + {value: 400, numeral: 'CD'}, + {value: 100, numeral: 'C'}, + {value: 90, numeral: 'XC'}, + {value: 50, numeral: 'L'}, + {value: 40, numeral: 'XL'}, + {value: 10, numeral: 'X'}, + {value: 9, numeral: 'IX'}, + {value: 5, numeral: 'V'}, + {value: 4, numeral: 'IV'}, + {value: 1, numeral: 'I'} + ]; + + let result = ''; + for (let i = 0; i < romanNumeralMap.length; i++) { + while (num >= romanNumeralMap[i].value) { + result += romanNumeralMap[i].numeral; + num -= romanNumeralMap[i].value; + } + } + return result; +} + +function capitalizeFirstLetter(text) { + return text.charAt(0).toUpperCase() + text.slice(1); +} + +function mapRange(value, inMin, inMax, outMin, outMax, reverse = false, clamp = false) { + let min = outMin; + let max = outMax; + + if (reverse) { + [min, max] = [max, min]; + } + + const mapped = (value - inMin) * (max - min) / (inMax - inMin) + min; + + if (clamp) { + return Math.max(Math.min(min, max), Math.min(Math.max(min, max), mapped)); + } + return mapped; +} + +// CONCEPTS + +// NOTE: Benutzt private Zuweisungen +class elementBinder { + #element; + + constructor(element) { + this.#setElement(element); + } + + #setElement(value) { + if (!value) { + throw new Error('No element found'); + } + this.#element = value; + this.#element.style.background = "hotpink"; + } + + get element() { + return this.#element; + } + + set element(value) { + this.#setElement(value); + } +} + +//OLD + +function Clock(id) { + 'use strict'; + + this.id = id; + const that = this; + + setInterval(function () { + that.updateClock(); + }, 1000); + this.updateClock(); +} + +Clock.prototype.updateClock = function () { + 'use strict'; + + const date = new Date(); + const clock = document.getElementById(this.id); + //console.log(this); + clock.innerHTML = this.formatDigits(date.getHours()) + ':' + this.formatDigits(date.getMinutes()) + ":" + this.formatDigits(date.getSeconds()); +}; + +Clock.prototype.formatDigits = function (val) { + 'use strict'; + + if (val < 10) val = '0' + val; + + return val; +}; + +function ongoing() { + + var now = new Date(); + + var w = Math.floor(now.getDay()); + var D = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']; + var DNumb = Math.floor(now.getDate()); + var MNumb = Math.floor(now.getMonth()); + var M = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'MaiOktober', 'November', 'Dezember']; + var y = Math.floor(now.getYear()); + if (y < 999) y += 1900; + + var ms = Math.floor(now.getMilliseconds()); + var s = Math.floor(now.getSeconds()); + var m = Math.floor(now.getMinutes() + s / 60); + var h = Math.floor(now.getHours() + m / 60); + + var j2000 = new Date(); // Bezugspunkt ist der 1.1.2000 0:00 UT (entspricht JD 2451544,5) + j2000.setUTCFullYear(2000, 0, 1); + j2000.setUTCHours(0, 0, 0, 0); + + var utc = new Date(); + utc.setUTCFullYear(y, MNumb, DNumb); // Monate müssen im Wertebereich 0...11 übergeben werden + utc.setUTCHours(h, m, s, ms); + + var utc0 = new Date(); + utc0.setUTCFullYear(y, MNumb, DNumb); + utc0.setUTCHours(0, 0, 0, 0); + + var jd = 2451544.5 + (utc - j2000) / 86400000; // Zählung erfolgt in Millisekunden, 1 Tag = 86.400.000 ms + var jdUTC0 = 2451544.5 + (utc0 - j2000) / 86400000; + + var N = jd - 2451545.0; + var L = 280.460 + 0.9856474 * N; // mittlere ekliptikale Länge der Sonne + var g = 357.528 + 0.9856003 * N; // mittlere Anomalie + var el = L + 1.915 * Math.sin(g) + 0.020 * Math.sin(2 * g); + var e = 23.439 - 0.0000004 * N; + var rektaszension = Math.atan((Math.cos(e) * Math.sin(el)) / Math.cos(el)); + + var T = (jdUTC0 - 2451545.0) / 36525; + var stGMT = (((6 * 3600) + (41 * 60) + 50.54841) + (8640184.812866 * T) + (0.093104 * Math.pow(T, 2)) - (0.0000062 * Math.pow(T, 3))) / 3600; + + var stGMT2 = 6.697376 + 2400.05134 * T + 1.002738 * T; + var hWGMT = stGMT2 * 15; + var hW = hWGMT + 11.9566185772; + + var st = (stGMT + (now.getUTCHours() * 1.00273790935)) + (11.9566185772 / 15); // Sommerzeit muss noch berücksichtigt werden + var st24 = Math.abs(st - (Math.round(st / 24) * 24)); + var stH = Math.floor(st24); + var stM = Math.floor((st24 % 1) * 60); + var stS = zeroFill(Math.floor((((st24 % 1) * 60) % 1) * 60), 2); + + var travelWidth = document.body.clientWidth; + var travelHeight = document.body.clientHeight; + var sunPosX = 0; + var sunPosY = 0; + var moonPosX = 0; + var moonPosY = 0; + + var sun = $('#sun').css({ + 'left': (s / 60) * travelWidth, + 'top': (m / 60) * travelHeight + }); + + $('#day').text(D[w]); + $('#dayNumb').text(DNumb); + $('#month').text(M[MNumb]); + $('#year').text(y); + $('#time').text('' + zeroFill(h, 2) + ':' + zeroFill(m, 2) + ':' + zeroFill(s, 2)); + + $('#julian').text(jd.toFixed(6)); + //$('#star').text(stH + ':' + stM + ':' + stS); + $('#star').text(stH + ':' + stM); + $('#star1').text(stGMT); + $('#star2').text(stGMT2); +} + +function zeroFill(number, width) { + width -= number.toString().length; + if (width > 0) { + return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number; + } + return number + ''; // always return a string +} + +//Länge der Balken im Diagram berechnen +function barwidth(size, G, W) { + var s = size; + var g = G; + var w = W; + var p = (w / g) * 100; + var newW = s * (p / 100); + + return newW; +} + +//String Element erweitern +String.prototype.transform = function () { + return parseFloat(this.replace(',', '.')); +} +//Array Element erweitern +Array.prototype.arrayAdd = function () { + return eval(this.join('+')); +} + +//Speicherplatz in Prozent berechnen +function percentage(total, gigs, round) { + var totalSpace = total; + var singleSpace = gigs; + var z = round; + var p = singleSpace / (totalSpace / 100); + + return p; +} + +//Speicherplatz in GB berechnen +function gigabytes(percent, total, round) { + var occupiedPercent = percent; + var singleSpace = total; + var z = round; + var g = (singleSpace / 100) * occupiedPercent; + + return g; +} diff --git a/source/code/hippie/globals.js b/source/code/hippie/globals.js new file mode 100644 index 0000000..638c7ba --- /dev/null +++ b/source/code/hippie/globals.js @@ -0,0 +1,27 @@ +let hippie = { + screen: { + w: Math.max(document.documentElement.offsetWidth, document.documentElement.clientWidth, window.innerWidth, 0), + vh: Math.max(document.documentElement.clientHeight, window.innerHeight, 0), + dh: Math.max(document.documentElement.offsetHeight, document.documentElement.clientHeight, 0), + y: document.documentElement.scrollTop + // hippie.screen.y: document.documentElement.scrollTop + }, + body: { + w: Math.max(document.body.offsetWidth, document.body.clientWidth, window.innerWidth, 0), + h: Math.max(document.body.offsetHeight, document.body.clientHeight, 0), + } +}; +let viewHover = true; +let basicEase = 600; + +const flagColors = [ + 'fad803', + 'f2af13', + 'd30a51', + '8e1f68', + '273f8b', + '3c579a', + 'b7e0f0', + '6bc7d9', + '52bed1' +]; \ No newline at end of file diff --git a/source/code/intro.js b/source/code/intro.js new file mode 100644 index 0000000..bff5a87 --- /dev/null +++ b/source/code/intro.js @@ -0,0 +1,310 @@ +class Intro { + constructor(name) { + this.name = name; + } + + init() { + return new Promise((resolve) => { + console.log('%s Init', this.name); + + resolve(); + }); + } +} + +class UI { + constructor() { + this.introDelay = 6; + this.hintDelay = 1; + this.isAgree = false; + this.steps = { + agreement: { + element: document.getElementById('agreement'), + msgIn: 'Agreement shown.', + msgOut: 'Agreement accepted.', + msgNo: 'No agreement today.' + } + }; + this.intro = document.getElementById('intro'); + this.agreement = this.steps.agreement.element; + this.hint = { + element: document.getElementById('hint'), + delay: this.hintDelay * 1000 + }; + this.loader = document.getElementById('loader'); + } + + showIntro() { + const el = this.intro; + const dy = this.introDelay * 1000; + + document.addEventListener('click', hintHandler, false); + document.addEventListener('keydown', hintHandler, false); + + return new Promise((resolve, reject) => { + if (el) { + console.info("Intro begin."); + + el.classList.replace('op_hide', 'op_show'); + setTimeout( + () => { + el.classList.replace('op_show', 'op_hide'); + el.addEventListener('transitionend', () => { + console.info("Intro fin."); + + el.classList.add('di_none'); + resolve("Intro fin."); + }); + }, + dy + ); + } else { + reject('No intro available.'); + } + }) + } + + showHint() { + if (typeof this.hint.timeoutId === 'number') { + this.cancelHint(); + } + + this.hint.element.classList.remove('di_none'); + + this.hint.timeoutId = setTimeout( + () => { + this.dismissHint(); + }, + this.hint.delay + ); + } + + dismissHint() { + this.hint.element.classList.add('di_none'); + this.hint.timeoutId = undefined; + } + + cancelHint() { + clearTimeout(this.hint.timeoutId); + } + + showIdle() { + const el = document.getElementById('idle'); + + return new Promise((resolve, reject) => { + if (el) { + console.info('Idle.'); + + el.classList.replace('op_hide', 'op_show'); + resolve('Idle.'); + } else { + reject(); + } + }) + } + + init() { + return new Promise((resolve) => { + console.log('Init'); + + resolve(); + }); + } +} + +function init() { + return new Promise((resolve) => { + console.log('Init'); + + // Set all steps to not receive pointer events + document.querySelectorAll('.step').forEach(element => { + console.log(element); + + element.style.pointerEvents = 'none'; + }); + + resolve(); + }); +} + +function showIntro() { + const el = intro; + const dy = introDelay * 1000; + + document.addEventListener('click', hintHandler, false); + document.addEventListener('keydown', hintHandler, false); + + return new Promise((resolve, reject) => { + if (el) { + console.info("Intro begin."); + + el.classList.replace('op_hide', 'op_show'); + setTimeout( + () => { + el.classList.replace('op_show', 'op_hide'); + el.addEventListener('transitionend', () => { + console.info("Intro fin."); + + el.classList.add('di_none'); + + resolve("Intro fin."); + }); + }, + dy + ); + } else { + document.removeEventListener('click', hintHandler); + document.removeEventListener('keydown', hintHandler); + + reject('No intro available.'); + } + }) +} + +function showAgreement() { + document.removeEventListener('click', hintHandler); + document.removeEventListener('keydown', hintHandler); + const el = agreement; + const dy = introDelay * 1000; + + return new Promise((resolve, reject) => { + if (el) { + console.info(steps.agreement.msgIn); + + el.classList.replace('op_hide', 'op_show'); + el.style.pointerEvents = ''; + + el.addEventListener('click', agreeHandler); + document.addEventListener('keydown', agreeHandler); + } else { + reject(steps.agreement.msgNo); + } + + function agreeHandler() { + const el = agreement; + + isAgree = true; + + el.classList.replace('op_show', 'op_hide'); + el.addEventListener('transitionend', function endListener() { + console.info(steps.agreement.msgOut); + + el.removeEventListener('transitionend', endListener); + el.removeEventListener('click', agreeHandler); + document.removeEventListener('keydown', agreeHandler); + el.classList.add('di_none'); + + resolve(steps.agreement.msgOut); + }); + } + }) +} + +function showIdle() { + const el = document.getElementById('idle'); + + document.addEventListener('mouseleave', idleStart, false); + document.addEventListener('mouseenter', idleStop, false); + + return new Promise((resolve, reject) => { + if (el) { + console.info('Idle.'); + + el.classList.replace('op_hide', 'op_show'); + el.style.pointerEvents = ''; + el.addEventListener('click', idleStart, false); + + resolve('Idle.'); + } else { + document.removeEventListener('mouseleave', idleStart); + document.removeEventListener('mouseenter', idleStop); + + reject(); + } + }) +} + +function loadCore() { + const el = loader; + const bar = loader.querySelector('#progress'); + const status = loader.querySelector('#status'); + const spinner = loader.querySelector('#spinner'); + const sp = spinner.querySelector('span'); + + let progress = 0; + + return new Promise((resolve) => { + console.info("Core loading."); + + updateProgressBar(); + + function updateProgressBar() { + const maxChunk = 33; + const time = 400; + let increment = randomIntFrom(1, maxChunk); + + progress += increment; + + if (progress >= 100) progress = 100; + // console.log(progress); + + bar.style.width = progress + '%'; + status.textContent = progress + '%'; + + if (progress < 100) { + setTimeout(updateProgressBar, time); + } else { + bar.style.width = '100%'; + sp.style.animationPlayState = 'paused'; + spinner.style.color = 'white'; + spinner.style.backgroundColor = 'black'; + el.classList.replace('op_show', 'op_hide'); + el.addEventListener('transitionend', function endListener() { + console.info("Core loaded."); + + el.removeEventListener('transitionend', endListener); + el.classList.add('di_none'); + + resolve("Core loaded."); + }); + } + } + }); +} + +/** + * Erstellt Kontext für hint-Objekt und ermöglicht das Entfernen des Ereignis. + */ +function hintHandler() { + hint.show(); +} + +function idleStart() { + idle.cycle(); +} + +function idleStop() { + idle.cancel(); +} + +/** + * Blendet einen Schritt aus. + * + * @param {*} e + * @returns + */ +function stepHandler(e) { + const el = e.target; + const msg = steps[el.id].msgOut; + + return new Promise(function (resolve) { + el.classList.replace('op_show', 'op_hide'); + el.addEventListener('transitionend', function endListener() { + console.info(msg); + + el.removeEventListener('transitionend', endListener); + + resolve(msg); + }); + }) +} \ No newline at end of file diff --git a/source/code/windows.js b/source/code/windows.js new file mode 100644 index 0000000..8a115a9 --- /dev/null +++ b/source/code/windows.js @@ -0,0 +1,201 @@ +class HippieTaskBar { + constructor(element, placeholder, options) { + this.element = element; + this.placeholder = placeholder; + this.date = null; + this.isDragging = false; + this.barSize = ''; + // TODO: Erweitern auf allgemeine Möglichkeiten und dann aus JSON-Datei laden + this.options = options || { + direction: 0, + position: 'bottom', + date: { + year: 'numeric', + month: '2-digit', + day: '2-digit' + } + }; + + this.init(); + } + + // TODO: Ereignisse besser delegieren + init() { + this.element.addEventListener('mousedown', this.onMouseDown.bind(this)); + document.addEventListener('mousemove', this.onMouseMove.bind(this)); + document.addEventListener('mouseup', this.onMouseUp.bind(this)); + + const dateElement = document.createElement('span'); + + dateElement.id = 'date'; + this.element.querySelector('.clock').appendChild(dateElement); + this.date = new DateDisplay(dateElement, this.options.date); + + this.setOptions(this.options.position); + } + + onMouseDown(event) { + if (checkButtonAndTarget(event, this.element, 0)) { + console.debug('Drag mode enabled'); + + this.isDragging = true; + + this.showPlaceholder(); + + centerElementUnderCursor(event, this.placeholder); + } + + event.preventDefault(); + } + + onMouseMove(event) { + if (this.isDragging) { + this.options.position = getClosestEdgeToMouse(event); + const borderRadius = '4px'; + const attributes = { + top: { + className: 'top', + styles: { + flexDirection: 'row', + borderStyle: '', + borderColor: '', + borderTopStyle: 'solid', + borderTopColor: 'white', + borderTopRightRadius: '', + borderBottomRightRadius: borderRadius, + borderBottomLeftRadius: borderRadius, + borderTopLeftRadius: '' + } + }, + right: { + className: 'right', + styles: { + flexDirection: 'column', + borderStyle: '', + borderColor: '', + borderRightStyle: 'solid', + borderRightColor: 'white', + borderTopRightRadius: '', + borderBottomRightRadius: '', + borderBottomLeftRadius: borderRadius, + borderTopLeftRadius: borderRadius + } + }, + bottom: { + className: 'bottom', + styles: { + flexDirection: 'row', + borderStyle: '', + borderColor: '', + borderBottomStyle: 'solid', + borderBottomColor: 'white', + borderTopRightRadius: borderRadius, + borderBottomRightRadius: '', + borderBottomLeftRadius: '', + borderTopLeftRadius: borderRadius + } + }, + left: { + className: 'left', + styles: { + flexDirection: 'column', + borderStyle: '', + borderColor: '', + borderLeftStyle: 'solid', + borderLeftColor: 'white', + borderTopRightRadius: borderRadius, + borderBottomRightRadius: borderRadius, + borderBottomLeftRadius: '', + borderTopLeftRadius: '' + } + } + }; + + setAttributesAccordingToPosition(this.placeholder, this.options.position, attributes); + centerElementUnderCursor(event, this.placeholder); + } + } + + onMouseUp() { + if (event.target === this.placeholder) { + console.debug('Drag mode disabled'); + + this.isDragging = false; + + this.snapToEdges(); + this.hidePlaceholder(); + } + } + + showPlaceholder() { + this.element.style.display = 'none'; + this.placeholder.style.display = 'flex'; + } + + hidePlaceholder() { + this.placeholder.style.display = 'none'; + this.element.style.display = ''; + } + + snapToEdges() { + this.setOptions(this.options.position); + this.date.changeFormat(this.options.date, this.options.direction); + } + + setOptions(position) { + const attributes = { + top: { + className: 'top', + styles: { + top: '0', right: '0', bottom: '', left: '0', + width: '', height: this.barSize, + flexDirection: 'row' + } + }, + right: { + className: 'right', + styles: { + top: '0', right: '0', bottom: '0', left: '', + width: this.barSize, height: '', + flexDirection: 'column' + } + }, + bottom: { + className: 'bottom', + styles: { + top: '', right: '0', bottom: '0', left: '0', + width: '', height: this.barSize, + flexDirection: 'row' + } + }, + left: { + className: 'left', + styles: { + top: '0', + right: '', + bottom: '0', + left: '0', + width: this.barSize, + height: '', + flexDirection: 'column' + } + } + }; + + setAttributesAccordingToPosition(this.element, position, attributes); + + switch (position) { + case 'right': + case 'left': + this.options.date = {year: '2-digit', month: '2-digit', day: '2-digit'}; + this.options.direction = 1; + break; + case 'top': + case 'bottom': + default: + this.options.date = {year: 'numeric', month: '2-digit', day: '2-digit'}; + this.options.direction = 0; + break; + } + } +} diff --git a/source/data/start.json b/source/data/start.json new file mode 100644 index 0000000..cc0da22 --- /dev/null +++ b/source/data/start.json @@ -0,0 +1,14 @@ +[ + { + "text": "Index", + "href": "/" + }, + { + "text": "Basics", + "href": "/demo/basics.html" + }, + { + "text": "Drag", + "href": "/demo/examples/ui/drag.html" + } +] \ No newline at end of file diff --git a/source/screens/demo/basics.liquid b/source/screens/demo/basics.liquid new file mode 100644 index 0000000..a300a21 --- /dev/null +++ b/source/screens/demo/basics.liquid @@ -0,0 +1,974 @@ +--- +title: Basics +tags: +- demoIndex +--- +{% layout 'hippie/page.liquid' %} + +{% block title %}Grundlagen{% endblock %} + +{% block main %} +
+ Dies ist einfach nur Text.
Weniger wäre nichts, denn dieser Text ist nicht durch ein spezifisches Element + umschlossen.
Das ist normalerweise nicht vorgesehen und wird hier nur zur Einführung und Anschauung + verwendet.

+
+

Es wirken nur die Eigenschaften des + <body> + Elements. Dieses Element umschließt den gesamten Inhalt des Dokumentes und kommt daher nur einmal vor. + Inhalte sind normalerweise durch Elemente definiert. Grundlegende Elemente teilen das Dokument zunächst in + Abschnitte.

+

Bereiche

+
+

Ein Abschnitt, welcher für sich alleine stehen kann, definiert sich durch + <article>. Solch ein Element wird oft detailliert gestaltet, kommt aber auch ohne + jegliche Gestaltung aus.

+

Noch allgemeiner ist das + <section> + Element. Es schafft Bereiche, um Inhalte zu strukturieren.

+

Bestimmte Bereiche haben einen vorgegebenen Zweck.
Folgende Bereiche sind vorgegeben:

+
+ + +
+
+

Um einleitenden Inhalt festzuhalten, wird das + <header> + Element eingesetzt. Es beinhaltet häufig auch Navigationselemente. Dabei bezieht es sich auf den + nächsten, umgebenden Abschnitt.

+ +
+
+

Auch abschließender Inhalt kann für einen Abschnitt definiert werden. Dazu wird + <footer> + eingesetzt.

+
+
+ +

Zur feineren Strukturierung und Gliederung von Texten sind einige weitere Elemente verfügbar. Diese werden + nun der Reihe nach aufgeführt. Zu Beginn die Überschriften, da sie noch zu den Abschnitten gehören. Das + kommt vermutlich daher, da Abschnitte häufig eine kennzeichnende Überschrift beinhalten.

+

Überschrift 1

+

Eine Überschrift erster Ordnung + <h1> + ist sehr groß und steht daher oft außerhalb eines Textflusses. Sie schafft eine deutliche Trennung sowohl + inhaltlich wie auch optisch. Sie erzeugt einen Abstand gleich der horizontalen Linie über sich.

+

Überschrift 2

+

Die weiteren Überschriften + <h2> + bis + <h6> + gliedern Text und werden auch als Titel für andere Elemente eingesetzt.

+

Überschrift 3 ist in Großbuchstaben gesetzt

+

Überschrift 4 verwendet normale Buchstaben und gleicht ansonsten Überschrift 3

+
Überschrift 5 ist Überschrift 5
+
+
Überschrift 6
+

Überschriften können mit dem Element <hgroup> mit Absätzen gruppiert werden, um + beispielsweise Untertitel abzubilden.

+
+
+
+

Gruppierung

+

Ein Absatz + <p>. Zugegeben ein kurzer.

+

Aus mehreren Absätzen wird ein ganzer Text. Solche Texte haben gelegentlich großen informativen oder + unterhaltsamen Charakter.
Einfache Zeilenumbrüche werden darin mit + <br> + erreicht. Dies ist allerdings ein Element der Textebene und keine Gruppierung.

+

Die Unterteilung in Absätze ist eine von vielen Möglichkeiten Texte zu gruppieren und ihnen Struktur zu + verleihen. In diesem Dokument flattert Text normalerweise von Links daher. Er ist schwarz und in einer + serifenlosen Schrift gesetzt. Zu weiteren Formatierungen, die eher auf einer Ebene der Zeichen einzuordnen + ist, wird im Verlauf näher eingegangen. Zunächst die Struktur:

+

Text sitzt gerne auch mal zentriert.

+
+ p.txt_center +
+

Rechtsbündig ist schon eher eine Ausnahme bzw. Besonderheit.

+
+ p.txt_right +
+
Das Element + <address> + hat den Zweck, Kontaktinformationen bereitzustellen. Diese werden, je nach Position des Elements im + Kontext der gesamten Seite, anders gewertet. +
+

Texte können auf verschiedene Arten unterteilt werden. Dafür werden unterschiedlich formatierte + <hr> + Elemente verwendet. Die horizontale Linie ist die Ausgangsformatierung, daher auch der abgekürzte Name des + Elements. Eine Linie ist schwarz und durchgezogen.

+
+

Es ist auch eine unsichtbare Unterteilung möglich:

+ +
+ hr.hidden +
+

Die Linie darf auch gepunktet sein. Zudem sind verschiedene Längen möglich. Diese sind immer ein Prozentwert + der verfügbaren Breite. Hier in gleicher Reihenfolge 100%, 50% und 25%:

+
+
+ hr.dotted +
+
+
+ hr.space_even_half +
+
+
+ hr.dotted.space_even_fourth +
+

Zur horizontalen Unterteilung kommt natürlich auch eine vertikale Trennung hinzu. + Text kann so zum Beispiel in mehrere Spalten unterteilt werden. Dies ist hilfreich, wenn ein Text durch eine + breite Fläche sehr lange Zeilen bekommen würde. Es ist dann schwer den neuen Zeilenanfang zu finden. Die + vertikale Trennung dient in erster Linie dazu, diesem Umstand zu begegnen. Auch hier kann die Unterteilung + viele Formen annehmen.

+
+ p.column_2 +
+

Drei Spalten gilt es jetzt also zu füllen. Dann erst wird die Trennung + der Spalten durch eine Linie sichtbar.

+
+ p.column_3.column_line +
+

Ist der Text nicht lang genug bleibt eventuell eine Spalte leer. Diesmal wird + dies aber nicht passieren, denn das Anschauungsbeispiel ist ja nun durch den vorherigen Absatz schon + gegeben.
Oft ist es sinnvoll, Absätze mit mehreren Spalten deutlich von nachfolgenden Absätzen zu + trennen. Da der Textfluss spaltenweise verläuft, liest man eventuell an der falschen Stelle weiter.
Auch + das zeigen diese beiden Absätze ganz gut.

+

Es gibt die Möglichkeit vorformatierten Text darzustellen + <pre>.

+
dadurch
bleiben
einrückungen
durch
tabulatoren
erhalten.
+

Wird Bezug auf fremde Inhalte genommen, kommt ein Zitat + <blockquote> + zur Anwendung. Es besteht aus der Aussage und der Quelle.

+
+

Ein Zitat (das, lateinisch citatum „Angeführtes, Aufgerufenes“ zu lat. citāre „in Bewegung setzen, + vorladen“, vgl. „jemanden vor Gericht zitieren“) ist eine wörtlich übernommene Stelle aus einem Text + oder ein Hinweis auf eine bestimmte Textstelle.

+

+ Wikipedia +

+
+
+ blockquote>p+p.quote_source +
+

Gerade bei wörtlichen Zitierungen kommt häufig das Anführungszeichen zum Einsatz. Es kann durch die + Formatierung automatisch ergänzt werden.

+
+

Das kannst du schon so machen aber dann isses halt Kacke.

+

o. V.

+
+
+ blockquote.quote_mark>p+p.quote_source +
+

Listen

+

Text bekommt durch Listen besondere optische wie auch inhaltliche Struktur. Es gibt ungeordnete + <ul> + und geordnete Listen + <ol> + sowie Beschreibungslisten + <dl>. Die beiden ersten Varianten beinhalten das Listenelement + <li>. Beschreibungslisten beinhalten jeweils das Paar von Ausdruck + <dt> + und Beschreibung + <dd>. Im Folgenden eine Liste der Listen in ihrer Ausgangskonfiguration:

+
    +
  • Ungeordnete
  • +
  • Listen
  • +
+
    +
  • Verschiedener
  • +
  • Art
  • +
+
    +
  1. Geordnete
  2. +
  3. Liste
  4. +
+
+
Beschreibungsliste
+
Auch Definitionslisten genannt
+
Ausdruck
+
Beschreibung
+
+

Auch Inhalte, die nicht in Textform sind, können durch einen Bezug integriert werden. Wie diese Fahne werden + sie mit + <figure> + umschlossen und tragen eine Bezeichnung, welche mit + <figcaption> + ausgezeichnet wird.

+
+
Fahne
+ {% comment %}// TODO: Durch Platzhalter ersetzten und Prozentangaben ermöglichen{% endcomment %} + + Flag + + + + + + + + + + +
+
+ figure>figcaption+{element} +
+ +

Eine sehr klar definierte Gruppierung stellt das Element + <main> + dar. Es umschließt den hauptsächlichen Inhalt des Dokumentes.

+

Eine von sich aus undefinierte Möglichkeit zur Gruppierung von Text besteht durch + <div>. Dieses Element hat, ohne weitere Klassifizierung keine Auswirkungen auf die + Erscheinung oder die inhaltliche Aussage. Daher der allgemeine Einsatz.

+
+

Es wird allerdings häufig eingesetzt und bekommt vielfältige Funktionen zugeordnet wie diese + hervorgehobene Information zeigt.

+
+
+ div.div_info>p +
+
+
+

Textebene

+

Verweise

+

Ein wesentlicher Bestandteil von Hypertext sind Verweise + <a>. Sie dienen als Sprungmarken innerhalb des Netzwerks. Es kann grob zwischen internen + und externen Verweisen unterschieden werden. + Interne Verweise + + a.a_line + + können Verknüpfungen innerhalb des aktuellen Dokumentes sein oder auch Funktionen aktivieren. + Externe Verweise + verknüpfen Inhalte über das gesamte Netzwerk hinweg. Sie können zum Beispiel auch auf E-Mail-Adressen oder + Dateien zeigen. Theoretisch kann solch ein Verweis + alles + auslösen. Anweisungen werden im + URL-Standard + übergeben.

+

Nicht nur Text kann als Verweis verwendet werden. Auch andere Elemente wie Bilder können verknüpft werden. + Abhängig von ihrer Funktion und ihrem Zweck werden Verweise unterschiedlich formatiert. + Farbige + oder + unterstrichene Varianten + sind einfache Beispiele.

+

Wird der Verweis innerhalb eines + <nav> + Elementes notiert, bekommt er die spezielle Bedeutung eines Navigationsverweises innerhalb des Dokumentes + oder der Anwendung. Verweise werden dann durchaus auch wie Schaltflächen dargestellt.

+ + +

Formatierungen

+

Texte, Wörter oder Zeichen können vielfältig formatiert werden.

+

Sie können + fett + <b> + oder + kursiv + <i> + geschrieben sein. + + Auch beides ist möglich!?! Sollen sie nicht nur anders + aussehen, sondern auch + eine besondere inhaltliche Bedeutung + bekommen, werden sie mit + <strong> + und + <em> + ausgezeichnet.

+

Das + <u> + Element stellt eine Spanne von Text mit einer unartikulierten, wenn auch explizit dargestellten, + nicht-textuellen Anmerkung dar, wie z.B. die Beschriftung des Textes als Eigenname wie + Interaktionsweise, oder die Beschriftung des Textes als + flasch + (falsch) geschrieben.

+

Ähnlich ist es mit dem Element + <small>. + Es steht für Randnotizen, wird aber häufig auch kleiner dargestellt. +

+

Ist ein Text nicht mehr korrekt oder relevant kann er mit + <s> + markiert werden:
+ Die Erde ist eine Scheibe. +

+

Ein besonderer inhaltlicher Bezug ist der Titel eines Werkes. So was kann mit + <cite> + ausgezeichnet werden. + Pulp Fiction, ist ein super Film - zum Beispiel.

+

Um ein Zitat direkt im Text zu verwenden benutzt man das + <q> + Element. Es platziert Anführungszeichen um die Aussage:

+

Sie sagte: + Du wolltest staubsaugen!
Er sagte: + Mach' ich morgen. +

+

Mit dem + <dfn> + Element werden Begriffe definiert. Es wird häufig mit dem Element für Abkürzungen + <abbr> + gemeinsam verwendet. Die eigentliche Definition kann dabei auch im Attribut + title + stehen. Dies ist ein globales Attribut, das erklärende Informationen zu dem Element enthält. Diese wird + typischerweise beim darauf Zeigen eingeblendet.

+

+ + HIPPIE + + is a recursive acronym for + Hippie interweaves preeminent personal interface elements.

+

Die besondere Auszeichnung + <ruby> + bezeichnet ein Anmerkungssystem, bei dem der Text + zusammen mit seiner Anmerkung in einer Zeile erscheint. + Das System verwendet die folgenden weiteren Elemente mit spezifischer Bedeutung:

+
+
+ <rb> +
+
Basis Textkomponente
+
+ <rt> +
+
Annotation
+
+ <rtc> +
+
Einzelne Komponente einer Annotation
+
+ <rp> +
+
Alternative bei fehlender Unterstützung
+
+
+
+ + Basis + Auszeichnung + + + 今日 + きょう + + + ♥ + : + + Herz + , + + + Cœur + + . + ☘ + : + + Kleeblatt + , + + + Trèfle + + . + ✶ + : + + Stern + , + + + Étoile + + . + +
+
+

Wikipedia erklärt dies ausführlicher unter + Ruby Annotation.

+

Es gibt auch mehrere besondere Elemente um Maschinensprache oder Programmiersprache zu bezeichnen. Dabei wird + unterschieden, ob der Inhalt nur für Menschen ausgezeichnet wird oder auch maschinen-lesbar sein soll. Die + Elemente + <data> + und + <time> + enthalten eine maschinen-lesbare Repräsentation des Inhaltes:

+
+
+ 0 + ≠ + NULL +
+
+ <data>0</data> ≠ <data>NULL</data> +
+
Der Wert + NULL + mit Attribut +
+
+ <data value="NULL">NULL</data> +
+
+ +
+
+ <time>2018-10-08</time> +
+
Die Zeitangabe + + + + mit Attribut +
+
+ <time datetime="2018-10-08">Gestern</time> +
+
+

Die Auszeichnung + <code> + wurde bis hier hin schon verwendet. Sie markiert ebenfalls Maschinensprache. Allerdings dient sie dazu von + Menschen gelesen zu werden. In diesem Dokument werden alle Elemente, die erklärt werden wiederum mit diesem + Element markiert.

+

Für zusammenhängende Blöcke wird die Auszeichnung oft in Kombination mit dem Element + <pre> + verwendet:

+
<html>
<head>
<title>hyper text markup language</title>
</head>
<body id="root">
<!-- content goes here -->
<p class="example">just like this.</p>
</body>
</html>
+

Dabei bleiben vorhandene Textformatierungen wie Zeilenumbrüche und Einrückung erhalten.

+

+ var def = "Definition einer Variablen"; +

+

In diesem Beispiel wird die Variable + def + definiert. Solch ein spezieller Typ Text kann mit dem dafür vorgesehenen Element + <var> + ausgezeichnet werden.

+

Soll beispielhaft auf Ausgaben von Computern verwiesen werden, wird das + <samp> + Element verwendet. Der Computer hat gesagt: + Ich kann das angegebene Objekt nicht finden.

+

Benutzereingaben haben ebenfalls ein eigenes Element + <kbd>. Damit werden Eingaben durch den Nutzer, wie zum Beispiel + Drücken Sie gleichzeitig Strg und A, gekennzeichnet.

+

Hoch- und Tiefgestellte Zeichen werden durch die Elemente + <sup> + und + <sub> + repräsentiert. Sie dienen nicht dazu rein optische Auszeichnungen zu erreichen, sondern werden für ihren + jeweiligen Zweck eingesetzt. In der Mathematik oder Chemie sind sie üblich:

+

Beispielsweise die Formel + E=m + c + 2 + oder das Element H2O

+

Die Zeichen in Absätzen bis hin zu ganzen Texten können, mit einem geeigneten Eingabegerät, markiert werden. + Dies stellt sich wie folgt dar:

+

Beispiel zum markieren 😉.

+

Eine Markierung kann, mittels + <mark>, auch durch den Autor geschehen. Diese stellt sich ein wenig anders dar: + Diese Worte sind markiert. +

+

Um Text, dessen schreibweise nicht vorhersehbar ist, zu markieren wie z.B. Benutzernamen + كائن بشري + , die auch rechtsbündig geschrieben sein können, wird das + <bdi> + Element eingesetzt.
Die Schreibweise kann auch vom Author vorgegeben und expliziert geändert werden. + Dies wird dem + <bdo> + Element umgesetzt. Die Richtung wird dann mit dem Attribut + dir + angegeben. +

+
    +
  • + كائن بشري +
  • +
  • + إنسان آلي +
  • +
+

Neben den vielen speziellen Elementen gibt es auch ein Element, das keine vordefinierte Bedeutung hat. Es ist + das + <span> + Element.
Es dient dazu ganz individuelle Auszeichnungen zu ermöglichen die eher optische Auswirkungen + haben und eben keine inhaltlichen. Mit den Attributen + id + oder + class + werden dazu eigene Typen des Elements definiert. Diese Möglichkeit der Definition von individuellen + Elementen ist ein Grundprinzip der Auszeichnungssprache + HTML.

+

Mit der Einführung von Absätzen wurde auch schon das + <br> + Element erwähnt und seitdem häufig benutzt. Es erzeugt einen Zeilenumbruch. Es wird dadurch kein neuer + Absatz erstellt. Es dient auch nicht dazu optischen Abstand zu erzeugen, sondern innerhalb eines Absatzes + den Text umzubrechen.

+

Eine besondere Form des Zeilenumbruchs kann mit + <wbr> + eingesetzt werden. Es stellt die Möglichkeit für einen Zeilenumbruch dar. Da das Format eines + HTML-Dokumentes häufig nicht vorhersehbar ist, kann solch ein Element einen Umbruch erzeugen, falls ein Wort + zu lang für eine Textzeile sein sollte.

+

Und der Löwe brüllte "RRRR + + rrrr + + oooooooo + + aaaa + + AAAAAAAA + + HHHH + + hhhh + + rrrrrrrrr"! +

+

Es kann auch innerhalb von vorformatierten Texten Zeilenumbrüche ermöglichen

+

Änderungen

+

Werden Texte geändert, können solche Änderungen sichtbar gemacht werden. Somit können sie besser + nachvollzogen werden.
Zum Beispiel eine Ergänzung von Inhalt.

+ +

Der Inhalt wird dann mit + <ins> + ausgezeichnet. Wird Text entfernt, kommt + <del> + zum Einsatz.

+
Zu Tun
+
    +
  • Fahrrad reparieren
  • +
  • + Staubsaugen +
  • +
  • Tisch bauen
  • +
+
+
+

Eingebundene Inhalte

+ {% render 'hippie/partials/placeholder-flag.liquid', type: 'img', width: '128', desc: 'Fahne von Interaktionsweise' %} +

Dies ist ein Bild. Es wird mit dem Element + <img> + eingebunden. Solch ein Bild hat üblicherweise die Attribute + width + und + height. Mit ihnen werden die Abmessungen (Breite und Höhe) festgelegt. Außerdem sollte immer + das Attribut + alt + für eine alternative Beschreibung in Textform verwendet werden.

+

Das Bild selbst liegt normalerweise als Datei vor. Die Quelle wird mit dem Attribut + src + angegeben. Es können einige Alternativen zur Angabe einer konkreten Datei eingesetzt werden. Zum Beispiel + können mehrere Dateien in Abhängigkeit zur Darstellung oder dem unterstützen Format angegeben werden. Dafür + können dann die Elemente + <source> + und + <picture> + in Kombination verwendet werden.

+ {% render 'hippie/partials/placeholder-flag.liquid', type: 'img', src: 'file', width: '128', desc: 'Fahne von Interaktionsweise' %} +
+
+

Tabellen

+

Tabellen bieten besonders geordnete Struktur. Häufig werden in ihnen Text und Daten kombiniert dargestellt. + Dies erfordert individuelle Formatierungen. Einige grundlegende Eigenschaften werden im Folgenden + aufgezeigt. Tabellen sind in ihrer Größe entweder vordefiniert (fixiert) oder richten sich nach ihrem + Inhalt. Das bedeutet, die Spaltenbreite entspricht der breitesten ihrer Zellen.

+ + + + + + + + +
Eineeinfache
Tabelle
+
+ table.width_full>tr>td*2^tr>td[colspan=2] +
+
+ + + + + + + + +
Einefreie (nicht fixierte)
Tabelle
+
+ table>tr>td*2^tr>td[colspan=2] +
+ + + + + + + + +
Mitohne
Linien
+
+ table.blank>tr>td*2^tr>td[colspan=2] +
+
+

Die nächste Tabelle verwendet alle zur Auszeichnung verfügbaren Elemente und hat eine starre + Zellverteilung:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Beschreibung bzw. Zusammenhang der Tabelle
KopfzeileAB
Tabelle
mitTitel
Kopf-und
Fußzeile
FußzeileAB
+
+ table.width_full.fix>caption+thead>tr>th[scope="col"]*3^^tbody>(tr>td*3)*3^^tfoot>tr>th[scope="row"]+td*2 +
+

Viele weitere Formate sind möglich.

+
+
+

Formulare

+

Spätestens hier werden Betrachter zu Benutzern. Texteingabefelder und verschiedene Bedienelemente geben + Möglichkeiten zur Interaktion. Diese Elemente sind in vielerlei Hinsicht besonders. Werden sie nicht + explizit gestaltet, ist ihre Erscheinung system- bzw. browserabhängig.
Üblicherweise stehen alle + Bedienelemente innerhalb eines + <form> + Elementes. Dieses ist notwendig um Angaben zur Kommunikation mit dem Server zu setzen. Es hat normalerweise + keine gestalterische Funktion.

+

Grundlegend ist das Element + <input>. Es hat viele Attribute um den Typ der Eingabe anzupassen. Ist es undefiniert, + nimmt es jegliche textbasierte Information auf und erhält eine Standardgröße.

+

+

Ein spezieller Typ des Eingabefeldes hat die Funktion einer Schaltfläche + <input[type="button"]>. Es gibt allerdings auch ein eigenes Element + <button> + dafür.

+

+ +

+

+ +

+

Interaktive Elemente können durch das Attribut + readonly + nur lesbar gemacht werden oder mittels + disabled + gänzlich deaktiviert werden.

+ {% comment %}// TODO: Abstände, besonders margin generell überarbeiten{% endcomment %} +

+ +

+

+ +

+

Das Element + <label> + ergänzt interaktive Elemente um eine Beschriftung. Wichtig ist hier, dass die Beziehung beider Elemente + zueinander deutlich ist.

+

+ +

+
+
+ + + + + + + + + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+
+

Zusätzlich zur Beschriftung einzelner Elemente gibt es auch die Möglichkeit Gruppierungen zu schaffen. Diese + werden mit + <fieldset> + realisiert.

+
+
+ + +
+
+

Sie können mittels + <legend> + auch eine eigene Beschriftung erhalten.

+
+ Einfache Eingabeelemente +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ + +
+
+
+ Einfache Eingabeelemente mit Stil +
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ + +
+
+
+ Weitere Eingabemöglichkeiten +

Innerhalb einer Gruppe können nicht nur Ein- und Ausgabefelder platziert werden. Andere Elemente ergänzen + Information oder lockern das Erscheinungsbild auf.

+

Hier nun eine Liste weiterer Arten von Eingabefeldern:

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+ +

Interaktive Elemente

+
+
+

Struktur

+
+ +
+ + + + +
+ +
+
+
+

Medien

+
+
+

Druck

+
+ +
+
+

Ende der Einführung

+

Dies war eine Übersicht der grundlegenden Elemente. Nun folgen Komponenten mit Kombinationen und + erweiterten Formatierungen.

+
+
+
+{% endblock %} diff --git a/source/screens/demo/components.liquid b/source/screens/demo/components.liquid new file mode 100644 index 0000000..4f4dd2b --- /dev/null +++ b/source/screens/demo/components.liquid @@ -0,0 +1,375 @@ +--- +title: Components +tags: +- demoIndex +--- +{% layout 'hippie/page.liquid' %} + +{% block title %}Komponenten{% endblock %} + +{% block main %} +
+
+

Medienformat Abfragen

+
+
+
Umbruch bei 
+
+

Telefone und größer

+

Nur Telefone

+

Nur Schreibtafeln hochkant

+

Schreibtafeln und größer

+

Schreibtafeln im Querformat

+

Schreibtafeln quer und größer

+

Nur Arbeitsplatzrechner

+

Arbeitsplatzrechner und größer

+

Richtige Monitore und größer

+
+
+
+ +
+
+

Übersicht aller Elemente

+

Es werden alle grundlegenden Elemente sowie ihre gestalteten Varianten angegeben. Die Elemente sind in + Gruppen eingeteilt, die auch das W3Consortium (html.spec.whatwg.org/multipage/#toc-semantics) + verwendet.

+

Zu jedem Element werden alle Attribute aufgelistet und die Umsetzung im HTML-Dokument als Emmet-Syntax + dargestellt.

+
+
article>h1+p{Elemente:}+pre+h2{<tag>}+h4{Varianten}
+
+

Bereiche

+

Elemente:

+
// body
// article
// section
// nav
// aside
// h1-h6
// header
// footer
+

<body>

+

Keine speziellen Attribute. Bekommt üblicherweise allgemeine Klassen zur Steuerung der Abmessungen + zugewiesen.

+

<article>

+
Ein Artikel.
+

<section>

+
Ein Bereich.
+

Varianten

+
section.sec_main_center
+
+

Ende.

+

Zentrierter Bereich.

+
+
section.sec_main_status
+
Status-Bereich
+

<nav>

+ +

<aside>

+

Fließt um andere Inhalte. Klassen zur Positionierung und Kombination mit .bside.

+
aside.right+div.bside
+
+ +
Hauptbereich
+
+

<h*>

+

Überschrift 1

+

Überschrift 2

+

Überschrift 3

+

Überschrift 4

+
Überschrift 5
+
+
Überschrift 6
+

Mit Absatz innerhalb von <hgroup>.

+
+
+

Überschrift 1 oder 2

+

Mit Absatz innerhalb von <hgroup>.

+
+

<header>

+
Kopfbereich
+
header.header_page
+
header.header_txt>h1
+
+

Überschrift 1

+

Innerhalb eines <header>.

+
+

<footer>

+

Bekommt üblicherweise Klassen zur Positionierung und der Abmessungen zugewiesen.

+
Fußbereich
+
+ {% render 'hippie/partials/footer-pinned.liquid' %} +
+
+
+

Gruppierung

+

Elemente:

+
// p // address // hr // pre // blockquote // ol // ul // li // dl // dt // dd // figure // figcaption // main // div
+

<p>

+

Ein Absatz. Ein code Element innerhalb wird besonders behandelt.

+

Varianten

+
p.column_2
+

Spalten können angegeben werden.

+
p.column_3.column_line
+

Spalten können angegeben werden.

+

<address>

+
Anschrift, mit bestimmtem, ##### Format.
+

<hr>

+
+

Varianten

+
hr.hidden+hr.dotted+hr.double
+ +
+
+
hr.vertical
+
+

<pre>

+
Vorformatierter Text.
+	erhält Umbrüche und Einrückung.
+			
+
pre.pre_code>code*2
+
let variable = true;
+()(){}
+

<blockquote>

+
Ein Zitat ist eingerückt.
+
blockquote.quote_mark>p+p.quote_source
+
+

Zitat mit automatischen Anführungszeichen

+

und Quellenangabe.

+
+

<dl>, <ol>, <ul>

+
+
Begriff
+
Definition
+
+
    +
  1. Eins
  2. +
  3. Zwei
  4. +
+
    +
  • Obst
  • +
  • Gemüse
  • +
+

Varianten

+
ul.list_basic.list_dash>li*2
+
    +
  • Mehr Abstand und
  • +
  • mit Unterstrichen.
  • +
+
ul.list_link>(li>a)*2
+ +

<figure>

+
figure>figcaption+{element}
+
+
Bezeichnung
+ Grafisches Element. +
+

<main>

+
Hauptbereich
+

<div>

+

Varianten

+
div.div_info>p
+
+

Absatz in einer Box mit dem Typ Information.

+
+
div.box_space>div.box_cube>span
+
+
Text
+
+
div.box_placeholder+hr+div.box_placeholder_bkg
+
+
+
+
+
+

Tabellen

+

Elemente:

+
// table // caption // colgroup // col // tbody // thead // tfoot // tr // td // th
+

<table>

+

Varianten

+
table.width_full.fix>(thead>tr>th.cell_pre[scope="col"]+th[scope="col"]*3)+tbody>tr>td.cell_pre+td*3
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KopfzeileAB
VorspalteEine
1erweiterte
2Tabelle
+
table.width_full.stripe.fix.free>tr>td*3
+ + + + + + + + + + + + + + + + + + + + + +
Tabelle
ohneRahmen
jedochmit
Streifen
+
table.width_full.fix>(thead>tr>th[scope="col"]*3)+(tbody>tr>td*2+td.txt_right)+tfoot>tr>th[colspan="2"]+td.txt_right
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Die Verteilung der Zellen ist hier von ihrem Inhalt abhängig.
BezeichnungMengeWert
Alpha18990
Bravo101
Charlie11
Summe9001
+
+
+

Formulare

+

Elemente:

+
// form // label // input // button // select // datalist // optgroup // option // textarea // output // progress // meter // fieldset // legend
+

<input>

+
+ + + + + +
+

Varianten

+
input.button_io+button.button_io
+
+ + +
+
+ + + +
+
+
+ + +
+ + CapsLock is on. +
+
+

<select>

+ +
+
+{% endblock %} + +{% block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/10print.liquid b/source/screens/demo/examples/10print.liquid new file mode 100644 index 0000000..9ee9246 --- /dev/null +++ b/source/screens/demo/examples/10print.liquid @@ -0,0 +1,71 @@ +--- +title: 10print +tags: +- demoExample +--- +{% layout 'hippie/simple.liquid' %} + +{% block head %} +{{ block.super -}} + +{% endblock %} + +{% block body %} + +{% endblock %} + +{% block script %} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/blog.njk b/source/screens/demo/examples/blog.njk new file mode 100644 index 0000000..9573419 --- /dev/null +++ b/source/screens/demo/examples/blog.njk @@ -0,0 +1,51 @@ +--- +title: Blog +tags: + - demoExample +--- +{% set pageBase = "../" %} +{% set pageId = page.fileSlug %} + +{% extends "demo/_default.njk" %} +{% import "hippie/macros/_placeholder.njk" as ph %} +{% import "hippie/macros/_song.njk" as song %} + +{% block title %}{{ title }} +{% endblock %} + +{% block head %} + {{ super() }} +{% endblock %} + +{% block body %} + +
+
+

Blog

+
+ +

Vorwort

+

Liederbuch für + Name.

+

Gibt es gebunden und hier + {{ ph.link() }}.
+ Bestellungen bitte an + {{ ph.name() }} + richten.

+
+ {%- for post in collections.article -%} + {{ post.content }} + {%- endfor -%} +
+
{{ ph.name() }}
+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/blog/article.md b/source/screens/demo/examples/blog/article.md new file mode 100644 index 0000000..0200c08 --- /dev/null +++ b/source/screens/demo/examples/blog/article.md @@ -0,0 +1,11 @@ +--- +tags: + - blog + - article +title: "Artikel" +releaseDate: JJJJ +description: Text +--- +# Titel + +Inhalt diff --git a/source/screens/demo/examples/card.njk b/source/screens/demo/examples/card.njk new file mode 100644 index 0000000..e05818d --- /dev/null +++ b/source/screens/demo/examples/card.njk @@ -0,0 +1,83 @@ +--- +title: Card +tags: + - demoExample +--- +{% set pageId = page.fileSlug %} +{% set pageClass = "html_card" %} + +{% extends "demo/_default.njk" %} +{% import "hippie/macros/_placeholder.njk" as ph %} + +{% block title %}{{ title }} +{% endblock %} + +{% block head %} + {{ super() }} +{% endblock %} + +{% block body %} + + +
+
+ {{ ph.flag('svg', '', 'flag', '') }} + {# Background flag dithered #} +
+
+
+

Titel
und Beschreibung

+

{{ ph.name() }}

+

+ {{ ph.email('card_address') }}
+ {{ ph.link('decent', 'site.tld') }} + · + {{ ph.address('decent') }}

+
+
+{% endblock %} + +{% block script %} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/clock.liquid b/source/screens/demo/examples/clock.liquid new file mode 100644 index 0000000..c55f9a9 --- /dev/null +++ b/source/screens/demo/examples/clock.liquid @@ -0,0 +1,482 @@ +--- +title: Clock +tags: +- demoExample +--- +{% assign bodyClass = 'body_clock' -%} +{% layout 'hippie/simple.liquid' %} + +{% block body %} +
+ + +
+
+{% endblock %} + +{% block script %} + + + + + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/game.liquid b/source/screens/demo/examples/game.liquid new file mode 100644 index 0000000..734a5a6 --- /dev/null +++ b/source/screens/demo/examples/game.liquid @@ -0,0 +1,25 @@ +--- +title: Game - TFW +tags: +- demoExample +- gameExample +--- +{% assign bodyClass = 'body_game' -%} +{% layout 'hippie/simple.liquid' %} + +{% block body %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/intro.njk b/source/screens/demo/examples/intro.njk new file mode 100644 index 0000000..548cc3f --- /dev/null +++ b/source/screens/demo/examples/intro.njk @@ -0,0 +1,138 @@ +--- +title: Intro +tags: + - demoExample +--- + +{% set pageId = "init" %} +{% set bodyClass = "body_intro" %} + +{% extends "hippie/_app_frame.njk" %} +{% import "hippie/macros/_placeholder.njk" as ph %} + +{% block body %} +
+
+
+ I +
+
+
+
+
0%
+
+
+
+ + {{ ph.brand('brand') }} +

Powered by

+
    +
  • Vendor
  • +
  • IDE
  • +
  • Engine
  • +
+
+
+

Agreement

+

This needs to be seen and acknowledged.
So an interaction must be made to continue.

+
+
+
+
Hello World!
+

Only left mouse click or any key

+
+{% endblock %} + +{%- block script %} + {{ super() }} + + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/portal.njk b/source/screens/demo/examples/portal.njk new file mode 100644 index 0000000..68268c7 --- /dev/null +++ b/source/screens/demo/examples/portal.njk @@ -0,0 +1,41 @@ +--- +title: Portal +tags: + - demoExample +--- +{% set pageId = page.fileSlug %} +{% set bodyClass = "body_portal" %} + +{% extends "demo/_default.njk" %} +{% import "hippie/macros/_gate.njk" as gate %} + +{% block title %}{{ title }} +{% endblock %} + +{% block head %} + {{ super() }} +{% endblock %} + +{% block body %} + +
+ {{ gate.list( + 'Tor mit Symbol und Liste', + '../demo', { + src: '/art/flag_websafe_128x80.gif', + alt: 'Flag of Interaktionsweise' + }, [ + { + name: '1', + href: 'http://domain.tld', + img: '../art/bullet.gif' + }, { + name: 'Zwei', + href: 'http://domain.tld', + img: '../art/bullet.gif' + } + ] + ) }} + {{ gate.simple('Tor', '../demo') }} +
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/songbook.njk b/source/screens/demo/examples/songbook.njk new file mode 100755 index 0000000..78a9939 --- /dev/null +++ b/source/screens/demo/examples/songbook.njk @@ -0,0 +1,52 @@ +--- +title: Songbook +tags: + - demoExample +--- +{% set pageBase = "../" %} +{% set pageId = page.fileSlug %} + +{% extends "demo/_default.njk" %} +{% import "hippie/macros/_placeholder.njk" as ph %} +{% import "hippie/macros/_song.njk" as song %} + +{% block title %}{{ title }} +{% endblock %} + +{% block head %} + {{ super() }} +{% endblock %} + +{% block body %} + +
+
+

Titel

+

Jahr

+
+ +

Vorwort

+

Liederbuch für + Name.

+

Gibt es gebunden und hier + {{ ph.link() }}.
+ Bestellungen bitte an + {{ ph.name() }} + richten.

+
+ {%- for piece in collections.song -%} + {{ song.simple(loop.index0, piece.data, piece.content) }} + {%- endfor -%} +
+
{{ ph.name() }}
+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/songbook/0_artist-title.md b/source/screens/demo/examples/songbook/0_artist-title.md new file mode 100755 index 0000000..ccf1b5c --- /dev/null +++ b/source/screens/demo/examples/songbook/0_artist-title.md @@ -0,0 +1,26 @@ +--- +tags: + - songbook + - song +title: "Interpret - Titel" +releaseDate: JJJJ +description: Text +--- +~~~ +[verse 1] +strophe 1 + +[chorus] +refrain + +[verse 2] +strophe 2 + +[chorus] +[bridge] +überleitung + +[interlude] +[chorus] +[outro] +~~~ diff --git a/source/screens/demo/examples/start.liquid b/source/screens/demo/examples/start.liquid new file mode 100644 index 0000000..e11d3f8 --- /dev/null +++ b/source/screens/demo/examples/start.liquid @@ -0,0 +1,82 @@ +--- +title: Start +tags: +- demoExample +--- +{% assign pageId = page.fileSlug -%} +{% assign bodyClass = 'body_start' -%} +{% layout 'hippie/simple.liquid' %} + +{% block body %} +
+ +
+ + +
+
+{% endblock %} + +{% block script %} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/cli.liquid b/source/screens/demo/examples/ui/cli.liquid new file mode 100644 index 0000000..a87d4b8 --- /dev/null +++ b/source/screens/demo/examples/ui/cli.liquid @@ -0,0 +1,60 @@ +--- +title: CLI +tags: +- ui +--- +{% assign bodyClass = 'body_cli' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +
+
+
Previous prompt
+
+
+ + +
+
+{% endblock %} + +{%- block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/drag.liquid b/source/screens/demo/examples/ui/drag.liquid new file mode 100755 index 0000000..37d806e --- /dev/null +++ b/source/screens/demo/examples/ui/drag.liquid @@ -0,0 +1,49 @@ +--- +title: Drag +tags: +- ui +--- +{% layout 'hippie/app.liquid' %} + +{% block body %} +
+ +
+
+
+
+
+ {% render 'hippie/partials/frame-header.liquid' %} +
+ {% render 'hippie/partials/frame-mode.liquid' %} +
+
+
+{% endblock %} + +{%- block script %} + + + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/explorer.liquid b/source/screens/demo/examples/ui/explorer.liquid new file mode 100644 index 0000000..bfdd28a --- /dev/null +++ b/source/screens/demo/examples/ui/explorer.liquid @@ -0,0 +1,145 @@ +--- +title: Explorer +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/frame-header.liquid' %} +
+ +
+
+ + +
+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
namedatetypesize
folderYYYY-MM-DDfolder4KB
fileYYYY-MM-DDfolder1B
+
+ {% render 'hippie/partials/frame-status.liquid' %} +
+
+{% render 'hippie/partials/frame-mode.liquid' %} +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/form.liquid b/source/screens/demo/examples/ui/form.liquid new file mode 100644 index 0000000..3a7aceb --- /dev/null +++ b/source/screens/demo/examples/ui/form.liquid @@ -0,0 +1,56 @@ +--- +title: Form +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/frame-header.liquid' %} +
+

Formulare

+ + +
+
+
+
+
a
+
b
+
c
+
+
+{% endblock %} + +{%- block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/gallery.liquid b/source/screens/demo/examples/ui/gallery.liquid new file mode 100755 index 0000000..0d372d4 --- /dev/null +++ b/source/screens/demo/examples/ui/gallery.liquid @@ -0,0 +1,78 @@ +--- +title: Gallery +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/frame-header.liquid' %} +
+
+
+ + +
+ + {% render 'hippie/partials/frame-status.liquid' %} +
+
+{% render 'hippie/partials/frame-mode.liquid' %} +{% endblock %} + +{%- block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/index.liquid b/source/screens/demo/examples/ui/index.liquid new file mode 100644 index 0000000..5952f16 --- /dev/null +++ b/source/screens/demo/examples/ui/index.liquid @@ -0,0 +1,24 @@ +--- +title: UI +tags: +- demoExample +- index +--- +{% layout 'hippie/simple.liquid' %} + +{% block title %}{{ title }}{% endblock %} + +{% block body %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/table.liquid b/source/screens/demo/examples/ui/table.liquid new file mode 100755 index 0000000..96e72ea --- /dev/null +++ b/source/screens/demo/examples/ui/table.liquid @@ -0,0 +1,399 @@ +--- +title: Table +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/frame-header.liquid' %} +
+
+
+ + +
+ + + + + + + + + + + + + + + + + +
##NumberNameDescriptionAmountUnitPriceSum
+ {% render 'hippie/partials/frame-status.liquid' %} +
+
+ + + + + +{% render 'hippie/partials/frame-mode.liquid' %} +{% endblock %} + +{%- block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/tile.liquid b/source/screens/demo/examples/ui/tile.liquid new file mode 100644 index 0000000..be51071 --- /dev/null +++ b/source/screens/demo/examples/ui/tile.liquid @@ -0,0 +1,45 @@ +--- +title: Tile +tags: +- ui +--- +{% assign bodyClass = 'body_new' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/header-status', hippie: hippie, links: start %} + +
+
1
+
2
+
3
+
4
+
+{% endblock %} + +{%- block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/tui.liquid b/source/screens/demo/examples/ui/tui.liquid new file mode 100644 index 0000000..ac42d52 --- /dev/null +++ b/source/screens/demo/examples/ui/tui.liquid @@ -0,0 +1,13 @@ +--- +title: TUI +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +{% render 'hippie/partials/frame-header.liquid' %} +
+{% render 'hippie/partials/frame-mode.liquid' %} +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/examples/ui/windows.liquid b/source/screens/demo/examples/ui/windows.liquid new file mode 100644 index 0000000..8a9c65a --- /dev/null +++ b/source/screens/demo/examples/ui/windows.liquid @@ -0,0 +1,79 @@ +--- +title: Windows +tags: +- ui +--- +{% assign bodyClass = 'body_frame' -%} +{% layout 'hippie/app.liquid' %} + +{% block body %} +
+ + + +
+ +
+ ##:## +
+
+ +
+
+
+
+
+
+
+ task bar +
+
+
+{% endblock %} + +{%- block script %} +{{ block.super -}} + + + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/index.liquid b/source/screens/demo/index.liquid new file mode 100644 index 0000000..2c1eafc --- /dev/null +++ b/source/screens/demo/index.liquid @@ -0,0 +1,65 @@ +--- +permalink: "/" +title: Index +tags: +- demoIndex +--- +{% assign pageId = page.fileSlug -%} +{% assign pageClass = 'h_full_view' -%} +{% layout 'hippie/full.liquid' %} + +{% block body %} +
+
+

This is {{ hippie.brand | upcase }}

+

You can start using it by replacing this file with your own index page.

+

To do this you need to create a file + /index.njk + inside the + source/screens + folder. You can also create a + data.json + file inside the + source/templates + folder as a data source for your nunjucks files.

+

For a very basic start you can make a copy of the demo page + blank.njk. You can find it at + /source/screens/demo.

+

The + source/demo + folder contains an overview of all HTML elements and also examples for CSS style combinations and even whole + page layouts.
Follow the white rabbit.

+
+
  ()()
(..)
c(")(")
+

Overview

+
+ +

Page

+ +

Example

+ +
+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/introduction.liquid b/source/screens/demo/introduction.liquid new file mode 100644 index 0000000..91993cb --- /dev/null +++ b/source/screens/demo/introduction.liquid @@ -0,0 +1,40 @@ +--- +title: Introduction +tags: +- demoIndex +--- +{% layout 'hippie/page.liquid' %} + +{% block title %}Einführung{% endblock %} + +{% block main %} +
+
+
+

Introduction to HIPPIE

+

Hippie interweaves preeminent personal interface elements.

+
+
+
+

+

Contact: +

+

More: , +

+
+
+{% endblock %} + +{% block script %} +{{ block.super -}} + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/layouts.liquid b/source/screens/demo/layouts.liquid new file mode 100644 index 0000000..500e902 --- /dev/null +++ b/source/screens/demo/layouts.liquid @@ -0,0 +1,314 @@ +--- +title: Layouts +tags: +- demoIndex +--- +{% layout 'hippie/page.liquid' %} + +{% block title %}Gestaltungen{% endblock %} + +{% block main %} +
+
+

Sammlung formatierter Elemente

+

Die Elemente werden fortlaufend komplexer

+
+
+

Bereiche (sections)

+

section

+
section.overflow>div.float_space_left>img^p+p>br+a.lineLink
+
+
+ {% render 'hippie/partials/placeholder-flag.liquid', type: 'img', src: 'file', width: '256', desc: 'Avatar' %} +
+

{% text hippie.placeholders.name %}
{% text hippie.placeholders.address %}

+

{% text hippie.placeholders.phone %}
{% link hippie.placeholders.mail, '', '', 'a_line' %}

+
+

nav

+
div.overflow>(nav.float_space_left>ul>(li>a.a_button{punkt $})*4+nav>ul>(li>a.a_button_border{stufe $})*4)
+
+ + +
+
nav.nav_horizontal>ul>(li>a.a_button{abschnitt $})*4
+ +
div.overflow>nav.nav_center_old>ul>(li>a.a_button{typ $})*4
+
+ +
+

header

+
header.header_page>h1+p+nav.nav_separate_right>ul>(li>a.a_button{nav $})*4^+nav.nav_right>ul>(li>a.a_button{nav $})*4
+
+

Aufmacher

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis nec consectetur diam. Sed nisl odio, + volutpat nec nisi sit amet, commodo faucibus est. Donec lacinia vestibulum sapien. Morbi porttitor nibh + quis imperdiet scelerisque. Praesent rutrum quam eu sodales luctus.

+ + +
+
header.header_page>nav.nav_right>ul>(li>a.a_button{nav $})*4
+
+
+ +
+
+
footer.pos_abs.pin_bottom>nav.nav_column>ul>(li>a.a_button_text)*4
+ +
+
+ +

Interaktiv (interactive)

+

input

+
+ + + + + +
+

form

+
+

Show me a + + Sorted by + + + + Matching + + +

+
+ +

Gruppierung (grouping)

+

p

+
p.txt_right+p.txt_center+p.txt_left
+

Rechts

+

Mittig

+

Links

+

h*

+
h3.txt_color_dark+p.txt_tiny
+

Dunkle Überschrift

+

Mit winzigem Textabsatz

+
a>h4
+ +

Überschrift als Block-Verweis

+
+

Überschrift 1

+

Kann mehrmals, ohne großen Abstand oberhalb, untereinander stehen.

+

Überschrift 2

+

kann das ebenso.

+

hr

+
hr.space_even_half
+
+
hr.dotted.space_even_fourth
+
+

ul

+
nav>ul.list_link>(li>a)+li>a>img+span
+ +

div

+
div.space_left_fourth>(hr+p+hr)
+
+
+

Eingerückter Inhalt

+
+
+ +

Tabellen

+
table.link>thead>tr>th{&nbsp;}+th{ab / zy}+th{neu / alt}^^(tbody>tr>td.icon[rowspan="2"]>img[width=16 height=16]^+td.link>span{name}+a[target=_blank]{url}^+td[rowspan="2"]{yyy-mm-dd}^tr>td.text>div.shorten{beschreibung})*2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Eingebettet

+
+ {% render 'hippie/partials/placeholder-flag.liquid', type: '', width: '128', desc: 'Fahne von Interaktionsweise' %} +
+
+
+{% endblock %} + +{% block script %} +{{ block.super -}} + + +{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/blank.liquid b/source/screens/demo/pages/blank.liquid new file mode 100644 index 0000000..5cf5e7c --- /dev/null +++ b/source/screens/demo/pages/blank.liquid @@ -0,0 +1,5 @@ +--- +title: Blank +--- +{% assign pageId = page.fileSlug -%} +{% layout 'hippie/simple.liquid' %} diff --git a/source/screens/demo/pages/default.liquid b/source/screens/demo/pages/default.liquid new file mode 100644 index 0000000..9b84b78 --- /dev/null +++ b/source/screens/demo/pages/default.liquid @@ -0,0 +1,13 @@ +--- +title: Default +--- +{% assign pageId = page.fileSlug -%} +{% assign pageClass = 'default' -%} +{% assign bodyClass = 'default' -%} +{% layout 'hippie/default.liquid' %} + +{% block title %}{{ title }}{% endblock %} + +{% block body %} + +{% endblock %} diff --git a/source/screens/demo/pages/error/304.liquid b/source/screens/demo/pages/error/304.liquid new file mode 100644 index 0000000..75127a7 --- /dev/null +++ b/source/screens/demo/pages/error/304.liquid @@ -0,0 +1,19 @@ +--- +title: 304 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Umleitung

+

Unverändert Not Modified

+
+

Der Inhalt der angeforderten Ressource hat sich seit der letzten Abfrage des Clients nicht verändert und wird + deshalb nicht übertragen. Zu den Einzelheiten siehe Browser-Cache-Versionsvergleich. +

+

Wikipedia

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/400.liquid b/source/screens/demo/pages/error/400.liquid new file mode 100644 index 0000000..ffe7d9c --- /dev/null +++ b/source/screens/demo/pages/error/400.liquid @@ -0,0 +1,16 @@ +--- +title: 400 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Client-Fehler

+

Fehlerhafte Anfrage! Bad Request

+
+

Die Anfrage-Nachricht war fehlerhaft aufgebaut.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/401.liquid b/source/screens/demo/pages/error/401.liquid new file mode 100644 index 0000000..a2fbb39 --- /dev/null +++ b/source/screens/demo/pages/error/401.liquid @@ -0,0 +1,17 @@ +--- +title: 401 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Client-Fehler

+

Nicht autorisiert! Unauthorized

+
+

Die Anfrage kann nicht ohne gültige Authentifizierung durchgeführt werden. Wie die Authentifizierung durchgeführt + werden soll, wird im „WWW-Authenticate“-Header-Feld der Antwort übermittelt.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/403.liquid b/source/screens/demo/pages/error/403.liquid new file mode 100644 index 0000000..cfa9eed --- /dev/null +++ b/source/screens/demo/pages/error/403.liquid @@ -0,0 +1,17 @@ +--- +title: 403 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Client-Fehler

+

Nicht erlaubt! Forbidden

+
+

Die Anfrage wurde mangels Berechtigung des Clients nicht durchgeführt, bspw. weil der authentifizierte Benutzer + nicht berechtigt ist, oder eine als HTTPS konfigurierte URL nur mit HTTP aufgerufen wurde.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/404.liquid b/source/screens/demo/pages/error/404.liquid new file mode 100644 index 0000000..9a00731 --- /dev/null +++ b/source/screens/demo/pages/error/404.liquid @@ -0,0 +1,18 @@ +--- +title: 404 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Client-Fehler

+

Hier ist nichts. Not Found

+
+

Die angeforderte Ressource wurde nicht gefunden. Dieser Statuscode kann ebenfalls verwendet werden, um eine + Anfrage ohne näheren Grund abzuweisen. Links, welche auf solche Fehlerseiten verweisen, werden auch als Tote + Links bezeichnet.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/408.liquid b/source/screens/demo/pages/error/408.liquid new file mode 100644 index 0000000..1f0ef44 --- /dev/null +++ b/source/screens/demo/pages/error/408.liquid @@ -0,0 +1,16 @@ +--- +title: 408 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Client-Fehler

+

Zeitüberschreitung der Anforderung. Request Timeout

+
+

Innerhalb der vom Server erlaubten Zeitspanne wurde keine vollständige Anfrage des Clients empfangen.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/500.liquid b/source/screens/demo/pages/error/500.liquid new file mode 100644 index 0000000..5e6cb69 --- /dev/null +++ b/source/screens/demo/pages/error/500.liquid @@ -0,0 +1,16 @@ +--- +title: 500 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Server-Fehler

+

Allgemeiner Server Fehler!!! Internal Server Error

+
+

Dies ist ein „Sammel-Statuscode“ für unerwartete Serverfehler.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/error/503.liquid b/source/screens/demo/pages/error/503.liquid new file mode 100644 index 0000000..2a01f87 --- /dev/null +++ b/source/screens/demo/pages/error/503.liquid @@ -0,0 +1,18 @@ +--- +title: 503 +--- +{% assign bodyClass = 'body_status' %} +{% layout 'hippie/status.liquid' %} + +{% block main %} +{{ block.super -}} +

Server-Fehler

+

Dienst nicht verfügbar. Service Unavailable

+
+

Der Server steht temporär nicht zur Verfügung, zum Beispiel wegen Überlastung oder Wartungsarbeiten. Ein + „Retry-After“-Header-Feld in der Antwort kann den Client auf einen Zeitpunkt hinweisen, zu dem die Anfrage + eventuell bearbeitet werden könnte.

+

Wikipedia +

+
+{% endblock %} \ No newline at end of file diff --git a/source/screens/demo/pages/hello.md b/source/screens/demo/pages/hello.md new file mode 100644 index 0000000..09a9406 --- /dev/null +++ b/source/screens/demo/pages/hello.md @@ -0,0 +1,8 @@ +--- +title: "Hello World" +layout: hippie/world.liquid +--- + +# {{ title }} + +This is a simple example for a *screen* written in Markdown, using Liquid *templates*. \ No newline at end of file diff --git a/source/screens/demo/pages/maintenance.liquid b/source/screens/demo/pages/maintenance.liquid new file mode 100644 index 0000000..fe36599 --- /dev/null +++ b/source/screens/demo/pages/maintenance.liquid @@ -0,0 +1,12 @@ +--- +title: Maintenance +--- +{% assign pageClass = 'h_full_view' -%} +{% layout 'hippie/status.liquid' %} + +{% block body %} +
+

HIPPIE

+

Diese Seite wird gerade gewartet.

+
+{% endblock %} diff --git a/source/screens/demo/pages/pages.json b/source/screens/demo/pages/pages.json new file mode 100644 index 0000000..22cec81 --- /dev/null +++ b/source/screens/demo/pages/pages.json @@ -0,0 +1,3 @@ +{ + "tags": "demoPage" +} diff --git a/source/style/_demo_config.scss b/source/style/_demo_config.scss new file mode 100644 index 0000000..5632702 --- /dev/null +++ b/source/style/_demo_config.scss @@ -0,0 +1,6 @@ +// Override for configuration file +// All variables setup with !default in global/_config.scss can be used +// ------------------------------------------------------------------------------ + +// $color_back_basic: beige; +// $color_link_basic: crimson; diff --git a/source/style/demo.scss b/source/style/demo.scss new file mode 100644 index 0000000..43d9cbd --- /dev/null +++ b/source/style/demo.scss @@ -0,0 +1,19 @@ +// Start a new project by creating YOUR-PROJECT.scss and _YOUR-CONFIG.scss +// Then import your config and hippie +// NOTE: No css rules allowed in here +// ------------------------------------------------------------------------------ +@use "demo_config"; +@use "hippie-style/hippie"; + +// Additional Modules and variables +// in dependency to other basic styles +// could be defined here +// ----------------------------------------------------------------------------- +@use "modules/card/card_module"; +@use "modules/portal/portal_module"; +@use "modules/songbook/songbook_module"; +@use "modules/demo/demo_module"; +@use "modules/start"; +@use "modules/clock"; +@use "modules/game"; +// @use "modules/YOUR-MODULE/YOUR-FILES"; diff --git a/source/style/demo_basic.scss b/source/style/demo_basic.scss new file mode 100644 index 0000000..0cb7771 --- /dev/null +++ b/source/style/demo_basic.scss @@ -0,0 +1,13 @@ +// Start a new project by creating YOUR-PROJECT.scss and _YOUR-CONFIG.scss +// Then import your config and hippie +// NOTE // No css rules allowed in here +// ------------------------------------------------------------------------------ +@use "demo_config"; +@use "hippie-style/basic"; + + +// Additional Modules and variables +// in dependency to other basic styles +// could be defined here +// ----------------------------------------------------------------------------- +// @use "modules/YOUR-MODULE/YOUR-FILES"; diff --git a/source/style/hippie-style b/source/style/hippie-style new file mode 160000 index 0000000..ddedf3b --- /dev/null +++ b/source/style/hippie-style @@ -0,0 +1 @@ +Subproject commit ddedf3bbf2d6580dfeae297367fd673abaa11a96 diff --git a/source/style/modules/_clock.scss b/source/style/modules/_clock.scss new file mode 100644 index 0000000..0965587 --- /dev/null +++ b/source/style/modules/_clock.scss @@ -0,0 +1,19 @@ +@use "../hippie-style/hippie"; + +@use "sass:map"; + +.body_clock { + header { + z-index: map.get(hippie.$z-indexes, "content-top"); + } + + main { + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; + overflow: hidden; + } +} \ No newline at end of file diff --git a/source/style/modules/_game.scss b/source/style/modules/_game.scss new file mode 100644 index 0000000..7bb575e --- /dev/null +++ b/source/style/modules/_game.scss @@ -0,0 +1,3 @@ +.body_game { + background-color: hotpink; +} \ No newline at end of file diff --git a/source/style/modules/_start.scss b/source/style/modules/_start.scss new file mode 100644 index 0000000..031f7f7 --- /dev/null +++ b/source/style/modules/_start.scss @@ -0,0 +1,15 @@ +@use "../hippie-style/hippie"; + +.body_start { + main { + @extend .sec_main_center; + } + + #www-search { + input[type="text"] { + flex: 1; + padding: hippie.$padding_basic; + line-height: hippie.$line_text_basic; + } + } +} \ No newline at end of file diff --git a/source/style/modules/card/_card_module.scss b/source/style/modules/card/_card_module.scss new file mode 100644 index 0000000..5244c7f --- /dev/null +++ b/source/style/modules/card/_card_module.scss @@ -0,0 +1,83 @@ +@use "../../hippie-style/hippie"; + +// Card module styles +// ------------------------------------------------------------------------------ + +.html_card { + height: 100%; + + body { + min-height: 100%; + + .card_bkg { + @extend %full_parent; + transition-duration: 800ms; + overflow: hidden; + vertical-align: top; + z-index: -1; + + & > svg { + position: relative; + } + } + + .card_box { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + + * { + font-family: hippie.$family_text_card; + // text-align: center; + } + + & > div { + position: relative; + padding: 64px 64px 24px 64px; + border: 1px solid #FFF; + background-color: #F5F5F5; + z-index: 40; + } + } + + h1 { + margin: 16px 0; + color: #1E1E1E; + font-size: 24px; + line-height: 1.4em; + font-weight: normal; + } + + p { + margin-top: 0; + margin-bottom: 16px; + font-size: 12px; + line-height: 1.4em; + } + + .marked { + // padding-left: 1em; + // text-indent: -1em; + + &::before { + content: "*\0000a0" + } + } + + .decent { + color: #666 + } + + a { + color: #000; + text-decoration: none; + + &:hover { + color: #F4F9FA; + background-color: #0C85FF; + text-decoration: none; + } + } + } +} diff --git a/source/style/modules/demo/_demo_module.scss b/source/style/modules/demo/_demo_module.scss new file mode 100644 index 0000000..679de47 --- /dev/null +++ b/source/style/modules/demo/_demo_module.scss @@ -0,0 +1,290 @@ +@use "sass:color"; + +@use "../../hippie-style/hippie"; + +.demo__intro { + @extend .sec_main_center; + @extend .sec_main_status; +} + +.demo__status { + @extend .sec_main_status; + position: relative; + min-height: 50vh; + border-color: hippie.basic_color(foxtrot); + + h1:first-of-type { + margin-top: 0; + font-weight: bold; + } + + @media (max-height: 512px) { + .pos_abs { + position: static !important; + } + } +} + +.demo__header { + padding: hippie.$space_double; + + nav { + + ul { + margin: 0; + } + } +} + +.header_fancy { + background-color: color.adjust(hippie.basic_color(bravo), $alpha: -0.4); + + nav { + + a { + background-color: color.adjust(hippie.basic_color(alpha), $alpha: -0.4); + color: hippie.basic_color(alpha); + + &:active, + &:focus, + &:hover { + background-color: rgba(hippie.$color_brightest, 0.2); + color: hippie.$color_brightest; + } + } + } +} + +.header_fix { + position: relative; + top: 0; + left: 0; + width: 100%; + background-color: color.adjust(hippie.basic_color(charlie), $alpha: -0.4); + + nav { + + a { + + &:active, + &:focus, + &:hover { + background-color: rgba(hippie.$color_brightest, 0.2); + color: hippie.$color_brightest; + } + } + } +} + +.demo__footer { + width: 100%; + // height: 128px; + padding: hippie.$space_double 0; + background-color: hippie.$color_dark; + color: hippie.$color_bright; + + nav { + + a { + color: hippie.$color_brightest; + } + } +} + +.demo__sprite_down { + @include hippie.sprite(hippie.$down); + // width: 32px; + // height: 32px; + // background-image: url(../art/sprites.png); + // background-position: -32px 0; +} + +.demo__sprite_up { + @include hippie.sprite(hippie.$up); + // width: 32px; + // height: 64px; + // background-image: url(../art/sprites.png); + // background-position: 0 0; +} + +.demo__sprite_meta { + @include hippie.sprite(hippie.$meta); + // width: 32px; + // height: 32px; + // background-image: url(../art/sprites.png); + // background-position: -32px 32px; +} + +.demo__avatar { + + img { + opacity: 1; + width: 128px; + height: auto; + min-width: 128px; + min-height: 128px; + border-radius: 50%; + background-color: hippie.basic_color(delta); + } +} + +.demo__flag { + height: 40vh; +} + +.demo__credits { + margin: hippie.$space_small 0 hippie.$space_basic 0; +} + +.demo__queries > p { + padding: hippie.$padding_basic; +} + +.query_phoneUp { + @include hippie.forPhoneUp { + background-color: rgba(hippie.$color_text_basic, 0.2) + } +; +} + +.query_phoneOnly { + @include hippie.forPhoneOnly { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_tabletPortraitOnly { + @include hippie.forTabletPortraitOnly { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_tabletPortraitUp { + @include hippie.forTabletPortraitUp { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_tabletLandscapeOnly { + @include hippie.forTabletLandscapeOnly { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_tabletLandscapeUp { + @include hippie.forTabletLandscapeUp { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_desktopOnly { + @include hippie.forDesktopOnly { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_desktopUp { + @include hippie.forDesktopUp { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.query_bigDesktopUp { + @include hippie.forBigDesktopUp { + background-color: rgba(hippie.$color_text_basic, 0.2); + } +} + +.demo__query_example { + @include hippie.goingLarge(hippie.$screen_tiny) { + background-color: hippie.basic_color(alpha); + } + @include hippie.goingLarge(hippie.$screen_small) { + background-color: hippie.basic_color(bravo); + } + @include hippie.goingLarge(hippie.$screen_medium) { + background-color: hippie.basic_color(charlie); + } + @include hippie.goingLarge(hippie.$screen_large) { + background-color: hippie.basic_color(delta); + } + @include hippie.goingLarge(hippie.$screen_huge) { + background-color: hippie.basic_color(echo); + } + @include hippie.goingLarge(hippie.$screen_gigantic) { + background-color: hippie.basic_color(foxtrot); + } + margin-bottom: hippie.$space_small; + padding: hippie.$space_small; + text-align: center; + + &:after { + @extend code; + @include hippie.goingLarge(hippie.$screen_tiny) { + & { + content: '768px'; + } + } + @include hippie.goingLarge(hippie.$screen_small) { + & { + content: '1024px'; + } + } + @include hippie.goingLarge(hippie.$screen_medium) { + & { + content: '1280px'; + } + } + @include hippie.goingLarge(hippie.$screen_huge) { + & { + content: '1680px'; + } + } + @include hippie.goingLarge(hippie.$screen_gigantic) { + & { + content: '1920px'; + } + } + content: '< 768px'; + padding: hippie.$padding_basic; + border-radius: hippie.$radius_basic; + color: hippie.$color_brightest; + background-color: rgba(hippie.$color_front_basic, 0.2); + } +} + +// Tables +.demo__td_no_bl { + border-left: none; +} + +.demo__td_no_br { + border-right: none; +} + +.demo__td_pr { + padding-right: hippie.$space_double; +} + +.demo__td_pl { + padding-left: hippie.$space_double; +} + +#demo { + .wrap { + display: flex; + // height: 100%; + align-items: center; + justify-content: center; + } + + .hello { + flex: 0 1 auto; + width: 80%; + + ul { + padding: 1em 5em; + background-color: hippie.$color_darker; + } + } +} \ No newline at end of file diff --git a/source/style/modules/portal/_portal_module.scss b/source/style/modules/portal/_portal_module.scss new file mode 100644 index 0000000..6c5fb52 --- /dev/null +++ b/source/style/modules/portal/_portal_module.scss @@ -0,0 +1,155 @@ +@use "sass:color"; + +@use "../../hippie-style/hippie"; + +$portal_highlight: hippie.$color_highlight_basic; +$portal_margin: hippie.$space_double; +$portal_link_size: 128px; +$portal_icon_size: 64px; + +.body_portal { + @extend .h_full_view; +} + +.portal { + display: flex; + overflow: hidden; + height: 100vh; +} + +.portal__entry { + display: flex; + flex: 1; + align-items: center; + padding-right: $portal_margin; + padding-left: $portal_margin; + overflow-x: hidden; + overflow-y: auto; + transition: hippie.$transition_best; + + &:hover { + flex: 3; + background-color: #999; + + // h2 { + // color: $portal_highlight; + // } + + .portal__list { + display: block; + } + } + + section { + width: 100%; + padding: 32px 0; + } + + h2 { + @extend h4; + + position: relative; + margin-top: 0; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.portal__link { + display: block; + position: relative; + max-width: $portal_link_size; + height: $portal_link_size; + margin: 0 auto; + border-width: 1px; + border-style: solid; + border-color: transparent; + background-repeat: no-repeat; + background-position: center; + + &:hover { + background-color: color.adjust($portal_highlight, $alpha: -0.2); + border-color: $portal_highlight; + } + + &:focus { + outline: 0; + } + + img { + position: absolute; + top: 50%; + left: 50%; + width: $portal_icon_size; + height: $portal_icon_size; + transform: translate(-50%, -50%); + object-fit: cover; + object-position: 0 0; + } +} + +.portal__link--bibo { + background-image: url(../../art/portal/bibo.png); +} + +.portal__link--portfolio { + background-image: url(../../art/portal/portfolio.png); +} + +.portal__link--found { + background-image: url(../../art/portal/gems.png); +} + +.portal__link--flux { + background-image: url(../../art/portal/flux.png); +} + +.portal__link--blog { + background-image: url(../../art/portal/notes.png); +} + +.portal__link--tools { + background-image: url(../../art/portal/tools.png); +} + +.portal__link--safe { + background-image: url(../../art/portal/safe.png); +} + +.portal__link--game { + &:hover { + background-image: url(../../art/portal/games.png); + + & > img { + display: none; + } + } +} + +.portal__list { + @extend .list_link; + + display: none; + position: relative; + width: 80%; + margin: 48px auto 0 auto; + padding-left: 0; + + li { + list-style: none; + + a { + overflow: hidden; + width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + + img { + width: 16px; + height: auto; + } + } + } +} diff --git a/source/style/modules/songbook/_songbook_module.scss b/source/style/modules/songbook/_songbook_module.scss new file mode 100755 index 0000000..46d6bbe --- /dev/null +++ b/source/style/modules/songbook/_songbook_module.scss @@ -0,0 +1,22 @@ +@use "../../hippie-style/hippie"; + +.songbook_song { + pre { + @extend .pre_code + } + + header { + h2 { + margin-bottom: hippie.$space_basic; + } + + h6 { + color: hippie.$color_brightest; + } + + h2+h6 { + margin-top: 0; + margin-bottom: hippie.$space_small; + } + } +} \ No newline at end of file diff --git a/source/style/modules/ui/_drag_module.scss b/source/style/modules/ui/_drag_module.scss new file mode 100644 index 0000000..83f1abb --- /dev/null +++ b/source/style/modules/ui/_drag_module.scss @@ -0,0 +1,8 @@ +#space { + position: relative; + height: 100%; + + .body_frame { + background-color: white; + } +} \ No newline at end of file diff --git a/source/style/modules/ui/_form_module.scss b/source/style/modules/ui/_form_module.scss new file mode 100644 index 0000000..a826693 --- /dev/null +++ b/source/style/modules/ui/_form_module.scss @@ -0,0 +1,23 @@ +@use "../../hippie-style/hippie"; + +#grid { + display: grid; + gap: 8px; + grid-template-columns: repeat(4, 1fr); + grid-auto-rows: minmax(64px, auto); + margin-inline: hippie.$space_small; +} + +#grid>div { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + background-color: aquamarine; +} + +#grid>div:first-child { + grid-column: 1 / 3; + background-color: violet; +} \ No newline at end of file diff --git a/source/style/modules/ui/_frame_module.scss b/source/style/modules/ui/_frame_module.scss new file mode 100755 index 0000000..91182ad --- /dev/null +++ b/source/style/modules/ui/_frame_module.scss @@ -0,0 +1,136 @@ +@use "sass:color"; + +@use "../../hippie-style/hippie"; + +@mixin nav-spacer($name, $size, $orientation) { + .spacer.#{$name} { + width: $size; + } +} + +.body_frame { + @extend %flex-column; + + background-color: hippie.$color_back_basic; + + position: relative; + height: 100%; + + header, + aside, + footer { + border: 1px solid transparent; + } + + & > header { + background-color: rgba(0, 0, 0, .1); + } + + main { + @extend %flex-row; + + flex: 1; + + // aside { + // background-color: rgba(255, 255, 255, .1); + // } + + section { + + & > header, + & > footer { + background-color: color.adjust(hippie.$color_back_io, $alpha: -.5); + + &:hover { + background-color: hippie.$color_back_io; + } + } + } + + section, + section > div { + flex: 1; + } + + section { + @extend %flex-column; + gap: 0; + } + } +} + +.body_cli { + @extend .body_frame; + + background-color: black; +} + +#cli { + @extend %flex-column; + + background-color: black; + + #line { + @extend %flex-row; + } + + #prompt { + flex: 1; + } + + pre { + margin: .5em 0; + color: white; + } + + textarea { + resize: none; + max-height: 128px; + margin: hippie.$margin_io; + border: 0; + padding: hippie.$space_half; + // color: hippie.$color_text_io; + color: white; + // background-color: hippie.$color_back_io; + background-color: transparent; + line-height: 1.2; + } +} + + +#content { + background-color: hippie.$color_back_io; + + & > table { + width: 100%; + margin: 0; + border: 0; + + tr:hover td { + background-color: hippie.$color_highlight_basic; + } + + th { + border: 1px solid hippie.$color_border_io; + } + + td { + border-width: 0 1px; + border-style: solid; + border-color: hippie.$color_border_io; + } + } +} + + +.io { + .spacer { + margin: 0; + border: hippie.$border_dotted; + padding: 0; + opacity: .25; + } + + @include nav-spacer('a', hippie.$space_double, false); + @include nav-spacer('b', hippie.$space_small, false); +} \ No newline at end of file diff --git a/source/style/modules/ui/_gallery_module.scss b/source/style/modules/ui/_gallery_module.scss new file mode 100644 index 0000000..06803fb --- /dev/null +++ b/source/style/modules/ui/_gallery_module.scss @@ -0,0 +1,18 @@ +@use "../../hippie-style/hippie"; + +main.io section > .gallery { + display: flex; + flex-wrap: wrap; + justify-content: left; + align-items: start; + gap: 10px; + background-color: hippie.$color_back_io; + + & > div { + background-color: hotpink; + aspect-ratio: 2 / 3; + width: 128px; + transition: width 0.3s ease; + } +} + diff --git a/source/style/modules/ui/_new_module.scss b/source/style/modules/ui/_new_module.scss new file mode 100755 index 0000000..4e36346 --- /dev/null +++ b/source/style/modules/ui/_new_module.scss @@ -0,0 +1,99 @@ +@use "sass:color"; + +@use "../../hippie-style/hippie"; + +$module_top_height: 32px; +$body_top_space: $module_top_height + hippie.$space_basic; + +.body_new { + @extend %flex-column; + padding: $body_top_space hippie.$space_basic hippie.$space_basic; +} + +.area { + transition: hippie.$transition_best; + + &:hover { + background-color: #999; + } +} + +.grid { + display: grid; + flex: 1; + // grid-template-rows: repeat(2, 1fr); + // grid-template-columns: repeat(2, 1fr); + grid-template-areas: "a a"; + grid-auto-rows: 1fr; + grid-auto-columns: 1fr; +} + +.item { + // height: unset; + border-color: color.scale(hippie.$color_back_basic, $lightness: -4%); + border-style: dotted; + border-width: hippie.$width_border_8; + border-radius: hippie.$width_border_8; + padding: hippie.$space_basic; + background-color: rgb(hippie.$color_back_basic, .5); + // background-color: lighten(hippie.$color_back_basic, hippie.$color_diff_tiny); + // background-color: gold; +} + +.float { + min-height: 50%; +} + +#top { + position: fixed; + top: 0; + left: 0; + display: flex; + width: 100%; + height: $module_top_height; + background-color: rgb(0, 0, 0, .8); + z-index: hippie.$z_top; + + div:last-child { + flex: 1; + } + + p, + li { + color: #fff; + } + + h1 a { + color: #000; + } + + p, + li { + margin-top: 8px; + margin-bottom: 7px; + padding: 0 4px; + font-size: 12px; + line-height: 17px; + } + + nav ul { + display: flex; + margin: 0 0 0 16px; + } + + .brand { + height: 36px; + background-color: #fff; + margin: 0 0 0 128px; + padding: 7px 24px; + font-size: 16px; + line-height: 22px; + font-weight: bold; + text-align: center; + } + + .state { + margin-right: 16px; + text-align: right; + } +} \ No newline at end of file diff --git a/source/style/modules/ui/_table_module.scss b/source/style/modules/ui/_table_module.scss new file mode 100644 index 0000000..51896f4 --- /dev/null +++ b/source/style/modules/ui/_table_module.scss @@ -0,0 +1,17 @@ +@use "../../hippie-style/hippie"; + +main.io section > table { + table-layout: auto; + width: 100%; + margin: 0; + background-color: hippie.$color_back_io; + + thead > tr > th:first-child { + width: 1%; + } + + tr > th:first-child { + text-align: center; + } +} + diff --git a/source/style/modules/ui/_windows_module.scss b/source/style/modules/ui/_windows_module.scss new file mode 100644 index 0000000..98475c4 --- /dev/null +++ b/source/style/modules/ui/_windows_module.scss @@ -0,0 +1,164 @@ +@use "sass:map"; + +@use "../../hippie-style/hippie"; + +$padding_half: calc(#{hippie.$space_half} - 3px) hippie.$space_half; + +%flex-bar { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; + gap: hippie.$space_half hippie.$space_basic; +} + +#task-bar { + @extend %flex-bar; + z-index: map.get(hippie.$z-indexes, "content-top"); + position: fixed; + //right: 0; + //bottom: 0; + //left: 0; + border: 1px solid transparent; + padding: hippie.$space_basic; + background-color: rgba(0, 0, 0, .1); + + &.top, + &.bottom { + nav, + & > div { + &:last-child { + margin-top: unset; + margin-left: auto; + } + } + + .clock { + text-align: end; + } + } + + &.right, + &.left { + nav, + & > div { + &:last-child { + margin-top: auto; + margin-left: unset; + } + } + + .clock { + text-align: center; + + & > span { + display: inline-block; + word-wrap: anywhere; + } + } + } + + nav, + & > div { + @extend %flex-bar; + flex-direction: inherit; + } + + button { + @extend .button_io; + overflow: hidden; + + * { + pointer-events: none; + } + } + + nav.small { + //font-size: .8em; + + button { + border: none; + padding: $padding_half; + + &:hover { + background-color: transparent; + } + } + } + + nav.big { + font-size: 1.5em; + + button { + border: none; + padding: 0; + + &:hover { + background-color: transparent; + } + } + } + + .clock { + &, + & > * { + line-height: 1; + } + } +} + +#screen-space { + position: relative; + height: 100%; +} + +#placeholder { + @extend %flex-bar; + display: none; + z-index: map.get(hippie.$z-indexes, "toast"); + position: fixed; + border: 1px dashed black; + border-radius: 2px; + background-color: rgba(0, 0, 0, .4); + padding: 16px; + + &.top, + &.bottom { + span { + writing-mode: unset; + } + } + + &.right, + &.left { + span { + writing-mode: vertical-rl; + } + } + + * { + pointer-events: none; + } + + & > div { + @extend %flex-bar; + flex-direction: inherit; + flex-wrap: nowrap; + } + + .box, + .box_brd { + width: 16px; + height: 16px; + } + + .box { + background-color: black; + } + + .box_brd { + border: 2px solid black; + background-color: transparent; + } +} \ No newline at end of file diff --git a/source/style/ui.scss b/source/style/ui.scss new file mode 100644 index 0000000..8c802c7 --- /dev/null +++ b/source/style/ui.scss @@ -0,0 +1,200 @@ +@use "sass:map"; + +@use "demo_config"; +@use "hippie-style/hippie"; + +@use "modules/ui/frame_module"; +@use "modules/ui/new_module"; +@use "modules/ui/drag_module"; +@use "modules/ui/form_module"; +@use "modules/ui/gallery_module"; +@use "modules/ui/windows_module"; +@use "modules/ui/table_module"; + +$color_gui_back: hippie.$color_dark; +$space_gui_half: hippie.$space_half; + +.op_show { + transition: hippie.$transition_show; +} + +.op_hide { + transition: hippie.$transition_hide; +} + +.html_ui { + height: 100%; + + body { + position: relative; + min-height: 100%; + } +} + +.body_intro { + background-color: black; +} + +.step { + @extend %full_parent; +} + +#loader { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: white; +} + +#bar { + display: flex; + justify-content: space-between; + width: 50%; +} + +#wrap { + flex: 1; + background-color: hippie.$color_back_basic; +} + +#progress { + width: 0; + height: 100%; + background-color: black; +} + +#status, +#spinner { + @extend %basic; + + display: flex; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; + align-items: center; + margin-inline: $space_gui_half; + padding-block: calc($space_gui_half - 1px) $space_gui_half; + line-height: hippie.$line_basic; + text-align: center; +} + +#status { + width: 4em; + background-color: black; + color: white; +} + +#spinner { + width: 2.5em; + background-color: hippie.$color_back_basic; + color: black; + + span { + animation: rotate 1s linear infinite; + } +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +#intro { + z-index: map.get(hippie.$z-indexes, "content-top"); + overflow: hidden; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: black; + + h1, + p, + li { + color: white; + } +} + +.brand { + text-align: center; + + img { + display: inline-block; + width: 128px; + height: 128px; + background-color: white; + } + + *+h1 { + margin-top: hippie.$space_small; + margin-bottom: hippie.$space_large; + } +} + +.tech-stack { + display: flex; + padding-left: 0; + + li { + list-style: none; + padding-inline: hippie.$space_double; + } +} + +#agreement, +#idle { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; +} + +#agreement { + flex-direction: column; + background-color: map.get(hippie.$color_palette, bravo); + user-select: none; + + h1 { + margin-top: 0; + color: hippie.$color_brightest; + } +} + +#idle { + background-color: hippie.$color_back_basic; + transition: background-color 4s; + + &:hover>.mouse-overlay { + background-color: transparent !important; + transition: background-color hippie.$duration_basic hippie.$timing_basic 0s !important; + } +} + +.toast { + z-index: map.get(hippie.$z-indexes, "toast"); + position: fixed; + right: $space_gui_half; + bottom: hippie.$space_double; + + p { + color: white; + } + + kbd { + border-color: hippie.$color_brighter; + color: hippie.$color_back_io; + } +} + +.hello { + flex: 0 1 auto; + padding: 1em 2em; + background-color: rgba(hippie.$color_bright, .5); + font-family: hippie.$family_text_mono; +} diff --git a/source/templates/demo/_default.njk b/source/templates/demo/_default.njk new file mode 100644 index 0000000..e9b46de --- /dev/null +++ b/source/templates/demo/_default.njk @@ -0,0 +1,19 @@ + +{% extends "hippie/_default.njk" %} + +{% block meta %} + {% include "demo/partials/_meta.njk" %} + +{% endblock %} + +{% block links %} + {{ super() }} + + {# #} + {# #} +{% endblock %} + +{% block script %} + {{ super() }} + +{% endblock %} \ No newline at end of file diff --git a/source/templates/demo/_main.njk b/source/templates/demo/_main.njk new file mode 100644 index 0000000..c2797e8 --- /dev/null +++ b/source/templates/demo/_main.njk @@ -0,0 +1,21 @@ + +{% extends "hippie/_main.njk" %} + +{% block meta %} + {% include "demo/partials/_meta.njk" %} + +{% endblock %} + +{% block links %} + {{ super() }} + {% if hippie.legacyMode %} + + + + + {% endif %} + + + + +{% endblock %} \ No newline at end of file diff --git a/source/templates/demo/partials/_meta.njk b/source/templates/demo/partials/_meta.njk new file mode 100644 index 0000000..1253aaa --- /dev/null +++ b/source/templates/demo/partials/_meta.njk @@ -0,0 +1,9 @@ + + + + + + + +{# #} +{# #} diff --git a/source/templates/demo/partials/exp-colors.njk b/source/templates/demo/partials/exp-colors.njk new file mode 100644 index 0000000..286b30f --- /dev/null +++ b/source/templates/demo/partials/exp-colors.njk @@ -0,0 +1,7 @@ + +{# var colors = [{name: "alpha", class: "alpha_color"}] #} + +{% set cls = cycler("odd", "even") %} +{% for row in rows %} +
{{ row.name }}
+{% endfor %} diff --git a/source/templates/hippie/_app.njk b/source/templates/hippie/_app.njk new file mode 100755 index 0000000..f0703d2 --- /dev/null +++ b/source/templates/hippie/_app.njk @@ -0,0 +1,52 @@ + + + + + + + {% block head %} + {{ hippie.titlePrefix }} + {%- block title %}{% endblock %}{{ hippie.titlePostfix }} + + {% block meta %} + {% include "hippie/partials/_head_meta.njk" %} + + {% endblock %} + + {% block links %}{% endblock %} + + {% endblock %} + + + + {% block body %}{% endblock %} + + {% block script %} + + + + + + + {% endblock %} + + \ No newline at end of file diff --git a/source/templates/hippie/_app_frame.njk b/source/templates/hippie/_app_frame.njk new file mode 100755 index 0000000..35ddd64 --- /dev/null +++ b/source/templates/hippie/_app_frame.njk @@ -0,0 +1,19 @@ + +{% extends "hippie/_app.njk" %} +{% import "hippie/macros/_io.njk" as io %} + +{% block head %} + {{ super() }} +{% endblock %} + +{% block title %}{{ title }}{% endblock %} + +{% block links %} + {{ super() }} + + +{% endblock %} + +{% block script %} + {{ super() }} +{% endblock %} \ No newline at end of file diff --git a/source/templates/hippie/_default.njk b/source/templates/hippie/_default.njk new file mode 100644 index 0000000..8756e7f --- /dev/null +++ b/source/templates/hippie/_default.njk @@ -0,0 +1,41 @@ + +{# {% if hippie.debugMode %} #} + {% import "hippie/macros/_log.njk" as log %} +{# {% endif %} #} + + + + + + + {% block head %} + {{ hippie.titlePrefix }} + {%- block title %}{% endblock %}{{ hippie.titlePostfix }} + + {% block meta %} + {% include "hippie/partials/_head_meta.njk" %} + {% endblock %} + + {% include "hippie/partials/_head_script.njk" %} + {# {{ log.debug(true) }} #} + {{ log.start() }} + + {% block links %} + {% include "hippie/partials/_head_links.njk" %} + {% endblock %} + + {{ log.log('HEAD end :: Links parsed, starting to load.') }} + {% endblock %} + + + + {{ log.log('BODY start') }} + {% block body %}{% endblock %} + + {% block script %} + {{ log.log('BODY :: Loading script assets...') }} + {% endblock %} + + {{ log.log('BODY end :: Page script might still be loading.') }} + + \ No newline at end of file diff --git a/source/templates/hippie/_main.njk b/source/templates/hippie/_main.njk new file mode 100644 index 0000000..3934cc1 --- /dev/null +++ b/source/templates/hippie/_main.njk @@ -0,0 +1,73 @@ + +{% import "hippie/macros/_log.njk" as log %} + + + + + + + {% block head %} + {{ hippie.titlePrefix }} + {%- block title %}{% endblock %}{{ hippie.titlePostfix }} + + {% block meta %} + {% include "hippie/partials/_head_meta.njk" %} + {% endblock %} + + {% include "hippie/partials/_head_script.njk" %} + {{ log.debug(hippie.debugMode, true) }} + {{ log.start() }} + + {% block links %} + {% include "hippie/partials/_head_links.njk" %} + {% endblock %} + + {{ log.log('HEAD end :: Links parsed, starting to load.') }} + {% endblock %} + + + + {{ log.log('BODY start') }} + {% include "hippie/partials/_body_nav.njk" %} +
+ {% include "hippie/partials/_header.njk" %} + +
+ {% block main %}{% endblock %} +
+ + {% include "hippie/partials/_footer.njk" %} +
+ + {% block script %} + {{ log.log('BODY :: Loading script assets...') }} + {# #} + + + + + + {% endblock %} + + {{ log.log('BODY end :: Page script might still be loading.') }} + + \ No newline at end of file diff --git a/source/templates/hippie/app.liquid b/source/templates/hippie/app.liquid new file mode 100644 index 0000000..4118172 --- /dev/null +++ b/source/templates/hippie/app.liquid @@ -0,0 +1,39 @@ +{% assign pageId = page.fileSlug -%} +{% assign pageClass = 'html_ui' -%} +{% layout 'hippie/default.liquid' %} + +{% block title %}{{ title }}{% endblock %} + +{% block links %} +{{ block.super -}} + + +{% endblock %} + +{% block script %} + + + + + + +{% endblock %} \ No newline at end of file diff --git a/source/templates/hippie/default.liquid b/source/templates/hippie/default.liquid new file mode 100644 index 0000000..b8cdbfd --- /dev/null +++ b/source/templates/hippie/default.liquid @@ -0,0 +1,36 @@ + +{% if pageId %} +{%- capture idAttr %} id="{{ pageId }}"{% endcapture -%} +{% endif -%} +{% if pageClass %} + {%- capture classAttr %} class="{{ pageClass }}"{% endcapture -%} +{% endif -%} +{% if bodyClass %} + {%- capture bodyClassAttr %} class="{{ bodyClass }}"{% endcapture -%} +{% endif -%} + + + + {% block head %} + + {{- hippie.titlePrefix -}} + {% block title %}{% endblock -%} + {{ hippie.titlePostfix -}} + + {% block meta -%} + {% render 'hippie/partials/meta.liquid' %} + {% endblock -%} + {% block links -%} + {% render 'hippie/partials/links.liquid' %} + {% endblock -%} + {% endblock -%} + + + +{%- block body %}{% endblock -%} + +{%- block script %}{% endblock -%} + + \ No newline at end of file diff --git a/source/templates/hippie/full.liquid b/source/templates/hippie/full.liquid new file mode 100644 index 0000000..d445469 --- /dev/null +++ b/source/templates/hippie/full.liquid @@ -0,0 +1,48 @@ + +{% if pageId %} +{%- capture idAttr %} id="{{ pageId }}"{% endcapture -%} +{% endif -%} +{% if pageClass %} + {%- capture classAttr %} class="{{ pageClass }}"{% endcapture -%} +{% endif -%} +{% if bodyClass %} + {%- capture bodyClassAttr %} class="{{ bodyClass }}"{% endcapture -%} +{% endif -%} + + + + {% block head %} + + {{- hippie.titlePrefix -}} + {% block title %}{{ title }}{% endblock -%} + {{ hippie.titlePostfix -}} + + {% block meta -%} + {% render 'hippie/partials/meta.liquid', author: 'Interaktionsweise', desc: 'Hippie interweaves preeminent personal interface elements' %} + {% comment %}{% endcomment %} + {% endblock -%} + {% render 'hippie/partials/script-log.liquid' %} + {% render 'hippie/partials/log-setup', hippie: hippie, state: true -%} + {% render 'hippie/partials/log-start' -%} + {% block links -%} + {% render 'hippie/partials/links.liquid' %} + + {% endblock -%} + {% render 'hippie/partials/log-log' with 'HEAD end :: Links parsed, starting to load.' as msg -%} + {% endblock -%} + + + +{% render 'hippie/partials/log-log' with 'BODY start' as msg -%} +{%- block body %}{% endblock -%} +{% render 'hippie/partials/log-log' with 'BODY :: Loading script assets...' as msg -%} + +{%- block script %}{% endblock -%} +{% render 'hippie/partials/log-assets', state: true -%} +{% render 'hippie/partials/log-log', msg: 'BODY :: Assets loaded, running page specific script...', arg: true -%} +{% render 'hippie/partials/log-log' with 'BODY end :: Page script might still be loading.' as msg -%} +{% render 'hippie/partials/log-log' with 'Application ready... or is it?' as msg -%} + + \ No newline at end of file diff --git a/source/templates/hippie/macros/_footer.njk b/source/templates/hippie/macros/_footer.njk new file mode 100644 index 0000000..4b27499 --- /dev/null +++ b/source/templates/hippie/macros/_footer.njk @@ -0,0 +1,23 @@ +{% macro status(email = 'admin@domain.tld', app = 'Application', version = 'ver.s.ion', system = 'System Name', domain = 'domain.tld:port') %} +
+
Kontakt: + {{ email }} + * Server: + {{ app }}/{{ version }} + ({{ system }}) * Domain: + {{ domain }} +
+
+{% endmacro %} + +{% macro pinned(pos = 'bottom') %} +
+

Unten fixiert

+
+{% endmacro %} + +{% macro main() %} +
+
+
+{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_gate.njk b/source/templates/hippie/macros/_gate.njk new file mode 100644 index 0000000..3ae1247 --- /dev/null +++ b/source/templates/hippie/macros/_gate.njk @@ -0,0 +1,30 @@ +{% macro list(name, url, image, links) %} + +{% endmacro %} +{% macro simple(name, url) %} + +{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_header.njk b/source/templates/hippie/macros/_header.njk new file mode 100644 index 0000000..e074db7 --- /dev/null +++ b/source/templates/hippie/macros/_header.njk @@ -0,0 +1,30 @@ +{% macro main() %} +
+
+
+{% endmacro %} + +{% macro status(hippie, page) %} + {% import "hippie/macros/_state.njk" as state %} +
+

+ {{ hippie.brand | upper }} +

+ +
+

{{ state.coord("log")}} + / + {{ state.date("date")}} + / + {{ state.time("time")}}

+
+
+{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_io.njk b/source/templates/hippie/macros/_io.njk new file mode 100644 index 0000000..f9a7300 --- /dev/null +++ b/source/templates/hippie/macros/_io.njk @@ -0,0 +1,49 @@ +{% macro frameHeader(title) %} +
+ + +
+{% endmacro %} + +{% macro frameFooter(title) %} +
+ + +
+{% endmacro %} + +{% macro statusBar(title) %} +
+ + +
+{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_log.njk b/source/templates/hippie/macros/_log.njk new file mode 100644 index 0000000..e469527 --- /dev/null +++ b/source/templates/hippie/macros/_log.njk @@ -0,0 +1,24 @@ +{% macro start() %} + +{% endmacro %} +{% macro log(msg, arg = '') %} + +{% endmacro %} +{% macro debug(state = false, display = false, assets = false) %} + {# {{ set hippie.debugMode = state }} #} + +{% endmacro %} +{% macro asset(state = false) %} + +{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_nav.njk b/source/templates/hippie/macros/_nav.njk new file mode 100644 index 0000000..4fc5d93 --- /dev/null +++ b/source/templates/hippie/macros/_nav.njk @@ -0,0 +1,13 @@ +{% macro main(data, active = '') %} + +{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_placeholder.njk b/source/templates/hippie/macros/_placeholder.njk new file mode 100644 index 0000000..f3c2fa1 --- /dev/null +++ b/source/templates/hippie/macros/_placeholder.njk @@ -0,0 +1,100 @@ +{% macro email(class = '', text = '', address = 'name@domain.tld') %} + {% if text === '' %} + {% set text = address %} + {% endif %} + + {{ text }} + {# {{ 'name@domain.tld' | urlize | safe }} #} +{% endmacro %} + +{% macro link(class = '', text = 'domain.tld', href = 'http://domain.internal') %} + {{ text }} +{% endmacro %} + +{% macro name(class = '', text = 'Vorname Nachname') %} + {{ text }} +{% endmacro %} + +{% macro address(class = '', text = 'Straße Nr., PLZ Ort') %} + {{ text }} +{% endmacro %} + +{% macro phone(class = '', text = '+49 (0)101 1337 48') %} + {{ text }} +{% endmacro %} + +{% macro brand(class = '', name = 'Marke') %} +
+ {# Brand logo #} + + + + + + + +

{{ name }}

+
+{% endmacro %} + +{% macro flag(type = '', src = '', id = '', desc = 'Fahne von Interaktionsweise', width = '128') %} + {% set height = width / 1.6 %} + {% if type === 'svg' or type === '' %} + + {# + + + + + + + + + + + #} + {% if desc !== '' %} + {{ desc }} + {% endif %} + + + + + + + + + + + {% elif type === 'img' %} + {% if src === 'file' %} + + + {{ desc }} + + {% else %} + {{ desc }} + {% endif %} + {% endif %} +{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_song.njk b/source/templates/hippie/macros/_song.njk new file mode 100644 index 0000000..28c83d4 --- /dev/null +++ b/source/templates/hippie/macros/_song.njk @@ -0,0 +1,12 @@ +{% macro simple(index, data, content) %} +
+
+

{{ data.title }}

+
{{ data.releaseDate }}
+

{{ data.description }}

+
+ {#
{{ content }}
#} + {{ content | safe }} +
{{ index }}
+
+{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/_state.njk b/source/templates/hippie/macros/_state.njk new file mode 100644 index 0000000..ef1f34d --- /dev/null +++ b/source/templates/hippie/macros/_state.njk @@ -0,0 +1,16 @@ +{% macro coord(id, text = 'X: #, Y: ##') %} + {{ text }} +{% endmacro %} + +{% macro time(id, text = '00:00:00', postfix = ' Uhr') %} + {{ text }}{{ postfix }} +{% endmacro %} + +{% macro date(id) %} + + Wochentag, + ##. + Monat + #### + +{% endmacro %} \ No newline at end of file diff --git a/source/templates/hippie/macros/top-macro.njk b/source/templates/hippie/macros/top-macro.njk new file mode 100644 index 0000000..3b681c0 --- /dev/null +++ b/source/templates/hippie/macros/top-macro.njk @@ -0,0 +1,5 @@ +{% macro field(name, value='', type='text') %} +
+ +
+{% endmacro %} diff --git a/source/templates/hippie/page.liquid b/source/templates/hippie/page.liquid new file mode 100644 index 0000000..dd6e6ed --- /dev/null +++ b/source/templates/hippie/page.liquid @@ -0,0 +1,62 @@ +{% assign pageId = page.fileSlug -%} +{% layout 'hippie/full.liquid' %} + +{% block meta %} +{{ block.super -}} +{% comment %}{% endcomment %} +{% comment %}{% endcomment %} +{% endblock %} + +{% block links %} +{{ block.super -}} +{% if hippie.legacyMode %} + + + {% comment %}{% endcomment %} + {% comment %}{% endcomment %} +{% endif %} + +{% comment %}{% endcomment %} +{% comment %}{% endcomment %} +{% endblock %} + +{% block body %} +{{ block.super -}} +{% render 'hippie/partials/nav-page.liquid' %} +
+ {% render 'hippie/partials/header-page.liquid' %} + +
+ {% block main %}{% endblock %} +
+ + {% render 'hippie/partials/footer-page.liquid' %} +
+{% endblock %} + +{% block script %} + + + + + +{% endblock %} \ No newline at end of file diff --git a/source/templates/hippie/partials/_body_nav.njk b/source/templates/hippie/partials/_body_nav.njk new file mode 100644 index 0000000..870d2a6 --- /dev/null +++ b/source/templates/hippie/partials/_body_nav.njk @@ -0,0 +1,34 @@ + +
+ +
+{#
+? +
#} \ No newline at end of file diff --git a/source/templates/hippie/partials/_footer.njk b/source/templates/hippie/partials/_footer.njk new file mode 100644 index 0000000..3b56531 --- /dev/null +++ b/source/templates/hippie/partials/_footer.njk @@ -0,0 +1,3 @@ + +{% import "hippie/macros/_footer.njk" as footer %} +{{ footer.main() }} \ No newline at end of file diff --git a/source/templates/hippie/partials/_head_links.njk b/source/templates/hippie/partials/_head_links.njk new file mode 100644 index 0000000..c95a39b --- /dev/null +++ b/source/templates/hippie/partials/_head_links.njk @@ -0,0 +1,4 @@ + +{# #} + + diff --git a/source/templates/hippie/partials/_head_meta.njk b/source/templates/hippie/partials/_head_meta.njk new file mode 100644 index 0000000..a21d094 --- /dev/null +++ b/source/templates/hippie/partials/_head_meta.njk @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/source/templates/hippie/partials/_head_script.njk b/source/templates/hippie/partials/_head_script.njk new file mode 100644 index 0000000..7002ee5 --- /dev/null +++ b/source/templates/hippie/partials/_head_script.njk @@ -0,0 +1,114 @@ + + \ No newline at end of file diff --git a/source/templates/hippie/partials/_header.njk b/source/templates/hippie/partials/_header.njk new file mode 100644 index 0000000..2531200 --- /dev/null +++ b/source/templates/hippie/partials/_header.njk @@ -0,0 +1,3 @@ + +{% import "hippie/macros/_header.njk" as header %} +{{ header.main() }} \ No newline at end of file diff --git a/source/templates/hippie/partials/footer-page.liquid b/source/templates/hippie/partials/footer-page.liquid new file mode 100644 index 0000000..7aa500a --- /dev/null +++ b/source/templates/hippie/partials/footer-page.liquid @@ -0,0 +1,3 @@ +
+
+
\ No newline at end of file diff --git a/source/templates/hippie/partials/footer-pinned.liquid b/source/templates/hippie/partials/footer-pinned.liquid new file mode 100644 index 0000000..5f4160a --- /dev/null +++ b/source/templates/hippie/partials/footer-pinned.liquid @@ -0,0 +1,3 @@ +
+

Unten fixiert

+
diff --git a/source/templates/hippie/partials/footer-status.liquid b/source/templates/hippie/partials/footer-status.liquid new file mode 100644 index 0000000..b46ecf2 --- /dev/null +++ b/source/templates/hippie/partials/footer-status.liquid @@ -0,0 +1,9 @@ +
+
Kontakt: + {{ email | default: 'admin@domain.tld' }} + · Server: + {{ app | default: 'Application' }}/{{ version | default: 'ver.s.ion' }} + ({{ system | default: 'System name' }}) · Domain: + {{ domain | default: 'domain.tld:port' }} +
+
\ No newline at end of file diff --git a/source/templates/hippie/partials/frame-header.liquid b/source/templates/hippie/partials/frame-header.liquid new file mode 100644 index 0000000..14d04bc --- /dev/null +++ b/source/templates/hippie/partials/frame-header.liquid @@ -0,0 +1,20 @@ +
+ + +
\ No newline at end of file diff --git a/source/templates/hippie/partials/frame-mode.liquid b/source/templates/hippie/partials/frame-mode.liquid new file mode 100644 index 0000000..4e87985 --- /dev/null +++ b/source/templates/hippie/partials/frame-mode.liquid @@ -0,0 +1,10 @@ +
+ + +
\ No newline at end of file diff --git a/source/templates/hippie/partials/frame-status.liquid b/source/templates/hippie/partials/frame-status.liquid new file mode 100644 index 0000000..98c94f9 --- /dev/null +++ b/source/templates/hippie/partials/frame-status.liquid @@ -0,0 +1,11 @@ +
+ + +
\ No newline at end of file diff --git a/source/templates/hippie/partials/header-page.liquid b/source/templates/hippie/partials/header-page.liquid new file mode 100644 index 0000000..a37637a --- /dev/null +++ b/source/templates/hippie/partials/header-page.liquid @@ -0,0 +1,3 @@ +
+
+
\ No newline at end of file diff --git a/source/templates/hippie/partials/header-status.liquid b/source/templates/hippie/partials/header-status.liquid new file mode 100644 index 0000000..725e305 --- /dev/null +++ b/source/templates/hippie/partials/header-status.liquid @@ -0,0 +1,21 @@ +
+

+ {{ hippie.brand | upcase }} +

+ +
+

{% render 'hippie/partials/status-coord', id: "log" %} + / + {% render 'hippie/partials/status-date', id: "date" %} + / + {% render 'hippie/partials/status-time', id: "time" %}

+
+
diff --git a/source/templates/hippie/partials/links.liquid b/source/templates/hippie/partials/links.liquid new file mode 100644 index 0000000..32d854d --- /dev/null +++ b/source/templates/hippie/partials/links.liquid @@ -0,0 +1,3 @@ +{% comment %}{% endcomment %} + + diff --git a/source/templates/hippie/partials/log-assets.liquid b/source/templates/hippie/partials/log-assets.liquid new file mode 100644 index 0000000..a34b417 --- /dev/null +++ b/source/templates/hippie/partials/log-assets.liquid @@ -0,0 +1,3 @@ + diff --git a/source/templates/hippie/partials/log-log.liquid b/source/templates/hippie/partials/log-log.liquid new file mode 100644 index 0000000..ba21f2a --- /dev/null +++ b/source/templates/hippie/partials/log-log.liquid @@ -0,0 +1,3 @@ + diff --git a/source/templates/hippie/partials/log-setup.liquid b/source/templates/hippie/partials/log-setup.liquid new file mode 100644 index 0000000..04fd9b2 --- /dev/null +++ b/source/templates/hippie/partials/log-setup.liquid @@ -0,0 +1,6 @@ +{% comment %}{% assign hippie.debugMode = state %}{% endcomment %} + diff --git a/source/templates/hippie/partials/log-start.liquid b/source/templates/hippie/partials/log-start.liquid new file mode 100644 index 0000000..e137e33 --- /dev/null +++ b/source/templates/hippie/partials/log-start.liquid @@ -0,0 +1,4 @@ + diff --git a/source/templates/hippie/partials/meta.liquid b/source/templates/hippie/partials/meta.liquid new file mode 100644 index 0000000..a4b3cc2 --- /dev/null +++ b/source/templates/hippie/partials/meta.liquid @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/templates/hippie/partials/nav-page.liquid b/source/templates/hippie/partials/nav-page.liquid new file mode 100644 index 0000000..cf52d72 --- /dev/null +++ b/source/templates/hippie/partials/nav-page.liquid @@ -0,0 +1,33 @@ +
+ +
+{% comment %}
+ ? +
{% endcomment %} \ No newline at end of file diff --git a/source/templates/hippie/partials/placeholder-flag.liquid b/source/templates/hippie/partials/placeholder-flag.liquid new file mode 100644 index 0000000..280a48c --- /dev/null +++ b/source/templates/hippie/partials/placeholder-flag.liquid @@ -0,0 +1,43 @@ +{% assign height = width | divided_by: 1.6 %} + +{% if type == 'svg' or type == '' %} + + {% comment %} + + + + + + + + + + + {% endcomment %} + {% if desc != '' %} + {{ desc }} + {% endif %} + + + + + + + + + + +{% elsif type == 'img' %} + {% if src == 'file' %} + + + {{ desc }} + + {% else %} + {{ desc }} + {% endif %} +{% endif %} diff --git a/source/templates/hippie/partials/script-log.liquid b/source/templates/hippie/partials/script-log.liquid new file mode 100644 index 0000000..7e270c7 --- /dev/null +++ b/source/templates/hippie/partials/script-log.liquid @@ -0,0 +1,113 @@ + \ No newline at end of file diff --git a/source/templates/hippie/partials/status-coord.liquid b/source/templates/hippie/partials/status-coord.liquid new file mode 100644 index 0000000..29e592f --- /dev/null +++ b/source/templates/hippie/partials/status-coord.liquid @@ -0,0 +1 @@ +{{ text | default: 'X: #, Y: ##' }} diff --git a/source/templates/hippie/partials/status-date.liquid b/source/templates/hippie/partials/status-date.liquid new file mode 100644 index 0000000..296a866 --- /dev/null +++ b/source/templates/hippie/partials/status-date.liquid @@ -0,0 +1,6 @@ + + Wochentag, + ##. + Monat + #### + diff --git a/source/templates/hippie/partials/status-time.liquid b/source/templates/hippie/partials/status-time.liquid new file mode 100644 index 0000000..f981e80 --- /dev/null +++ b/source/templates/hippie/partials/status-time.liquid @@ -0,0 +1 @@ +{{ text | default: '00:00:00' }}{{ postfix | default: ' Uhr' }} diff --git a/source/templates/hippie/simple.liquid b/source/templates/hippie/simple.liquid new file mode 100644 index 0000000..b888886 --- /dev/null +++ b/source/templates/hippie/simple.liquid @@ -0,0 +1,9 @@ +{% assign pageId = page.fileSlug -%} +{% layout 'hippie/default.liquid' %} + +{% block title %}{{ title }}{% endblock %} + +{% block links %} +{{ block.super -}} + +{% endblock %} diff --git a/source/templates/hippie/status.liquid b/source/templates/hippie/status.liquid new file mode 100644 index 0000000..86499ed --- /dev/null +++ b/source/templates/hippie/status.liquid @@ -0,0 +1,37 @@ + +{% if pageClass %} +{%- capture classAttr %} class="{{ pageClass }}"{% endcapture -%} +{% endif -%} +{% if bodyClass %} + {%- capture bodyClassAttr %} class="{{ bodyClass }}"{% endcapture -%} +{% endif -%} + + + + {% block head %} + + {{- hippie.titlePrefix -}} + {% block title %}{{ title }}{% endblock -%} + {{ hippie.titlePostfix -}} + + {% block meta -%} + {% render 'hippie/partials/meta.liquid' %} + {% endblock -%} + {% block links -%} + + + {% endblock -%} + {% endblock -%} + + + +{%- block body %} +
+

{{ title }}

+ {% block main %}{% endblock -%} +
+{% render 'hippie/partials/footer-status' %} +{% endblock -%} + + \ No newline at end of file diff --git a/source/templates/hippie/world.liquid b/source/templates/hippie/world.liquid new file mode 100644 index 0000000..ca935dc --- /dev/null +++ b/source/templates/hippie/world.liquid @@ -0,0 +1,11 @@ + + + + + {{ title }} + + + +{{ content }} + + \ No newline at end of file diff --git a/vendor/jq-sticky-anything.min.js b/vendor/jq-sticky-anything.min.js new file mode 100644 index 0000000..4bed161 --- /dev/null +++ b/vendor/jq-sticky-anything.min.js @@ -0,0 +1,5 @@ +/** +* @preserve Sticky Anything 2.0.1 | @senff | GPL2 Licensed +*/ + +!function(a){function b(b,c,d,e,f,g,h){$listenerElement=a(".sticky-element-active");var i=$listenerElement.offset();if(orgElementTop=i.top,f){var j=a(f).offset();pushElementTop=j.top}var k=window,l="inner";if("innerWidth"in window||(l="client",k=document.documentElement||document.body),viewport=k[l+"Width"],a(window).scrollTop()>=orgElementTop-b&&viewport>=c&&viewport<=d){coordsOrgElement=$listenerElement.offset(),leftOrgElement=coordsOrgElement.left,widthPlaceholder=$listenerElement[0].getBoundingClientRect().width,widthPlaceholder||(widthPlaceholder=$listenerElement.css("width")),heightPlaceholder=$listenerElement[0].getBoundingClientRect().height,heightPlaceholder||(heightPlaceholder=$listenerElement.css("height")),widthSticky=a(".sticky-element-original").css("width"),"0px"==widthSticky&&(widthSticky=a(".sticky-element-original")[0].getBoundingClientRect().width),heightSticky=a(".sticky-element-original").height(),paddingOrgElement=[a(".sticky-element-original").css("padding-top"),a(".sticky-element-original").css("padding-right"),a(".sticky-element-original").css("padding-bottom"),a(".sticky-element-original").css("padding-left")],paddingSticky=paddingOrgElement[0]+" "+paddingOrgElement[1]+" "+paddingOrgElement[2]+" "+paddingOrgElement[3],marginOrgElement=[$listenerElement.css("margin-top"),$listenerElement.css("margin-right"),$listenerElement.css("margin-bottom"),$listenerElement.css("margin-left")],marginPlaceholder=marginOrgElement[0]+" "+marginOrgElement[1]+" "+marginOrgElement[2]+" "+marginOrgElement[3],assignedStyles="";for(var m in g)"inline"==g[m]?assignedStyles+=m+":inline-block; ":assignedStyles+=m+":"+g[m]+"; ";elementHeight=0,heightPlaceholder<1?elementHeight=a(".sticky-element-cloned").outerHeight():elementHeight=a(".sticky-element-original").outerHeight(),f&&a(window).scrollTop()>pushElementTop-b-elementHeight?stickyTopMargin=pushElementTop-b-elementHeight-a(window).scrollTop():stickyTopMargin=0,assignedStyles+="width:"+widthPlaceholder+"px; height:"+heightPlaceholder+"px; margin:"+marginPlaceholder+";",a(".sticky-element-original").removeClass("sticky-element-not-sticky").addClass("sticky-element-sticky").removeClass("sticky-element-active").css("position","fixed").css("left",leftOrgElement+"px").css("top",b+"px").css("width",widthSticky).css("margin-left",0).css("padding",paddingSticky).css("margin-top",stickyTopMargin).css("z-index",e),a(".sticky-element-placeholder").hasClass("sticky-element-active")||a(".sticky-element-placeholder").addClass("sticky-element-active").attr("style",assignedStyles)}else a(".sticky-element-original").addClass("sticky-element-not-sticky").removeClass("sticky-element-sticky").addClass("sticky-element-active").attr("style",h),a(".sticky-element-placeholder").hasClass("sticky-element-active")&&a(".sticky-element-placeholder").removeClass("sticky-element-active").removeAttr("style").css("width","0").css("height","0").css("margin","0").css("padding","0")}function c(){a(".sticky-element-original").addClass("sticky-element-active").before('')}function d(a){return o={},o.display=a.css("display"),o.float=a.css("float"),o.flex=a.css("flex"),o["box-sizing"]=a.css("box-sizing"),o.clear=a.css("clear"),o.overflow=a.css("overflow"),o.transform=a.css("transform"),o}a.fn.stickThis=function(e){var f=a.extend({top:0,minscreenwidth:0,maxscreenwidth:99999,zindex:1,debugmode:!1,pushup:""},e),g=a(this).length,h=a(f.pushup).length;return h<1?(1==f.debugmode&&f.pushup&&console.error('STICKY ANYTHING DEBUG: There are no elements with the selector/class/ID you selected for the Push-up element ("'+f.pushup+'").'),f.pushup=""):h>1&&(1==f.debugmode&&console.error("STICKY ANYTHING DEBUG: There are "+h+' elements on the page with the selector/class/ID you selected for the push-up element ("'+f.pushup+'"). You can select only ONE element to push the sticky element up.'),f.pushup=""),g<1?1==f.debugmode&&console.error('STICKY ANYTHING DEBUG: There are no elements with the selector/class/ID you selected for the sticky element ("'+this.selector+'").'):g>1?1==f.debugmode&&console.error("STICKY ANYTHING DEBUG: There There are "+h+' elements with the selector/class/ID you selected for the sticky element ("'+this.selector+'"). You can only make ONE element sticky.'):(a(this).addClass("sticky-element-original").addClass("sticky-element-not-sticky"),orgAssignedStyles=d(a(this)),orgInlineStyles=a(".sticky-element-original").attr("style"),null==orgInlineStyles&&(orgInlineStyles=""),c(),checkElement=setInterval(function(){b(f.top,f.minscreenwidth,f.maxscreenwidth,f.zindex,f.pushup,orgAssignedStyles,orgInlineStyles)},10)),this}}(jQuery);