v2.1 lol
This commit is contained in:
parent
d553e71b50
commit
65454961ce
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,5 +2,6 @@ node_modules/
|
||||||
logs/*.log
|
logs/*.log
|
||||||
config.json
|
config.json
|
||||||
public/b/*
|
public/b/*
|
||||||
|
public/ca/*
|
||||||
public/t/*
|
public/t/*
|
||||||
tmp/*
|
tmp/*
|
||||||
|
|
10224
public/s/css/bootstrap.css
vendored
10224
public/s/css/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
10832
public/s/css/bulma.css
vendored
10832
public/s/css/bulma.css
vendored
File diff suppressed because it is too large
Load Diff
|
@ -1,23 +0,0 @@
|
||||||
/* 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;
|
|
||||||
}
|
|
|
@ -1,178 +0,0 @@
|
||||||
@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;
|
|
||||||
}
|
|
|
@ -1,687 +0,0 @@
|
||||||
@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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,657 +0,0 @@
|
||||||
/* 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;
|
|
||||||
font-family: monospace;
|
|
||||||
text-transform: uppercase;
|
|
||||||
text-shadow: 1px 1px black;
|
|
||||||
}
|
|
||||||
|
|
||||||
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: #000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#next, a#prev {
|
|
||||||
position: relative;
|
|
||||||
font-weight: normal;
|
|
||||||
top: 0px;
|
|
||||||
bottom: 932px;
|
|
||||||
margin: unset;
|
|
||||||
font-size: 30px;
|
|
||||||
color: #9f0;
|
|
||||||
padding: 140px 40px 140px 40px;
|
|
||||||
cursor: pointer;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
.metadata {
|
|
||||||
background: #1b1b1b;
|
|
||||||
border-top: 1px solid #262626;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
border-left: 1px solid #1b1b1b;
|
|
||||||
border-right: 1px solid #1b1b1b;
|
|
||||||
}
|
|
||||||
|
|
||||||
.controls {
|
|
||||||
border-left: 1px solid #1b1b1b;
|
|
||||||
border-right: 1px solid #1b1b1b;
|
|
||||||
}
|
|
||||||
|
|
||||||
#themeselector {
|
|
||||||
padding: 0.04em 0.2em;
|
|
||||||
vertical-align: top;
|
|
||||||
font-weight: 560;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.badge.badge-dark {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.badge-dark, #themeselector {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #000000;
|
|
||||||
border-radius: 0;
|
|
||||||
border-left: 1px solid #262626;
|
|
||||||
border-right: 1px solid #262626;
|
|
||||||
border-top: 1px solid #000;
|
|
||||||
border-bottom: 1px solid #262626;
|
|
||||||
}
|
|
||||||
|
|
||||||
.video-js .vjs-control-bar {
|
|
||||||
background-color: #1b1b1b !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#rndbtn {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #1b1b1b;
|
|
||||||
border-radius: 0;
|
|
||||||
border-left: 1px solid #262626;
|
|
||||||
border-right: 1px solid #262626;
|
|
||||||
border-top: 1px solid #262626;
|
|
||||||
border-bottom: 1px solid #262626;
|
|
||||||
padding: 0px 5px 0px 5px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contact {
|
|
||||||
border-left: 1px solid #1b1b1b;
|
|
||||||
border-right: 1px solid #1b1b1b;
|
|
||||||
border-bottom: 1px solid #1b1b1b;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.irc {
|
|
||||||
border-left: 1px solid #1b1b1b;
|
|
||||||
border-right: 1px solid #1b1b1b;
|
|
||||||
border-bottom: 1px solid #1b1b1b;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Testing Area */
|
|
||||||
.content {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#next {
|
|
||||||
top: 0;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 1;
|
|
||||||
left: 0;
|
|
||||||
background: transparent;
|
|
||||||
width: 25%;
|
|
||||||
height: 95%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#prev {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 1;
|
|
||||||
right: 0;
|
|
||||||
background: transparent;
|
|
||||||
width: 25%;
|
|
||||||
height: 95%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vjs-control-bar {
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow-prev {
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
width: 100%;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow-next {
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
width: 100%;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: start;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#next:hover {
|
|
||||||
opacity: 1;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#next {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#prev:hover {
|
|
||||||
opacity: 1;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#prev {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* pagination */
|
|
||||||
.pagination {
|
|
||||||
padding: 8px;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border: 1px solid;
|
|
||||||
border-color: #070809 #0d0e0f #131517;
|
|
||||||
border-color: rgba(0, 0, 0, 0.8) rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.5);
|
|
||||||
border-radius: 3px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: baseline;
|
|
||||||
zoom: 1; *display: inline;
|
|
||||||
*vertical-align: auto;
|
|
||||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0));
|
|
||||||
box-shadow: 0 1px rgba(255, 255, 255, 0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination > a, .pagination > span {
|
|
||||||
float: left;
|
|
||||||
margin-left: 5px;
|
|
||||||
padding: 0 6px;
|
|
||||||
min-width: 17px;
|
|
||||||
line-height: 27px;
|
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #68da20;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
border: 1px solid black;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination :first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination > a {
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 1px black;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border-color: rgba(0, 0, 0, 0.9);
|
|
||||||
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0));
|
|
||||||
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), inset 0 1px rgba(255, 255, 255, 0.04), inset 0 -1px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(0, 0, 0, 0.1);
|
|
||||||
transition: 0.1s ease-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination > a:hover {
|
|
||||||
background-color: #333;
|
|
||||||
background-color: rgba(255, 255, 255, 0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination > span, .pagination > a:active {
|
|
||||||
color: #68da20;
|
|
||||||
text-shadow: 0 -1px black;
|
|
||||||
background: #1c1c1c;
|
|
||||||
background: rgba(255, 255, 255, 0.01);
|
|
||||||
border-color: black rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.6);
|
|
||||||
box-shadow: inset 0 1px rgba(0, 0, 0, 0.05), inset 0 2px 2px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.06);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .prev, .pagination .next {
|
|
||||||
font-family: Noteworthy, Arial, sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'VCR';
|
|
||||||
src: url('/s/vcr.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
span#f0ck {
|
|
||||||
font-family: 'VCR';
|
|
||||||
font-size: xx-large;
|
|
||||||
text-shadow: 1px 1px 1px black, 0px 0px 0px #9f0, -1px -1px 0px black, 1px -1px 0px black, -1px 1px 0px black, 0px 0px 0px #9f0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-brand {
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* nav overhaul */
|
|
||||||
.nav-item {
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-brand {
|
|
||||||
padding-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-nav.mr-auto {
|
|
||||||
flex-flow: row;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar.navbar-expand-lg {
|
|
||||||
background: #242424;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-links {
|
|
||||||
display: flex;
|
|
||||||
background: #232323;
|
|
||||||
background-image: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #000;
|
|
||||||
background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0));
|
|
||||||
box-shadow: 0 1px rgba(255,255,255,.05);
|
|
||||||
border: 1px solid;
|
|
||||||
border-top-color: currentcolor;
|
|
||||||
border-right-color: currentcolor;
|
|
||||||
border-bottom-color: currentcolor;
|
|
||||||
border-left-color: currentcolor;
|
|
||||||
border-top-color: currentcolor;
|
|
||||||
border-right-color: currentcolor;
|
|
||||||
border-bottom-color: currentcolor;
|
|
||||||
border-left-color: currentcolor;
|
|
||||||
border-color: #070809 #0d0e0f #131517;
|
|
||||||
border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link {
|
|
||||||
padding: 0;
|
|
||||||
display: flex;
|
|
||||||
border: 1px solid #000;
|
|
||||||
border-radius: 3px;
|
|
||||||
transition: .1s ease-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link {
|
|
||||||
min-width: 17px;
|
|
||||||
line-height: 27px;
|
|
||||||
background-image: linear-gradient(to bottom,rgba(255,255,255,.04),rgba(255,255,255,0));
|
|
||||||
box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-item:hover>a:hover {
|
|
||||||
background-color: #333;
|
|
||||||
background-color: rgba(255,255,255,.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-nav {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-item {
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#navbarSupportedContent {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination-container-fluid {
|
|
||||||
display: flex;
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-expand-lg .navbar-nav .nav-link {
|
|
||||||
padding-right: .5rem;
|
|
||||||
padding-left: .5rem;
|
|
||||||
margin-right: 5px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination {
|
|
||||||
padding: 5px;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border: 1px solid;
|
|
||||||
border-color: #070809 #0d0e0f #131517;
|
|
||||||
border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
|
||||||
border-radius: 3px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: baseline;
|
|
||||||
zoom: 1;
|
|
||||||
background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0));
|
|
||||||
box-shadow: 0 1px rgba(255,255,255,.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination>a,.pagination>span {
|
|
||||||
float: left;
|
|
||||||
margin-left: 5px;
|
|
||||||
padding: 0 10px;
|
|
||||||
min-width: 17px;
|
|
||||||
line-height: 27px;
|
|
||||||
font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #68da20;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
border: 1px solid #000;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination > span {
|
|
||||||
border: 1px solid #68da20 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination :first-child {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination>a {
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 1px #000;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border-color: rgba(0,0,0,.9);
|
|
||||||
background-image: linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0));
|
|
||||||
box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
|
||||||
transition: .1s ease-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination>a:hover {
|
|
||||||
background-color: #333;
|
|
||||||
background-color: rgba(255,255,255,.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination>a:active,.pagination>span {
|
|
||||||
color: #68da20;
|
|
||||||
text-shadow: 0 -1px #000;
|
|
||||||
background: #1c1c1c;
|
|
||||||
background: rgba(255,255,255,.01);
|
|
||||||
border-color: #000 rgba(0,0,0,.65) rgba(0,0,0,.6);
|
|
||||||
box-shadow: inset 0 1px rgba(0,0,0,.05),inset 0 2px 2px rgba(0,0,0,.3),0 1px rgba(255,255,255,.06);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .next,.pagination .prev {
|
|
||||||
font-family: Noteworthy,Arial,sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-nav {
|
|
||||||
width: 100%;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link-identifier {
|
|
||||||
text-align: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
ul#posts {
|
|
||||||
grid-template-columns: repeat(auto-fill,minmax(120px,1fr));
|
|
||||||
text-align: center;
|
|
||||||
padding-top: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 422px) {
|
|
||||||
ul#posts {
|
|
||||||
grid-column-gap: 0;
|
|
||||||
grid-row-gap: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container-fluid,.container-lg,.container-md,.container-sm,.container-xl {
|
|
||||||
padding-right: 5px;
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 410px) {
|
|
||||||
ul#posts {
|
|
||||||
grid-column-gap: 15px;
|
|
||||||
grid-row-gap: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container-fluid,.container-lg,.container-md,.container-sm,.container-xl {
|
|
||||||
padding-right: 15px;
|
|
||||||
padding-left: 15px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 991px) {
|
|
||||||
.navbar-nav {
|
|
||||||
width: 100%;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-expand-lg .navbar-nav .nav-link {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination-container-fluid {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
padding-top: 5px;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar {
|
|
||||||
padding: .5rem 1rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-links {
|
|
||||||
border-color: transparent transparent transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination-container-fluid {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
885
public/s/css/f0ck.css
Normal file
885
public/s/css/f0ck.css
Normal file
|
@ -0,0 +1,885 @@
|
||||||
|
/* f0ckwork v0.1 alpha */
|
||||||
|
/* written by sirx for f0ck.me */
|
||||||
|
/* use whatever you like */
|
||||||
|
/* once upon a time this was a stiefelstrapse! but no more! */
|
||||||
|
/* Licensed under wtfpl */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--accent: #9f0;
|
||||||
|
--bg: #171717;
|
||||||
|
--black: #000;
|
||||||
|
--white: #fff;
|
||||||
|
--gray: #262626;
|
||||||
|
--nav-bg: #2b2b2b;
|
||||||
|
--nav-brand-border: inset 1px #242424;
|
||||||
|
--nav-brand-bg: #171717;
|
||||||
|
--navigation-links-bg: #2b2b2b;
|
||||||
|
--navigation-links-background-linear-gradient: rgba(0,0,0,.12),rgba(0,0,0,0);
|
||||||
|
--navigation-links-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--navigation-links-box-shadow: rgba(255,255,255,.05);
|
||||||
|
--nav-link-background-linear-gradient: rgba(255,255,255,.04),rgba(255,255,255,0);
|
||||||
|
--nav-link-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 0px rgba(255,255,255,.04),inset 0 0px rgba(0,0,0,.15),0 0px 0px rgba(0,0,0,.1);
|
||||||
|
--nav-link-hover-bg: #333;
|
||||||
|
--nav-border-color: rgba(255,255,255,.05);
|
||||||
|
--dropdown-bg: #232323;
|
||||||
|
--dropdown-item-hover: #0d0d0d;
|
||||||
|
--nav-brand-font: 'VCR';
|
||||||
|
--font: monospace;
|
||||||
|
--pagination-background: #2b2b2b;
|
||||||
|
--pagination-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 0px rgba(255,255,255,.04),inset 0 0px rgba(0,0,0,.15),0 0px 0px rgba(0,0,0,.1);
|
||||||
|
--pagination-anchor-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--pagination-background-hover: #333;
|
||||||
|
--pagination-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--videojs-background: #0d0d0d;
|
||||||
|
--metadata-bg: #0d0d0d;
|
||||||
|
--badge-bg: #171717;
|
||||||
|
--posts-meta-bg: #000000b8;
|
||||||
|
--badge-sfw: #68a728;
|
||||||
|
--badge-nsfw: #a72828;
|
||||||
|
--badge-tag: #6c6c6c;
|
||||||
|
--scrollbar-color: #2b2b2b;
|
||||||
|
--pb-primary: #fff;
|
||||||
|
--pb-secondary: #9f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[theme='p1nk'] {
|
||||||
|
--accent: #ff00d0;
|
||||||
|
--bg: #171717;
|
||||||
|
--black: #000;
|
||||||
|
--white: #fff;
|
||||||
|
--gray: #262626;
|
||||||
|
--nav-bg: #2b2b2b;
|
||||||
|
--nav-brand-border: inset 1px #242424;
|
||||||
|
--nav-brand-bg: #171717;
|
||||||
|
--navigation-links-bg: #2b2b2b;
|
||||||
|
--navigation-links-background-linear-gradient: rgba(0,0,0,.12),rgba(0,0,0,0);
|
||||||
|
--navigation-links-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--navigation-links-box-shadow: rgba(255,255,255,.05);
|
||||||
|
--nav-link-background-linear-gradient: rgba(255,255,255,.04),rgba(255,255,255,0);
|
||||||
|
--nav-link-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--nav-link-hover-bg: #333;
|
||||||
|
--dropdown-bg: #232323;
|
||||||
|
--nav-brand-font: 'VCR';
|
||||||
|
--font: monospace;
|
||||||
|
--pagination-background: #2b2b2b;
|
||||||
|
--pagination-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);;
|
||||||
|
--pagination-anchor-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--pagination-background-hover: #333;
|
||||||
|
--pagination-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--videojs-background: #0e0d0d;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[theme='orange'] {
|
||||||
|
--accent: #ff6f00;
|
||||||
|
--bg: #1f1e1e;
|
||||||
|
--black: #000;
|
||||||
|
--white: #fff;
|
||||||
|
--gray: #262626;
|
||||||
|
--nav-bg: #2b2b2b;
|
||||||
|
--nav-brand-border: inset 1px #242424;
|
||||||
|
--nav-brand-bg: #1f1e1e;
|
||||||
|
--navigation-links-bg: #2b2b2b;
|
||||||
|
--navigation-links-background-linear-gradient: rgba(0,0,0,.12),rgba(0,0,0,0);
|
||||||
|
--navigation-links-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--navigation-links-box-shadow: rgba(255,255,255,.05);
|
||||||
|
--nav-link-background-linear-gradient: rgba(255,255,255,.04),rgba(255,255,255,0);
|
||||||
|
--nav-link-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--nav-link-hover-bg: #333;
|
||||||
|
--dropdown-bg: #232323;
|
||||||
|
--dropdown-item-hover: #0d0d0d;
|
||||||
|
--nav-brand-font: 'VCR';
|
||||||
|
--font: monospace;
|
||||||
|
--pagination-background: #2b2b2b;
|
||||||
|
--pagination-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--pagination-anchor-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1);
|
||||||
|
--pagination-background-hover: #333;
|
||||||
|
--pagination-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--videojs-background: #262626;
|
||||||
|
--metadata-bg: #0d0d0d;
|
||||||
|
--posts-meta-bg: #000000b8;
|
||||||
|
--badge-sfw: #68a728;
|
||||||
|
--badge-nsfw: #a72828;
|
||||||
|
--badge-tag: #6c6c6c;
|
||||||
|
--scrollbar-color: #2b2b2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[theme='amoled'] {
|
||||||
|
--accent: #fff;
|
||||||
|
--bg: #000;
|
||||||
|
--black: #000;
|
||||||
|
--white: #fff;
|
||||||
|
--gray: #2f2d2d;
|
||||||
|
--nav-bg: #000;
|
||||||
|
--nav-brand-border: inset 1px #242424;
|
||||||
|
--nav-brand-bg: #000;
|
||||||
|
--navigation-links-bg: #000;
|
||||||
|
--navigation-links-background-linear-gradient: rgba(0,0,0,.12),rgba(0,0,0,0);
|
||||||
|
--navigation-links-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--navigation-links-box-shadow: rgba(255,255,255,.05);
|
||||||
|
--nav-link-background-linear-gradient: rgba(255,255,255,.04),rgba(255,255,255,0);
|
||||||
|
--nav-link-box-shadow: inset 0 0 0 1px rgb(92, 92, 92),inset 0 1px rgb(92, 92, 92),inset 0 -1px rgb(92, 92, 92),0 1px 1px rgba(92, 92, 92, 0);
|
||||||
|
--nav-link-hover-bg: #6a6a6a70;
|
||||||
|
--nav-border-color: rgba(255,255,255,.05);
|
||||||
|
--dropdown-bg: #232323;
|
||||||
|
--dropdown-item-hover: #0d0d0d;
|
||||||
|
--nav-brand-font: 'VCR';
|
||||||
|
--font: monospace;
|
||||||
|
--pagination-background: #000;
|
||||||
|
--pagination-box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0),inset 0 0px rgba(255, 255, 255, 0),inset 0 0px rgba(248, 248, 248, 0),0 0px 0px rgba(255, 255, 255, 0);
|
||||||
|
--pagination-anchor-box-shadow: inset 0 0 0 1px rgb(92, 92, 92),inset 0 1px rgb(92, 92, 92),inset 0 -1px rgb(92, 92, 92),0 1px 1px rgba(92, 92, 92, 0);
|
||||||
|
--pagination-background-hover: #6a6a6a70;
|
||||||
|
--pagination-border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5);
|
||||||
|
--videojs-background: #0d0d0d;
|
||||||
|
--metadata-bg: #000;
|
||||||
|
--badge-bg: #000;
|
||||||
|
--posts-meta-bg: #000000b8;
|
||||||
|
--badge-sfw: #68a728;
|
||||||
|
--badge-nsfw: #a72828;
|
||||||
|
--badge-tag: #6c6c6c;
|
||||||
|
--scrollbar-color: #1d1c1c;
|
||||||
|
--pb-primary: #fff;
|
||||||
|
--pb-secondary: #9f0;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background-color: var(--scrollbar-color);
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
*, ::before, ::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
outline: 0;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'VCR';
|
||||||
|
src: url('/s/vcr.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
background-color: var(--bg);
|
||||||
|
color: var(--white);
|
||||||
|
margin: 0;
|
||||||
|
font-family: var(--font);
|
||||||
|
text-align: center;
|
||||||
|
line-height: 2;
|
||||||
|
scrollbar-color: var(--scrollbar-color) transparent;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
overscroll-behavior-y: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noscript-badge {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--accent) !important;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.post_source:hover, a.id-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.btn.disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.disabled, .btn:disabled {
|
||||||
|
opacity: 0.65;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: x-large;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mr-2 {
|
||||||
|
margin-right: 0.5rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(128px, 1fr));
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
grid-column-gap: 5px;
|
||||||
|
grid-row-gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts > li {
|
||||||
|
position: relative;
|
||||||
|
height: 128px;
|
||||||
|
width: 128px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts > li:hover {
|
||||||
|
opacity: 0.8;
|
||||||
|
box-shadow: 0 0 0 2px var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts > li span {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
color: var(--accent);
|
||||||
|
text-shadow: 0px 1px var(--black);
|
||||||
|
font-size: 11px;
|
||||||
|
background: var(--posts-meta-bg);
|
||||||
|
visibility: hidden;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-family: vcr;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#posts > li:hover span {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navbar */
|
||||||
|
.nav {
|
||||||
|
background: var(--bg);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
padding: 0;
|
||||||
|
z-index: 3;
|
||||||
|
font-family: var(--font);
|
||||||
|
text-transform: uppercase;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
border-bottom: 1px solid var(--nav-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
background: var(--nav-brand-bg);
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
transition: ease all .2s;
|
||||||
|
background: var(--black);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.f0ck {
|
||||||
|
font-family: var(--nav-brand-font);
|
||||||
|
font-size: 20;
|
||||||
|
text-shadow: 1px 1px 1px var(--black), 0px 0px 0px var(--green), -1px -1px 0px var(--black), 1px -1px 0px var(--black), -1px 1px 0px var(--black), 0px 0px 0px var(--green);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar.navbar-expand-lg {
|
||||||
|
background: var(--nav-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-expand-lg .navbar-collapse {
|
||||||
|
display: flex;
|
||||||
|
flex-basis: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-collapse {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbarSupportedContent {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link-identifier {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-expand-lg .navbar-nav {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation-links {
|
||||||
|
display: flex;
|
||||||
|
border: 1px solid var(--navigation-links-border-color);
|
||||||
|
background: var(--navigation-links-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
padding: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
display: flex;
|
||||||
|
min-width: 17px;
|
||||||
|
border: 1px solid var(--black);
|
||||||
|
border-radius: 3px;
|
||||||
|
transition: .1s ease-out;
|
||||||
|
background-image: linear-gradient(to bottom,var(--nav-link-background-linear-gradient));
|
||||||
|
box-shadow: var(--nav-link-box-shadow);
|
||||||
|
color: transparent;
|
||||||
|
transition: .5s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-expand-lg .navbar-nav .nav-link, .pagination > a, .pagination > span {
|
||||||
|
padding-right: .5rem;
|
||||||
|
padding-left: .5rem;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:hover > a:hover, .dropdown-item:hover > a:hover {
|
||||||
|
background-color: var(--nav-link-hover-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.placeholder {
|
||||||
|
border-left: 1px solid var(--accent);
|
||||||
|
margin-left: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .nav-item .dropdown-menu {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropup, .dropright, .dropdown, .dropleft {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .nav-item:hover .dropdown-menu {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav .dropdown-menu {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
background: var(--dropdown-bg);
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 5;
|
||||||
|
z-index: 1000;
|
||||||
|
min-width: calc(100% - 10px);
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
text-align: center;
|
||||||
|
list-style: none;
|
||||||
|
border-left: 1px solid;
|
||||||
|
border-right: 1px solid;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
border-color: var(--black);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu > li:hover {
|
||||||
|
background: var(--dropdown-item-hover);
|
||||||
|
}
|
||||||
|
/* Navbar media queries */
|
||||||
|
@media (max-width: 1056px) {
|
||||||
|
.navbar {
|
||||||
|
width: 100%;
|
||||||
|
display: grid;
|
||||||
|
justify-content: normal;
|
||||||
|
}
|
||||||
|
.pagination-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
.pagination > a, .pagination > span {
|
||||||
|
font-size: 10px !important;
|
||||||
|
margin-right: 0px;
|
||||||
|
padding: 5px !important;
|
||||||
|
line-height: 1;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-object {
|
||||||
|
text-align: center;
|
||||||
|
align-self: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pagination */
|
||||||
|
.pagination-wrapper {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
background: var(--pagination-background);
|
||||||
|
border: 1px solid var(--pagination-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container-fluid {
|
||||||
|
display: flex;
|
||||||
|
margin-left: 0;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
width: 100%;
|
||||||
|
padding: 5px;
|
||||||
|
color: transparent;
|
||||||
|
transition: .5s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination > a, .pagination > span {
|
||||||
|
float: left;
|
||||||
|
padding: 0 10px;
|
||||||
|
min-width: 17px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--accent);
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid var(--black);
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination > span {
|
||||||
|
border: 1px solid var(--accent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination :first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination > a {
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0 1px var(--black);
|
||||||
|
border-color: var(--black);
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: var(--pagination-anchor-box-shadow);
|
||||||
|
transition: .1s ease-out;
|
||||||
|
background-image: linear-gradient(to bottom,var(--nav-link-background-linear-gradient));
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination>a:hover {
|
||||||
|
background-color: var(--pagination-background-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination>a:active,.pagination>span {
|
||||||
|
color: var(--accent);
|
||||||
|
text-shadow: 0 -1px var(--black);
|
||||||
|
box-shadow: var(--pagination-anchor-box-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content */
|
||||||
|
@media (max-width: 999px) {
|
||||||
|
.container {
|
||||||
|
max-width: 960px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
display: grid;
|
||||||
|
justify-content: space-around;
|
||||||
|
grid-template-columns: 0fr 1fr 0fr;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.index-container {
|
||||||
|
width: 100%;
|
||||||
|
padding-right: 15;
|
||||||
|
padding-left: 15;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 361px) {
|
||||||
|
.embed-responsive-image {
|
||||||
|
bottom: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.container {
|
||||||
|
max-width: 720px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive-image {
|
||||||
|
bottom: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.container {
|
||||||
|
max-width: 960px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive-image {
|
||||||
|
bottom: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
max-width: 1140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive-image {
|
||||||
|
bottom: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 576px) {
|
||||||
|
.container {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.container {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.container {
|
||||||
|
max-width: 960px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
max-width: 1140px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 56.25%;
|
||||||
|
}
|
||||||
|
.embed-responsive::before {
|
||||||
|
display: block;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive .embed-responsive-item, .embed-responsive video {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive-image {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: content-box;
|
||||||
|
scrollbar-color: var(--scrollbar-color) transparent;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
background: var(--black);
|
||||||
|
}
|
||||||
|
|
||||||
|
.previous-post, .next-post {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#prev {
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 30;
|
||||||
|
opacity: 0.6;
|
||||||
|
text-shadow: 2px 2px 2px var(--black);
|
||||||
|
padding: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#prev::before {
|
||||||
|
content: "»";
|
||||||
|
}
|
||||||
|
|
||||||
|
#next::before {
|
||||||
|
content: "«";
|
||||||
|
}
|
||||||
|
|
||||||
|
#next {
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 30;
|
||||||
|
opacity: 0.6;
|
||||||
|
text-shadow: 2px 2px 2px var(--black);
|
||||||
|
padding: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#next:hover, #prev:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-next {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: start;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-prev {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* image */
|
||||||
|
#f0ck-image {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#elfe {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* metadata */
|
||||||
|
.badge:empty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metadata {
|
||||||
|
text-align: center;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
background-color: var(--metadata-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#themeselector {
|
||||||
|
color: var(--white);
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-family: var(--font);
|
||||||
|
background-color: var(--metadata-bg);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-dark, #themeselector {
|
||||||
|
background-color: var(--badge-bg);
|
||||||
|
border: 1px solid var(--black);
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span#tags {
|
||||||
|
grid-column: 1/4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-success {
|
||||||
|
color: var(--white);
|
||||||
|
background-color: var(--badge-sfw);
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-top: 1.5px;
|
||||||
|
padding-bottom: 1.5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
text-shadow: 1px 1px var(--black);
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-danger {
|
||||||
|
color: var(--white);
|
||||||
|
background-color: var(--badge-nsfw);
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-top: 1.5px;
|
||||||
|
padding-bottom: 1.5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
text-shadow: 1px 1px var(--black);
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-light {
|
||||||
|
color: var(--white);
|
||||||
|
background-color: var(--badge-tag);
|
||||||
|
border-radius: 3px;
|
||||||
|
text-shadow: 1px 1px var(--black);
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-top: 1.5px;
|
||||||
|
padding-bottom: 1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.irc, .contact {
|
||||||
|
padding: 10px;
|
||||||
|
color: white;
|
||||||
|
word-break: break-word;
|
||||||
|
background: var(--navigation-links-bg);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 999px) {
|
||||||
|
ul#posts {
|
||||||
|
grid-column-gap: 5px;
|
||||||
|
grid-row-gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.index-container {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbwork {
|
||||||
|
animation: pulsate 1s infinite linear;
|
||||||
|
box-shadow: 0px 2px var(--accent);
|
||||||
|
}
|
||||||
|
@keyframes pulsate {
|
||||||
|
0% { box-shadow: 0px 2px var(--white); }
|
||||||
|
40% { box-shadow: 0px 2px var(--accent); }
|
||||||
|
60% { box-shadow: 0px 2px var(--accent); }
|
||||||
|
100% { box-shadow: 0px 2px var(--white); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 768px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 56.25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 755px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 46.25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 640px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 36.25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 525px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 26.25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 414px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 16.25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-height: 300px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 14.5%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: 580px) {
|
||||||
|
.embed-responsive-16by9::before {
|
||||||
|
padding-top: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: 555px) {
|
||||||
|
.metadata {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
span#tags {
|
||||||
|
grid-column: 1/3;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#prev:focus, a#next:focus {
|
||||||
|
background: var(--nav-bg);
|
||||||
|
border-radius: 350px;
|
||||||
|
opacity: 0.6;
|
||||||
|
transition: .2s ease-in-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.post_source {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
max-width: 20ch;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.embed-responsive-image img {
|
||||||
|
animation: fadein 1.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed-responsive .embed-responsive-item, .embed-responsive video {
|
||||||
|
animation: fadein 1.5s;
|
||||||
|
}*/
|
||||||
|
@keyframes fadein {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* logik überdenken sobald anderer player!*/
|
||||||
|
video {
|
||||||
|
background: black !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio::-webkit-media-controls{
|
||||||
|
filter: invert(100%) contrast(2) opacity(95%) hue-rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
audio::-webkit-media-controls-timeline {
|
||||||
|
filter: contrast(0);
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -1,5 +0,0 @@
|
||||||
* {
|
|
||||||
-webkit-box-sizing: content-box;
|
|
||||||
-moz-box-sizing: content-box;
|
|
||||||
box-sizing: content-box;
|
|
||||||
}
|
|
|
@ -1,237 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
|
@ -1,187 +0,0 @@
|
||||||
@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;
|
|
||||||
}
|
|
|
@ -1,197 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,181 +0,0 @@
|
||||||
.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;
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
|
@ -1,323 +0,0 @@
|
||||||
* {
|
|
||||||
-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;
|
|
||||||
}
|
|
|
@ -1,277 +0,0 @@
|
||||||
@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;
|
|
||||||
}
|
|
197
public/s/css/v0ck.css
Normal file
197
public/s/css/v0ck.css
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
.v0ck {
|
||||||
|
position: relative;
|
||||||
|
font-size: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #000;
|
||||||
|
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_fullscreen {
|
||||||
|
max-width: none;
|
||||||
|
max-height: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_fullscreen video {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_video {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_overlay {
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.v0ck_overlay > svg {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
height: 60px;
|
||||||
|
width: 60px;
|
||||||
|
filter: drop-shadow(0 0 9px var(--accent));
|
||||||
|
stroke: var(--accent);
|
||||||
|
stroke-width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_button {
|
||||||
|
background: none;
|
||||||
|
border: 0;
|
||||||
|
line-height: 1;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
outline: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_button.v0ck_tplay > svg {
|
||||||
|
height: 17px;
|
||||||
|
}
|
||||||
|
.v0ck_player_button svg:hover {
|
||||||
|
filter: drop-shadow(0 0 9px var(--accent));
|
||||||
|
fill: #000;
|
||||||
|
stroke: var(--accent);
|
||||||
|
stroke-width: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
fill: #fff;
|
||||||
|
stroke: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls {
|
||||||
|
display: flex;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
transform: translateY(100%) translateY(-2px);
|
||||||
|
transition: all .5s;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
z-index: 2;
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck:hover .v0ck_player_controls, .v0ck_paused .v0ck_player_controls {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck:hover .v0ck_progress, .v0ck_paused .v0ck_progress {
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > * {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_progress {
|
||||||
|
flex: 10;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-basis: 100%;
|
||||||
|
height: 5px;
|
||||||
|
transition: height 0.4s;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_progress_filled {
|
||||||
|
width: 50%;
|
||||||
|
background: var(--accent);
|
||||||
|
flex: 0;
|
||||||
|
flex-basis: 0%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"]::after {
|
||||||
|
position: absolute;
|
||||||
|
top: -2px;
|
||||||
|
text-shadow: 1px 1px 1px 0 rgba(0,0,0,0.5);
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"] {
|
||||||
|
position: relative;
|
||||||
|
height: 5px;
|
||||||
|
margin: auto;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
min-width: 0;
|
||||||
|
max-width: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 0;
|
||||||
|
transition: all .6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls:hover > input[type="range"][name="volume"] {
|
||||||
|
min-width: 70px;
|
||||||
|
max-width: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type=range]:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_button.v0ck_playtime {
|
||||||
|
max-width: none;
|
||||||
|
cursor: default;
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"]::-webkit-slider-runnable-track {
|
||||||
|
background-color: rgb(65, 65, 65);
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"]::-moz-range-track {
|
||||||
|
height: 5px;
|
||||||
|
background-color: rgb(65, 65, 65);
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
background: var(--accent);
|
||||||
|
height: 5px;
|
||||||
|
width: 0.1px;
|
||||||
|
border: 0;
|
||||||
|
box-shadow: -100vw 0 0 100vw var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"]::-moz-range-thumb {
|
||||||
|
background: var(--accent);
|
||||||
|
height: 5px;
|
||||||
|
width: 0.1px;
|
||||||
|
border: 0;
|
||||||
|
box-shadow: -100vw 0 0 100vw var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
.v0ck_player_controls > input[type="range"][name="volume"],
|
||||||
|
.v0ck_player_button.v0ck_volume {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
1
public/s/css/video-js.min.css
vendored
1
public/s/css/video-js.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,276 +0,0 @@
|
||||||
.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);
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
@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;
|
|
||||||
}
|
|
BIN
public/s/img/music.webp
Normal file
BIN
public/s/img/music.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 634 KiB |
|
@ -1 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 3.7 KiB |
16
public/s/img/v0ck.svg
Normal file
16
public/s/img/v0ck.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?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">
|
||||||
|
<!-- Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->
|
||||||
|
<defs>
|
||||||
|
<symbol id="pause" viewBox="0 0 448 512"><path d="M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"/></symbol>
|
||||||
|
<symbol id="play" viewBox="0 0 448 512"><path d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"/></symbol>
|
||||||
|
<symbol id="fullscreen" viewBox="0 0 448 512"><path d="M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"/></symbol>
|
||||||
|
<symbol id="backward" viewBox="0 0 512 512"><path d="M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"/></symbol>
|
||||||
|
<symbol id="forward" viewBox="0 0 512 512"><path d="M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"/></symbol>
|
||||||
|
<symbol id="volume_mute" viewBox="0 0 512 512"><path d="M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z"/></symbol>
|
||||||
|
<symbol id="volume_mid" viewBox="0 0 384 512"><path d="M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z"/></symbol>
|
||||||
|
<symbol id="volume_full" viewBox="0 0 500 512"><path d="M232.35938,64.009766 c -0.39117,-0.0089 -0.78371,-0.0083 -1.17579,0.002 -5.70289,0.149548 -11.46367,2.348437 -16.15429,7.039062 L 126.06055,160 H 24 C 10.74,160 0,170.74 0,184 v 144 c 0,13.25 10.74,24 24,24 h 102.06055 l 88.96875,88.94922 c 15.03,15.03 40.9707,4.47125 40.9707,-16.96875 V 88.019531 C 256,73.726836 244.48559,64.2867 232.35938,64.009766 Z m 149.5,31.99414 c -8.10621,-0.16023 -16.09723,3.814342 -20.75,11.216794 -7.09002,11.28 -3.77985,26.20938 7.41015,33.35938 C 408.2695,165.97008 432,209.11 432,256 c 0,46.89 -23.73047,90.02992 -63.48047,115.41992 -11.19,7.14 -14.50015,22.06938 -7.41015,33.35938 6.50999,10.36 21.12109,15.14093 33.12109,7.46093 C 447.94047,377.94023 480,319.54 480,256 480,192.47 447.94047,134.05977 394.23047,99.759766 c -3.84656,-2.454375 -8.125,-3.67193 -12.37109,-3.75586 z m -55.03126,80.173824 c -8.5099,-0.0456 -16.79523,4.42047 -21.20898,12.40235 -6.39,11.61 -2.15883,26.19937 9.45117,32.60937 C 327.98028,228.27945 336,241.63 336,256 c 0,14.38 -8.01992,27.72055 -20.91992,34.81055 -11.61,6.41 -15.83922,20.99937 -9.44922,32.60937 6.43,11.66 21.04937,15.79922 32.60937,9.44922 28.23,-15.55 45.76954,-44.99891 45.76954,-76.87891 0,-31.88 -17.5393,-61.31937 -45.7793,-76.85937 -3.61875,-1.97813 -7.53414,-2.9324 -11.40235,-2.95313 z"/></symbol>
|
||||||
|
<symbol id="ol_play" viewBox="0 0 512 512"><path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"/></symbol>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
2
public/s/js/bootstrap-native.min.js
vendored
2
public/s/js/bootstrap-native.min.js
vendored
File diff suppressed because one or more lines are too long
109
public/s/js/f0ck.js
Normal file
109
public/s/js/f0ck.js
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
(() => {
|
||||||
|
if(elem = document.querySelector("#my-video")) {
|
||||||
|
const video = new v0ck(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
let tt = false;
|
||||||
|
const stimeout = 500;
|
||||||
|
const changePage = (e, pbwork = true) => {
|
||||||
|
pbwork && document.querySelector("nav.navbar").classList.add("pbwork");
|
||||||
|
!tt && (tt = setTimeout(() => e.click(), stimeout));
|
||||||
|
};
|
||||||
|
|
||||||
|
// <keybindings>
|
||||||
|
const clickOnElementBinding = selector => () => (elem = document.querySelector(selector)) ? elem.click() : null;
|
||||||
|
const keybindings = {
|
||||||
|
"ArrowLeft": clickOnElementBinding("#next"),
|
||||||
|
"d": clickOnElementBinding("#next"),
|
||||||
|
"ArrowRight": clickOnElementBinding("#prev"),
|
||||||
|
"a": clickOnElementBinding("#prev"),
|
||||||
|
"r": clickOnElementBinding("#random")
|
||||||
|
};
|
||||||
|
document.addEventListener("keydown", e => {
|
||||||
|
if(e.key in keybindings) {
|
||||||
|
e.preventDefault();
|
||||||
|
keybindings[e.key]();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// </keybindings>
|
||||||
|
|
||||||
|
// <image-responsive>
|
||||||
|
if(f0ckimage = document.querySelector("#f0ck-image")) {
|
||||||
|
f0ckimage.addEventListener("click", e => {
|
||||||
|
e.preventDefault();
|
||||||
|
f0ckimage.hasAttribute("style")
|
||||||
|
? f0ckimage.removeAttribute("style")
|
||||||
|
: f0ckimage.setAttribute("style", "max-height: none; height: auto; width: 100%; position: absolute; left: 0;");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// </image-responsive>
|
||||||
|
|
||||||
|
// <scroll-event-adder>
|
||||||
|
if(f0ckimagescroll = document.querySelector("#image-scroll")) {
|
||||||
|
f0ckimagescroll.addEventListener("click", e => {
|
||||||
|
e.preventDefault();
|
||||||
|
f0ckimagescroll.hasAttribute("style")
|
||||||
|
? f0ckimagescroll.removeAttribute("style")
|
||||||
|
: f0ckimagescroll.setAttribute("style", "overflow-y: scroll");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// </scroll-event-adder>
|
||||||
|
|
||||||
|
// <scroller>
|
||||||
|
if(document.querySelector("ul#posts")) {
|
||||||
|
document.addEventListener("wheel", e => {
|
||||||
|
if((window.innerHeight + window.scrollY) >= document.body.offsetHeight && e.deltaY > 0) {
|
||||||
|
if(elem = document.querySelector(".pagination > .next:not(.disabled)"))
|
||||||
|
changePage(elem);
|
||||||
|
}
|
||||||
|
else if(window.scrollY <= 0 && e.deltaY < 0) {
|
||||||
|
if(elem = document.querySelector(".pagination > .prev:not(.disabled)"))
|
||||||
|
changePage(elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// </scroller>
|
||||||
|
|
||||||
|
// <swipe>
|
||||||
|
let lastTap = 0;
|
||||||
|
let xDown = null;
|
||||||
|
let yDown = null;
|
||||||
|
document.addEventListener('touchstart', e => {
|
||||||
|
const firstTouch = (e.touches ?? e.originalEvent.touches)[0];
|
||||||
|
xDown = firstTouch.clientX;
|
||||||
|
yDown = firstTouch.clientY;
|
||||||
|
|
||||||
|
const currentTime = new Date().getTime();
|
||||||
|
const tapLength = currentTime - lastTap;
|
||||||
|
if(tapLength < 500 && tapLength > 0)
|
||||||
|
if(elem = document.querySelector("#random"))
|
||||||
|
changePage(elem);
|
||||||
|
lastTap = currentTime;
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
document.addEventListener('touchmove', e => {
|
||||||
|
if(!xDown || !yDown)
|
||||||
|
return;
|
||||||
|
const xDiff = xDown - e.touches[0].clientX;
|
||||||
|
const yDiff = yDown - e.touches[0].clientY;
|
||||||
|
let elem = false;
|
||||||
|
if(Math.abs(xDiff) > Math.abs(yDiff)) {
|
||||||
|
if(xDiff > 0) // left
|
||||||
|
elem = document.querySelector(".pagination > .next:not(.disabled)");
|
||||||
|
else // right
|
||||||
|
elem = document.querySelector(".pagination > .prev:not(.disabled)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(navbar = document.querySelector("nav.navbar") && document.querySelector("ul#posts")) {
|
||||||
|
if(yDiff > 0 && (window.innerHeight + window.scrollY) >= document.body.offsetHeight) // up
|
||||||
|
elem = document.querySelector(".pagination > .next:not(.disabled)");
|
||||||
|
else if(yDiff <= 0 && window.scrollY <= 0 && document.querySelector("ul#posts")) // down
|
||||||
|
elem = document.querySelector(".pagination > .prev:not(.disabled)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(elem)
|
||||||
|
changePage(elem);
|
||||||
|
xDown = yDown = null;
|
||||||
|
}, false);
|
||||||
|
// </swipe>
|
||||||
|
})();
|
|
@ -1,55 +0,0 @@
|
||||||
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 { interval, epoch } = getDuration(~~((new Date() - new Date(date)) / 1000));
|
|
||||||
return `${interval} ${epoch}${interval === 1 ? "" : "s"} ago`;
|
|
||||||
};
|
|
||||||
const clickOnElementBinding = selector => () => (elem = document.querySelector(selector))?elem.click():null;
|
|
||||||
const keybindings = {
|
|
||||||
"ArrowLeft": clickOnElementBinding("#next"),
|
|
||||||
"ArrowRight": clickOnElementBinding("#prev"),
|
|
||||||
"r": clickOnElementBinding("#random")
|
|
||||||
};
|
|
||||||
|
|
||||||
(() => {
|
|
||||||
if(video = document.querySelector(".video-js")) {
|
|
||||||
const vid1 = videojs(video);
|
|
||||||
vid1.persistvolume({
|
|
||||||
namespace: "f0ck"
|
|
||||||
});
|
|
||||||
if(vid1.autoplay() && !vid1.paused() && vid1.hasClass("vjs-paused")) {
|
|
||||||
vid1.pause();
|
|
||||||
vid1.play();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelectorAll("time.timeago").forEach(e => e.innerHTML = timeAgo(e.title));
|
|
||||||
|
|
||||||
document.addEventListener("keydown", e => {
|
|
||||||
if(e.key in keybindings) {
|
|
||||||
e.preventDefault();
|
|
||||||
keybindings[e.key]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if(f0ckimage = document.querySelector("#f0ck-image"))
|
|
||||||
f0ckimage.addEventListener("click", e => {
|
|
||||||
e.preventDefault();
|
|
||||||
f0ckimage.hasAttribute("style")?f0ckimage.removeAttribute("style"):f0ckimage.setAttribute("style", "max-height: unset;");
|
|
||||||
});
|
|
||||||
})();
|
|
|
@ -1,23 +0,0 @@
|
||||||
let load = false;
|
|
||||||
(() => {
|
|
||||||
const posts = document.querySelector("#posts");
|
|
||||||
if(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/v1/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" onerror="this.onerror=null;this.src='/s/img/mp3.png';" /></a></li>\n`;
|
|
||||||
posts.insertAdjacentHTML("beforeend", html);
|
|
||||||
posts.dataset.last = msg.last;
|
|
||||||
load = false;
|
|
||||||
})
|
|
||||||
.catch(err => console.log(err));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -1,97 +1,22 @@
|
||||||
/* 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 = [ {
|
const themes = [ 'f0ck', 'p1nk', 'orange', 'amoled' ];
|
||||||
file : 'f0ck95.css',
|
const acttheme = localStorage.getItem('theme') ?? "f0ck";
|
||||||
label : 'f0ck95',
|
document.documentElement.setAttribute("theme", acttheme);
|
||||||
id : 'f0ck95'
|
if(themecontainer = document.querySelector("#themes")) {
|
||||||
}];
|
const sb = document.createElement("select");
|
||||||
|
sb.id = "themeselector";
|
||||||
let interval = null;
|
themes.forEach(o => {
|
||||||
const clocklol = () => {
|
const option = document.createElement("option");
|
||||||
const l = document.querySelector("body");
|
option.text = o;
|
||||||
if(localStorage.selectedTheme && localStorage.selectedTheme === "f0ck95")
|
if(acttheme === o)
|
||||||
interval = setInterval((d = new Date()) => l.setAttribute("data-clock", d.toLocaleTimeString()), 1e3);
|
option.selected = true;
|
||||||
else {
|
sb.add(option);
|
||||||
clearInterval(interval);
|
});
|
||||||
l.removeAttribute("data-clock");
|
themecontainer.insertAdjacentElement("afterend", sb);
|
||||||
|
sb.addEventListener("change", e => {
|
||||||
|
const s = e.target.options[e.target.selectedIndex].innerText;
|
||||||
|
document.documentElement.setAttribute("theme", s);
|
||||||
|
localStorage.setItem("theme", s);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
})();
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
172
public/s/js/v0ck.js
Normal file
172
public/s/js/v0ck.js
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
const tpl_player = svg => `<div class="v0ck_player_controls">
|
||||||
|
<div class="v0ck_progress">
|
||||||
|
<div class="v0ck_progress_filled"></div>
|
||||||
|
</div>
|
||||||
|
<button class="v0ck_player_button v0ck_tplay v0ck_toggle" title="Play">
|
||||||
|
<svg style="width: 20px; height: 20px;">
|
||||||
|
<use id="v0ck_svg_play" href="${svg}#play"></use>
|
||||||
|
<use id="v0ck_svg_pause" class="v0ck_hidden" href="${svg}#pause"></use>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button class="v0ck_player_button v0ck_volume">
|
||||||
|
<svg style="width: 20px; height: 20px;">
|
||||||
|
<use id="v0ck_svg_volume_full" href="${svg}#volume_full"></use>
|
||||||
|
<use id="v0ck_svg_volume_mid" class="v0ck_hidden" href="${svg}#volume_mid"></use>
|
||||||
|
<use id="v0ck_svg_volume_mute" class="v0ck_hidden" href="${svg}#volume_mute"></use>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<input type="range" name="volume" min="0" max="1" step="0.05" value="1" />
|
||||||
|
<button class="v0ck_player_button v0ck_playtime">00:00 / 00:00</button>
|
||||||
|
<span style="flex: 30"></span>
|
||||||
|
<button data-skip="-10" class="v0ck_player_button">
|
||||||
|
<svg style="width: 20px; height: 20px;"><use id="v0ck_svg_backward" href="${svg}#backward"></use></svg>
|
||||||
|
</button>
|
||||||
|
<button data-skip="10" class="v0ck_player_button">
|
||||||
|
<svg style="width: 20px; height: 20px;"><use id="v0ck_svg_forward" href="${svg}#forward"></use></svg>
|
||||||
|
</button>
|
||||||
|
<button class="v0ck_player_button v0ck_toggle v0ck_fullscreen" title="Full Screen">
|
||||||
|
<svg style="width: 20px; height: 20px;"><use id="v0ck_svg_fullscreen" href="${svg}#fullscreen"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="v0ck_overlay v0ck_hidden">
|
||||||
|
<svg><use id="v0ck_svg_ol_play" href="${svg}#ol_play"></use></svg>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
class v0ck {
|
||||||
|
constructor(elem) {
|
||||||
|
const tagName = elem.tagName.toLowerCase();
|
||||||
|
if(["video", "audio"].includes(tagName)) {
|
||||||
|
const parent = elem.parentElement;
|
||||||
|
parent.classList.add("v0ck", "paused");
|
||||||
|
elem.classList.add("v0ck_video", "viewer");
|
||||||
|
document.head.insertAdjacentHTML("beforeend", `<link rel="stylesheet" href="/s/css/v0ck.css">`); // inject css
|
||||||
|
elem.insertAdjacentHTML("afterend", tpl_player("/s/img/v0ck.svg"));
|
||||||
|
|
||||||
|
if(tagName === "audio" && elem.hasAttribute('poster')) { // set cover
|
||||||
|
const player = document.querySelector('.v0ck');
|
||||||
|
player.style.backgroundImage = `url('${elem.getAttribute('poster')}')`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return console.error("nope");
|
||||||
|
this.init(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
init(elem) {
|
||||||
|
const player = document.querySelector('.v0ck');
|
||||||
|
const video = elem;
|
||||||
|
video.removeAttribute('autoplay');
|
||||||
|
video.removeAttribute('controls');
|
||||||
|
const progress = player.querySelector('.v0ck_progress');
|
||||||
|
const progressBar = player.querySelector('.v0ck_progress_filled');
|
||||||
|
const toggle = player.querySelector('.v0ck_toggle');
|
||||||
|
const skipButtons = player.querySelectorAll('.v0ck [data-skip]');
|
||||||
|
const ranges = player.querySelectorAll('.v0ck input[type="range"]');
|
||||||
|
const volumeSlider = player.querySelector('.v0ck input[type="range"][name="volume"]');
|
||||||
|
const fullscreen = player.querySelector('.v0ck_fullscreen');
|
||||||
|
const playtime = player.querySelector('.v0ck_playtime');
|
||||||
|
const overlay = player.querySelector('.v0ck_overlay');
|
||||||
|
const volumeButton = player.querySelector('.v0ck_volume');
|
||||||
|
const volumeSymbols = volumeButton.querySelectorAll('.v0ck use');
|
||||||
|
|
||||||
|
const defaultVolume = 0.5;
|
||||||
|
let mousedown = false;
|
||||||
|
let _volume;
|
||||||
|
|
||||||
|
function handleVolumeButton(vol) {
|
||||||
|
[...volumeSymbols].forEach(s => !s.classList.contains('v0ck_hidden') ? s.classList.add('v0ck_hidden') : null);
|
||||||
|
switch(true) {
|
||||||
|
case(vol === 0): [...volumeSymbols].filter(s => s.id === "v0ck_svg_volume_mute")[0].classList.toggle('v0ck_hidden'); break;
|
||||||
|
case(vol <= 0.5 && vol > 0): [...volumeSymbols].filter(s => s.id === "v0ck_svg_volume_mid")[0].classList.toggle('v0ck_hidden'); break;
|
||||||
|
case(vol > 0.5): [...volumeSymbols].filter(s => s.id === "v0ck_svg_volume_full")[0].classList.toggle('v0ck_hidden'); break;
|
||||||
|
}
|
||||||
|
localStorage.setItem("volume", vol);
|
||||||
|
}
|
||||||
|
function togglePlay() {
|
||||||
|
const status = video[video.paused ? 'play' : 'pause']();
|
||||||
|
if(status !== undefined) { // todo: merge with updatePlayIcon
|
||||||
|
status
|
||||||
|
.then(_ => {
|
||||||
|
overlay.classList[video.paused ? 'remove' : 'add']('v0ck_hidden');
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
overlay.classList.toggle('v0ck_hidden');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
overlay.classList[video.paused ? 'remove' : 'add']('v0ck_hidden');
|
||||||
|
}
|
||||||
|
function updatePlayIcon() {
|
||||||
|
toggle.classList.toggle('playing');
|
||||||
|
player.classList.toggle('paused');
|
||||||
|
toggle.setAttribute('title', toggle.classList.contains('playing') ? 'Pause' : 'Play');
|
||||||
|
[...toggle.querySelectorAll('use')].forEach(icon => icon.classList.toggle('v0ck_hidden'));
|
||||||
|
}
|
||||||
|
function toggleMute(e) {
|
||||||
|
if(video.volume === 0)
|
||||||
|
video.volume = volumeSlider.value = _volume === 0 ? defaultVolume : _volume;
|
||||||
|
else {
|
||||||
|
_volume = video.volume;
|
||||||
|
video.volume = volumeSlider.value = 0;
|
||||||
|
}
|
||||||
|
handleVolumeButton(video.volume);
|
||||||
|
}
|
||||||
|
function skip() {
|
||||||
|
video.currentTime += +this.dataset.skip;
|
||||||
|
}
|
||||||
|
function handleRangeUpdate() {
|
||||||
|
video[this.name] = this.value;
|
||||||
|
_volume = video.volume;
|
||||||
|
handleVolumeButton(video.volume);
|
||||||
|
}
|
||||||
|
function formatTime(seconds) {
|
||||||
|
const minutes = (~~(seconds / 60)).toString().padStart(2, "0");
|
||||||
|
seconds = (~~(seconds % 60)).toString().padStart(2, "0");
|
||||||
|
return minutes + ":" + seconds;
|
||||||
|
}
|
||||||
|
function handleProgress() {
|
||||||
|
const percent = (video.currentTime / video.duration) * 100;
|
||||||
|
progressBar.style.flexBasis = percent + '%';
|
||||||
|
playtime.innerText = `${formatTime(video.currentTime)} / ${formatTime(video.duration)}`;
|
||||||
|
}
|
||||||
|
function scrub(e) {
|
||||||
|
video.currentTime = (e.offsetX / progress.offsetWidth) * video.duration;
|
||||||
|
}
|
||||||
|
function toggleFullScreen(e) {
|
||||||
|
if(document.fullscreenElement)
|
||||||
|
document.exitFullscreen();
|
||||||
|
else
|
||||||
|
player.requestFullscreen();
|
||||||
|
}
|
||||||
|
function toggleFullScreenClasses() {
|
||||||
|
player.classList.toggle('fullscreen');
|
||||||
|
}
|
||||||
|
|
||||||
|
player.addEventListener('click', e => {
|
||||||
|
const path = e.path || (e.composedPath && e.composedPath());
|
||||||
|
if(!path.filter(f => f.classList?.contains('v0ck_player_controls')).length)
|
||||||
|
togglePlay(e);
|
||||||
|
});
|
||||||
|
toggle.addEventListener('click', togglePlay);
|
||||||
|
video.addEventListener('play', updatePlayIcon);
|
||||||
|
video.addEventListener('pause', updatePlayIcon);
|
||||||
|
video.addEventListener('timeupdate', handleProgress);
|
||||||
|
volumeButton.addEventListener('click', toggleMute);
|
||||||
|
skipButtons.forEach(button => button.addEventListener('click', skip));
|
||||||
|
ranges.forEach(range => range.addEventListener('change', handleRangeUpdate));
|
||||||
|
ranges.forEach(range => range.addEventListener('mousemove', handleRangeUpdate));
|
||||||
|
progress.addEventListener('click', scrub);
|
||||||
|
progress.addEventListener('mousemove', e => mousedown && scrub(e));
|
||||||
|
progress.addEventListener('mousedown', () => mousedown = true);
|
||||||
|
progress.addEventListener('mouseup', () => mousedown = false);
|
||||||
|
fullscreen.addEventListener('click', toggleFullScreen);
|
||||||
|
document.addEventListener('fullscreenchange', toggleFullScreenClasses);
|
||||||
|
document.addEventListener('mozfullscreenchange', toggleFullScreenClasses);
|
||||||
|
document.addEventListener('webkitfullscreenchange', toggleFullScreenClasses);
|
||||||
|
document.addEventListener('msfullscreenchange', toggleFullScreenClasses);
|
||||||
|
|
||||||
|
video.volume = _volume = volumeSlider.value = +(localStorage.getItem('volume') ?? defaultVolume);
|
||||||
|
handleVolumeButton(video.volume);
|
||||||
|
togglePlay();
|
||||||
|
}
|
||||||
|
}
|
25
public/s/js/video.min.js
vendored
25
public/s/js/video.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,123 +0,0 @@
|
||||||
"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);
|
|
||||||
|
|
||||||
});
|
|
5
src/inc/config.mjs
Normal file
5
src/inc/config.mjs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import _config from "../../config.json";
|
||||||
|
|
||||||
|
let config = JSON.parse(JSON.stringify(_config));
|
||||||
|
|
||||||
|
export default config;
|
|
@ -1,3 +1,21 @@
|
||||||
|
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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export default new class {
|
export default new class {
|
||||||
formatSize(size, i = ~~(Math.log(size) / Math.log(1024))) {
|
formatSize(size, i = ~~(Math.log(size) / Math.log(1024))) {
|
||||||
return (size / Math.pow(1024, i)).toFixed(2) * 1 + " " + ["B", "kB", "MB", "GB", "TB"][i];
|
return (size / Math.pow(1024, i)).toFixed(2) * 1 + " " + ["B", "kB", "MB", "GB", "TB"][i];
|
||||||
|
@ -5,4 +23,8 @@ export default new class {
|
||||||
calcSpeed(b, s) {
|
calcSpeed(b, s) {
|
||||||
return (Math.round((b * 8 / s / 1e6) * 1e4) / 1e4);
|
return (Math.round((b * 8 / s / 1e6) * 1e4) / 1e4);
|
||||||
}
|
}
|
||||||
|
timeAgo(date) {
|
||||||
|
const { interval, epoch } = getDuration(~~((new Date() - new Date(date)) / 1e3));
|
||||||
|
return `${interval} ${epoch}${interval === 1 ? "" : "s"} ago`;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
114
src/inc/routes/apiv2.mjs
Normal file
114
src/inc/routes/apiv2.mjs
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
import router from "../router.mjs";
|
||||||
|
import sql from "../sql.mjs";
|
||||||
|
import { parse } from "url";
|
||||||
|
import cfg from "../../../config.json";
|
||||||
|
|
||||||
|
import { mimes, queries } from "./inc/apiv2.mjs";
|
||||||
|
|
||||||
|
router.get("/api/v2", (req, res) => {
|
||||||
|
res.end("api lol");
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/v2\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => {
|
||||||
|
const args = [];
|
||||||
|
let q = queries.random.main;
|
||||||
|
|
||||||
|
if(req.url.split[3] === "user") {
|
||||||
|
q += queries.random.where("username like ?");
|
||||||
|
args.push(req.url.split[4] || "flummi");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
q += queries.random.where(mimes[req.url.split[3]] ? mimes[req.url.split[3]].map(mime => `mime = "${mime}"`).join(" or ") : null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const rows = await sql.query(q, args);
|
||||||
|
res
|
||||||
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
|
.end(JSON.stringify(rows.length > 0 ? rows[0] : []), "utf-8");
|
||||||
|
} catch(err) {
|
||||||
|
res
|
||||||
|
.writeHead(500)
|
||||||
|
.end(JSON.stringify(err), "utf-8");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/api/v2/p", async (req, res) => {
|
||||||
|
let id = parseInt(req.url.qs.id) || 99999999;
|
||||||
|
const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200);
|
||||||
|
let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ];
|
||||||
|
|
||||||
|
try {
|
||||||
|
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) {
|
||||||
|
id = tmp.max;
|
||||||
|
[ order, trend ] = [ "desc", "<=" ];
|
||||||
|
}
|
||||||
|
if((id + 1 - eps) < tmp.min) {
|
||||||
|
id = tmp.min;
|
||||||
|
[ order, trend ] = [ "asc", ">=" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
const rows = await sql.query(queries.p(trend, order), [ id, eps ]);
|
||||||
|
const items = {
|
||||||
|
items: rows,
|
||||||
|
first: rows[0].id,
|
||||||
|
last: rows[rows.length - 1].id,
|
||||||
|
newest: tmp.max,
|
||||||
|
oldest: tmp.min
|
||||||
|
};
|
||||||
|
res
|
||||||
|
.writeHead(200, { "Content-Type": "application/json" })
|
||||||
|
.end(JSON.stringify(items), "utf-8");
|
||||||
|
} catch(err) {
|
||||||
|
console.error(err);
|
||||||
|
res
|
||||||
|
.writeHead(500)
|
||||||
|
.end(JSON.stringify(err), "utf-8");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/v2\/p\/([0-9]+)/, async (req, res) => { // legacy
|
||||||
|
let eps = 100;
|
||||||
|
let id = +req.url.split[3];
|
||||||
|
|
||||||
|
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\/v2\/item\/[0-9]+$/, async (req, res) => {
|
||||||
|
try {
|
||||||
|
const rows = await sql.query(queries.item, Array(3).fill(req.url.split[3]));
|
||||||
|
res.reply({
|
||||||
|
type: "application/json",
|
||||||
|
body: JSON.stringify(rows?.shift() || [])
|
||||||
|
});
|
||||||
|
} catch(err) {
|
||||||
|
res.reply({
|
||||||
|
code: 500,
|
||||||
|
body: JSON.stringify(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/v2\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen
|
||||||
|
const user = req.url.split[3];
|
||||||
|
const eps = Math.min(req.url.split[4] || 50, 50);
|
||||||
|
try {
|
||||||
|
const rows = await sql.query(queries.user, [ user, eps ]);
|
||||||
|
res.reply({
|
||||||
|
type: "application/json",
|
||||||
|
body: JSON.stringify(rows.length > 0 ? rows : [])
|
||||||
|
});
|
||||||
|
} catch(err) {
|
||||||
|
res.reply({
|
||||||
|
code: 500,
|
||||||
|
body: JSON.stringify(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
18
src/inc/routes/inc/apiv2.mjs
Normal file
18
src/inc/routes/inc/apiv2.mjs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
export const mimes = {
|
||||||
|
image: [ "image/png", "image/gif", "image/jpeg" ],
|
||||||
|
video: [ "video/webm", "video/mp4", "video/quicktime" ],
|
||||||
|
audio: [ "audio/mpeg", "audio/flac", "audio/x-flac", "audio/ogg" ]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const queries = {
|
||||||
|
random: {
|
||||||
|
main: "select id, mime, size, username, userchannel, usernetwork, stamp, dest, src from items ",
|
||||||
|
where: where => `${where?`where ${where}`:""} order by rand() limit 1`
|
||||||
|
},
|
||||||
|
item: "select id, mime, dest, size, src, stamp, userchannel, username, usernetwork, "
|
||||||
|
+ "(select id from items where id = (select min(id) from items where id > ?)) as next, "
|
||||||
|
+ "(select id from items where id = (select max(id) from items where id < ?)) as prev "
|
||||||
|
+ "from items where items.id = ? limit 1",
|
||||||
|
p: (trend, order) => `select id, mime from items where id ${trend} ? order by id ${order} limit ?`,
|
||||||
|
user: "select id, mime, size, src, stamp, userchannel, username, usernetwork from items where username = ? limit ?"
|
||||||
|
};
|
|
@ -1,6 +1,12 @@
|
||||||
export const queries = {
|
export const mimes = {
|
||||||
item: "select items.*, "
|
image: [ "image/png", "image/gif", "image/jpeg" ],
|
||||||
+ "(select id from items where id = (select min(id) from items where id > ?)) as next, "
|
video: [ "video/webm", "video/mp4", "video/quicktime" ],
|
||||||
+ "(select id from items where id = (select max(id) from items where id < ?)) as prev "
|
audio: [ "audio/mpeg", "audio/flac", "audio/x-flac", "audio/ogg" ]
|
||||||
+ "from items where items.id = ? limit 1"
|
};
|
||||||
|
|
||||||
|
export const queries = {
|
||||||
|
random: {
|
||||||
|
main: "select id, mime, size, username, userchannel, usernetwork, stamp, dest, src from items ",
|
||||||
|
where: where => `${where?`where ${where}`:""} order by rand() limit 1`
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,22 +2,28 @@ import router from "../router.mjs";
|
||||||
import cfg from "../../../config.json";
|
import cfg from "../../../config.json";
|
||||||
import url from "url";
|
import url from "url";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import { queries } from "./inc/index.mjs";
|
import { mimes } from "./inc/index.mjs";
|
||||||
import sql from "../sql.mjs";
|
import sql from "../sql.mjs";
|
||||||
import lib from "../lib.mjs";
|
import lib from "../lib.mjs";
|
||||||
import tpl from "../tpl.mjs";
|
import tpl from "../tpl.mjs";
|
||||||
|
|
||||||
tpl.readdir("views");
|
tpl.readdir("views");
|
||||||
|
|
||||||
router.get(/\/(p\/\d+)?$/, async (req, res) => {
|
router.get(/^\/(audio\/?|image\/?|video\/?)?(p\/\d+)?$/, async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const total = (await sql.query("select count(*) as total from items"))[0].total;
|
let mime = false;
|
||||||
const limit = 299;
|
let q = false;
|
||||||
const pages = +Math.ceil(total / limit);
|
if(['audio', 'image', 'video'].includes(req.url.split[0])) {
|
||||||
const page = Math.min(pages, +req.url.split[1] || 1);
|
mime = req.url.split[0];
|
||||||
const offset = (page - 1) * limit;
|
q = " where " + (mimes[mime] ? mimes[mime].map(_mime => `mime = "${_mime}"`).join(" or ") : null);
|
||||||
|
}
|
||||||
|
|
||||||
const query = await sql.query("select id, mime from items order by id desc limit ?, ?", [ offset, limit ]);
|
const total = (await sql.query("select count(*) as total from items" + (mime ? q : "")))[0].total;
|
||||||
|
const pages = +Math.ceil(total / cfg.websrv.eps);
|
||||||
|
const page = Math.min(pages, +req.url.split[mime ? 2 : 1] || 1);
|
||||||
|
const offset = (page - 1) * cfg.websrv.eps;
|
||||||
|
|
||||||
|
const query = await sql.query(`select id, mime from items ${mime ? q : ""} order by id desc limit ?, ?`, [ offset, cfg.websrv.eps ]);
|
||||||
|
|
||||||
let cheat = [];
|
let cheat = [];
|
||||||
for(let i = Math.max(1, page - 3); i <= Math.min(page + 3, pages); i++)
|
for(let i = Math.max(1, page - 3); i <= Math.min(page + 3, pages); i++)
|
||||||
|
@ -37,27 +43,49 @@ router.get(/\/(p\/\d+)?$/, async (req, res) => {
|
||||||
next: (page < pages) ? page + 1 : null,
|
next: (page < pages) ? page + 1 : null,
|
||||||
page: page,
|
page: page,
|
||||||
cheat: cheat,
|
cheat: cheat,
|
||||||
link: "/p/"
|
link: `/${mime ? mime + "/" : ""}p/`
|
||||||
},
|
},
|
||||||
last: query[query.length - 1].id
|
last: query[query.length - 1].id,
|
||||||
|
filter: mime ? mime : undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
res.reply({ body: tpl.render("views/index", data) });
|
res.reply({ body: tpl.render("views/index", data) });
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
res.reply({ body: "error :(" });
|
console.log(err);
|
||||||
|
res.reply({ body: "sorry bald wieder da lol :(" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(/^\/([0-9]+)$/, async (req, res) => {
|
router.get(/^\/((audio\/|video\/|image\/)?[0-9]+)$/, async (req, res) => {
|
||||||
const query = (await sql.query(queries.item, Array(3).fill(req.url.split[0])))?.shift();
|
let id = false;
|
||||||
const qmax = (await sql.query("select id from items order by id desc limit 1"))[0].id;
|
let mime = false;
|
||||||
|
let q = false;
|
||||||
|
|
||||||
|
if(['audio', 'video', 'image'].includes(req.url.split[0])) {
|
||||||
|
mime = req.url.split[0];
|
||||||
|
id = +req.url.split[1];
|
||||||
|
q = mimes[mime] ? mimes[mime].map(_mime => `mime = "${_mime}"`).join(" or ") : null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
id = +req.url.split[0];
|
||||||
|
|
||||||
|
const query = (await sql.query(`select items.* from items where items.id = ? ${mime ? "and ("+q+")" : ""} limit 1`, [ id ]))?.shift();
|
||||||
|
|
||||||
if(!query?.id)
|
if(!query?.id)
|
||||||
return res.redirect("/404");
|
return res.redirect("/404");
|
||||||
|
|
||||||
let cheat = [];
|
const tags = (await sql.query(`select tags.tag from tags_assign left join tags on tags.id = tags_assign.tag_id where tags_assign.item_id = ?`, [ id ]));
|
||||||
for(let i = Math.min(query.id + 3, qmax); i >= Math.max(1, query.id - 3); i--)
|
|
||||||
cheat.push(i);
|
const qmin = (await sql.query(`select id from items ${mime ? "where "+q : ""} order by id asc limit 1`))[0].id;
|
||||||
|
const qmax = (await sql.query(`select id from items ${mime ? "where "+q : ""} order by id desc limit 1`))[0].id;
|
||||||
|
|
||||||
|
const qnext = (await sql.query(`select id from items where id > ? ${mime ? "and ("+q+")" : ""} order by id asc limit 3`, [ id ])).reverse();
|
||||||
|
const qprev = (await sql.query(`select id from items where id < ? ${mime ? "and ("+q+")" : ""} order by id desc limit 3`, [ id ]));
|
||||||
|
|
||||||
|
const cheat = qnext.concat([{ id: id }].concat(qprev)).map(e => +e.id);
|
||||||
|
|
||||||
|
const next = qnext[qnext.length - 1] ? qnext[qnext.length - 1].id : false;
|
||||||
|
const prev = qprev[0] ? qprev[0].id : false;
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
user: {
|
user: {
|
||||||
|
@ -72,23 +100,24 @@ router.get(/^\/([0-9]+)$/, async (req, res) => {
|
||||||
short: url.parse(query.src).hostname,
|
short: url.parse(query.src).hostname,
|
||||||
},
|
},
|
||||||
thumbnail: `${cfg.websrv.paths.thumbnails}/${query.id}.png`,
|
thumbnail: `${cfg.websrv.paths.thumbnails}/${query.id}.png`,
|
||||||
|
coverart: `${cfg.websrv.paths.coverarts}/${query.id}.png`,
|
||||||
dest: `${cfg.websrv.paths.images}/${query.dest}`,
|
dest: `${cfg.websrv.paths.images}/${query.dest}`,
|
||||||
mime: query.mime,
|
mime: query.mime,
|
||||||
size: lib.formatSize(query.size),
|
size: lib.formatSize(query.size),
|
||||||
timestamp: new Date(query.stamp * 1000).toISOString()
|
timestamp: lib.timeAgo(new Date(query.stamp * 1000).toISOString()),
|
||||||
|
tags: tags
|
||||||
},
|
},
|
||||||
next: query.next ? query.next : null,
|
|
||||||
prev: query.prev ? query.prev : null,
|
|
||||||
title: `${query.id} - f0ck.me`,
|
title: `${query.id} - f0ck.me`,
|
||||||
pagination: {
|
pagination: {
|
||||||
start: qmax,
|
start: qmax,
|
||||||
end: 1,
|
end: qmin,
|
||||||
prev: query.id + 1,
|
prev: next,
|
||||||
next: Math.max(query.id - 1, 1),
|
next: prev,
|
||||||
page: query.id,
|
page: query.id,
|
||||||
cheat: cheat,
|
cheat: cheat,
|
||||||
link: "/"
|
link: `/${mime ? mime + "/" : ""}`
|
||||||
}
|
},
|
||||||
|
filter: mime ? mime : undefined
|
||||||
};
|
};
|
||||||
res.reply({ body: tpl.render("views/item", data) });
|
res.reply({ body: tpl.render("views/item", data) });
|
||||||
});
|
});
|
||||||
|
@ -96,7 +125,3 @@ router.get(/^\/([0-9]+)$/, async (req, res) => {
|
||||||
router.get(/^\/(contact|help|about)$/, (req, res) => {
|
router.get(/^\/(contact|help|about)$/, (req, res) => {
|
||||||
res.reply({ body: tpl.render(`views/${req.url.split[0]}`) });
|
res.reply({ body: tpl.render(`views/${req.url.split[0]}`) });
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/random", async (req, res) => {
|
|
||||||
res.redirect("/" + (await sql.query("select id from items order by rand() limit 1"))[0].id)
|
|
||||||
});
|
|
||||||
|
|
19
src/inc/routes/random.mjs
Normal file
19
src/inc/routes/random.mjs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import router from "../router.mjs";
|
||||||
|
import { mimes, queries } from "./inc/index.mjs";
|
||||||
|
import sql from "../sql.mjs";
|
||||||
|
|
||||||
|
router.get(/^\/random(\/image|\/video|\/audio)?$/, async (req, res) => {
|
||||||
|
const args = [];
|
||||||
|
let q = queries.random.main;
|
||||||
|
|
||||||
|
q += queries.random.where(mimes[req.url.split[1]] ? mimes[req.url.split[1]].map(mime => `mime = "${mime}"`).join(" or ") : null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const rows = await sql.query(q, args);
|
||||||
|
res.redirect(`/${req.url.split[1] ? req.url.split[1] + "/" : ""}${rows[0].id}`);
|
||||||
|
} catch(err) {
|
||||||
|
res
|
||||||
|
.writeHead(500)
|
||||||
|
.end(JSON.stringify(err), "utf-8");
|
||||||
|
}
|
||||||
|
});
|
|
@ -15,3 +15,8 @@ router.static({
|
||||||
dir: path.resolve() + "/public/t",
|
dir: path.resolve() + "/public/t",
|
||||||
route: /^\/t\//
|
route: /^\/t\//
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.static({
|
||||||
|
dir: path.resolve() + "/public/ca",
|
||||||
|
route: /^\/ca\//
|
||||||
|
});
|
51
src/inc/routes/tags.mjs
Normal file
51
src/inc/routes/tags.mjs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
import router from "../router.mjs";
|
||||||
|
import sql from "../sql.mjs";
|
||||||
|
import tpl from "../tpl.mjs";
|
||||||
|
|
||||||
|
tpl.readdir("views");
|
||||||
|
|
||||||
|
router.get(/^\/tags(\/\w+)?/, async (req, res) => {
|
||||||
|
try {
|
||||||
|
const tag = req.url;
|
||||||
|
|
||||||
|
console.log(tag);
|
||||||
|
|
||||||
|
return res.reply({ body: "wip" });
|
||||||
|
const total = (await sql.query("select count(*) as total from items" + (mime ? q : "")))[0].total;
|
||||||
|
const limit = 299;
|
||||||
|
const pages = +Math.ceil(total / limit);
|
||||||
|
const page = Math.min(pages, +req.url.split[mime ? 2 : 1] || 1);
|
||||||
|
const offset = (page - 1) * limit;
|
||||||
|
|
||||||
|
const query = await sql.query(`select id, mime from items ${mime ? q : ""} order by id desc limit ?, ?`, [ offset, limit ]);
|
||||||
|
|
||||||
|
let cheat = [];
|
||||||
|
for(let i = Math.max(1, page - 3); i <= Math.min(page + 3, pages); i++)
|
||||||
|
cheat.push(i);
|
||||||
|
|
||||||
|
query.forEach(e => {
|
||||||
|
if(!fs.existsSync(`public/t/${e.id}.png`))
|
||||||
|
fs.copyFileSync("public/s/img/broken.png", `public/t/${e.id}.png`);
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
items: query,
|
||||||
|
pagination: {
|
||||||
|
start: 1,
|
||||||
|
end: pages,
|
||||||
|
prev: (page > 1) ? page - 1 : null,
|
||||||
|
next: (page < pages) ? page + 1 : null,
|
||||||
|
page: page,
|
||||||
|
cheat: cheat,
|
||||||
|
link: `/${mime ? mime + "/" : ""}p/`
|
||||||
|
},
|
||||||
|
last: query[query.length - 1].id,
|
||||||
|
filter: mime ? mime : undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
res.reply({ body: tpl.render("views/index", data) });
|
||||||
|
} catch(err) {
|
||||||
|
console.log(err);
|
||||||
|
res.reply({ body: "sorry bald wieder da lol :(" });
|
||||||
|
}
|
||||||
|
});
|
|
@ -1,5 +1,6 @@
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
import cfg from "./config.mjs";
|
||||||
|
|
||||||
export default new class {
|
export default new class {
|
||||||
#templates = {};
|
#templates = {};
|
||||||
|
@ -10,15 +11,18 @@ export default new class {
|
||||||
[ "elseif", t => `}else if(${t.slice(6).trim()}){` ],
|
[ "elseif", t => `}else if(${t.slice(6).trim()}){` ],
|
||||||
[ "else", () => "}else{" ],
|
[ "else", () => "}else{" ],
|
||||||
[ "/if", () => "}" ],
|
[ "/if", () => "}" ],
|
||||||
[ "include", (t, data) => `html+='${this.render(t.slice(7).trim(), data)}';` ],
|
[ "include", (t, data) => `html+='${this.render(cfg.websrv.cache ? t.slice(7).trim() : `views/${t.slice(7).trim()}`, data)}';` ],
|
||||||
[ "=", t => `html+=${t.slice(1).trim()};` ]
|
[ "=", t => `html+=${t.slice(1).trim()};` ]
|
||||||
];
|
];
|
||||||
readdir(dir, root = dir, rel = dir.replace(`${root}/`, "")) {
|
readdir(dir, root = dir, rel = dir.replace(`${root}/`, "")) {
|
||||||
for(const d of fs.readdirSync(`${path.resolve()}/${dir}`))
|
for(const d of fs.readdirSync(`${path.resolve()}/${dir}`))
|
||||||
d.endsWith(".html")
|
d.endsWith(".html")
|
||||||
? this.#templates[`${rel}/${d.split(".")[0]}`] = fs.readFileSync(`${dir}/${d}`, "utf-8").replace(/\'/g, "\\'")
|
? this.#templates[`${rel}/${d.split(".")[0]}`] = this.readtpl(dir, d)
|
||||||
: this.readdir(`${dir}/${d}`, root);
|
: this.readdir(`${dir}/${d}`, root);
|
||||||
}
|
}
|
||||||
|
readtpl(dir, d) {
|
||||||
|
return fs.readFileSync(`${dir}/${d}`, "utf-8").replace(/\'/g, "\\'");
|
||||||
|
}
|
||||||
forEach(o, f) {
|
forEach(o, f) {
|
||||||
if(Array.isArray(o))
|
if(Array.isArray(o))
|
||||||
o.forEach(f);
|
o.forEach(f);
|
||||||
|
@ -28,7 +32,7 @@ export default new class {
|
||||||
throw new Error(`${o} is not a iterable object`);
|
throw new Error(`${o} is not a iterable object`);
|
||||||
}
|
}
|
||||||
render(tpl, data = {}, f) {
|
render(tpl, data = {}, f) {
|
||||||
return new Function("util", "data", "let html = \"\";with(data){" + this.#templates[tpl]
|
return new Function("util", "data", "let html = \"\";with(data){" + (cfg.websrv.cache ? this.#templates[tpl] : this.readtpl(path.resolve(), `${tpl}.html`))
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/[\n\r]/g, "")
|
.replace(/[\n\r]/g, "")
|
||||||
.split(/{{\s*([^}]+)\s*}}/)
|
.split(/{{\s*([^}]+)\s*}}/)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import cfg from "../../../config.json";
|
import { exec } from "child_process";
|
||||||
|
import cfg from "../../inc/config.mjs";
|
||||||
import sql from "../sql.mjs";
|
import sql from "../sql.mjs";
|
||||||
import lib from "../lib.mjs";
|
import lib from "../lib.mjs";
|
||||||
|
|
||||||
|
@ -27,13 +28,25 @@ export default async bot => {
|
||||||
case "thumb":
|
case "thumb":
|
||||||
const rows = await sql.query("select id from items");
|
const rows = await sql.query("select id from items");
|
||||||
const dir = (await fs.readdir("./public/t")).filter(d => d.endsWith(".png")).map(e => +e.split(".")[0]);
|
const dir = (await fs.readdir("./public/t")).filter(d => d.endsWith(".png")).map(e => +e.split(".")[0]);
|
||||||
|
|
||||||
const tmp = [];
|
const tmp = [];
|
||||||
for(let row of rows) {
|
for(let row of rows)
|
||||||
!dir.includes(row.id) ? tmp.push(row.id) : null;
|
!dir.includes(row.id) ? tmp.push(row.id) : null;
|
||||||
}
|
|
||||||
e.reply(`${tmp.length}, ${rows.length}, ${dir.length}`);
|
e.reply(`${tmp.length}, ${rows.length}, ${dir.length}`);
|
||||||
break;
|
break;
|
||||||
|
case "cache":
|
||||||
|
cfg.websrv.cache = !cfg.websrv.cache;
|
||||||
|
return e.reply(`Cache is ${cfg.websrv.cache ? "enabled" : "disabled"}`);
|
||||||
|
break;
|
||||||
|
case "uptime":
|
||||||
|
exec('sudo systemctl status f0ck', (err, stdout) => {
|
||||||
|
if(!err)
|
||||||
|
return e.reply(stdout.split('\n')[2].trim().replace("Active: active (running)", "i'm active"));
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case "restart":
|
||||||
|
e.reply("hay hay patron, hemen!");
|
||||||
|
exec("sudo systemctl restart f0ck");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,8 @@ export default async bot => {
|
||||||
f: e => {
|
f: e => {
|
||||||
const links = e.message.match(regex)?.filter(link => !link.includes("f0ck.me")) || [];
|
const links = e.message.match(regex)?.filter(link => !link.includes("f0ck.me")) || [];
|
||||||
|
|
||||||
if(e.photo) {
|
if(e.photo)
|
||||||
links.push(e.photo);
|
links.push(e.photo);
|
||||||
}
|
|
||||||
|
|
||||||
if(links.length === 0)
|
if(links.length === 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -32,7 +31,7 @@ export default async bot => {
|
||||||
if(!e.channel.includes("f0ck") && !e.message.match(/(!|-)f0ck/i))
|
if(!e.channel.includes("f0ck") && !e.message.match(/(!|-)f0ck/i))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//e.reply(`parsing ${links.length} link${links.length > 1 ? "s" : ""}...`);
|
console.log(`parsing ${links.length} link${links.length > 1 ? "s" : ""}...`);
|
||||||
|
|
||||||
links.forEach(async link => {
|
links.forEach(async link => {
|
||||||
// check repost (link)
|
// check repost (link)
|
||||||
|
@ -43,28 +42,41 @@ export default async bot => {
|
||||||
// generate uuid
|
// generate uuid
|
||||||
const uuid = (await sql.query("select left(uuid(), 8) as uuid"))[0].uuid;
|
const uuid = (await sql.query("select left(uuid(), 8) as uuid"))[0].uuid;
|
||||||
|
|
||||||
const maxfilesize = ( getLevel(e.user).level > 50 ? cfg.main.maxfilesize * 2.5 : cfg.main.maxfilesize ) / 1024;
|
const maxfilesize = (getLevel(e.user).level > 50 ? cfg.main.maxfilesize * 2.5 : cfg.main.maxfilesize) / 1024;
|
||||||
|
|
||||||
let meta;
|
let meta;
|
||||||
// read metadata
|
// read metadata
|
||||||
try {
|
try {
|
||||||
meta = JSON.parse((await exec(`youtube-dl -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" --skip-download --dump-json "${link}"`)).stdout);
|
meta = JSON.parse((await exec(`youtube-dl -f "bestvideo[ext=mp4,filesize<${maxfilesize}k][width<2000][height<=1200]+bestaudio[ext=m4a,filesize<${maxfilesize}k]/bestvideo[width<2000][height<=1200]+bestaudio/best[width<2000][height<=1200]/best" --skip-download --dump-json "${link}"`)).stdout);
|
||||||
|
//meta = JSON.parse((await exec(`youtube-dl -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" --skip-download --dump-json "${link}"`)).stdout);
|
||||||
}
|
}
|
||||||
catch(e) {
|
catch(err) {
|
||||||
|
e.reply("666 - kein b0ck!");
|
||||||
|
console.error(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let filename = `${uuid}.${meta.ext}`;
|
let filename = `${uuid}.${meta.ext}`;
|
||||||
|
|
||||||
e.reply(`downloading ${uuid}...`);
|
//e.reply(`downloading ${uuid}...`);
|
||||||
|
e.reply(`[charging the f0cker] downloading: ${uuid}.${meta.ext}`);
|
||||||
|
|
||||||
// download data
|
// download data
|
||||||
const start = new Date();
|
const start = new Date();
|
||||||
let source;
|
let source;
|
||||||
if(meta.ext === "mp4")
|
if(meta.ext === "mp4") {
|
||||||
source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" --merge-output-format mp4 -o ./tmp/${filename}`)).stdout.trim();
|
//source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" --merge-output-format mp4 -o ./tmp/${filename}`)).stdout.trim();
|
||||||
else
|
source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k][width<2000][height<=1200]+bestaudio[ext=m4a,filesize<${maxfilesize}k]/bestvideo[width<2000][height<=1200]+bestaudio/best[width<2000][height<=1200]/best" --merge-output-format mp4 -o ./tmp/${filename}`)).stdout.trim();
|
||||||
source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" -o ./tmp/${filename}`)).stdout.trim();
|
console.log("mp4 lol");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[filesize<${maxfilesize}k][width<2000][height<=1200]+bestaudio[ext=${meta.ext},filesize<${maxfilesize}k]/bestvideo[width<2000][height<=1200]+bestaudio/best[ext=${meta.ext},width<2000][height<=1200]/best" --merge-output-format ${meta.ext} -o ./tmp/${filename}`)).stdout.trim();
|
||||||
|
source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[filesize<${maxfilesize}k][width<2000][height<=1200][ext=${meta.ext}]+bestaudio[filesize<${maxfilesize}k][ext=${meta.ext}]/best" -o ./tmp/${filename}`)).stdout.trim();
|
||||||
|
//source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k][width<2000][height<=1200]+bestaudio[ext=m4a,filesize<${maxfilesize}k]/bestvideo[width<2000][height<=1200]+bestaudio/best[width<2000][height<=1200]/best" -o ./tmp/${filename}`)).stdout.trim();
|
||||||
|
//source = (await exec(`youtube-dl "${link}" --max-filesize ${maxfilesize}k -f "bestvideo[ext=mp4,filesize<${maxfilesize}k]+bestaudio/best" -o ./tmp/${filename}`)).stdout.trim();
|
||||||
|
console.log("alles andere lol");
|
||||||
|
}
|
||||||
|
console.log(source);
|
||||||
|
|
||||||
if(source.match(/larger than/))
|
if(source.match(/larger than/))
|
||||||
return e.reply("too large lol");
|
return e.reply("too large lol");
|
||||||
|
@ -116,17 +128,27 @@ export default async bot => {
|
||||||
);
|
);
|
||||||
|
|
||||||
// generate thumbnail
|
// generate thumbnail
|
||||||
let thumb_orig = (await exec(`youtube-dlc -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --get-thumbnail "${link}"`)).stdout.trim();
|
try {
|
||||||
if(!thumb_orig.startsWith("http")) {
|
let thumb_orig = (await exec(`youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --get-thumbnail "${link}"`)).stdout.trim();
|
||||||
if(mime.startsWith("image") && mime !== "image/gif")
|
if(!thumb_orig.startsWith("http")) {
|
||||||
thumb_orig = `./public/b/${filename}`;
|
if(mime.startsWith("image") && mime !== "image/gif")
|
||||||
else if(!mime.startsWith("audio")) {
|
thumb_orig = `./public/b/${filename}`;
|
||||||
await exec(`ffmpegthumbnailer -i./public/b/${filename} -s1024 -o./tmp/${insertq.insertId}`);
|
else if(!mime.startsWith("audio")) {
|
||||||
thumb_orig = `./tmp/${insertq.insertId}`;
|
await exec(`ffmpegthumbnailer -i./public/b/${filename} -s1024 -o./tmp/${insertq.insertId}`);
|
||||||
|
thumb_orig = `./tmp/${insertq.insertId}`;
|
||||||
|
}
|
||||||
|
else if(mime.startsWith("audio")) {
|
||||||
|
await exec(`ffmpeg -i ./public/b/${filename} -update 1 -map 0:v -map 0:1 -c copy ./tmp/${insertq.insertId}.png`)
|
||||||
|
await exec(`cp ./tmp/${insertq.insertId}.png ./public/ca/${insertq.insertId}.png`)
|
||||||
|
thumb_orig = `./tmp/${insertq.insertId}.png`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
await exec(`convert "${thumb_orig}" -resize "200x200^" -gravity center -crop 128x128+0+0 +repage ./public/t/${insertq.insertId}.png`);
|
||||||
|
await fs.promises.unlink(`./tmp/${insertq.insertId}`).catch(_=>{});
|
||||||
|
} catch(err) {
|
||||||
|
e.reply("\x033>no thumb lol");
|
||||||
|
console.error(err);
|
||||||
}
|
}
|
||||||
await exec(`convert "${thumb_orig}" -resize "200x200^" -gravity center -crop 128x128+0+0 +repage ./public/t/${insertq.insertId}.png`);
|
|
||||||
await fs.promises.unlink(`./tmp/${insertq.insertId}`).catch(_=>{});
|
|
||||||
|
|
||||||
let speed = lib.calcSpeed(size, end);
|
let speed = lib.calcSpeed(size, end);
|
||||||
speed = !Number.isFinite(speed) ? "yes" : `${speed.toFixed(2)} Mbit/s`;
|
speed = !Number.isFinite(speed) ? "yes" : `${speed.toFixed(2)} Mbit/s`;
|
||||||
|
|
118
src/inc/trigger/tags.mjs
Normal file
118
src/inc/trigger/tags.mjs
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
import sql from "../sql.mjs";
|
||||||
|
import cfg from "../config.mjs";
|
||||||
|
import { getLevel } from "../admin.mjs";
|
||||||
|
|
||||||
|
const queries = {
|
||||||
|
getTags: "select tags.id, tags.tag from tags_assign left join tags on tags.id = tags_assign.tag_id where tags_assign.item_id = ?",
|
||||||
|
assignTag: "insert into tags_assign (tag_id, item_id, prefix) values (?, ?, ?)"
|
||||||
|
};
|
||||||
|
|
||||||
|
const getTags = async itemid => {
|
||||||
|
return await sql.query(queries.getTags, [ itemid ]);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async bot => {
|
||||||
|
return [{
|
||||||
|
name: "tags show",
|
||||||
|
call: /^\!tags show \d+$/i,
|
||||||
|
active: true,
|
||||||
|
level: 100,
|
||||||
|
f: async e => {
|
||||||
|
const id = +e.args[1];
|
||||||
|
if(!id)
|
||||||
|
return e.reply("lol no");
|
||||||
|
const tags = await getTags(id).map(t => t.tag);
|
||||||
|
if(tags.length === 0)
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} has no tags!`);
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} is tagged as: ${tags.join(', ')}`);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "tags add",
|
||||||
|
call: /^\!tags add \d+ .*/i,
|
||||||
|
active: true,
|
||||||
|
level: 100,
|
||||||
|
f: async e => {
|
||||||
|
const id = +e.args[1];
|
||||||
|
if(!id)
|
||||||
|
return e.reply("lol no");
|
||||||
|
|
||||||
|
const tags = (await getTags(id)).map(t => t.tag);
|
||||||
|
|
||||||
|
const newtags = (e.message.includes(",")
|
||||||
|
? e.args.splice(2).join(" ").trim().split(",")
|
||||||
|
: e.args.splice(2)).filter(t => !tags.includes(t) && t.length > 0);
|
||||||
|
|
||||||
|
if(newtags.length === 0)
|
||||||
|
return e.reply("no (new) tags provided");
|
||||||
|
|
||||||
|
await Promise.all(newtags.map(async ntag => {
|
||||||
|
try {
|
||||||
|
let tagid;
|
||||||
|
const tag_exists = (await sql.query(`select id, tag from tags where tag = ?`, [ ntag ]));
|
||||||
|
if(tag_exists.length === 0) // create new tag
|
||||||
|
tagid = (await sql.query("insert into tags (tag) values (?)", [ ntag ])).insertId;
|
||||||
|
else
|
||||||
|
tagid = tag_exists[0].id;
|
||||||
|
|
||||||
|
return await sql.query(queries.assignTag, [ tagid, id, `${e.user.prefix}${e.channel}` ]);
|
||||||
|
} catch(err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
const ntags = (await getTags(id)).map(t => t.tag);
|
||||||
|
if(ntags.length === 0)
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} has no tags!`);
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} is now tagged as: ${ntags.join(', ')}`);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "tags remove",
|
||||||
|
call: /^\!tags remove \d+ .*/i,
|
||||||
|
active: true,
|
||||||
|
level: 100,
|
||||||
|
f: async e => {
|
||||||
|
const id = +e.args[1];
|
||||||
|
if(!id)
|
||||||
|
return e.reply("lol no");
|
||||||
|
|
||||||
|
const tags = await getTags(id);
|
||||||
|
|
||||||
|
const removetags = (e.message.includes(",")
|
||||||
|
? e.args.splice(2).join(" ").trim().split(",")
|
||||||
|
: e.args.splice(2)).filter(t => t.length > 0);
|
||||||
|
|
||||||
|
if(removetags.length === 0)
|
||||||
|
return e.reply("no tags provided");
|
||||||
|
|
||||||
|
const res = await Promise.all(removetags.map(async rtag => {
|
||||||
|
const tagid = tags.filter(t => t.tag === rtag)[0]?.id ?? null;
|
||||||
|
if(!tagid || tagid?.length === 0) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
tag: rtag,
|
||||||
|
msg: "tag is not assigned"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
let q;
|
||||||
|
if(getLevel(e.user).level > 50)
|
||||||
|
q = !!(await sql.query("delete from tags_assign where tag_id = ? and item_id = ? limit 1", [ tagid, id ])).affectedRows;
|
||||||
|
else
|
||||||
|
q = !!(await sql.query("delete from tags_assign where tag_id = ? and item_id = ? and prefix = ? limit 1", [ tagid, id, `${e.user.prefix}${e.channel}` ])).affectedRows;
|
||||||
|
|
||||||
|
return {
|
||||||
|
success: q,
|
||||||
|
tag: rtag,
|
||||||
|
tagid: tagid
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
e.reply(JSON.stringify(res));
|
||||||
|
|
||||||
|
const ntags = (await getTags(id)).map(t => t.tag);
|
||||||
|
if(ntags.length === 0)
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} has no tags!`);
|
||||||
|
return e.reply(`item ${cfg.main.url}/${id} is now tagged as: ${ntags.join(', ')}`);
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
|
@ -1,40 +1,39 @@
|
||||||
{{include main/header}}
|
{{include main/header}}
|
||||||
<div class="container">
|
|
||||||
<div class="irc">
|
<div class="irc">
|
||||||
<h4>irc.n0xy.net +6697 (ssl only) #f0ck</h4>
|
<h5>About f0ck</h5>
|
||||||
<p>More information: <a href="https://n0xy.net">n0xy.net</a></p>
|
<p>f0ck is your friendly IRC shitposting bot, it's built for catching urls that are passed to it and displays the content of passed urls on a simple and accessible web gallery reachable at <a href="/">f0ck.me</a></p>
|
||||||
<div class="page-header">
|
<h5>WTF is a f0ck?</h5>
|
||||||
<h4>IRC Rules</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>
|
||||||
</div>
|
<h5>Where to f0ck?</h5>
|
||||||
<p>Constitution:</p>
|
<p>You can invite f0ck to your channel on the following supported networks by simply typing<br><code>/invite f0ck</code></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>§ 1 The dignity of the IRCd is inviolable.</li>
|
<li><a href="https://n0xy.net">n0xy.net</a></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><a href="https://www.rizon.net/">rizon.net</a></li>
|
||||||
<li>§ 3 Do not attack users in this network in any way, shape, or form.</li>
|
<li><a href="https://freenode.net/">freenode.net</a></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>
|
</ul>
|
||||||
<p>#f0ck specific don'ts:</p>
|
<p>To start f0cking the shit out of something simply add a <code>!f0ck</code> behind the url you want to f0ck, that's it</p>
|
||||||
|
<p>#f0ck specific: to have f0ck ignore a link add <code>!ignore</code> at the end <br>Example: <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">https://www.youtube.com/watch?v=dQw4w9WgXcQ</a> !ignore</p>
|
||||||
|
<p>f0ck supports a variety of websites, in fact all websites supported by <code>youtube-dl</code> are supported by f0ck aswell!</p>
|
||||||
|
<h5>f0ck Rules</h5>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Animal cruelty is forbidden and will lead to an immediate ban</li>
|
<li>You must be 18 years or older to visit or post</li>
|
||||||
<li>All kinds of terrorist shit, we dont want any of it, f0ck off k?</li>
|
<li>You shall not post animal cruelty, we like our animals alive and well, living a happy life until they are ready for our Schnitzel!</li>
|
||||||
<li>Snuff/Beastiality is not welcome here</li>
|
<li>You shall not post under <b>ANY</b> circumstances: Snuff, Beastiality, Rape, Terrorist stuff (Beheadings, First person shootings, warcrimes), Childporn, Childmodeling</li>
|
||||||
<li>pictures of you grandmas furburger also might be too hardcore for us</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<h4>What the f0ck is a f0ck?</h4>
|
<h5>f0cked up?</h5>
|
||||||
<p>A f0ck is basically giving a fuck about some internet bullshit, like stupid images, videos and so on, but also
|
<p>To have something removed in case you accidentally f0cked something that actually shouldn't be f0cked you can always contact the admins either via IRC or Email</p>
|
||||||
for great things like good music taste and shit, it's basically "a f0ck was given" and f0ck and it's users gave
|
<ul>
|
||||||
a lot of f0cks over the past years, it's not hard to finally start giving a damn f0ck about something, just
|
<li>irc.n0xy.net #f0ck</li>
|
||||||
f0ck.it dood!</p>
|
<li>admin@f0ck.me</li>
|
||||||
<h4>how the f0ck to f0ck, you ask?</h4>
|
</ul>
|
||||||
<p>f0ck will f0ck any media link posted in the channel ending with: jpg|gif|png|webm|mp3|mp4|ogg|flac</p>
|
<h5>Compatibility</h5>
|
||||||
<p>If you don't want f0ck to f0ck it put !ignore behind your link. Example:
|
<p>f0ck is developed and tested for Firefox and Chromium in their latest versions</p>
|
||||||
https://retard-journal.com/stupidshit.png !ignore</a>
|
<p>If you encounter bugs please report them so we can fix them.</p>
|
||||||
<p>f0ck will only f0ck media links with the maximum size of 40MB for cool people ??MB</p>
|
<p>Microsoft Edgy is not actively supported, but if it werks, great! Same for anything apple related.</p>
|
||||||
<h4>Alternative domains</h4>
|
<h5>Tinfoil f0ckers listen!</h5>
|
||||||
<p>f0ck onions and moons, but fockulite!</p>
|
<p>f0ck onions and moons, but fockulite!</p>
|
||||||
<p>http://fockmoonsb24iczs7odozzy5uktlzbcgp337nabrgffzxv5ihabgpvyd.onion</p>
|
<p>http://fockmoonsb24iczs7odozzy5uktlzbcgp337nabrgffzxv5ihabgpvyd.onion</p>
|
||||||
<p>http://fockulite74atso2xsxxw6q2gzqrgck572tiwvkyf5vdxictjn2vmlyd.onion</p>
|
<p>http://fockulite74atso2xsxxw6q2gzqrgck572tiwvkyf5vdxictjn2vmlyd.onion</p>
|
||||||
|
<p>f0ck is completely functional without javascript enabled, you can be the beardiest neckbeard of all, we got you m'gentleman</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{{include main/footer}}
|
{{include main/footer}}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{{include main/header}}
|
{{include main/header}}
|
||||||
<div class="container">
|
|
||||||
<div class="contact">
|
<div class="contact">
|
||||||
<p>Got a problem? We have the answer: <a href="mailto:admin@f0ck.me">admin@f0ck.me</a></p>
|
<h5>f0ck Contact</h5>
|
||||||
|
<p>Whatever it is, we might have a answer, even though it might not be the one you were looking for: <a href="mailto:admin@f0ck.me">admin@f0ck.me</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{{include main/footer}}
|
{{include main/footer}}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{{include main/header}}
|
{{include main/header}}
|
||||||
<div class="container-fluid">
|
<div class="index-container">
|
||||||
<ul id="posts">
|
<ul id="posts">
|
||||||
{{each items as item}}
|
{{each items as item}}
|
||||||
<li class="post">
|
<li>
|
||||||
<a href="/{{=item.id}}" title="{{=item.mime}}">
|
<a href="/{{if typeof filter !== "undefined"}}{{=filter}}/{{/if}}{{=item.id}}">
|
||||||
<img class="thumb" src="/t/{{=item.id}}.png" />
|
<img src="/t/{{=item.id}}.png" loading="lazy" />
|
||||||
<span class="item-mime">{{=item.mime}}</span>
|
<span>{{=item.mime}}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
|
@ -2,53 +2,61 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="next-post">
|
<div class="next-post">
|
||||||
{{if next}}
|
{{if pagination.prev}}
|
||||||
<a id="next" href="/{{=next}}">
|
<div class="arrow-next">
|
||||||
<div class="arrow-next">«</div>
|
<a id="next" href="{{=pagination.link}}{{=pagination.prev}}"></a>
|
||||||
</a>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a id="next" href="#" style="color: #ccc !important;">
|
<div class="arrow-next">
|
||||||
<div class="arrow-next">«</div>
|
<a id="next" href="#" style="color: #ccc !important;"></a>
|
||||||
</a>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="media-object">
|
<div class="media-object">
|
||||||
{{if item.mime.startsWith("video")}}
|
{{if item.mime.startsWith("video")}}
|
||||||
<div class="embed-responsive embed-responsive-16by9">
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
<video id="my-video" class="video-js embed-responsive-item" width="640" height="360" src="{{=item.dest}}"
|
<video id="my-video" class="embed-responsive-item" width="640" height="360" src="{{=item.dest}}"
|
||||||
preload="auto" autoplay controls loop data-setup="{}"></video>
|
preload="auto" autoplay controls loop></video>
|
||||||
</div>
|
</div>
|
||||||
{{elseif item.mime.startsWith("audio")}}
|
{{elseif item.mime.startsWith("audio")}}
|
||||||
<div class="embed-responsive embed-responsive-16by9">
|
<div class="embed-responsive embed-responsive-16by9" style="background: url('{{if item.coverart}}{{=item.coverart}}{{else}}/s/img/200.gif{{/if}}') no-repeat center / contain black;">
|
||||||
<audio id="my-video" class="embed-responsive-item video-js audiojs" autoplay controls loop
|
<audio id="my-video" class="embed-responsive-item" autoplay controls loop src="{{=item.dest}}" data-setup="{}" poster="{{if item.coverart}}{{=item.coverart}}{{else}}/s/img/200.gif{{/if}}" type="{{=item.mime}}"></audio>
|
||||||
src="{{=item.dest}}" data-setup="{}"
|
|
||||||
poster="{{if item.thumbnail}}{{=item.thumbnail}}{{else}}/s/200.gif{{/if}}" type="audio/mp3"></audio>
|
|
||||||
</div>
|
</div>
|
||||||
{{elseif item.mime.startsWith("image")}}
|
{{elseif item.mime.startsWith("image")}}
|
||||||
<a href="{{=item.dest}}" id="elfe" target="_blank"><img id="f0ck-image" src="{{=item.dest}}" /></a>
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<div class="embed-responsive-image" id="image-scroll">
|
||||||
|
<a href="{{=item.dest}}" id="elfe" target="_blank"><img id="f0ck-image" class="img-fluid" src="{{=item.dest}}" loading="lazy"/></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h1>404 - Not f0cked</h1>
|
<h1>404 - Not f0cked</h1>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="previous-post">
|
<div class="previous-post">
|
||||||
{{if prev}}
|
{{if pagination.next}}
|
||||||
<a id="prev" href="/{{=prev}}">
|
<div class="arrow-prev">
|
||||||
<div class="arrow-prev">»</div>
|
<a id="prev" href="{{=pagination.link}}{{=pagination.next}}"></a>
|
||||||
</a>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a id="prev" href="#" style="color: #ccc !important;">
|
<div class="arrow-prev">
|
||||||
<div class="arrow-prev">»</div>
|
<a id="prev" href="#" style="color: #ccc !important;"></a>
|
||||||
</a>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="metadata">
|
<div class="metadata">
|
||||||
<span class="badge badge-dark"><a href="/{{=item.id}}" class="id-link">{{=item.id}}</a></span>
|
<span class="badge badge-dark"><a href="/{{=item.id}}" class="id-link">{{=item.id}}</a></span>
|
||||||
<span class="badge badge-dark">{{=user.network}} / {{=user.channel}}</span>
|
<span class="badge badge-dark">{{=user.network}} / {{=user.channel}}</span>
|
||||||
<span class="badge badge-dark"><a id="post_source" href="{{=item.src.long}}" target="_blank">{{=item.src.short}}</a></span>
|
<span class="badge badge-dark image-source"><a class="post_source" title="{{=item.src.long}}" href="{{=item.src.long}}" target="_blank">{{=item.src.short}}</a></span>
|
||||||
<span class="badge badge-dark">{{=item.mime}} / {{=item.size}}</span>
|
<span class="badge badge-dark"><a href="{{=item.dest}}" target="_blank">{{=item.mime}}</a> / {{=item.size}}</span>
|
||||||
<span class="badge badge-dark"><time class="timeago" title="{{=item.timestamp}}" datetime="{{=item.timestamp}}"></time></span>
|
<span class="badge badge-dark"><time class="timeago" title="{{=item.timestamp}}" datetime="{{=item.timestamp}}">{{=item.timestamp}}</time></span>
|
||||||
<span class="badge badge-dark" id="themes"></span>
|
<span class="badge badge-dark" id="themes"></span>
|
||||||
|
<span class="badge badge-dark" id="tags">
|
||||||
|
{{if typeof item.tags !== "undefined"}}
|
||||||
|
{{each item.tags as tag}}
|
||||||
|
<span class="badge badge-{{=(tag.tag === "nsfw" ? "danger" : tag.tag === "sfw" ? "success" : "light")}} mr-2">{{=tag.tag}}</span>
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{include main/footer}}
|
{{include main/footer}}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<script src="/s/js/video.min.js"></script>
|
<script async src="/s/js/theme.js"></script>
|
||||||
<script src="/s/js/videojs.persistvolume.js"></script>
|
<script src="/s/js/v0ck.js"></script>
|
||||||
<script src="/s/js/item.js"></script>
|
<script src="/s/js/f0ck.js"></script>
|
||||||
<script src="/s/js/theme.js"></script>
|
|
||||||
<script src="/s/js/bootstrap-native.min.js"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
<!doctype f0ck>
|
<!cocktype big f0ck>
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>{{if data.title}}{{=data.title}}{{else}}f0ck!{{/if}}</title>
|
<title>{{if data.title}}{{=data.title}}{{else}}f0ck!{{/if}}</title>
|
||||||
<link rel="icon" type="image/gif" href="/s/img/favicon.gif" />
|
<link rel="icon" type="image/gif" href="/s/img/favicon.gif" />
|
||||||
<link rel="stylesheet" type="text/css" href="/s/css/video-js.min.css" />
|
<link rel="stylesheet" href="/s/css/f0ck.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" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="f0ck.me is the place where internet purists gather to celebrate content of all kinds">
|
<meta name="description" content="f0ck.me is the place where internet purists gather to celebrate content of all kinds">
|
||||||
{{if data.item}}
|
{{if data.item}}
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
{{if typeof pagination !== "undefined"}}
|
{{if typeof pagination !== "undefined"}}
|
||||||
<nav class="pagination">
|
<nav class="pagination">
|
||||||
<a href="{{=pagination.link}}{{=pagination.start}}" class="btn start{{if !pagination.prev}} disabled{{/if}}">⮜⮜</a>
|
<a href="{{=pagination.link}}{{=pagination.start}}" class="page-item-1 btn start{{if !pagination.prev}} disabled{{/if}}">«</a>
|
||||||
<a href="{{=pagination.link}}{{=pagination.prev}}" class="btn prev{{if !pagination.prev}} disabled{{/if}}">⮜</a>
|
<a href="{{=pagination.link}}{{=pagination.prev}}" class="page-item-2 btn prev{{if !pagination.prev}} disabled{{/if}}">‹</a>
|
||||||
{{each pagination.cheat as i}}
|
{{each pagination.cheat as i}}
|
||||||
{{if i == pagination.page}}
|
{{if i == pagination.page}}
|
||||||
<span class="btn disabled">{{=i}}</span>
|
<span class="btn disabled">{{=i}}</span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a href="{{=pagination.link}}{{=i}}" class="btn">{{=i}}</a>
|
<a href="{{=pagination.link}}{{=i}}" class="pagination-int-item btn">{{=i}}</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
<a href="{{=pagination.link}}{{=pagination.next}}" class="btn next{{if !pagination.next}} disabled{{/if}}">⯈</a>
|
<a href="{{=pagination.link}}{{=pagination.next}}" class="page-item-3 btn next{{if !pagination.next}} disabled{{/if}}">›</a>
|
||||||
<a href="{{=pagination.link}}{{=pagination.end}}" class="btn start{{if !pagination.next}} disabled{{/if}}">⯈⯈</a>
|
<a href="{{=pagination.link}}{{=pagination.end}}" class="page-item-4 btn start{{if !pagination.next}} disabled{{/if}}">»</a>
|
||||||
</nav>
|
</nav>
|
||||||
{{/if}}
|
{{/if}}
|
|
@ -1,27 +1,35 @@
|
||||||
<nav class="navbar navbar-expand-lg">
|
<nav class="navbar navbar-expand-lg">
|
||||||
<a class="navbar-brand" href="/">
|
<a class="navbar-brand" href="/"><span class="f0ck" width="" height="">F0CK</span></a>
|
||||||
<span id="f0ck" width="" height="">F0CK</span>
|
<div class="navigation-links">
|
||||||
</a>
|
<ul class="navbar-nav">
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
<li class="nav-item">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<a class="nav-link" href="/about"><span class="nav-link-identifier">About</span></a>
|
||||||
</button>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
<div class="collapse navbar-collapse show" id="navbarSupportedContent">
|
<a class="nav-link" href="/contact"><span class="nav-link-identifier">Contact</span></a>
|
||||||
<div class="navigation-links">
|
</li>
|
||||||
<ul class="navbar-nav ">
|
<span class="placeholder"> </span>
|
||||||
<li class="nav-item">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link" href="/random"><span class="nav-link-identifier">Random</span></a>
|
<a class="nav-link" href="#" data-toggle="dropdown">Filter{{if typeof filter !== "undefined"}} ({{=filter}}){{/if}} ▼</a>
|
||||||
</li>
|
<ul class="dropdown-menu">
|
||||||
<li class="nav-item">
|
<li><a class="dropdown-item" href="/">All</a></li>
|
||||||
<a class="nav-link" href="/about"><span class="nav-link-identifier">About</span></a>
|
<li><a class="dropdown-item" href="/audio">Audio</a></li>
|
||||||
</li>
|
<li><a class="dropdown-item" href="/video">Video</a></li>
|
||||||
<li class="nav-item">
|
<li><a class="dropdown-item" href="/image">Image</a></li>
|
||||||
<a class="nav-link" href="/contact"><span class="nav-link-identifier">Contact</span></a>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li class="nav-item">
|
||||||
</div>
|
<a id="random" class="nav-link" href="/random{{if typeof filter !== "undefined"}}/{{=filter}}{{/if}}">
|
||||||
<div class="pagination-container-fluid">
|
<span class="nav-link-identifier">Random</span>
|
||||||
{{include partials/pagination}}
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="collapse navbar-collapse show" id="navbarSupportedContent">
|
||||||
|
<div class="pagination-container-fluid">
|
||||||
|
<div class="pagination-wrapper">
|
||||||
|
{{include partials/pagination}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
Loading…
Reference in New Issue
Block a user