Compare commits
253 commits
testing-cl
...
developmen
| Author | SHA1 | Date | |
|---|---|---|---|
| 6074dc6480 | |||
| c6fca63470 | |||
| bffa82030b | |||
| 86f3c679c3 | |||
| 5538a6ae0b | |||
| 04072e7706 | |||
| c73f4fbdb3 | |||
| 0f92174143 | |||
| 5cd55ab2bc | |||
| 1d4d5624d5 | |||
| 42e8e6f5f5 | |||
| 904e9e8e47 | |||
| 0c16b43ec7 | |||
| b67a8a893a | |||
| 610e22b3c9 | |||
| 38274c1277 | |||
| 167e35ae33 | |||
| 9fc463393e | |||
| 31457088da | |||
| d5dfacb9a9 | |||
| 46491f8df7 | |||
| 019e25945e | |||
| ba96b889da | |||
| aa40877469 | |||
| e698161a2d | |||
| afcb06a808 | |||
| a67a36decb | |||
| 19577eca8c | |||
| a1b5aa8c59 | |||
| c518672db0 | |||
| a962046183 | |||
| 87bea40776 | |||
| c1633e0bc9 | |||
| 8fe884aad6 | |||
| 780eb6a806 | |||
| a56b8f8ca7 | |||
| 4f029a1a73 | |||
| 45b0aef67d | |||
| 5480e83e29 | |||
| cc391bc7e4 | |||
| 65eec5f6bd | |||
| a83dc59eb2 | |||
| 2387e08ad0 | |||
| ebed5a2d42 | |||
| e7aaf257e3 | |||
| 4f6af7e200 | |||
| 88c7974d5c | |||
| 65041f65b3 | |||
| e9c383b41e | |||
| d533563569 | |||
| 245227d7e9 | |||
| c4947a9c04 | |||
| d3ab17d5a1 | |||
| 437c561847 | |||
| 6520cdbcf0 | |||
| a5bf80cb91 | |||
| 95e0460325 | |||
| 52ee2e3dd7 | |||
| a7431ec85d | |||
| 2091dc4f30 | |||
| 99b98635e7 | |||
| 92f3c4f81f | |||
| 6a717b7ab8 | |||
| fdef673886 | |||
| f2ff20ce73 | |||
| 30fcd22a7b | |||
| 6ae411c83b | |||
| 9b44963ba2 | |||
| 76791d93ba | |||
| a5462dcc7e | |||
| 3ae1cebdd6 | |||
| dd8b461034 | |||
| 6c98beb148 | |||
| 43de7d86fa | |||
| 1db7faaf18 | |||
| c3de29d634 | |||
| a1aae6a902 | |||
| 6a574d92c2 | |||
| 91df239a42 | |||
| d0fde7cc6a | |||
| 7f4b4aeaee | |||
| 48b6e1d0ed | |||
| 10c71a3909 | |||
| 8d1d182be4 | |||
| 0aca2bf3ee | |||
| 5261754da5 | |||
| 8ce1e14fad | |||
| ee43638cbc | |||
| 56633b364e | |||
| 05f2ab1c0d | |||
| ad135a58c1 | |||
| 667269e4e7 | |||
| 62b21b5e68 | |||
| 743d9fba9e | |||
| 2f87621756 | |||
| a924065931 | |||
| 8fb6181154 | |||
| 6e75d9b290 | |||
| 8af4dc92d9 | |||
| 318af09d40 | |||
| 39591b2c37 | |||
| 5765207e51 | |||
| 2d3c049d40 | |||
| d64bf61a9c | |||
| b10379782f | |||
| fd5f3ba89f | |||
| d04e0e3174 | |||
| 6c5bf2e54d | |||
| f28bed372c | |||
| 63c899b789 | |||
| 0daf19bd87 | |||
| 78a761f9cf | |||
| 0ac6766fb0 | |||
| 36cf5178f2 | |||
| e11cb2f184 | |||
| d72f47bdd6 | |||
| 2baad1d314 | |||
| ca9f6e21ea | |||
| aa4c0968ae | |||
| 9d98b69e31 | |||
| 9bf97019ca | |||
| 5092c1680d | |||
| e5516c81f1 | |||
| 15a9b83e80 | |||
| b1c7f4100e | |||
| 759283fd9f | |||
| 0a5bc191d3 | |||
| 498f59a939 | |||
| bbd1a9674e | |||
| a85dbbe27c | |||
| f83b5aa258 | |||
| 0dfba8e6ee | |||
| 5783711080 | |||
| 1b3a320b17 | |||
| ddbd406fc8 | |||
| 148f4e0a21 | |||
| d6827e6dfd | |||
| 9ce027285c | |||
| 7912b002a2 | |||
| 9696442a91 | |||
| fe8008c5b5 | |||
| eea7a08e3a | |||
| 3168d6cb7e | |||
| 29c705f272 | |||
| 15bfbcc97b | |||
| 1a1badc786 | |||
| 86fce27554 | |||
| 9e560d7e62 | |||
| f257a44d89 | |||
| 847c4a9f6b | |||
| 1e874c4ac8 | |||
| dfa315310f | |||
| fcdbfb41ef | |||
| 432af47d2c | |||
| 1b7e4f4888 | |||
| 5663813ecf | |||
| 5f8e048c84 | |||
| b7b1d15456 | |||
| a3eb2250ab | |||
| e39d515b9e | |||
| 50b43cdc2f | |||
| a18b42bb2a | |||
| 53897754e2 | |||
| 3dc836656a | |||
| aa5d095e64 | |||
| 0f561d360a | |||
| 667485fce1 | |||
| 13b1924360 | |||
| 77178886cd | |||
| 20b43b8d35 | |||
| abf393191c | |||
| 9d15f22f5d | |||
| 8a17baed12 | |||
| d65016c5d1 | |||
| 4a347b821e | |||
| b79edd4858 | |||
| 496b6e37d8 | |||
| cc4649df1e | |||
| bac4b73c08 | |||
| c259ead9a0 | |||
| 6c252875fa | |||
| 6098a1e62d | |||
| 1ada62f6ec | |||
| 0996ace34f | |||
| e0cfcfac13 | |||
| 3c9c438b25 | |||
| e21b9d36b5 | |||
| ff5d4bd3eb | |||
| c77bcd8bdc | |||
| 6b644ca9f3 | |||
| 46988576a9 | |||
| afc733f4d4 | |||
| 07656b404f | |||
| c1fea8064e | |||
| d9f7ae1ff9 | |||
| ac8f55a7c9 | |||
| 65d80fcbc4 | |||
| 50b0d864c2 | |||
| 41c5757790 | |||
| 5f54ab6bbe | |||
| 9c821fed90 | |||
| 7c83a33920 | |||
| 8ace5526bf | |||
| a3656b86fe | |||
| 1ddba29d9c | |||
| e572f64259 | |||
| 0c37acf47f | |||
| f1d17490e0 | |||
| c0c87771b6 | |||
| e76f457851 | |||
| 10d6fe7d82 | |||
| 07e2e8ff6d | |||
| 24efcefab3 | |||
| 0a27169a1b | |||
| 6e722cd907 | |||
| 30ad2f3067 | |||
| a33163d556 | |||
| 8b7241c4da | |||
| 52daf0ca51 | |||
| 57dffa3502 | |||
| 5786e9e4b0 | |||
| 06e4a80b66 | |||
| d83ae3ea22 | |||
| 3b380e954a | |||
| 08e258d7aa | |||
| 7950d23b14 | |||
| 4d00d34d63 | |||
| c98ebb44ca | |||
| 07f51e80a2 | |||
| 7f84235f08 | |||
| 4fcd7742a8 | |||
| 8f15664d57 | |||
| 875041bacf | |||
| 9fbc19388f | |||
| 9ff731395a | |||
| ba063b0760 | |||
| 13b9318f56 | |||
| fe2261fda5 | |||
| 8942dc3632 | |||
| 6cfe5b21e1 | |||
| 8937b36a1e | |||
| ad150fadf2 | |||
| 79ad6f452d | |||
| b0bb338bee | |||
| fa5e74a100 | |||
| 7255b009b9 | |||
| 2c001aaa4e | |||
| 234f4e6e7d | |||
| 37986e7b4b | |||
| 58cb0eba2c | |||
| a43def2e92 | |||
| 2c61450238 | |||
| 2e2091a179 |
137 changed files with 10566 additions and 6732 deletions
13
.editorconfig
Normal file
13
.editorconfig
Normal file
|
|
@ -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
|
||||||
151
.eleventy.js
151
.eleventy.js
|
|
@ -1,49 +1,142 @@
|
||||||
module.exports = function (eleventyConfig) {
|
/* jshint strict: false */
|
||||||
// eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
|
|
||||||
|
|
||||||
eleventyConfig.setNunjucksEnvironmentOptions({
|
import fs from 'fs/promises';
|
||||||
// throwOnUndefined: true,
|
import {HtmlBasePlugin} from "@11ty/eleventy";
|
||||||
trimBlocks: true
|
import pluginWebc from "@11ty/eleventy-plugin-webc";
|
||||||
|
|
||||||
|
async function hasFiles(dirPath) {
|
||||||
|
try {
|
||||||
|
const entries = await fs.readdir(dirPath, {withFileTypes: true});
|
||||||
|
return entries.some(entry => entry.isFile());
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error reading directory:', err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// noinspection JSUnusedGlobalSymbols
|
||||||
|
export default async function (eleventyConfig) {
|
||||||
|
eleventyConfig.addPlugin(HtmlBasePlugin);
|
||||||
|
eleventyConfig.addPlugin(pluginWebc);
|
||||||
|
|
||||||
|
eleventyConfig.setLiquidOptions({
|
||||||
|
// greedy: false,
|
||||||
|
// trimOutputLeft: true,
|
||||||
|
// trimOutputRight: true,
|
||||||
|
// trimTagLeft: true,
|
||||||
|
// trimTagRight : true,
|
||||||
});
|
});
|
||||||
|
|
||||||
eleventyConfig.addGlobalData("permalink", () => {
|
eleventyConfig.addGlobalData('permalink', () => {
|
||||||
return (data) => `${data.page.filePathStem}.${data.page.outputFileExtension}`;
|
return (data) => `${data.page.filePathStem}.${data.page.outputFileExtension}`;
|
||||||
});
|
});
|
||||||
|
|
||||||
let demoMode = false;
|
// TODO: Demo entfernen
|
||||||
let pageBase = demoMode ? './demo/' : './';
|
const permalinkPath = await hasFiles('source/view') ? '/demo/' : '/';
|
||||||
|
|
||||||
eleventyConfig.addGlobalData("hippie", {
|
eleventyConfig.addGlobalData('hippie', {
|
||||||
pageBase: pageBase,
|
|
||||||
brand: 'hippie',
|
brand: 'hippie',
|
||||||
titlePrefix: '',
|
titlePrefix: '',
|
||||||
titlePostfix: ' - HIPPIE',
|
titlePostfix: ' - HIPPIE',
|
||||||
|
placeholders: {
|
||||||
|
name: 'Vorname Nachname',
|
||||||
|
address: 'Straße Nr., PLZ Ort',
|
||||||
|
phone: '+49 (0)101 1337 48',
|
||||||
|
mail: 'name@domain.tld',
|
||||||
|
domain: 'https://domain.tld'
|
||||||
|
},
|
||||||
|
permalink: permalinkPath,
|
||||||
debugMode: true,
|
debugMode: true,
|
||||||
legacyMode: false
|
legacyMode: false
|
||||||
});
|
});
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy({"source/art/images": "art"});
|
eleventyConfig.addShortcode('text', function (text, attrId, attrClass) {
|
||||||
|
return `<span id="${attrId}" class="${attrClass}">${text}</span>`;
|
||||||
|
});
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy({"source/art/favicons/**/*.+(ico|png|svg)": "."});
|
eleventyConfig.addShortcode('link', function (target, text, attrId, attrClass) {
|
||||||
|
if (!text || text === '') {
|
||||||
|
text = target;
|
||||||
|
}
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy({"source/code/**/*.js": "js"});
|
if (target.indexOf('@') !== -1) {
|
||||||
|
target = 'mailto:' + target;
|
||||||
|
}
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy({"source/data/**/*.json": "json"});
|
return `<a id="${attrId}" class="${attrClass}" href="${target}">${text}</a>`;
|
||||||
|
});
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy("vendor");
|
eleventyConfig.addPairedShortcode('brand', function (content, attrClass = 'brand', direction = 'first') {
|
||||||
|
const logo = `
|
||||||
|
<svg
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
id="layer1">
|
||||||
|
<g
|
||||||
|
id="g2"
|
||||||
|
transform="matrix(0.984375,0,0,0.984375,4,4)"
|
||||||
|
style="stroke-width:1.01587">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:8.12698;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect1"
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
x="0"
|
||||||
|
y="0" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:8.12698;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1"
|
||||||
|
cx="256"
|
||||||
|
cy="256"
|
||||||
|
r="256" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:8.12698;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path2"
|
||||||
|
d="M 477.7025,128 256,512 34.297496,128 Z"
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
`;
|
||||||
|
let output = '';
|
||||||
|
|
||||||
eleventyConfig.addWatchTarget("./source/style/");
|
switch (direction) {
|
||||||
|
case 'first':
|
||||||
|
output = logo + `${content}`;
|
||||||
|
break;
|
||||||
|
case 'last':
|
||||||
|
output = `${content}` + logo;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return `<div class="${attrClass}">` + output + `</div>`;
|
||||||
dir: {
|
});
|
||||||
input: "source/screens",
|
|
||||||
output: "build",
|
eleventyConfig.addPassthroughCopy({'source/art/images': 'art'});
|
||||||
includes: "../templates",
|
eleventyConfig.addPassthroughCopy({'source/art/favicons/**/*.+(ico|png|svg)': '.'});
|
||||||
data: "../data"
|
eleventyConfig.addPassthroughCopy({'source/code/**/*.js': 'js'});
|
||||||
},
|
eleventyConfig.addPassthroughCopy({'source/data/**/*.json': 'json'});
|
||||||
markdownTemplateEngine: "njk",
|
|
||||||
htmlTemplateEngine: "njk",
|
eleventyConfig.addPassthroughCopy('vendor');
|
||||||
templateFormats: ["html", "njk", "md"],
|
eleventyConfig.addPassthroughCopy({'node_modules/bootstrap-icons': 'vendor/bootstrap-icons'});
|
||||||
// pathPrefix: './demo/'
|
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/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// noinspection JSUnusedGlobalSymbols
|
||||||
|
export const config = {
|
||||||
|
dir: {
|
||||||
|
input: 'source/view',
|
||||||
|
output: 'build'
|
||||||
|
},
|
||||||
|
templateFormats: ['html', 'liquid', 'md', 'njk']
|
||||||
|
};
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -1,9 +1,14 @@
|
||||||
# HIPPIE
|
# HIPPIE
|
||||||
###################
|
###################
|
||||||
build/**
|
build/**
|
||||||
|
deploy/**
|
||||||
reports/**
|
reports/**
|
||||||
|
source/art/sprites/
|
||||||
source/art/images/sprite.*
|
source/art/images/sprite.*
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
|
||||||
# https://gist.github.com/octocat/9257657
|
# https://gist.github.com/octocat/9257657
|
||||||
###################
|
###################
|
||||||
###################
|
###################
|
||||||
|
|
@ -43,8 +48,6 @@ source/art/images/sprite.*
|
||||||
._*
|
._*
|
||||||
.Spotlight-V100
|
.Spotlight-V100
|
||||||
.Trashes
|
.Trashes
|
||||||
ehthumbs.db
|
|
||||||
Thumbs.db
|
|
||||||
|
|
||||||
# https://github.com/github/gitignore
|
# https://github.com/github/gitignore
|
||||||
###################
|
###################
|
||||||
|
|
@ -85,15 +88,10 @@ $RECYCLE.BIN/
|
||||||
# Icon must end with two \r
|
# Icon must end with two \r
|
||||||
Icon
|
Icon
|
||||||
|
|
||||||
# Thumbnails
|
|
||||||
._*
|
|
||||||
|
|
||||||
# Files that might appear in the root of a volume
|
# Files that might appear in the root of a volume
|
||||||
.DocumentRevisions-V100
|
.DocumentRevisions-V100
|
||||||
.fseventsd
|
.fseventsd
|
||||||
.Spotlight-V100
|
|
||||||
.TemporaryItems
|
.TemporaryItems
|
||||||
.Trashes
|
|
||||||
.VolumeIcon.icns
|
.VolumeIcon.icns
|
||||||
.com.apple.timemachine.donotpresent
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
|
|
@ -124,7 +122,6 @@ https://github.com/github/gitignore/blob/master/Global/Linux.gitignore
|
||||||
###################
|
###################
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
logs
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
|
||||||
5
.gitmodules
vendored
5
.gitmodules
vendored
|
|
@ -1,4 +1,7 @@
|
||||||
[submodule "source/style/hippie-style"]
|
[submodule "source/style/hippie-style"]
|
||||||
path = source/style/hippie-style
|
path = source/style/hippie-style
|
||||||
url = https://quelltext.interaktionsweise.de/interaktionsweise/hippie-style.git
|
url = https://quelltext.interaktionsweise.de/interaktionsweise/hippie-style.git
|
||||||
branch = main
|
branch = development
|
||||||
|
[submodule "source/view/_includes/hippie-view"]
|
||||||
|
path = source/view/_includes/hippie-view
|
||||||
|
url = https://quelltext.interaktionsweise.de/interaktionsweise/hippie-view.git
|
||||||
|
|
|
||||||
125
.jshintrc
125
.jshintrc
|
|
@ -1,96 +1,33 @@
|
||||||
{
|
{
|
||||||
// JSHint Default Configuration File (as on JSHint website)
|
"bitwise": true,
|
||||||
// See http://jshint.com/docs/ for more details
|
"curly": false,
|
||||||
|
"devel": true,
|
||||||
"maxerr" : 50, // {int} Maximum error before stopping
|
"eqeqeq": true,
|
||||||
|
"esversion": 11,
|
||||||
// Enforcing
|
"forin": true,
|
||||||
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
|
"freeze": true,
|
||||||
"camelcase" : false, // true: Identifiers must be in camelCase
|
"jquery": true,
|
||||||
"curly" : true, // true: Require {} for every new block or scope
|
"noarg": true,
|
||||||
"eqeqeq" : true, // true: Require triple equals (===) for comparison
|
"noempty": true,
|
||||||
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
|
"strict": true,
|
||||||
"freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc.
|
"undef": true,
|
||||||
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
|
"unused": false,
|
||||||
"latedef" : false, // true: Require variables/functions to be defined before being used
|
"browser": true,
|
||||||
"newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
|
"globals": {
|
||||||
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
|
"DateDisplay": true,
|
||||||
"noempty" : true, // true: Prohibit use of empty blocks
|
"HIPPIE": false,
|
||||||
"nonbsp" : true, // true: Prohibit `non-breaking whitespace` characters.
|
"HippieTaskBar": true,
|
||||||
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
|
"TimeDisplay": true,
|
||||||
"plusplus" : false, // true: Prohibit use of `++` and `--`
|
"basicEase": true,
|
||||||
"quotmark" : false, // Quotation mark consistency:
|
"centerElementUnderCursor": false,
|
||||||
// false : do nothing (default)
|
"checkButtonAndTarget": false,
|
||||||
// true : ensure whatever is used is consistent
|
"debugOn": true,
|
||||||
// "single" : require single quotes
|
"getClosestEdgeToElement": false,
|
||||||
// "double" : require double quotes
|
"getClosestEdgeToMouse": false,
|
||||||
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
|
"hippie": true,
|
||||||
"unused" : false, // Unused variables:
|
"randomIntFrom": false,
|
||||||
// true : all variables, last function parameter
|
"readJsonFile": false,
|
||||||
// "vars" : all variables only
|
"replaceLineBreaks": false,
|
||||||
// "strict" : all variables, all function parameters
|
"viewHover": true
|
||||||
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
|
}
|
||||||
"maxparams" : false, // {int} Max number of formal params allowed per function
|
|
||||||
"maxdepth" : false, // {int} Max depth of nested blocks (within functions)
|
|
||||||
"maxstatements" : false, // {int} Max number statements per function
|
|
||||||
"maxcomplexity" : false, // {int} Max cyclomatic complexity per function
|
|
||||||
"maxlen" : false, // {int} Max number of characters per line
|
|
||||||
"varstmt" : false, // true: Disallow any var statements. Only `let` and `const` are allowed.
|
|
||||||
|
|
||||||
// Relaxing
|
|
||||||
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
|
|
||||||
"boss" : false, // true: Tolerate assignments where comparisons would be expected
|
|
||||||
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
|
|
||||||
"eqnull" : false, // true: Tolerate use of `== null`
|
|
||||||
"esversion" : 6, // {int} Specify the ECMAScript version to which the code must adhere.
|
|
||||||
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
|
|
||||||
// (ex: `for each`, multiple try/catch, function expression…)
|
|
||||||
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
|
|
||||||
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
|
|
||||||
"funcscope" : false, // true: Tolerate defining variables inside control statements
|
|
||||||
"globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
|
|
||||||
"iterator" : false, // true: Tolerate using the `__iterator__` property
|
|
||||||
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
|
|
||||||
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
|
|
||||||
"laxcomma" : false, // true: Tolerate comma-first style coding
|
|
||||||
"loopfunc" : false, // true: Tolerate functions being defined in loops
|
|
||||||
"multistr" : false, // true: Tolerate multi-line strings
|
|
||||||
"noyield" : false, // true: Tolerate generator functions with no yield statement in them.
|
|
||||||
"notypeof" : false, // true: Tolerate invalid typeof operator values
|
|
||||||
"proto" : false, // true: Tolerate using the `__proto__` property
|
|
||||||
"scripturl" : false, // true: Tolerate script-targeted URLs
|
|
||||||
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
|
|
||||||
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
|
|
||||||
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
|
|
||||||
"validthis" : false, // true: Tolerate using this in a non-constructor function
|
|
||||||
|
|
||||||
// Environments
|
|
||||||
"browser" : true, // Web Browser (window, document, etc)
|
|
||||||
"browserify" : false, // Browserify (node.js code in the browser)
|
|
||||||
"couch" : false, // CouchDB
|
|
||||||
"devel" : true, // Development/debugging (alert, confirm, etc)
|
|
||||||
"dojo" : false, // Dojo Toolkit
|
|
||||||
"jasmine" : false, // Jasmine
|
|
||||||
"jquery" : true, // jQuery
|
|
||||||
"mocha" : true, // Mocha
|
|
||||||
"mootools" : false, // MooTools
|
|
||||||
"node" : false, // Node.js
|
|
||||||
"nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
|
|
||||||
"phantom" : false, // PhantomJS
|
|
||||||
"prototypejs" : false, // Prototype and Scriptaculous
|
|
||||||
"qunit" : false, // QUnit
|
|
||||||
"rhino" : false, // Rhino
|
|
||||||
"shelljs" : false, // ShellJS
|
|
||||||
"typed" : false, // Globals for typed array constructions
|
|
||||||
"worker" : false, // Web Workers
|
|
||||||
"wsh" : false, // Windows Scripting Host
|
|
||||||
"yui" : false, // Yahoo User Interface
|
|
||||||
|
|
||||||
// Custom globals
|
|
||||||
"globals" : { // additional predefined global variables
|
|
||||||
"debugOn": true,
|
|
||||||
"hippie": true,
|
|
||||||
"viewHover": true,
|
|
||||||
"basicEase": true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
104
CHANGELOG.md
104
CHANGELOG.md
|
|
@ -1,52 +1,52 @@
|
||||||
| Commit | Version | Description |
|
| Commit | Version | Description |
|
||||||
| :--- | :----: | :--- |
|
|:-----------------------------------------|:-------:|:------------------------------------------------|
|
||||||
| 6095870ce33fd3775718a1de3d33f604fd0630ab | 0.4.2 | Javascript again |
|
| 6095870ce33fd3775718a1de3d33f604fd0630ab | 0.4.2 | Javascript again |
|
||||||
| 50a1a6d9257b272e076c2e3b5bac39c7d17b2793 | 0.5.0 | Changes to content |
|
| 50a1a6d9257b272e076c2e3b5bac39c7d17b2793 | 0.5.0 | Changes to content |
|
||||||
| e2bbe9273a292a3806de1599f752258a2721d067 | 0.5.1 | |
|
| e2bbe9273a292a3806de1599f752258a2721d067 | 0.5.1 | |
|
||||||
| 3d4eef5eb0a1632b43e1e3372e38a70cd4b58914 | 0.5.2 | |
|
| 3d4eef5eb0a1632b43e1e3372e38a70cd4b58914 | 0.5.2 | |
|
||||||
| 371cb450f81cd0d692c9005952af35ec066e01e1 | 0.6.0 | New es6 coding standard |
|
| 371cb450f81cd0d692c9005952af35ec066e01e1 | 0.6.0 | New es6 coding standard |
|
||||||
| 175816c3595d783e7d8b48f5336fbdd54dae145b | 0.6.1 | |
|
| 175816c3595d783e7d8b48f5336fbdd54dae145b | 0.6.1 | |
|
||||||
| 67e3cc1eca359bc2b927b8e971ccd7ba71f4c5a2 | 0.6.2 | |
|
| 67e3cc1eca359bc2b927b8e971ccd7ba71f4c5a2 | 0.6.2 | |
|
||||||
| abeb843718988fab978de7c75d6d45806f5d35a7 | 0.6.3 | |
|
| abeb843718988fab978de7c75d6d45806f5d35a7 | 0.6.3 | |
|
||||||
| 4401761a6bec9db19293353942479aea7bb8ead1 | 0.6.4 | |
|
| 4401761a6bec9db19293353942479aea7bb8ead1 | 0.6.4 | |
|
||||||
| 83464a1cf4ba3efc6382eafb6f68f106c6650161 | 0.6.5 | |
|
| 83464a1cf4ba3efc6382eafb6f68f106c6650161 | 0.6.5 | |
|
||||||
| 6f95393409b502fef9ad9677b3c1ed1fe07ecc28 | 0.6.6 | |
|
| 6f95393409b502fef9ad9677b3c1ed1fe07ecc28 | 0.6.6 | |
|
||||||
| 63b54f2749ed5a4d9a7a53c27540e7d6f8dff63d | 0.6.7 | |
|
| 63b54f2749ed5a4d9a7a53c27540e7d6f8dff63d | 0.6.7 | |
|
||||||
| 830037f5e5237d33ad66fe89ba45167a62d87829 | 0.6.8 | |
|
| 830037f5e5237d33ad66fe89ba45167a62d87829 | 0.6.8 | |
|
||||||
| d205031fff29ee4d48251e30b17090143ae5458c | 0.7.0 | switched to style submodule usage |
|
| d205031fff29ee4d48251e30b17090143ae5458c | 0.7.0 | switched to style submodule usage |
|
||||||
| d18254b61d87eb3d09d17b93783117dad7d13686 | 0.7.1 | |
|
| d18254b61d87eb3d09d17b93783117dad7d13686 | 0.7.1 | |
|
||||||
| 9b9b0cb1c631273f574d3cd7618bd799f561db6c | 0.7.2 | |
|
| 9b9b0cb1c631273f574d3cd7618bd799f561db6c | 0.7.2 | |
|
||||||
| 11b30671d4948dfd30b7da14fe7295f386b54257 | 0.7.3 | |
|
| 11b30671d4948dfd30b7da14fe7295f386b54257 | 0.7.3 | |
|
||||||
| 767b3024fa3bbededab2a8d665b4b35b55854a1c | 0.7.4 | |
|
| 767b3024fa3bbededab2a8d665b4b35b55854a1c | 0.7.4 | |
|
||||||
| 5c3cda58b147f16e1b9fdf1ed7b5499651df943d | 0.8.0 | changes to license file and submodule update |
|
| 5c3cda58b147f16e1b9fdf1ed7b5499651df943d | 0.8.0 | changes to license file and submodule update |
|
||||||
| 8567604ea6b129ded8b0e6108362a30d039235a7 | 0.8.1 | |
|
| 8567604ea6b129ded8b0e6108362a30d039235a7 | 0.8.1 | |
|
||||||
| b2ea5b01aa47783b5f797310e16f1897e1839eb9 | 0.9.0 | Requirements updated and new nunjucks variables |
|
| b2ea5b01aa47783b5f797310e16f1897e1839eb9 | 0.9.0 | Requirements updated and new nunjucks variables |
|
||||||
| df064b8a942f00dd3277a9dde696e91324dfd166 | 0.9.1 | |
|
| df064b8a942f00dd3277a9dde696e91324dfd166 | 0.9.1 | |
|
||||||
| d812ed62084c90d4fac18b6c56a6dd3bf9bd7cba | 0.9.2 | |
|
| d812ed62084c90d4fac18b6c56a6dd3bf9bd7cba | 0.9.2 | |
|
||||||
| 84957f75a017d5d06a32874282d9eb9f3d537534 | 0.9.3 | |
|
| 84957f75a017d5d06a32874282d9eb9f3d537534 | 0.9.3 | |
|
||||||
| 489786aadc30bb589be769fe627389611c4f71f5 | 0.9.4 | |
|
| 489786aadc30bb589be769fe627389611c4f71f5 | 0.9.4 | |
|
||||||
| 003a1159231241140a262ae67bb1236978b22ec0 | 0.9.5 | |
|
| 003a1159231241140a262ae67bb1236978b22ec0 | 0.9.5 | |
|
||||||
| 731c19dd61215b8f373af9100ad5c23f19a4c2a3 | 0.9.6 | |
|
| 731c19dd61215b8f373af9100ad5c23f19a4c2a3 | 0.9.6 | |
|
||||||
| dd5ff43e1695d2de0b5a0a9614c1f31ad7e7b85b | 0.9.7 | |
|
| dd5ff43e1695d2de0b5a0a9614c1f31ad7e7b85b | 0.9.7 | |
|
||||||
| dde26ec45eeb8d28a986093b8b5b29d8165e5a11 | 0.9.8 | |
|
| dde26ec45eeb8d28a986093b8b5b29d8165e5a11 | 0.9.8 | |
|
||||||
| 06ba1113929183f51e8501d440c950e4b4d9f0d2 | 0.9.9 | |
|
| 06ba1113929183f51e8501d440c950e4b4d9f0d2 | 0.9.9 | |
|
||||||
| 827e6c1cde0aa4ca65e6c170174eae91da9aa4c9 | 0.9.10 | |
|
| 827e6c1cde0aa4ca65e6c170174eae91da9aa4c9 | 0.9.10 | |
|
||||||
| 202729f9ba098b5ff07f6af43acce7a67007cd1b | 0.9.11 | |
|
| 202729f9ba098b5ff07f6af43acce7a67007cd1b | 0.9.11 | |
|
||||||
| d22828400125f8572cfbe6243e2521ffab519adf | 0.9.12 | |
|
| d22828400125f8572cfbe6243e2521ffab519adf | 0.9.12 | |
|
||||||
| bf1a6ca7421a0385f664f864a82850f0805522c0 | 0.9.13 | |
|
| bf1a6ca7421a0385f664f864a82850f0805522c0 | 0.9.13 | |
|
||||||
| 32215de810546f6ebd7f552816fc5bf3281a0a13 | 0.9.14 | |
|
| 32215de810546f6ebd7f552816fc5bf3281a0a13 | 0.9.14 | |
|
||||||
| f7dd7c93e3a06bc430fcf4e12f4be3d3b1aa29c6 | 0.10.0 | Added card and portal modules |
|
| f7dd7c93e3a06bc430fcf4e12f4be3d3b1aa29c6 | 0.10.0 | Added card and portal modules |
|
||||||
| f54dbe92d912b9e7553a3a2263b009ed05017b0b | 0.10.1 | |
|
| f54dbe92d912b9e7553a3a2263b009ed05017b0b | 0.10.1 | |
|
||||||
| 6b217b6ebbfcfa2f3e14bdf41e21bb36f88050a5 | 0.10.2 | |
|
| 6b217b6ebbfcfa2f3e14bdf41e21bb36f88050a5 | 0.10.2 | |
|
||||||
| 534115ff282de4648c294ae78fe768d79e23d379 | 0.10.3 | |
|
| 534115ff282de4648c294ae78fe768d79e23d379 | 0.10.3 | |
|
||||||
| f7a5481fd2e1d1c96f7e9d82eb2c3db9483b5784 | 0.10.4 | |
|
| f7a5481fd2e1d1c96f7e9d82eb2c3db9483b5784 | 0.10.4 | |
|
||||||
| 31e896462e7693a4a6ba10d52657caf919e7f482 | 0.10.5 | |
|
| 31e896462e7693a4a6ba10d52657caf919e7f482 | 0.10.5 | |
|
||||||
| 778d7d14d5e8d4dbcce2f9cb996afbc4d7accf27 | 0.11.0 | logPerf without JQuery |
|
| 778d7d14d5e8d4dbcce2f9cb996afbc4d7accf27 | 0.11.0 | logPerf without JQuery |
|
||||||
| 1d7f2eb839472524d73f395365ffb43e8fc5d115 | 0.12.0 | Migration to new home |
|
| 1d7f2eb839472524d73f395365ffb43e8fc5d115 | 0.12.0 | Migration to new home |
|
||||||
| 69c04c32349d3d11820da933ed2bbd648fabb040 | 0.12.1 | |
|
| 69c04c32349d3d11820da933ed2bbd648fabb040 | 0.12.1 | |
|
||||||
| 9415d4d9573a4f2a4e1c479c74c59abe3a69cd57 | 0.12.2 | |
|
| 9415d4d9573a4f2a4e1c479c74c59abe3a69cd57 | 0.12.2 | |
|
||||||
| 6e7615b44d9ef26ade73a00102878804272cf717 | 0.12.3 | |
|
| 6e7615b44d9ef26ade73a00102878804272cf717 | 0.12.3 | |
|
||||||
| b6ec313f26dde6b379da16edb65de082c6ca9b65 | 0.12.4 | |
|
| b6ec313f26dde6b379da16edb65de082c6ca9b65 | 0.12.4 | |
|
||||||
| e856e5311439d5a64478f7cda79998476ebdfe33 | 0.12.5 | |
|
| e856e5311439d5a64478f7cda79998476ebdfe33 | 0.12.5 | |
|
||||||
| ef9d665849f370b2284ae8d985d9625b5083fe37 | 0.13.0 | Introduced 11ty |
|
| ef9d665849f370b2284ae8d985d9625b5083fe37 | 0.13.0 | Introduced 11ty |
|
||||||
| 3358e1858bc764e520dad65cc614c842b4f66245 | 0.13.1 | |
|
| 3358e1858bc764e520dad65cc614c842b4f66245 | 0.13.1 | |
|
||||||
65
README.md
65
README.md
|
|
@ -4,15 +4,20 @@ Hippie interweaves preeminent personal interface elements
|
||||||
|
|
||||||
> WORK IN PROGRESS (it is not ready to be used)
|
> WORK IN PROGRESS (it is not ready to be used)
|
||||||
|
|
||||||
This is a [Node.js](https://nodejs.org/) based generator for static HTML documents.
|
This is a [Node.js](https://nodejs.org/) based generator for static HTML documents.
|
||||||
|
It uses the [Eleventy](https://www.11ty.dev/) project to fiddle everything together.
|
||||||
|
|
||||||
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/).
|
Styling is powered by the CSS extension language [Sass](https://sass-lang.com/). The HTML pages are written with
|
||||||
|
templating engines or directly as HTML files. Mainly [Liquid](https://liquidjs.com/) is used,
|
||||||
|
but [Markdown](https://daringfireball.net/projects/markdown/) and [Nunjucks](https://mozilla.github.io/nunjucks/) are
|
||||||
|
also options.
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
Clone the repository `https://quelltext.interaktionsweise.de/interaktionsweise/hippie.git` to a folder to create your build environment.
|
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*.
|
Change to the newly created folder. By default, this would be *hippie*.
|
||||||
|
|
||||||
Run the command `git submodule update --init`.
|
Run the command `git submodule update --init`.
|
||||||
This will load the submodules.
|
This will load the submodules.
|
||||||
|
|
@ -22,21 +27,26 @@ This will install all dependencies into the folder *node_modules*.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The command `gulp --tasks` will give you an overview of possible actions.
|
Different *scripts* are provided through `package.json`:
|
||||||
|
|
||||||
Run the command `gulp` for a live development environment.
|
Run the command `npm run serve` for a live development environment.
|
||||||
This will create a folder *build* with the resulting files.
|
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.
|
Also, the source files will be watched for changes which are reflected live at [localhost:8080](http://localhost:8080)
|
||||||
|
and the `/build` directory.
|
||||||
|
|
||||||
`gulp build` will create the resulting *build* directory ready for deployment.
|
`npm run build` will just create the resulting `/build` directory and `npm run deploy` will use a path prefix (*hippie*
|
||||||
|
by default) and create the results in `/deploy` 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.
|
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
|
## Content
|
||||||
|
|
||||||
### Intro
|
### 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.
|
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)
|
### Sass (CSS)
|
||||||
|
|
||||||
|
|
@ -44,24 +54,45 @@ Everything has its default style.
|
||||||
|
|
||||||
CSS classes follow a naming scheme of `<object>_<description>`.
|
CSS classes follow a naming scheme of `<object>_<description>`.
|
||||||
|
|
||||||
- *Object* usually is the name of the HTML element. If it is not a elemtn directly it is the thing which receives the styling
|
- *Object* usually is the name of the HTML element. If it is not an 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
|
- *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
|
## 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).
|
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
|
## Contribution
|
||||||
|
|
||||||
For contribution please use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#summary) specification.
|
For contribution please use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#summary)
|
||||||
|
specification.
|
||||||
The commit *type* can include the following:
|
The commit *type* can include the following:
|
||||||
|
|
||||||
- feat – A new feature is introduced with the changes
|
- feat – A new feature is introduced with the changes
|
||||||
- fix – A bug fix has occurred
|
- 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)
|
- 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
|
- 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
|
- docs – Updates to documentation such as 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.
|
- style – Changes that do not affect the meaning of the code, likely related to code formatting such as white-space,
|
||||||
|
missing semicolons, and so on.
|
||||||
- test – Including new or correcting previous tests
|
- test – Including new or correcting previous tests
|
||||||
- perf – Performance improvements
|
- perf – Performance improvements
|
||||||
- ci – Continuous integration related
|
- ci – Continuous integration related
|
||||||
|
|
|
||||||
260
TODO.md
260
TODO.md
|
|
@ -1,130 +1,150 @@
|
||||||
# General
|
# General
|
||||||
|
|
||||||
- Remove gulp and legacy files
|
|
||||||
- Update README
|
|
||||||
- Explain eleventy usage
|
|
||||||
- Better README with more info for the content section
|
- Better README with more info for the content section
|
||||||
|
- Explain eleventy usage
|
||||||
- Complete CHANGELOG
|
- Complete CHANGELOG
|
||||||
- Automatic versioning for package.json and CHANGELOG
|
- Automatic versioning for package.json and CHANGELOG
|
||||||
- Add dynamic content to robots.txt during build process
|
- Add dynamic content to robots.txt during build process
|
||||||
- Add dynamic content to sitemap.xml
|
- Add dynamic content to sitemap.xml
|
||||||
- Add build process for normalize.css from github.com/necolas/normalize.css
|
|
||||||
- Add build process for bourbon from https://github.com/thoughtbot/bourbon
|
# 11ty
|
||||||
|
|
||||||
|
- Look into teh difference of layouts and templates
|
||||||
|
|
||||||
|
# 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
|
||||||
|
- Adapt bootstrap utility API
|
||||||
|
- https://github.com/twbs/bootstrap/blob/main/scss/utilities/_api.scss
|
||||||
|
- https://github.com/twbs/bootstrap/blob/main/scss/_utilities.scss
|
||||||
|
|
||||||
|
# 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
|
# Content
|
||||||
|
|
||||||
- Complete *Intro* with description for all basic elements, according to [HTML Standard - The elements of HTML](https://html.spec.whatwg.org/multipage/semantics.html#semantics)
|
- *Intro*
|
||||||
- Sections
|
- Complete with description for all basic elements, according to [HTML Standard - The elements of HTML](https://html.spec.whatwg.org/multipage/semantics.html#semantics)
|
||||||
- [x] body
|
- Sections
|
||||||
- [x] article
|
- [x] body
|
||||||
- [x] section
|
- [x] article
|
||||||
- [x] nav
|
- [x] section
|
||||||
- [x] aside
|
- [x] nav
|
||||||
- [x] h1-h6
|
- [x] aside
|
||||||
- [x] hgroup
|
- [x] h1-h6
|
||||||
- [x] header
|
- [x] hgroup
|
||||||
- [x] footer
|
- [x] header
|
||||||
- [x] address (put to grouping content)
|
- [x] footer
|
||||||
- Grouping content
|
- [x] address (put to grouping content)
|
||||||
- [x] p
|
- Grouping content
|
||||||
- [x] hr
|
- [x] p
|
||||||
- [x] pre
|
- [x] hr
|
||||||
- [x] blockquote
|
- [x] pre
|
||||||
- [x] ol
|
- [x] blockquote
|
||||||
- [x] ul
|
- [x] ol
|
||||||
- [ ] menu (new)
|
- [x] ul
|
||||||
- [x] li
|
- [ ] menu (new)
|
||||||
- [x] dl
|
- [x] li
|
||||||
- [x] dt
|
- [x] dl
|
||||||
- [x] dd
|
- [x] dt
|
||||||
- [x] figure
|
- [x] dd
|
||||||
- [x] figcaption
|
- [x] figure
|
||||||
- [x] main
|
- [x] figcaption
|
||||||
- [ ] search (new)
|
- [x] main
|
||||||
- [x] div
|
- [ ] search (new)
|
||||||
- Text-level semantics
|
- [x] div
|
||||||
- [x] a
|
- Text-level semantics
|
||||||
- [x] em
|
- [x] a
|
||||||
- [x] strong
|
- [x] em
|
||||||
- [x] small
|
- [x] strong
|
||||||
- [x] s
|
- [x] small
|
||||||
- [x] cite
|
- [x] s
|
||||||
- [x] q
|
- [x] cite
|
||||||
- [x] dfn
|
- [x] q
|
||||||
- [x] abbr
|
- [x] dfn
|
||||||
- [x] ruby
|
- [x] abbr
|
||||||
- [x] rb (deprecated)
|
- [x] ruby
|
||||||
- [x] rt
|
- [x] rb (deprecated)
|
||||||
- [x] rtc (deprecated)
|
- [x] rt
|
||||||
- [x] rp
|
- [x] rtc (deprecated)
|
||||||
- [x] data
|
- [x] rp
|
||||||
- [x] time
|
- [x] data
|
||||||
- [x] code
|
- [x] time
|
||||||
- [x] var
|
- [x] code
|
||||||
- [x] samp
|
- [x] var
|
||||||
- [x] kbd
|
- [x] samp
|
||||||
- [x] sub
|
- [x] kbd
|
||||||
- [x] sup
|
- [x] sub
|
||||||
- [x] i
|
- [x] sup
|
||||||
- [x] b
|
- [x] i
|
||||||
- [x] u
|
- [x] b
|
||||||
- [x] mark
|
- [x] u
|
||||||
- [x] bdi
|
- [x] mark
|
||||||
- [x] bdo
|
- [x] bdi
|
||||||
- [x] span
|
- [x] bdo
|
||||||
- [x] br (mentioned in grouping content)
|
- [x] span
|
||||||
- [x] wbr
|
- [x] br (mentioned in grouping content)
|
||||||
- Edits
|
- [x] wbr
|
||||||
- [x] ins
|
- Edits
|
||||||
- [x] del
|
- [x] ins
|
||||||
- Embedded content
|
- [x] del
|
||||||
- [x] picture
|
- Embedded content
|
||||||
- [x] source
|
- [x] picture
|
||||||
- [x] img
|
- [x] source
|
||||||
- [ ] iframe
|
- [x] img
|
||||||
- [ ] embed
|
- [ ] iframe
|
||||||
- [ ] object
|
- [ ] embed
|
||||||
- [ ] param (deprecated)
|
- [ ] object
|
||||||
- [ ] video
|
- [ ] param (deprecated)
|
||||||
- [ ] audio
|
- [ ] video
|
||||||
- [ ] track
|
- [ ] audio
|
||||||
- [ ] map
|
- [ ] track
|
||||||
- [ ] area
|
- [ ] map
|
||||||
- Tabular data
|
- [ ] area
|
||||||
- [ ] table
|
- Tabular data
|
||||||
- [ ] caption
|
- [ ] table
|
||||||
- [ ] colgroup
|
- [ ] caption
|
||||||
- [ ] col
|
- [ ] colgroup
|
||||||
- [ ] tbody
|
- [ ] col
|
||||||
- [ ] thead
|
- [ ] tbody
|
||||||
- [ ] tfoot
|
- [ ] thead
|
||||||
- [ ] tr
|
- [ ] tfoot
|
||||||
- [ ] td
|
- [ ] tr
|
||||||
- [ ] th
|
- [ ] td
|
||||||
- Forms
|
- [ ] th
|
||||||
- [x] form
|
- Forms
|
||||||
- [x] label
|
- [x] form
|
||||||
- [x] input
|
- [x] label
|
||||||
- [x] button
|
- [x] input
|
||||||
- [ ] select
|
- [x] button
|
||||||
- [ ] datalist
|
- [ ] select
|
||||||
- [ ] optgroup
|
- [ ] datalist
|
||||||
- [ ] option
|
- [ ] optgroup
|
||||||
- [ ] textarea
|
- [ ] option
|
||||||
- [ ] output
|
- [ ] textarea
|
||||||
- [ ] progress
|
- [ ] output
|
||||||
- [ ] meter (new)
|
- [ ] progress
|
||||||
- [x] fieldset
|
- [ ] meter (new)
|
||||||
- [x] legend
|
- [x] fieldset
|
||||||
- Interactive elements
|
- [x] legend
|
||||||
- [ ] details
|
- Interactive elements
|
||||||
- [ ] summary
|
- [ ] details
|
||||||
- [ ] dialog
|
- [ ] summary
|
||||||
- Scripting
|
- [ ] dialog
|
||||||
- [ ] script
|
- Scripting
|
||||||
- [ ] noscript
|
- [ ] script
|
||||||
- [ ] template
|
- [ ] noscript
|
||||||
- [ ] slot
|
- [ ] template
|
||||||
- [ ] canvas
|
- [ ] slot
|
||||||
- Check style for every basic element
|
- [ ] canvas
|
||||||
- Uniform spelling of classes and identifiers
|
|
||||||
4680
package-lock.json
generated
4680
package-lock.json
generated
File diff suppressed because it is too large
Load diff
80
package.json
80
package.json
|
|
@ -1,37 +1,47 @@
|
||||||
{
|
{
|
||||||
"name": "hippie",
|
"name": "hippie",
|
||||||
"version": "0.13.1",
|
"version": "0.13.1",
|
||||||
"description": "Hippie interweaves preeminent personal interface elements",
|
"description": "Hippie interweaves preeminent personal interface elements",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"hippie",
|
"hippie",
|
||||||
"www site template"
|
"www site template"
|
||||||
],
|
],
|
||||||
"homepage": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie",
|
"homepage": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie",
|
||||||
"bugs": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie/issues",
|
"bugs": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie/issues",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"author": "Stephan Hagedorn <sthag@interaktionsweise.de> (https://karte@interaktionsweise.de/)",
|
"author": "Stephan Hagedorn <sthag@interaktionsweise.de> (https://karte.interaktionsweise.de)",
|
||||||
"main": "",
|
"main": "",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie.git"
|
"url": "https://quelltext.interaktionsweise.de/interaktionsweise/hippie.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"type": "module",
|
||||||
"hello": "echo -n \"This is \" && node -p \"process.env.npm_package_name\" | tr '[:lower:]' '[:upper:]'",
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"hello": "echo -n \"This is \" && node -p \"process.env.npm_package_name\" | tr '[:lower:]' '[:upper:]'",
|
||||||
"clean": "npm run clean:build & npm run clean:deploy & npm run clean:report & npm run clean:test",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"clean:build": "rm -rf build/*",
|
"clean": "npm run clean:build & npm run clean:deploy & npm run clean:report & npm run clean:test",
|
||||||
"clean:deploy": "rm -rf deploy/*",
|
"clean:build": "rm -rf build/*",
|
||||||
"clean:report": "rm -rf report/*",
|
"clean:deploy": "rm -rf deploy/*",
|
||||||
"clean:test": "rm -rf test/*",
|
"clean:report": "rm -rf report/*",
|
||||||
"style:compile": "sass source/style:build/css --load-path=vendor",
|
"clean:test": "rm -rf test/*",
|
||||||
"style:watch": "sass --watch source/style:build/css --load-path=vendor",
|
"style:compile": "sass source/style:build/css --load-path=vendor",
|
||||||
"build:new": "npm run clean:build && npx @11ty/eleventy && npm run style:compile",
|
"style:deploy": "sass source/style:deploy/css --load-path=vendor",
|
||||||
"build": "npx @11ty/eleventy && npm run style:compile",
|
"style:watch": "sass --watch source/style:build/css --load-path=vendor",
|
||||||
"serve": "npm run style:watch & npx @11ty/eleventy --serve"
|
"build:new": "npm run clean:build && npx @11ty/eleventy && npm run style:compile",
|
||||||
},
|
"build": "npx @11ty/eleventy && npm run style:compile",
|
||||||
"private": true,
|
"deploy": "npm run clean:deploy && npx @11ty/eleventy --output=deploy --pathprefix=hippie && npm run style:deploy",
|
||||||
"devDependencies": {
|
"serve": "npm run style:watch & npx @11ty/eleventy --serve"
|
||||||
"@11ty/eleventy": "^2.0.1",
|
},
|
||||||
"sass": "^1.69.4"
|
"private": true,
|
||||||
}
|
"devDependencies": {
|
||||||
|
"normalize.css": "^8.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@11ty/eleventy": "^3.1.5",
|
||||||
|
"@11ty/eleventy-plugin-webc": "^0.11.2",
|
||||||
|
"bootstrap-icons": "^1.13.1",
|
||||||
|
"hippie-script": "git+https://quelltext.interaktionsweise.de/interaktionsweise/hippie-script.git",
|
||||||
|
"jquery": "^4.0.0",
|
||||||
|
"sass": "^1.99.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
source/art/images/bullet.gif
Normal file
BIN
source/art/images/bullet.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 832 B After Width: | Height: | Size: 832 B |
|
|
@ -1,192 +0,0 @@
|
||||||
//NEW
|
|
||||||
|
|
||||||
function Clock(id){
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
setInterval(function(){that.updateClock();}, 1000);
|
|
||||||
this.updateClock();
|
|
||||||
}
|
|
||||||
|
|
||||||
Clock.prototype.updateClock = function(){
|
|
||||||
var date = new Date();
|
|
||||||
var 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){
|
|
||||||
if(val<10) val = "0" + val;
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
//OLD
|
|
||||||
|
|
||||||
var floor = Math.floor;
|
|
||||||
|
|
||||||
function ongoing() {
|
|
||||||
|
|
||||||
var now = new Date();
|
|
||||||
|
|
||||||
var w = Math.floor(now.getDay());
|
|
||||||
var D = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
|
|
||||||
var DNumb = Math.floor(now.getDate());
|
|
||||||
var MNumb = Math.floor(now.getMonth());
|
|
||||||
var M = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "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
|
|
||||||
}
|
|
||||||
|
|
||||||
// create emails
|
|
||||||
function composeMail(tag, name, prov, suffix, text, topic) {
|
|
||||||
var trigger = tag.indexOf(".");
|
|
||||||
var mailString = name + '@' + prov + '.' + suffix;
|
|
||||||
var textString = mailString.replace(/@/g, "(at)");
|
|
||||||
var descString = "Nachricht an " + mailString;
|
|
||||||
if (trigger == -1) {
|
|
||||||
if (!text) {
|
|
||||||
text = mailString;
|
|
||||||
} else if (text == "at") {
|
|
||||||
text = textString;
|
|
||||||
} else if (text == "to") {
|
|
||||||
text = descString;
|
|
||||||
}
|
|
||||||
if (!topic) {
|
|
||||||
topic = "";
|
|
||||||
} else {
|
|
||||||
topic = "?subject=" + topic;
|
|
||||||
}
|
|
||||||
var old = $('#'+tag).html();
|
|
||||||
$('#'+tag).html(old + text);
|
|
||||||
$('#'+tag).attr("href", "mailto:" + mailString + topic);
|
|
||||||
} else {
|
|
||||||
$(tag).each(function() {
|
|
||||||
if (!text) {
|
|
||||||
text = mailString;
|
|
||||||
} else if (text == "at") {
|
|
||||||
text = textString;
|
|
||||||
} else if (text == "to") {
|
|
||||||
text = descString;
|
|
||||||
}
|
|
||||||
if (!topic) {
|
|
||||||
topic = "";
|
|
||||||
} else {
|
|
||||||
topic = "?subject=" + topic;
|
|
||||||
}
|
|
||||||
var old = $(this).html();
|
|
||||||
$(this).html(old + text);
|
|
||||||
$(this).attr("href", "mailto:" + mailString + topic);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//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;
|
|
||||||
}
|
|
||||||
115
source/code/drag.js
Normal file
115
source/code/drag.js
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
313
source/code/game.js
Normal file
313
source/code/game.js
Normal file
|
|
@ -0,0 +1,313 @@
|
||||||
|
class HippieCrosshair {
|
||||||
|
constructor(canvas, options = {}) {
|
||||||
|
this.canvas = canvas;
|
||||||
|
this.ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
this.debug = options.debug || false;
|
||||||
|
|
||||||
|
const defaults = {
|
||||||
|
crosshair: {
|
||||||
|
size: 16,
|
||||||
|
thickness: 2,
|
||||||
|
color: '#000',
|
||||||
|
gapSize: 8,
|
||||||
|
style: 'cross'
|
||||||
|
},
|
||||||
|
connector: {
|
||||||
|
distance: 128, // Distance to draw next symbol
|
||||||
|
spacing: 64, // Space between symbols
|
||||||
|
size: 8,
|
||||||
|
color: '#000',
|
||||||
|
style: 'arrow',
|
||||||
|
visibility: true
|
||||||
|
},
|
||||||
|
line: {
|
||||||
|
color: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
width: 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const merged = this.mergeOptions(defaults, options);
|
||||||
|
const { crosshair, connector, line } = merged;
|
||||||
|
|
||||||
|
// Crosshair options
|
||||||
|
this.size = crosshair.size;
|
||||||
|
this.thickness = crosshair.thickness;
|
||||||
|
this.color = crosshair.color;
|
||||||
|
this.gapSize = crosshair.gapSize;
|
||||||
|
this.style = crosshair.style;
|
||||||
|
|
||||||
|
// Connector options
|
||||||
|
this.distance = connector.distance;
|
||||||
|
this.spacing = connector.spacing;
|
||||||
|
this.connectorSize = connector.size;
|
||||||
|
this.connectorColor = connector.color;
|
||||||
|
this.connectorStyle = connector.style;
|
||||||
|
this.connectorShow = connector.visibility;
|
||||||
|
|
||||||
|
// Line options
|
||||||
|
this.lineColor = line.color || '#fff';
|
||||||
|
this.lineWidth = line.width || 1;
|
||||||
|
|
||||||
|
this.mouseX = canvas.width / 2;
|
||||||
|
this.mouseY = canvas.height / 2;
|
||||||
|
|
||||||
|
// Animation control
|
||||||
|
this.isAnimating = true;
|
||||||
|
this.animationFrameId = null;
|
||||||
|
|
||||||
|
this.setupEventListeners();
|
||||||
|
this.animate();
|
||||||
|
}
|
||||||
|
|
||||||
|
mergeOptions(defaults, options) {
|
||||||
|
const merged = JSON.parse(JSON.stringify(defaults));
|
||||||
|
|
||||||
|
if (options.crosshair) {
|
||||||
|
Object.assign(merged.crosshair, options.crosshair);
|
||||||
|
}
|
||||||
|
if (options.connector) {
|
||||||
|
Object.assign(merged.connector, options.connector);
|
||||||
|
}
|
||||||
|
if (options.line) {
|
||||||
|
Object.assign(merged.line, options.line);
|
||||||
|
}
|
||||||
|
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
||||||
|
setupEventListeners() {
|
||||||
|
document.addEventListener('mousemove', (event) => {
|
||||||
|
this.mouseX = event.clientX;
|
||||||
|
this.mouseY = event.clientY;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
animate() {
|
||||||
|
if (!this.isAnimating) {
|
||||||
|
this.animationFrameId = requestAnimationFrame(() => this.animate());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
||||||
|
|
||||||
|
if (this.connectorShow) {
|
||||||
|
if (this.debug) this.drawLine();
|
||||||
|
this.drawConnector();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Autom. Zug zum Zentrum hin ermöglichen
|
||||||
|
this.drawCrosshair();
|
||||||
|
|
||||||
|
this.animationFrameId = requestAnimationFrame(() => this.animate());
|
||||||
|
}
|
||||||
|
|
||||||
|
drawLine() {
|
||||||
|
const centerX = this.canvas.width / 2;
|
||||||
|
const centerY = this.canvas.height / 2;
|
||||||
|
|
||||||
|
this.ctx.strokeStyle = this.lineColor;
|
||||||
|
this.ctx.lineWidth = this.lineWidth;
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(centerX, centerY);
|
||||||
|
this.ctx.lineTo(this.mouseX, this.mouseY);
|
||||||
|
this.ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Ausblenden nach Distanz
|
||||||
|
drawConnector() {
|
||||||
|
const centerX = this.canvas.width / 2;
|
||||||
|
const centerY = this.canvas.height / 2;
|
||||||
|
|
||||||
|
const dx = this.mouseX - centerX;
|
||||||
|
const dy = this.mouseY - centerY;
|
||||||
|
const delta = Math.sqrt(dx * dx + dy * dy);
|
||||||
|
|
||||||
|
// Only draw connectors if cursor is far enough from center
|
||||||
|
if (delta < this.distance) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const angle = Math.atan2(dy, dx);
|
||||||
|
const count = Math.floor((delta - this.distance) / this.spacing);
|
||||||
|
|
||||||
|
for (let i = 0; i < count; i++) {
|
||||||
|
const distance = this.distance + (i * this.spacing);
|
||||||
|
const x = centerX + Math.cos(angle) * distance;
|
||||||
|
const y = centerY + Math.sin(angle) * distance;
|
||||||
|
|
||||||
|
this.drawSymbol(x, y, angle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
drawSymbol(x, y, angle = 0) {
|
||||||
|
this.ctx.fillStyle = this.connectorColor;
|
||||||
|
this.ctx.strokeStyle = this.connectorColor;
|
||||||
|
this.ctx.lineWidth = 1;
|
||||||
|
|
||||||
|
switch (this.connectorStyle) {
|
||||||
|
case 'circle':
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(x, y, this.connectorSize / 2, 0, Math.PI * 2);
|
||||||
|
this.ctx.fill();
|
||||||
|
break;
|
||||||
|
case 'diamond':
|
||||||
|
const size = this.connectorSize - (this.connectorSize / 4);
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(x, y - size);
|
||||||
|
this.ctx.lineTo(x + size, y);
|
||||||
|
this.ctx.lineTo(x, y + size);
|
||||||
|
this.ctx.lineTo(x - size, y);
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
break;
|
||||||
|
case 'square':
|
||||||
|
this.ctx.fillRect(
|
||||||
|
x - this.connectorSize / 2,
|
||||||
|
y - this.connectorSize / 2,
|
||||||
|
this.connectorSize,
|
||||||
|
this.connectorSize
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'arrow':
|
||||||
|
this.arrow(x, y, angle);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow(x, y, angle) {
|
||||||
|
const size = this.connectorSize - (this.connectorSize / 4);
|
||||||
|
|
||||||
|
this.ctx.save();
|
||||||
|
this.ctx.translate(x, y);
|
||||||
|
this.ctx.rotate(angle);
|
||||||
|
|
||||||
|
// Arrow pointing right
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(size, 0); // Tip
|
||||||
|
this.ctx.lineTo(-size, -size); // Back left
|
||||||
|
// this.ctx.lineTo(-size * 0.4, 0); // Middle
|
||||||
|
this.ctx.lineTo(-size, size); // Back right
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
|
||||||
|
this.ctx.restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
drawCrosshair() {
|
||||||
|
this.ctx.strokeStyle = this.color;
|
||||||
|
this.ctx.lineWidth = this.thickness;
|
||||||
|
this.ctx.lineCap = 'round';
|
||||||
|
|
||||||
|
switch (this.style) {
|
||||||
|
case 'cross':
|
||||||
|
this.cross();
|
||||||
|
break;
|
||||||
|
case 'circle':
|
||||||
|
this.circle();
|
||||||
|
break;
|
||||||
|
case 'dot':
|
||||||
|
this.dot();
|
||||||
|
break;
|
||||||
|
case 'level':
|
||||||
|
this.level();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cross() {
|
||||||
|
// Horizontal line
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX - this.size, this.mouseY);
|
||||||
|
this.ctx.lineTo(this.mouseX - this.gapSize, this.mouseY);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX + this.gapSize, this.mouseY);
|
||||||
|
this.ctx.lineTo(this.mouseX + this.size, this.mouseY);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
// Vertical line
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX, this.mouseY - this.size);
|
||||||
|
this.ctx.lineTo(this.mouseX, this.mouseY - this.gapSize);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX, this.mouseY + this.gapSize);
|
||||||
|
this.ctx.lineTo(this.mouseX, this.mouseY + this.size);
|
||||||
|
this.ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
circle() {
|
||||||
|
// Outer circle
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(this.mouseX, this.mouseY, this.size, 0, Math.PI * 2);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
// Inner dot
|
||||||
|
this.ctx.fillStyle = this.color;
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(this.mouseX, this.mouseY, this.thickness, 0, Math.PI * 2);
|
||||||
|
this.ctx.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
dot() {
|
||||||
|
this.ctx.fillStyle = this.color;
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(this.mouseX, this.mouseY, this.size / 4, 0, Math.PI * 2);
|
||||||
|
this.ctx.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
level() {
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX - this.size * 2, this.mouseY);
|
||||||
|
this.ctx.lineTo(this.mouseX - this.gapSize * 2, this.mouseY);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(this.mouseX, this.mouseY, this.size, 0, Math.PI);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(this.mouseX + this.gapSize * 2, this.mouseY);
|
||||||
|
this.ctx.lineTo(this.mouseX + this.size * 2, this.mouseY);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.fillStyle = this.color;
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(this.mouseX, this.mouseY, this.thickness, 0, Math.PI * 2);
|
||||||
|
this.ctx.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
setCrosshairStyle(style) {
|
||||||
|
this.style = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
setCrosshairColor(color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
setConnectorStyle(style) {
|
||||||
|
this.connectorStyle = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
setConnectorColor(color) {
|
||||||
|
this.connectorColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
setConnectorVisibility(visible) {
|
||||||
|
this.connectorShow = visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
startAnimation() {
|
||||||
|
this.isAnimating = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
stopAnimation() {
|
||||||
|
this.isAnimating = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleAnimation() {
|
||||||
|
this.isAnimating = !this.isAnimating;
|
||||||
|
}
|
||||||
|
}
|
||||||
760
source/code/hippie/app.js
Normal file
760
source/code/hippie/app.js
Normal file
|
|
@ -0,0 +1,760 @@
|
||||||
|
/* jshint strict: false */
|
||||||
|
|
||||||
|
// 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('<span class="exp_wrap"></span>').parent().prepend('<span class="exp_overlay"></span>').prepend('<span class="exp_marker_pop"></span>');
|
||||||
|
// $wrap.after($pop);
|
||||||
|
|
||||||
|
$('<div></div>').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 elements = document.getElementsByClassName(tag.slice(1));
|
||||||
|
|
||||||
|
for (const element of elements) {
|
||||||
|
const content = element.innerHTML;
|
||||||
|
|
||||||
|
element.innerHTML = content + text;
|
||||||
|
element.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}<br>`;
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Kompatibilität für Zeiger
|
||||||
|
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`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt eine Zahl zwischen <min> und <max> aus.
|
||||||
|
* Die Werte <min> und <max> sind dabei mit eingeschlossen.
|
||||||
|
* Mit <pos> 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 = 1) {
|
||||||
|
dec = Math.pow(10, dec);
|
||||||
|
|
||||||
|
return Math.round((Math.random() * (max - min) + min) * dec) / dec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ersetzt \n durch <br>.
|
||||||
|
*
|
||||||
|
* @param {string} text
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function replaceLineBreaks(text) {
|
||||||
|
if (text === '' || !text.includes('\n')) {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
return text.split('\n').join('<br>');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
// Source - https://stackoverflow.com/a/47480429
|
||||||
|
// Posted by Etienne Martin, modified by community. See post 'Timeline' for change history
|
||||||
|
// Retrieved 2026-03-08, License - CC BY-SA 4.0
|
||||||
|
const delay = ms => new Promise(res => setTimeout(res, ms));
|
||||||
|
|
||||||
|
async function readJsonFile(file) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.readAsText(file);
|
||||||
|
reader.onload = function () {
|
||||||
|
try {
|
||||||
|
resolve(JSON.parse(reader.result));
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
reader.onerror = function () {
|
||||||
|
reject(reader.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function loadJson(filePath) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(filePath);
|
||||||
|
|
||||||
|
if (!response.ok) throw new Error(`Failed to load file: ${response.status}`);
|
||||||
|
|
||||||
|
return await response.json();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error loading file:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RandomPixelPlaceholder {
|
||||||
|
constructor(parent, options = {}) {
|
||||||
|
this.container = parent;
|
||||||
|
this.width = options.width || 400;
|
||||||
|
this.height = options.height || 300;
|
||||||
|
this.colors = options.colors || ['#000000', '#ffffff'];
|
||||||
|
this.filter = options.filter || '';
|
||||||
|
this.type = options.type || 'canvas'; // 'canvas' or 'img'
|
||||||
|
this.element = this.createElement();
|
||||||
|
|
||||||
|
this.addContextToElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
createElement() {
|
||||||
|
if (this.type === 'img') {
|
||||||
|
const img = document.createElement('img');
|
||||||
|
img.style.filter = this.filter;
|
||||||
|
|
||||||
|
this.container.appendChild(img);
|
||||||
|
|
||||||
|
return img;
|
||||||
|
} else {
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
canvas.width = this.width;
|
||||||
|
canvas.height = this.height;
|
||||||
|
canvas.style.filter = this.filter;
|
||||||
|
|
||||||
|
this.container.appendChild(canvas);
|
||||||
|
|
||||||
|
return canvas;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addContextToElement() {
|
||||||
|
if (this.type === 'img') {
|
||||||
|
// Create intermediate canvas
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
canvas.width = this.width;
|
||||||
|
canvas.height = this.height;
|
||||||
|
|
||||||
|
this.fillWithRandomPixels(canvas);
|
||||||
|
|
||||||
|
// Convert canvas to image data URL and set as img src
|
||||||
|
this.element.src = canvas.toDataURL();
|
||||||
|
this.element.width = this.width;
|
||||||
|
this.element.height = this.height;
|
||||||
|
} else {
|
||||||
|
this.fillWithRandomPixels(this.element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fillWithRandomPixels(canvas) {
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
const imageData = ctx.createImageData(this.width, this.height);
|
||||||
|
const data = imageData.data;
|
||||||
|
|
||||||
|
for (let i = 0; i < data.length; i += 4) {
|
||||||
|
const color = this.getRandomColor();
|
||||||
|
const rgb = this.hexToRgb(color);
|
||||||
|
|
||||||
|
data[i] = rgb.r; // Red
|
||||||
|
data[i + 1] = rgb.g; // Green
|
||||||
|
data[i + 2] = rgb.b; // Blue
|
||||||
|
data[i + 3] = 255; // Alpha
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.putImageData(imageData, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
getRandomColor() {
|
||||||
|
return this.colors[Math.floor(Math.random() * this.colors.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
hexToRgb(hex) {
|
||||||
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||||
|
|
||||||
|
return result ? {
|
||||||
|
r: parseInt(result[1], 16),
|
||||||
|
g: parseInt(result[2], 16),
|
||||||
|
b: parseInt(result[3], 16)
|
||||||
|
} : {r: 0, g: 0, b: 0};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sample(array) {
|
||||||
|
return array[Math.floor(Math.random() * array.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
//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;
|
||||||
|
}
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// WANNABE MODULE Mouse over effect
|
|
||||||
// With CSS only
|
|
||||||
if ($('#js_mob').length && viewHover) {
|
|
||||||
$('#js_mob').addClass('mouse_over');
|
|
||||||
}
|
|
||||||
// if (viewHover) {
|
|
||||||
// $('body').prepend('<div id="js_mob" class="mouse_over"></div>');
|
|
||||||
// }
|
|
||||||
// With JS
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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('hide');
|
|
||||||
|
|
||||||
// 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('hide');
|
|
||||||
console.info('Initial viewport left');
|
|
||||||
}
|
|
||||||
initLeft = true;
|
|
||||||
} else {
|
|
||||||
if (initLeft) {
|
|
||||||
$tp.addClass('hide');
|
|
||||||
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();
|
|
||||||
var 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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// MODULE Meta elements
|
|
||||||
function HippieMeta($ma, $pp) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
let metaOn = false;
|
|
||||||
|
|
||||||
$ma.click(function () {
|
|
||||||
var $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('<span class="exp_wrap"></span>').parent().prepend('<span class="exp_overlay"></span>').prepend('<span class="exp_marker_pop"></span>');
|
|
||||||
// $wrap.after($pop);
|
|
||||||
|
|
||||||
$('<div></div>').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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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();
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
// Setup
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// setup();
|
|
||||||
27
source/code/hippie/globals.js
Normal file
27
source/code/hippie/globals.js
Normal file
|
|
@ -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'
|
||||||
|
];
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
var hippie = {
|
|
||||||
brand: "|-| | |^ |^ | [- ",
|
|
||||||
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: Math.min($(document).scrollTop(), 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),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var viewHover = true;
|
|
||||||
var basicEase = 600;
|
|
||||||
|
|
||||||
var onerowAlphabet = "/\\ ]3 ( |) [- /= (_, |-| | _T /< |_ |\\/| |\\| () |^ ()_ /? _\\~ ~|~ |_| \\/ \\/\\/ >< `/ ~/_ ";
|
|
||||||
var onerowDigits = "\'| ^/_ -} +| ;~ (o \"/ {} \"| (\\) ";
|
|
||||||
318
source/code/intro.js
Normal file
318
source/code/intro.js
Normal file
|
|
@ -0,0 +1,318 @@
|
||||||
|
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('init');
|
||||||
|
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('contextmenu', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
el.addEventListener('click', (event) => {
|
||||||
|
if (checkButtonAndTarget(event, event.target)) {
|
||||||
|
console.log('OK go', event.target);
|
||||||
|
resolve('Idle fin.');
|
||||||
|
} else {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
} 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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
224
source/code/windows.js
Normal file
224
source/code/windows.js
Normal file
|
|
@ -0,0 +1,224 @@
|
||||||
|
class HippieTaskBar {
|
||||||
|
constructor(element, placeholder, options) {
|
||||||
|
this.element = element;
|
||||||
|
this.placeholder = placeholder;
|
||||||
|
this.date = null;
|
||||||
|
this.time = null;
|
||||||
|
this.isDragging = false;
|
||||||
|
this.barSize = '';
|
||||||
|
// TODO: Ergänzen und nicht ersetzen
|
||||||
|
this.options = options || {
|
||||||
|
direction: 0,
|
||||||
|
position: 'bottom',
|
||||||
|
date: {
|
||||||
|
year: 'numeric',
|
||||||
|
month: '2-digit',
|
||||||
|
day: '2-digit'
|
||||||
|
},
|
||||||
|
time: {hour: '2-digit', minute: '2-digit'}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Ereignisse besser delegieren
|
||||||
|
init() {
|
||||||
|
this.element.addEventListener('pointerdown', this.onDown.bind(this));
|
||||||
|
document.addEventListener('pointermove', this.onMove.bind(this));
|
||||||
|
document.addEventListener('pointerup', this.onUp.bind(this));
|
||||||
|
|
||||||
|
const clock = this.element.querySelector('.clock');
|
||||||
|
const dateElement = document.createElement('span');
|
||||||
|
const timeElement = document.createElement('span');
|
||||||
|
const br = document.createElement('br');
|
||||||
|
|
||||||
|
dateElement.id = 'date';
|
||||||
|
timeElement.id = 'time';
|
||||||
|
this.date = new DateDisplay(dateElement, this.options.date);
|
||||||
|
this.time = new TimeDisplay(timeElement, this.options.time);
|
||||||
|
|
||||||
|
// TODO: Reihenfolge anpassbar machen
|
||||||
|
clock.appendChild(timeElement);
|
||||||
|
clock.appendChild(br);
|
||||||
|
clock.appendChild(dateElement);
|
||||||
|
|
||||||
|
this.setOptions(this.options.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDown(event) {
|
||||||
|
if (checkButtonAndTarget(event, this.element, 0)) {
|
||||||
|
console.debug('Drag mode enabled');
|
||||||
|
|
||||||
|
this.isDragging = true;
|
||||||
|
|
||||||
|
this.showPlaceholder();
|
||||||
|
|
||||||
|
centerElementUnderCursor(event, this.placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
onMove(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: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.setAttributesAccordingToPosition(this.placeholder, this.options.position, attributes);
|
||||||
|
centerElementUnderCursor(event, this.placeholder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onUp() {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
setAttributesAccordingToPosition(element, position, attributes) {
|
||||||
|
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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"text": "Index",
|
|
||||||
"href": "/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Basics",
|
|
||||||
"href": "./demo/basics.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Drag",
|
|
||||||
"href": "./demo/examples/ui/drag.html"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
13
source/data/windows.json
Normal file
13
source/data/windows.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"taskbar": {
|
||||||
|
"position": "top",
|
||||||
|
"color": "white",
|
||||||
|
"hover": {
|
||||||
|
"active": true,
|
||||||
|
"color": "#52bed1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"window": {
|
||||||
|
"name": "Custom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,898 +0,0 @@
|
||||||
---
|
|
||||||
title: Basics
|
|
||||||
tags:
|
|
||||||
- demoIndex
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
|
|
||||||
{% extends "demo/_main.njk" %}
|
|
||||||
|
|
||||||
{% block title %}Grundlagen{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
{% include "hippie/partials/_body_nav.njk" %}
|
|
||||||
|
|
||||||
<div id="begin" class="demo__intro">
|
|
||||||
Dies ist einfach nur Text.<br>Weniger wäre Nichts, denn dieser Text ist nicht durch ein spezifisches Element umschlossen.<br>Das ist normalerweise nicht vorgesehen und wird hier nur zur Einführung und Anschauung verwendet.<br><br>
|
|
||||||
<article>
|
|
||||||
<p>Es wirken nur die Eigenschaften des
|
|
||||||
<code><body></code>
|
|
||||||
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.</p>
|
|
||||||
<h1 id="sections">Bereiche</h1>
|
|
||||||
{# // body // article // section // nav // aside // h1-h6 // header // footer #}
|
|
||||||
<section>
|
|
||||||
<p>Ein Abschnitt, welcher für sich alleine stehen kann, definiert sich durch
|
|
||||||
<code><article></code>. Solch ein Element wird oft detailliert gestaltet, kommt aber auch ohne jegliche Gestaltung aus.</p>
|
|
||||||
<p>Noch allgemeiner ist das
|
|
||||||
<code><section></code>
|
|
||||||
Element. Es schafft Bereiche um Inhalte zu strukturieren.</p>
|
|
||||||
<p>Bestimmte Bereiche haben einen vorgegebene Zweck.<br>Folgende Bereiche sind vorgegeben:</p>
|
|
||||||
</section>
|
|
||||||
<!-- <div class="overflow"> -->
|
|
||||||
<aside class="left">
|
|
||||||
<p>Ein Bereich, der seitlich zum hauptsächlichen Inhalt verläuft, wird mit
|
|
||||||
<code><aside></code>
|
|
||||||
markiert.</p>
|
|
||||||
</aside>
|
|
||||||
<section class="bside">
|
|
||||||
<header>
|
|
||||||
<p>Um einleitenden Inhalt festzuhalten, wird das
|
|
||||||
<code><header></code>
|
|
||||||
Element eingesetzt. Es beinhaltet häufig auch Navigationselemente. Dabei bezieht es sich auf den nächsten, umgebenden Abschnitt.</p>
|
|
||||||
<nav>
|
|
||||||
<p>Das Element
|
|
||||||
<code><nav></code>
|
|
||||||
umfasst Elemente, die zur Navigation innerhalb des Dokumentes dienen.</p>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
<footer>
|
|
||||||
<p>Auch abschließender Inhalt kann für einen Abschnitt definiert werden. Dazu wird
|
|
||||||
<code><footer></code>
|
|
||||||
eingesetzt.</p>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
<!-- </div> -->
|
|
||||||
<p>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.</p>
|
|
||||||
<h1>Überschrift 1</h1>
|
|
||||||
<p>Eine Überschrift erster Ordnung
|
|
||||||
<code><h1></code>
|
|
||||||
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.</p>
|
|
||||||
<h2>Überschrift 2</h2>
|
|
||||||
<p>Die weiteren Überschriften
|
|
||||||
<code><h2></code>
|
|
||||||
bis
|
|
||||||
<code><h6></code>
|
|
||||||
gliedern Text und werden auch als Titel für andere Elemente eingesetzt.</p>
|
|
||||||
<h3>Überschrift 3 ist in Großbuchstaben gesetzt</h3>
|
|
||||||
<h4>Überschrift 4 verwendet normale Buchstaben und gleicht ansonsten Überschrift 3</h4>
|
|
||||||
<h5>Überschrift 5 ist Überschrift 5</h5>
|
|
||||||
<hgroup>
|
|
||||||
<h6>Überschrift 6</h6>
|
|
||||||
<p>Überschriften können mit dem Element <code><hgroup></code> mit Absätzen gruppiert werden um beispielsweise Untertitel abzubilden.</p>
|
|
||||||
</hgroup>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1 id="grouping">Gruppierung</h1>
|
|
||||||
{# // p // address // hr // pre // blockquote // ol // ul // li // dl // dt // dd // figure // figcaption // main // div #}
|
|
||||||
<p>Ein Absatz
|
|
||||||
<code><p></code>. Zugegeben ein kurzer.</p>
|
|
||||||
<p>Aus mehreren Absätzen wird ein ganzer Text. Solche Texte haben gelegentlich großen informativen oder unterhaltsamen Charakter.<br>Einfache Zeilenumbrüche werden darin mit
|
|
||||||
<code><br></code>
|
|
||||||
erreicht. Dies ist allerdings ein Element der Textebene und keine Gruppierung.</p>
|
|
||||||
<p>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:</p>
|
|
||||||
<p class="txt_center js_pop">Text sitzt gerne auch mal zentriert.</p>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">p.txt_center</code>
|
|
||||||
</div>
|
|
||||||
<p class="txt_right js_pop">Rechtsbündig ist schon eher eine Ausnahme bzw. Besonderheit.</p>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">p.txt_right</code>
|
|
||||||
</div>
|
|
||||||
<address>Das Element
|
|
||||||
<code><address></code>
|
|
||||||
hat den Zweck, Kontaktinformationen bereit zu stellen. Diese werden, je nach Position des Elements im Kontext der gesamten Seite, anders gewertet.</address>
|
|
||||||
<p>Texte können auf verschiedene Arten unterteilt werden. Dafür werden unterschiedlich formatierte
|
|
||||||
<code><hr></code>
|
|
||||||
Elemente verwendet. Die horizontale Linie ist die Ausgangsformatierung, daher auch der abgekürzte Name des Elements. Eine Linie ist schwarz und durchgezogen.</p>
|
|
||||||
<hr/>
|
|
||||||
<p>Es ist auch eine unsichtbare Unterteilung möglich:</p>
|
|
||||||
<hr class="hr_hidden js_pop"/>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">hr.hr_hidden</code>
|
|
||||||
</div>
|
|
||||||
<p>Die Linie darf auch gepunkted 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%:</p>
|
|
||||||
<hr class="hr_dotted js_pop"/>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">hr.hr_dotted</code>
|
|
||||||
</div>
|
|
||||||
<!--hr.hr_dotted-->
|
|
||||||
<hr class="space_even_half js_pop"/>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">hr.space_even_half</code>
|
|
||||||
</div>
|
|
||||||
<hr class="hr_dotted space_even_fourth js_pop"/>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">hr.hr_dotted.space_even_fourth</code>
|
|
||||||
</div>
|
|
||||||
<p class="column_2 js_pop">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 Zeilanfang zu finden. Die vertikale Trennung dient in erster Linie dazu, diesem Umstand zu begegnen. Auch hier kann die Unterteilung viele Formen annehmen.</p>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">p.column_2</code>
|
|
||||||
</div>
|
|
||||||
<p class="column_3 column_line js_pop">Drei Spalten gilt es jetzt also zu Füllen. Dann erst wird die Trennung der Spalten durch eine Linie sichtbar.</p>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">p.column_3.column_line</code>
|
|
||||||
</div>
|
|
||||||
<p class="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.<br>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.<br>Auch das zeigen diese beiden Absätze ganz gut.</p>
|
|
||||||
<p>Es gibt die Möglichkeit vorformatierten Text darzustellen
|
|
||||||
<code><pre></code>.</p>
|
|
||||||
<pre>dadurch<br> bleiben<br> einrückungen<br> durch<br> tabulatoren<br> erhalten.</pre>
|
|
||||||
<p>Wird Bezug auf fremde Inhalte genommen, kommt ein Zitat
|
|
||||||
<code><blockquote></code>
|
|
||||||
zur Anwendung. Es besteht aus der Aussage und der Quelle.</p>
|
|
||||||
<blockquote class="js_pop" cite="https://de.wikipedia.org/wiki/Zitat/">
|
|
||||||
<p>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.</p>
|
|
||||||
<p class="quote_source">
|
|
||||||
<a href="https://de.wikipedia.org/wiki/Zitat/">Wikipedia</a>
|
|
||||||
</p>
|
|
||||||
</blockquote>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">blockquote>p+p.quote_source</code>
|
|
||||||
</div>
|
|
||||||
<p>Gerade bei wörtlichen Zitierungen kommt häufig das Anführungszeichen zum Einsatz. Es kann durch die Formatierung automatisch ergänzt werden.</p>
|
|
||||||
<blockquote class="quote_mark js_pop" cite="">
|
|
||||||
<p>Das kannst du schon so machen aber dann isses halt Kacke.</p>
|
|
||||||
<p class="quote_source">o. V.</p>
|
|
||||||
</blockquote>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">blockquote.quote_mark>p+p.quote_source</code>
|
|
||||||
</div>
|
|
||||||
<h2>Listen</h2>
|
|
||||||
<p>Text bekommt durch Listen besondere optische wie auch inhaltliche Struktur. Es gibt ungeordnete
|
|
||||||
<code><ul></code>
|
|
||||||
und geordnete Listen
|
|
||||||
<code><ol></code>
|
|
||||||
sowie Beschreibungslisten
|
|
||||||
<code><dl></code>. Die beiden ersten Varianten beinhalten das Listenelement
|
|
||||||
<code><li></code>. Beschreibungslisten beinhalten jeweils das Paar von Ausdruck
|
|
||||||
<code><dt></code>
|
|
||||||
und Beschreibung
|
|
||||||
<code><dd></code>. Im Folgenden eine Liste der Listen in ihrer Ausgangskonfiguration:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Ungeordnete</li>
|
|
||||||
<li>Listen</li>
|
|
||||||
</ul>
|
|
||||||
<ul class="list_dash">
|
|
||||||
<li>Verschiedener</li>
|
|
||||||
<li>Art</li>
|
|
||||||
</ul>
|
|
||||||
<ol>
|
|
||||||
<li>Geordnete</li>
|
|
||||||
<li>Liste</li>
|
|
||||||
</ol>
|
|
||||||
<dl>
|
|
||||||
<dt>Beschreibungsliste</dt>
|
|
||||||
<dd>Auch Definitionslisten genannt</dd>
|
|
||||||
<dt>Ausdruck</dt>
|
|
||||||
<dd>Beschreibung</dd>
|
|
||||||
</dl>
|
|
||||||
<p>Auch Inhalte, die nicht in Textform sind, können durch einen Bezug integriert werden. Wie diese Fahne werden sie mit
|
|
||||||
<code><figure></code>
|
|
||||||
umschlossen und tragen eine Bezeichnung, welche mit
|
|
||||||
<code><figcaption></code>
|
|
||||||
ausgezeichnet wird.</p>
|
|
||||||
<figure class="js_pop">
|
|
||||||
<figcaption>Fahne</figcaption>
|
|
||||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="10%" height="10%" viewbox="0 0 1920 1200" preserveaspectratio="xMinYMax slice">
|
|
||||||
<desc>Flag</desc>
|
|
||||||
<rect id="triangle-5" y="0" fill="#273F8B" width="1920" height="1200"/>
|
|
||||||
<polygon id="triangle-6" fill="#8E1F68" points="0,1200 1920,458.25 1920,1200 "/>
|
|
||||||
<polygon id="triangle-7" fill="#D30A51" points="0,1200 1920,522.75 1920,1200 "/>
|
|
||||||
<polygon id="triangle-8" fill="#F2AF13" points="0,1200 1920,741.75 1920,1200 "/>
|
|
||||||
<polygon id="triangle-9" fill="#FAD803" points="0,1200 1920,787.5 1920,1200 "/>
|
|
||||||
<polygon id="triangle-4" fill="#3C579A" points="0,1200 0,0 733.5,0 "/>
|
|
||||||
<polygon id="triangle-3" fill="#B7E0F0" points="0,1200 0,0 688.5,0 "/>
|
|
||||||
<polygon id="triangle-2" fill="#6BC7D9" points="0,1200 0,0 453,0 "/>
|
|
||||||
<polygon id="triangle-1" fill="#52BED1" points="0,1200 0,0 370.5,0 "/>
|
|
||||||
</svg>
|
|
||||||
</figure>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">figure>figcaption+{element}</code>
|
|
||||||
</div>
|
|
||||||
<hr class="hr_hidden">
|
|
||||||
<p>Eine sehr klar definierte Gruppierung stellt das Element
|
|
||||||
<code><main></code>
|
|
||||||
dar. Es umschließt den hauptsächlichen Inhalt des Dokumentes.</p>
|
|
||||||
<p>Eine von sich aus undefinierte Möglichkeit zur Gruppierung von Text besteht durch
|
|
||||||
<code><div></code>. Dieses Element hat, ohne weitere Klassifizierung keine Auswirkungen auf die Erscheinung oder die inhaltliche Aussage. Daher der allgemeine Einsatz.</p>
|
|
||||||
<div class="div_info js_pop">
|
|
||||||
<p>Es wird allerdings häufig eingesetzt und bekommt vielfältige Funktionen zugeordnet wie diese hervorgehobene Information zeigt.</p>
|
|
||||||
</div>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">div.div_info>p</code>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1 id="textlevel">Textebene</h1>
|
|
||||||
{# // a // em // strong // small // s // cite // q // dfn // abbr // ruby // rb // rt // rtc // rp // data // time // code // var // samp // kbd // sub // sup // i // b // u // mark // bdi // bdo // span // br // wbr // -- Edits -- // ins // del #}
|
|
||||||
<h2>Verweise</h2>
|
|
||||||
<p>Ein wesentlicher Bestandteil von Hypertext sind <a href="">Verweise</a>
|
|
||||||
<code><a></code>. Sie dienen als Sprungmarken innerhalb des Netzwerks. Es kann grob zwischen internen und externen Verweisen unterschieden werden.
|
|
||||||
<a class="a_internal js_pop" href="#links">Interne Verweise</a>
|
|
||||||
<span class="exp_pop">
|
|
||||||
<code class="code_solo">a.a_line</code>
|
|
||||||
</span>
|
|
||||||
können Verknüpfungen innerhalb des aktuellen Dokumentes sein oder auch Funktionen aktivieren.
|
|
||||||
<a class="a_external" href="http://de.wikipedia.org">Externe Verweise</a>
|
|
||||||
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
|
|
||||||
<b>Alles</b>
|
|
||||||
auslösen. Anweisungen werden im
|
|
||||||
<a href="https://tools.ietf.org/html/rfc1738">URL-Standard</a>
|
|
||||||
übergeben.</p>
|
|
||||||
<p>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.
|
|
||||||
<a class="a_internal" href="#">Farbige</a>
|
|
||||||
oder
|
|
||||||
<a class="a_line" href="#">unterstrichene Varianten</a>
|
|
||||||
sind einfache Beispiele.</p>
|
|
||||||
<p>Wird der Verweis innerhalb eines
|
|
||||||
<code><nav></code>
|
|
||||||
Elementes notiert, bekommt er die spezielle Bedeutung eines Navigationsverweises innerhalb des Dokumentes oder der Anwendung. Verweise werden dann durchaus auch wie Schaltflächen dargestellt.</p>
|
|
||||||
<nav>
|
|
||||||
<p>
|
|
||||||
<a class="a_button_text" href="#textlevel">↥</a>
|
|
||||||
(Zum Anfang des Abschnitts springen)
|
|
||||||
<a class="a_button_text" href="#begin">⇫</a>
|
|
||||||
(Zum Anfang der Seite springen)</p>
|
|
||||||
</nav>
|
|
||||||
<nav class="nav_center_old">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="{{ pageBase }}demo.html" class="a_button">Startseite</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button a_internal">Hilfe</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">⌨</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">⋯</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<h2>Formatierungen</h2>
|
|
||||||
<p>Texte, Wörter oder Zeichen können vielfältig formatiert werden.</p>
|
|
||||||
<p>Sie können
|
|
||||||
<b>fett</b>
|
|
||||||
<code><b></code>
|
|
||||||
oder
|
|
||||||
<i>kursiv</i>
|
|
||||||
<code><i></code>
|
|
||||||
geschrieben sein.
|
|
||||||
<b>
|
|
||||||
<i>Auch beides ist möglich!</i>?</b>! Sollen sie nicht nur anders
|
|
||||||
<strong>aussehen</strong>, sondern auch
|
|
||||||
<em>eine besondere inhaltliche Bedeutung</em>
|
|
||||||
bekommen, werden sie mit
|
|
||||||
<code><strong></code>
|
|
||||||
und
|
|
||||||
<code><em></code>
|
|
||||||
ausgezeichnet.</p>
|
|
||||||
<p>Das
|
|
||||||
<code><u></code>
|
|
||||||
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
|
|
||||||
<u>Interaktionsweise</u>, oder die Beschriftung des Textes als
|
|
||||||
<u>flasch</u>
|
|
||||||
(falsch) geschrieben.</p>
|
|
||||||
<p>Ähnlich ist es mit dem Element
|
|
||||||
<code><small></code>.
|
|
||||||
<small>Es steht für Randnotizen wird aber häufig auch kleiner dargestellt.</small>
|
|
||||||
</p>
|
|
||||||
<p>Ist ein Text nicht mehr korrekt oder relevant kann er mit
|
|
||||||
<code><s></code>
|
|
||||||
markiert werden:<br>
|
|
||||||
<s>Die Erde ist eine Scheibe.</s>
|
|
||||||
</p>
|
|
||||||
<p>Ein besonderer inhaltlicher Bezug ist der Titel eines Werkes. Sowas kann mit
|
|
||||||
<code><cite></code>
|
|
||||||
ausgezeichnet werden.
|
|
||||||
<cite>Pulp Fiction</cite>, ist ein super Film - zum Beispiel.</p>
|
|
||||||
<p>Um ein Zitat direkt im Text zu verwenden benutzt man das
|
|
||||||
<code><q></code>
|
|
||||||
Element. Es platziert Anführungszeichen um die Aussage:</p>
|
|
||||||
<p>Sie sagte:
|
|
||||||
<q>Du wolltest staubsaugen!</q><br>Er sagte:
|
|
||||||
<q>Mach' ich morgen.</q>
|
|
||||||
</p>
|
|
||||||
<p>Mit dem
|
|
||||||
<code><dfn></code>
|
|
||||||
Element werden Begriffe definiert. Es wird häufig mit dem Element für Abkürzungen
|
|
||||||
<code><abbr></code>
|
|
||||||
gemeinsam verwendet. Die eigentliche Definition kann dabei auch im Attribut
|
|
||||||
<code>title</code>
|
|
||||||
stehen. Dies ist ein globales Attribut das erklärende Informationen zu dem Element enthält. Diese wird typischerweise beim darauf Zeigen eingeblendet.</p>
|
|
||||||
<p>
|
|
||||||
<dfn>
|
|
||||||
<abbr title="Hippie interweaves preeminent personal interface elements">HIPPIE</abbr>
|
|
||||||
</dfn>
|
|
||||||
is an recursive acronym for
|
|
||||||
<dfn>Hippie interweaves preeminent personal interface elements</dfn>.</p>
|
|
||||||
<p>Die besondere Auszeichnung
|
|
||||||
<code><ruby></code>
|
|
||||||
<q cite="https://de.wikipedia.org/wiki/Ruby_Annotation">bezeichnet ein Anmerkungssystem, bei dem der Text zusammen mit seiner Anmerkung in einer Zeile erscheint.</q>
|
|
||||||
Das System verwendet die folgenden weiteren Elemente mit spezifischer Bedeutung:</p>
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
<code><rb></code>
|
|
||||||
</dt>
|
|
||||||
<dd>Basis Textkomponente</dd>
|
|
||||||
<dt>
|
|
||||||
<code><rt></code>
|
|
||||||
</dt>
|
|
||||||
<dd>Annotation</dd>
|
|
||||||
<dt>
|
|
||||||
<code><rtc></code>
|
|
||||||
</dt>
|
|
||||||
<dd>Einzelne Komponente einer Annotation</dd>
|
|
||||||
<dt>
|
|
||||||
<code><rp></code>
|
|
||||||
</dt>
|
|
||||||
<dd>Alternative bei fehlender Unterstützung</dd>
|
|
||||||
</dl>
|
|
||||||
<hr class="hr_dotted space_even_half">
|
|
||||||
<div class="txt_center">
|
|
||||||
<ruby class="space_right_small">
|
|
||||||
<rb>Basis</rb>
|
|
||||||
<rt>Auszeichnung</rt>
|
|
||||||
</ruby>
|
|
||||||
<ruby class="space_right_small">
|
|
||||||
<rb>今日</rb>
|
|
||||||
<rt>きょう</rt>
|
|
||||||
</ruby>
|
|
||||||
<ruby>
|
|
||||||
♥<rp>:
|
|
||||||
</rp>
|
|
||||||
<rt>Herz</rt>
|
|
||||||
<rp>,
|
|
||||||
</rp>
|
|
||||||
<rtc>
|
|
||||||
<rt lang="fr">Cœur</rt>
|
|
||||||
</rtc>
|
|
||||||
<rp>.</rp>
|
|
||||||
☘<rp>:
|
|
||||||
</rp>
|
|
||||||
<rt>Kleeblatt</rt>
|
|
||||||
<rp>,
|
|
||||||
</rp>
|
|
||||||
<rtc>
|
|
||||||
<rt lang="fr">Trèfle</rt>
|
|
||||||
</rtc>
|
|
||||||
<rp>.</rp>
|
|
||||||
✶<rp>:
|
|
||||||
</rp>
|
|
||||||
<rt>Stern</rt>
|
|
||||||
<rp>,
|
|
||||||
</rp>
|
|
||||||
<rtc>
|
|
||||||
<rt lang="fr">Étoile</rt>
|
|
||||||
</rtc>
|
|
||||||
<rp>.</rp>
|
|
||||||
</ruby>
|
|
||||||
</div>
|
|
||||||
<hr class="hr_dotted space_even_half">
|
|
||||||
<p>Wikipedia erklärt dies ausführlicher unter
|
|
||||||
<a href="https://de.wikipedia.org/wiki/Ruby_Annotation">Ruby Annotation</a>.</p>
|
|
||||||
<p>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
|
|
||||||
<code><data></code>
|
|
||||||
und
|
|
||||||
<code><time></code>
|
|
||||||
enthalten eine maschinen-lesbare Repräsentation des Inhaltes:</p>
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
<data value="0">0</data>
|
|
||||||
≠
|
|
||||||
<data value="">NULL</data>
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
<code><data>0</data> ≠ <data>NULL</data></code>
|
|
||||||
</dd>
|
|
||||||
<dt>Der Wert
|
|
||||||
<data value="NULL">NULL</data>
|
|
||||||
mit Attribut</dt>
|
|
||||||
<dd>
|
|
||||||
<code><data value="NULL">NULL</data></code>
|
|
||||||
</dd>
|
|
||||||
<dt>
|
|
||||||
<time>2018-10-08</time>
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
<code><time>2018-10-08</time></code>
|
|
||||||
</dd>
|
|
||||||
<dt>Die Zeitangabe
|
|
||||||
<i>
|
|
||||||
<time datetime="2018-10-08">Gestern</time>
|
|
||||||
</i>
|
|
||||||
mit Attribut</dt>
|
|
||||||
<dd>
|
|
||||||
<code><time datetime="2018-10-08">Gestern</time></code>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<p>Die Auszeichnung
|
|
||||||
<code><code></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.</p>
|
|
||||||
<p>Für zusammenhängende Blöcke wird die Auszeichnung oft in Kombination mit dem Element
|
|
||||||
<code><pre></code>
|
|
||||||
verwendet:</p>
|
|
||||||
<pre class="pre_code"><code><html><br> <head><br> <title>hyper text markup language</title><br> </head><br> <body id="root"><br> <!-- content goes here --><br> <p class="example">just like this.</p><br> </body><br></html></code></pre>
|
|
||||||
<p>Dabei bleiben vorhandene Textformatierungen wie Zeilenumbrüche und Einrückung erhalten.</p>
|
|
||||||
<p>
|
|
||||||
<code>var def = "Definition einer Variablen";</code>
|
|
||||||
</p>
|
|
||||||
<p>In diesem Beispiel wird die Variable
|
|
||||||
<var>def</var>
|
|
||||||
definiert. Solch ein spezieller Typ Text kann mit dem dafür vorgesehenen Element
|
|
||||||
<code><var></code>
|
|
||||||
ausgezeichnet werden.</p>
|
|
||||||
<p>Soll beispielhaft auf Ausgaben von Computern verwiesen werden, wird das
|
|
||||||
<code><samp></code>
|
|
||||||
Element verwendet. Der Computer hat gesagt:
|
|
||||||
<samp>Ich kann das angegebene Objekt nicht finden</samp>.</p>
|
|
||||||
<p>Benutzereingaben haben ebenfalls ein eigenes Element
|
|
||||||
<code><kbd></code>. Damit werden Eingaben durch den Nutzer, wie zum Beispiel
|
|
||||||
<q>Drücken Sie gleichzeitig
|
|
||||||
<kbd>Strg</kbd>
|
|
||||||
und
|
|
||||||
<kbd>A</kbd>
|
|
||||||
</q>, gekennzeichnet.</p>
|
|
||||||
<p>Hoch- und Tiefgestellte Zeichen werden durch die Elemente
|
|
||||||
<code><sup></code>
|
|
||||||
und
|
|
||||||
<code><sub></code>
|
|
||||||
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:</p>
|
|
||||||
<p>Beispielsweise die Formel
|
|
||||||
<var>E</var>=<var>m</var>
|
|
||||||
<var>c</var>
|
|
||||||
<sup>2</sup>
|
|
||||||
oder das Element H<sub>2</sub>O</p>
|
|
||||||
<p>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:</p>
|
|
||||||
<p class="txt_center">Bei<mark class="mark_cursor">spiel zum mark</mark>ieren 😉.</p>
|
|
||||||
<p>Eine Markierung kann, mittels
|
|
||||||
<code><mark></code>, auch durch den Autor geschehen. Diese stellt sich ein wenig anders dar:
|
|
||||||
<mark>Diese Worte sind markiert.</mark>
|
|
||||||
</p>
|
|
||||||
<p>Um Text, dessen schreibweise nicht vorhersehbar ist, zu markieren wie z.B. Benutzernamen
|
|
||||||
<bdi>كائن بشري</bdi>, die auch rechtsbündig geschrieben sein können, wird das
|
|
||||||
<code><bdi></code>
|
|
||||||
Element eingesetzt.<br>Die Schreibweise kann auch auch vom Author vorgegeben und expliziert geändert werden. Dies wird dem
|
|
||||||
<code><bdo></code>
|
|
||||||
Element umgesetzt. Die Richtung wird dann mit dem Attribut
|
|
||||||
<code>dir</code>
|
|
||||||
angegeben.</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<bdo dir="rtl">كائن بشري</bdo>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<bdo dir="rtl">إنسان آلي</bdo>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<p>Neben den vielen speziellen Elementen gibt es auch ein Element, das keine vordefinierte Bedeutung hat. Es ist das
|
|
||||||
<code><span></code>
|
|
||||||
Element.<br>Es dient dazu ganz individuelle Auszeichnungen zu ermöglichen die eher optische Auswirkungen haben und eben keine inhaltlichen. Mit den Attributen
|
|
||||||
<code>id</code>
|
|
||||||
oder
|
|
||||||
<code>class</code>
|
|
||||||
werden dazu eigene Typen des Elements definiert. Diese Möglichkeit der Definition von individuellen Elementen ist ein Grundprinzip der Auszeichnungssprache
|
|
||||||
<abbr title="Hypertext Markup Language">HTML</abbr>.</p>
|
|
||||||
<p>Mit der Einführung von Absätzen wurde auch schon das
|
|
||||||
<code><br></code>
|
|
||||||
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.</p>
|
|
||||||
<p>Eine besondere Form des Zeilenumbruchs kann mit
|
|
||||||
<code><wbr></code>
|
|
||||||
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.</p>
|
|
||||||
<p>Und der Löwe brüllte "RRRR<wbr>rrrr<wbr>oooooooo<wbr>aaaa<wbr>AAAAAAAA<wbr>HHHH<wbr>hhhh<wbr>rrrrrrrrr"!
|
|
||||||
</p>
|
|
||||||
<p>Es kann auch innerhalb von vorformatierten Texten Zeilenumbrüche ermöglichen</p>
|
|
||||||
<h2>Änderungen</h2>
|
|
||||||
<p>Werden Texte geändert, können solche Änderungen sichtbar gemacht werden. Somit können sie besser nachvollzogen werden.<br>Zum Beispiel eine Ergänzung von Inhalt.</p>
|
|
||||||
<aside>
|
|
||||||
<ins>Dies ist auch wichtig.</ins>
|
|
||||||
</aside>
|
|
||||||
<p>Der Inhalt wird dann mit
|
|
||||||
<code><ins></code>
|
|
||||||
ausgezeichnet. Wird Text entfernt, kommt
|
|
||||||
<code><del></code>
|
|
||||||
zum Einsatz.</p>
|
|
||||||
<h6>Zu Tun</h6>
|
|
||||||
<ul>
|
|
||||||
<li>Fahrrad reparieren</li>
|
|
||||||
<li>
|
|
||||||
<del>Staubsaugen</del>
|
|
||||||
</li>
|
|
||||||
<li>Tisch bauen</li>
|
|
||||||
</ul>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1 id="embedded">Eingebundene Inhalte</h1>
|
|
||||||
{# // picture // source // img // iframe // embed // object // param // video // audio // track // map // area #}
|
|
||||||
<img src="data:image/gif;base64,R0lGODlhgABQAIQAMf/MAP+ZM/+ZAP9mM8zM/8xmM8wzM8wAZpnM/5nMzJmZzJkzZpkAZmbMzGaZzGZmmWYzZjNmmTMzmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAgABQAAQF/mDjiORolug5NiKSEG8Mz68SSbek73zv/8CgcEhkGY/IpBLRcBEQM+hL+nRIHrscLsvVab/drTcMHpvF6DIuxVaxj7I4DZZAE+/4vB6o7PubRgSCUIOCT4YRDxE3jFuNj46RkJOSlZSXlo5tm24nTXKgBA5ae6Wmpz5/qklOU1GvCYqNZ2q1ZLe0uGm6X5y+K0dzoQlWpKjHyHery0wIhIeFgwiLmZjW1djX2pa/viwjw3PUyeTlQct/TCyHru0ENru58vH0tvP29VndnazhMVjGzAkkh06VM2gICdkAmK3htocOI0bYtymQv2kBB2o8VrBPM3dUoDxQdI+XyZIo/vOlnMivJQk4wubA20iTYMcj6l5ESzgKok+JQH8+osivQcw4DezUXFrqJquQsAhQw0f1pMqrVe8RRcHCn6iMTMMqc8qCSUJDUmQFXSuUrcOtwBwk8FdMrF09ZHOy2+vsitWsWP8KXgk3WLhxdxMXIdtk5zMFattKdjt5UuGuR2GAVcyZR16jIGHYmBV45eDSqGttNdJKGAKlnWPvuNnsme2vlHNX1q3JZdHMM2UL9+yUb5S6ppOnPg1YtW+ureMogD08Nm1XOxPx3s3dLQQICyh+iz5jVHXZEBgsYJC+4EfjsZjLV97c6vf1C8CrF99gmJXziuGn3oDr3YQWWhht/qdgd5Sklx9++hlwgAHikfcCYgDSlJ6D7A14AAMHhHiAe1C9YF599M233BgO6vegehPGKCGFz1kkzGYZosKhgAKK6KOIzDRx2ztTLWjkT/e56KKMTM44IUWgvIZjjnlwuCOIP2bpY0HGkZTilytedZ96SzppZpMydvOJTFNSGcSVPGopZ5bMOFYXg0diM+aLC6B55p9NerOOdG7useGA6c2p6JwGgbZXkWCiGOYNLcYJ6KV+pukSZjJ4WSgQcMK46KiMqqITO3imWkmS+C2A6auZ/umNMFh8ysOh63FI6q6LGhSSlCpKWhUEEvAJXqzIwvqnAQNU1J84baJHoIe8/lab5QAFBCAAAAL4YdYzJ+Y52Z7HKptsstluGwAA667LyVw0RJuYldRaa20B6WrLrb7bAvBHO/9NGuwO5K5n7sFMYhtAu+w2vC4AEEdcEQ2vAXilvbsawGwB3Ha8rboRhyyxR4WQpCpElZ6LsJMKM8ywyDCLvIkM5sWGK5YYz6kxtvt+vHDMQMvcRxQMRSoYqwysnOzGDjcd9NMyu7EmMYrdnLOcBqTrsdNQdz0yEgcJUuTJkbyo9KXMgvyy12zD/MYMtYal69U+YiuAzx+3rXfMSqA68Dxjnt1kAQOovffhT0MXQ8AaEdtjzllrnTfilAOdxBTAplqmyoP//HDlyKAnrsIMG81t7cb8hq461GCbSJqwEjjIOcvZrr367UGjEIO8Q+zI6855f4778JYHI0pu983OtO3EN2+5CS7UgUqHGRtwt+fOZ886a1JJit/ShTes/fhev/ROKbIrmrUAzJPvfvGfMHTNd69a3+/7+LNNAtV31PsjvvrKnwD1tw5elKtzwhugArvWgrj9YD0+2hnHFkhBvXWlQUmLEc8qyMG9scCBscMS8DpIQg9Oh1JJS1sJV3i4pKQnaz9joQz15gDxzfCGegsBADs=" width="128" height="80" alt="Fahne von Interaktionsweise">
|
|
||||||
<p>Dies ist ein Bild. Es wird mit dem Element
|
|
||||||
<code><img></code>
|
|
||||||
eingebunden. Solch ein Bild hat üblicherweise die Attribute
|
|
||||||
<code>width</code>
|
|
||||||
und
|
|
||||||
<code>height</code>. Mit ihnen werden die Abmessungen (Breite und Höhe) festgelegt. Außerdem sollte immer das Attribut
|
|
||||||
<code>alt</code>
|
|
||||||
für eine alternative Beschreibung in Textform verwendet werden.</p>
|
|
||||||
<p>Das Bild selbst liegt normalerweise als Datei vor. Die Quelle wird mit dem Attribut
|
|
||||||
<code>src</code>
|
|
||||||
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
|
|
||||||
<code><source></code>
|
|
||||||
und
|
|
||||||
<code><picture></code>
|
|
||||||
in Kombination verwendet werden.</p>
|
|
||||||
<picture>
|
|
||||||
<source srcset="{{ pageBase }}art/demo/flag_websafe_128x80.webp" type="image/webp"/>
|
|
||||||
<img src="{{ pageBase }}art/demo/flag_websafe_128x80.gif" alt="" width="128" height="80"/>
|
|
||||||
</picture>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1>Tabellen</h1>
|
|
||||||
<p>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.</p>
|
|
||||||
<table class="width_full js_pop">
|
|
||||||
<tr>
|
|
||||||
<td>Eine</td>
|
|
||||||
<td>einfache</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2">Tabelle</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">table.width_full>tr>td*2^tr>td[colspan=2]</code>
|
|
||||||
</div>
|
|
||||||
<div class="overflow">
|
|
||||||
<table class="float_space_left js_pop">
|
|
||||||
<tr>
|
|
||||||
<td>Eine</td>
|
|
||||||
<td>freie (nicht fixierte)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2">Tabelle</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">table>tr>td*2^tr>td[colspan=2]</code>
|
|
||||||
</div>
|
|
||||||
<table class="table_blank float_space_left js_pop">
|
|
||||||
<tr>
|
|
||||||
<td>Mit</td>
|
|
||||||
<td>ohne</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2">Linien</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">table.table_blank>tr>td*2^tr>td[colspan=2]</code>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p>Die nächste Tabelle verwendet alle zur Auszeichnung verfügbaren Elemente und hat eine starre Zellverteilung:</p>
|
|
||||||
<table class="width_full table_fix js_pop">
|
|
||||||
<caption>Beschreibung bzw. Zusammenhang der Tabelle</caption>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Kopfzeile</th>
|
|
||||||
<th>A</th>
|
|
||||||
<th>B</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Tabelle</td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>mit</td>
|
|
||||||
<td>Titel</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td rowspan="2"></td>
|
|
||||||
<td>Kopf-</td>
|
|
||||||
<td>und</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td>Fußzeile</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Fußzeile</th>
|
|
||||||
<td>A</td>
|
|
||||||
<td>B</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</table>
|
|
||||||
<div class="exp_pop">
|
|
||||||
<code class="code_solo">table.width_full.table_fix>caption+thead>tr>th[scope="col"]*3^^tbody>(tr>td*3)*3^^tfoot>tr>th[scope="row"]+td*2</code>
|
|
||||||
</div>
|
|
||||||
<p>Viele weitere Formate sind möglich.</p>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1>Formulare</h1>
|
|
||||||
<p>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.<br>Üblicherweise stehen alle Bedienelemente innerhalb eines
|
|
||||||
<code><form></code>
|
|
||||||
Elementes. Dieses ist notwendig um Angaben zur Kommunikation mit dem Server zu setzen. Es hat normalerweise keine gestalterische Funktion.</p>
|
|
||||||
<p>Grundlegend ist das Element
|
|
||||||
<code><input></code>. 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.</p>
|
|
||||||
<p><input value="Undefiniert"/><input class="io_input" value="Undefiniert mit Stil"/></p>
|
|
||||||
<p>Ein spezieller Typ des Eingabefeldes hat die Funktion einer Schaltfläche
|
|
||||||
<code><input[type="button"]></code>. Es gibt allerdings auch ein eigenes Element
|
|
||||||
<code><button></code>
|
|
||||||
dafür.</p>
|
|
||||||
<p><input type="button" value="Input Button">
|
|
||||||
<button>Button</button>
|
|
||||||
</p>
|
|
||||||
<p><input class="io_button" type="button" value="Input Button">
|
|
||||||
<button class="io_button">Button</button>
|
|
||||||
</p>
|
|
||||||
<p>Interaktive Elemente können durch das Attribut
|
|
||||||
<code>readonly</code>
|
|
||||||
nur lesbar gemacht werden oder mittels
|
|
||||||
<code>disabled</code>
|
|
||||||
gänzlich deaktiviert werden.</p>
|
|
||||||
<p><input type="text" value="Nur lesbare Eingabe" readonly="readonly"><input type="text" value="Deaktivierte Eingabe" size="21" disabled="disabled">
|
|
||||||
<button disabled="disabled">Deaktivierte Schaltfläche</button>
|
|
||||||
</p>
|
|
||||||
<p><input class="io_input" type="text" value="Nur lesbare Eingabe" readonly="readonly"><input class="io_input" type="text" value="Deaktivierte Eingabe" size="21" disabled="disabled">
|
|
||||||
<button class="io_button" disabled="disabled">Deaktivierte Schaltfläche</button>
|
|
||||||
</p>
|
|
||||||
<p>Das Element
|
|
||||||
<code><label></code>
|
|
||||||
ergänzt interaktive Elemente um eine Beschriftung. Wichtig ist hier, dass die Beziehung beider Elemente zu einander deutlich ist.</p>
|
|
||||||
<p>
|
|
||||||
<label>Beschriftung:<input type="text"></label>
|
|
||||||
</p>
|
|
||||||
<div class="overflow">
|
|
||||||
<div class="float_left">
|
|
||||||
<table class="table_fix table_blank">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<label for="demo__raw_a">Alpha:</label>
|
|
||||||
</td>
|
|
||||||
<td><input type="text" id="demo__raw_a"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<label for="demo__raw_b">Beta:</label>
|
|
||||||
</td>
|
|
||||||
<td><input type="text" id="demo__raw_b"></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<table class="float_right">
|
|
||||||
<tr>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="text" id="demo__io_d" value="11.966504" size="10"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_a">x</label>
|
|
||||||
</td>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="number" id="demo__io_a" value="10" min="0" max="1000"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_a">Breite</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="text" id="demo__io_e" value="51.503491" size="10"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_b">y</label>
|
|
||||||
</td>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="number" id="demo__io_b" value="10" min="0" max="1000"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_b">Tiefe</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="text" id="demo__io_f" value="88" size="10"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_c">z</label>
|
|
||||||
</td>
|
|
||||||
<td class="txt_right demo__td_no_br demo__td_pl"><input class="io_input" type="number" id="demo__io_c" value="48" min="0" max="1000"></td>
|
|
||||||
<td class="demo__td_pr">
|
|
||||||
<label for="demo__io_c">Höhe</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<p>Zusätzlich zur Beschriftung einzelner Elemente gibt es auch die Möglichkeit Gruppierungen zu schaffen. Diese werden mit
|
|
||||||
<code><fieldset></code>
|
|
||||||
realisiert.</p>
|
|
||||||
<fieldset>
|
|
||||||
<div class="grid grid_column_2">
|
|
||||||
<label for="demo__input">Input:</label><input class="io_input" type="text" value="love" readonly="readonly" id="demo__input">
|
|
||||||
<label for="demo__output">Output:</label><input class="io_input" type="text" value="happiness" readonly="readonly" id="demo__output">
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
<p>Sie können mittels
|
|
||||||
<code><legend></code>
|
|
||||||
auch eine eigene Beschriftung erhalten.</p>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Einfache Eingabeelemente</legend>
|
|
||||||
<div class="grid grid_column_2">
|
|
||||||
<label>Schaltflächen:</label>
|
|
||||||
<div>
|
|
||||||
<button>Senden</button><input type="reset" value="Abbrechen"></div>
|
|
||||||
<label>Zeicheneingaben:</label>
|
|
||||||
<div><input type="text" placeholder="Text"><input type="number" value="0815"></div>
|
|
||||||
<label>Einzelauswahl:</label>
|
|
||||||
<div><input type="radio" name="direction" value="up" checked="checked"/><input type="radio" name="direction" value="down"/></div>
|
|
||||||
<label>Mehrfachauswahl:</label>
|
|
||||||
<div><input type="checkbox" name="speed" value="slow" checked="checked"/><input type="checkbox" name="speed" value="fast"/></div>
|
|
||||||
<label>Auswahllisten:</label>
|
|
||||||
<div>
|
|
||||||
<select class="txt_top">
|
|
||||||
<option value="A" selected="selected">Option A</option>
|
|
||||||
<option value="B">Option B</option>
|
|
||||||
</select>
|
|
||||||
<select class="txt_top" size="3">
|
|
||||||
<option value="red" selected="selected">Rot</option>
|
|
||||||
<option value="green">Grün</option>
|
|
||||||
<option value="blue">Blau</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<label>Textfeld:</label>
|
|
||||||
<textarea rows="3">Dies ist ein Eingabefeld für Fließtext. Es bildet auch Zeilenumbrüche ab und hat häufig variable Größen.</textarea>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Einfache Eingabeelemente mit Stil</legend>
|
|
||||||
<div class="grid grid_column_2">
|
|
||||||
<label>Schaltflächen:</label>
|
|
||||||
<div>
|
|
||||||
<button class="io_button">Senden</button><input class="io_button" type="reset" value="Abbrechen"></div>
|
|
||||||
<label>Zeicheneingaben:</label>
|
|
||||||
<div><input class="io_input" type="text" placeholder="Text"><input class="io_input" type="number" value="0815"></div>
|
|
||||||
<label>Einzelauswahl:</label>
|
|
||||||
<div><input class="io_radio" type="radio" name="direction" value="up" checked="checked"/><input class="io_radio" type="radio" name="direction" value="down"/></div>
|
|
||||||
<label>Mehrfachauswahl:</label>
|
|
||||||
<div><input class="io_check" type="checkbox" name="speed" value="slow" checked="checked"/><input class="io_check" type="checkbox" name="speed" value="fast"/></div>
|
|
||||||
<label>Auswahllisten:</label>
|
|
||||||
<div>
|
|
||||||
<select class="io_select txt_top">
|
|
||||||
<option value="A" selected="selected">Option A</option>
|
|
||||||
<option value="B">Option B</option>
|
|
||||||
</select>
|
|
||||||
<select class="io_select txt_top" size="3">
|
|
||||||
<option value="red" selected="selected">Rot</option>
|
|
||||||
<option value="green">Grün</option>
|
|
||||||
<option value="blue">Blau</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<label>Textfeld:</label>
|
|
||||||
<textarea class="io_textarea" rows="3">Dies ist ein Eingabefeld für Fließtext. Es bildet auch Zeilenumbrüche ab und hat häufig variable Größen.</textarea>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Weitere Eingabemöglichkeiten</legend>
|
|
||||||
<p>Innerhalb einer Gruppe können nicht nur Ein- und Ausgabefelder platziert werden. Andere Elemente ergänzen Information oder lockern das Erscheinungsbild auf.</p>
|
|
||||||
<p>Hier nun eine Liste weiterer Arten von Eingabefeldern:</p>
|
|
||||||
<div class="grid grid_column_2">
|
|
||||||
<label class="">Farbauswahl<br>
|
|
||||||
<code><input[type="color"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="" type="color"></div>
|
|
||||||
<label class="">Bereichsauswahl<br>
|
|
||||||
<code><input[type="range"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="" type="range"></div>
|
|
||||||
<label class="">Datum<br>
|
|
||||||
<code><input[type="date"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="date"></div>
|
|
||||||
<label class="">Uhrzeit<br>
|
|
||||||
<code><input[type="time"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="time"></div>
|
|
||||||
<label class="">Datum und Zeit<br>
|
|
||||||
<code><input[type="datetime-local"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="datetime-local"></div>
|
|
||||||
<label class="">Kalendermonat<br>
|
|
||||||
<code><input[type="month"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="month"></div>
|
|
||||||
<label class="">Kalenderwoche<br>
|
|
||||||
<code><input[type="week"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="week"></div>
|
|
||||||
<label class="">@dresse<br>
|
|
||||||
<code><input[type="email"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="email" placeholder="@"></div>
|
|
||||||
<label class="">Passwort<br>
|
|
||||||
<code><input[type="password"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="password" value="admin"></div>
|
|
||||||
<label class="">Telefonnummer<br>
|
|
||||||
<code><input[type="tel"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="tel" value="0190123456"></div>
|
|
||||||
<label class="">URL<br>
|
|
||||||
<code><input[type="url"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="url" placeholder="url://"></div>
|
|
||||||
<label class="">Suche<br>
|
|
||||||
<code><input[type="search"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="io_input" type="search"></div>
|
|
||||||
<label class="">Datei<br>
|
|
||||||
<code><input[type="file"]></code>
|
|
||||||
</label>
|
|
||||||
<div><input class="" type="file"></div>
|
|
||||||
<label class="">Bild</label><input class="" type="image" alt="Alternativer Text"/>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<h2>Interaktive Elemente</h2>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1>Struktur</h1>
|
|
||||||
<div class="box_placeholder"></div>
|
|
||||||
<hr class="hr_hidden"/>
|
|
||||||
<div class="box_placeholder">
|
|
||||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="100%">
|
|
||||||
<line x1='0' y1='0' x2='100%' y2='100%' stroke='#000' stroke-width='.5'/>
|
|
||||||
<line x1='0' y1='100%' x2='100%' y2='0' stroke='#000' stroke-width='.5'/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<hr class="hr_hidden"/>
|
|
||||||
<div class="box_placeholder_bkg"></div>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1>Medien</h1>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1>Druck</h1>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<header class="header_txt">
|
|
||||||
<h1>Ende der Einführung</h1>
|
|
||||||
<p>Dies war eine Übersicht der grundlegenden Elemente. Nun folgen Komponenten mit Kombinationen und erweiterten Formatierungen.</p>
|
|
||||||
</header>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
{# <script src="{{ pageBase }}js/{{hippie.jsFile}}.min.js" type="text/javascript"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
<script>
|
|
||||||
assetsLoaded = true;
|
|
||||||
logPerf('Assets loaded.', assetsLoaded);
|
|
||||||
// Page specific
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
// Create instance of object made by contructor function
|
|
||||||
var scrollUi = new HippieScroll($('.js_scrolltop'), $('.js_scrolldown'));
|
|
||||||
var helpUi = new HippieMeta($('.js_showmeta'), $('.js_pop'));
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
|
||||||
logPerf('JQ document ready event fired.');
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).scroll(function () {
|
|
||||||
scrollUi.check();
|
|
||||||
});
|
|
||||||
logPerf('Application ready... not.');
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,207 +0,0 @@
|
||||||
---
|
|
||||||
title: Components
|
|
||||||
tags:
|
|
||||||
- demoIndex
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
|
|
||||||
{% extends "demo/_main.njk" %}
|
|
||||||
|
|
||||||
{% block title %}Komponenten{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div class="temp_layer">
|
|
||||||
<!-- <div class="exp_overlay_btn exp_help_btn"> <span class="span_solo">?</span> </div> -->
|
|
||||||
{% include "hippie/partials/_body_nav.njk" %}
|
|
||||||
</div>
|
|
||||||
<div id="begin" class="">
|
|
||||||
<section class="sec_main_center">
|
|
||||||
<header class="header_txt">
|
|
||||||
<h1>Medienformat Abfragen</h1>
|
|
||||||
</header>
|
|
||||||
<article>
|
|
||||||
<div class="demo__query_example">Umbruch bei </div>
|
|
||||||
<div class="demo__queries">
|
|
||||||
<p class="query_phoneUp">Telefone und größer</p>
|
|
||||||
<p class="query_phoneOnly">Nur Telefone</p>
|
|
||||||
<p class="query_tabletPortaitOnly">Nur Schreibtafeln hochkant</p>
|
|
||||||
<p class="query_tabletPortraitUp">Schreibtafeln und größer</p>
|
|
||||||
<p class="query_tabletLandscapeOnly">Schreibtafeln im Querformat</p>
|
|
||||||
<p class="query_tabletLandscapeUp">Schreibtafeln quer und größer</p>
|
|
||||||
<p class="query_desktopOnly">Nur Arbeitsplatzrechner</p>
|
|
||||||
<p class="query_desktopUp">Arbeitsplatzrechner und größer</p>
|
|
||||||
<p class="query_bigDesktopUp">Richtige Monitore und größer</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="sec_main_center">
|
|
||||||
<header class="header_txt">
|
|
||||||
<h1>Übersicht aller Elemente</h1>
|
|
||||||
<p>Es werden alle grundlegenden Elemente sowie ihre gestalteten Varianten angegeben. Die Elemente sind in Gruppen eingeteilt, die auch das W3Consortium (<a href="https://www.w3.org/TR/2017/REC-html52-20171214/index.html#contents">www.w3.org/TR/2017/REC-html52-20171214/index.html#contents</a>) verwendet.</p>
|
|
||||||
<p>Zu jedem Element werden alle Attribute aufgelistet und die Umsetzung im HTML-Dokument als Emmet-Syntax dargestellt.</p>
|
|
||||||
</header>
|
|
||||||
<pre class="pre_code"><code>article>h1+p{Elemente:}+pre+h4{Varianten}</code></pre>
|
|
||||||
<article>
|
|
||||||
<h1 id="sections">Bereiche</h1>
|
|
||||||
<p>Elemente:</p>
|
|
||||||
<pre>// body<br>// article<br>// section<br>// nav<br>// aside<br>// h1-h6<br>// header<br>// footer</pre>
|
|
||||||
<h2><body></h2>
|
|
||||||
<p>Keine speziellen Attribute. Bekommt überlicherweise allgemeine Klassen zur Steuerung der Abmessungen zugewiesen.</p>
|
|
||||||
<h2><article></h2>
|
|
||||||
<p>Keine speziellen Attribute. Bekommt überlicherweise allgemeine Klassen zur Steuerung der Abmessungen zugewiesen.</p>
|
|
||||||
<h2><section></h2>
|
|
||||||
<p>Keine speziellen Attribute. Bekommt überlicherweise allgemeine Klassen zur Steuerung der Abmessungen zugewiesen.</p>
|
|
||||||
<h4>Varianten</h4>
|
|
||||||
<pre class="pre_code"><code>section.sec_main_center</code></pre>
|
|
||||||
<pre class="pre_code"><code>section.sec_main_status</code></pre>
|
|
||||||
<h2><h3></h2>
|
|
||||||
<h2><h4></h2>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1 id="grouping">Gruppierung</h1>
|
|
||||||
<p>Elemente:</p>
|
|
||||||
<pre>// p // address // hr // pre // blockquote // ol // ul // li // dl // dt // dd // figure // figcaption // main // div</pre>
|
|
||||||
<h2><p></h2>
|
|
||||||
<h4>Varianten</h4>
|
|
||||||
<pre class="pre_code"><code>p.txt_center</code></pre>
|
|
||||||
<pre class="pre_code"><code>p.txt_right</code></pre>
|
|
||||||
<pre class="pre_code"><code>p.column_2</code></pre>
|
|
||||||
<pre class="pre_code"><code>p.column_3.column_line</code></pre>
|
|
||||||
<h2><hr></h2>
|
|
||||||
<h4>Varianten</h4>
|
|
||||||
<pre class="pre_code"><code>hr.hr_hidden</code></pre>
|
|
||||||
<pre class="pre_code"><code>hr.hr_dotted</code></pre>
|
|
||||||
<pre class="pre_code"><code>hr.space_even_half</code></pre>
|
|
||||||
<pre class="pre_code"><code>hr.hr_dotted.space_even_fourth</code></pre>
|
|
||||||
<h2><blockquote></h2>
|
|
||||||
<pre class="pre_code"><code>blockquote>p+p.quote_source</code></pre>
|
|
||||||
<h2><figure></h2>
|
|
||||||
<pre class="pre_code"><code>figure>figcaption+{element}</code></pre>
|
|
||||||
<h2><div></h2>
|
|
||||||
<pre class="pre_code"><code>div.div_info>p</code></pre>
|
|
||||||
<h4>Varianten</h4>
|
|
||||||
</article>
|
|
||||||
<article>
|
|
||||||
<h1 id="tabularData">Tabellen</h1>
|
|
||||||
<p>Elemente:</p>
|
|
||||||
<pre>// table // caption // colgroup // col // tbody // thead // tfoot // tr // td // th</pre>
|
|
||||||
<h2><table></h2>
|
|
||||||
<h4>Varianten</h4>
|
|
||||||
<pre class="pre_code"><code>table.width_full.table_fix>(thead>tr>th.cell_pre[scope="col"]+th[scope="col"]*3)+tbody>tr>td.cell_pre+td*3</code></pre>
|
|
||||||
<table class="width_full table_fix js_pop">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="cell_pre" scope="col"></th>
|
|
||||||
<th scope="col">Kopfzeile</th>
|
|
||||||
<th scope="col">A</th>
|
|
||||||
<th scope="col">B</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_pre">Vorspalte</td>
|
|
||||||
<td>Eine</td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_pre">1</td>
|
|
||||||
<td></td>
|
|
||||||
<td>erweiterte</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_pre">2</td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td>Tabelle</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="pre_code"><code>table.width_full.table_stripe.table_fix.table_free>tr>td*3</code></pre>
|
|
||||||
<table class="width_full table_stripe table_fix table_free">
|
|
||||||
<tr>
|
|
||||||
<td>Tabelle</td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>ohne</td>
|
|
||||||
<td>Rahmen</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td>jedoch</td>
|
|
||||||
<td>mit</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td>Streifen</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<pre class="pre_code"><code>table.width_full.table_fix>(thead>tr>th[scope="col"]*3)+(tbody>tr>td*2+td.txt_right)+tfoot>tr>th[colspan="2"]+td.txt_right</code></pre>
|
|
||||||
<table>
|
|
||||||
<caption>Die Verteilung der Zellen ist hier von ihrem Inhalt abhängig.</caption>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Bezeichnung</th>
|
|
||||||
<th scope="col">Menge</th>
|
|
||||||
<th scope="col">Wert</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Alpha</td>
|
|
||||||
<td>1</td>
|
|
||||||
<td class="txt_right">8990</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Bravo</td>
|
|
||||||
<td>10</td>
|
|
||||||
<td class="txt_right">1</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Charlie</td>
|
|
||||||
<td>1</td>
|
|
||||||
<td class="txt_right">1</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2" class="txt_right" scope="row">Summe</th>
|
|
||||||
<td class="txt_right" title=">9000">9001</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</table>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="{{ pageBase }}vendor/jq-sticky-anything.min.js"></script>
|
|
||||||
{# <script src="{{ pageBase }}js/{{hippie.jsFile}}.min.js" type="text/javascript"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
{{ log.asset(true) }}
|
|
||||||
{{ log.log('Assets loaded.', assetsLoaded) }}
|
|
||||||
<script>
|
|
||||||
// Page specific
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
$(document).ready(function () {
|
|
||||||
// jq-sticky-anything
|
|
||||||
$('#js_demo_fix').stickThis({pushup: '#js_demo_stop'});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,113 +0,0 @@
|
||||||
---
|
|
||||||
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 %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div class="card_bkg">
|
|
||||||
<div id="dither"></div>
|
|
||||||
<svg version="1.1" id="flag" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="100%" viewbox="0 0 1920 1200" preserveaspectratio="xMinYMax slice">
|
|
||||||
{# <defs>
|
|
||||||
<filter id="turb3">
|
|
||||||
<feColorMatrix type="saturate" values="1" />
|
|
||||||
<feTurbulence type="turbulence" baseFrequency="0.01" numOctaves="2"/>
|
|
||||||
</filter>
|
|
||||||
<symbol id="triangle-5">
|
|
||||||
<rect y="0" fill="#273F8B" width="1920" height="1200"/>
|
|
||||||
</symbol>
|
|
||||||
</defs>
|
|
||||||
<g>
|
|
||||||
<use xlink:href="#triangle-5" style="filter: url(#turb3);" />
|
|
||||||
</g> #}
|
|
||||||
<rect id="triangle-5" y="0" fill="#273F8B" width="1920" height="1200"/>
|
|
||||||
<polygon id="triangle-6" fill="#8E1F68" points="0,1200 1920,458.25 1920,1200 "/>
|
|
||||||
<polygon id="triangle-7" fill="#D30A51" points="0,1200 1920,522.75 1920,1200 "/>
|
|
||||||
<polygon id="triangle-8" fill="#F2AF13" points="0,1200 1920,741.75 1920,1200 "/>
|
|
||||||
<polygon id="triangle-9" fill="#FAD803" points="0,1200 1920,787.5 1920,1200 "/>
|
|
||||||
<polygon id="triangle-4" fill="#3C579A" points="0,1200 0,0 733.5,0 "/>
|
|
||||||
<polygon id="triangle-3" fill="#B7E0F0" points="0,1200 0,0 688.5,0 "/>
|
|
||||||
<polygon id="triangle-2" fill="#6BC7D9" points="0,1200 0,0 453,0 "/>
|
|
||||||
<polygon id="triangle-1" fill="#52BED1" points="0,1200 0,0 370.5,0 "/>
|
|
||||||
</svg>
|
|
||||||
{# <img id="dither" src="art/flag_dither.png" width="1920" height="1200" alt="Background flag dithered"/> #}
|
|
||||||
</div>
|
|
||||||
<div class="card_box">
|
|
||||||
<div id="jsCardHover">
|
|
||||||
<p>Titel<br/>und Beschreibung</p>
|
|
||||||
<h1>{{ ph.name() }}</h1>
|
|
||||||
<p>
|
|
||||||
{{ ph.email('card_address') }}<br/>
|
|
||||||
{{ ph.link('decent', 'site.tld') }}
|
|
||||||
·
|
|
||||||
{{ ph.address('decent') }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
{# <script src="{{ pageBase }}js/{{hippie.jsFile}}.min.js" type="text/javascript"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
<script>
|
|
||||||
$(document).ready(function () {
|
|
||||||
// composeMail('.card_address', 'neues', 'interaktionsweise', 'de', '', '');
|
|
||||||
|
|
||||||
var colors = new Array();
|
|
||||||
var position = 0;
|
|
||||||
|
|
||||||
for (var i = 1; i <= $("#flag").children().length; i++) {
|
|
||||||
colors.push($("#triangle-" + i).attr("fill"));
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#jsCardHover').on({
|
|
||||||
mouseenter: function () {
|
|
||||||
// $('#flag').addClass('effect');
|
|
||||||
// $('#flag').css('opacity', 0);
|
|
||||||
$('#flag')
|
|
||||||
.stop()
|
|
||||||
.fadeOut(10000);
|
|
||||||
this.iid = setInterval(function () {
|
|
||||||
for (var i = 1; i <= colors.length; i++) {
|
|
||||||
position++;
|
|
||||||
if (position >= colors.length) {
|
|
||||||
position = 0;
|
|
||||||
}
|
|
||||||
$("#triangle-" + i).attr("fill", colors[position]);
|
|
||||||
}
|
|
||||||
position++;
|
|
||||||
if (position >= colors.length) {
|
|
||||||
position = 0;
|
|
||||||
}
|
|
||||||
}, 600);
|
|
||||||
},
|
|
||||||
mouseleave: function () {
|
|
||||||
// $('#flag').removeClass('effect');
|
|
||||||
// $('#flag').css('opacity', 1);
|
|
||||||
$('#flag')
|
|
||||||
.stop()
|
|
||||||
.fadeIn(1000);
|
|
||||||
this.iid && clearInterval(this.iid);
|
|
||||||
},
|
|
||||||
click: function () {
|
|
||||||
$("#dither").toggle();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
---
|
|
||||||
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 %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div class="portal">
|
|
||||||
{{ gate.list(
|
|
||||||
'Tor mit Symbol und Liste',
|
|
||||||
'../demo', {
|
|
||||||
src: '/art/demo/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') }}
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
||||||
---
|
|
||||||
title: Drag
|
|
||||||
tags:
|
|
||||||
- demoExample
|
|
||||||
---
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
{% set bodyClass = "body_drag" %}
|
|
||||||
|
|
||||||
{% extends "demo/_app.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
<link href="{{ pageBase }}css/ui.css" media="all" rel="stylesheet"/>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div id="space"></div>
|
|
||||||
<button id="addFrame">Add</button>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{%- block script %}
|
|
||||||
<script>
|
|
||||||
// Define the NewDiv class
|
|
||||||
class NewDiv {
|
|
||||||
constructor(x, y, width, height, backgroundColor) {
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
this.backgroundColor = backgroundColor;
|
|
||||||
this.element = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the div element
|
|
||||||
createDiv() {
|
|
||||||
this.element = document.createElement('div');
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append the div to the space
|
|
||||||
appendToFrame(space) {
|
|
||||||
this.element.id = `newDiv${space.children.length}`;
|
|
||||||
space.appendChild(this.element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to generate a random color
|
|
||||||
function getRandomColor() {
|
|
||||||
const letters = '0123456789ABCDEF';
|
|
||||||
let color = '#';
|
|
||||||
for (let i = 0; i < 6; i++) {
|
|
||||||
color += letters[Math.floor(Math.random() * 16)];
|
|
||||||
}
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the space element
|
|
||||||
const space = document.getElementById('space');
|
|
||||||
const addFrameButton = document.getElementById('addFrame');
|
|
||||||
|
|
||||||
// Add event listener to the add space button
|
|
||||||
addFrameButton.addEventListener('click', () => {
|
|
||||||
const newDiv = new NewDiv(100, 100, 100, 100, getRandomColor());
|
|
||||||
newDiv.createDiv();
|
|
||||||
newDiv.appendToFrame(space);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a new NewDiv instance
|
|
||||||
const newDiv = new NewDiv(100, 100, 800, 600, '#000');
|
|
||||||
newDiv.createDiv();
|
|
||||||
newDiv.appendToFrame(space);
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
||||||
---
|
|
||||||
title: New
|
|
||||||
tags:
|
|
||||||
- demoExample
|
|
||||||
---
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
{% set bodyClass = "body_new" %}
|
|
||||||
|
|
||||||
{% extends "demo/_app.njk" %}
|
|
||||||
{% import "hippie/macros/_state.njk" as state %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
<link href="{{ pageBase }}css/ui.css" media="all" rel="stylesheet"/>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div id="top">
|
|
||||||
<h1 class="brand">
|
|
||||||
<a href="#">{{ hippie.brand | upper }}</a>
|
|
||||||
</h1>
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
{% for link in new %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ link.href }}">{{ link.text }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<div class="state">
|
|
||||||
<p>{{ state.coord("log")}}
|
|
||||||
/
|
|
||||||
{{ state.date("date")}}
|
|
||||||
/
|
|
||||||
{{ state.time("time")}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="container">
|
|
||||||
<div class="area menu">
|
|
||||||
<nav class="nav_horizontal">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Func 1</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Func 2</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<div class="area grid">
|
|
||||||
<div class="item">1</div>
|
|
||||||
<div class="item">2</div>
|
|
||||||
<div class="item">3</div>
|
|
||||||
<div class="item">4</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{%- block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
|
|
||||||
<script src="{{ pageBase }}js/app.js"></script>
|
|
||||||
<script>
|
|
||||||
let clock = new Clock('time');
|
|
||||||
|
|
||||||
document.addEventListener('mousemove', (event) => {
|
|
||||||
document.getElementById('log')
|
|
||||||
.textContent = "X: " + event.pageX + ", Y: " + event.pageY;
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
---
|
|
||||||
title: Settings
|
|
||||||
tags:
|
|
||||||
- demoExample
|
|
||||||
- ui
|
|
||||||
---
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
{% set bodyClass = "body_ui" %}
|
|
||||||
|
|
||||||
{% extends "demo/_app.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
<link href="{{ pageBase }}css/ui.css" media="all" rel="stylesheet"/>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div id="frame" class="frame-flex">
|
|
||||||
<div class="title-bar">
|
|
||||||
<div>title-bar<button class="io_button">menu</button class="io_button"><button class="io_button">search</button class="io_button"></div>
|
|
||||||
<div><button class="io_button">minimize</button class="io_button"><button class="io_button">maximize</button class="io_button"><button class="io_button">close</button class="io_button"></div>
|
|
||||||
</div>
|
|
||||||
<main>
|
|
||||||
<aside class="left">aside
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
<li>setting</li>
|
|
||||||
<li>setting</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
<section class="bside">section</section>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{%- block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="{{ pageBase }}js/app.js"></script>
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
||||||
---
|
|
||||||
permalink: "/"
|
|
||||||
title: Index
|
|
||||||
tags:
|
|
||||||
- demoIndex
|
|
||||||
---
|
|
||||||
{% set pageBase = hippie.pageBase %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
|
|
||||||
{% extends "demo/_default.njk" %}
|
|
||||||
|
|
||||||
{% block title %}Index{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div class="wrap">
|
|
||||||
<div class="hello">
|
|
||||||
<h2>This is
|
|
||||||
{{ hippie.brand | upper }}</h2>
|
|
||||||
<p>You can start using it by replacing this file with your own index page.</p>
|
|
||||||
<p>To do this you need to create a file
|
|
||||||
<code>/index.njk</code>
|
|
||||||
inside the
|
|
||||||
<i>source/screens</i>
|
|
||||||
folder. You can also create a
|
|
||||||
<code>data.json</code>
|
|
||||||
file inside the
|
|
||||||
<i>source/templates</i>
|
|
||||||
folder as a data source for your nunjucks files.</p>
|
|
||||||
<p>For a very basic start you can make a copy of the demo page
|
|
||||||
<code>blank.njk</code>. You can find it at
|
|
||||||
<i>/source/screens/demo</i>.</p>
|
|
||||||
<p>The
|
|
||||||
<i>source/demo</i>
|
|
||||||
folder contains an overview of all HTML elements and also examples for CSS style combinations and even whole page layouts.<br/>Follow the white rabbit.</p>
|
|
||||||
<div class="pos_rel">
|
|
||||||
<pre class="txt_tiny txt_white pos_abs pin_down pin_right"> ()()<br> (..)<br>c(")(")</pre>
|
|
||||||
<h3>Overview</h3>
|
|
||||||
</div>
|
|
||||||
<nav>
|
|
||||||
<ul class="list_link">
|
|
||||||
{% for link in collections.demoIndex %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ link.page.url }}">{{ link.data.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<h3>Page</h3>
|
|
||||||
<ul class="list_link">
|
|
||||||
{% for link in collections.demoPage | sort(false, false, 'data.title') %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ link.page.url }}">{{ link.data.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
<h3>Example</h3>
|
|
||||||
<ul class="list_link">
|
|
||||||
{% for link in collections.demoExample %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ link.page.url }}">{{ link.data.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
{# <script src="{{ pageBase }}js/{{ hippie.jsFile }}.min.js"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
<script>
|
|
||||||
assetsLoaded = true;
|
|
||||||
logPerf('BODY :: Assets loaded, running page specific script...');
|
|
||||||
// Page specific
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
$(document).ready(function () {
|
|
||||||
logPerf('EVENT :: jQuery \'ready\' event fired.');
|
|
||||||
setup();
|
|
||||||
});
|
|
||||||
logPerf('Application ready... not.');
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
---
|
|
||||||
title: Introduction
|
|
||||||
tags:
|
|
||||||
- demoIndex
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = "intro" %}
|
|
||||||
|
|
||||||
{% extends "demo/_main.njk" %}
|
|
||||||
|
|
||||||
{% block title %}Einführung{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
{% include "hippie/partials/_body_nav.njk" %}
|
|
||||||
|
|
||||||
<section class="sec_main_center">
|
|
||||||
<header>
|
|
||||||
<hgroup>
|
|
||||||
<h1>Introduction to HIPPIE</h1>
|
|
||||||
<p>Hippie interweaves preeminent personal interface elements.</p>
|
|
||||||
</hgroup>
|
|
||||||
</header>
|
|
||||||
<article>
|
|
||||||
<p>…</p>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
{# <script src="{{ pageBase }}js/{{hippie.jsFile}}.min.js" type="text/javascript"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
<script>
|
|
||||||
assetsLoaded = true;
|
|
||||||
logPerf('Assets loaded.', assetsLoaded);
|
|
||||||
// Page specific
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
// Create instance of object made by contructor function
|
|
||||||
var scrollUi = new HippieScroll($('.js_scrolltop'), $('.js_scrolldown'));
|
|
||||||
var helpUi = new HippieMeta($('.js_showmeta'), $('.js_pop'));
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
|
||||||
logPerf('JQ document ready event fired.');
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).scroll(function () {
|
|
||||||
scrollUi.check();
|
|
||||||
});
|
|
||||||
logPerf('Application ready... not.');
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,340 +0,0 @@
|
||||||
---
|
|
||||||
title: Layouts
|
|
||||||
tags:
|
|
||||||
- demoIndex
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
|
|
||||||
{% extends "demo/_main.njk" %}
|
|
||||||
|
|
||||||
{% block title %}Gestaltungen{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div class="temp_layer">
|
|
||||||
<!-- <div class="exp_overlay_btn exp_help_btn"> <span class="span_solo">?</span> </div> -->
|
|
||||||
{% include "hippie/partials/_body_nav.njk" %}
|
|
||||||
</div>
|
|
||||||
<div id="begin" class="">
|
|
||||||
<section class="sec_main_center">
|
|
||||||
<header class="header_txt">
|
|
||||||
<h1>Sammlung formatierter Elemente</h1>
|
|
||||||
<p>Die Elemente werden fortlaufend komplexer</p>
|
|
||||||
</header>
|
|
||||||
<article>
|
|
||||||
<h2><h3></h2>
|
|
||||||
<h4>Beispiele</h4>
|
|
||||||
<pre class="pre_code"><code>h3.txt_color_dark+p</code></pre>
|
|
||||||
<h3 class="txt_color_dark">Dunkle Überschrift</h3>
|
|
||||||
<p>Mit normalem Textabsatz</p>
|
|
||||||
<h2><h4></h2>
|
|
||||||
<h4>Beispiele</h4>
|
|
||||||
<pre class="pre_code"><code>a>h4</code></pre>
|
|
||||||
<a href="">
|
|
||||||
<h4>Überschrift als Block-Verweis</h4>
|
|
||||||
</a>
|
|
||||||
<h2><section></h2>
|
|
||||||
<pre class="pre_code"><code>section>div.float_space_left>img^p+p</code></pre>
|
|
||||||
<section class="overflow">
|
|
||||||
<div class="float_space_left demo__avatar"><img src="{{ pageBase }}art/demo/flag_websafe_128x80.gif" width="256" height="160" alt="Fahne von interaktionsweise"></div>
|
|
||||||
<p>Vorname Name<br>Straße 1, 01234 Stadt</p>
|
|
||||||
<p>+49 (0)123 1337 0000<br>
|
|
||||||
<a class="lineLink" href="mailto:name@domain.tld">name@domain.tld</a>
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
<pre class="pre_code"><code>div.space_left_fourth</code></pre>
|
|
||||||
<div class="space_left_fourth">
|
|
||||||
<hr/>
|
|
||||||
<p>Eingerückter Inhalt</p>
|
|
||||||
<hr/>
|
|
||||||
</div>
|
|
||||||
<pre class="pre_code"><code>nav>ul>(li>a.a_button{punkt $})*4nav>ul>(li>a.a_button_border{stufe $})*4</code></pre>
|
|
||||||
<div class="overflow">
|
|
||||||
<nav class="float_space_left">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button" data-hippie-button-value="1">Erster Punkt</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button" data-hippie-button-value="2">Zweiter Punkt</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button" data-hippie-button-value="3">Dritter Punkt</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button" data-hippie-button-value="4">Vierter Punkt</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_border">Stufe 1</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_border">Stufe 2</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_border">Stufe 3</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_border">Stufe 4</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<pre class="pre_code"><code>nav.nav_horizontal>ul>(li>a.a_button{abschnitt $})*4nav.nav_center_old>ul>(li>a.a_button{typ $})*4</code></pre>
|
|
||||||
<nav class="nav_horizontal">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Abschnitt 1</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Abschnitt 2</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Abschnitt 3</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Abschnitt 4</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<div class="overflow">
|
|
||||||
<nav class="nav_center_old">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Typ 1</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Typ 2</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Typ 3</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Typ 4</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<pre class="pre_code"><code>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</code></pre>
|
|
||||||
<header class="header_page demo__header header_fancy">
|
|
||||||
<h1>Aufmacher</h1>
|
|
||||||
<p>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.</p>
|
|
||||||
<nav class="nav_separate_right">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Mensch</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Pflanze</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav class="nav_right">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Blau</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Gelb</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
<pre class="pre_code"><code>header.header_page>nav.nav_right>ul>(li>a.a_button{nav $})*4</code></pre>
|
|
||||||
<div class="box_space h_basic">
|
|
||||||
<header id="js_demo_fix" class="header_page demo__header header_fix">
|
|
||||||
<nav class="nav_right">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Eins</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button">Zwei</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
<div class="pos_abs pin_bottom width_full">
|
|
||||||
<pre class="pre_code"><code>footer.pos_abs.pin_bottom>nav.nav_column>ul>(li>a.a_button_text)*4</code></pre>
|
|
||||||
<footer id="js_demo_stop" class="demo_footer">
|
|
||||||
<nav class="nav_column nav_separate">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_text">Alpha</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_text">Bravo</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_text">Charlie</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="" class="a_button_text">Delta</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<p class="txt_center demo__credits">
|
|
||||||
<i class="i_bright">👨💻</i>
|
|
||||||
mit
|
|
||||||
<i class="i_bright">❤</i>
|
|
||||||
von
|
|
||||||
<a href="https://interaktionsweise.de">Interaktionsweise</a>
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex">
|
|
||||||
<div class="flex_child"></div>
|
|
||||||
<div class="flex_child"></div>
|
|
||||||
<div class="flex_child"></div>
|
|
||||||
<div class="flex_child"></div>
|
|
||||||
<div class="flex_child"></div>
|
|
||||||
</div>
|
|
||||||
<div class="flex_column_wrap">
|
|
||||||
<div class="flex_column"><input value="Undefiniert"/></div>
|
|
||||||
<div class="flex_column"><input type="text" size="8" value="Text"/></div>
|
|
||||||
<div class="flex_column"><input type="text" size="8" value="Deaktiviert" disabled="disabled"/></div>
|
|
||||||
<div class="flex_column"><input type="button" value="Auswählen"></div>
|
|
||||||
<div class="flex_column"><input type="submit" value="Senden" disabled="disabled"/></div>
|
|
||||||
</div>
|
|
||||||
<form method="get">
|
|
||||||
<p class="label">
|
|
||||||
Show me a
|
|
||||||
<select name="F">
|
|
||||||
<option value="0">
|
|
||||||
Plain list</option>
|
|
||||||
<option value="1" selected="selected">
|
|
||||||
Fancy list</option>
|
|
||||||
<option value="2">
|
|
||||||
Table list</option>
|
|
||||||
</select>
|
|
||||||
Sorted by
|
|
||||||
<select name="C">
|
|
||||||
<option value="N" selected="selected">
|
|
||||||
Name</option>
|
|
||||||
<option value="M">
|
|
||||||
Date Modified</option>
|
|
||||||
<option value="S">
|
|
||||||
Size</option>
|
|
||||||
<option value="D">
|
|
||||||
Description</option>
|
|
||||||
</select>
|
|
||||||
<select name="O">
|
|
||||||
<option value="A" selected="selected">
|
|
||||||
Ascending</option>
|
|
||||||
<option value="D">
|
|
||||||
Descending</option>
|
|
||||||
</select>
|
|
||||||
<select name="V">
|
|
||||||
<option value="0" selected="selected">
|
|
||||||
in Normal order</option>
|
|
||||||
<option value="1">
|
|
||||||
in Version order</option>
|
|
||||||
</select>
|
|
||||||
Matching
|
|
||||||
<input type="text" name="P" value="*"/>
|
|
||||||
<input type="submit" name="X" value="Go"/>
|
|
||||||
</p>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<h2>Gruppierung</h2>
|
|
||||||
<pre class="pre_code"><code>ul.list_link>(li>a>img)*2+li>a</code></pre>
|
|
||||||
<ul class="list_link">
|
|
||||||
<li>
|
|
||||||
<a href=""><img src="{{ pageBase }}art/letter.gif" alt="">name@domain.tld</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="">Work</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="">Projects</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>Tabellen</h2>
|
|
||||||
<pre class="pre_code"><code>table.table_link>thead>tr>th{&nbsp;}+th{ab / zy}+th{neu / alt}^^(tbody>tr>td.cell_icon[rowspan="2"]>img[width=16 height=16]^+td.cell_link>a[target=_blank]{name}+a[target=_blank]{url}^+td.cell_date[rowspan="2"]{yyy-mm-dd}^tr>td.cell_text>div.shorten{beschreibung})*2</code></pre>
|
|
||||||
<table class="table_link js_pop">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th> </th>
|
|
||||||
<th>Ab / Zy</th>
|
|
||||||
<th>Neu / Alt</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_icon" rowspan="2"><img src="/art/bullet.gif" alt="" width="16" height="16"></td>
|
|
||||||
<td class="cell_link">
|
|
||||||
<a href="" target="_blank">Name</a>
|
|
||||||
<a href="" target="_blank">URL</a>
|
|
||||||
</td>
|
|
||||||
<td class="cell_date" rowspan="2">YYYY-MM-DD</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_text">
|
|
||||||
<div class="shorten">Beschreibung</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_icon" rowspan="2"><img src="/art/bullet.gif" alt="" width="16" height="16"></td>
|
|
||||||
<td class="cell_link">
|
|
||||||
<a href="" target="_blank">Name</a>
|
|
||||||
<a href="" target="_blank">URL</a>
|
|
||||||
</td>
|
|
||||||
<td class="cell_date" rowspan="2">YYYY-MM-DD</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="cell_text">
|
|
||||||
<div class="shorten">Beschreibung</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<h2>Eingebettet</h2>
|
|
||||||
<div class="demo__flag">
|
|
||||||
<svg version="1.1" id="vector" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="100%" viewbox="0 0 1920 1200" preserveaspectratio="xMinYMax slice">
|
|
||||||
<desc>Background flag</desc>
|
|
||||||
<rect id="triangle-5" y="0" fill="#273F8B" width="1920" height="1200"></rect>
|
|
||||||
<polygon id="triangle-6" fill="#8E1F68" points="0,1200 1920,458.25 1920,1200 "></polygon>
|
|
||||||
<polygon id="triangle-7" fill="#D30A51" points="0,1200 1920,522.75 1920,1200 "></polygon>
|
|
||||||
<polygon id="triangle-8" fill="#F2AF13" points="0,1200 1920,741.75 1920,1200 "></polygon>
|
|
||||||
<polygon id="triangle-9" fill="#FAD803" points="0,1200 1920,787.5 1920,1200 "></polygon>
|
|
||||||
<polygon id="triangle-4" fill="#3C579A" points="0,1200 0,0 733.5,0 "></polygon>
|
|
||||||
<polygon id="triangle-3" fill="#B7E0F0" points="0,1200 0,0 688.5,0 "></polygon>
|
|
||||||
<polygon id="triangle-2" fill="#6BC7D9" points="0,1200 0,0 453,0 "></polygon>
|
|
||||||
<polygon id="triangle-1" fill="#52BED1" points="0,1200 0,0 370.5,0 "></polygon>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="{{ pageBase }}vendor/jq-sticky-anything.min.js" type="text/javascript"></script>
|
|
||||||
{# <script src="{{ pageBase }}js/{{hippie.jsFile}}.min.js" type="text/javascript"></script> #}
|
|
||||||
<!-- build:js js/main.concat.min.js -->
|
|
||||||
<script src="{{ pageBase }}js/variables.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/functions.js"></script>
|
|
||||||
<script src="{{ pageBase }}js/global.js"></script>
|
|
||||||
{{ log.asset(true) }}
|
|
||||||
{{ log.log('Assets loaded.', assetsLoaded) }}
|
|
||||||
<script>
|
|
||||||
// Page specific
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
$(document).ready(function () {
|
|
||||||
// jq-sticky-anything
|
|
||||||
$('#js_demo_fix').stickThis({pushup: '#js_demo_stop'});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
---
|
|
||||||
title: Blank
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
|
|
||||||
{% extends "demo/_default.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 304
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Umleitung</h3>
|
|
||||||
<p>Unverändert <dfn>Not Modified</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#3xx_%E2%80%93_Umleitung">
|
|
||||||
<p>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 <a href="https://de.wikipedia.org/wiki/Browser-Cache#Versionsvergleich" title="Browser-Cache">Browser-Cache-Versionsvergleich</a>.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#3xx_%E2%80%93_Umleitung">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 400
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Client-Fehler</h3>
|
|
||||||
<p>Fehlerhafte Anfrage! <dfn>Bad Request</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">
|
|
||||||
<p>Die Anfrage-Nachricht war fehlerhaft aufgebaut.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 401
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Client-Fehler</h3>
|
|
||||||
<p>Nicht autorisiert! <dfn>Unauthorized</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">
|
|
||||||
<p>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.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 403
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Client-Fehler</h3>
|
|
||||||
<p>Nicht erlaubt! <dfn>Forbidden</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">
|
|
||||||
<p>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.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 404
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Client-Fehler</h3>
|
|
||||||
<p>Hier ist nichts. <dfn>Not Found</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">
|
|
||||||
<p>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.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 408
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Client-Fehler</h3>
|
|
||||||
<p>Zeitüberschreitung der Anforderung. <dfn>Request Timeout</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">
|
|
||||||
<p>Innerhalb der vom Server erlaubten Zeitspanne wurde keine vollständige Anfrage des Clients empfangen.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#4xx_.E2.80.93_Client-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 500
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Server-Fehler</h3>
|
|
||||||
<p>Allgemeiner Server Fehler!!! <dfn>Internal Server Error</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#5xx_%E2%80%93_Server-Fehler">
|
|
||||||
<p>Dies ist ein „Sammel-Statuscode“ für unerwartete Serverfehler.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#5xx_%E2%80%93_Server-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
title: 503
|
|
||||||
---
|
|
||||||
{% set pageBase = "../../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set bodyClass = "body_status" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<main class="main_site">
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
<h3>Server-Fehler</h3>
|
|
||||||
<p>Dienst nicht verfügbar. <dfn>Service Unavailable</dfn></p>
|
|
||||||
<blockquote cite="https://de.wikipedia.org/wiki/HTTP-Statuscode#5xx_%E2%80%93_Server-Fehler">
|
|
||||||
<p>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.</p>
|
|
||||||
<p class="quote_source"><a href="https://de.wikipedia.org/wiki/HTTP-Statuscode#5xx_%E2%80%93_Server-Fehler">Wikipedia</a></p>
|
|
||||||
</blockquote>
|
|
||||||
</main>
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
---
|
|
||||||
title: Maintenance
|
|
||||||
---
|
|
||||||
{% set pageBase = "../" %}
|
|
||||||
{% set pageId = page.fileSlug %}
|
|
||||||
{% set pageClass = "h_full_view" %}
|
|
||||||
|
|
||||||
{% extends "demo/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ super() }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<!-- {{ page.fileSlug }}.page -->
|
|
||||||
<div id="root" class="overflow">
|
|
||||||
<h1 class="txt_hero txt_center txt_gradient">HIPPIE</h1>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
// Start a new project by creating YOUR-PROJECT.scss and _YOUR-CONFIG.scss
|
// Start a new project by creating YOUR-PROJECT.scss and _YOUR-CONFIG.scss
|
||||||
// Then import your config and hippie
|
// Then import your config and hippie
|
||||||
// NOTE // No css rules allowed in here
|
// NOTE: No css rules allowed in here
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
@import "demo_config";
|
@use "demo_config";
|
||||||
@import "hippie-style/hippie";
|
@use "hippie-style/hippie";
|
||||||
|
|
||||||
// Additional Modules and variables
|
// Additional Modules and variables
|
||||||
// in dependency to other basic styles
|
// in dependency to other basic styles
|
||||||
// could be defined here
|
// could be defined here
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@import "modules/card/card_module";
|
@use "modules/card/card_module";
|
||||||
@import "modules/portal/portal_module";
|
@use "modules/portal/portal_module";
|
||||||
@import "modules/demo/demo_module";
|
@use "modules/songbook/songbook_module";
|
||||||
// @import "modules/YOUR-MODULE/YOUR-FILES";
|
@use "modules/demo/demo_module";
|
||||||
|
@use "modules/start";
|
||||||
|
@use "modules/clock";
|
||||||
|
@use "modules/game";
|
||||||
|
@use "modules/login";
|
||||||
|
// @use "modules/YOUR-MODULE/YOUR-FILES";
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
// Then import your config and hippie
|
// Then import your config and hippie
|
||||||
// NOTE // No css rules allowed in here
|
// NOTE // No css rules allowed in here
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
@import "demo_config";
|
@use "demo_config";
|
||||||
@import "hippie-style/basic";
|
@use "hippie-style/basic";
|
||||||
|
|
||||||
|
|
||||||
// Additional Modules and variables
|
// Additional Modules and variables
|
||||||
// in dependency to other basic styles
|
// in dependency to other basic styles
|
||||||
// could be defined here
|
// could be defined here
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// @import "modules/YOUR-MODULE/YOUR-FILES";
|
// @use "modules/YOUR-MODULE/YOUR-FILES";
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 2e100f72a90d9b29fdd1a053059631b8644d91dd
|
Subproject commit 08b2054d437e3ff45ed790f3da0742f8fa8fa30f
|
||||||
19
source/style/modules/_clock.scss
Normal file
19
source/style/modules/_clock.scss
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
@use "sass:map";
|
||||||
|
|
||||||
|
@use "../hippie-style/hippie";
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
30
source/style/modules/_game.scss
Normal file
30
source/style/modules/_game.scss
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
@use 'sass:list';
|
||||||
|
@use "sass:map";
|
||||||
|
|
||||||
|
@use "../hippie-style/hippie";
|
||||||
|
|
||||||
|
.body_menu {
|
||||||
|
@extend .h_full_view;
|
||||||
|
background-color: hippie.basic_color(delta);
|
||||||
|
|
||||||
|
footer {
|
||||||
|
@extend .pos_abs;
|
||||||
|
@extend .pin_bottom;
|
||||||
|
@extend .width_full;
|
||||||
|
|
||||||
|
.brand {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row nowrap;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: hippie.$space_half hippie.$space_basic;
|
||||||
|
|
||||||
|
margin: hippie.$space_basic hippie.$space_double;
|
||||||
|
|
||||||
|
& > svg {
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
source/style/modules/_login.scss
Normal file
29
source/style/modules/_login.scss
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
@use "sass:color";
|
||||||
|
|
||||||
|
@use "../hippie-style/hippie";
|
||||||
|
|
||||||
|
form[name="login"] {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
padding: hippie.$space_double;
|
||||||
|
background-color: color.adjust(hippie.basic_color(echo), $alpha: -0.4);
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
color: hippie.$color_brightest;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > input {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
margin-inline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:first-of-type {
|
||||||
|
margin-bottom: hippie.$space_basic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
111
source/style/modules/_start.scss
Normal file
111
source/style/modules/_start.scss
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
@use "sass:color";
|
||||||
|
|
||||||
|
@use "../hippie-style/hippie";
|
||||||
|
|
||||||
|
$module_top_height: 32px;
|
||||||
|
$body_top_space: $module_top_height + hippie.$space_basic;
|
||||||
|
|
||||||
|
.body_start {
|
||||||
|
@extend .h_full_view;
|
||||||
|
|
||||||
|
padding: $body_top_space hippie.$space_basic hippie.$space_basic;
|
||||||
|
|
||||||
|
main {
|
||||||
|
@extend .sec_main_center;
|
||||||
|
@extend %flex_column;
|
||||||
|
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
input[type="text"] {
|
||||||
|
flex: 1;
|
||||||
|
padding: hippie.$padding_basic;
|
||||||
|
line-height: hippie.$line_text_basic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.area {
|
||||||
|
display: grid;
|
||||||
|
grid-gap: hippie.$space_basic;
|
||||||
|
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;
|
||||||
|
transition: hippie.$transition_best;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
@use "../../hippie-style/hippie";
|
||||||
|
|
||||||
// Card module styles
|
// Card module styles
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -26,11 +28,11 @@
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
|
||||||
* {
|
* {
|
||||||
font-family: $family_text_card;
|
font-family: hippie.$family_text_card;
|
||||||
// text-align: center;
|
// text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
& > div {
|
& > main {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 64px 64px 24px 64px;
|
padding: 64px 64px 24px 64px;
|
||||||
border: 1px solid #FFF;
|
border: 1px solid #FFF;
|
||||||
|
|
@ -58,10 +60,14 @@
|
||||||
// padding-left: 1em;
|
// padding-left: 1em;
|
||||||
// text-indent: -1em;
|
// text-indent: -1em;
|
||||||
|
|
||||||
&::before { content: "*\0000a0" }
|
&::before {
|
||||||
|
content: "*\0000a0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.decent { color: #666 }
|
.decent {
|
||||||
|
color: #666
|
||||||
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #000;
|
color: #000;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
@use "sass:color";
|
||||||
|
|
||||||
|
@use "../../hippie-style/hippie";
|
||||||
|
|
||||||
.demo__intro {
|
.demo__intro {
|
||||||
@extend .sec_main_center;
|
@extend .sec_main_center;
|
||||||
@extend .sec_main_status;
|
@extend .sec_main_status;
|
||||||
|
|
@ -7,7 +11,7 @@
|
||||||
@extend .sec_main_status;
|
@extend .sec_main_status;
|
||||||
position: relative;
|
position: relative;
|
||||||
min-height: 50vh;
|
min-height: 50vh;
|
||||||
border-color: $foxtrot_color;
|
border-color: hippie.basic_color(foxtrot);
|
||||||
|
|
||||||
h1:first-of-type {
|
h1:first-of-type {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
|
@ -22,7 +26,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__header {
|
.demo__header {
|
||||||
padding: $space_double;
|
padding: hippie.$space_double;
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
|
|
||||||
|
|
@ -33,19 +37,19 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.header_fancy {
|
.header_fancy {
|
||||||
background-color: transparentize($bravo_color, 0.4);
|
background-color: color.adjust(hippie.basic_color(bravo), $alpha: -0.4);
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
|
|
||||||
a {
|
a {
|
||||||
background-color: transparentize($alpha_color, 0.4);
|
background-color: color.adjust(hippie.basic_color(alpha), $alpha: -0.4);
|
||||||
color: $alpha_color;
|
color: hippie.basic_color(alpha);
|
||||||
|
|
||||||
&:active,
|
&:active,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgba($color_brightest, 0.2);
|
background-color: rgba(hippie.$color_brightest, 0.2);
|
||||||
color: $color_brightest;
|
color: hippie.$color_brightest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +60,7 @@
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: transparentize($charlie_color, 0.4);
|
background-color: color.adjust(hippie.basic_color(charlie), $alpha: -0.4);
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
|
|
||||||
|
|
@ -65,8 +69,8 @@
|
||||||
&:active,
|
&:active,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgba($color_brightest, 0.2);
|
background-color: rgba(hippie.$color_brightest, 0.2);
|
||||||
color: $color_brightest;
|
color: hippie.$color_brightest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,20 +79,20 @@
|
||||||
.demo__footer {
|
.demo__footer {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
// height: 128px;
|
// height: 128px;
|
||||||
padding: $space_double 0;
|
padding: hippie.$space_double 0;
|
||||||
background-color: $color_dark;
|
background-color: hippie.$color_dark;
|
||||||
color: $color_bright;
|
color: hippie.$color_bright;
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: $color_brightest;
|
color: hippie.$color_brightest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__sprite_down {
|
.demo__sprite_down {
|
||||||
@include sprite($down);
|
@include hippie.sprite(hippie.$down);
|
||||||
// width: 32px;
|
// width: 32px;
|
||||||
// height: 32px;
|
// height: 32px;
|
||||||
// background-image: url(../art/sprites.png);
|
// background-image: url(../art/sprites.png);
|
||||||
|
|
@ -96,7 +100,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__sprite_up {
|
.demo__sprite_up {
|
||||||
@include sprite($up);
|
@include hippie.sprite(hippie.$up);
|
||||||
// width: 32px;
|
// width: 32px;
|
||||||
// height: 64px;
|
// height: 64px;
|
||||||
// background-image: url(../art/sprites.png);
|
// background-image: url(../art/sprites.png);
|
||||||
|
|
@ -104,7 +108,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__sprite_meta {
|
.demo__sprite_meta {
|
||||||
@include sprite($meta);
|
@include hippie.sprite(hippie.$meta);
|
||||||
// width: 32px;
|
// width: 32px;
|
||||||
// height: 32px;
|
// height: 32px;
|
||||||
// background-image: url(../art/sprites.png);
|
// background-image: url(../art/sprites.png);
|
||||||
|
|
@ -120,7 +124,7 @@
|
||||||
min-width: 128px;
|
min-width: 128px;
|
||||||
min-height: 128px;
|
min-height: 128px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background-color: $delta_color;
|
background-color: hippie.basic_color(delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -129,89 +133,123 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__credits {
|
.demo__credits {
|
||||||
margin: $space_small 0 $space_basic 0;
|
margin: hippie.$space_small 0 hippie.$space_basic 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__button_32 {
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.demo__queries > p {
|
.demo__queries > p {
|
||||||
padding: $padding_basic;
|
padding: hippie.$padding_basic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_phoneUp {
|
.query_phoneUp {
|
||||||
@include forPhoneUp {background-color: rgba($color_text_basic, 0.2)};
|
@include hippie.forPhoneUp {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2)
|
||||||
|
}
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_phoneOnly {
|
.query_phoneOnly {
|
||||||
@include forPhoneOnly { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forPhoneOnly {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_tabletPortaitOnly {
|
.query_tabletPortraitOnly {
|
||||||
@include forTabletPortraitOnly { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forTabletPortraitOnly {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_tabletPortraitUp {
|
.query_tabletPortraitUp {
|
||||||
@include forTabletPortraitUp { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forTabletPortraitUp {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_tabletLandscapeOnly {
|
.query_tabletLandscapeOnly {
|
||||||
@include forTabletLandscapeOnly { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forTabletLandscapeOnly {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_tabletLandscapeUp {
|
.query_tabletLandscapeUp {
|
||||||
@include forTabletLandscapeUp { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forTabletLandscapeUp {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_desktopOnly {
|
.query_desktopOnly {
|
||||||
@include forDesktopOnly { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forDesktopOnly {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_desktopUp {
|
.query_desktopUp {
|
||||||
@include forDesktopUp { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forDesktopUp {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.query_bigDesktopUp {
|
.query_bigDesktopUp {
|
||||||
@include forBigDesktopUp { background-color: rgba($color_text_basic, 0.2); }
|
@include hippie.forBigDesktopUp {
|
||||||
|
background-color: rgba(hippie.$color_text_basic, 0.2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__query_example {
|
.demo__query_example {
|
||||||
@include goingLarge($screen_tiny) {background-color: $alpha_color; }
|
@include hippie.goingLarge(hippie.$screen_tiny) {
|
||||||
@include goingLarge($screen_small) {background-color: $bravo_color; }
|
background-color: hippie.basic_color(alpha);
|
||||||
@include goingLarge($screen_medium) {background-color: $charlie_color; }
|
}
|
||||||
@include goingLarge($screen_large) {background-color: $delta_color; }
|
@include hippie.goingLarge(hippie.$screen_small) {
|
||||||
@include goingLarge($screen_huge) {background-color: $echo_color; }
|
background-color: hippie.basic_color(bravo);
|
||||||
@include goingLarge($screen_gigantic) {background-color: $foxtrot_color; }
|
}
|
||||||
margin-bottom: $space_small;
|
@include hippie.goingLarge(hippie.$screen_medium) {
|
||||||
padding: $space_small;
|
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;
|
text-align: center;
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
@extend code;
|
@extend code;
|
||||||
@include goingLarge($screen_tiny) {
|
@include hippie.goingLarge(hippie.$screen_tiny) {
|
||||||
& { content: '768px'; }
|
& {
|
||||||
|
content: '768px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@include goingLarge($screen_small) {
|
@include hippie.goingLarge(hippie.$screen_small) {
|
||||||
& { content: '1024px'; }
|
& {
|
||||||
|
content: '1024px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@include goingLarge($screen_medium) {
|
@include hippie.goingLarge(hippie.$screen_medium) {
|
||||||
& { content: '1280px'; }
|
& {
|
||||||
|
content: '1280px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@include goingLarge($screen_huge) {
|
@include hippie.goingLarge(hippie.$screen_huge) {
|
||||||
& { content: '1680px'; }
|
& {
|
||||||
|
content: '1680px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@include goingLarge($screen_gigantic) {
|
@include hippie.goingLarge(hippie.$screen_gigantic) {
|
||||||
& { content: '1920px'; }
|
& {
|
||||||
|
content: '1920px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
content: '< 768px';
|
content: '< 768px';
|
||||||
padding: $padding_basic;
|
padding: hippie.$padding_basic;
|
||||||
border-radius: $radius_basic;
|
border-radius: hippie.$radius_basic;
|
||||||
color: $color_brightest;
|
color: hippie.$color_brightest;
|
||||||
background-color: rgba($color_front_basic, 0.2);
|
background-color: rgba(hippie.$color_front_basic, 0.2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,28 +263,37 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__td_pr {
|
.demo__td_pr {
|
||||||
padding-right: $space_double;
|
padding-right: hippie.$space_double;
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo__td_pl {
|
.demo__td_pl {
|
||||||
padding-left: $space_double;
|
padding-left: hippie.$space_double;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Index
|
#demo {
|
||||||
// -----------------------------------------------------------------------------
|
.wrap {
|
||||||
.wrap {
|
display: flex;
|
||||||
display: flex;
|
// height: 100%;
|
||||||
// height: 100%;
|
align-items: center;
|
||||||
align-items: center;
|
justify-content: center;
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hello {
|
|
||||||
flex: 0 1 auto;
|
|
||||||
width: 80%;
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding: 1em 5em;
|
|
||||||
background-color: $color_darker;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
.hello {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsive {
|
||||||
|
@include hippie.forTabletPortraitUp {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
align-items: stretch;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: hippie.$space_half hippie.$space_basic;
|
||||||
|
|
||||||
|
& > * {
|
||||||
|
flex: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
48
source/style/modules/game/_mwo.scss
Normal file
48
source/style/modules/game/_mwo.scss
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
@use 'sass:list';
|
||||||
|
@use "sass:map";
|
||||||
|
|
||||||
|
@use "../../hippie-style/hippie";
|
||||||
|
|
||||||
|
$colors: hippie.$color_palette;
|
||||||
|
$steps: (0, 14.28, 28.57, 42.85, 57.14, 71.43, 100);
|
||||||
|
|
||||||
|
@function getColor($index, $colors) {
|
||||||
|
$color_keys: map.keys($colors);
|
||||||
|
$key_count: list.length($color_keys);
|
||||||
|
$cycled_index: ($index % $key_count) + 1;
|
||||||
|
$key: list.nth($color_keys, $cycled_index);
|
||||||
|
@return map.get($colors, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fadeColors($steps, $colors) {
|
||||||
|
@keyframes fadeColor {
|
||||||
|
@for $i from 1 through list.length($steps) {
|
||||||
|
$percent: list.nth($steps, $i);
|
||||||
|
$color: getColor($i - 1, $colors);
|
||||||
|
|
||||||
|
#{$percent}% {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animation: fadeColor 16s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body_mwo {
|
||||||
|
@extend .h_full_view;
|
||||||
|
|
||||||
|
canvas {
|
||||||
|
@include fadeColors($steps, $colors);
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
cursor: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
border-radius: hippie.$radius_basic;
|
||||||
|
}
|
||||||
|
}
|
||||||
206
source/style/modules/game/_tfw.scss
Normal file
206
source/style/modules/game/_tfw.scss
Normal file
|
|
@ -0,0 +1,206 @@
|
||||||
|
@use 'sass:list';
|
||||||
|
@use "sass:map";
|
||||||
|
|
||||||
|
@use "../../hippie-style/hippie";
|
||||||
|
|
||||||
|
.body_tfw {
|
||||||
|
@extend .h_full_view;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
|
||||||
|
th,
|
||||||
|
.important,
|
||||||
|
.subtle,
|
||||||
|
button,
|
||||||
|
input[type="text"],
|
||||||
|
select {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
th,
|
||||||
|
.important {
|
||||||
|
color: white;
|
||||||
|
background-color: hippie.basic_color(echo);
|
||||||
|
}
|
||||||
|
|
||||||
|
.important {
|
||||||
|
padding: hippie.$space_half;
|
||||||
|
border-block: hippie.$width_border_basic solid hippie.$color_back_basic;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtle,
|
||||||
|
hgroup p {
|
||||||
|
@extend .txt_smaller;
|
||||||
|
|
||||||
|
color: hippie.$color_darkest;
|
||||||
|
}
|
||||||
|
|
||||||
|
.complete .subtle,
|
||||||
|
button[data-action="claim"] {
|
||||||
|
color: hippie.basic_color(alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
.background {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
h2, span {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:not(canvas, img) {
|
||||||
|
z-index: map.get(hippie.$z-indexes, "content-bottom");
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas, img {
|
||||||
|
z-index: map.get(hippie.$z-indexes, "default");
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > header {
|
||||||
|
& > button.active {
|
||||||
|
border-color: hippie.$color_highlight_basic;
|
||||||
|
color: hippie.$color_highlight_basic;
|
||||||
|
background-color: hippie.$color_action_basic;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > button:not(:first-child, :last-child, :nth-child(2)) {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.view {
|
||||||
|
flex: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
|
& > main {
|
||||||
|
flex: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row nowrap;
|
||||||
|
gap: hippie.$space_double;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
|
nav {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
gap: hippie.$space_basic;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
|
input:not([type="checkbox"], [type="range"]) {
|
||||||
|
@extend .input_io;
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
@extend .io_select;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
flex: 4;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
gap: hippie.$space_basic;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
|
div:first-child {
|
||||||
|
flex: auto;
|
||||||
|
overflow: auto;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:last-child {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
flex: 2;
|
||||||
|
|
||||||
|
.background {
|
||||||
|
border-bottom: 1px solid hippie.basic_color(echo);
|
||||||
|
}
|
||||||
|
|
||||||
|
& > div {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
table-layout: fixed;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
vertical-align: top;
|
||||||
|
|
||||||
|
span {
|
||||||
|
z-index: map.get(hippie.$z-indexes, "content-bottom");
|
||||||
|
position: relative;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.subtle {
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&#questSelection {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[data-type="faction"] td {
|
||||||
|
height: 6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[data-type="quest"] td {
|
||||||
|
height: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.l {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.q {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.g {
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.t, .s, .c, .f {
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > footer {
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: hippie.$space_basic;
|
||||||
|
|
||||||
|
& > button:not(:first-child) {
|
||||||
|
padding-inline: 2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
footer *:not(button[data-action="back"]) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
$portal_highlight: $color_highlight_basic;
|
@use "sass:color";
|
||||||
$portal_margin: $space_double;
|
|
||||||
|
@use "../../hippie-style/hippie";
|
||||||
|
|
||||||
|
$portal_highlight: hippie.$color_highlight_basic;
|
||||||
|
$portal_margin: hippie.$space_double;
|
||||||
$portal_link_size: 128px;
|
$portal_link_size: 128px;
|
||||||
$portal_icon_size: 64px;
|
$portal_icon_size: 64px;
|
||||||
|
|
||||||
|
|
@ -21,7 +25,7 @@ $portal_icon_size: 64px;
|
||||||
padding-left: $portal_margin;
|
padding-left: $portal_margin;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
transition: $transition_best;
|
transition: hippie.$transition_best;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
flex: 3;
|
flex: 3;
|
||||||
|
|
@ -66,7 +70,7 @@ $portal_icon_size: 64px;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: transparentize($portal_highlight, $amount: 0.2);
|
background-color: color.adjust($portal_highlight, $alpha: -0.2);
|
||||||
border-color: $portal_highlight;
|
border-color: $portal_highlight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +129,7 @@ $portal_icon_size: 64px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.portal__list {
|
.portal__list {
|
||||||
@extend .list_link;
|
@extend .link;
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
||||||
22
source/style/modules/songbook/_songbook_module.scss
Executable file
22
source/style/modules/songbook/_songbook_module.scss
Executable file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
source/style/modules/ui/_drag_module.scss
Normal file
8
source/style/modules/ui/_drag_module.scss
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#space {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.body_frame {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
source/style/modules/ui/_form_module.scss
Normal file
23
source/style/modules/ui/_form_module.scss
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
136
source/style/modules/ui/_frame_module.scss
Executable file
136
source/style/modules/ui/_frame_module.scss
Executable file
|
|
@ -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);
|
||||||
|
}
|
||||||
18
source/style/modules/ui/_gallery_module.scss
Normal file
18
source/style/modules/ui/_gallery_module.scss
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,129 +0,0 @@
|
||||||
$module_top_height: 32px;
|
|
||||||
|
|
||||||
.body_new {
|
|
||||||
height: 100vh;
|
|
||||||
padding: $module_top_height + $space_basic $space_basic $space_basic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.body_drag {
|
|
||||||
height: 100vh;
|
|
||||||
// padding: $space_basic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
display: grid;
|
|
||||||
height: 100%;
|
|
||||||
// margin: $space_basic;
|
|
||||||
// grid-template-columns: repeat(3, 1fr);
|
|
||||||
grid-template-rows: auto 1fr;
|
|
||||||
gap: $space_basic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.area {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
transition: $transition_best;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: #999;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu, #top {
|
|
||||||
nav ul {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid {
|
|
||||||
display: grid;
|
|
||||||
// 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: darken($color_back_basic, $color_diff_tiny);
|
|
||||||
border-style: dotted;
|
|
||||||
border-width: $width_border_8;
|
|
||||||
border-radius: $width_border_8;
|
|
||||||
padding: $space_basic;
|
|
||||||
background-color: rgb($color_back_basic, .5);
|
|
||||||
// background-color: lighten($color_back_basic, $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: $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-left: 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#space {
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
background-color: $color-dark;
|
|
||||||
}
|
|
||||||
|
|
||||||
#addFrame {
|
|
||||||
@extend .io_button;
|
|
||||||
position: fixed;
|
|
||||||
top: 8px;
|
|
||||||
right: 8px;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
$module_top_height: 32px;
|
|
||||||
|
|
||||||
.body_ui {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
#frame {
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
background-color: $color-dark;
|
|
||||||
|
|
||||||
.title-bar {
|
|
||||||
button {
|
|
||||||
margin: 0 2px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
aside {
|
|
||||||
background-color: $color_brighter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.frame-flex {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.title-bar {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
div:last-child {
|
|
||||||
margin-left: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
flex: 1;
|
|
||||||
|
|
||||||
aside, section {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
17
source/style/modules/ui/_table_module.scss
Normal file
17
source/style/modules/ui/_table_module.scss
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
164
source/style/modules/ui/_windows_module.scss
Normal file
164
source/style/modules/ui/_windows_module.scss
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,210 @@
|
||||||
@import "demo_config";
|
@use "sass:map";
|
||||||
@import "hippie-style/hippie";
|
|
||||||
|
|
||||||
@import "modules/ui/new_module";
|
@use "demo_config";
|
||||||
@import "modules/ui/settings_module";
|
@use "hippie-style/hippie";
|
||||||
|
|
||||||
|
@use "modules/ui/frame_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";
|
||||||
|
@use "modules/game/mwo";
|
||||||
|
@use "modules/game/tfw";
|
||||||
|
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#init {
|
||||||
|
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;
|
||||||
|
|
||||||
|
svg {
|
||||||
|
height: 128px;
|
||||||
|
width: 128px;
|
||||||
|
|
||||||
|
rect, circle, path {
|
||||||
|
stroke: white !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hello {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
padding: 1em 2em;
|
||||||
|
background-color: rgba(hippie.$color_bright, .5);
|
||||||
|
font-family: hippie.$family_text_mono;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
<!-- demo.app.template -->
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de" class="{{ pageClass }}" id="{{ pageId }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
<title>{{ hippie.titlePrefix }}
|
|
||||||
{%- block title %}{% endblock %}{{ hippie.titlePostfix }}</title>
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
{% include "demo/partials/_meta.njk" %}
|
|
||||||
<base href="/">
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="{{ bodyClass }}">
|
|
||||||
{% block body %}{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
<!-- demo.default.template -->
|
|
||||||
{% extends "hippie/_default.njk" %}
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
{% include "demo/partials/_meta.njk" %}
|
|
||||||
<base href="/">
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
<link rel="stylesheet" type="text/css" media="all" href="{{ pageBase }}css/demo.css"/>
|
|
||||||
{# <link rel="stylesheet" type="text/css" media="all" href="css/demo.css"/> #}
|
|
||||||
{# <link rel="stylesheet" type="text/css" media="all" href="{{ pageBase | subdir(2) }}css/demo.css"/> #}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
<!-- demo.main.template -->
|
|
||||||
{% extends "hippie/_main.njk" %}
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
{% include "demo/partials/_meta.njk" %}
|
|
||||||
<base href="/">
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
{% if hippie.legacyMode %}
|
|
||||||
<!--[if lte IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv.min.js"></script> <![endif]-->
|
|
||||||
<!--[if lte IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <![endif]-->
|
|
||||||
<!--Local alternative: <script src="./code/html5shiv.min.js"></script>-->
|
|
||||||
<!--Only use one of the above!-->
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- <link href='https://fonts.googleapis.com/css?family=Roboto:400,300,400italic,500,500italic,700' rel='stylesheet' type='text/css'> -->
|
|
||||||
<link rel="stylesheet" type="text/css" media="all" href="{{ pageBase }}css/demo.css"/>
|
|
||||||
<!-- <link rel="stylesheet" type="text/css" media="print" href="{{ pageBase }}css/print.css"/> -->
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ super() }}
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
<!-- demo.maintenance.template -->
|
|
||||||
{% extends "hippie/_maintenance.njk" %}
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
{% include "demo/partials/_meta.njk" %}
|
|
||||||
<base href="/">
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
{{ super() }}
|
|
||||||
<link rel="stylesheet" type="text/css" media="all" href="{{ pageBase }}css/demo_basic.css"/>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
<!-- meta.partial -->
|
|
||||||
<meta name="author" content="Interaktionsweise">
|
|
||||||
<meta name="generator" content="Visual Studio Code, Atom, Notepad++">
|
|
||||||
<meta name="description" content="Hippie interweaves preeminent personal interface elements">
|
|
||||||
<meta name="robots" content="noindex">
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
{# <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> #}
|
|
||||||
{# <meta http-equiv="X-UA-Compatible" content="IE=edge" /> #}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<!-- explanation-colors.partial -->
|
|
||||||
{# var colors = [{name: "alpha", class: "alpha_color"}] #}
|
|
||||||
|
|
||||||
{% set cls = cycler("odd", "even") %}
|
|
||||||
{% for row in rows %}
|
|
||||||
<div class="{{ cls.next() }}">{{ row.name }}</div>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
<!-- default.template -->
|
|
||||||
{% import "hippie/macros/_log.njk" as log %}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de" class="{{ pageClass }}" id="{{ pageId }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
<title>{{ hippie.titlePrefix }}
|
|
||||||
{%- block title %}{% endblock %}{{ hippie.titlePostfix }}</title>
|
|
||||||
|
|
||||||
{% 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 %}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="{{ bodyClass }}">
|
|
||||||
{{ 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.') }}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
<!-- main.template -->
|
|
||||||
{% import "hippie/macros/_log.njk" as log %}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de" class="{{ pageClass }}" id="{{ pageId }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
<title>{{ hippie.titlePrefix }}
|
|
||||||
{%- block title %}{% endblock %}{{ hippie.titlePostfix }}</title>
|
|
||||||
|
|
||||||
{% 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 %}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="{{ bodyClass }}">
|
|
||||||
{{ log.log('BODY start') }}
|
|
||||||
{% include "hippie/partials/_body_hover.njk" %}
|
|
||||||
<div id="root">
|
|
||||||
{% include "hippie/partials/_header.njk" %}
|
|
||||||
|
|
||||||
<main class="main_site">
|
|
||||||
{% block main %}{% endblock %}
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{% include "hippie/partials/_footer.njk" %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
{{ log.log('BODY :: Loading script assets...') }}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{{ log.log('BODY end :: Page script might still be loading.') }}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<!-- maintenance.template -->
|
|
||||||
{% import "hippie/macros/footer-status.njk" as status %}
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de" class="{{ pageClass }}" id="{{ pageId }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
<title>{{ hippie.titlePrefix }}
|
|
||||||
{%- block title %}{% endblock %}{{ hippie.titlePostfix }}</title>
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
{% include "hippie/partials/_head_meta.njk" %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block links %}
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVDiNldM/aJNBGMfx71viH7TqIoLiIOoiSJRu0qE4uIiDm5OI4ODk4uYioqBuUkR0kKJNFC1mqUltlbZSqE3RYt+2SUyTppCmeU2bkiZ907z3vnfnUEU0NrXPeMd97p6H+xlaa02D0oDRYL+p4WEN9yZm8dT6dzQEQtkCuiIJxHKbBxZrLiNWmc8vRxn7lMGRanPAw0QW49Uwp8ODJEZmCCSt/wcGrCWavte44LRz7FyYnd+yxMZz2J7cGKh6kvczRUp3X9BnmFyLzHNVRpkeShNM1b+iDngUn2Oue4qLLV3cf+YST2tiLf3sj04wmypSEt76wFixwoJpcbKnh/ZMmuXK2vqdYJXLxyPMDiTpTOX/DbhK88bMMh4Y5sSZt3R2/+53aRkCzgT+oX4Kls2i49YDT+M5JkMmV+aj3BrII/+a15MuSevZEPl3UzxP5/8EMiurfO1L0hyNU27tZehL/c/zJNzsLXB+uoNySZBfFQD4tIbHHxJMfoxxu2pi7rK5fsm3FgL5MwXKQAPaMzh8JMbg61E6mn3c8B/CF5yx2L1tC/5TR4nsAS/RhlNzcR0P6TggFVoDGrYqyYMkLOybZ4fQZFZqGOHsgi4KF1tIakrhKIXj/WrBQAuJV3EQtsBbEQjbQVQEB/0HUHu3Y2wU5/XKVRqhFD8AgpYX2M9TNGcAAAAASUVORK5CYII=">
|
|
||||||
{% endblock %}
|
|
||||||
{% endblock %}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="{{ bodyClass }}">
|
|
||||||
{% block body %}
|
|
||||||
{{ status.footer() }}
|
|
||||||
{% endblock %}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
<!-- gates.macro -->
|
|
||||||
{% macro list(name, url, image, links) %}
|
|
||||||
<article class="portal__entry">
|
|
||||||
<section>
|
|
||||||
<h2>
|
|
||||||
<a class="a_discreet" href="{{ url }}">{{ name }}</a>
|
|
||||||
</h2>
|
|
||||||
<a class="portal__link portal__link--{{ name | slug }}" href="{{ url }}">
|
|
||||||
<img src="{{ image.src }}" alt="{{ image.alt }}"/>
|
|
||||||
</a>
|
|
||||||
{% if links %}
|
|
||||||
<ul class="portal__list">
|
|
||||||
{% for link in links %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ link.href }}"><img src="{{ link.img }}" width="16" height="16"/>{{ link.name }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro simple(name, url) %}
|
|
||||||
<article class="portal__entry">
|
|
||||||
<section>
|
|
||||||
<h2>
|
|
||||||
<a class="a_discreet" href="{{ url }}">{{ name }}</a>
|
|
||||||
</h2>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
{% macro start() %}
|
|
||||||
<script>
|
|
||||||
logAdd('EVENT :: Document \'%s\' event fired.', 'DOMContentLoaded');
|
|
||||||
logPerf('HEAD start :: Debugging performance...', debugOn);
|
|
||||||
</script>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro log(msg, arg = '') %}
|
|
||||||
<script>
|
|
||||||
logPerf('{{ msg }}', {{ arg }});
|
|
||||||
</script>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro debug(state = false, display = false, assets = false) %}
|
|
||||||
{# {{ set hippie.debugMode = state }} #}
|
|
||||||
<script>
|
|
||||||
debugOn = {{ state }};
|
|
||||||
debugOnScreen = {{ display }};
|
|
||||||
assetsLoaded = {{ assets }};
|
|
||||||
</script>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro asset(state = false) %}
|
|
||||||
<script>
|
|
||||||
assetsLoaded = {{ state }};
|
|
||||||
</script>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
{% macro main(data, active = '') %}
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
{% for link in data %}
|
|
||||||
<li{%if active == link.text %} class="active_txt" {% endif %}>
|
|
||||||
{%if active == link.text %}{{ link.text }}{%else%}
|
|
||||||
<a href="{{ link.href }}">{{ link.text }}</a>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
{% macro email(class='', text='name@domain.tld') %}
|
|
||||||
<a class="{{ class }}" href="">{{ text }}</a>
|
|
||||||
{# {{ 'name@domain.tld' | urlize | safe }} #}
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro link(class='', text='domain.tld', href='http://domain.internal') %}
|
|
||||||
<a class="{{ class }}" href="{{ href }}">{{ text }}</a>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro name(class='', text='Vorname Nachname') %}
|
|
||||||
<span class="{{ class }}">{{ text }}</span>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro address(class='', text='Straße Nr., PLZ Ort') %}
|
|
||||||
<span class="{{ class }}">{{ text }}</span>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
<!-- states.macro -->
|
|
||||||
{% macro coord(id, text='X: #, Y: ##') %}
|
|
||||||
<span id="{{ id }}">{{ text }}</span>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro time(id, text='00:00:00', postfix=' Uhr') %}
|
|
||||||
<span id="{{ id }}">{{ text }}</span><span>{{ postfix }}</span>
|
|
||||||
{% endmacro %}
|
|
||||||
{% macro date() %}
|
|
||||||
<span id="{{ id }}">
|
|
||||||
<span id="day">Wochentag</span>,
|
|
||||||
<span id="dayNumb">##</span>.
|
|
||||||
<span id="month">Monat</span>
|
|
||||||
<span id="year">####</span>
|
|
||||||
</span>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
{% macro footer(email = 'admin@domain.tld', app = 'Application', version = 'ver.s.ion', system = 'System Name', domain = 'domain.tld:port', type) %}
|
|
||||||
|
|
||||||
{% if not type or type == 'status' %}
|
|
||||||
<footer class="pos_abs pin_bottom width_full">
|
|
||||||
<address class="txt_center">Kontakt:
|
|
||||||
<a class="lineLink" href="mailto:{{ email }}">{{ email }}</a>
|
|
||||||
* Server:
|
|
||||||
{{ app }}/{{ version }}
|
|
||||||
({{ system }}) * Domain:
|
|
||||||
{{ domain }}</address>
|
|
||||||
</footer>
|
|
||||||
{% else %}
|
|
||||||
<footer class="pos_abs pin_bottom width_full">
|
|
||||||
<p>Platzhalter unten fixiert</p>
|
|
||||||
</footer>
|
|
||||||
{% endif %}
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{% macro field(name, value='', type='text') %}
|
|
||||||
<div class="field">
|
|
||||||
<input type="{{ type }}" name="{{ name }}" value="{{ value | escape }}" />
|
|
||||||
</div>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
<!-- body_hover.partial -->
|
|
||||||
<div id="js_mob"></div>
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
<!-- body_nav.partial -->
|
|
||||||
<div class="pos_rel">
|
|
||||||
<nav class="nav_page_meta js_">
|
|
||||||
<ul>
|
|
||||||
<li class="js_scrolltop hide">
|
|
||||||
<a href="#begin" class="a_button_meta">
|
|
||||||
<div class="sprite_img demo__sprite_up"></div>
|
|
||||||
{# <img src="{{ pageBase }}art/up.png" alt="" width="32" height="64"> #}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{# <button class="">Show Meta Information</button> #}
|
|
||||||
{# <a href="#meta" class="js_showmeta a_button_meta">
|
|
||||||
<div class="sprite_img demo__sprite_meta"></div>
|
|
||||||
</a> #}
|
|
||||||
<button class="js_showmeta button_clear" type="button"><div class="sprite_img demo__sprite_meta"></div></button>
|
|
||||||
</li>
|
|
||||||
<li class="js_scrolldown">
|
|
||||||
<a href="#end" class="a_button_meta">
|
|
||||||
<div class="sprite_img demo__sprite_down"></div>
|
|
||||||
{# <img src="{{ pageBase }}art/down.png" alt="" width="32" height="32"> #}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
{# <div class="exp_overlay_btn exp_help_btn">
|
|
||||||
<span class="span_solo">?</span>
|
|
||||||
</div> #}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<!-- footer.partial -->
|
|
||||||
<footer class="footer_site">
|
|
||||||
<div id="end"></div>
|
|
||||||
</footer>
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<!-- head.links.partial -->
|
|
||||||
{# <link rel="icon" href="/favicon.ico" type="image/vnd.microsoft.icon"> #}
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="{{ pageBase }}favicon.ico">
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAIBAQCbjUIABQQCAGdfKgDcxYUAiXpGABkWCgDXxnEApmxRAMGZawAIBwMArZ5PAKFydQBmIZIAoGJFAIx+QwBSSyIA1biBADlx0gBNn+0AgztQAMimcQAMCwQADAsFANS/dAB7P3EAeuH7ANb4/gBQPLwAp2pNAI6CQwCilEwAr3hdADyH5ADw/f8A////AHTU+AB6M2YA0LN4ABMRBwA/OhsAyKR2AGYvjQCf7PwA7fz/AENy2gCrclkAk4ZDAAYFAgDNtXEAjkhHAEul7QD8//8AlOn8AGk1hwDWvXsAGBYJAJaHSgCnbE4AVy6rAML0/gD7/v8AQ6vuAKx1YwCZjEQALCgTALyOZwB+NVoAZ8D0AL30/QBLULMA2sV+AB4bCwDFpm0Ak087AFArvgBv4PoAjOf7AIzm+wCN4/sAjuH7AI7h+gCP3fkAOI/sAKVvcwCfkUQAfnM6ANO2hAC3iGkAk150AI9OcACKRmkAhj9kAH84YQB9NWEAfTRgAH0zYAB6MWYAei9lAItFUADdy3wAKCQPAFtTJQB2bDIAhXk5AJKGPwCbjkQAq5xOALepWwDEtGcAzLlwAMyzcgDKrXIAx6NwALyNZgDWu4IApJZHAAcGAwANDAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3eGhpamtsbW5vcHFycwt0dXZYWVpbXF1eX2BhYmNkZWZnAktMTU5PUFFRUlNUVVZXAABDREVGJSUlJSUlR0hJSgAAADs8PT4lJSUlP0BBQgAAAAAyMzQ1NiUlJTc4OToAAAAAACorLC0lJS4vMDEAAAAAAAAAISIjJCUmJygpAAAAAAAAABkaGxwdHh8gAAAAAAAAAAAAEhMUFRYXGAAAAAAAAAAAAAANDg8QEQAAAAAAAAAAAAAACAkKCwwAAAAAAAAAAAAAAAAFBgcAAAAAAAAAAAAAAAAAAgMEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=">
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<!-- head.meta.partial -->
|
|
||||||
<meta name="author" content="">
|
|
||||||
<meta name="generator" content="{{ eleventy.generator }}">
|
|
||||||
<meta name="description" content="">
|
|
||||||
<meta name="robots" content="noindex">
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
||||||
<!-- head.script.partial -->
|
|
||||||
<script>
|
|
||||||
// Entry script at page init
|
|
||||||
let debugOn = {{ hippie.debugMode }};
|
|
||||||
let debugOnScreen = false;
|
|
||||||
let assetsLoaded = false;
|
|
||||||
|
|
||||||
// Get the current time difference between page
|
|
||||||
// load and when this func was invoked
|
|
||||||
function getTimeDiff() {
|
|
||||||
return new Date().getTime() - performance.timing.navigationStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
function pad(n, width, z) {
|
|
||||||
z = z || '0';
|
|
||||||
n = n + '';
|
|
||||||
|
|
||||||
return n.length >= width
|
|
||||||
? n
|
|
||||||
: new Array(width - n.length + 1).join(z) + n;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Log message to console and add
|
|
||||||
// performance measuring information
|
|
||||||
function logPerf(msg, arg) {
|
|
||||||
if (debugOn) {
|
|
||||||
if (debugOnScreen && assetsLoaded) {
|
|
||||||
if (!document.getElementById('jsLogPerf')) {
|
|
||||||
let wrap = document.createElement('div');
|
|
||||||
let box = document.createElement('div');
|
|
||||||
|
|
||||||
wrap.style.position = 'relative';
|
|
||||||
box.style.cssText = `position: fixed;
|
|
||||||
bottom: 16px;
|
|
||||||
right: 40px;
|
|
||||||
zIndex: 1000;
|
|
||||||
padding: 0 8px;
|
|
||||||
background: rgba(255,255,255,.6);
|
|
||||||
color: rgb(128);
|
|
||||||
fontSize: 1rem;`;
|
|
||||||
box.id = 'jsLogPerf';
|
|
||||||
|
|
||||||
wrap.prepend(box);
|
|
||||||
document
|
|
||||||
.body
|
|
||||||
.prepend(wrap);
|
|
||||||
|
|
||||||
/*
|
|
||||||
$('<div><div></div></div>')
|
|
||||||
.css('position', 'relative')
|
|
||||||
.find('div')
|
|
||||||
.attr('id', 'jsLogPerf')
|
|
||||||
.css({
|
|
||||||
position: 'fixed',
|
|
||||||
bottom: '16px',
|
|
||||||
right: '40px',
|
|
||||||
zIndex: '1000',
|
|
||||||
padding: '0 8px',
|
|
||||||
background: 'rgba(255,255,255,.6)',
|
|
||||||
color: 'rgb(128)',
|
|
||||||
fontSize: '1rem'
|
|
||||||
})
|
|
||||||
.end()
|
|
||||||
.prependTo('body');
|
|
||||||
*/
|
|
||||||
// $('body').prepend('<div style="position:relative;"></div>');
|
|
||||||
// $('div').first().prepend('<div id="jslogPerf" style="position:fixed;bottom:8px;right:16px;z-index:1000;padding:8px;background:rgb(0,255,255,.5)"></div>');
|
|
||||||
}
|
|
||||||
|
|
||||||
let code = document.createElement('code');
|
|
||||||
|
|
||||||
code.style.cssText = `display: block;
|
|
||||||
margin: 8px 0;
|
|
||||||
padding: 1px 4px;
|
|
||||||
background-color: transparent;
|
|
||||||
color: black;
|
|
||||||
font-size: 12px;
|
|
||||||
line-height: 1.1;`;
|
|
||||||
code.innerHTML = '<b>' + pad(getTimeDiff(), 5) + '</b>ms :: ' + msg + '';
|
|
||||||
|
|
||||||
document
|
|
||||||
.getElementById('jsLogPerf')
|
|
||||||
.append(code);
|
|
||||||
// document.getElementById('jsLogPerf').append('<p class="code_solo txt_smaller"><b>' + pad(getTimeDiff(), 5) + '</b>ms :: ' + msg + '</p>');
|
|
||||||
// $('#jsLogPerf').append('<p class="code_solo txt_smaller"><b>' + pad(getTimeDiff(), 5) + '</b>ms :: ' + msg + '</p>');
|
|
||||||
|
|
||||||
// NOTE: Alternative short-circuit evaluation
|
|
||||||
// needs element in document but prevents error if not
|
|
||||||
// $log = $log || $('#jslogPerf');
|
|
||||||
// $log.append('<p style="margin-bottom:4px;font-size:.75em;"><b>' + getTimeDiff() + '</b>ms :: ' + msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.console) {
|
|
||||||
const time = pad(getTimeDiff(), 5) + 'ms :: ';
|
|
||||||
|
|
||||||
console.debug(time + msg, (
|
|
||||||
arg
|
|
||||||
? arg
|
|
||||||
: ''));
|
|
||||||
|
|
||||||
// NOTE: Non standard feature. Not available on IE
|
|
||||||
if (console.timeStamp) {
|
|
||||||
console.timeStamp(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function logAdd(msg, listener) {
|
|
||||||
document.addEventListener(listener, function () {
|
|
||||||
logPerf(msg, listener);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
<!-- header.partial -->
|
|
||||||
<header class="header_site"></header>
|
|
||||||
18
source/view/_data/menu.json
Normal file
18
source/view/_data/menu.json
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"text": "New",
|
||||||
|
"href": "#new"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Continue",
|
||||||
|
"href": "#continue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Settings",
|
||||||
|
"href": "#options"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Leave",
|
||||||
|
"href": "/"
|
||||||
|
}
|
||||||
|
]
|
||||||
14
source/view/_data/start.json
Normal file
14
source/view/_data/start.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"text": "Index",
|
||||||
|
"href": "/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Basics",
|
||||||
|
"href": "/demo/basics.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Portal",
|
||||||
|
"href": "/demo/examples/portal.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
1
source/view/_includes/hippie-view
Submodule
1
source/view/_includes/hippie-view
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 49fa85800392bc217653e6a90573feda4a1dc0ed
|
||||||
69
source/view/demo/art/10print.liquid
Normal file
69
source/view/demo/art/10print.liquid
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
---
|
||||||
|
title: 10print
|
||||||
|
tags:
|
||||||
|
- demoArt
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/simple.liquid' %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
<style>
|
||||||
|
canvas {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<canvas id="pattern"></canvas>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
<script>
|
||||||
|
const canvas = document.getElementById('pattern');
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
const lineWidth = 20;
|
||||||
|
const randomSeed = Math.random;
|
||||||
|
|
||||||
|
// Function to draw the 10PRINT pattern
|
||||||
|
function draw10Print() {
|
||||||
|
// Clear the canvas
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
|
||||||
|
// Set line style
|
||||||
|
ctx.strokeStyle = 'black';
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
|
||||||
|
// Loop through the canvas grid
|
||||||
|
for (let x = 0; x < canvas.width; x += lineWidth) {
|
||||||
|
for (let y = 0; y < canvas.height; y += lineWidth) {
|
||||||
|
// Randomly choose between two diagonal lines
|
||||||
|
if (randomSeed() > 0.5) {
|
||||||
|
// Draw line from top-left to bottom-right
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(x, y);
|
||||||
|
ctx.lineTo(x + lineWidth, y + lineWidth);
|
||||||
|
ctx.stroke();
|
||||||
|
} else {
|
||||||
|
// Draw line from top-right to bottom-left
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(x + lineWidth, y);
|
||||||
|
ctx.lineTo(x, y + lineWidth);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resizeCanvas() {
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
resizeCanvas();
|
||||||
|
draw10Print();
|
||||||
|
|
||||||
|
// window.addEventListener('resize', resizeCanvas);
|
||||||
|
canvas.addEventListener('click', draw10Print);
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
167
source/view/demo/art/matrix.liquid
Normal file
167
source/view/demo/art/matrix.liquid
Normal file
|
|
@ -0,0 +1,167 @@
|
||||||
|
---
|
||||||
|
title: Matrix
|
||||||
|
tags:
|
||||||
|
- demoArt
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/simple.liquid' %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background-color: grey;
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
#canvas {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<canvas id="canvas"></canvas>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
<script>
|
||||||
|
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
const canvas = document.getElementById("canvas");
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
// const observer = new ResizeObserver(() => {
|
||||||
|
// canvas.width = canvas.clientWidth;
|
||||||
|
// canvas.height = canvas.clientHeight;
|
||||||
|
// console.log("resize");
|
||||||
|
// });
|
||||||
|
|
||||||
|
canvas.width = canvas.clientWidth;
|
||||||
|
canvas.height = canvas.clientHeight;
|
||||||
|
|
||||||
|
// observer.observe(canvas);
|
||||||
|
|
||||||
|
ctx.font = "24px 'Courier New', Courier, monospace";
|
||||||
|
ctx.textBaseline = "top";
|
||||||
|
|
||||||
|
let char = characters.charAt(Math.floor(Math.random() * characters.length));
|
||||||
|
let charMeasure = ctx.measureText(char);
|
||||||
|
let charW = Math.ceil(Math.max(charMeasure.actualBoundingBoxLeft + charMeasure.actualBoundingBoxRight, charMeasure.width));
|
||||||
|
let charH = charMeasure.fontBoundingBoxDescent + charMeasure.fontBoundingBoxAscent;
|
||||||
|
let glyph = {
|
||||||
|
text: char,
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
w: charH,
|
||||||
|
h: charH
|
||||||
|
}
|
||||||
|
let lane = [];
|
||||||
|
let max = Math.floor(canvas.clientHeight / glyph.h);
|
||||||
|
|
||||||
|
let newId = undefined;
|
||||||
|
let holdId = undefined;
|
||||||
|
let cleanId = undefined;
|
||||||
|
let newInterval = 300;
|
||||||
|
let holdInterval = 1000;
|
||||||
|
let cleanInterval = 400;
|
||||||
|
let newIndex = 0;
|
||||||
|
let cleanIndex = randomIntFrom(1, max);
|
||||||
|
|
||||||
|
console.log("init", newInterval);
|
||||||
|
console.log(glyph);
|
||||||
|
|
||||||
|
newId = setInterval(newTrail, newInterval);
|
||||||
|
|
||||||
|
function newTrail() {
|
||||||
|
clearInterval(holdId);
|
||||||
|
|
||||||
|
glyph.text = characters.charAt(Math.floor(Math.random() * characters.length));
|
||||||
|
console.log(newIndex, glyph.text);
|
||||||
|
|
||||||
|
lane.push([newIndex, glyph.text, glyph.y]);
|
||||||
|
|
||||||
|
ctx.fillStyle = "white";
|
||||||
|
ctx.fillRect(glyph.x, glyph.y, glyph.w, glyph.h);
|
||||||
|
ctx.fillStyle = "black";
|
||||||
|
ctx.fillText(glyph.text, Math.floor((charH - charW) / 2), glyph.y);
|
||||||
|
|
||||||
|
if (newIndex > 0) {
|
||||||
|
let prevY = glyph.y - glyph.h;
|
||||||
|
let alpha = randomBetween(.2, 1);
|
||||||
|
ctx.clearRect(glyph.x, prevY, glyph.w, glyph.h);
|
||||||
|
ctx.fillStyle = "rgba(0, 0, 0, " + alpha + ")";
|
||||||
|
ctx.fillRect(glyph.x, prevY, glyph.w, glyph.h);
|
||||||
|
ctx.fillStyle = "rgba(255, 255, 255, " + alpha + ")";
|
||||||
|
// TODO: can not use array lane if it is changed by cleanTrail()
|
||||||
|
ctx.fillText(lane[newIndex - 1][1], Math.floor((charH - charW) / 2), prevY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newIndex === cleanIndex) {
|
||||||
|
console.log("clean", cleanInterval, cleanIndex);
|
||||||
|
|
||||||
|
cleanId = setInterval(cleanTrail, cleanInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
newIndex++;
|
||||||
|
glyph.y += glyph.h;
|
||||||
|
|
||||||
|
if (newIndex > max) {
|
||||||
|
// console.log("hold", holdInterval);
|
||||||
|
console.log("end");
|
||||||
|
|
||||||
|
clearInterval(newId);
|
||||||
|
|
||||||
|
newIndex = 0;
|
||||||
|
glyph.y = 0;
|
||||||
|
newInterval = randomIntFrom(100, 1000, 2);
|
||||||
|
|
||||||
|
// holdId = setTimeout(() => {
|
||||||
|
// console.log("clean", cleanInterval);
|
||||||
|
|
||||||
|
// holdInterval = randomIntFrom(1000, 10000, 3);
|
||||||
|
// cleanId = setInterval(cleanTrail, cleanInterval);
|
||||||
|
// }, holdInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanTrail() {
|
||||||
|
let pos = lane.shift();
|
||||||
|
console.log(pos);
|
||||||
|
|
||||||
|
ctx.clearRect(0, pos[2], glyph.w, glyph.h);
|
||||||
|
|
||||||
|
if (!lane.length) {
|
||||||
|
console.log("hold", holdInterval);
|
||||||
|
|
||||||
|
clearInterval(cleanId);
|
||||||
|
|
||||||
|
holdId = setTimeout(() => {
|
||||||
|
console.clear();
|
||||||
|
console.log("new", newInterval);
|
||||||
|
|
||||||
|
cleanIndex = randomIntFrom(1, max);
|
||||||
|
cleanInterval = randomIntFrom(1000, 10000, 3);
|
||||||
|
holdInterval = randomIntFrom(1000, 10000, 3);
|
||||||
|
newId = setInterval(newTrail, newInterval);
|
||||||
|
}, holdInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function randomBetween(min, max) {
|
||||||
|
return (Math.random() * (max - min) + min).toFixed(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
178
source/view/demo/art/squares2.liquid
Normal file
178
source/view/demo/art/squares2.liquid
Normal file
|
|
@ -0,0 +1,178 @@
|
||||||
|
---
|
||||||
|
title: Squares²
|
||||||
|
tags:
|
||||||
|
- demoArt
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/simple.liquid' %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
<style>
|
||||||
|
canvas {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
<script>
|
||||||
|
function fillCanvasWithSquares(maxSquareSize = 128, steps = 3, percentages = [40, 30, 20]) {
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
document.body.appendChild(canvas);
|
||||||
|
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
const colors = [
|
||||||
|
'#e1d170',
|
||||||
|
'#cfb16a',
|
||||||
|
'#8b3050',
|
||||||
|
'#683657',
|
||||||
|
'#354063',
|
||||||
|
'#4b5776',
|
||||||
|
'#c8dbe2',
|
||||||
|
'#90bac2',
|
||||||
|
'#7daeb7'
|
||||||
|
];
|
||||||
|
/*const colors = [
|
||||||
|
'#fad803',
|
||||||
|
'#f2af13',
|
||||||
|
'#d30a51',
|
||||||
|
'#8e1f68',
|
||||||
|
'#273f8b',
|
||||||
|
'#3c579a',
|
||||||
|
'#b7e0f0',
|
||||||
|
'#6bc7d9',
|
||||||
|
'#52bed1'
|
||||||
|
];*/
|
||||||
|
|
||||||
|
function isPowerOfTwo(n) {
|
||||||
|
return n > 0 && (n & (n - 1)) === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPowerOfTwo(maxSquareSize)) {
|
||||||
|
console.error('maxSquareSize must be a power of 2');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (steps < 1) {
|
||||||
|
console.error('steps must be at least 1');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate sizes by halving for each step
|
||||||
|
const sizes = [];
|
||||||
|
for (let i = 0; i < steps; i++) {
|
||||||
|
sizes.push(maxSquareSize / Math.pow(2, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate percentages array
|
||||||
|
if (!Array.isArray(percentages)) {
|
||||||
|
console.error('percentages must be an array');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (percentages.length !== sizes.length - 1) {
|
||||||
|
console.warn(`percentages array should have ${sizes.length - 1} elements. Adjusting...`);
|
||||||
|
percentages = percentages.slice(0, sizes.length - 1);
|
||||||
|
while (percentages.length < sizes.length - 1) {
|
||||||
|
percentages.push(50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const minSize = sizes[sizes.length - 1];
|
||||||
|
|
||||||
|
let grid = Array(Math.ceil(canvas.height / minSize))
|
||||||
|
.fill(null)
|
||||||
|
.map(() => Array(Math.ceil(canvas.width / minSize)).fill(false));
|
||||||
|
|
||||||
|
function canPlace(gridX, gridY, sizeInCells) {
|
||||||
|
if (gridY + sizeInCells > grid.length || gridX + sizeInCells > grid[0].length) return false;
|
||||||
|
for (let y = gridY; y < gridY + sizeInCells; y++) {
|
||||||
|
for (let x = gridX; x < gridX + sizeInCells; x++) {
|
||||||
|
if (grid[y][x]) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function markOccupied(gridX, gridY, sizeInCells) {
|
||||||
|
for (let y = gridY; y < gridY + sizeInCells; y++) {
|
||||||
|
for (let x = gridX; x < gridX + sizeInCells; x++) {
|
||||||
|
grid[y][x] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw(gridX, gridY, sizeInPixels) {
|
||||||
|
const x = gridX * minSize;
|
||||||
|
const y = gridY * minSize;
|
||||||
|
const type = Math.random() < 0.5;
|
||||||
|
|
||||||
|
ctx.fillStyle = colors[Math.floor(Math.random() * colors.length)];
|
||||||
|
ctx.fillRect(x, y, sizeInPixels, sizeInPixels);
|
||||||
|
// TODO: Linie anpassen und wiederholen
|
||||||
|
ctx.strokeStyle = '#404040';
|
||||||
|
// ctx.strokeStyle = type ? '#fff' : '#000';
|
||||||
|
ctx.lineWidth = 1;
|
||||||
|
ctx.strokeRect(x, y, sizeInPixels, sizeInPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill() {
|
||||||
|
// Process each size with its corresponding percentage
|
||||||
|
for (let sizeIndex = 0; sizeIndex < sizes.length; sizeIndex++) {
|
||||||
|
const size = sizes[sizeIndex];
|
||||||
|
const sizeInCells = size / minSize;
|
||||||
|
const percentage = sizeIndex < percentages.length ? percentages[sizeIndex] : 0;
|
||||||
|
|
||||||
|
if (sizeIndex < sizes.length - 1) {
|
||||||
|
// For all sizes except the last, apply percentage
|
||||||
|
const positions = [];
|
||||||
|
for (let gridY = 0; gridY < grid.length; gridY++) {
|
||||||
|
for (let gridX = 0; gridX < grid[0].length; gridX++) {
|
||||||
|
if (canPlace(gridX, gridY, sizeInCells)) {
|
||||||
|
positions.push({ gridX, gridY });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
positions.sort(() => Math.random() - 0.5);
|
||||||
|
|
||||||
|
const target = Math.floor(positions.length * percentage / 100);
|
||||||
|
for (let i = 0; i < target; i++) {
|
||||||
|
const { gridX, gridY } = positions[i];
|
||||||
|
if (canPlace(gridX, gridY, sizeInCells)) {
|
||||||
|
markOccupied(gridX, gridY, sizeInCells);
|
||||||
|
draw(gridX, gridY, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Fill remaining space with the smallest size
|
||||||
|
for (let gridY = 0; gridY < grid.length; gridY++) {
|
||||||
|
for (let gridX = 0; gridX < grid[0].length; gridX++) {
|
||||||
|
if (canPlace(gridX, gridY, sizeInCells)) {
|
||||||
|
markOccupied(gridX, gridY, sizeInCells);
|
||||||
|
draw(gridX, gridY, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fill();
|
||||||
|
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
grid = Array(Math.ceil(canvas.height / minSize))
|
||||||
|
.fill(null)
|
||||||
|
.map(() => Array(Math.ceil(canvas.width / minSize)).fill(false));
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
fill();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fillCanvasWithSquares(128, 4, [2, 24, 64]);
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
975
source/view/demo/basics.liquid
Normal file
975
source/view/demo/basics.liquid
Normal file
|
|
@ -0,0 +1,975 @@
|
||||||
|
---
|
||||||
|
title: Basics
|
||||||
|
tags:
|
||||||
|
- demoIndex
|
||||||
|
order: 2
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/page.liquid' %}
|
||||||
|
|
||||||
|
{% block title %}Grundlagen{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<div class="demo__intro">
|
||||||
|
Dies ist einfach nur Text.<br>Weniger wäre nichts, denn dieser Text ist nicht durch ein spezifisches Element
|
||||||
|
umschlossen.<br>Das ist normalerweise nicht vorgesehen und wird hier nur zur Einführung und Anschauung
|
||||||
|
verwendet.<br><br>
|
||||||
|
<article>
|
||||||
|
<p>Es wirken nur die Eigenschaften des
|
||||||
|
<code><body></code>
|
||||||
|
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.</p>
|
||||||
|
<h1 id="sections">Bereiche</h1>
|
||||||
|
<section>
|
||||||
|
<p>Ein Abschnitt, welcher für sich alleine stehen kann, definiert sich durch
|
||||||
|
<code><article></code>. Solch ein Element wird oft detailliert gestaltet, kommt aber auch ohne
|
||||||
|
jegliche Gestaltung aus.</p>
|
||||||
|
<p>Noch allgemeiner ist das
|
||||||
|
<code><section></code>
|
||||||
|
Element. Es schafft Bereiche, um Inhalte zu strukturieren.</p>
|
||||||
|
<p>Bestimmte Bereiche haben einen vorgegebenen Zweck.<br>Folgende Bereiche sind vorgegeben:</p>
|
||||||
|
</section>
|
||||||
|
<!-- <div class="overflow"> -->
|
||||||
|
<aside class="left">
|
||||||
|
<p>Ein Bereich, der seitlich zum hauptsächlichen Inhalt verläuft, wird mit
|
||||||
|
<code><aside></code>
|
||||||
|
markiert.</p>
|
||||||
|
</aside>
|
||||||
|
<section class="bside">
|
||||||
|
<header>
|
||||||
|
<p>Um einleitenden Inhalt festzuhalten, wird das
|
||||||
|
<code><header></code>
|
||||||
|
Element eingesetzt. Es beinhaltet häufig auch Navigationselemente. Dabei bezieht es sich auf den
|
||||||
|
nächsten, umgebenden Abschnitt.</p>
|
||||||
|
<nav>
|
||||||
|
<p>Das Element
|
||||||
|
<code><nav></code>
|
||||||
|
umfasst Elemente, die zur Navigation innerhalb des Dokumentes dienen.</p>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<footer>
|
||||||
|
<p>Auch abschließender Inhalt kann für einen Abschnitt definiert werden. Dazu wird
|
||||||
|
<code><footer></code>
|
||||||
|
eingesetzt.</p>
|
||||||
|
</footer>
|
||||||
|
</section>
|
||||||
|
<!-- </div> -->
|
||||||
|
<p>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.</p>
|
||||||
|
<h1>Überschrift 1</h1>
|
||||||
|
<p>Eine Überschrift erster Ordnung
|
||||||
|
<code><h1></code>
|
||||||
|
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.</p>
|
||||||
|
<h2>Überschrift 2</h2>
|
||||||
|
<p>Die weiteren Überschriften
|
||||||
|
<code><h2></code>
|
||||||
|
bis
|
||||||
|
<code><h6></code>
|
||||||
|
gliedern Text und werden auch als Titel für andere Elemente eingesetzt.</p>
|
||||||
|
<h3>Überschrift 3 ist in Großbuchstaben gesetzt</h3>
|
||||||
|
<h4>Überschrift 4 verwendet normale Buchstaben und gleicht ansonsten Überschrift 3</h4>
|
||||||
|
<h5>Überschrift 5 ist Überschrift 5</h5>
|
||||||
|
<hgroup>
|
||||||
|
<h6>Überschrift 6</h6>
|
||||||
|
<p>Überschriften können mit dem Element <code><hgroup></code> mit Absätzen gruppiert werden, um
|
||||||
|
beispielsweise Untertitel abzubilden.</p>
|
||||||
|
</hgroup>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="grouping">Gruppierung</h1>
|
||||||
|
<p>Ein Absatz
|
||||||
|
<code><p></code>. Zugegeben ein kurzer.</p>
|
||||||
|
<p>Aus mehreren Absätzen wird ein ganzer Text. Solche Texte haben gelegentlich großen informativen oder
|
||||||
|
unterhaltsamen Charakter.<br>Einfache Zeilenumbrüche werden darin mit
|
||||||
|
<code><br></code>
|
||||||
|
erreicht. Dies ist allerdings ein Element der Textebene und keine Gruppierung.</p>
|
||||||
|
<p>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:</p>
|
||||||
|
<p class="txt_center js_pop">Text sitzt gerne auch mal zentriert.</p>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">p.txt_center</code>
|
||||||
|
</div>
|
||||||
|
<p class="txt_right js_pop">Rechtsbündig ist schon eher eine Ausnahme bzw. Besonderheit.</p>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">p.txt_right</code>
|
||||||
|
</div>
|
||||||
|
<address>Das Element
|
||||||
|
<code><address></code>
|
||||||
|
hat den Zweck, Kontaktinformationen bereitzustellen. Diese werden, je nach Position des Elements im
|
||||||
|
Kontext der gesamten Seite, anders gewertet.
|
||||||
|
</address>
|
||||||
|
<p>Texte können auf verschiedene Arten unterteilt werden. Dafür werden unterschiedlich formatierte
|
||||||
|
<code><hr></code>
|
||||||
|
Elemente verwendet. Die horizontale Linie ist die Ausgangsformatierung, daher auch der abgekürzte Name des
|
||||||
|
Elements. Eine Linie ist schwarz und durchgezogen.</p>
|
||||||
|
<hr/>
|
||||||
|
<p>Es ist auch eine unsichtbare Unterteilung möglich:</p>
|
||||||
|
<hr class="hidden js_pop"/>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">hr.hidden</code>
|
||||||
|
</div>
|
||||||
|
<p>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%:</p>
|
||||||
|
<hr class="dotted js_pop"/>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">hr.dotted</code>
|
||||||
|
</div>
|
||||||
|
<hr class="space_even_half js_pop"/>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">hr.space_even_half</code>
|
||||||
|
</div>
|
||||||
|
<hr class="dotted space_even_fourth js_pop"/>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">hr.dotted.space_even_fourth</code>
|
||||||
|
</div>
|
||||||
|
<p class="column_2 js_pop">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>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">p.column_2</code>
|
||||||
|
</div>
|
||||||
|
<p class="column_3 column_line js_pop">Drei Spalten gilt es jetzt also zu füllen. Dann erst wird die Trennung
|
||||||
|
der Spalten durch eine Linie sichtbar.</p>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">p.column_3.column_line</code>
|
||||||
|
</div>
|
||||||
|
<p class="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.<br>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.<br>Auch
|
||||||
|
das zeigen diese beiden Absätze ganz gut.</p>
|
||||||
|
<p>Es gibt die Möglichkeit vorformatierten Text darzustellen
|
||||||
|
<code><pre></code>.</p>
|
||||||
|
<pre>dadurch<br> bleiben<br> einrückungen<br> durch<br> tabulatoren<br> erhalten.</pre>
|
||||||
|
<p>Wird Bezug auf fremde Inhalte genommen, kommt ein Zitat
|
||||||
|
<code><blockquote></code>
|
||||||
|
zur Anwendung. Es besteht aus der Aussage und der Quelle.</p>
|
||||||
|
<blockquote class="js_pop" cite="https://de.wikipedia.org/wiki/Zitat/">
|
||||||
|
<p>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.</p>
|
||||||
|
<p class="quote_source">
|
||||||
|
<a href="https://de.wikipedia.org/wiki/Zitat/">Wikipedia</a>
|
||||||
|
</p>
|
||||||
|
</blockquote>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">blockquote>p+p.quote_source</code>
|
||||||
|
</div>
|
||||||
|
<p>Gerade bei wörtlichen Zitierungen kommt häufig das Anführungszeichen zum Einsatz. Es kann durch die
|
||||||
|
Formatierung automatisch ergänzt werden.</p>
|
||||||
|
<blockquote class="quote_mark js_pop" cite="">
|
||||||
|
<p>Das kannst du schon so machen aber dann isses halt Kacke.</p>
|
||||||
|
<p class="quote_source">o. V.</p>
|
||||||
|
</blockquote>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">blockquote.quote_mark>p+p.quote_source</code>
|
||||||
|
</div>
|
||||||
|
<h2>Listen</h2>
|
||||||
|
<p>Text bekommt durch Listen besondere optische wie auch inhaltliche Struktur. Es gibt ungeordnete
|
||||||
|
<code><ul></code>
|
||||||
|
und geordnete Listen
|
||||||
|
<code><ol></code>
|
||||||
|
sowie Beschreibungslisten
|
||||||
|
<code><dl></code>. Die beiden ersten Varianten beinhalten das Listenelement
|
||||||
|
<code><li></code>. Beschreibungslisten beinhalten jeweils das Paar von Ausdruck
|
||||||
|
<code><dt></code>
|
||||||
|
und Beschreibung
|
||||||
|
<code><dd></code>. Im Folgenden eine Liste der Listen in ihrer Ausgangskonfiguration:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Ungeordnete</li>
|
||||||
|
<li>Listen</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="list_dash">
|
||||||
|
<li>Verschiedener</li>
|
||||||
|
<li>Art</li>
|
||||||
|
</ul>
|
||||||
|
<ol>
|
||||||
|
<li>Geordnete</li>
|
||||||
|
<li>Liste</li>
|
||||||
|
</ol>
|
||||||
|
<dl>
|
||||||
|
<dt>Beschreibungsliste</dt>
|
||||||
|
<dd>Auch Definitionslisten genannt</dd>
|
||||||
|
<dt>Ausdruck</dt>
|
||||||
|
<dd>Beschreibung</dd>
|
||||||
|
</dl>
|
||||||
|
<p>Auch Inhalte, die nicht in Textform sind, können durch einen Bezug integriert werden. Wie diese Fahne werden
|
||||||
|
sie mit
|
||||||
|
<code><figure></code>
|
||||||
|
umschlossen und tragen eine Bezeichnung, welche mit
|
||||||
|
<code><figcaption></code>
|
||||||
|
ausgezeichnet wird.</p>
|
||||||
|
<figure class="js_pop">
|
||||||
|
<figcaption>Fahne</figcaption>
|
||||||
|
{% comment %}// TODO: Durch Platzhalter ersetzten und Prozentangaben ermöglichen{% endcomment %}
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||||
|
y="0px" width="10%" height="10%" viewbox="0 0 1920 1200" preserveaspectratio="xMinYMax slice">
|
||||||
|
<desc>Flag</desc>
|
||||||
|
<rect id="triangle-5" y="0" fill="#273F8B" width="1920" height="1200"/>
|
||||||
|
<polygon id="triangle-6" fill="#8E1F68" points="0,1200 1920,458.25 1920,1200 "/>
|
||||||
|
<polygon id="triangle-7" fill="#D30A51" points="0,1200 1920,522.75 1920,1200 "/>
|
||||||
|
<polygon id="triangle-8" fill="#F2AF13" points="0,1200 1920,741.75 1920,1200 "/>
|
||||||
|
<polygon id="triangle-9" fill="#FAD803" points="0,1200 1920,787.5 1920,1200 "/>
|
||||||
|
<polygon id="triangle-4" fill="#3C579A" points="0,1200 0,0 733.5,0 "/>
|
||||||
|
<polygon id="triangle-3" fill="#B7E0F0" points="0,1200 0,0 688.5,0 "/>
|
||||||
|
<polygon id="triangle-2" fill="#6BC7D9" points="0,1200 0,0 453,0 "/>
|
||||||
|
<polygon id="triangle-1" fill="#52BED1" points="0,1200 0,0 370.5,0 "/>
|
||||||
|
</svg>
|
||||||
|
</figure>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">figure>figcaption+{element}</code>
|
||||||
|
</div>
|
||||||
|
<hr class="hidden">
|
||||||
|
<p>Eine sehr klar definierte Gruppierung stellt das Element
|
||||||
|
<code><main></code>
|
||||||
|
dar. Es umschließt den hauptsächlichen Inhalt des Dokumentes.</p>
|
||||||
|
<p>Eine von sich aus undefinierte Möglichkeit zur Gruppierung von Text besteht durch
|
||||||
|
<code><div></code>. Dieses Element hat, ohne weitere Klassifizierung keine Auswirkungen auf die
|
||||||
|
Erscheinung oder die inhaltliche Aussage. Daher der allgemeine Einsatz.</p>
|
||||||
|
<div class="div_info js_pop">
|
||||||
|
<p>Es wird allerdings häufig eingesetzt und bekommt vielfältige Funktionen zugeordnet wie diese
|
||||||
|
hervorgehobene Information zeigt.</p>
|
||||||
|
</div>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">div.div_info>p</code>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="textlevel">Textebene</h1>
|
||||||
|
<h2>Verweise</h2>
|
||||||
|
<p id="links">Ein wesentlicher Bestandteil von Hypertext sind <a href="">Verweise</a>
|
||||||
|
<code><a></code>. Sie dienen als Sprungmarken innerhalb des Netzwerks. Es kann grob zwischen internen
|
||||||
|
und externen Verweisen unterschieden werden.
|
||||||
|
<a class="a_internal js_pop" href="#links">Interne Verweise</a>
|
||||||
|
<span class="exp_pop">
|
||||||
|
<code class="code_solo">a.a_line</code>
|
||||||
|
</span>
|
||||||
|
können Verknüpfungen innerhalb des aktuellen Dokumentes sein oder auch Funktionen aktivieren.
|
||||||
|
<a class="a_external" href="https://de.wikipedia.org">Externe Verweise</a>
|
||||||
|
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
|
||||||
|
<b>alles</b>
|
||||||
|
auslösen. Anweisungen werden im
|
||||||
|
<a href="https://tools.ietf.org/html/rfc1738">URL-Standard</a>
|
||||||
|
übergeben.</p>
|
||||||
|
<p>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.
|
||||||
|
<a class="a_internal" href="#">Farbige</a>
|
||||||
|
oder
|
||||||
|
<a class="a_line" href="#">unterstrichene Varianten</a>
|
||||||
|
sind einfache Beispiele.</p>
|
||||||
|
<p>Wird der Verweis innerhalb eines
|
||||||
|
<code><nav></code>
|
||||||
|
Elementes notiert, bekommt er die spezielle Bedeutung eines Navigationsverweises innerhalb des Dokumentes
|
||||||
|
oder der Anwendung. Verweise werden dann durchaus auch wie Schaltflächen dargestellt.</p>
|
||||||
|
<nav>
|
||||||
|
<p>
|
||||||
|
<a class="a_button_text" href="#textlevel">↥</a>
|
||||||
|
(Zum Anfang des Abschnitts springen)
|
||||||
|
<a class="a_button_text" href="#">⇫</a>
|
||||||
|
(Zum Anfang der Seite springen)</p>
|
||||||
|
</nav>
|
||||||
|
<nav class="nav_center_old">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="/demo/examples/start.html" class="a_button">Startseite</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="" class="a_button a_internal">Hilfe</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="" class="a_button">⌨</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="" class="a_button">⋯</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<h2>Formatierungen</h2>
|
||||||
|
<p>Texte, Wörter oder Zeichen können vielfältig formatiert werden.</p>
|
||||||
|
<p>Sie können
|
||||||
|
<b>fett</b>
|
||||||
|
<code><b></code>
|
||||||
|
oder
|
||||||
|
<i>kursiv</i>
|
||||||
|
<code><i></code>
|
||||||
|
geschrieben sein.
|
||||||
|
<b>
|
||||||
|
<i>Auch beides ist möglich!</i>?</b>! Sollen sie nicht nur anders
|
||||||
|
<strong>aussehen</strong>, sondern auch
|
||||||
|
<em>eine besondere inhaltliche Bedeutung</em>
|
||||||
|
bekommen, werden sie mit
|
||||||
|
<code><strong></code>
|
||||||
|
und
|
||||||
|
<code><em></code>
|
||||||
|
ausgezeichnet.</p>
|
||||||
|
<p>Das
|
||||||
|
<code><u></code>
|
||||||
|
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
|
||||||
|
<u>Interaktionsweise</u>, oder die Beschriftung des Textes als
|
||||||
|
<u>flasch</u>
|
||||||
|
(falsch) geschrieben.</p>
|
||||||
|
<p>Ähnlich ist es mit dem Element
|
||||||
|
<code><small></code>.
|
||||||
|
<small>Es steht für Randnotizen, wird aber häufig auch kleiner dargestellt.</small>
|
||||||
|
</p>
|
||||||
|
<p>Ist ein Text nicht mehr korrekt oder relevant kann er mit
|
||||||
|
<code><s></code>
|
||||||
|
markiert werden:<br>
|
||||||
|
<s>Die Erde ist eine Scheibe.</s>
|
||||||
|
</p>
|
||||||
|
<p>Ein besonderer inhaltlicher Bezug ist der Titel eines Werkes. So was kann mit
|
||||||
|
<code><cite></code>
|
||||||
|
ausgezeichnet werden.
|
||||||
|
<cite>Pulp Fiction</cite>, ist ein super Film - zum Beispiel.</p>
|
||||||
|
<p>Um ein Zitat direkt im Text zu verwenden benutzt man das
|
||||||
|
<code><q></code>
|
||||||
|
Element. Es platziert Anführungszeichen um die Aussage:</p>
|
||||||
|
<p>Sie sagte:
|
||||||
|
<q>Du wolltest staubsaugen!</q><br>Er sagte:
|
||||||
|
<q>Mach' ich morgen.</q>
|
||||||
|
</p>
|
||||||
|
<p>Mit dem
|
||||||
|
<code><dfn></code>
|
||||||
|
Element werden Begriffe definiert. Es wird häufig mit dem Element für Abkürzungen
|
||||||
|
<code><abbr></code>
|
||||||
|
gemeinsam verwendet. Die eigentliche Definition kann dabei auch im Attribut
|
||||||
|
<code>title</code>
|
||||||
|
stehen. Dies ist ein globales Attribut, das erklärende Informationen zu dem Element enthält. Diese wird
|
||||||
|
typischerweise beim darauf Zeigen eingeblendet.</p>
|
||||||
|
<p>
|
||||||
|
<dfn>
|
||||||
|
<abbr title="Hippie interweaves preeminent personal interface elements">HIPPIE</abbr>
|
||||||
|
</dfn>
|
||||||
|
is a recursive acronym for
|
||||||
|
<dfn>Hippie interweaves preeminent personal interface elements</dfn>.</p>
|
||||||
|
<p>Die besondere Auszeichnung
|
||||||
|
<code><ruby></code>
|
||||||
|
<q cite="https://de.wikipedia.org/wiki/Ruby_Annotation">bezeichnet ein Anmerkungssystem, bei dem der Text
|
||||||
|
zusammen mit seiner Anmerkung in einer Zeile erscheint.</q>
|
||||||
|
Das System verwendet die folgenden weiteren Elemente mit spezifischer Bedeutung:</p>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<code><rb></code>
|
||||||
|
</dt>
|
||||||
|
<dd>Basis Textkomponente</dd>
|
||||||
|
<dt>
|
||||||
|
<code><rt></code>
|
||||||
|
</dt>
|
||||||
|
<dd>Annotation</dd>
|
||||||
|
<dt>
|
||||||
|
<code><rtc></code>
|
||||||
|
</dt>
|
||||||
|
<dd>Einzelne Komponente einer Annotation</dd>
|
||||||
|
<dt>
|
||||||
|
<code><rp></code>
|
||||||
|
</dt>
|
||||||
|
<dd>Alternative bei fehlender Unterstützung</dd>
|
||||||
|
</dl>
|
||||||
|
<hr class="dotted space_even_half">
|
||||||
|
<div class="txt_center">
|
||||||
|
<ruby class="space_right_small">
|
||||||
|
<rb>Basis</rb>
|
||||||
|
<rt>Auszeichnung</rt>
|
||||||
|
</ruby>
|
||||||
|
<ruby class="space_right_small">
|
||||||
|
<rb>今日</rb>
|
||||||
|
<rt>きょう</rt>
|
||||||
|
</ruby>
|
||||||
|
<ruby>
|
||||||
|
♥
|
||||||
|
<rp>:
|
||||||
|
</rp>
|
||||||
|
<rt>Herz</rt>
|
||||||
|
<rp>,
|
||||||
|
</rp>
|
||||||
|
<rtc>
|
||||||
|
<rt lang="fr">Cœur</rt>
|
||||||
|
</rtc>
|
||||||
|
<rp>.</rp>
|
||||||
|
☘
|
||||||
|
<rp>:
|
||||||
|
</rp>
|
||||||
|
<rt>Kleeblatt</rt>
|
||||||
|
<rp>,
|
||||||
|
</rp>
|
||||||
|
<rtc>
|
||||||
|
<rt lang="fr">Trèfle</rt>
|
||||||
|
</rtc>
|
||||||
|
<rp>.</rp>
|
||||||
|
✶
|
||||||
|
<rp>:
|
||||||
|
</rp>
|
||||||
|
<rt>Stern</rt>
|
||||||
|
<rp>,
|
||||||
|
</rp>
|
||||||
|
<rtc>
|
||||||
|
<rt lang="fr">Étoile</rt>
|
||||||
|
</rtc>
|
||||||
|
<rp>.</rp>
|
||||||
|
</ruby>
|
||||||
|
</div>
|
||||||
|
<hr class="dotted space_even_half">
|
||||||
|
<p>Wikipedia erklärt dies ausführlicher unter
|
||||||
|
<a href="https://de.wikipedia.org/wiki/Ruby_Annotation">Ruby Annotation</a>.</p>
|
||||||
|
<p>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
|
||||||
|
<code><data></code>
|
||||||
|
und
|
||||||
|
<code><time></code>
|
||||||
|
enthalten eine maschinen-lesbare Repräsentation des Inhaltes:</p>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<data value="0">0</data>
|
||||||
|
≠
|
||||||
|
<data value="">NULL</data>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<code><data>0</data> ≠ <data>NULL</data></code>
|
||||||
|
</dd>
|
||||||
|
<dt>Der Wert
|
||||||
|
<data value="NULL">NULL</data>
|
||||||
|
mit Attribut
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<code><data value="NULL">NULL</data></code>
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
<time>2018-10-08</time>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<code><time>2018-10-08</time></code>
|
||||||
|
</dd>
|
||||||
|
<dt>Die Zeitangabe
|
||||||
|
<i>
|
||||||
|
<time datetime="2018-10-08">Gestern</time>
|
||||||
|
</i>
|
||||||
|
mit Attribut
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
<code><time datetime="2018-10-08">Gestern</time></code>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>Die Auszeichnung
|
||||||
|
<code><code></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.</p>
|
||||||
|
<p>Für zusammenhängende Blöcke wird die Auszeichnung oft in Kombination mit dem Element
|
||||||
|
<code><pre></code>
|
||||||
|
verwendet:</p>
|
||||||
|
<pre class="pre_code"><code><html><br> <head><br> <title>hyper text markup language</title><br> </head><br> <body id="root"><br> <!-- content goes here --><br> <p class="example">just like this.</p><br> </body><br></html></code></pre>
|
||||||
|
<p>Dabei bleiben vorhandene Textformatierungen wie Zeilenumbrüche und Einrückung erhalten.</p>
|
||||||
|
<p>
|
||||||
|
<code>var def = "Definition einer Variablen";</code>
|
||||||
|
</p>
|
||||||
|
<p>In diesem Beispiel wird die Variable
|
||||||
|
<var>def</var>
|
||||||
|
definiert. Solch ein spezieller Typ Text kann mit dem dafür vorgesehenen Element
|
||||||
|
<code><var></code>
|
||||||
|
ausgezeichnet werden.</p>
|
||||||
|
<p>Soll beispielhaft auf Ausgaben von Computern verwiesen werden, wird das
|
||||||
|
<code><samp></code>
|
||||||
|
Element verwendet. Der Computer hat gesagt:
|
||||||
|
<samp>Ich kann das angegebene Objekt nicht finden</samp>.</p>
|
||||||
|
<p>Benutzereingaben haben ebenfalls ein eigenes Element
|
||||||
|
<code><kbd></code>. Damit werden Eingaben durch den Nutzer, wie zum Beispiel
|
||||||
|
<q>Drücken Sie gleichzeitig <kbd>Strg</kbd> und <kbd>A</kbd></q>, gekennzeichnet.</p>
|
||||||
|
<p>Hoch- und Tiefgestellte Zeichen werden durch die Elemente
|
||||||
|
<code><sup></code>
|
||||||
|
und
|
||||||
|
<code><sub></code>
|
||||||
|
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:</p>
|
||||||
|
<p>Beispielsweise die Formel
|
||||||
|
<var>E</var>=<var>m</var>
|
||||||
|
<var>c</var>
|
||||||
|
<sup>2</sup>
|
||||||
|
oder das Element H<sub>2</sub>O</p>
|
||||||
|
<p>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:</p>
|
||||||
|
<p class="txt_center">Bei<mark class="mark_cursor">spiel zum mark</mark>ieren 😉.</p>
|
||||||
|
<p>Eine Markierung kann, mittels
|
||||||
|
<code><mark></code>, auch durch den Autor geschehen. Diese stellt sich ein wenig anders dar:
|
||||||
|
<mark>Diese Worte sind markiert.</mark>
|
||||||
|
</p>
|
||||||
|
<p>Um Text, dessen schreibweise nicht vorhersehbar ist, zu markieren wie z.B. Benutzernamen
|
||||||
|
<bdi>كائن بشري</bdi>
|
||||||
|
, die auch rechtsbündig geschrieben sein können, wird das
|
||||||
|
<code><bdi></code>
|
||||||
|
Element eingesetzt.<br>Die Schreibweise kann auch vom Author vorgegeben und expliziert geändert werden.
|
||||||
|
Dies wird dem
|
||||||
|
<code><bdo></code>
|
||||||
|
Element umgesetzt. Die Richtung wird dann mit dem Attribut
|
||||||
|
<code>dir</code>
|
||||||
|
angegeben.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<bdo dir="rtl">كائن بشري</bdo>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<bdo dir="rtl">إنسان آلي</bdo>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>Neben den vielen speziellen Elementen gibt es auch ein Element, das keine vordefinierte Bedeutung hat. Es ist
|
||||||
|
das
|
||||||
|
<code><span></code>
|
||||||
|
Element.<br>Es dient dazu ganz individuelle Auszeichnungen zu ermöglichen die eher optische Auswirkungen
|
||||||
|
haben und eben keine inhaltlichen. Mit den Attributen
|
||||||
|
<code>id</code>
|
||||||
|
oder
|
||||||
|
<code>class</code>
|
||||||
|
werden dazu eigene Typen des Elements definiert. Diese Möglichkeit der Definition von individuellen
|
||||||
|
Elementen ist ein Grundprinzip der Auszeichnungssprache
|
||||||
|
<abbr title="Hypertext Markup Language">HTML</abbr>.</p>
|
||||||
|
<p>Mit der Einführung von Absätzen wurde auch schon das
|
||||||
|
<code><br></code>
|
||||||
|
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.</p>
|
||||||
|
<p>Eine besondere Form des Zeilenumbruchs kann mit
|
||||||
|
<code><wbr></code>
|
||||||
|
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.</p>
|
||||||
|
<p>Und der Löwe brüllte "RRRR
|
||||||
|
<wbr>
|
||||||
|
rrrr
|
||||||
|
<wbr>
|
||||||
|
oooooooo
|
||||||
|
<wbr>
|
||||||
|
aaaa
|
||||||
|
<wbr>
|
||||||
|
AAAAAAAA
|
||||||
|
<wbr>
|
||||||
|
HHHH
|
||||||
|
<wbr>
|
||||||
|
hhhh
|
||||||
|
<wbr>
|
||||||
|
rrrrrrrrr"!
|
||||||
|
</p>
|
||||||
|
<p>Es kann auch innerhalb von vorformatierten Texten Zeilenumbrüche ermöglichen</p>
|
||||||
|
<h2>Änderungen</h2>
|
||||||
|
<p>Werden Texte geändert, können solche Änderungen sichtbar gemacht werden. Somit können sie besser
|
||||||
|
nachvollzogen werden.<br>Zum Beispiel eine Ergänzung von Inhalt.</p>
|
||||||
|
<aside class="left">
|
||||||
|
<ins>Dies ist auch wichtig.</ins>
|
||||||
|
</aside>
|
||||||
|
<p>Der Inhalt wird dann mit
|
||||||
|
<code><ins></code>
|
||||||
|
ausgezeichnet. Wird Text entfernt, kommt
|
||||||
|
<code><del></code>
|
||||||
|
zum Einsatz.</p>
|
||||||
|
<h6>Zu Tun</h6>
|
||||||
|
<ul>
|
||||||
|
<li>Fahrrad reparieren</li>
|
||||||
|
<li>
|
||||||
|
<del>Staubsaugen</del>
|
||||||
|
</li>
|
||||||
|
<li>Tisch bauen</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="embedded">Eingebundene Inhalte</h1>
|
||||||
|
{% render 'hippie-view/partials/placeholder-flag.liquid', type: 'img', width: '128', desc: 'Fahne von Interaktionsweise' %}
|
||||||
|
<p>Dies ist ein Bild. Es wird mit dem Element
|
||||||
|
<code><img></code>
|
||||||
|
eingebunden. Solch ein Bild hat üblicherweise die Attribute
|
||||||
|
<code>width</code>
|
||||||
|
und
|
||||||
|
<code>height</code>. Mit ihnen werden die Abmessungen (Breite und Höhe) festgelegt. Außerdem sollte immer
|
||||||
|
das Attribut
|
||||||
|
<code>alt</code>
|
||||||
|
für eine alternative Beschreibung in Textform verwendet werden.</p>
|
||||||
|
<p>Das Bild selbst liegt normalerweise als Datei vor. Die Quelle wird mit dem Attribut
|
||||||
|
<code>src</code>
|
||||||
|
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
|
||||||
|
<code><source></code>
|
||||||
|
und
|
||||||
|
<code><picture></code>
|
||||||
|
in Kombination verwendet werden.</p>
|
||||||
|
{% render 'hippie-view/partials/placeholder-flag.liquid', type: 'img', src: 'file', width: '128', desc: 'Fahne von Interaktionsweise' %}
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1>Tabellen</h1>
|
||||||
|
<p>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.</p>
|
||||||
|
<table class="width_full js_pop">
|
||||||
|
<tr>
|
||||||
|
<td>Eine</td>
|
||||||
|
<td>einfache</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">Tabelle</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">table.width_full>tr>td*2^tr>td[colspan=2]</code>
|
||||||
|
</div>
|
||||||
|
<div class="overflow">
|
||||||
|
<table class="float_space_left js_pop">
|
||||||
|
<tr>
|
||||||
|
<td>Eine</td>
|
||||||
|
<td>freie (nicht fixierte)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">Tabelle</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">table>tr>td*2^tr>td[colspan=2]</code>
|
||||||
|
</div>
|
||||||
|
<table class="blank float_space_left js_pop">
|
||||||
|
<tr>
|
||||||
|
<td>Mit</td>
|
||||||
|
<td>ohne</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">Linien</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">table.blank>tr>td*2^tr>td[colspan=2]</code>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p>Die nächste Tabelle verwendet alle zur Auszeichnung verfügbaren Elemente und hat eine starre
|
||||||
|
Zellverteilung:</p>
|
||||||
|
<table class="width_full fix js_pop">
|
||||||
|
<caption>Beschreibung bzw. Zusammenhang der Tabelle</caption>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Kopfzeile</th>
|
||||||
|
<th>A</th>
|
||||||
|
<th>B</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Tabelle</td>
|
||||||
|
<td colspan="2"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>mit</td>
|
||||||
|
<td>Titel</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2"></td>
|
||||||
|
<td>Kopf-</td>
|
||||||
|
<td>und</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>Fußzeile</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Fußzeile</th>
|
||||||
|
<td>A</td>
|
||||||
|
<td>B</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
<div class="exp_pop">
|
||||||
|
<code class="code_solo">table.width_full.fix>caption+thead>tr>th[scope="col"]*3^^tbody>(tr>td*3)*3^^tfoot>tr>th[scope="row"]+td*2</code>
|
||||||
|
</div>
|
||||||
|
<p>Viele weitere Formate sind möglich.</p>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1>Formulare</h1>
|
||||||
|
<p>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.<br>Üblicherweise stehen alle
|
||||||
|
Bedienelemente innerhalb eines
|
||||||
|
<code><form></code>
|
||||||
|
Elementes. Dieses ist notwendig um Angaben zur Kommunikation mit dem Server zu setzen. Es hat normalerweise
|
||||||
|
keine gestalterische Funktion.</p>
|
||||||
|
<p>Grundlegend ist das Element
|
||||||
|
<code><input></code>. 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.</p>
|
||||||
|
<p><input value="Undefiniert"/><input class="input_io" value="Undefiniert mit Stil"/></p>
|
||||||
|
<p>Ein spezieller Typ des Eingabefeldes hat die Funktion einer Schaltfläche
|
||||||
|
<code><input[type="button"]></code>. Es gibt allerdings auch ein eigenes Element
|
||||||
|
<code><button></code>
|
||||||
|
dafür.</p>
|
||||||
|
<p><input type="button" value="Input Button">
|
||||||
|
<button>Button</button>
|
||||||
|
</p>
|
||||||
|
<p><input class="button_io" type="button" value="Input Button">
|
||||||
|
<button class="button_io">Button</button>
|
||||||
|
</p>
|
||||||
|
<p>Interaktive Elemente können durch das Attribut
|
||||||
|
<code>readonly</code>
|
||||||
|
nur lesbar gemacht werden oder mittels
|
||||||
|
<code>disabled</code>
|
||||||
|
gänzlich deaktiviert werden.</p>
|
||||||
|
{% comment %}// TODO: Abstände, besonders margin generell überarbeiten{% endcomment %}
|
||||||
|
<p><input type="text" value="Nur lesbare Eingabe" readonly="readonly"><input type="text"
|
||||||
|
value="Deaktivierte Eingabe"
|
||||||
|
size="21" disabled="disabled">
|
||||||
|
<button disabled="disabled">Deaktivierte Schaltfläche</button>
|
||||||
|
</p>
|
||||||
|
<p><input class="input_io" type="text" value="Nur lesbare Eingabe" readonly="readonly"><input class="input_io"
|
||||||
|
type="text"
|
||||||
|
value="Deaktivierte Eingabe"
|
||||||
|
size="21"
|
||||||
|
disabled="disabled">
|
||||||
|
<button class="button_io" disabled="disabled">Deaktivierte Schaltfläche</button>
|
||||||
|
</p>
|
||||||
|
<p>Das Element
|
||||||
|
<code><label></code>
|
||||||
|
ergänzt interaktive Elemente um eine Beschriftung. Wichtig ist hier, dass die Beziehung beider Elemente
|
||||||
|
zueinander deutlich ist.</p>
|
||||||
|
<p>
|
||||||
|
<label>Beschriftung:<input type="text"></label>
|
||||||
|
</p>
|
||||||
|
<div class="overflow">
|
||||||
|
<div class="float_left">
|
||||||
|
<table class="fix blank">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="demo__raw_a">Alpha:</label>
|
||||||
|
</td>
|
||||||
|
<td><input type="text" id="demo__raw_a"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="demo__raw_b">Beta:</label>
|
||||||
|
</td>
|
||||||
|
<td><input type="text" id="demo__raw_b"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<table class="float_right">
|
||||||
|
<tr>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="text" id="demo__io_d"
|
||||||
|
value="11.966504" size="10"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_a">x</label>
|
||||||
|
</td>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="number"
|
||||||
|
id="demo__io_a" value="10" min="0"
|
||||||
|
max="1000"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_a">Breite</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="text" id="demo__io_e"
|
||||||
|
value="51.503491" size="10"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_b">y</label>
|
||||||
|
</td>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="number"
|
||||||
|
id="demo__io_b" value="10" min="0"
|
||||||
|
max="1000"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_b">Tiefe</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="text" id="demo__io_f"
|
||||||
|
value="88" size="10"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_c">z</label>
|
||||||
|
</td>
|
||||||
|
<td class="txt_right demo__td_no_br demo__td_pl"><input class="input_io" type="number"
|
||||||
|
id="demo__io_c" value="48" min="0"
|
||||||
|
max="1000"></td>
|
||||||
|
<td class="demo__td_pr">
|
||||||
|
<label for="demo__io_c">Höhe</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p>Zusätzlich zur Beschriftung einzelner Elemente gibt es auch die Möglichkeit Gruppierungen zu schaffen. Diese
|
||||||
|
werden mit
|
||||||
|
<code><fieldset></code>
|
||||||
|
realisiert.</p>
|
||||||
|
<fieldset>
|
||||||
|
<div class="dis_grid grid_column_2">
|
||||||
|
<label for="demo__input">Input:</label><input class="input_io" type="text" value="love"
|
||||||
|
readonly="readonly" id="demo__input">
|
||||||
|
<label for="demo__output">Output:</label><input class="input_io" type="text" value="happiness"
|
||||||
|
readonly="readonly" id="demo__output">
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<p>Sie können mittels
|
||||||
|
<code><legend></code>
|
||||||
|
auch eine eigene Beschriftung erhalten.</p>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Einfache Eingabeelemente</legend>
|
||||||
|
<div class="dis_grid grid_column_2">
|
||||||
|
<label>Schaltflächen:</label>
|
||||||
|
<div>
|
||||||
|
<button>Senden</button>
|
||||||
|
<input type="reset" value="Abbrechen"></div>
|
||||||
|
<label>Zeicheneingaben:</label>
|
||||||
|
<div><input type="text" placeholder="Text"><input type="number" value="0815"></div>
|
||||||
|
<label>Einzelauswahl:</label>
|
||||||
|
<div><input type="radio" name="direction" value="up" checked="checked"/><input type="radio"
|
||||||
|
name="direction"
|
||||||
|
value="down"/></div>
|
||||||
|
<label>Mehrfachauswahl:</label>
|
||||||
|
<div><input type="checkbox" name="speed" value="slow" checked="checked"/><input type="checkbox"
|
||||||
|
name="speed"
|
||||||
|
value="fast"/></div>
|
||||||
|
<label>Auswahllisten:</label>
|
||||||
|
<div>
|
||||||
|
<select class="txt_top">
|
||||||
|
<option value="A" selected="selected">Option A</option>
|
||||||
|
<option value="B">Option B</option>
|
||||||
|
</select>
|
||||||
|
<select class="txt_top" size="3">
|
||||||
|
<option value="red" selected="selected">Rot</option>
|
||||||
|
<option value="green">Grün</option>
|
||||||
|
<option value="blue">Blau</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label>Textfeld:</label>
|
||||||
|
<textarea rows="3">Dies ist ein Eingabefeld für Fließtext. Es bildet auch Zeilenumbrüche ab und hat häufig variable Größen.</textarea>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Einfache Eingabeelemente mit Stil</legend>
|
||||||
|
<div class="dis_grid grid_column_2">
|
||||||
|
<label>Schaltflächen:</label>
|
||||||
|
<div class="flex inline">
|
||||||
|
<button class="button_io">Senden</button>
|
||||||
|
<input class="button_io" type="reset" value="Abbrechen"></div>
|
||||||
|
<label>Zeicheneingaben:</label>
|
||||||
|
<div class="flex inline"><input class="input_io" type="text" placeholder="Text"><input class="input_io"
|
||||||
|
type="number"
|
||||||
|
value="0815">
|
||||||
|
</div>
|
||||||
|
<label>Einzelauswahl:</label>
|
||||||
|
<div><input class="io_radio" type="radio" name="direction" value="up" checked="checked"/><input
|
||||||
|
class="io_radio" type="radio" name="direction" value="down"/></div>
|
||||||
|
<label>Mehrfachauswahl:</label>
|
||||||
|
<div><input class="io_check" type="checkbox" name="speed" value="slow" checked="checked"/><input
|
||||||
|
class="io_check" type="checkbox" name="speed" value="fast"/></div>
|
||||||
|
<label>Auswahllisten:</label>
|
||||||
|
<div class="flex inline">
|
||||||
|
<select class="io_select txt_top">
|
||||||
|
<option value="A" selected="selected">Option A</option>
|
||||||
|
<option value="B">Option B</option>
|
||||||
|
</select><select class="io_select txt_top" size="3">
|
||||||
|
<option value="red" selected="selected">Rot</option>
|
||||||
|
<option value="green">Grün</option>
|
||||||
|
<option value="blue">Blau</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label>Textfeld:</label>
|
||||||
|
<textarea class="io_textarea" rows="3">Dies ist ein Eingabefeld für Fließtext. Es bildet auch Zeilenumbrüche ab und hat häufig variable Größen.</textarea>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Weitere Eingabemöglichkeiten</legend>
|
||||||
|
<p>Innerhalb einer Gruppe können nicht nur Ein- und Ausgabefelder platziert werden. Andere Elemente ergänzen
|
||||||
|
Information oder lockern das Erscheinungsbild auf.</p>
|
||||||
|
<p>Hier nun eine Liste weiterer Arten von Eingabefeldern:</p>
|
||||||
|
<form action="">
|
||||||
|
<div class="dis_grid grid_column_2">
|
||||||
|
<label class="">Farbauswahl<br>
|
||||||
|
<code><input[type="color"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="" type="color"></div>
|
||||||
|
<label class="">Bereichsauswahl<br>
|
||||||
|
<code><input[type="range"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="" type="range"></div>
|
||||||
|
<label class="">Datum<br>
|
||||||
|
<code><input[type="date"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="date"></div>
|
||||||
|
<label class="">Uhrzeit<br>
|
||||||
|
<code><input[type="time"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="time"></div>
|
||||||
|
<label class="">Datum und Zeit<br>
|
||||||
|
<code><input[type="datetime-local"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="datetime-local"></div>
|
||||||
|
<label class="">Kalendermonat<br>
|
||||||
|
<code><input[type="month"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="month"></div>
|
||||||
|
<label class="">Kalenderwoche<br>
|
||||||
|
<code><input[type="week"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="week"></div>
|
||||||
|
<label class="">@dresse<br>
|
||||||
|
<code><input[type="email"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" placeholder="@" type="email"></div>
|
||||||
|
<label class="">Passwort<br>
|
||||||
|
<code><input[type="password"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" value="admin" autocomplete="off" type="password"></div>
|
||||||
|
<label class="">Telefonnummer<br>
|
||||||
|
<code><input[type="tel"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" value="0190123456" type="tel"></div>
|
||||||
|
<label class="">URL<br>
|
||||||
|
<code><input[type="url"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" placeholder="url://" type="url"></div>
|
||||||
|
<label class="">Suche<br>
|
||||||
|
<code><input[type="search"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="input_io" type="search"></div>
|
||||||
|
<label class="">Datei<br>
|
||||||
|
<code><input[type="file"]></code>
|
||||||
|
</label>
|
||||||
|
<div><input class="" type="file"></div>
|
||||||
|
<label class="">Bild</label><input class="" type="image" alt="Alternativer Text"/>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<h2>Interaktive Elemente</h2>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1>Struktur</h1>
|
||||||
|
<div class="box_placeholder"></div>
|
||||||
|
<hr class="hidden"/>
|
||||||
|
<div class="box_placeholder">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||||
|
y="0px" width="100%" height="100%">
|
||||||
|
<line x1='0' y1='0' x2='100%' y2='100%' stroke='#000' stroke-width='.5'/>
|
||||||
|
<line x1='0' y1='100%' x2='100%' y2='0' stroke='#000' stroke-width='.5'/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<hr class="hidden"/>
|
||||||
|
<div class="box_placeholder_bkg"></div>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1>Medien</h1>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1>Druck</h1>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<header class="header_txt">
|
||||||
|
<h1>Ende der Einführung</h1>
|
||||||
|
<p>Dies war eine Übersicht der grundlegenden Elemente. Nun folgen Komponenten mit Kombinationen und
|
||||||
|
erweiterten Formatierungen.</p>
|
||||||
|
</header>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
397
source/view/demo/components.liquid
Normal file
397
source/view/demo/components.liquid
Normal file
|
|
@ -0,0 +1,397 @@
|
||||||
|
---
|
||||||
|
title: Components
|
||||||
|
tags:
|
||||||
|
- demoIndex
|
||||||
|
order: 3
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/page.liquid' %}
|
||||||
|
|
||||||
|
{% block title %}Komponenten{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<section class="sec_main_center">
|
||||||
|
<header class="header_txt">
|
||||||
|
<h1>Medienformat Abfragen</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<div class="demo__query_example">Umbruch bei </div>
|
||||||
|
<div class="demo__queries">
|
||||||
|
<p class="query_phoneUp">Telefone und größer</p>
|
||||||
|
<p class="query_phoneOnly">Nur Telefone</p>
|
||||||
|
<p class="query_tabletPortraitOnly">Nur Schreibtafeln hochkant</p>
|
||||||
|
<p class="query_tabletPortraitUp">Schreibtafeln und größer</p>
|
||||||
|
<p class="query_tabletLandscapeOnly">Schreibtafeln im Querformat</p>
|
||||||
|
<p class="query_tabletLandscapeUp">Schreibtafeln quer und größer</p>
|
||||||
|
<p class="query_desktopOnly">Nur Arbeitsplatzrechner</p>
|
||||||
|
<p class="query_desktopUp">Arbeitsplatzrechner und größer</p>
|
||||||
|
<p class="query_bigDesktopUp">Richtige Monitore und größer</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="sec_main_center">
|
||||||
|
<header class="header_txt">
|
||||||
|
<h1>Übersicht aller Elemente</h1>
|
||||||
|
<p>Es werden alle grundlegenden Elemente sowie ihre gestalteten Varianten angegeben. Die Elemente sind in
|
||||||
|
Gruppen eingeteilt, die auch das W3Consortium (<a
|
||||||
|
href="https://html.spec.whatwg.org/multipage/#toc-semantics">html.spec.whatwg.org/multipage/#toc-semantics</a>)
|
||||||
|
verwendet.</p>
|
||||||
|
<p>Zu jedem Element werden alle Attribute aufgelistet und die Umsetzung im HTML-Dokument als Emmet-Syntax
|
||||||
|
dargestellt.</p>
|
||||||
|
</header>
|
||||||
|
<pre class="pre_code"><code>article>h1+p{Elemente:}+pre+h2{<tag>}+h4{Varianten}</code></pre>
|
||||||
|
<article>
|
||||||
|
<h1 id="sections">Bereiche</h1>
|
||||||
|
<p>Elemente:</p>
|
||||||
|
<pre>// body<br>// article<br>// section<br>// nav<br>// aside<br>// h1-h6<br>// header<br>// footer</pre>
|
||||||
|
<h2><body></h2>
|
||||||
|
<p>Keine speziellen Attribute. Bekommt üblicherweise allgemeine Klassen zur Steuerung der Abmessungen
|
||||||
|
zugewiesen.</p>
|
||||||
|
<h2><article></h2>
|
||||||
|
<article>Ein Artikel.</article>
|
||||||
|
<h2><section></h2>
|
||||||
|
<section>Ein Bereich.</section>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>section.sec_main_center</code></pre>
|
||||||
|
<section class="sec_main_center">
|
||||||
|
<p class="float_right">Ende.</p>
|
||||||
|
<p>Zentrierter Bereich.</p>
|
||||||
|
</section>
|
||||||
|
<pre class="pre_code"><code>section.sec_main_status</code></pre>
|
||||||
|
<section class="sec_main_status">Status-Bereich</section>
|
||||||
|
<h2><nav></h2>
|
||||||
|
<nav>Navigation</nav>
|
||||||
|
<h2><aside></h2>
|
||||||
|
<p>Fließt um andere Inhalte. Klassen zur Positionierung und Kombination mit <code>.bside</code>.</p>
|
||||||
|
<pre class="pre_code"><code>aside.right+div.bside</code></pre>
|
||||||
|
<section>
|
||||||
|
<aside class="right">Seitenbereich, rechts ausgerichtet.</aside>
|
||||||
|
<div class="bside">Hauptbereich</div>
|
||||||
|
</section>
|
||||||
|
<h2><h*></h2>
|
||||||
|
<h1>Überschrift 1</h1>
|
||||||
|
<h2>Überschrift 2</h2>
|
||||||
|
<h3>Überschrift 3</h3>
|
||||||
|
<h4>Überschrift 4</h4>
|
||||||
|
<h5>Überschrift 5</h5>
|
||||||
|
<hgroup>
|
||||||
|
<h6>Überschrift 6</h6>
|
||||||
|
<p>Mit Absatz innerhalb von <code><hgroup></code>.</p>
|
||||||
|
</hgroup>
|
||||||
|
<hgroup>
|
||||||
|
<h2>Überschrift 1 oder 2</h2>
|
||||||
|
<p>Mit Absatz innerhalb von <code><hgroup></code>.</p>
|
||||||
|
</hgroup>
|
||||||
|
<h2><header></h2>
|
||||||
|
<header>Kopfbereich</header>
|
||||||
|
<pre class="pre_code"><code>header.header_page</code></pre>
|
||||||
|
<pre class="pre_code"><code>header.header_txt>h1</code></pre>
|
||||||
|
<header class="header_txt">
|
||||||
|
<h1>Überschrift 1</h1>
|
||||||
|
<p>Innerhalb eines <code><header></code>.</p>
|
||||||
|
</header>
|
||||||
|
<h2><footer></h2>
|
||||||
|
<p>Bekommt üblicherweise Klassen zur Positionierung und der Abmessungen zugewiesen.</p>
|
||||||
|
<footer>Fußbereich</footer>
|
||||||
|
<div style="position:relative;height:256px;background-color:#b7e0f0;">
|
||||||
|
{% render 'hippie-view/partials/footer-pinned.liquid' %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="grouping">Gruppierung</h1>
|
||||||
|
<p>Elemente:</p>
|
||||||
|
<pre>// p // address // hr // pre // blockquote // ol // ul // li // dl // dt // dd // figure // figcaption // main // div</pre>
|
||||||
|
<h2><p></h2>
|
||||||
|
<p>Ein Absatz. Ein <code>code</code> Element innerhalb wird besonders behandelt.</p>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>p.column_2</code></pre>
|
||||||
|
<p class="column_2">Spalten können angegeben werden.</p>
|
||||||
|
<pre class="pre_code"><code>p.column_3.column_line</code></pre>
|
||||||
|
<p class="column_3 column_line">Spalten können angegeben werden.</p>
|
||||||
|
<h2><address></h2>
|
||||||
|
<address>Anschrift, mit bestimmtem, ##### Format.</address>
|
||||||
|
<h2><hr></h2>
|
||||||
|
<hr>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>hr.hidden+hr.dotted+hr.double</code></pre>
|
||||||
|
<hr class="hidden">
|
||||||
|
<hr class="dotted">
|
||||||
|
<hr class="double">
|
||||||
|
<pre class="pre_code"><code>hr.vertical</code></pre>
|
||||||
|
<hr class="vertical">
|
||||||
|
<h2><pre></h2>
|
||||||
|
<pre>Vorformatierter Text.
|
||||||
|
erhält Umbrüche und Einrückung.
|
||||||
|
</pre>
|
||||||
|
<pre class="pre_code"><code>pre.pre_code>code*2</code></pre>
|
||||||
|
<pre class="pre_code"><code>let variable = true;</code>
|
||||||
|
<code>()(){}</code></pre>
|
||||||
|
<h2><blockquote></h2>
|
||||||
|
<blockquote>Ein Zitat ist eingerückt.</blockquote>
|
||||||
|
<pre class="pre_code"><code>blockquote.quote_mark>p+p.quote_source</code></pre>
|
||||||
|
<blockquote class="quote_mark">
|
||||||
|
<p>Zitat mit automatischen Anführungszeichen</p>
|
||||||
|
<p class="quote_source">und Quellenangabe.</p>
|
||||||
|
</blockquote>
|
||||||
|
<h2><dl>, <ol>, <ul></h2>
|
||||||
|
<dl>
|
||||||
|
<dt>Begriff</dt>
|
||||||
|
<dd>Definition</dd>
|
||||||
|
</dl>
|
||||||
|
<ol>
|
||||||
|
<li>Eins</li>
|
||||||
|
<li>Zwei</li>
|
||||||
|
</ol>
|
||||||
|
<ul class="horizontal">
|
||||||
|
<li>Obst</li>
|
||||||
|
<li>Gemüse</li>
|
||||||
|
</ul>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>ul.list_basic.list_dash>li*2</code></pre>
|
||||||
|
<ul class="list_basic list_dash">
|
||||||
|
<li>Mehr Abstand und</li>
|
||||||
|
<li>mit Unterstrichen.</li>
|
||||||
|
</ul>
|
||||||
|
<pre class="pre_code"><code>ul.link>(li>a)*2</code></pre>
|
||||||
|
<ul class="link">
|
||||||
|
<li>
|
||||||
|
<a href="">Mit</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="">Verweisen</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h2><figure></h2>
|
||||||
|
<pre class="pre_code"><code>figure>figcaption+{element}</code></pre>
|
||||||
|
<figure>
|
||||||
|
<figcaption>Bezeichnung</figcaption>
|
||||||
|
Grafisches Element.
|
||||||
|
</figure>
|
||||||
|
<h2><main></h2>
|
||||||
|
<main>Hauptbereich</main>
|
||||||
|
<h2><div></h2>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>div.div_info>p</code></pre>
|
||||||
|
<div class="div_info">
|
||||||
|
<p>Absatz in einer Box mit dem Typ <i>Information</i>.</p>
|
||||||
|
</div>
|
||||||
|
<pre class="pre_code"><code>div.box_space>div.box_cube>span</code></pre>
|
||||||
|
<div class="box_space">
|
||||||
|
<div class="box_cube"><span>Text</span></div>
|
||||||
|
</div>
|
||||||
|
<pre class="pre_code"><code>div.box_placeholder+hr+div.box_placeholder_bkg</code></pre>
|
||||||
|
<div class="box_placeholder"></div>
|
||||||
|
<hr>
|
||||||
|
<div class="box_placeholder_bkg"></div>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="tabularData">Tabellen</h1>
|
||||||
|
<p>Elemente:</p>
|
||||||
|
<pre>// table // caption // colgroup // col // tbody // thead // tfoot // tr // td // th</pre>
|
||||||
|
<h2><table></h2>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>table.width_full.fix>(thead>tr>th.pre[scope="col"]+th[scope="col"]*3)+tbody>tr>td.pre+td*3</code></pre>
|
||||||
|
<table class="width_full fix">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="pre" scope="col"></th>
|
||||||
|
<th scope="col">Kopfzeile</th>
|
||||||
|
<th scope="col">A</th>
|
||||||
|
<th scope="col">B</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="pre">Vorspalte</td>
|
||||||
|
<td>Eine</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="pre">1</td>
|
||||||
|
<td></td>
|
||||||
|
<td>erweiterte</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="pre">2</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td>Tabelle</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<pre class="pre_code"><code>table.width_full.striped.fix.free>tr>td*3</code></pre>
|
||||||
|
<table class="width_full striped fix free">
|
||||||
|
<tr>
|
||||||
|
<td>Tabelle</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ohne</td>
|
||||||
|
<td>Rahmen</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>jedoch</td>
|
||||||
|
<td>mit</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td>Streifen</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<pre class="pre_code"><code>table>(thead>tr>th[scope="col"]*3)+(tbody>tr>td*2+td.txt_right)+tfoot>tr>th[colspan="2"]+td.txt_right</code></pre>
|
||||||
|
<table>
|
||||||
|
<caption>Die Verteilung der Zellen ist hier von ihrem Inhalt abhängig.</caption>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Bezeichnung</th>
|
||||||
|
<th scope="col">Menge</th>
|
||||||
|
<th scope="col">Wert</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Alpha</td>
|
||||||
|
<td>1</td>
|
||||||
|
<td class="txt_right">8990</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Bravo</td>
|
||||||
|
<td>10</td>
|
||||||
|
<td class="txt_right">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Charlie</td>
|
||||||
|
<td>1</td>
|
||||||
|
<td class="txt_right">1</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2" class="txt_right" scope="row">Summe</th>
|
||||||
|
<td class="txt_right" title=">9000">9001</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
<pre class="pre_code"><code>table.width_full.fix>tr>td+td.ellipsis+td[style="width: 50%"]</code></pre>
|
||||||
|
<table class="width_full fix">
|
||||||
|
<tr>
|
||||||
|
<td>Index</td>
|
||||||
|
<td class="ellipsis">Zelle mit viel Inhalt der nicht umbricht und eingeschränkt wird.</td>
|
||||||
|
<td style="width: 50%">Zelle mit Angabe der Breite.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<pre class="pre_code"><code>table.grid>(tr>td+td.ellipsis+td)*2</code></pre>
|
||||||
|
<table class="grid">
|
||||||
|
<tr>
|
||||||
|
<td>Index</td>
|
||||||
|
<td class="ellipsis">Zelle mit viel Inhalt der nicht umbricht und eingeschränkt wird.</td>
|
||||||
|
<td>Inhalt bestimmt die Breite</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>101</td>
|
||||||
|
<td class="ellipsis">Zelle mit viel Inhalt der nicht umbricht und eingeschränkt wird.</td>
|
||||||
|
<td>Zelle</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h1 id="forms">Formulare</h1>
|
||||||
|
<p>Elemente:</p>
|
||||||
|
<pre>// form // label // input // button // select // datalist // optgroup // option // textarea // output // progress // meter // fieldset // legend</pre>
|
||||||
|
<h2><input></h2>
|
||||||
|
<div class="inline">
|
||||||
|
<input value="Undefiniert"/>
|
||||||
|
<input type="text" size="8" value="Text"/>
|
||||||
|
<input type="text" size="8" value="Deaktiviert" disabled="disabled"/>
|
||||||
|
<input type="button" value="Auswählen">
|
||||||
|
<input type="submit" value="Senden" disabled="disabled"/>
|
||||||
|
</div>
|
||||||
|
<h4>Varianten</h4>
|
||||||
|
<pre class="pre_code"><code>input.button_io+button.button_io</code></pre>
|
||||||
|
<div class="inline">
|
||||||
|
<input class="button_io" type="button" value="Input type button">
|
||||||
|
<button class="button_io">Button</button>
|
||||||
|
</div>
|
||||||
|
<div class="inline">
|
||||||
|
<input class="input_io" type="text" value="Nur lesbare Eingabe" readonly="readonly">
|
||||||
|
<input class="input_io" type="text" value="Deaktivierte Eingabe" size="21" disabled="disabled">
|
||||||
|
<button class="button_io" disabled="disabled">Deaktivierte Schaltfläche</button>
|
||||||
|
</div>
|
||||||
|
<div id="capsCheck">
|
||||||
|
<form action="">
|
||||||
|
<input id="inpPass" type="password"/>
|
||||||
|
<span id="hintPass" style="visibility:hidden"><kbd>Shift</kbd> is pressed.</span>
|
||||||
|
<br>
|
||||||
|
<input id="inpText" type="text"/>
|
||||||
|
<span id="hintText"><kbd>CapsLock</kbd> is on.</span>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<h2><select></h2>
|
||||||
|
<select name="F">
|
||||||
|
<option value="0">
|
||||||
|
Plain list
|
||||||
|
</option>
|
||||||
|
<option value="1" selected="selected">
|
||||||
|
Fancy list
|
||||||
|
</option>
|
||||||
|
<option value="2">
|
||||||
|
Table list
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
{{ block.super -}}
|
||||||
|
<script>
|
||||||
|
const capsHint = document.getElementById('hintPass');
|
||||||
|
let isShiftPressed = false;
|
||||||
|
|
||||||
|
document.getElementById('inpPass').addEventListener('keydown', shiftDetect);
|
||||||
|
|
||||||
|
function shiftDetect(event) {
|
||||||
|
if (event.getModifierState('Shift')) {
|
||||||
|
isShiftPressed = true;
|
||||||
|
capsHint.style.visibility = 'visible';
|
||||||
|
} else {
|
||||||
|
isShiftPressed = false;
|
||||||
|
capsHint.style.visibility = 'hidden';
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Shift', isShiftPressed);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('inpPass').addEventListener('keyup', (event) => {
|
||||||
|
if (event.key === 'Shift') {
|
||||||
|
isShiftPressed = false;
|
||||||
|
capsHint.style.visibility = 'hidden';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function capsDetect() {
|
||||||
|
const capsHint = document.getElementById('hintText');
|
||||||
|
let isCapsOn = false;
|
||||||
|
|
||||||
|
document.getElementById('inpText').addEventListener('keyup', function (e) {
|
||||||
|
if (event.getModifierState('CapsLock')) {
|
||||||
|
capsHint.style.display = 'inline';
|
||||||
|
isCapsOn = true;
|
||||||
|
} else {
|
||||||
|
capsHint.style.display = 'none';
|
||||||
|
isCapsOn = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('CapsLock', isCapsOn);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
capsDetect();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
32
source/view/demo/examples/blog.liquid
Normal file
32
source/view/demo/examples/blog.liquid
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
title: Blog
|
||||||
|
tags:
|
||||||
|
- demoExample
|
||||||
|
---
|
||||||
|
{% layout 'hippie-view/simple.liquid' %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<div class="sec_main_center">
|
||||||
|
<header class="header_txt">
|
||||||
|
<h1>Blog</h1>
|
||||||
|
</header>
|
||||||
|
<nav role="doc-toc">
|
||||||
|
<h2>Inhaltsverzeichnis</h2>
|
||||||
|
<ul>
|
||||||
|
{%- for blog in collections.blog -%}
|
||||||
|
<li>
|
||||||
|
<a href="{{ blog.page.url }}">{{ blog.data.title }}</a>
|
||||||
|
</li>
|
||||||
|
{%- endfor -%}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<hr class="double dotted">
|
||||||
|
{%- for post in collections.article -%}
|
||||||
|
<article>
|
||||||
|
{{ post.content }}
|
||||||
|
</article>
|
||||||
|
{%- endfor -%}
|
||||||
|
<hr/>
|
||||||
|
<address>{% text hippie.placeholders.name %}</address>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
11
source/view/demo/examples/blog/article.md
Normal file
11
source/view/demo/examples/blog/article.md
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
- article
|
||||||
|
title: "Artikel"
|
||||||
|
publishDate: JJJJ
|
||||||
|
description: Text
|
||||||
|
---
|
||||||
|
# Titel
|
||||||
|
|
||||||
|
Inhalt
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue