oof
@@ -1,4 +1,5 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
|
logs/
|
||||||
config.json
|
config.json
|
||||||
public/b/*
|
public/b/*
|
||||||
public/t/*
|
public/t/*
|
||||||
|
|||||||
@@ -4,19 +4,66 @@
|
|||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/geojson": {
|
||||||
|
"version": "7946.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
|
||||||
|
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
|
||||||
|
},
|
||||||
|
"@types/node": {
|
||||||
|
"version": "13.9.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz",
|
||||||
|
"integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA=="
|
||||||
|
},
|
||||||
|
"amdefine": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
|
||||||
|
},
|
||||||
|
"async": {
|
||||||
|
"version": "0.2.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
||||||
|
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
|
||||||
|
},
|
||||||
|
"camelcase": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
|
||||||
|
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
|
||||||
|
},
|
||||||
"cuffeo": {
|
"cuffeo": {
|
||||||
"version": "git+https://gitfap.de/keinBot/cuffeo.git#d55586ce5520d4119fa0900ef15ce8736fc62364",
|
"version": "1.0.6",
|
||||||
"from": "git+https://gitfap.de/keinBot/cuffeo.git"
|
"resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-TdrkkDM4uR/iTEtazfxbmLUXoNB3NLC/RMgpWVUQC8j2uOiaLl7U7agdLdxfJq4uEt56cJUftqH9Tb3BofslNg==",
|
||||||
|
"requires": {
|
||||||
|
"flumm-fetch-cookies": "^1.3.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
|
||||||
},
|
},
|
||||||
"denque": {
|
"denque": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
|
||||||
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
|
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
|
||||||
},
|
},
|
||||||
|
"flumm-fetch": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/flumm-fetch/-/flumm-fetch-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-pZ5U0hheCSW43vfGZQMunr03U7rUOX+iy2y13Tu4nc3iRL+E/Qfeo5nZ2B2JMYKOGIx1A1anUYOz+ulyhouyjg=="
|
||||||
|
},
|
||||||
|
"flumm-fetch-cookies": {
|
||||||
|
"version": "1.3.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/flumm-fetch-cookies/-/flumm-fetch-cookies-1.3.5.tgz",
|
||||||
|
"integrity": "sha512-jFLVgwD2eV2jvlbil1E+2dPeR6s07BdXJ1xRRAoq9OU87fALXbKGBa3vZO0zaWyVXEukgE0z/cMoyFsNNZUdTQ==",
|
||||||
|
"requires": {
|
||||||
|
"flumm-fetch": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
"version": "0.4.24",
|
"version": "0.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
|
||||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
"integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"safer-buffer": ">= 2.1.2 < 3"
|
"safer-buffer": ">= 2.1.2 < 3"
|
||||||
}
|
}
|
||||||
@@ -27,19 +74,110 @@
|
|||||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||||
},
|
},
|
||||||
"mariadb": {
|
"mariadb": {
|
||||||
"version": "2.0.3",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.3.1.tgz",
|
||||||
"integrity": "sha512-/0poOq++rcAWrSHdS+ozLDbK+/ZOpQ2XHYoVHXeZtMuhxEH/w7g/KfwryCqr3BCIC0JC/9UeJJG3v7vNNlshag==",
|
"integrity": "sha512-suv+ygoiS+tQSKmxgzJsGV9R+USN8g6Ql+GuMo9k7alD6FxOT/lwebLHy63/7yPZfVtlyAitK1tPd7ZoFhN/Sg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"denque": "^1.4.0",
|
"@types/geojson": "^7946.0.7",
|
||||||
"iconv-lite": "^0.4.24",
|
"@types/node": ">=8.0.0",
|
||||||
"long": "^4.0.0"
|
"denque": "^1.4.1",
|
||||||
|
"iconv-lite": "^0.5.1",
|
||||||
|
"long": "^4.0.0",
|
||||||
|
"moment-timezone": "^0.5.27"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
|
||||||
|
},
|
||||||
|
"moment": {
|
||||||
|
"version": "2.24.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
|
||||||
|
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
|
||||||
|
},
|
||||||
|
"moment-timezone": {
|
||||||
|
"version": "0.5.28",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz",
|
||||||
|
"integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==",
|
||||||
|
"requires": {
|
||||||
|
"moment": ">= 2.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optimist": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
|
||||||
|
"requires": {
|
||||||
|
"minimist": "~0.0.1",
|
||||||
|
"wordwrap": "~0.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"safer-buffer": {
|
"safer-buffer": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.1.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
|
||||||
|
"integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
|
||||||
|
"requires": {
|
||||||
|
"amdefine": ">=0.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"swig": {
|
||||||
|
"version": "1.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/swig/-/swig-1.4.2.tgz",
|
||||||
|
"integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=",
|
||||||
|
"requires": {
|
||||||
|
"optimist": "~0.6",
|
||||||
|
"uglify-js": "~2.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uglify-js": {
|
||||||
|
"version": "2.4.24",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
|
||||||
|
"integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
|
||||||
|
"requires": {
|
||||||
|
"async": "~0.2.6",
|
||||||
|
"source-map": "0.1.34",
|
||||||
|
"uglify-to-browserify": "~1.0.0",
|
||||||
|
"yargs": "~3.5.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uglify-to-browserify": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
|
||||||
|
},
|
||||||
|
"window-size": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
|
||||||
|
},
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
|
||||||
|
},
|
||||||
|
"yargs": {
|
||||||
|
"version": "3.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
|
||||||
|
"integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^1.0.2",
|
||||||
|
"decamelize": "^1.0.0",
|
||||||
|
"window-size": "0.1.0",
|
||||||
|
"wordwrap": "0.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
|
||||||
|
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
"description": "f0ck, kennste?",
|
"description": "f0ck, kennste?",
|
||||||
"main": "index.mjs",
|
"main": "index.mjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "npm run minify && node --experimental-modules src/",
|
"start": "node --experimental-json-modules --harmony-optional-chaining src/index.mjs"
|
||||||
"debug": "cp public/js/f0ck.js public/js/f0ck.min.js && node --experimental-modules src/",
|
|
||||||
"minify": "/usr/bin/uglifyjs public/js/f0ck.js -c -m --ecma 8 --warn -o public/js/f0ck.min.js"
|
|
||||||
},
|
},
|
||||||
"author": "Flummi",
|
"author": "Flummi",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cuffeo": "git+https://gitfap.de/keinBot/cuffeo.git",
|
"cuffeo": "^1.0.6-1",
|
||||||
"mariadb": "^2.0.3"
|
"flumm-fetch-cookies": "^1.3.5",
|
||||||
|
"mariadb": "^2.3.1",
|
||||||
|
"swig": "^1.4.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,187 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: "Cyberfall";
|
|
||||||
src:url(https://f0ck.it/uploads/Cyberfall.otf) format("opentype");
|
|
||||||
src: url("/css/Cyberfall.woff2") format("woff")
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Theming*/
|
|
||||||
:root {
|
|
||||||
--primary-color: #302AE6;
|
|
||||||
--secondary-color: #536390;
|
|
||||||
--font-color: #424242;
|
|
||||||
--bg-color: #090f13;
|
|
||||||
--heading-color: #292922;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-theme="light"] {
|
|
||||||
--primary-color: #9A97F3;
|
|
||||||
--secondary-color: #818cab;
|
|
||||||
--font-color: #e1e1ff;
|
|
||||||
--bg-color: black;
|
|
||||||
--heading-color: #818cab;
|
|
||||||
}
|
|
||||||
/*End of Theming*/
|
|
||||||
|
|
||||||
html, body {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: var(--bg-color);
|
|
||||||
color: var(--font-color);
|
|
||||||
}
|
|
||||||
div.pageWrapper {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
grid-template-rows: 0.2fr 2.6fr 0fr;
|
|
||||||
}
|
|
||||||
div#header, div#footer {
|
|
||||||
z-index: 9999;
|
|
||||||
background-color: #292922;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 6fr 1fr;
|
|
||||||
grid-gap: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logoHead {
|
|
||||||
margin: 6px 0 0 4px;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
#logo {
|
|
||||||
padding: 1px 4px 1px 4px;
|
|
||||||
height: 48px;
|
|
||||||
}
|
|
||||||
#itemInfo {
|
|
||||||
display: none;
|
|
||||||
height: 61px;
|
|
||||||
position: absolute;
|
|
||||||
left: 200px;
|
|
||||||
right: 270px;
|
|
||||||
top: 4px;
|
|
||||||
}
|
|
||||||
#itemInfo div.infoText {
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
#pagePosition, #itemPosition {
|
|
||||||
position: absolute;
|
|
||||||
right: 8px;
|
|
||||||
top: 6px;
|
|
||||||
padding: 0;
|
|
||||||
color: #7d7b6a;
|
|
||||||
background-color: #333;
|
|
||||||
}
|
|
||||||
#pagePosition span, #itemPosition span {
|
|
||||||
color: #9d9b8a;
|
|
||||||
}
|
|
||||||
/*#pagePosition {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#itemPosition {
|
|
||||||
display: none;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
div#content {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wrapper {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#howtowrapper {
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: rgba(0, 0, 0, 0.9);
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
#itemInfo {
|
|
||||||
position: absolute;
|
|
||||||
background: #191b1b;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
color: aliceblue;
|
|
||||||
padding: 5px;
|
|
||||||
left: auto;
|
|
||||||
right: auto;
|
|
||||||
top: auto;
|
|
||||||
border-right: 1px solid white;
|
|
||||||
border-bottom: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logoHead {
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#header, div#footer {
|
|
||||||
z-index: 9999;
|
|
||||||
background-color: #23232199;
|
|
||||||
box-shadow: 2px 2px 2px black;
|
|
||||||
border-bottom: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#itemSource {
|
|
||||||
|
|
||||||
color: #04c33e;
|
|
||||||
position: relative;
|
|
||||||
top: -3px;
|
|
||||||
text-shadow: 1px 1px 1px black;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#itemInfo {
|
|
||||||
position: unset;
|
|
||||||
background: #191b1b;
|
|
||||||
color: aliceblue;
|
|
||||||
padding: 5px;
|
|
||||||
left: auto;
|
|
||||||
right: auto;
|
|
||||||
top: auto;
|
|
||||||
grid-row-start: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#itemPosition {
|
|
||||||
display: block;
|
|
||||||
grid-row-start: -1;
|
|
||||||
position: absolute;
|
|
||||||
color: lime;
|
|
||||||
text-shadow: 1px 1px black;
|
|
||||||
font-family: monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#itemInfo {
|
|
||||||
position: unset;
|
|
||||||
background: #191b1b;
|
|
||||||
color: aliceblue;
|
|
||||||
padding: 5px;
|
|
||||||
left: auto;
|
|
||||||
right: auto;
|
|
||||||
top: auto;
|
|
||||||
height: auto;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.infoText {
|
|
||||||
font-family: monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#itemPosition {
|
|
||||||
font-family: Cyberfall;
|
|
||||||
font-size: 290%;
|
|
||||||
background: transparent;
|
|
||||||
text-align: right;
|
|
||||||
padding-right: 5px;
|
|
||||||
text-shadow: 0px 0px 8px #04c33e;
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
div.close {
|
|
||||||
position: fixed;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 48px;
|
|
||||||
width: 48px;
|
|
||||||
opacity: .5;
|
|
||||||
border-radius: 10px;
|
|
||||||
z-index: 90;
|
|
||||||
top: 80px;
|
|
||||||
right: 10px;
|
|
||||||
}
|
|
||||||
div.close:hover {
|
|
||||||
opacity: .9;
|
|
||||||
box-shadow: 0px 0px 0px 2px #dac8d2;
|
|
||||||
border-radius: 10px;
|
|
||||||
transition: .1s ease-in;
|
|
||||||
}
|
|
||||||
div.close:before {
|
|
||||||
content: '';
|
|
||||||
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
|
|
||||||
position: absolute;
|
|
||||||
top: 7%;
|
|
||||||
right: 7%;
|
|
||||||
height: 41px;
|
|
||||||
width: 41px;
|
|
||||||
background-color: rgba(255, 255, 255, .5);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.arrow {
|
|
||||||
position: absolute;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 70px;
|
|
||||||
width: 70px;
|
|
||||||
background-color: #000;
|
|
||||||
opacity: .5;
|
|
||||||
border-radius: 10px;
|
|
||||||
z-index: 90;
|
|
||||||
}
|
|
||||||
div.arrow:hover {
|
|
||||||
opacity: .9;
|
|
||||||
box-shadow: 0px 0px 0px 2px #dac8d2;
|
|
||||||
border-radius: 10px;
|
|
||||||
transition: .1s ease-in;
|
|
||||||
}
|
|
||||||
div.arrow:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 7%;
|
|
||||||
left: 7%;
|
|
||||||
height: 60px;
|
|
||||||
width: 60px;
|
|
||||||
background-color: rgba(255, 255, 255, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.top:before {
|
|
||||||
clip-path: polygon(0% 77%, 50% 23%, 100% 77%);
|
|
||||||
}
|
|
||||||
div.bottom:before {
|
|
||||||
clip-path: polygon(0% 23%, 100% 23%, 50% 77%);
|
|
||||||
}
|
|
||||||
div.left:before {
|
|
||||||
clip-path: polygon(23% 50%, 77% 0%, 77% 100%);
|
|
||||||
}
|
|
||||||
div.right:before {
|
|
||||||
clip-path: polygon(23% 0%, 77% 50%, 23% 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.arrow.top {
|
|
||||||
top: 10px;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
}
|
|
||||||
div.arrow.bottom {
|
|
||||||
bottom: 10px;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
}
|
|
||||||
div.arrow.left {
|
|
||||||
position: fixed !important;
|
|
||||||
left: 10px;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
}
|
|
||||||
div.arrow.right {
|
|
||||||
position: fixed !important;
|
|
||||||
right: 10px;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
div#itemwrapper {
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: rgba(0, 0, 0, 0.4);
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#i_items {
|
|
||||||
width: 300%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(3, 1fr);
|
|
||||||
grid-template-rows: 1fr;
|
|
||||||
grid-template-areas: ". . .";
|
|
||||||
}
|
|
||||||
div.i_item {
|
|
||||||
overflow: hidden;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item {
|
|
||||||
max-height: 100%;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
.item:hover {
|
|
||||||
background-color: rgba(0, 0, 0, 0.8);
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
div#pagewrapper {
|
|
||||||
display: block;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#p_items {
|
|
||||||
overflow: hidden;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
div.p_item {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.p_item > a {
|
|
||||||
width: 128px;
|
|
||||||
height: 128px;
|
|
||||||
box-shadow: 2px 2px 6px 0px rgb(0, 0, 0);
|
|
||||||
margin: 4px;
|
|
||||||
float: left;
|
|
||||||
outline: none;
|
|
||||||
box-shadow: inset 0 0 10px #4c4a4a;
|
|
||||||
}
|
|
||||||
div.p_item > a > img.thumb {
|
|
||||||
border: 2px solid black;
|
|
||||||
transition: .1s ease-out;
|
|
||||||
}
|
|
||||||
div.p_item > a > img.thumb:hover {
|
|
||||||
box-shadow: 0px 0px 0px 2px #dac8d2;
|
|
||||||
border-radius: 5px;
|
|
||||||
transition: .1s ease-in;
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
Shareware/ Font License
|
|
||||||
|
|
||||||
Pixel Sagas Freeware Fonts EULA (End User License Agreement) and Software Inclusion Agreement
|
|
||||||
|
|
||||||
"Purchaser" and "User" may be used interchangeably in this agreement.
|
|
||||||
|
|
||||||
"Pixel Sagas" and "Neale Davidson" may be used interchangeably in this agreement. These all refer to the intellectual and legal property of Neale Davidson.
|
|
||||||
|
|
||||||
Usage
|
|
||||||
|
|
||||||
Pixel Saga's Shareware Fonts are free to use for personal, non-commercial purposes. No payment is necessary to use Pixel Saga's Freeware Fonts for personal use, and there is no limit to the amount of prints, pages, or other medium to be produced using them. However, you cannot offer the font for commercial sale, or offer for direct download. The inclusion othe font name and/or site URL in the credits or documentation when it is used is appreciated, but this is not mandatory.
|
|
||||||
|
|
||||||
Payment
|
|
||||||
|
|
||||||
Payment is not required for the use of Pixel Saga's Shareware Fonts. Commercial use requires a modest fee which can be paid through the pixelsagas.com web site through Paypal.com's services. The transaction receipt for any shareware "commercial license" purchase will suffice as proof of license.
|
|
||||||
|
|
||||||
Support
|
|
||||||
|
|
||||||
Font installation help is available at http://www.pixelsagas.com. If you experience problems with any Pixel Saga's Freeware font (such as spacing issues or missing characters), please verify that you have the correct and current version of the fonts. In the case of Freeware fonts, downloading the font directly from the Pixel Sagas site will ensure that the font files have not been altered.
|
|
||||||
|
|
||||||
Software Inclusion Agreement
|
|
||||||
|
|
||||||
Pixel Saga's software products are protected by copyright laws and International copyright treaties, as well as other intellectual property laws and treaties. All Pixel Saga's software products are licensed, not sold.
|
|
||||||
|
|
||||||
1) GRANT OF LICENSE
|
|
||||||
|
|
||||||
This document grants the user the following rights:
|
|
||||||
|
|
||||||
Installation and Use. The user may install and use an unlimited number of copies of the software product. The user may not offer Pixel Sagas freeware fonts for direct download unless the user has received explicit, written permission from Neale Davidson. Otherwise please direct users to the http://www.pixelsagas.com website. Pixel Sagas freeware fonts may, however, be embedded for web, publication, or general software use.
|
|
||||||
|
|
||||||
2) WARRANTIES
|
|
||||||
|
|
||||||
None
|
|
||||||
|
|
||||||
Pixel Sagas expressly disclaims any warranty for the software product. The software product and any related documentation is provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or non-infringement. The entire risk arising out of use or performance of the software product remains with the user.
|
|
||||||
|
|
||||||
No Liability For Consequential Damages.
|
|
||||||
|
|
||||||
In no event shall Neale Davidson or Pixel Sagas be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if Pixel Sagas has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
3) MISCELLANEOUS
|
|
||||||
|
|
||||||
Should the user have any questions concerning this document or you desire to contact Neale Davidson for any reason, please email jaynz@pixelsagas.com .
|
|
||||||
|
|
||||||
Governing Law
|
|
||||||
|
|
||||||
This agreement is governed by and subject to the laws of the United States of America.
|
|
||||||
|
Before Width: | Height: | Size: 594 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 331 KiB |
|
Before Width: | Height: | Size: 333 KiB |
@@ -1,180 +0,0 @@
|
|||||||
import rt from "./rt.js";
|
|
||||||
import lib from "./lib.js";
|
|
||||||
|
|
||||||
const events = {};
|
|
||||||
events.wheel = async e => {
|
|
||||||
if(rt.tmp.events.page) { // Pageevents
|
|
||||||
if(rt.tmp.scroll)
|
|
||||||
return;
|
|
||||||
const deltaY = e.target.id === "up" ? -1 : e.deltaY < 0 ? -1: 1; // -1 up, 1 down
|
|
||||||
|
|
||||||
if((deltaY === -1 && rt.items.first === rt.items.newest) || (deltaY === 1 && rt.items.last === rt.items.oldest))
|
|
||||||
return rt.tmp.scroll = false;
|
|
||||||
rt.tmp.scroll = true;
|
|
||||||
rt.items.eps = 0;
|
|
||||||
await lib.getItems({
|
|
||||||
el: rt.ct.wrapper.pages[deltaY === -1 ? 0 : 2],
|
|
||||||
opt: deltaY === -1 ? `id=${rt.items.first}&order=asc` : `id=${rt.items.last}&order=desc`
|
|
||||||
});
|
|
||||||
rt.ct.wrapper.pages[deltaY === -1 ? 0 : 2].scrollIntoView({ block: rt.vars.block, behavior: "smooth" });
|
|
||||||
await new Promise(resolve => setTimeout(resolve, rt.vars.cd));
|
|
||||||
|
|
||||||
document.querySelector("div#p_items").removeChild(rt.ct.wrapper.pages[deltaY === -1 ? 2 : 0]);
|
|
||||||
const newdiv = document.createElement("div");
|
|
||||||
newdiv.classList.add("p_item");
|
|
||||||
document.querySelector("div#p_items").insertAdjacentElement((deltaY === -1 ? "afterbegin" : "beforeend"), newdiv);
|
|
||||||
rt.ct.wrapper.pages = document.querySelectorAll("div.p_item");
|
|
||||||
lib.calcItems();
|
|
||||||
|
|
||||||
lib.scrolltomiddle(rt.ct.wrapper.pages);
|
|
||||||
rt.ct.wrapper.pages[0].innerHTML = "";
|
|
||||||
rt.ct.wrapper.pages[2].innerHTML = "";
|
|
||||||
|
|
||||||
}
|
|
||||||
if(rt.tmp.events.item) { // Itemevents
|
|
||||||
if(rt.tmp.scroll)
|
|
||||||
return;
|
|
||||||
const deltaY = e.target.id === "left" ? -1 : e.deltaY < 0 ? -1: 1; // -1 left, 1 right
|
|
||||||
if((deltaY === -1 && rt.items.act === rt.items.oldest) || (deltaY === 1 && rt.items.act === rt.items.newest))
|
|
||||||
return;
|
|
||||||
window.location = `${window.location.pathname}#${deltaY === -1 ? rt.items.next : rt.items.prev}`;
|
|
||||||
}
|
|
||||||
rt.tmp.scroll = false;
|
|
||||||
};
|
|
||||||
events.resize = async e => {
|
|
||||||
e.preventDefault();
|
|
||||||
clearTimeout(rt.tmp.resize);
|
|
||||||
lib.calcItems();
|
|
||||||
rt.tmp.resize = setTimeout(() => lib.getItems({
|
|
||||||
el: rt.ct.wrapper.pages[1],
|
|
||||||
opt: `id=${rt.items.first + 1}&order=desc`
|
|
||||||
}), rt.vars.cd);
|
|
||||||
lib.scrolltomiddle(rt.ct.wrapper.pages);
|
|
||||||
|
|
||||||
if(rt.tmp.events.item) {
|
|
||||||
lib.scrolltomiddle(rt.ct.wrapper.items);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
events.volumechange = e => {
|
|
||||||
localStorage.setItem("volume", e.target.volume);
|
|
||||||
};
|
|
||||||
events.hashchange = async e => {
|
|
||||||
if(rt.tmp.scroll || !rt.tmp.hash)
|
|
||||||
return rt.tmp.hash = true;
|
|
||||||
rt.tmp.scroll = true;
|
|
||||||
console.log("hashchange lol");
|
|
||||||
|
|
||||||
if(rt.tmp.layer !== "item")
|
|
||||||
rt.ct.wrapper.items[1].innerHTML = "";
|
|
||||||
|
|
||||||
const itemid = parseInt((e.newURL?e.newURL:e.detail.newURL).split("#").slice(-1));
|
|
||||||
if(!itemid || itemid <= 0) // failover oder so
|
|
||||||
return lib.closeItemview();
|
|
||||||
|
|
||||||
const next = rt.items.act === null || rt.items.act === itemid ? 1 : rt.items.act > itemid ? 2 : 0;
|
|
||||||
lib.showLayer("item", next === 1);
|
|
||||||
|
|
||||||
rt.ct.header.itempos.innerHTML = `${itemid}`;
|
|
||||||
const item = await lib.getItem(itemid);
|
|
||||||
item.dest = item.dest.replace(/^\./, "");
|
|
||||||
|
|
||||||
rt.ct.header.infos.source.href = item.src;
|
|
||||||
rt.ct.header.infos.source.innerHTML = item.srchost;
|
|
||||||
rt.ct.header.infos.channel.innerHTML = `${item.usernetwork} ${item.userchannel}`;
|
|
||||||
rt.ct.header.infos.title.innerHTML = `${item.mime} (${item.size})`;
|
|
||||||
rt.ct.header.infos.nick.innerHTML = item.username;
|
|
||||||
|
|
||||||
// <test>
|
|
||||||
if(itemid > rt.items.first || itemid < rt.items.last) { // Scroll to next Page
|
|
||||||
rt.items.eps = 0;
|
|
||||||
await lib.getItems({
|
|
||||||
el: rt.ct.wrapper.pages[1],
|
|
||||||
opt: next === 0 ? `id=${itemid-1}&order=asc` : `id=${itemid+1}&order=desc`
|
|
||||||
});
|
|
||||||
|
|
||||||
/*rt.tmp.scroll = false;
|
|
||||||
events.wheel.page({
|
|
||||||
target: {
|
|
||||||
id: next === 0 ? "up" : "down"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
rt.tmp.scroll = true;*/
|
|
||||||
}
|
|
||||||
// </test>
|
|
||||||
|
|
||||||
rt.ct.wrapper.pages[1].querySelectorAll("a > img").forEach(f => {
|
|
||||||
f.style.boxShadow = null;
|
|
||||||
f.style.borderRadius = null;
|
|
||||||
f.style.transition = ".1s ease-out";
|
|
||||||
});
|
|
||||||
setTimeout(() => {
|
|
||||||
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.boxShadow = "0px 0px 0px 2px #dac8d2";
|
|
||||||
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.borderRadius = "5px";
|
|
||||||
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.transition = ".1s ease-in";
|
|
||||||
}, 50);
|
|
||||||
|
|
||||||
let el;
|
|
||||||
switch(item.mime) {
|
|
||||||
case "audio/flac":
|
|
||||||
case "audio/mpeg":
|
|
||||||
case "audio/ogg":
|
|
||||||
case "audio/x-flac": // audios
|
|
||||||
el = document.createElement("audio");
|
|
||||||
el.src = `${rt.url}${item.dest}`;
|
|
||||||
el.type = item.mime;
|
|
||||||
el.autoplay = true;
|
|
||||||
el.controls = true;
|
|
||||||
el.loop = true;
|
|
||||||
el.volume = localStorage.getItem("volume") || 1;
|
|
||||||
el.addEventListener("volumechange", ev => events.volumechange(ev));
|
|
||||||
break;
|
|
||||||
case "image/gif":
|
|
||||||
case "image/jpeg":
|
|
||||||
case "image/png": // images
|
|
||||||
el = document.createElement("img");
|
|
||||||
el.src = `${rt.url}${item.dest}`;
|
|
||||||
break;
|
|
||||||
case "video/mp4":
|
|
||||||
case "video/quicktime":
|
|
||||||
case "video/webm":
|
|
||||||
case "video/ogv": // videos
|
|
||||||
el = document.createElement("video");
|
|
||||||
el.src = `${rt.url}${item.dest}`;
|
|
||||||
el.type = item.mime;
|
|
||||||
el.autoplay = true;
|
|
||||||
el.controls = true;
|
|
||||||
el.loop = true;
|
|
||||||
el.volume = localStorage.getItem("volume") || 1;
|
|
||||||
el.addEventListener("volumechange", ev => events.volumechange(ev));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
alert("lol hacker");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
el.classList.add("item");
|
|
||||||
rt.ct.wrapper.items[next].insertAdjacentElement("afterbegin", el);
|
|
||||||
rt.ct.wrapper.items[next].scrollIntoView({ block: rt.vars.block, behavior: "smooth" });
|
|
||||||
|
|
||||||
rt.items.prev = item.prev;
|
|
||||||
rt.items.next = item.next;
|
|
||||||
rt.items.act = item.id;
|
|
||||||
|
|
||||||
await new Promise(resolve => setTimeout(resolve, rt.vars.cd));
|
|
||||||
|
|
||||||
if(next !== 1) {
|
|
||||||
document.querySelector("div#i_items").removeChild(rt.ct.wrapper.items[next === 0 ? 2 : 0]);
|
|
||||||
const newdiv = document.createElement("div");
|
|
||||||
newdiv.classList.add("i_item");
|
|
||||||
document.querySelector("div#i_items").insertAdjacentElement((next === 0 ? "afterbegin" : "beforeend"), newdiv);
|
|
||||||
rt.ct.wrapper.items = document.querySelectorAll("div.i_item");
|
|
||||||
}
|
|
||||||
|
|
||||||
lib.scrolltomiddle(rt.ct.wrapper.items);
|
|
||||||
rt.ct.wrapper.items[0].innerHTML = "";
|
|
||||||
rt.ct.wrapper.items[2].innerHTML = "";
|
|
||||||
|
|
||||||
rt.tmp.scroll = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default events;
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import rt from "./rt.js";
|
|
||||||
import events from "./events.js";
|
|
||||||
import lib from "./lib.js";
|
|
||||||
|
|
||||||
if(rt.debug) {
|
|
||||||
window.d = {
|
|
||||||
rt: rt,
|
|
||||||
events: events,
|
|
||||||
lib: lib
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
(async () => {
|
|
||||||
lib.showLayer("page");
|
|
||||||
window.addEventListener("hashchange", events.hashchange);
|
|
||||||
document.addEventListener("wheel", events.wheel);
|
|
||||||
window.addEventListener("resize", events.resize);
|
|
||||||
[...rt.ct.arrows] // add pagebuttons
|
|
||||||
.forEach(p => p.addEventListener("click", events.wheel));
|
|
||||||
|
|
||||||
const debug = document.querySelectorAll("span#debug > a");
|
|
||||||
debug[0].addEventListener("click", async () => { // random
|
|
||||||
const random = await (await fetch(`${rt.api}/random`)).json();
|
|
||||||
window.location = `${window.location.pathname}#${random.id}`;
|
|
||||||
});
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
const pn = parseInt(document.location.pathname.split("/").splice(-1));
|
|
||||||
const hash = document.location.hash;
|
|
||||||
if(!hash) {
|
|
||||||
lib.getItems({
|
|
||||||
el: rt.ct.wrapper.pages[1],
|
|
||||||
opt: pn > 0 ? `id=${pn + 1}&order=desc` : ""
|
|
||||||
});
|
|
||||||
lib.scrolltomiddle(rt.ct.wrapper.pages);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
window.dispatchEvent(new CustomEvent("hashchange", { detail: { newURL: hash } }));
|
|
||||||
}, 300);
|
|
||||||
|
|
||||||
})();
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import rt from"./rt.js";import events from"./events.js";import lib from"./lib.js";rt.debug&&(window.d={rt,events,lib}),(async()=>{lib.showLayer("page"),window.addEventListener("hashchange",events.hashchange),document.addEventListener("wheel",events.wheel),window.addEventListener("resize",events.resize),[...rt.ct.arrows].forEach(e=>e.addEventListener("click",events.wheel)),document.querySelectorAll("span#debug > a")[0].addEventListener("click",async()=>{const e=await(await fetch(`${rt.api}/random`)).json();window.location=`${window.location.pathname}#${e.id}`}),setTimeout(()=>{const e=parseInt(document.location.pathname.split("/").splice(-1)),t=document.location.hash;t?window.dispatchEvent(new CustomEvent("hashchange",{detail:{newURL:t}})):(lib.getItems({el:rt.ct.wrapper.pages[1],opt:e>0?`id=${e+1}&order=desc`:""}),lib.scrolltomiddle(rt.ct.wrapper.pages))},300)})();
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
import rt from "./rt.js";
|
|
||||||
import events from "./events.js";
|
|
||||||
|
|
||||||
const calcItems = () => {
|
|
||||||
const cs = window.getComputedStyle(rt.ct.content);
|
|
||||||
const height = parseInt(cs.height.replace("px", ""));
|
|
||||||
const width = parseInt(cs.width.replace("px", ""));
|
|
||||||
const cols = ~~(width / ( rt.layout.itemsize + rt.layout.margin ));
|
|
||||||
const rows = ~~(height / ( rt.layout.itemsize + rt.layout.margin ));
|
|
||||||
|
|
||||||
rt.ct.wrapper.pages.forEach(e => {
|
|
||||||
e.style.marginLeft = Math.max((width - (cols * (rt.layout.itemsize + rt.layout.margin)) + rt.layout.margin) / rt.layout.min_rows, 0) * 1.5 + "px";
|
|
||||||
e.style.paddingTop = Math.max((height - (rows * (rt.layout.itemsize + rt.layout.margin)) + rt.layout.margin) / rt.layout.min_rows, 0) * 3 + "px";
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
rows: rows,
|
|
||||||
cols: cols,
|
|
||||||
eps: rows * cols,
|
|
||||||
width: width,
|
|
||||||
height: height
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const getItems = async ({ el, opt = "" }) => {
|
|
||||||
const tmp = calcItems();
|
|
||||||
if(tmp.eps === rt.items.eps)
|
|
||||||
return;
|
|
||||||
rt.items.eps = tmp.eps;
|
|
||||||
el.innerHTML = "";
|
|
||||||
const i = await (await fetch(`${rt.api}/p?eps=${tmp.eps}&${opt}`)).json();
|
|
||||||
|
|
||||||
const items = i.items.sort((a, b) => b.id - a.id);
|
|
||||||
items.forEach(item => {
|
|
||||||
const _a = document.createElement("a");
|
|
||||||
_a.title = item.mime;
|
|
||||||
_a.href = `#${item.id}`;//`${rt.url}/${item.id}`;
|
|
||||||
const _img = document.createElement("img");
|
|
||||||
_img.classList.add("thumb");
|
|
||||||
_img.src = `${rt.url}/t/${item.id}.png`;
|
|
||||||
_a.insertAdjacentElement("afterbegin", _img);
|
|
||||||
el.insertAdjacentElement("beforeend", _a);
|
|
||||||
});
|
|
||||||
rt.items.first = items[0].id;
|
|
||||||
rt.items.last = items[items.length - 1].id;
|
|
||||||
rt.items.oldest = i.oldest;
|
|
||||||
rt.items.newest = i.newest;
|
|
||||||
|
|
||||||
rt.tmp.hash = false;
|
|
||||||
window.history.pushState(rt.items.first, `f0ck.me! page ${rt.items.first}`, `/page/${rt.items.first}${(window.location.hash?window.location.hash:"")}`);
|
|
||||||
rt.tmp.hash = true;
|
|
||||||
|
|
||||||
rt.ct.header.pagepos.innerHTML = `items ${rt.items.first} - ${rt.items.last}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getItem = async itemid => {
|
|
||||||
return await (await fetch(`${rt.api}/item/${itemid}`)).json();
|
|
||||||
};
|
|
||||||
|
|
||||||
const scrolltomiddle = el => {
|
|
||||||
el[0].scrollIntoView({ block: rt.vars.block });
|
|
||||||
el[2].scrollIntoView({ block: rt.vars.block });
|
|
||||||
el[1].scrollIntoView({ block: rt.vars.block });
|
|
||||||
};
|
|
||||||
|
|
||||||
const closeItemview = () => {
|
|
||||||
rt.tmp.hash = false;
|
|
||||||
window.location.hash = "";
|
|
||||||
rt.ct.tabs.item.removeEventListener("click", closeItemview);
|
|
||||||
rt.ct.wrapper.pages[1].querySelectorAll("a > img").forEach(f => {
|
|
||||||
f.style.boxShadow = null;
|
|
||||||
f.style.borderRadius = null;
|
|
||||||
f.style.transition = ".1s ease-out";
|
|
||||||
});
|
|
||||||
rt.ct.wrapper.items[1].innerHTML = "";
|
|
||||||
showLayer("page", true);
|
|
||||||
};
|
|
||||||
|
|
||||||
const showLayer = (layer, scroll = true) => {
|
|
||||||
// hide all pages
|
|
||||||
console.log(layer, rt.tmp.layer);
|
|
||||||
if(layer === rt.tmp.layer)
|
|
||||||
return;
|
|
||||||
rt.tmp.layer = layer;
|
|
||||||
for(let e in rt.ct.tabs)
|
|
||||||
rt.ct.tabs[e].style.display = "none";
|
|
||||||
|
|
||||||
rt.tmp.events.page = false;
|
|
||||||
rt.tmp.events.item = false;
|
|
||||||
|
|
||||||
switch(layer) {
|
|
||||||
case "page":
|
|
||||||
rt.tmp.events.page = true;
|
|
||||||
if(scroll)
|
|
||||||
scrolltomiddle(rt.ct.wrapper.pages);
|
|
||||||
|
|
||||||
rt.ct.header.pagepos.style.display = "block";
|
|
||||||
rt.ct.header.itempos.style.display = "none";
|
|
||||||
rt.ct.header.iteminfo.style.display = "none";
|
|
||||||
break;
|
|
||||||
case "item":
|
|
||||||
rt.ct.tabs.item.style.display = "block";
|
|
||||||
rt.tmp.events.item = true;
|
|
||||||
|
|
||||||
rt.ct.tabs.item.addEventListener("click", closeItemview);
|
|
||||||
|
|
||||||
if(scroll)
|
|
||||||
scrolltomiddle(rt.ct.wrapper.items);
|
|
||||||
|
|
||||||
rt.ct.header.pagepos.style.display = "none";
|
|
||||||
rt.ct.header.itempos.style.display = "block";
|
|
||||||
rt.ct.header.iteminfo.style.display = "block";
|
|
||||||
break;
|
|
||||||
case "howto":
|
|
||||||
rt.ct.tabs.howto.style.display = "block";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
rt.tmp.scroll = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default { // oof
|
|
||||||
calcItems: calcItems,
|
|
||||||
getItems: getItems,
|
|
||||||
getItem: getItem,
|
|
||||||
showLayer: showLayer,
|
|
||||||
scrolltomiddle: scrolltomiddle,
|
|
||||||
closeItemview: closeItemview
|
|
||||||
};
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
export default {
|
|
||||||
debug: true,
|
|
||||||
layout: {
|
|
||||||
margin: 6,
|
|
||||||
min_cols: 3,
|
|
||||||
min_rows: 4,
|
|
||||||
itemsize: 130
|
|
||||||
},
|
|
||||||
url: "//f0ck.me",
|
|
||||||
api: "//dev.f0ck.me/api",
|
|
||||||
vars: {
|
|
||||||
cd: 600,
|
|
||||||
block: "center"
|
|
||||||
},
|
|
||||||
tmp: {
|
|
||||||
layer: null,
|
|
||||||
_scroll: false,
|
|
||||||
get scroll() { console.log("get scroll"); return this._scroll; },
|
|
||||||
set scroll(val) { console.log("set scroll: " + val); this._scroll = val; },
|
|
||||||
events: {
|
|
||||||
page: true,
|
|
||||||
item: false
|
|
||||||
},
|
|
||||||
resize: null,
|
|
||||||
_hash: true,
|
|
||||||
get hash() { console.log("get hash"); return this._hash; },
|
|
||||||
set hash(val) { console.log("set hash: " + val); this._hash = val; }
|
|
||||||
},
|
|
||||||
items: {
|
|
||||||
first: null,
|
|
||||||
last: null,
|
|
||||||
newest: null,
|
|
||||||
oldest: null,
|
|
||||||
next: null,
|
|
||||||
prev: null,
|
|
||||||
act: null,
|
|
||||||
eps: 0
|
|
||||||
},
|
|
||||||
ct: {
|
|
||||||
content: document.querySelector("div#content"),
|
|
||||||
wrapper: {
|
|
||||||
pages: document.querySelectorAll("div.p_item"),
|
|
||||||
items: document.querySelectorAll("div.i_item")
|
|
||||||
},
|
|
||||||
tabs: {
|
|
||||||
item: document.querySelector("div#itemwrapper"),
|
|
||||||
howto: document.querySelector("div#howtowrapper")
|
|
||||||
},
|
|
||||||
arrows: document.querySelectorAll("div.arrow"),
|
|
||||||
header: {
|
|
||||||
iteminfo: document.querySelector("div#itemInfo"),
|
|
||||||
pagepos: document.querySelector("div#pagePosition"),
|
|
||||||
itempos: document.querySelector("div#itemPosition"),
|
|
||||||
infos: {
|
|
||||||
title: document.querySelector("span#itemTitle"),
|
|
||||||
source: document.querySelector("a#itemSource"),
|
|
||||||
time: document.querySelector("span#itemTime"),
|
|
||||||
nick: document.querySelector("span#itemNick"),
|
|
||||||
channel: document.querySelector("span#itemChannel")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/* This is the classic style f0ck */
|
||||||
|
|
||||||
|
.mudderfigg {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.id {
|
||||||
|
background: unset;
|
||||||
|
text-align: left;
|
||||||
|
color: #ffffff;
|
||||||
|
border: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id > a {
|
||||||
|
color: #9f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options {
|
||||||
|
padding-left: 15px;
|
||||||
|
margin-top: -5px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: "Cyberfall";
|
||||||
|
src: url(https://dr0p.it/Clgl.otf) format("opentype");
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0em auto 3em auto;
|
||||||
|
background-color: #0B111D;
|
||||||
|
color: #fff;
|
||||||
|
font-family: "Cyberfall";
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #00ffed;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #00b4ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 2px solid #154d71;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #121323;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
color: #00ffed;
|
||||||
|
width: 888px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #121323;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 35px;
|
||||||
|
border: 2px solid #154d71;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
position: fixed;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 999;
|
||||||
|
background-color: #0b111d;
|
||||||
|
border-bottom: 2px solid #207ea4;
|
||||||
|
text-align: center;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #121323;
|
||||||
|
border: 2px solid #154d71;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: rgb(18, 19, 35);
|
||||||
|
border: 2px solid #154D71;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 25%;
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #00edff;
|
||||||
|
background: #282A2E;
|
||||||
|
color: #f1e3ce;
|
||||||
|
font-family: 'Hack', monospace, sans-serif;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
border: 2px solid #207ea4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0px 0px 0px;
|
||||||
|
background: rgb(11, 17, 29);
|
||||||
|
border-bottom-left-radius: inherit;
|
||||||
|
border-bottom-right-radius: inherit;
|
||||||
|
color: #00edff;
|
||||||
|
transition: opacity .3s cubic-bezier(0.12, 0.63, 0.25, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #0b111d;
|
||||||
|
color: #00edff;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #00edff;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin-top: -4px;
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #0b111d;
|
||||||
|
border: 1px solid #00edff;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease,border .2s ease,transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0,0,0,.15), 0 0 0 1px rgba(0,0,0,.15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-webkit-slider-thumb {
|
||||||
|
background: #0b111d;
|
||||||
|
border-color: #00edff;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feuerfick */
|
||||||
|
.plyr input[type="range"]::-moz-range-thumb {
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #0b111d;
|
||||||
|
border: 2px solid #00edff;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease, border .2s ease, transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-moz-range-thumb {
|
||||||
|
background: #0b111d;
|
||||||
|
border-color: #00edff;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls button.tab-focus:focus, .plyr--video .plyr__controls button:hover {
|
||||||
|
background: #154d71;
|
||||||
|
color: #00edff;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls {
|
||||||
|
padding: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: rgb(11, 17, 29);
|
||||||
|
border: 0;
|
||||||
|
color: #00edff;
|
||||||
|
width: 300px;
|
||||||
|
padding-right: 5;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #154d71;
|
||||||
|
color: #00edff;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,687 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=Oswald:700|Press+Start+2P');
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 1em auto 3em auto;
|
||||||
|
background-color: rgb(10, 10, 10);
|
||||||
|
color: #01ffbd;
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
|
font-size: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #f300ff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #00ffc4;
|
||||||
|
border-radius: 0;
|
||||||
|
background: #9a0039;
|
||||||
|
color: #04e8bd;
|
||||||
|
font-size: 80%;
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
font-family: 'Press Start 2P', cursive;
|
||||||
|
font-size: 29px;
|
||||||
|
text-decoration: none;
|
||||||
|
animation: glitch2 2s steps(100) infinite;
|
||||||
|
color: white;
|
||||||
|
border-bottom: 2px solid #9a0039;
|
||||||
|
background-color: #061412;
|
||||||
|
margin-top: -60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts {
|
||||||
|
width: calc(100% - 210px);
|
||||||
|
margin: 0;
|
||||||
|
margin-left: 100px;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -moz-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-flow: row wrap;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
padding-top: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
color: #01f4b5;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 888px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #061412;
|
||||||
|
padding-top: 0;
|
||||||
|
border: 2px solid #9a0039;
|
||||||
|
margin-top: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #061412;
|
||||||
|
border: 2px solid #9a0039;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
border: 2px solid rgb(4, 232, 189);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color the Controls */
|
||||||
|
a#next {
|
||||||
|
color: #01f4b5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next:hover {
|
||||||
|
animation: glitch2 2s steps(100) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#random {
|
||||||
|
color: #01f4b5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#random:hover {
|
||||||
|
animation: glitch2 2s steps(100) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#prev {
|
||||||
|
color: #01f4b5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#prev:hover {
|
||||||
|
animation: glitch2 2s steps(100) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#holland {
|
||||||
|
color: #01f4b5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#holland:hover {
|
||||||
|
color: #cc0ccb;
|
||||||
|
animation: glitch2 2s steps(100) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PANEL */
|
||||||
|
.panel {
|
||||||
|
background-color: rgba(4, 27, 23, 0.61);
|
||||||
|
border: 2px solid #9a0039;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 7px;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-bottom: 2px solid #9a0039;
|
||||||
|
background: #061412;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls {
|
||||||
|
padding: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: #0a0a0a;
|
||||||
|
border: 0;
|
||||||
|
color: #f300ff;
|
||||||
|
width: 300px;
|
||||||
|
padding-right: 5;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin-top: -4px;
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #061412;
|
||||||
|
border: 1px solid #f300ff;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease,border .2s ease,transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0,0,0,.15), 0 0 0 1px rgba(0,0,0,.15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #00efb1;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #061412;
|
||||||
|
color: #01f4b5;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls button.tab-focus:focus, .plyr--video .plyr__controls button:hover {
|
||||||
|
background: #061412;
|
||||||
|
color: #01f4b5;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-webkit-slider-thumb {
|
||||||
|
background: #061412;
|
||||||
|
border-color: #01f4b5;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0px 0px 0px;
|
||||||
|
background: rgba(10, 10, 10, 0.73);
|
||||||
|
border-bottom-left-radius: inherit;
|
||||||
|
border-bottom-right-radius: inherit;
|
||||||
|
color: #01f4b5;
|
||||||
|
transition: opacity .3s cubic-bezier(0.12, 0.63, 0.25, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feuerfick */
|
||||||
|
.plyr input[type="range"]::-moz-range-thumb {
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #061412;
|
||||||
|
border: 2px solid #01f4b5;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease, border .2s ease, transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-moz-range-thumb {
|
||||||
|
background: #061412;
|
||||||
|
border-color: #01f4b5;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes noise-anim {
|
||||||
|
0% {
|
||||||
|
clip: rect(2px, 9999px, 94px, 0);
|
||||||
|
}
|
||||||
|
5% {
|
||||||
|
clip: rect(89px, 9999px, 60px, 0);
|
||||||
|
}
|
||||||
|
10% {
|
||||||
|
clip: rect(66px, 9999px, 50px, 0);
|
||||||
|
}
|
||||||
|
15% {
|
||||||
|
clip: rect(3px, 9999px, 54px, 0);
|
||||||
|
}
|
||||||
|
20% {
|
||||||
|
clip: rect(26px, 9999px, 19px, 0);
|
||||||
|
}
|
||||||
|
25% {
|
||||||
|
clip: rect(20px, 9999px, 66px, 0);
|
||||||
|
}
|
||||||
|
30% {
|
||||||
|
clip: rect(18px, 9999px, 43px, 0);
|
||||||
|
}
|
||||||
|
35% {
|
||||||
|
clip: rect(54px, 9999px, 48px, 0);
|
||||||
|
}
|
||||||
|
40% {
|
||||||
|
clip: rect(33px, 9999px, 66px, 0);
|
||||||
|
}
|
||||||
|
45% {
|
||||||
|
clip: rect(24px, 9999px, 61px, 0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
clip: rect(30px, 9999px, 18px, 0);
|
||||||
|
}
|
||||||
|
55% {
|
||||||
|
clip: rect(16px, 9999px, 96px, 0);
|
||||||
|
}
|
||||||
|
60% {
|
||||||
|
clip: rect(2px, 9999px, 20px, 0);
|
||||||
|
}
|
||||||
|
65% {
|
||||||
|
clip: rect(84px, 9999px, 19px, 0);
|
||||||
|
}
|
||||||
|
70% {
|
||||||
|
clip: rect(50px, 9999px, 5px, 0);
|
||||||
|
}
|
||||||
|
75% {
|
||||||
|
clip: rect(60px, 9999px, 80px, 0);
|
||||||
|
}
|
||||||
|
80% {
|
||||||
|
clip: rect(26px, 9999px, 96px, 0);
|
||||||
|
}
|
||||||
|
85% {
|
||||||
|
clip: rect(100px, 9999px, 74px, 0);
|
||||||
|
}
|
||||||
|
90% {
|
||||||
|
clip: rect(82px, 9999px, 29px, 0);
|
||||||
|
}
|
||||||
|
95% {
|
||||||
|
clip: rect(34px, 9999px, 97px, 0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
clip: rect(91px, 9999px, 44px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.return:after {
|
||||||
|
content: attr(class="return");
|
||||||
|
position: absolute;
|
||||||
|
left: 2px;
|
||||||
|
text-shadow: -1px 0 red;
|
||||||
|
top: 0;
|
||||||
|
color: white;
|
||||||
|
background: black;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 900px, 0, 0);
|
||||||
|
animation: noise-anim 2s infinite linear alternate-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes noise-anim-2 {
|
||||||
|
0% {
|
||||||
|
clip: rect(76px, 9999px, 52px, 0);
|
||||||
|
}
|
||||||
|
5% {
|
||||||
|
clip: rect(5px, 9999px, 11px, 0);
|
||||||
|
}
|
||||||
|
10% {
|
||||||
|
clip: rect(25px, 9999px, 9px, 0);
|
||||||
|
}
|
||||||
|
15% {
|
||||||
|
clip: rect(56px, 9999px, 30px, 0);
|
||||||
|
}
|
||||||
|
20% {
|
||||||
|
clip: rect(63px, 9999px, 93px, 0);
|
||||||
|
}
|
||||||
|
25% {
|
||||||
|
clip: rect(84px, 9999px, 63px, 0);
|
||||||
|
}
|
||||||
|
30% {
|
||||||
|
clip: rect(55px, 9999px, 54px, 0);
|
||||||
|
}
|
||||||
|
35% {
|
||||||
|
clip: rect(53px, 9999px, 52px, 0);
|
||||||
|
}
|
||||||
|
40% {
|
||||||
|
clip: rect(40px, 9999px, 66px, 0);
|
||||||
|
}
|
||||||
|
45% {
|
||||||
|
clip: rect(50px, 9999px, 15px, 0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
clip: rect(90px, 9999px, 31px, 0);
|
||||||
|
}
|
||||||
|
55% {
|
||||||
|
clip: rect(33px, 9999px, 4px, 0);
|
||||||
|
}
|
||||||
|
60% {
|
||||||
|
clip: rect(18px, 9999px, 57px, 0);
|
||||||
|
}
|
||||||
|
65% {
|
||||||
|
clip: rect(2px, 9999px, 21px, 0);
|
||||||
|
}
|
||||||
|
70% {
|
||||||
|
clip: rect(38px, 9999px, 93px, 0);
|
||||||
|
}
|
||||||
|
75% {
|
||||||
|
clip: rect(61px, 9999px, 44px, 0);
|
||||||
|
}
|
||||||
|
80% {
|
||||||
|
clip: rect(83px, 9999px, 27px, 0);
|
||||||
|
}
|
||||||
|
85% {
|
||||||
|
clip: rect(80px, 9999px, 51px, 0);
|
||||||
|
}
|
||||||
|
90% {
|
||||||
|
clip: rect(91px, 9999px, 39px, 0);
|
||||||
|
}
|
||||||
|
95% {
|
||||||
|
clip: rect(59px, 9999px, 36px, 0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
clip: rect(74px, 9999px, 80px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.return:before {
|
||||||
|
content: attr(data-text);
|
||||||
|
position: absolute;
|
||||||
|
left: -2px;
|
||||||
|
text-shadow: 1px 0 blue;
|
||||||
|
top: 0;
|
||||||
|
color: white;
|
||||||
|
background: transparent;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0, 900px, 0, 0);
|
||||||
|
animation: noise-anim-2 3s infinite linear alternate-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glitch2 {
|
||||||
|
0% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
1% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
2% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
3% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
4% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
5% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
6% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
7% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
8% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
9% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
10% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
11% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
12% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
13% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
14% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
15% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
16% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
17% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
18% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
19% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
20% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
21% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
22% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
23% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
24% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
25% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
26% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
27% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
28% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
29% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
30% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
31% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
32% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
33% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
34% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
35% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
36% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
37% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
38% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
39% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
40% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
41% {
|
||||||
|
text-shadow: 50px 0 0 blue, -50px 0 0 lime;
|
||||||
|
}
|
||||||
|
42% {
|
||||||
|
text-shadow: 0 0 0 blue, 0 0 0 lime;
|
||||||
|
}
|
||||||
|
43% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
44% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
45% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
46% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
47% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
48% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
49% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
51% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
52% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
53% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
54% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
55% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
56% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
57% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
58% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
59% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
60% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
61% {
|
||||||
|
text-shadow: 30px 0 0 red, -30px 0 0 lime;
|
||||||
|
}
|
||||||
|
62% {
|
||||||
|
text-shadow: 0 0 0 red, 0 0 0 lime;
|
||||||
|
}
|
||||||
|
63% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 blue;
|
||||||
|
}
|
||||||
|
64% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 blue;
|
||||||
|
}
|
||||||
|
65% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 blue;
|
||||||
|
}
|
||||||
|
66% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 blue;
|
||||||
|
}
|
||||||
|
67% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
68% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
69% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
70% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
71% {
|
||||||
|
text-shadow: 70px 0 0 red, -70px 0 0 blue;
|
||||||
|
}
|
||||||
|
72% {
|
||||||
|
text-shadow: 0 0 0 red, 0 0 0 blue;
|
||||||
|
}
|
||||||
|
73% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
74% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
75% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
76% {
|
||||||
|
text-shadow: 1px 0 0 red, -1px 0 0 blue;
|
||||||
|
}
|
||||||
|
77% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
78% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
79% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
80% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 blue;
|
||||||
|
}
|
||||||
|
81% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
82% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
83% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
84% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
85% {
|
||||||
|
text-shadow: 0.5px 0 0 red, -0.5px 0 0 lime;
|
||||||
|
}
|
||||||
|
86% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
87% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
88% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
89% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
90% {
|
||||||
|
text-shadow: -1px 0 0 red, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
91% {
|
||||||
|
text-shadow: 60px 0 0 lime, -60px 0 0 blue;
|
||||||
|
}
|
||||||
|
92% {
|
||||||
|
text-shadow: 0 0 0 lime, 0 0 0 blue;
|
||||||
|
}
|
||||||
|
92% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
93% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
94% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
95% {
|
||||||
|
text-shadow: 0.7px 0 0 blue, -0.7px 0 0 lime;
|
||||||
|
}
|
||||||
|
96% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
97% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
98% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
99% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
text-shadow: -1px 0 0 blue, 1px 0 0 lime;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
/* written by sirx for f0ck.me */
|
||||||
|
/* use whatever you like */
|
||||||
|
ul#posts {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
||||||
|
grid-gap: 1em;
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
background-color: #1b1b1b;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container.is-fluid {
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.post {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.item-mime {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
color: #68da20;
|
||||||
|
text-shadow: 1px 1px black;
|
||||||
|
font-size: 11px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background: #000000b8;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.post:hover > span.item-mime {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, .navbar-link:focus, .navbar-link:focus-within, .navbar-link:hover, .navbar-link.is-active {
|
||||||
|
background-color: #000000;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
position: relative;
|
||||||
|
font-weight: normal;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 932px;
|
||||||
|
margin: unset;
|
||||||
|
font-size: 30px;
|
||||||
|
color: #99ff00;
|
||||||
|
padding: 140px 40px 140px 40px;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-transform: translateZ(0);
|
||||||
|
align-content: inherit;
|
||||||
|
align-self: center;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
display: grid;
|
||||||
|
justify-content: space-around;
|
||||||
|
grid-template-columns: 0fr 1fr 0fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.previous-post, .next-post {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
img#f0ck-image {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metadata {
|
||||||
|
text-align: center;
|
||||||
|
position: sticky;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #99ff00;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #99ff00;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-item, .navbar-link {
|
||||||
|
color: white;
|
||||||
|
text-shadow: 1px 1px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-object {
|
||||||
|
text-align: center;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.id-link {
|
||||||
|
padding-right: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#my-video {
|
||||||
|
max-height: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), .subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) {
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-container {
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 56.25%; /*16:9*/
|
||||||
|
padding-top: 30px;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-container video {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.irc {
|
||||||
|
padding: 10px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next:hover {
|
||||||
|
box-shadow: -1px 0px #99ff001c;
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#prev:hover {
|
||||||
|
box-shadow: 1px 0px #99ff001c;
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover {
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
min-height: 517px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#themeselector {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #343a40;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
a#next, a#prev {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img#biohaz {
|
||||||
|
width: 28px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
* {
|
||||||
|
-webkit-box-sizing: content-box;
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
body {
|
||||||
|
margin: 0em auto 3em auto;
|
||||||
|
background-color: #eeeeee;
|
||||||
|
color: #fff;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #3333cc;
|
||||||
|
font-weight: bold;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #3d3dff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
border: 2px solid #313370;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 888px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
margin-top: 7px;
|
||||||
|
color: #313370;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: 2px solid;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: #aaaacc;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #3333cc;
|
||||||
|
background: #eeeeee;
|
||||||
|
color: #3333cc;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 80%;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: #aaaacc;
|
||||||
|
border: 2px solid #313370;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 25%;
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact {
|
||||||
|
margin: 20px;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.irc {
|
||||||
|
margin: 20px;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
color: #3d3dff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 2px solid #313370;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #aaaacc;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
color: #3333cc;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 888px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #aaaacc;
|
||||||
|
padding-top: 0;
|
||||||
|
border: 2px solid #313370;
|
||||||
|
margin-top: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #aaaacc;
|
||||||
|
border: 2px solid #313370;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
margin: 0 auto;
|
||||||
|
margin-top: 5px;
|
||||||
|
float: none;
|
||||||
|
width: 888px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #eeeeee;
|
||||||
|
color: #3535cb;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0px 0px 0px;
|
||||||
|
background: rgb(238, 238, 238);
|
||||||
|
border-bottom-left-radius: inherit;
|
||||||
|
border-bottom-right-radius: inherit;
|
||||||
|
color: #3535cb;
|
||||||
|
transition: opacity .3s cubic-bezier(0.12, 0.63, 0.25, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.plyr__time--current {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #3535cb;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__progress--buffer {
|
||||||
|
color: rgb(49, 51, 112);
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__progress--buffer, .plyr--video .plyr__volume--display {
|
||||||
|
background: rgb(170, 170, 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls button.tab-focus:focus, .plyr--video .plyr__controls button:hover {
|
||||||
|
background: #3535cb;
|
||||||
|
color: #eeeeee;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin-top: -4px;
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #eeeeee;
|
||||||
|
border: 2px solid #3535cb;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease,border .2s ease,transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0,0,0,.15), 0 0 0 1px rgba(0,0,0,.15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-webkit-slider-thumb {
|
||||||
|
background: #eeeeee;
|
||||||
|
border-color: #3535cb;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__controls button {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
-ms-flex-negative: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
overflow: visible;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: 7px;
|
||||||
|
border: 0;
|
||||||
|
background: 0 0;
|
||||||
|
border-radius: 0px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background .3s ease,color .3s ease,opacity .3s ease;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feuerfick */
|
||||||
|
.plyr input[type="range"]::-moz-range-thumb {
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #eeeeee;
|
||||||
|
border: 2px solid #3535cb;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease, border .2s ease, transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-moz-range-thumb {
|
||||||
|
background: #eeeeee;
|
||||||
|
border-color: #3535cb;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Audio */
|
||||||
|
.plyr--audio .plyr__controls {
|
||||||
|
padding: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: #eeeeee;
|
||||||
|
border: 0;
|
||||||
|
color: #3333cc;
|
||||||
|
width: 300px;
|
||||||
|
padding-right: 5;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #3535cb;
|
||||||
|
color: #eeeeee;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__progress--buffer, .plyr--audio .plyr__volume--display {
|
||||||
|
background: rgb(170, 170, 204);
|
||||||
|
}
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=Space+Mono');
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Space Mono', monospace;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mudderfigg {
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id {
|
||||||
|
text-align: center;
|
||||||
|
background: #262626;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 0;
|
||||||
|
color: white;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border: 1px solid #99ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id > a {
|
||||||
|
color: #99ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
border-top: 2px dotted #99ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
margin-top: 0px;
|
||||||
|
width: 1200px;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 1200px;
|
||||||
|
border-left: 1px solid black;
|
||||||
|
border-right: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 0px;
|
||||||
|
background: #484747;
|
||||||
|
border: 0px solid #99ff00;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
width: 1200px;
|
||||||
|
margin-top: 35px;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
position: relative;
|
||||||
|
font-weight: normal;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 932px;
|
||||||
|
margin: unset;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #99ff00;
|
||||||
|
padding: 140px 40px 140px 40px;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-transform: translateZ(0);
|
||||||
|
align-content: inherit;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.van {
|
||||||
|
width: 171px;
|
||||||
|
height: 28px;
|
||||||
|
background-image: url(/s/img/f0ck_small.png);
|
||||||
|
background-position: 0px -1px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.van {
|
||||||
|
border: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.navbar {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: -35px;
|
||||||
|
top: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audiojs {
|
||||||
|
height: 360px;
|
||||||
|
width: 640px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: unset;
|
||||||
|
background: #262626;
|
||||||
|
color: #f1e3ce;
|
||||||
|
font-family: 'Space Mono', monospace;
|
||||||
|
font-size: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blöde Box */
|
||||||
|
/*body:after {
|
||||||
|
content: "gemaked vong 1 spast, 1 nudelsuppe unt 1 hunt. hypfer isd doof.";
|
||||||
|
position: fixed;
|
||||||
|
background: #484747;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
color: #9f0;
|
||||||
|
border-left: 1px solid black;
|
||||||
|
border-top: 1px solid black;
|
||||||
|
padding: 5px;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.my-video-dimensions {
|
||||||
|
width: 900px;
|
||||||
|
height: auto;
|
||||||
|
min-height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img#f0ck-image {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vjs-audio.vjs-has-started .vjs-poster {
|
||||||
|
display: block;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vjs-poster {
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#elfe {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-self: center;
|
||||||
|
max-height: fit-content;
|
||||||
|
max-height: -moz-fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return-how {
|
||||||
|
position: unset;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.f0ckme {
|
||||||
|
color: inherit;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RIP TERRY */
|
||||||
|
.thumb[src="./t/34449.png"] {
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
-webkit-transition-duration: 0.2s;
|
||||||
|
background-color: gold;
|
||||||
|
border-width: medium;
|
||||||
|
border-color: gold;
|
||||||
|
font-size: 18px;
|
||||||
|
font-style: italic;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 128px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
body {
|
||||||
|
background-color: #0b0b0e;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts {
|
||||||
|
padding-top: 3.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
border: 1px solid #1dadb04d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #1dadb0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-shadow: 2px 1px 15px #1dadb0;
|
||||||
|
color: #1dadb0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
color: #1dadb0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
|
||||||
|
border-bottom-color: currentcolor;
|
||||||
|
border-bottom-style: none;
|
||||||
|
border-bottom-width: 0px;
|
||||||
|
background-color: #121212;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
color: #1dadb0;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
overflow: auto;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
border-bottom-color: currentcolor;
|
||||||
|
border-bottom-style: none;
|
||||||
|
border-bottom-width: 0px;
|
||||||
|
background-color: #121212;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
color: #1dadb0;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
overflow: auto;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
margin-top: -55px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
border: 0;
|
||||||
|
border-bottom-color: currentcolor;
|
||||||
|
border-bottom-style: none;
|
||||||
|
border-bottom-width: 0px;
|
||||||
|
background-color: #121212;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
color: #1dadb0;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
overflow: auto;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
margin-top: 55px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium {
|
||||||
|
background-color: #121212;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
color: #1dadb0;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
overflow: auto;
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
border-bottom-color: currentcolor;
|
||||||
|
border-bottom-style: none;
|
||||||
|
border-bottom-width: 0px;
|
||||||
|
background-color: #121212;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
color: #1dadb0;
|
||||||
|
text-shadow: 0 1px 1px #000;
|
||||||
|
overflow: auto;
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
border: 0;
|
||||||
|
margin-top: 10px;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id {
|
||||||
|
background: #090909;
|
||||||
|
background-image: none;
|
||||||
|
color: #1dadb0;
|
||||||
|
border: 0;
|
||||||
|
align-self: center;
|
||||||
|
font-size: 90%;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAYAAAA4GpVBAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90GBgMqHcZ0EYUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAF0lEQVQI12NgYGAwZsAECDEWBgYGBgYACpwAazfG694AAAAASUVORK5CYII=");
|
||||||
|
box-shadow: 0 0 5px rgb(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: #090909;
|
||||||
|
color: #1dadb0;
|
||||||
|
font-family: 'Hack', monospace, sans-serif;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
color: #1dadb0;
|
||||||
|
padding: 5px;
|
||||||
|
background: black;
|
||||||
|
border: 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.van {
|
||||||
|
width: 276px;
|
||||||
|
height: 45px;
|
||||||
|
background-image: url(/s/img/f0xy.png);
|
||||||
|
background-position: 0px -1px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return > a {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
background-color: #161618 !important;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-big-play-button {
|
||||||
|
background-color: #1dadb04d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js:hover .vjs-big-play-button, .video-js .vjs-big-play-button:focus, .video-js .vjs-big-play-button:active {
|
||||||
|
background-color: #1dadb0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-play-progress, .video-js .vjs-volume-level {
|
||||||
|
background-color: #1dadb0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js {
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control:focus::before, .video-js .vjs-control:hover::before {
|
||||||
|
text-shadow: 0px 0px 0.2em #fff,0 0 0.2em #262626,0 0 0.2em #262626;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-loading-spinner {
|
||||||
|
border-color: #1dadb0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#my-video {
|
||||||
|
border-radius: 0px;
|
||||||
|
box-shadow: none;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
margin-top: 15px;
|
||||||
|
border: 2px solid #161618;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar > a {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
@@ -0,0 +1,181 @@
|
|||||||
|
.thumb {
|
||||||
|
border: 2px solid #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0em auto 3em auto;
|
||||||
|
background-color: #1b1a1a;
|
||||||
|
color: #848484;
|
||||||
|
font-family: Monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #ff008d;
|
||||||
|
background: #2f2f2f;
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: 'Hack', monospace, sans-serif;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 25px;
|
||||||
|
border-bottom: 2px solid #ff008d;
|
||||||
|
margin-top: -55px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
color: #ff008d;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 888px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #484747;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 55px;
|
||||||
|
border: 2px solid #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
position: fixed;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 999;
|
||||||
|
background-color: #484747;
|
||||||
|
border-bottom: 2px solid #ff008d;
|
||||||
|
text-align: center;
|
||||||
|
top: 0;
|
||||||
|
color: #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #484747;
|
||||||
|
border: 2px solid #ff008d;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.id {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#holland {
|
||||||
|
color: #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
color: #ff008d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: rgb(72, 71, 71);
|
||||||
|
border: 2px solid #ff008d;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 25%;
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls {
|
||||||
|
padding: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: #1b1a1a;
|
||||||
|
border: 0;
|
||||||
|
color: #ff008d;
|
||||||
|
width: 300px;
|
||||||
|
padding-right: 5;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin-top: -4px;
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #262626;
|
||||||
|
border: 1px solid #ff008d;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease,border .2s ease,transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0,0,0,.15), 0 0 0 1px rgba(0,0,0,.15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #ff008d;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #484747;
|
||||||
|
color: #ff008d;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-webkit-slider-thumb {
|
||||||
|
background: #262626;
|
||||||
|
border-color: #ff008d;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0px 0px 0px;
|
||||||
|
background: rgba(38, 38, 38, 0.97);
|
||||||
|
border-bottom-left-radius: inherit;
|
||||||
|
border-bottom-right-radius: inherit;
|
||||||
|
color: #ff008d;
|
||||||
|
transition: opacity .3s cubic-bezier(0.12, 0.63, 0.25, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feuerfick */
|
||||||
|
.plyr input[type="range"]::-moz-range-thumb {
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #ff008d;
|
||||||
|
border: 2px solid #262626;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease, border .2s ease, transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-moz-range-thumb {
|
||||||
|
background: #ff008d;
|
||||||
|
border-color: #262626;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls button.tab-focus:focus, .plyr--video .plyr__controls button:hover {
|
||||||
|
background: #484747;
|
||||||
|
color: #ff008d;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,323 @@
|
|||||||
|
* {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
max-height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0em auto 3em auto;
|
||||||
|
background-color: #262626;
|
||||||
|
color: #fff;
|
||||||
|
font-family: Monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.42857143;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact {
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #99ff00;
|
||||||
|
background: #282A2E;
|
||||||
|
color: #f1e3ce;
|
||||||
|
font-family: 'Hack', monospace, sans-serif;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts {
|
||||||
|
width: calc(100% - 210px);
|
||||||
|
margin: 0;
|
||||||
|
margin-left: 100px;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -moz-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-flow: row wrap;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
padding-top: 2.2em;
|
||||||
|
}
|
||||||
|
li.post {
|
||||||
|
padding: 5px;
|
||||||
|
width: 128px;
|
||||||
|
height: 128px;
|
||||||
|
margin-top: 5px;
|
||||||
|
line-height: 128px;
|
||||||
|
-webkit-flex: 1 1 auto;
|
||||||
|
ms-flex: 1 1 auto;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
.thumb {
|
||||||
|
border: 2px solid #4c4a4a;
|
||||||
|
}
|
||||||
|
.thumb:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
padding: 1em 0;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #9f0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #74c100;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #484747;
|
||||||
|
border: 0px solid #99ff00;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
.id {
|
||||||
|
text-align: center;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 888px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 35px;
|
||||||
|
border: 0px solid #99ff00;
|
||||||
|
color: #99ff00;
|
||||||
|
background: #484747;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
position: fixed;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 999;
|
||||||
|
background-color: #484747;
|
||||||
|
border-bottom: 2px solid #99ff00;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
border: 0;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
margin-top: -35px;
|
||||||
|
position: fixed;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 999;
|
||||||
|
border-bottom: 1px solid #99ff00;
|
||||||
|
padding: 5px;
|
||||||
|
background: #484747;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.irc {
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
color: #9df943;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: #484747;
|
||||||
|
border: 0px solid #99ff00;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 25%;
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
color: #ffffff;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
margin: 0 auto;
|
||||||
|
margin-top: 5px;
|
||||||
|
float: none;
|
||||||
|
width: 888px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
max-height: 770px;
|
||||||
|
border: 1px solid black;
|
||||||
|
box-shadow: 0 0 5px #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 888px;
|
||||||
|
}
|
||||||
|
|
||||||
|
video#player {
|
||||||
|
max-width: 100%;
|
||||||
|
height: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Plyr */
|
||||||
|
.plyr--audio .plyr__controls {
|
||||||
|
padding: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: #262626;
|
||||||
|
border: 0;
|
||||||
|
color: #99ff00;
|
||||||
|
width: 300px;
|
||||||
|
padding-right: 5;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr audio, .plyr video {
|
||||||
|
width: 100%;
|
||||||
|
height: auto!important;
|
||||||
|
vertical-align: middle;
|
||||||
|
border-radius: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Video Player Style */
|
||||||
|
.plyr--audio .plyr__controls button.tab-focus:focus, .plyr--audio .plyr__controls button:hover, .plyr__play-large {
|
||||||
|
background: #484747;
|
||||||
|
color: #9f0;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0px 0px 0px;
|
||||||
|
background: rgba(38, 38, 38, 0.97);
|
||||||
|
border-bottom-left-radius: inherit;
|
||||||
|
border-bottom-right-radius: inherit;
|
||||||
|
color: #91ee06;
|
||||||
|
transition: opacity .3s cubic-bezier(0.12, 0.63, 0.25, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr {
|
||||||
|
position: relative;
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 200px;
|
||||||
|
font-family: Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;
|
||||||
|
direction: ltr;
|
||||||
|
border: 1px solid #0c0d0c;
|
||||||
|
box-shadow: 0 0 15px #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--video .plyr__controls button.tab-focus:focus, .plyr--video .plyr__controls button:hover {
|
||||||
|
background: #484747;
|
||||||
|
color: #9f0;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #99ff00;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin-top: -4px;
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #262626;
|
||||||
|
border: 1px solid #99ff00;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease,border .2s ease,transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0,0,0,.15), 0 0 0 1px rgba(0,0,0,.15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-webkit-slider-thumb {
|
||||||
|
background: #262626;
|
||||||
|
border-color: #99ff00;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--fullscreen-active video {
|
||||||
|
height: 100%!important;
|
||||||
|
max-width: 100%!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr--fullscreen-active {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 10000000;
|
||||||
|
background: #000;
|
||||||
|
border-radius: 0!important;
|
||||||
|
border: 0!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feuerfick */
|
||||||
|
.plyr input[type="range"]::-moz-range-thumb {
|
||||||
|
position: relative;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
background: #9f0;
|
||||||
|
border: 2px solid #262626;
|
||||||
|
border-radius: 100%;
|
||||||
|
transition: background .2s ease, border .2s ease, transform .2s ease;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .15);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr input[type=range]:active::-moz-range-thumb {
|
||||||
|
background: #9f0;
|
||||||
|
border-color: #262626;
|
||||||
|
transform: scale(1.25)
|
||||||
|
}
|
||||||
|
|
||||||
|
.savetheinternet {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
text-align: center;
|
||||||
|
background: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.f0ckme {
|
||||||
|
color: inherit;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
letter-spacing: 7px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,277 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=VT323');
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0em auto 3em auto;
|
||||||
|
background-color: #040404;
|
||||||
|
color: #fff;
|
||||||
|
font-family: 'VT323', monospace;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.id {
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
background: #040404;
|
||||||
|
box-shadow: 0 0 7px 0px #00df00;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.van {
|
||||||
|
width: 171px;
|
||||||
|
height: 28px;
|
||||||
|
background-image: url(/s/img/term_f0ck_logo.png);
|
||||||
|
background-position: 0px -1px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.id > a {
|
||||||
|
color: rgba(255,0,247,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.src>a {
|
||||||
|
color: #ff00f7;
|
||||||
|
text-shadow: 0 0 20px #ff00f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: 1px double #ff00f7;
|
||||||
|
background: #282A2E;
|
||||||
|
color: #f1e3ce;
|
||||||
|
font-family: 'VT323', 'Courier', monospace;
|
||||||
|
font-size: 80%;
|
||||||
|
-moz-box-shadow: 0px 0px 37px 5px rgba(43,255,0,1);
|
||||||
|
-webkit-box-shadow: 0px 0px 10px 0px rgba(255,0,247,1);
|
||||||
|
-moz-box-shadow: 0px 0px 10px 0px rgba(255,0,247,1);
|
||||||
|
box-shadow: 0px 0px 10px 0px rgba(255,0,247,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 17px;
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
background: #0b0b0b;
|
||||||
|
border-bottom: 2px solid #03dc03;
|
||||||
|
margin-top: -35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
color: #00d500;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #0b0b0b;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 35px;
|
||||||
|
border: 2px solid #03dc03;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 5px;
|
||||||
|
background: #0b0b0b;
|
||||||
|
border: 2px solid #03dc03;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#my-video {
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 0 20px #000000;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#elfe {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next {
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#random {
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#prev {
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: rgba(16, 16, 16, 0.61);
|
||||||
|
border: 2px solid #0b842b;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 25%;
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
-webkit-box-shadow: 0px 0px 6px 0px rgba(0,255,30,1)
|
||||||
|
-moz-box-shadow: 0px 0px 6px 0px rgba(0,255,30,1);
|
||||||
|
box-shadow: 0px 0px 6px 0px rgba(0,255,30,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
border: 2px solid #00df00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
position: fixed;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 999;
|
||||||
|
background-color: #0b0b0b;
|
||||||
|
border-bottom: 2px solid #00df00;
|
||||||
|
text-align: center;
|
||||||
|
top: 0;
|
||||||
|
color: #00df00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar>a {
|
||||||
|
color: rgba(43,255,0,1);
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar>a:hover {
|
||||||
|
color: #00b700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact>a {
|
||||||
|
color: rgba(43,255,0,1);
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact>a:hover {
|
||||||
|
color: #00b700;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
color: rgba(43,255,0,1);
|
||||||
|
text-shadow: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #00df00;
|
||||||
|
text-shadow: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #00b700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plyr__progress--played, .plyr__volume--display {
|
||||||
|
z-index: 1;
|
||||||
|
color: #00df00;
|
||||||
|
background: 0 0;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
select#themeSelector {
|
||||||
|
color: #00DF00;
|
||||||
|
text-shadow: 0 0 20px #00DF00;
|
||||||
|
background: #040404;
|
||||||
|
border-radius: 0;
|
||||||
|
border: unset;
|
||||||
|
box-shadow: unset;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
border: #00df00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
margin: 0 auto;
|
||||||
|
border-left: 0px solid black;
|
||||||
|
border-right: 0px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border: 0;
|
||||||
|
box-shadow: 0px 0px 20px 0px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
border-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
border: 0;
|
||||||
|
border-left: 2px solid #03dc03;
|
||||||
|
border-right: 2px solid #03dc03;
|
||||||
|
border-bottom: 2px solid #03dc03;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-loading-spinner {
|
||||||
|
border-color: #03dc03;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control:focus:before, .video-js .vjs-control:hover:before {
|
||||||
|
text-shadow: 0 0 0.8em #03dc03, 0 0 0.8em #03dc03, 0 0 0.8em #03dc03;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control:focus:before, .video-js .vjs-control:hover:before, .video-js .vjs-control:focus {
|
||||||
|
text-shadow: 0 0 1em #03dc03;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
background-color: rgba(4, 4, 4, 0.82) !important;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
background-color: rgba(4, 4, 4, 0.82) !important;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
i.fa.fa-cog {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-play-progress, .video-js .vjs-volume-level {
|
||||||
|
background-color: #03dc03;
|
||||||
|
box-shadow: 0 0 20px 0px #01de01;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js:hover .vjs-big-play-button, .video-js .vjs-big-play-button:focus, .video-js .vjs-big-play-button:active {
|
||||||
|
background-color: #00df00;
|
||||||
|
box-shadow: 0 0 10px 0px #00df00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-fullscreen, .video-js.vjs-fullscreen .vjs-tech {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline {
|
||||||
|
width: 10em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-controls-disabled .vjs-big-play-button {
|
||||||
|
display: none!important
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control {
|
||||||
|
width: 3em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-inline:before {
|
||||||
|
width: 1.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.vjs-menu-button-inline .vjs-menu {
|
||||||
|
left: 3em
|
||||||
|
}
|
||||||
|
|
||||||
|
.vjs-paused.vjs-has-started.video-js .vjs-big-play-button,.video-js.vjs-ended .vjs-big-play-button,.video-js.vjs-paused .vjs-big-play-button {
|
||||||
|
display: block
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-load-progress div,.vjs-seeking .vjs-big-play-button,.vjs-waiting .vjs-big-play-button {
|
||||||
|
display: none!important
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-mouse-display:after,.video-js .vjs-play-progress:after {
|
||||||
|
padding: 0 .4em .3em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-ended .vjs-loading-spinner {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-ended .vjs-big-play-button {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js *,.video-js:after,.video-js:before {
|
||||||
|
box-sizing: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
color: inherit;
|
||||||
|
line-height: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-fullscreen,.video-js.vjs-fullscreen .vjs-tech {
|
||||||
|
width: 100%!important;
|
||||||
|
height: 100%!important
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js {
|
||||||
|
font-size: 14px;
|
||||||
|
overflow: hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control {
|
||||||
|
color: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline {
|
||||||
|
width: 8.35em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:hover .vjs-menu .vjs-menu-content {
|
||||||
|
height: 3em;
|
||||||
|
width: 6.35em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before {
|
||||||
|
text-shadow: 0 0 1em #fff,0 0 1em #fff,0 0 1em #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-spacer,.video-js .vjs-time-control {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -moz-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-flex: 1 1 auto;
|
||||||
|
-moz-box-flex: 1 1 auto;
|
||||||
|
-webkit-flex: 1 1 auto;
|
||||||
|
-ms-flex: 1 1 auto;
|
||||||
|
flex: 1 1 auto
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control {
|
||||||
|
-webkit-box-flex: 0 1 auto;
|
||||||
|
-moz-box-flex: 0 1 auto;
|
||||||
|
-webkit-flex: 0 1 auto;
|
||||||
|
-ms-flex: 0 1 auto;
|
||||||
|
flex: 0 1 auto;
|
||||||
|
width: auto
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control.vjs-time-divider {
|
||||||
|
width: 14px
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control.vjs-time-divider div {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control.vjs-current-time {
|
||||||
|
margin-left: 1em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control .vjs-current-time-display,.video-js .vjs-time-control .vjs-duration-display {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control .vjs-current-time-display {
|
||||||
|
text-align: right
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-time-control .vjs-duration-display {
|
||||||
|
text-align: left
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-play-progress:before,.video-js .vjs-progress-control .vjs-play-progress:before,.video-js .vjs-remaining-time,.video-js .vjs-volume-level:after,.video-js .vjs-volume-level:before,.video-js.vjs-live .vjs-time-control.vjs-current-time,.video-js.vjs-live .vjs-time-control.vjs-duration,.video-js.vjs-live .vjs-time-control.vjs-time-divider,.video-js.vjs-no-flex .vjs-time-control.vjs-remaining-time {
|
||||||
|
display: none
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-no-flex .vjs-time-control {
|
||||||
|
display: table-cell;
|
||||||
|
width: 4em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-progress-control {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: .5em;
|
||||||
|
top: -.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-progress-control .vjs-load-progress,.video-js .vjs-progress-control .vjs-play-progress,.video-js .vjs-progress-control .vjs-progress-holder {
|
||||||
|
height: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-progress-control .vjs-progress-holder {
|
||||||
|
margin: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-progress-control:hover {
|
||||||
|
height: 1.5em;
|
||||||
|
top: -1.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
-webkit-transition: -webkit-transform .1s ease 0s;
|
||||||
|
-moz-transition: -moz-transform .1s ease 0s;
|
||||||
|
-ms-transition: -ms-transform .1s ease 0s;
|
||||||
|
-o-transition: -o-transform .1s ease 0s;
|
||||||
|
transition: transform .1s ease 0s
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-active .vjs-control-bar,.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-inactive .vjs-control-bar,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-active .vjs-control-bar,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-control-bar,.video-js.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-control-bar {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-backface-visibility: hidden;
|
||||||
|
-webkit-transform: translateY(3em);
|
||||||
|
-moz-transform: translateY(3em);
|
||||||
|
-ms-transform: translateY(3em);
|
||||||
|
-o-transform: translateY(3em);
|
||||||
|
transform: translateY(3em);
|
||||||
|
-webkit-transition: -webkit-transform 1s ease 0s;
|
||||||
|
-moz-transition: -moz-transform 1s ease 0s;
|
||||||
|
-ms-transition: -ms-transform 1s ease 0s;
|
||||||
|
-o-transition: -o-transform 1s ease 0s;
|
||||||
|
transition: transform 1s ease 0s
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-active .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-inactive .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-active .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-progress-control,.video-js.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-progress-control {
|
||||||
|
height: .25em;
|
||||||
|
top: -.25em;
|
||||||
|
pointer-events: none;
|
||||||
|
-webkit-transition: height 1s,top 1s;
|
||||||
|
-moz-transition: height 1s,top 1s;
|
||||||
|
-ms-transition: height 1s,top 1s;
|
||||||
|
-o-transition: height 1s,top 1s;
|
||||||
|
transition: height 1s,top 1s
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-active.vjs-fullscreen .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-inactive.vjs-fullscreen .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-active.vjs-fullscreen .vjs-progress-control,.video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-inactive.vjs-fullscreen .vjs-progress-control,.video-js.vjs-has-started.vjs-playing.vjs-user-inactive.vjs-fullscreen .vjs-progress-control {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 1s ease 1s;
|
||||||
|
-moz-transition: opacity 1s ease 1s;
|
||||||
|
-ms-transition: opacity 1s ease 1s;
|
||||||
|
-o-transition: opacity 1s ease 1s;
|
||||||
|
transition: opacity 1s ease 1s
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js.vjs-live .vjs-live-control {
|
||||||
|
margin-left: 1em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-big-play-button {
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -1em;
|
||||||
|
margin-top: -1em;
|
||||||
|
width: 2em;
|
||||||
|
height: 2em;
|
||||||
|
line-height: 2em;
|
||||||
|
border: none;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 3.5em;
|
||||||
|
background-color: rgba(0,0,0,.45);
|
||||||
|
color: #fff;
|
||||||
|
-webkit-transition: border-color .4s,outline .4s,background-color .4s;
|
||||||
|
-moz-transition: border-color .4s,outline .4s,background-color .4s;
|
||||||
|
-ms-transition: border-color .4s,outline .4s,background-color .4s;
|
||||||
|
-o-transition: border-color .4s,outline .4s,background-color .4s;
|
||||||
|
transition: border-color .4s,outline .4s,background-color .4s
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-popup .vjs-menu {
|
||||||
|
left: -3em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-content {
|
||||||
|
background-color: transparent;
|
||||||
|
width: 12em;
|
||||||
|
left: -1.5em;
|
||||||
|
padding-bottom: .5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-item,.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-title {
|
||||||
|
background-color: #151b17;
|
||||||
|
margin: .3em 0;
|
||||||
|
padding: .5em;
|
||||||
|
border-radius: .3em
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-item.vjs-selected {
|
||||||
|
background-color: #2483d5
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-big-play-button {
|
||||||
|
background-color: rgba(0,0,0,0.5);
|
||||||
|
font-size: 2.5em;
|
||||||
|
border-radius: 20%;
|
||||||
|
height: 1.4em !important;
|
||||||
|
line-height: 1.4em !important;
|
||||||
|
margin-top: -0.7em !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus,.video-js .vjs-big-play-button:active {
|
||||||
|
background-color: #99ff00
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-loading-spinner {
|
||||||
|
border-color: #99ff00
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar2 {
|
||||||
|
background-color: #262626
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
background-color: #262626 !important;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 12px
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-play-progress,.video-js .vjs-volume-level {
|
||||||
|
background-color: #99ff00
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-load-progress {
|
||||||
|
background: rgba(255,255,255,0.3);
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=Orbitron');
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: black;
|
||||||
|
font-family: 'Orbitron', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar, .return {
|
||||||
|
background-color: #000000;
|
||||||
|
border-bottom: 2px solid #f50083;
|
||||||
|
box-shadow: 0px -2px 20px #f600c1;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.van {
|
||||||
|
width: 171px;
|
||||||
|
height: 28px;
|
||||||
|
background-image: url(/s/img/x34_f0ck_logo.png);
|
||||||
|
background-position: 0px -1px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:hover {
|
||||||
|
color: #f50083;
|
||||||
|
text-shadow: 0px 0px 10px #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumb {
|
||||||
|
box-shadow: 0 0 10px #f50083;
|
||||||
|
border: 2px solid #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return {
|
||||||
|
margin-top: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
margin-top: 50px;
|
||||||
|
background: #050505;
|
||||||
|
border: 1px solid #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
border-left: 1px solid #f50083;
|
||||||
|
border-right: 1px solid #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel.info {
|
||||||
|
border: 1px solid #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium, .thumbnail {
|
||||||
|
background: #050505;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
background-color: #050505;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id {
|
||||||
|
background: #000000;
|
||||||
|
border: 1px solid #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#next, a#prev {
|
||||||
|
color: #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.id > a {
|
||||||
|
color: #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
background: #000000;
|
||||||
|
font-family: 'Orbitron', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-play-progress, .video-js .vjs-volume-level {
|
||||||
|
background-color: #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js:hover .vjs-big-play-button, .video-js .vjs-big-play-button:focus, .video-js .vjs-big-play-button:active {
|
||||||
|
background-color: #f50083;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-js .vjs-control-bar {
|
||||||
|
background-color: #000000 !important;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 434 KiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 953 B |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 376 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 489 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg"><symbol id="plyr-captions-off" viewBox="0 0 18 18"><path d="M1 1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h4.6l2.7 2.7c.2.2.4.3.7.3.3 0 .5-.1.7-.3l2.7-2.7H17c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1H1zm4.52 10.15c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41C8.47 4.96 7.46 3.76 5.5 3.76c-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69zm7.57 0c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41c-.28-1.15-1.29-2.35-3.25-2.35-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69z" fill-rule="evenodd" fill-opacity=".5"/></symbol><symbol id="plyr-captions-on" viewBox="0 0 18 18"><path d="M1 1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h4.6l2.7 2.7c.2.2.4.3.7.3.3 0 .5-.1.7-.3l2.7-2.7H17c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1H1zm4.52 10.15c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41C8.47 4.96 7.46 3.76 5.5 3.76c-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69zm7.57 0c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41c-.28-1.15-1.29-2.35-3.25-2.35-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69z" fill-rule="evenodd"/></symbol><symbol id="plyr-enter-fullscreen" viewBox="0 0 18 18"><path d="M10 3h3.6l-4 4L11 8.4l4-4V8h2V1h-7zM7 9.6l-4 4V10H1v7h7v-2H4.4l4-4z"/></symbol><symbol id="plyr-exit-fullscreen" viewBox="0 0 18 18"><path d="M1 12h3.6l-4 4L2 17.4l4-4V17h2v-7H1zM16 .6l-4 4V1h-2v7h7V6h-3.6l4-4z"/></symbol><symbol id="plyr-fast-forward" viewBox="0 0 18 18"><path d="M7.875 7.171L0 1v16l7.875-6.171V17L18 9 7.875 1z"/></symbol><symbol id="plyr-muted" viewBox="0 0 18 18"><path d="M12.4 12.5l2.1-2.1 2.1 2.1 1.4-1.4L15.9 9 18 6.9l-1.4-1.4-2.1 2.1-2.1-2.1L11 6.9 13.1 9 11 11.1zM3.786 6.008H.714C.286 6.008 0 6.31 0 6.76v4.512c0 .452.286.752.714.752h3.072l4.071 3.858c.5.3 1.143 0 1.143-.602V2.752c0-.601-.643-.977-1.143-.601L3.786 6.008z"/></symbol><symbol id="plyr-pause" viewBox="0 0 18 18"><path d="M6 1H3c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM12 1c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1h-3z"/></symbol><symbol id="plyr-play" viewBox="0 0 18 18"><path d="M15.562 8.1L3.87.225C3.052-.337 2 .225 2 1.125v15.75c0 .9 1.052 1.462 1.87.9L15.563 9.9c.584-.45.584-1.35 0-1.8z"/></symbol><symbol id="plyr-restart" viewBox="0 0 18 18"><path d="M9.7 1.2l.7 6.4 2.1-2.1c1.9 1.9 1.9 5.1 0 7-.9 1-2.2 1.5-3.5 1.5-1.3 0-2.6-.5-3.5-1.5-1.9-1.9-1.9-5.1 0-7 .6-.6 1.4-1.1 2.3-1.3l-.6-1.9C6 2.6 4.9 3.2 4 4.1 1.3 6.8 1.3 11.2 4 14c1.3 1.3 3.1 2 4.9 2 1.9 0 3.6-.7 4.9-2 2.7-2.7 2.7-7.1 0-9.9L16 1.9l-6.3-.7z"/></symbol><symbol id="plyr-rewind" viewBox="0 0 18 18"><path d="M10.125 1L0 9l10.125 8v-6.171L18 17V1l-7.875 6.171z"/></symbol><symbol id="plyr-volume" viewBox="0 0 18 18"><path d="M15.6 3.3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4C15.4 5.9 16 7.4 16 9c0 1.6-.6 3.1-1.8 4.3-.4.4-.4 1 0 1.4.2.2.5.3.7.3.3 0 .5-.1.7-.3C17.1 13.2 18 11.2 18 9s-.9-4.2-2.4-5.7z"/><path d="M11.282 5.282a.909.909 0 0 0 0 1.316c.735.735.995 1.458.995 2.402 0 .936-.425 1.917-.995 2.487a.909.909 0 0 0 0 1.316c.145.145.636.262 1.018.156a.725.725 0 0 0 .298-.156C13.773 11.733 14.13 10.16 14.13 9c0-.17-.002-.34-.011-.51-.053-.992-.319-2.005-1.522-3.208a.909.909 0 0 0-1.316 0zM3.786 6.008H.714C.286 6.008 0 6.31 0 6.76v4.512c0 .452.286.752.714.752h3.072l4.071 3.858c.5.3 1.143 0 1.143-.602V2.752c0-.601-.643-.977-1.143-.601L3.786 6.008z"/></symbol></svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 359 B |
|
After Width: | Height: | Size: 962 B |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 154 B |
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 211 B |
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
let load = false;
|
||||||
|
(() => {
|
||||||
|
const posts = document.querySelector("#posts");
|
||||||
|
document.addEventListener("wheel", e => {
|
||||||
|
if((((document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop + window.innerHeight) + 310
|
||||||
|
>= ((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)) && !load) {
|
||||||
|
load = true;
|
||||||
|
fetch(`./api/p/${posts.dataset.last}`)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then((msg, html = "") => {
|
||||||
|
for(let i = 0; i < msg.items.length; i++)
|
||||||
|
if(msg.items[i].id)
|
||||||
|
html += `<li class="post"><a href="./${msg.items[i].id}" title="${msg.items[i].mime}"><img class="thumb" src="./t/${msg.items[i].id}.png" /></a></li>\n`;
|
||||||
|
posts.insertAdjacentHTML("beforeend", html);
|
||||||
|
posts.dataset.last = msg.last;
|
||||||
|
load = false;
|
||||||
|
})
|
||||||
|
.catch(err => console.log(err));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
const clickOnElementBinding = selector => () => (elem = document.querySelector(selector))?elem.click():null;
|
||||||
|
|
||||||
|
const keybindings = {
|
||||||
|
"ArrowLeft": clickOnElementBinding("#next"),
|
||||||
|
"ArrowRight": clickOnElementBinding("#prev"),
|
||||||
|
"r": clickOnElementBinding("#random")
|
||||||
|
};
|
||||||
|
|
||||||
|
(() => {
|
||||||
|
document.addEventListener("keydown", e => {
|
||||||
|
if(e.key in keybindings) {
|
||||||
|
e.preventDefault();
|
||||||
|
keybindings[e.key]();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const f0ckimage = document.querySelector("#f0ck-image");
|
||||||
|
if(f0ckimage) {
|
||||||
|
f0ckimage.addEventListener("click", e => {
|
||||||
|
e.preventDefault();
|
||||||
|
f0ckimage.hasAttribute("style")?f0ckimage.removeAttribute("style"):f0ckimage.setAttribute("style", "max-height: unset;");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
//sorry, jQuery ist dumm :--D sorry sirx, dass ich wonnes Kot auskommentiert habe
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/* Thanks to StephenLynx, I modified his Theme Changer from the Penumbra Lynx Frontend for the Lynxchan Software https://gitgud.io/LynxChan/LynxChan and reused it to make f0ck a nicer place. */
|
||||||
|
var themes = [ {
|
||||||
|
file : 'f0ck95.css',
|
||||||
|
label : 'f0ck95',
|
||||||
|
id : 'f0ck95'
|
||||||
|
}];
|
||||||
|
|
||||||
|
let interval = null;
|
||||||
|
const clocklol = () => {
|
||||||
|
const l = document.querySelector("body");
|
||||||
|
if(localStorage.selectedTheme && localStorage.selectedTheme === "f0ck95")
|
||||||
|
interval = setInterval((d = new Date()) => l.setAttribute("data-clock", d.toLocaleTimeString()), 1e3);
|
||||||
|
else {
|
||||||
|
clearInterval(interval);
|
||||||
|
l.removeAttribute("data-clock");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const speaker = () => {
|
||||||
|
const k = document.querySelector("body");
|
||||||
|
if(localStorage.selectedTheme && localStorage.selectedTheme === "f0ck95")
|
||||||
|
k.document.createElement("div");
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var customCss;
|
||||||
|
var addedTheme;
|
||||||
|
function updateCss() {
|
||||||
|
if (addedTheme) {
|
||||||
|
addedTheme.parentNode.removeChild(addedTheme);
|
||||||
|
addedTheme = null;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < themes.length; i++) {
|
||||||
|
var theme = themes[i];
|
||||||
|
if (theme.id === localStorage.selectedTheme) {
|
||||||
|
addedTheme = theme.element;
|
||||||
|
document.head.insertBefore(theme.element, customCss);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < document.head.children.length; i++) {
|
||||||
|
var element = document.head.children[i];
|
||||||
|
if (element.rel === 'stylesheet' && element.href.indexOf('/css/custom.css') > -1) {
|
||||||
|
customCss = element;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < themes.length; i++) {
|
||||||
|
themes[i].element = document.createElement('link');
|
||||||
|
themes[i].element.type = 'text/css';
|
||||||
|
themes[i].element.rel = 'stylesheet';
|
||||||
|
themes[i].element.href = './s/css/' + themes[i].file;
|
||||||
|
}
|
||||||
|
|
||||||
|
clocklol();
|
||||||
|
updateCss();
|
||||||
|
var postingLink = document.getElementById('themes');
|
||||||
|
if (postingLink) {
|
||||||
|
var divider = document.createElement('span');
|
||||||
|
divider.style = ('display: none;');
|
||||||
|
divider.innerHTML = '';
|
||||||
|
var referenceNode = postingLink.nextSibling;
|
||||||
|
postingLink.parentNode.insertBefore(divider, referenceNode);
|
||||||
|
var themeSelector = document.createElement('select');
|
||||||
|
themeSelector.id = 'themeSelector';
|
||||||
|
var vanillaOption = document.createElement('option');
|
||||||
|
vanillaOption.innerHTML = 'Default';
|
||||||
|
themeSelector.appendChild(vanillaOption);
|
||||||
|
for (i = 0; i < themes.length; i++) {
|
||||||
|
var theme = themes[i];
|
||||||
|
var themeOption = document.createElement('option');
|
||||||
|
themeOption.innerHTML = theme.label;
|
||||||
|
if (theme.id === localStorage.selectedTheme) {
|
||||||
|
themeOption.selected = true;
|
||||||
|
}
|
||||||
|
themeSelector.appendChild(themeOption);
|
||||||
|
}
|
||||||
|
themeSelector.onchange = function() {
|
||||||
|
if (!themeSelector.selectedIndex) {
|
||||||
|
if (localStorage.selectedTheme) {
|
||||||
|
delete localStorage.selectedTheme;
|
||||||
|
clocklol();
|
||||||
|
updateCss();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var selectedTheme = themes[themeSelector.selectedIndex - 1];
|
||||||
|
if (selectedTheme.id === localStorage.selectedTheme) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
localStorage.selectedTheme = selectedTheme.id;
|
||||||
|
clocklol();
|
||||||
|
updateCss();
|
||||||
|
};
|
||||||
|
postingLink.parentNode.insertBefore(themeSelector, referenceNode);
|
||||||
|
}
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
"use strict";
|
||||||
|
(function(factory){
|
||||||
|
/*!
|
||||||
|
* Custom Universal Module Definition (UMD)
|
||||||
|
*
|
||||||
|
* Video.js will never be a non-browser lib so we can simplify UMD a bunch and
|
||||||
|
* still support requirejs and browserify. This also needs to be closure
|
||||||
|
* compiler compatible, so string keys are used.
|
||||||
|
*/
|
||||||
|
if (typeof define === 'function' && define['amd']) {
|
||||||
|
define(['./video'], function(vjs){ factory(window, document, vjs) });
|
||||||
|
// checking that module is an object too because of umdjs/umd#35
|
||||||
|
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||||
|
factory(window, document, require('video.js'));
|
||||||
|
} else {
|
||||||
|
factory(window, document, videojs);
|
||||||
|
}
|
||||||
|
|
||||||
|
})(function(window, document, vjs) {
|
||||||
|
//cookie functions from https://developer.mozilla.org/en-US/docs/DOM/document.cookie
|
||||||
|
var
|
||||||
|
getCookieItem = function(sKey) {
|
||||||
|
if (!sKey || !hasCookieItem(sKey)) { return null; }
|
||||||
|
var reg_ex = new RegExp(
|
||||||
|
"(?:^|.*;\\s*)" +
|
||||||
|
window.escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") +
|
||||||
|
"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"
|
||||||
|
);
|
||||||
|
return window.unescape(document.cookie.replace(reg_ex,"$1"));
|
||||||
|
},
|
||||||
|
|
||||||
|
setCookieItem = function(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
|
||||||
|
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return; }
|
||||||
|
var sExpires = "";
|
||||||
|
if (vEnd) {
|
||||||
|
switch (vEnd.constructor) {
|
||||||
|
case Number:
|
||||||
|
sExpires = vEnd === Infinity ? "; expires=Tue, 19 Jan 2038 03:14:07 GMT" : "; max-age=" + vEnd;
|
||||||
|
break;
|
||||||
|
case String:
|
||||||
|
sExpires = "; expires=" + vEnd;
|
||||||
|
break;
|
||||||
|
case Date:
|
||||||
|
sExpires = "; expires=" + vEnd.toGMTString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.cookie =
|
||||||
|
window.escape(sKey) + "=" +
|
||||||
|
window.escape(sValue) +
|
||||||
|
sExpires +
|
||||||
|
(sDomain ? "; domain=" + sDomain : "") +
|
||||||
|
(sPath ? "; path=" + sPath : "") +
|
||||||
|
(bSecure ? "; secure" : "");
|
||||||
|
},
|
||||||
|
|
||||||
|
hasCookieItem = function(sKey) {
|
||||||
|
return (new RegExp(
|
||||||
|
"(?:^|;\\s*)" +
|
||||||
|
window.escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") +
|
||||||
|
"\\s*\\=")
|
||||||
|
).test(document.cookie);
|
||||||
|
},
|
||||||
|
|
||||||
|
hasLocalStorage = function() {
|
||||||
|
try {
|
||||||
|
window.localStorage.setItem('persistVolume', 'persistVolume');
|
||||||
|
window.localStorage.removeItem('persistVolume');
|
||||||
|
return true;
|
||||||
|
} catch(e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getStorageItem = function(key) {
|
||||||
|
return hasLocalStorage() ? window.localStorage.getItem(key) : getCookieItem(key);
|
||||||
|
},
|
||||||
|
setStorageItem = function(key, value) {
|
||||||
|
return hasLocalStorage() ? window.localStorage.setItem(key, value) : setCookieItem(key, value, Infinity, '/');
|
||||||
|
},
|
||||||
|
|
||||||
|
extend = function(obj) {
|
||||||
|
var arg, i, k;
|
||||||
|
for (i = 1; i < arguments.length; i++) {
|
||||||
|
arg = arguments[i];
|
||||||
|
for (k in arg) {
|
||||||
|
if (arg.hasOwnProperty(k)) {
|
||||||
|
obj[k] = arg[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
namespace: ""
|
||||||
|
},
|
||||||
|
|
||||||
|
volumePersister = function(options) {
|
||||||
|
var player = this;
|
||||||
|
var settings = extend({}, defaults, options || {});
|
||||||
|
|
||||||
|
var key = settings.namespace + '-' + 'volume';
|
||||||
|
var muteKey = settings.namespace + '-' + 'mute';
|
||||||
|
|
||||||
|
player.on("volumechange", function() {
|
||||||
|
setStorageItem(key, player.volume());
|
||||||
|
setStorageItem(muteKey, player.muted());
|
||||||
|
});
|
||||||
|
|
||||||
|
var persistedVolume = getStorageItem(key);
|
||||||
|
if(persistedVolume !== null){
|
||||||
|
player.volume(persistedVolume);
|
||||||
|
}
|
||||||
|
|
||||||
|
var persistedMute = getStorageItem(muteKey);
|
||||||
|
if(persistedMute !== null){
|
||||||
|
player.muted('true' === persistedMute);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
vjs.plugin("persistvolume", volumePersister);
|
||||||
|
|
||||||
|
});
|
||||||
@@ -1,44 +1,22 @@
|
|||||||
import sql from "./sql";
|
import config from "../../config.json";
|
||||||
|
|
||||||
export let admins = [];
|
export const getLevel = user => {
|
||||||
|
|
||||||
export const loadAdmins = async () => {
|
|
||||||
const db = await sql;
|
|
||||||
admins = [];
|
|
||||||
try {
|
|
||||||
const rows = await db.query("select id, prefix, account, level, network from user");
|
|
||||||
rows.forEach(row => admins.push({
|
|
||||||
id: row.id,
|
|
||||||
prefix: row.prefix,
|
|
||||||
account: row.account,
|
|
||||||
network: row.network,
|
|
||||||
level: row.level
|
|
||||||
}));
|
|
||||||
} catch(err) {
|
|
||||||
console.log("keine Admins vorhanden", err);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
(async () => {
|
|
||||||
await loadAdmins();
|
|
||||||
})();
|
|
||||||
|
|
||||||
export const getLevel = (network, user) => {
|
|
||||||
let ret = {
|
let ret = {
|
||||||
level: 0,
|
level: 0,
|
||||||
verified: false
|
verified: false
|
||||||
};
|
};
|
||||||
if (typeof user !== "object")
|
if (typeof user !== "object")
|
||||||
return "user has to be an object!";
|
return "user has to be an object!";
|
||||||
if (!user.account || !user.prefix)
|
if (!user.prefix)
|
||||||
return ret;
|
return ret;
|
||||||
for(let admin of admins) {
|
|
||||||
if (admin.account === user.account.toLowerCase() && admin.network === network.toLowerCase()) {
|
let admin;
|
||||||
ret = {
|
if(admin = config.admins.filter(e => e.prefix === user.prefix)[0]) {
|
||||||
level: admin.level,
|
ret = {
|
||||||
verified: user.prefix.toLowerCase() === admin.prefix
|
level: admin.level,
|
||||||
};
|
verified: true
|
||||||
}
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,25 @@
|
|||||||
|
import logger from "../log.mjs";
|
||||||
|
|
||||||
const versions = [
|
const versions = [
|
||||||
"AmIRC.1 (8 Bit) for Commodore Amiga 500",
|
"AmIRC.1 (8 Bit) for Commodore Amiga 500",
|
||||||
"HexChat 0.72 [x86] / Windows 95c [500MHz]"
|
"HexChat 0.72 [x86] / Windows 95c [500MHz]"
|
||||||
];
|
];
|
||||||
|
|
||||||
export default self => {
|
export default async bot => {
|
||||||
self.bot.on("ctcp:version", e => {
|
|
||||||
e.write(`notice ${e.user.nick} :\u0001VERSION ${versions[~~(Math.random() * versions.length)]}\u0001`);
|
return [{
|
||||||
});
|
name: "version",
|
||||||
};
|
listener: "ctcp:version",
|
||||||
|
f: e => {
|
||||||
|
logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ctcp:version ${e.message}`);
|
||||||
|
e.write(`notice ${e.user.nick} :\u0001VERSION ${versions[~~(Math.random() * versions.length)]}\u0001`);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "ping",
|
||||||
|
listener: "ctcp:ping",
|
||||||
|
f: e => {
|
||||||
|
logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ctcp:ping ${e.message}`);
|
||||||
|
e.write(`notice ${e.user.nick} :${e.message}`);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import logger from "../log.mjs";
|
||||||
|
|
||||||
|
export default async bot => {
|
||||||
|
|
||||||
|
return [{
|
||||||
|
name: "error",
|
||||||
|
listener: "error",
|
||||||
|
f: e => {
|
||||||
|
logger.error(e);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
};
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
import ctcp from "./ctcp";
|
|
||||||
import message from "./message";
|
|
||||||
|
|
||||||
export default [
|
|
||||||
ctcp, message
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import logger from "../log.mjs";
|
||||||
|
|
||||||
|
export default async bot => {
|
||||||
|
|
||||||
|
return [{
|
||||||
|
name: "info",
|
||||||
|
listener: "info",
|
||||||
|
f: e => {
|
||||||
|
logger.debug(e);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "debug",
|
||||||
|
listener: "debug",
|
||||||
|
f: e => {
|
||||||
|
logger.debug(e);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
};
|
||||||
@@ -1,44 +1,42 @@
|
|||||||
import { getLevel } from "../admin";
|
import logger from "../log.mjs";
|
||||||
|
import { getLevel } from "../../inc/admin.mjs";
|
||||||
|
|
||||||
const parseArgs = msg => {
|
const parseArgs = msg => {
|
||||||
let args = msg.trim().split(" ");
|
let args = msg.trim().split(" ")
|
||||||
let cmd = args.shift();
|
, cmd = args.shift();
|
||||||
return {
|
return {
|
||||||
cmd: cmd.replace(/^(\.|\/|\!)/, ""),
|
cmd: cmd.replace(/^(\.|\/|\!)/, ""),
|
||||||
args: args
|
args: args
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export default self => {
|
export default async bot => {
|
||||||
self.bot.on("message", e => {
|
|
||||||
for (var [name, trigger] of self._trigger.entries()) {
|
|
||||||
if (!trigger.call.exec(e.message))
|
|
||||||
continue;
|
|
||||||
if (!trigger.clients.includes(e.type))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/*let active = false;
|
return [{
|
||||||
if (e.type === "irc" && cfg.trigger[e.network + e.channel]) {
|
name: "message",
|
||||||
if (cfg.trigger[e.network + e.channel].val[trigger.name])
|
listener: "message",
|
||||||
active = true;
|
f: e => {
|
||||||
}
|
logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${e.message}`);
|
||||||
else
|
|
||||||
active = trigger.active;*/
|
|
||||||
|
|
||||||
//if (!active)
|
const trigger = [...bot._trigger.entries()].filter(t =>
|
||||||
// continue;
|
t[1].call.exec(e.message) &&
|
||||||
|
t[1].clients.includes(e.type) &&
|
||||||
|
t[1].active &&
|
||||||
|
t[1].level <= getLevel(e.network, e.user).level &&
|
||||||
|
!((e.self.set !== "all" && e.self.set !== t[1].set) && t[1].set !== "all")
|
||||||
|
);
|
||||||
|
|
||||||
if ((e.self.set !== "all" && e.self.set !== trigger.set) && trigger.set !== "all")
|
trigger.forEach(async t => {
|
||||||
continue;
|
try {
|
||||||
|
await t[1].f({ ...e, ...parseArgs(e.message) });
|
||||||
if (trigger.level > getLevel(e.network, e.user)) {
|
console.log(`triggered > ${t[0]}`);
|
||||||
e.reply(`no permission, min level ${trigger.level} required`);
|
}
|
||||||
break;
|
catch(error) {
|
||||||
}
|
e.reply(`${t[0]}: An error occured.`);
|
||||||
|
logger.error(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${error.toString ? error : JSON.stringify(error)}`);
|
||||||
e = Object.assign(e, parseArgs(e.message));
|
}
|
||||||
trigger.f(e);
|
});
|
||||||
}
|
}
|
||||||
console.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${e.message}`);
|
}];
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
import http from "http";
|
|
||||||
import https from "https";
|
|
||||||
import url from "url";
|
|
||||||
import querystring from "querystring";
|
|
||||||
|
|
||||||
const readdata = (res, mode, data = "") => new Promise((resolve, reject) => res
|
|
||||||
.setEncoding("utf8")
|
|
||||||
.on("data", chunk => data += chunk)
|
|
||||||
.on("end", () => {
|
|
||||||
switch(mode) {
|
|
||||||
case "text": resolve(data); break;
|
|
||||||
case "json": try { resolve(JSON.parse(data)); } catch(err) { reject("no json D:"); } break;
|
|
||||||
case "buffer": resolve(new Buffer.from(data)); break;
|
|
||||||
default: reject("lol no"); break;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
export default (a, options = {}, link = url.parse(a), body = "") => new Promise((resolve, reject) => {
|
|
||||||
options = {...{ hostname: link.hostname, path: link.path, method: "GET" }, ...options};
|
|
||||||
if(options.method === "POST") {
|
|
||||||
body = querystring.stringify(options.body);
|
|
||||||
delete options.body;
|
|
||||||
options.headers = {
|
|
||||||
"Content-Type": "application/x-www-form-urlencoded",
|
|
||||||
"Content-Length": Buffer.byteLength(body)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
(link.protocol === "https:"?https:http).request(options, res => resolve({
|
|
||||||
body: res,
|
|
||||||
headers: res.headers,
|
|
||||||
text: () => readdata(res, "text"),
|
|
||||||
json: () => readdata(res, "json"),
|
|
||||||
buffer: () => readdata(res, "buffer")
|
|
||||||
})).on("error", err => reject(err)).end(body);
|
|
||||||
});
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
const logger = ["debug", "info", "error"];
|
||||||
|
const logfiles = logger.reduce((a, b) => ({...a, [b]: fs.createWriteStream(`./logs/${~~(Date.now() / 1000)}_${b}.log`)}), {});
|
||||||
|
|
||||||
|
export default new Proxy({}, {
|
||||||
|
get: (_, prop) => (msg, timestamp = new Date().toLocaleString()) =>
|
||||||
|
logger.includes(prop) &&
|
||||||
|
logfiles[prop].write(JSON.stringify({
|
||||||
|
level: prop,
|
||||||
|
message: msg,
|
||||||
|
timestamp: timestamp
|
||||||
|
}) + "\n") &&
|
||||||
|
console.log(timestamp, prop, msg)
|
||||||
|
});
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
class Router {
|
import { promises as fs } from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
export default new class Router {
|
||||||
|
#mimes;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.routes = new Map();
|
this.routes = new Map();
|
||||||
};
|
};
|
||||||
@@ -12,11 +16,32 @@ class Router {
|
|||||||
post() {
|
post() {
|
||||||
this.route("POST", arguments);
|
this.route("POST", arguments);
|
||||||
};
|
};
|
||||||
|
async static({ dir = path.resolve() + "/public", route = /^\/public/ }) {
|
||||||
|
if(!this.#mimes) {
|
||||||
|
this.#mimes = new Map();
|
||||||
|
(await fs.readFile("/etc/mime.types", "utf-8"))
|
||||||
|
.split("\n")
|
||||||
|
.filter(e => !e.startsWith("#") && e)
|
||||||
|
.map(e => e.split(/\s{2,}/))
|
||||||
|
.filter(e => e.length > 1)
|
||||||
|
.forEach(m => m[1].split(" ").forEach(ext => this.#mimes.set(ext, m[0])));
|
||||||
|
}
|
||||||
|
this.get(route, async (req, res) => {
|
||||||
|
try {
|
||||||
|
return res.reply({
|
||||||
|
type: this.#mimes.get(req.url.path.split(".").pop()).toLowerCase(),
|
||||||
|
body: await fs.readFile(path.join(dir, req.url.path.replace(route, "")))
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
return res.reply({
|
||||||
|
code: 404,
|
||||||
|
body: "404 - file not found"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
};
|
};
|
||||||
const router = new Router();
|
|
||||||
export default router;
|
|
||||||
export const routes = router.routes;
|
|
||||||
|
|
||||||
Map.prototype.getRegex = function(path, method, tmp) {
|
Map.prototype.getRoute = function(path, method, tmp) {
|
||||||
return (!(tmp = [...this.entries()].filter(r => r[0].exec(path) && r[1].method.includes(method))[0])) ? false : tmp[1].f;
|
return (!(tmp = [...this.entries()].filter(r => ( r[0] === path || r[0].exec?.(path) ) && r[1].method.includes(method) )[0])) ? false : tmp[1].f;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
import router from "../router";
|
import router from "../router.mjs";
|
||||||
import sql from "../sql";
|
import sql from "../sql.mjs";
|
||||||
import { parse } from "url";
|
import { parse } from "url";
|
||||||
import cfg from "../../../config.json";
|
import cfg from "../../../config.json";
|
||||||
|
|
||||||
import { mimes, queries } from "./inc/api";
|
import { mimes, queries } from "./inc/api.mjs";
|
||||||
|
|
||||||
router.get(/^\/api$/, (req, res) => {
|
router.get("/api", (req, res) => {
|
||||||
res.end("api lol");
|
res.end("api lol");
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => {
|
router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => {
|
||||||
const db = await sql.getConnection();
|
|
||||||
const args = [];
|
const args = [];
|
||||||
let q = queries.random.main;
|
let q = queries.random.main;
|
||||||
|
|
||||||
@@ -22,26 +21,24 @@ router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, r
|
|||||||
q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null);
|
q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const rows = await db.query(q, args);
|
const rows = await sql.query(q, args);
|
||||||
res
|
res
|
||||||
.writeHead(200, { 'Content-Type': 'application/json' })
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
.end(JSON.stringify(rows.length > 0 ? rows[0] : []), 'utf-8');
|
.end(JSON.stringify(rows.length > 0 ? rows[0] : []), "utf-8");
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
res
|
res
|
||||||
.writeHead(500)
|
.writeHead(500)
|
||||||
.end(JSON.stringify(err), 'utf-8');
|
.end(JSON.stringify(err), "utf-8");
|
||||||
}
|
}
|
||||||
db.end();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(/^\/api\/p$/, async (req, res) => {
|
router.get("/api/p", async (req, res) => {
|
||||||
const db = await sql.getConnection();
|
|
||||||
let id = parseInt(req.url.qs.id) || 99999999;
|
let id = parseInt(req.url.qs.id) || 99999999;
|
||||||
const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200);
|
const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200);
|
||||||
let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ];
|
let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const tmp = (await db.query("select min(id) as min, max(id) as max from items limit 1"))[0];
|
const tmp = (await sql.query("select min(id) as min, max(id) as max from items limit 1"))[0];
|
||||||
if((id - 1 + eps) > tmp.max) {
|
if((id - 1 + eps) > tmp.max) {
|
||||||
id = tmp.max;
|
id = tmp.max;
|
||||||
[ order, trend ] = [ "desc", "<=" ];
|
[ order, trend ] = [ "desc", "<=" ];
|
||||||
@@ -51,7 +48,7 @@ router.get(/^\/api\/p$/, async (req, res) => {
|
|||||||
[ order, trend ] = [ "asc", ">=" ];
|
[ order, trend ] = [ "asc", ">=" ];
|
||||||
}
|
}
|
||||||
|
|
||||||
const rows = await db.query(queries.p(trend, order), [ id, eps ]);
|
const rows = await sql.query(queries.p(trend, order), [ id, eps ]);
|
||||||
const items = {
|
const items = {
|
||||||
items: rows,
|
items: rows,
|
||||||
first: rows[0].id,
|
first: rows[0].id,
|
||||||
@@ -60,21 +57,33 @@ router.get(/^\/api\/p$/, async (req, res) => {
|
|||||||
oldest: tmp.min
|
oldest: tmp.min
|
||||||
};
|
};
|
||||||
res
|
res
|
||||||
.writeHead(200, { 'Content-Type': 'application/json' })
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
.end(JSON.stringify(items), 'utf-8');
|
.end(JSON.stringify(items), "utf-8");
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
res
|
res
|
||||||
.writeHead(500)
|
.writeHead(500)
|
||||||
.end(JSON.stringify(err), 'utf-8');
|
.end(JSON.stringify(err), "utf-8");
|
||||||
}
|
}
|
||||||
db.end();
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/p\/([0-9]+)/, async (req, res) => { // legacy
|
||||||
|
let eps = 100;
|
||||||
|
let id = +req.url.split[2];
|
||||||
|
|
||||||
|
const query = await sql.query("select * from items where id < ? order by id desc limit ?", [ id, eps ]);
|
||||||
|
const items = {
|
||||||
|
items: query,
|
||||||
|
last: query[query.length - 1].id
|
||||||
|
};
|
||||||
|
|
||||||
|
res.writeHead(200, { "Content-Type": "application/json" });
|
||||||
|
res.end(JSON.stringify(items), "utf-8");
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => {
|
router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => {
|
||||||
const db = await sql.getConnection();
|
|
||||||
try {
|
try {
|
||||||
const rows = await db.query(queries.item, Array(3).fill(req.url.split[2]));
|
const rows = await sql.query(queries.item, Array(3).fill(req.url.split[2]));
|
||||||
const data = rows[0].length > 0 ? {
|
const data = rows[0].length > 0 ? {
|
||||||
...rows[0][0], ...{
|
...rows[0][0], ...{
|
||||||
thumb: `${cfg.main.url}/t/${rows[0][0].id}.png`,
|
thumb: `${cfg.main.url}/t/${rows[0][0].id}.png`,
|
||||||
@@ -86,29 +95,27 @@ router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => {
|
|||||||
error: true
|
error: true
|
||||||
};
|
};
|
||||||
res
|
res
|
||||||
.writeHead(200, { 'Content-Type': 'application/json' })
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
.end(JSON.stringify(data), 'utf-8');
|
.end(JSON.stringify(data), "utf-8");
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
res
|
res
|
||||||
.writeHead(500)
|
.writeHead(500)
|
||||||
.end(JSON.stringify(err), 'utf-8');
|
.end(JSON.stringify(err), "utf-8");
|
||||||
}
|
}
|
||||||
db.end();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen
|
router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen
|
||||||
const db = await sql.getConnection();
|
|
||||||
const user = req.url.split[2];
|
const user = req.url.split[2];
|
||||||
const eps = Math.min(req.url.split[3] || 50, 50);
|
const eps = Math.min(req.url.split[3] || 50, 50);
|
||||||
try {
|
try {
|
||||||
const rows = await db.query(queries.user, [ user, eps ]);
|
const rows = await sql.query(queries.user, [ user, eps ]);
|
||||||
res
|
res
|
||||||
.writeHead(200, { 'Content-Type': 'application/json' })
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
.end(JSON.stringify(rows.length > 0 ? rows : []), 'utf-8');
|
.end(JSON.stringify(rows.length > 0 ? rows : []), "utf-8");
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
res
|
res
|
||||||
.writeHead(500)
|
.writeHead(500)
|
||||||
.end(JSON.stringify(err), 'utf-8');
|
.end(JSON.stringify(err), "utf-8");
|
||||||
}
|
}
|
||||||
db.end();
|
db.end();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,10 +1,104 @@
|
|||||||
import router from "../router";
|
import router from "../router.mjs";
|
||||||
|
import cfg from "../../../config.json";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
import sql from "../sql.mjs";
|
||||||
|
import swig from "swig";
|
||||||
|
import url from "url";
|
||||||
|
|
||||||
const tpl = fs.readFileSync("./views/index.html", "utf-8");
|
const templates = {
|
||||||
|
contact: fs.readFileSync("./views/contact.html", "utf-8"),
|
||||||
|
help: fs.readFileSync("./views/help.html", "utf-8"),
|
||||||
|
how: fs.readFileSync("./views/how.html", "utf-8"),
|
||||||
|
index: fs.readFileSync("./views/index.html", "utf-8"),
|
||||||
|
item: fs.readFileSync("./views/item.html", "utf-8")
|
||||||
|
};
|
||||||
|
|
||||||
router.get(/^\/(page\/[0-9]+)?$/, async (req, res) => {
|
router.get("/", async (req, res) => {
|
||||||
|
const query = await sql.query("select id, mime from items order by id desc limit 300");
|
||||||
|
const data = {
|
||||||
|
items: query,
|
||||||
|
last: query[0].id
|
||||||
|
};
|
||||||
|
|
||||||
|
res.reply({
|
||||||
|
body: swig.compile(templates.index)(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/([0-9]+)$/, async (req, res) => {
|
||||||
|
const q = "select * from items where id = ? limit 1; " // get item
|
||||||
|
+ "select id from items where id = (select min(id) from items where id > ?); " // get previous item
|
||||||
|
+ "select id from items where id = (select max(id) from items where id < ?)"; // get next item
|
||||||
|
const query = await sql.query(q, [req.url.split[0], req.url.split[0], req.url.split[0]]);
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
id: '',
|
||||||
|
username: '',
|
||||||
|
item: '',
|
||||||
|
src: '',
|
||||||
|
dest: '',
|
||||||
|
mime: '',
|
||||||
|
size: '',
|
||||||
|
userchannel: '',
|
||||||
|
usernetwork: '',
|
||||||
|
thumb: null,
|
||||||
|
thumbnail: null,
|
||||||
|
next: null,
|
||||||
|
prev: null
|
||||||
|
};
|
||||||
|
|
||||||
|
if(query[0][0]) {
|
||||||
|
const e = query[0][0];
|
||||||
|
switch(e.mime) {
|
||||||
|
case "image/png":
|
||||||
|
case "image/jpeg":
|
||||||
|
case "image/gif":
|
||||||
|
data.item = "image";
|
||||||
|
break;
|
||||||
|
case "video/webm":
|
||||||
|
case "video/mp4":
|
||||||
|
case "video/quicktime":
|
||||||
|
data.item = "video";
|
||||||
|
break;
|
||||||
|
case "audio/mpeg":
|
||||||
|
case "audio/ogg":
|
||||||
|
case "audio/flac":
|
||||||
|
case "audio/x-flac":
|
||||||
|
data.item = "audio";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
data.id = e.id;
|
||||||
|
data.username = e.username;
|
||||||
|
data.srcurl = e.src;
|
||||||
|
data.src = url.parse(e.src).hostname;
|
||||||
|
data.thumb = `${cfg.websrv.paths.thumbnails}/${e.id}.png`;
|
||||||
|
data.dest = `${cfg.websrv.paths.images}/${e.dest}`;
|
||||||
|
data.mime = e.mime;
|
||||||
|
data.size = e.size;//lib.formatSize(e.size);
|
||||||
|
data.userchannel = e.userchannel;
|
||||||
|
data.usernetwork = e.usernetwork;
|
||||||
|
data.timestamp = new Date(e.stamp * 1000).toISOString();
|
||||||
|
if(query[1].length)
|
||||||
|
data.next = query[1][0].id;
|
||||||
|
if(query[2].length)
|
||||||
|
data.prev = query[2][0].id;
|
||||||
|
}
|
||||||
|
res.reply({
|
||||||
|
body: swig.compile(templates.item)(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/(contact|help|how)$/, (req, res) => {
|
||||||
|
res.reply({
|
||||||
|
body: templates[req.url.split[0]]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/random", async (req, res) => {
|
||||||
res
|
res
|
||||||
.writeHead(200, { 'Content-Type': 'text/html' })
|
.writeHead(301, {
|
||||||
.end(tpl);
|
"Cache-Control": "no-cache, public",
|
||||||
|
"Location": "/" + (await sql.query("select id from items order by rand() limit 1"))[0].id
|
||||||
|
})
|
||||||
|
.end();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import path from "path";
|
||||||
|
import router from "../router.mjs";
|
||||||
|
|
||||||
|
router.static({
|
||||||
|
dir: path.resolve() + "/public/b",
|
||||||
|
route: /^\/b\//
|
||||||
|
});
|
||||||
|
|
||||||
|
router.static({
|
||||||
|
dir: path.resolve() + "/public/s",
|
||||||
|
route: /^\/s\//
|
||||||
|
});
|
||||||
|
|
||||||
|
router.static({
|
||||||
|
dir: path.resolve() + "/public/t",
|
||||||
|
route: /^\/t\//
|
||||||
|
});
|
||||||
@@ -1,35 +1,51 @@
|
|||||||
import { admins } from "../admin";
|
import { getLevel } from "../admin.mjs";
|
||||||
|
import fetch from "flumm-fetch-cookies";
|
||||||
|
|
||||||
import vm from "vm";
|
import vm from "vm";
|
||||||
|
|
||||||
const maxoutput = 1000;
|
let maxoutput = 750;
|
||||||
let context = vm.createContext({
|
let context = vm.createContext({
|
||||||
e: null,
|
e: null,
|
||||||
bot: null,
|
bot: null,
|
||||||
admins: null,
|
admins: null,
|
||||||
|
fetch: fetch
|
||||||
});
|
});
|
||||||
export default bot => bot._trigger.set("sandbox_debug", new bot.trigger({
|
|
||||||
call: /^\!debug (.*)/i,
|
|
||||||
level: 100,
|
|
||||||
active: true,
|
|
||||||
f: e => {
|
|
||||||
const args = e.message.trim().substring(7);
|
|
||||||
if(args === "true" || args === "false")
|
|
||||||
return e.self.debug = !e.self.debug;
|
|
||||||
try {
|
|
||||||
context.admins = admins;
|
|
||||||
context.e = e;
|
|
||||||
context.bot = bot;
|
|
||||||
let output = vm.runInContext(args, vm.createContext(context));
|
|
||||||
if (typeof output !== undefined && output) {
|
|
||||||
output = JSON.stringify(output);
|
|
||||||
return r.reply(output.length > maxoutput ? `holy fuck, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)` : output);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
e.reply("false lol");
|
|
||||||
|
|
||||||
|
export default async bot => {
|
||||||
|
|
||||||
|
return [{
|
||||||
|
name: "level",
|
||||||
|
call: /^!level (.*)/i,
|
||||||
|
active: true,
|
||||||
|
f: e => {
|
||||||
|
const user = e.message.trim().substring(7);
|
||||||
|
e.reply( JSON.stringify( getLevel( e.self.user.get(user) || {} ) ) );
|
||||||
}
|
}
|
||||||
catch (err) {
|
}, {
|
||||||
e.reply(err.message);
|
name: "sandbox_debug",
|
||||||
|
call: /^\!debug (.*)/i,
|
||||||
|
active: true,
|
||||||
|
level: 100,
|
||||||
|
f: e => {
|
||||||
|
const args = e.message.trim().substring(7);
|
||||||
|
try {
|
||||||
|
context.e = e;
|
||||||
|
context.bot = bot;
|
||||||
|
context.level = getLevel;
|
||||||
|
let output = vm.runInContext(args, vm.createContext(context));
|
||||||
|
if (typeof output !== undefined && output) {
|
||||||
|
output = JSON.stringify(output);
|
||||||
|
if (output.length > maxoutput)
|
||||||
|
return e.reply(`holy fuck, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)`);
|
||||||
|
else
|
||||||
|
e.reply(output);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e.reply("false lol");
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
e.reply(err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}];
|
||||||
}));
|
};
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
import debug from "./debug";
|
|
||||||
|
|
||||||
export default [ debug ];
|
|
||||||
@@ -1,28 +1,51 @@
|
|||||||
import cfg from "../config.json";
|
import cfg from "../config.json";
|
||||||
import { cuffeo } from "cuffeo";
|
import cuffeo from "cuffeo";
|
||||||
|
import { promises as fs } from "fs";
|
||||||
|
|
||||||
import triggers from "./inc/trigger";
|
import "./websrv.mjs";
|
||||||
import events from "./inc/events";
|
|
||||||
|
|
||||||
import "./websrv";
|
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
// Chatbots
|
const self = {
|
||||||
/*const self = {
|
|
||||||
_trigger: new Map(),
|
_trigger: new Map(),
|
||||||
trigger: function trigger(args) {
|
trigger: function trigger(args) {
|
||||||
this.call = args.call;
|
this.call = args.call;
|
||||||
this.help = args.help || false;
|
this.help = args.help || false;
|
||||||
this.level = args.level || 0;
|
this.level = args.level || 0;
|
||||||
this.active = args.hasOwnProperty("active") ? args.active : true;
|
this.active = args.hasOwnProperty("active") ? args.active : true;
|
||||||
this.set = args.set || "all"; // uwe, nxy, f0ck, all
|
this.clients = args.clients || [ "irc", "tg", "slack" ];
|
||||||
this.clients = args.clients || ["irc", "tg"];
|
|
||||||
this.f = args.f;
|
this.f = args.f;
|
||||||
},
|
},
|
||||||
bot: new cuffeo(cfg.clients)
|
bot: await new cuffeo(cfg.clients)
|
||||||
};
|
};
|
||||||
triggers.forEach(mod => mod(self));
|
|
||||||
events.forEach(event => event(self));*/
|
|
||||||
|
|
||||||
//
|
console.time("loading");
|
||||||
|
const modules = {
|
||||||
|
events: (await fs.readdir("./src/inc/events")).filter(f => f.endsWith(".mjs")),
|
||||||
|
trigger: (await fs.readdir("./src/inc/trigger")).filter(f => f.endsWith(".mjs"))
|
||||||
|
};
|
||||||
|
|
||||||
|
console.timeLog("loading", "directories");
|
||||||
|
const blah = (await Promise.all(Object.entries(modules).map(async ([dir, mods]) => ({
|
||||||
|
[dir]: (await Promise.all(mods.map(async mod => {
|
||||||
|
const res = await Promise.race([
|
||||||
|
(await import(`./inc/${dir}/${mod}`)).default(self),
|
||||||
|
new Promise((_, rej) => setTimeout(() => rej(false), timeout))
|
||||||
|
]);
|
||||||
|
console.timeLog("loading", `${dir}/${mod}`);
|
||||||
|
return res;
|
||||||
|
}))).flat(2)
|
||||||
|
})))).reduce((a, b) => ({...a, ...b}));
|
||||||
|
|
||||||
|
blah.events.forEach(event => {
|
||||||
|
console.timeLog("loading", `registering event > ${event.name}`);
|
||||||
|
self.bot.on(event.listener, event.f);
|
||||||
|
});
|
||||||
|
|
||||||
|
blah.trigger.forEach(trigger => {
|
||||||
|
console.timeLog("loading", `registering trigger > ${trigger.name}`);
|
||||||
|
self._trigger.set(trigger.name, new self.trigger(trigger));
|
||||||
|
});
|
||||||
|
|
||||||
|
console.timeEnd("loading");
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -2,19 +2,30 @@ import http from "http";
|
|||||||
import url from "url";
|
import url from "url";
|
||||||
import querystring from "querystring";
|
import querystring from "querystring";
|
||||||
import cfg from "../config.json";
|
import cfg from "../config.json";
|
||||||
|
import router from "./inc/router.mjs";
|
||||||
|
|
||||||
// routes
|
// routes
|
||||||
import "./inc/routes/index";
|
import "./inc/routes/index.mjs";
|
||||||
import "./inc/routes/api";
|
import "./inc/routes/api.mjs";
|
||||||
|
import "./inc/routes/static.mjs";
|
||||||
|
|
||||||
import { routes } from "./inc/router";
|
http.createServer(async (req, res, r) => {
|
||||||
|
|
||||||
http.createServer((req, res, r) => {
|
|
||||||
req.url = url.parse(req.url.replace(/(?!^.)(\/+)?$/, ''));
|
req.url = url.parse(req.url.replace(/(?!^.)(\/+)?$/, ''));
|
||||||
req.url.split = req.url.pathname.split("/").slice(1);
|
req.url.split = req.url.pathname.split("/").slice(1);
|
||||||
req.url.qs = querystring.parse(req.url.query);
|
req.url.qs = querystring.parse(req.url.query);
|
||||||
|
|
||||||
console.log(`[${(new Date()).toLocaleTimeString()}] ${req.method} ${req.url.pathname}`);
|
req.post = new Promise((resolve, _, data = "") => req
|
||||||
|
.on("data", d => void (data += d))
|
||||||
|
.on("end", () => void resolve(Object.fromEntries(Object.entries(querystring.parse(data)).map(([k, v]) => [k, decodeURIComponent(v)])))));
|
||||||
|
|
||||||
!(r = routes.getRegex(req.url.pathname, req.method)) ? res.writeHead(404).end(`404 - ${req.url.pathname}`) : r(req, res);
|
res.reply = ({
|
||||||
}).listen(cfg.websrv.port, () => console.log(`f0ck is listening on port ${cfg.websrv.port}.`));
|
code = 200,
|
||||||
|
type = "text/html",
|
||||||
|
body
|
||||||
|
}) => res.writeHead(code, { "Content-Type": `${type}; charset=utf-8` }).end(body);
|
||||||
|
|
||||||
|
!(r = router.routes.getRoute(req.url.pathname, req.method)) ? res.writeHead(404).end(`404 - ${req.url.pathname}`) : await r(req, res);
|
||||||
|
console.log(`[${(new Date()).toLocaleTimeString()}] ${res.statusCode} ${req.method}\t${req.url.pathname}`);
|
||||||
|
}).listen(cfg.websrv.port, () => setTimeout(() => {
|
||||||
|
console.log(`f0ck is listening on port ${cfg.websrv.port}.`);
|
||||||
|
}, 500));
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>f0ck! I need contact!</title>
|
||||||
|
<link rel="icon" type="image/png" href="./s/img/favicon.png" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/bootstrap.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/f0ck-custom.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar navbar-expand-lg">
|
||||||
|
<a class="navbar-brand" href="/">
|
||||||
|
<img id="biohaz" src="./s/img/biohazard.svg"> <img src="./s/img/f0ckme.png" width="112" height="28">
|
||||||
|
</a>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/random">Random</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/how">Help</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/contact">Contact</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="container">
|
||||||
|
<div class="contact">
|
||||||
|
<p>Got a problem? We have the answer: <a href="mailto:admin@f0ck.space">admin@f0ck.space</a></p>
|
||||||
|
<a href="/">return to main</a> <span id="themes"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="./s/js/theme.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>f0ck me! but how?</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/bulma.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/f0ck-custom.css">
|
||||||
|
<link rel="icon" type="image/png" href="./s/img/favicon.png" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<a class="navbar-item" href="/">
|
||||||
|
<img id="biohaz" src="./s/img/biohazard.svg"> <img src="./s/img/f0ckme.png" width="112" height="28">
|
||||||
|
</a>
|
||||||
|
<a class="navbar-item" href="/random">
|
||||||
|
Random
|
||||||
|
</a>
|
||||||
|
<a class="navbar-item" href="/help">
|
||||||
|
Help
|
||||||
|
</a>
|
||||||
|
<a class="navbar-item" href="/contact">
|
||||||
|
Contact
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="irc">
|
||||||
|
<h4>irc.n0xy.net +6697 (ssl only) #f0ck</h4>
|
||||||
|
<p>More information: <a href="https://n0xy.net">n0xy.net</a></p>
|
||||||
|
<div class="page-header">
|
||||||
|
<h4>IRC Rules</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Constitution:</p>
|
||||||
|
<ul>
|
||||||
|
<li>§ 1 The dignity of the IRCd is inviolable.</li>
|
||||||
|
|
||||||
|
<li>§ 2 The distribution of Child Pornography is strictly prohibited in any of our networks and will lead to an immediate ban.</li>
|
||||||
|
|
||||||
|
<li>§ 3 Do not attack users in this network in any way, shape, or form.</li>
|
||||||
|
|
||||||
|
<li>§ 4 Do not transmit any personal/financial information without permission.</li>
|
||||||
|
|
||||||
|
<li>§ 5 Do not share any malware on this network.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>f0ck specific rules:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Animal cruelty is forbidden and will lead to an immediate ban</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h4>What the f0ck is a f0ck?</h4>
|
||||||
|
<p>A f0ck is basically giving a fuck about some internet bullshit, like stupid images, videos and so on, but also for great things like good music taste and shit, it's basically "a f0ck was given" and f0ck and it's users gave a lot of f0cks over the past years, it's not hard to finally start giving a damn f0ck about something, just f0ck.it dood!</p>
|
||||||
|
|
||||||
|
<h4>how the f0ck to f0ck, you ask?</h4>
|
||||||
|
<p>f0ck will f0ck any media link posted in the channel ending with: jpg|gif|png|webm|mp3|mp4|ogg|flac</p>
|
||||||
|
<p>If you don't want f0ck to f0ck it put !ignore behind your link. Example: https://retard-journal.com/stupidshit.png !ignore</a>
|
||||||
|
<p>f0ck will only f0ck media links with the maximum size of 80MB</p>
|
||||||
|
</div>
|
||||||
|
<script src="./s/js/theme.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>f0ck me! but how?</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/bootstrap.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/f0ck-custom.css">
|
||||||
|
<link rel="icon" type="image/png" href="./s/img/favicon.png" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar navbar-expand-lg">
|
||||||
|
<a class="navbar-brand" href="/">
|
||||||
|
<img id="biohaz" src="./s/img/biohazard.svg"> <img src="./s/img/f0ckme.png" width="112" height="28">
|
||||||
|
</a>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="/random">Random</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/how">Help</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/contact">Contact</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="container">
|
||||||
|
<div class="irc">
|
||||||
|
<h4>irc.n0xy.net +6697 (ssl only) #f0ck</h4>
|
||||||
|
<p>More information: <a href="https://n0xy.net">n0xy.net</a></p>
|
||||||
|
<div class="page-header">
|
||||||
|
<h4>IRC Rules</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Constitution:</p>
|
||||||
|
<ul>
|
||||||
|
<li>§ 1 The dignity of the IRCd is inviolable.</li>
|
||||||
|
|
||||||
|
<li>§ 2 The distribution of Child Pornography is strictly prohibited in any of our networks and will lead to an immediate ban.</li>
|
||||||
|
|
||||||
|
<li>§ 3 Do not attack users in this network in any way, shape, or form.</li>
|
||||||
|
|
||||||
|
<li>§ 4 Do not transmit any personal/financial information without permission.</li>
|
||||||
|
|
||||||
|
<li>§ 5 Do not share any malware on this network.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>f0ck specific rules:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Animal cruelty is forbidden and will lead to an immediate ban</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h4>What the f0ck is a f0ck?</h4>
|
||||||
|
<p>A f0ck is basically giving a fuck about some internet bullshit, like stupid images, videos and so on, but also for great things like good music taste and shit, it's basically "a f0ck was given" and f0ck and it's users gave a lot of f0cks over the past years, it's not hard to finally start giving a damn f0ck about something, just f0ck.it dood!</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>how the f0ck to f0ck, you ask?</h4>
|
||||||
|
<p>f0ck will f0ck any media link posted in the channel ending with: jpg|gif|png|webm|mp3|mp4|ogg|flac</p>
|
||||||
|
<p>If you don't want f0ck to f0ck it put !ignore behind your link. Example: https://retard-journal.com/stupidshit.png !ignore</a>
|
||||||
|
<p>f0ck will only f0ck media links with the maximum size of 30MB for cool people 80MB</p>
|
||||||
|
<p>YouTube Links are currently not working, if you really want to f0ck them, you gotta download it yourself and reupload somewhere until this is fixed</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="./s/js/theme.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,85 +1,45 @@
|
|||||||
<!doctype blah>
|
<!DOCTYPE f0ck>
|
||||||
<html lang="en">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<title>f0ck!</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.7, shrink-to-fit=no, user-scalable=no">
|
<link rel="icon" type="image/png" href="./s/img/favicon.png" />
|
||||||
<meta name="description" content="f0ck you">
|
<link rel="stylesheet" type="text/css" href="./s/css/bootstrap.css">
|
||||||
<meta name="author" content="Abu Ottermann, Flummi Mc Doggerstein">
|
<link rel="stylesheet" type="text/css" href="./s/css/f0ck-custom.css">
|
||||||
<title>f0ck lol!</title>
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="stylesheet" href="/css/f0ck.css">
|
|
||||||
<link rel="stylesheet" href="/css/icons.css">
|
|
||||||
<link rel="stylesheet" href="/css/pageview.css">
|
|
||||||
<link rel="stylesheet" href="/css/itemview.css">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="pageWrapper">
|
|
||||||
<div class="page" id="header">
|
<nav class="navbar navbar-expand-lg">
|
||||||
<h1 id="logoHead"><a href="/"><img id="logo" src="/img/f0ckv2_logo_test_v1.5.png"></a></h1>
|
<a class="navbar-brand" href="/">
|
||||||
<div id="itemInfo">
|
<img id="biohaz" src="./s/img/biohazard.svg"> <img src="./s/img/f0ckme.png" width="112" height="28">
|
||||||
<div class="infoText">
|
</a>
|
||||||
<span id="itemTitle">blah</span> //
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
<a id="itemSource" href=""></a>
|
<ul class="navbar-nav">
|
||||||
</div>
|
<li class="nav-item active">
|
||||||
<div class="infoText">
|
<a class="nav-link" id="random" href="/random"><span class="rndtext">Random</span></a>
|
||||||
<span id="itemTime" time=""></span> by
|
</li>
|
||||||
<span id="itemNick">blah</span> on
|
<li class="nav-item">
|
||||||
<span id="itemChannel">#f0ck</span>
|
<a class="nav-link" href="/how">Help</a>
|
||||||
</div>
|
</li>
|
||||||
<span id="debug">
|
<li class="nav-item">
|
||||||
<a>random</a>
|
<a class="nav-link" href="/contact">Contact</a>
|
||||||
</span>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
<div class="itemNumber">
|
|
||||||
<div id="pagePosition"></div>
|
|
||||||
<div id="itemPosition">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="page" id="content">
|
|
||||||
<div class="wrapper" id="pagewrapper">
|
|
||||||
<div class="arrow top" id="up"></div>
|
|
||||||
<div id="p_items">
|
|
||||||
<div class="p_item">Seite 1</div>
|
|
||||||
<div class="p_item">Seite 2</div>
|
|
||||||
<div class="p_item">Seite 3</div>
|
|
||||||
</div>
|
|
||||||
<div class="arrow bottom" id="down"></div>
|
|
||||||
</div>
|
|
||||||
<div class="wrapper" id="itemwrapper">
|
|
||||||
<div class="arrow left" id="left"></div>
|
|
||||||
<div id="i_items">
|
|
||||||
<div class="i_item">Item 1</div>
|
|
||||||
<div class="i_item">Item 2</div>
|
|
||||||
<div class="i_item">Item 3</div>
|
|
||||||
</div>
|
|
||||||
<div class="arrow right" id="right"></div>
|
|
||||||
<div class="close"></div>
|
|
||||||
</div>
|
|
||||||
<div class="wrapper" id="howtowrapper">
|
|
||||||
<h4>irc.n0xy.net +6697 (ssl only) #f0ck</h4>
|
|
||||||
<p>More information: <a href="https://n0xy.net">n0xy.net</a></p>
|
|
||||||
<div class="page-header"><h4>IRC Rules</h4></div>
|
|
||||||
<p>Constitution:</p>
|
|
||||||
<ul>
|
|
||||||
<li>§ 1 The dignity of the IRCd is inviolable.</li>
|
|
||||||
<li>§ 2 The distribution of Child Pornography is strictly prohibited in any of our networks and will lead to an immediate ban.</li>
|
|
||||||
<li>§ 3 Do not attack users in this network in any way, shape, or form.</li>
|
|
||||||
<li>§ 4 Do not transmit any personal/financial information without permission.</li>
|
|
||||||
<li>§ 5 Do not share any malware on this network.</li>
|
|
||||||
</ul>
|
|
||||||
<p>f0ck specific rules:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Animal cruelty is forbidden and will lead to an immediate ban</li>
|
|
||||||
</ul>
|
|
||||||
<h4>how the f0ck to f0ck, you ask?</h4>
|
|
||||||
<p>f0ck will f0ck any media link posted in the channel ending with: jpg|gif|png|webm|mp3|mp4|ogg|flac</p>
|
|
||||||
<p>If you don't want f0ck to f0ck it put !ignore behind your link. Example: https://retard-journal.com/stupidshit.png !ignore</a>
|
|
||||||
<p>f0ck will only f0ck media links with the maximum size of 80MB</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="page" id="footer">Made with 666 souls in mind and 2 liters of fresh virgin blood
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<script src="/js/f0ck.js" type="module" defer></script>
|
</nav>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<ul id="posts" data-last="{{ last }}">
|
||||||
|
{% for item in items %}
|
||||||
|
<li class="post"><a href="/{{ item.id }}" title="{{ item.mime }}">
|
||||||
|
<img class="thumb" src="/t/{{ item.id }}.png" />
|
||||||
|
<span class="item-mime">{{ item.mime }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<script src="./s/js/scroller.js"></script>
|
||||||
|
<script src="./s/js/theme.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
<!doctype f0ck>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{{ id }} - f0ck.me</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/video-js.min.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/vsg-skin.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/bootstrap.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="./s/css/f0ck-custom.css">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="icon" type="image/png" href="./s/img/favicon.png" />
|
||||||
|
<meta property="og:site_name" content="f0ck.me" />
|
||||||
|
<meta property="og:description" content="f0cked by {{ username }}" />
|
||||||
|
<meta name="Description" content="f0cked by {{ username }}" />
|
||||||
|
<meta property="og:image" content="{{ thumbnail }}" />
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar navbar-expand-lg">
|
||||||
|
<a class="navbar-brand" href="/">
|
||||||
|
<img id="biohaz" src="./s/img/biohazard.svg"> <img src="./s/img/f0ckme.png" width="112" height="28">
|
||||||
|
</a>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" id="random" href="/random"><span class="rndtext">Random</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/how"><span class="hlptext">Help</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/contact"><span class="cnttext">Contact</span></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="container">
|
||||||
|
<div class="controls">
|
||||||
|
<a id="rndbtn" href="/random">Random</a>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<div class="next-post">
|
||||||
|
{% if next != null %}
|
||||||
|
<a id="next" href="/{{ next }}">«</a>
|
||||||
|
{% else %}
|
||||||
|
<a id="next" href="#" style="color: #ccc !important;">«</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="media-object">
|
||||||
|
{% if item == "video" %}
|
||||||
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<video id="my-video" class="video-js embed-responsive-item" width="640" height="360" src="{{ dest }}" preload="auto" autoplay controls loop data-setup="{}"></video>
|
||||||
|
</div>
|
||||||
|
{% elseif item == "audio" %}
|
||||||
|
|
||||||
|
{% if thumb != null %}
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<!-- <img src="{{ thumb }}" /><br /> -->
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<audio id="my-video" class="embed-responsive-item video-js audiojs" autoplay controls loop src="{{ dest }}" data-setup="{}" poster="{% if thumb !== null %}{{ thumb }}{% else %}/s/200.gif{% endif %}" type="audio/mp3" ></audio>
|
||||||
|
</div>
|
||||||
|
{% if thumb != null %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% elseif item == "image" %}
|
||||||
|
<a href="{{ dest }}" id="elfe" target="_blank"><img id="f0ck-image" src="{{ dest }}" /></a>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
<h1>404 - Not f0cked</h1>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="previous-post">
|
||||||
|
{% if prev != null %}
|
||||||
|
<a id="prev" href="/{{ prev }}">»</a>
|
||||||
|
{% else %}
|
||||||
|
<a id="prev" href="#" style="color: #ccc !important;">»</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="metadata">
|
||||||
|
<span class="badge badge-dark"><a href="/{{ id }}" class="id-link">{{ id }} </a> by {{ username }}</span>
|
||||||
|
<span class="badge badge-dark">{{ usernetwork }} / {{ userchannel }}</span>
|
||||||
|
<span class="badge badge-dark"><a id="post_source" href="{{ srcurl }}" target="_blank">{{ src }}</a></span>
|
||||||
|
<span class="badge badge-dark">{{ size }}</span>
|
||||||
|
<span class="badge badge-dark"><time class="timeago" title="{{ timestamp }}" datetime="{{ timestamp }}"> </time></span>
|
||||||
|
<span class="badge badge-dark" id="themes"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="./s/js/shit.js"></script>
|
||||||
|
<script src="./s/js/theme.js"></script>
|
||||||
|
<script src="./s/js/video.min.js"></script>
|
||||||
|
<script src="./s/js/videojs.persistvolume.js"></script>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
let video = document.querySelector(".video-js");
|
||||||
|
if(!video)
|
||||||
|
return;
|
||||||
|
var vid1 = videojs(video);
|
||||||
|
vid1.persistvolume({
|
||||||
|
namespace: "f0ck"
|
||||||
|
});
|
||||||
|
if(vid1.autoplay() && !vid1.paused() && vid1.hasClass('vjs-paused')) {
|
||||||
|
vid1.pause();
|
||||||
|
vid1.play();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
const epochs = [
|
||||||
|
["year", 31536000],
|
||||||
|
["month", 2592000],
|
||||||
|
["day", 86400],
|
||||||
|
["hour", 3600],
|
||||||
|
["minute", 60],
|
||||||
|
["second", 1]
|
||||||
|
];
|
||||||
|
const getDuration = timeAgoInSeconds => {
|
||||||
|
for(let [name, seconds] of epochs) {
|
||||||
|
const interval = ~~(timeAgoInSeconds / seconds);
|
||||||
|
if (interval >= 1) {
|
||||||
|
return {
|
||||||
|
interval: interval,
|
||||||
|
epoch: name
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const timeAgo = date => {
|
||||||
|
const timeAgoInSeconds = ~~((new Date() - new Date(date)) / 1000);
|
||||||
|
const {interval, epoch} = getDuration(timeAgoInSeconds);
|
||||||
|
const suffix = interval === 1 ? "" : "s";
|
||||||
|
return `${interval} ${epoch}${suffix} ago`;
|
||||||
|
};
|
||||||
|
(() => {
|
||||||
|
document.querySelectorAll("time.timeago").forEach(e => e.innerHTML = timeAgo(e.title));
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||