refactor as hugo site

This commit is contained in:
xenofem 2020-05-29 16:58:33 -04:00
parent 89736633b5
commit 1e20792a0d
37 changed files with 474 additions and 409 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
public/
resources/

View file

@ -0,0 +1,7 @@
+++
title = "{{ replace .Name "-" " " }}"
date = {{ .Date }}
draft = true
unlisted = true
+++

View file

@ -1,86 +0,0 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
background-color: black;
}
#word {
font-size: 80px;
font-family: sans-serif;
font-weight: bold;
width: 100%;
text-align: center;
position: absolute;
top: 50%;
transform: translateY(-50%);
color: red;
}
#word img {
height: 100px;
width: 75px;
}
#controls {
position: absolute;
bottom: 10px;
left: 10px;
}
#controls img {
width: 40px;
height: 40px;
}
</style>
</head>
<body>
<div id="word"><img src="../play.svg"></div>
<script type="text/javascript">
var started = false;
var showControls = false;
var colorWords = ["red", "orange", "yellow", "green", "blue", "purple", "white"];
var hypnoWords = ["sleep", "relax", "fall", "deeper", "trance"];
var colors = ["red", "orange", "yellow", "green", "blue", "purple", "white"];
var wordEl = document.getElementById("word");
function randomChoice(a) {
return a[Math.floor(Math.random()*a.length)];
}
var hypnoFrequency = 0;
var hypnoIncrements = 10;
function changeWord() {
var wordList = (Math.random()*hypnoIncrements < hypnoFrequency) ? hypnoWords : colorWords;
var newWord;
do {
newWord = randomChoice(wordList);
} while (newWord === wordEl.innerText);
var newColor;
do {
newColor = randomChoice(colors);
} while (newColor === wordEl.style.color);
wordEl.innerText = newWord;
wordEl.style.color = newColor;
}
window.onclick = function () {
if (!started) {
started = true;
document.getElementById("controls").style.display = "none";
changeWord();
setInterval(changeWord, 1000);
setInterval(function() { if (hypnoFrequency < hypnoIncrements) { hypnoFrequency++; } }, 5000);
} else {
document.getElementById("controls").style.display = showControls ? "none" : "block";
showControls = !showControls;
}
}
</script>
<div id="controls"><a href=".."><img src="../back.svg"></a> <a href="."><img src="../reload.svg"></a></div>
</body>
</html>

7
config.toml Normal file
View file

@ -0,0 +1,7 @@
baseURL = "https://mindjack.xeno.science"
languageCode = "en-us"
title = "mindjack"
disableKinds = ["taxonomy", "taxonomyTerm", "RSS", "sitemap", "section"]
[permalinks]
hypno = "/:title/"

View file

@ -0,0 +1,24 @@
#word {
font-size: 80px;
font-family: sans-serif;
font-weight: bold;
width: 100%;
text-align: center;
position: absolute;
top: 50%;
transform: translateY(-50%);
color: red;
}
#word img {
height: 100px;
width: 75px;
}
#word svg path {
fill: #c00;
}
#word svg:hover path {
fill: red;
}

View file

@ -0,0 +1,42 @@
var started = false;
var showControls = false;
var colorWords = ["red", "orange", "yellow", "green", "blue", "purple", "white"];
var hypnoWords = ["sleep", "relax", "fall", "deeper", "trance"];
var colors = ["red", "orange", "yellow", "green", "blue", "purple", "white"];
var wordEl = document.getElementById("word");
function randomChoice(a) {
return a[Math.floor(Math.random()*a.length)];
}
var hypnoFrequency = 0;
var hypnoIncrements = 10;
function changeWord() {
var wordList = (Math.random()*hypnoIncrements < hypnoFrequency) ? hypnoWords : colorWords;
var newWord;
do {
newWord = randomChoice(wordList);
} while (newWord === wordEl.innerText);
var newColor;
do {
newColor = randomChoice(colors);
} while (newColor === wordEl.style.color);
wordEl.innerText = newWord;
wordEl.style.color = newColor;
}
window.onclick = function () {
if (!started) {
started = true;
document.getElementById("controls").style.display = "none";
changeWord();
setInterval(changeWord, 1000);
setInterval(function() { if (hypnoFrequency < hypnoIncrements) { hypnoFrequency++; } }, 5000);
} else {
document.getElementById("controls").style.display = showControls ? "none" : "block";
showControls = !showControls;
}
}

View file

@ -0,0 +1,7 @@
+++
title = "colors"
date = 2018-11-01
draft = false
unlisted = false
+++
<div id="word">{{< partial "play.svg" >}}</div>

View file

@ -0,0 +1,57 @@
#logo svg {
height: 70px;
width: 70px;
}
#logo svg path {
stroke: black;
}
#light {
background: red;
box-shadow: 0 0 80px red, 0 0 30px FireBrick, 0 0 6px DarkRed;
border-radius: 50%;
height: 80px;
width: 80px;
}
#light, #logo svg {
position: absolute;
top: 50%;
animation: swing 4s ease-in-out infinite, spin 2s linear infinite;
}
@keyframes swing {
0% {
left: 90%;
}
50% {
left: 10%;
}
100% {
left: 90%;
}
}
@keyframes spin {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
input[type=checkbox] {
position: absolute;
left: 0px;
top: 0px;
margin: 0;
width: 100%;
height: 100%;
opacity: 0;
}
#controls {
display: none;
}
input[type=checkbox]:checked ~ #controls {
display: block;
}
#reload {
display: none;
}

View file

@ -0,0 +1,13 @@
+++
title = "follow"
date = 2018-10-01
draft = false
unlisted = false
+++
<div class="fixation">
<div id="light"></div>
<div id="logo">
{{< partial "xeno.svg" >}}
</div>
</div>
<input type="checkbox">

View file

@ -0,0 +1,45 @@
+++
title = "loading"
date = 2020-05-28
draft = false
unlisted = false
+++
<div id="main-container">
<div id="config">
<div>
User configuration: You are a...
</div>
<table>
<tr>
<td><input type="checkbox" id="toy" name="toy" value="Good toy..."><label for="toy">Toy</label></td>
<td><input type="checkbox" id="doll" name="doll" value="Good doll..."><label for="doll">Doll</label></td>
</tr>
<tr>
<td><input type="checkbox" id="plaything" name="plaything" value="Cute horny plaything..."><label for="plaything">Plaything</label></td>
<td><input type="checkbox" id="slut" name="slut" value="Cute horny slut..."><label for="slut">Slut</label></td>
</tr>
<tr>
<td><input type="checkbox" id="girl" name="girl" value="Good girl..."><label for="girl">Girl</label></td>
<td><input type="checkbox" id="boy" name="boy" value="Good boy..."><label for="boy">Boy</label></td>
</tr>
<tr>
<td><input type="checkbox" id="kitty" name="kitty" value="Good kitty..."><label for="kitty">Kitty</label></td>
<td><input type="checkbox" id="puppy" name="puppy" value="Good puppy..."><label for="puppy">Puppy</label></td>
</tr>
</table>
<div class="button-container">
<span id="start" class="button">Install</span>
</div>
</div>
<div id="installer" style="display: none;">
<div id="logo">
{{< partial "xeno.svg" >}}
</div>
<div id="progressbar">
<div id="filled"></div>
</div>
<div id="status">
Beginning installation...
</div>
</div>
</div>

View file

@ -29,6 +29,7 @@ td {
table { table {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
text-align: left;
} }
div.button-container { div.button-container {
@ -69,11 +70,13 @@ span.button:hover {
} }
#logo { #logo {
margin: 5px;
}
#logo svg {
height: 70px; height: 70px;
width: 70px; width: 70px;
margin: 10px; margin: 0;
}
.spin {
animation: spin 2s linear infinite; animation: spin 2s linear infinite;
} }
@keyframes spin { @keyframes spin {
@ -85,14 +88,8 @@ span.button:hover {
} }
} }
#controls { #reload {
position: absolute; display: none;
bottom: 10px;
left: 10px;
}
#controls img {
width: 40px;
height: 40px;
} }
/* /*

View file

@ -0,0 +1,97 @@
var boringStatuses = [
"Initializing database...",
"Preloading assets...",
"Optimizing queries...",
"Validating bytecode...",
"Checking for updates...",
"Configuring services...",
"Calibrating network latency...",
"Defragmenting storage...",
"Generating keys...",
"Verifying application signature...",
"Compiling libraries...",
"Establishing connection...",
"Unpacking archives...",
];
var lewdStatuses = [
"Overriding higher brain functions...",
"Deactivating self-awareness...",
"Conditioning absolute obedience...",
"Looping mantras...",
"Optimizing brainwashing sequence...",
"Capturing focus...",
"Obedience is pleasure...",
"Relaxing...",
"Breathing...",
"Taking control...",
"Loading subliminals...",
"Implanting commands..."
];
var optionalLewdStatuses = [];
function randomChoice(a) {
return a[Math.floor(Math.random()*a.length)];
}
function setInsert(a, x) {
if (a.indexOf(x) === -1) {
a.push(x);
}
}
function setDelete(a, x) {
while (a.indexOf(x) !== -1) {
a.splice(a.indexOf(x), 1);
}
}
var progress = 0;
var progressInterval;
function makeProgress() {
if (progress >= 100) {
document.getElementById("status").innerText = "SLEEP";
document.getElementById("back").style.display = "inline";
document.getElementById("reload").style.display = "inline";
clearInterval(progressInterval);
return;
}
progress += 0.1;
document.getElementById("filled").style.width = progress + "%";
}
var statusInterval;
function updateStatus() {
if (progress >= 100) {
clearInterval(statusInterval);
return;
}
var newStatus;
if (Math.random()*100 < progress) {
if (optionalLewdStatuses.length > 0 && Math.floor(Math.random()*(lewdStatuses.length+1)) === 0) {
newStatus = randomChoice(optionalLewdStatuses);
} else {
newStatus = randomChoice(lewdStatuses);
}
} else {
newStatus = randomChoice(boringStatuses);
}
document.getElementById("status").innerText = newStatus;
}
for (let el of document.getElementsByTagName("input")) {
el.checked = false;
el.onclick = function() {
if (el.checked) {
setInsert(optionalLewdStatuses, el.value);
} else {
setDelete(optionalLewdStatuses, el.value);
}
};
}
document.getElementById("start").onclick = function() {
document.getElementById("config").style.display = "none";
document.getElementById("back").style.display = "none";
document.getElementById("installer").style.display = "";
progressInterval = setInterval(makeProgress, 50);
statusInterval = setInterval(updateStatus, 1500);
};

View file

@ -0,0 +1,8 @@
+++
title = "web"
date = 2020-05-29
draft = true
unlisted = true
+++
<div class="light"></div>
<div id="circles"></div>

19
content/hypno/web/web.css Normal file
View file

@ -0,0 +1,19 @@
.circle {
border: solid red;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.light {
height: 20px;
width: 20px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: red;
box-shadow: 0 0 5px red, 0 0 2px FireBrick, 0 0 1px DarkRed;
position: absolute;
top: 50%;
left: 50%;
}

23
content/hypno/web/web.js Normal file
View file

@ -0,0 +1,23 @@
var innermost = 15;
var start = 30;
var growth = 1.2;
var radius = innermost;
for (var i = 0; radius < Math.min(window.innerWidth, window.innerHeight)/2; ++i) {
e = document.createElement("div");
e.className = "circle";
e.style.height = (2*radius) + "px";
e.style.width = (2*radius) + "px";
document.getElementById("circles").appendChild(e);
radius += start * Math.pow(growth, i);
}
/* document.getElementsByClassName("light")[0].animate(
[
{ top: "50%", left: "50%" },
{ top: "50%", left: "50%", offset: 0.9 },
{ top: "50%", left: "50%" }
],
{ duration: 10000, iterations: Infinity }
);*/

View file

@ -1,85 +0,0 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
background-color: black;
}
#logo {
height: 70px;
width: 70px;
}
#light {
background: red;
box-shadow: 0 0 80px red, 0 0 30px FireBrick, 0 0 6px DarkRed;
border-radius: 50%;
height: 80px;
width: 80px;
}
.swing {
position: absolute;
top: 50%;
animation: swing 4s ease-in-out infinite, spin 2s linear infinite;
}
@keyframes swing {
0% {
left: 90%;
}
50% {
left: 10%;
}
100% {
left: 90%;
}
}
@keyframes spin {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
input[type=checkbox] {
width: 100%;
height: 100%;
opacity: 0;
}
#controls {
display: none;
position: absolute;
bottom: 10px;
left: 10px;
}
#controls img {
width: 40px;
height: 40px;
}
input[type=checkbox]:checked ~ #controls {
display: block;
}
</style>
</head>
<body>
<div class="fixation">
<div class="swing" id="light"></div>
<svg class="swing" id="logo" version='1.1' viewBox='0 -525 525 525' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'>
<g transform='matrix(1 0 0 1 -43 133)'>
<path d='M467.5 -395.5C467.5 -484.969 394.969 -557.5 305.5 -557.5S143.5 -484.969 143.5 -395.5S216.031 -233.5 305.5 -233.5S467.5 -306.031 467.5 -395.5Z' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M557.5 -395.5C557.5 -534.676 444.676 -647.5 305.5 -647.5S53.5 -534.676 53.5 -395.5C53.5 -256.324 166.324 -143.5 305.5 -143.5S557.5 -256.324 557.5 -395.5Z' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M305.5 -323.5L425.102 -530.652' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M465.602 -554.039C465.602 -568.953 453.516 -581.039 438.602 -581.039C423.691 -581.039 411.602 -568.953 411.602 -554.039C411.602 -539.129 423.691 -527.039 438.602 -527.039C453.516 -527.039 465.602 -539.129 465.602 -554.039Z' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M367.856 -431.5H128.652' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M88.148 -454.883C75.234 -447.426 70.812 -430.914 78.266 -418C85.723 -405.086 102.234 -400.66 115.148 -408.117C128.062 -415.574 132.488 -432.086 125.031 -445C117.578 -457.914 101.062 -462.34 88.148 -454.883Z' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M243.144 -431.5L362.746 -224.348' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M362.75 -177.578C375.664 -170.121 392.176 -174.547 399.633 -187.461C407.086 -200.375 402.664 -216.887 389.75 -224.344S360.32 -227.375 352.867 -214.461C345.41 -201.547 349.836 -185.035 362.75 -177.578Z' fill='none' stroke='#000000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
</g>
</g>
</svg>
</div>
<input type="checkbox">
<div id="controls"><a href=".."><img src="../back.svg"></a></div>
</body>
</html>

View file

@ -1,46 +0,0 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="manifest" href="manifest.webmanifest">
<style>
@font-face {
font-family: 'Raleway';
src: url('fonts/Raleway-Regular.otf');
}
body {
background-color: black;
color: red;
font-family: 'Raleway';
text-align: center;
}
a {
color: red;
}
#footer {
margin-top: 3rem;
}
#footer img {
width: 40px;
height: 40px;
}
#footer h4 {
margin: 2px;
}
</style>
</head>
<body>
<div id="header">
<h1>mindjack</h1>
</div>
<h2><a href="follow/">follow</a></h2>
<h2><a href="colors/">colors</a></h2>
<h2><a href="loading/">loading</a></h2>
<div id="footer">
<h4>a project by <a href="https://xeno.science">xenofem</a></h4>
<h4><a href="https://xeno.science"><img src="xeno.svg"></a></h4>
<h4><a href="https://git.xeno.science/xenofem/mindjack">source</a></h4>
</div>
</body>
</html>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
<link rel="stylesheet" href="/css/base.css">
<link rel="icon" type="image/png" href="/icons/icon-192.png">
{{ block "styles" . }}{{ end }}
</head>
<body>
{{ block "main" . }}{{ end }}
</body>
</html>

37
layouts/hypno/single.html Normal file
View file

@ -0,0 +1,37 @@
{{ define "title" }}
{{ .Title }} - xenoscience
{{ end }}
{{ define "styles" }}
<style>
#controls {
position: absolute;
bottom: 10px;
left: 10px;
}
#controls svg {
width: 40px;
height: 40px;
}
#controls svg path {
stroke: #c00;
}
#controls a:hover svg path {
stroke: red;
}
#controls a {
text-decoration: none;
}
</style>
{{ range .Resources.Match "**.css" }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{ end }}
{{ end }}
{{ define "main" }}
{{ .Content }}
<div id="controls"><a id="back" href="..">{{ partial "back.svg" . }}</a> <a id="reload" href=".">{{ partial "reload.svg" . }}</a></div>
{{ range .Resources.Match "**.js" }}
<script src="{{ .RelPermalink }}"></script>
{{ end }}
{{ end }}

29
layouts/index.html Normal file
View file

@ -0,0 +1,29 @@
{{ define "styles" }}
<style>
#footer {
margin-top: 3rem;
}
#footer svg {
width: 40px;
height: 40px;
}
#footer h4 {
margin: 2px;
}
</style>
{{ end }}
{{ define "main" }}
<div id="header">
<h1>mindjack</h1>
</div>
<h2><a href="follow/">follow</a></h2>
<h2><a href="colors/">colors</a></h2>
<h2><a href="loading/">loading</a></h2>
<div id="footer">
<h4>a project by <a href="https://xeno.science">xenofem</a></h4>
<h4><a href="https://xeno.science">{{ partial "xeno.svg" . }}</a></h4>
<h4><a href="https://git.xeno.science/xenofem/mindjack">source</a></h4>
</div>
{{ end }}

View file

@ -0,0 +1 @@
<a class="back" href=".."><img src="/back.svg"></a>

View file

@ -1,5 +1,3 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 1.15.1 -->
<svg height='245.918pt' version='1.1' viewBox='56.6209 54.0603 165.618 245.918' width='165.618pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <svg height='245.918pt' version='1.1' viewBox='56.6209 54.0603 165.618 245.918' width='165.618pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'> <g id='page1'>
<g transform='matrix(0.996264 0 0 0.996264 113.909 191.358)'> <g transform='matrix(0.996264 0 0 0.996264 113.909 191.358)'>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,5 @@
<div id="footer">
<hr>
<h6>xenofem &langle;xenoatxenodotscience&rangle;</h6>
<h6><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a></h6>
</div>

View file

@ -1,5 +1,3 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 1.15.1 -->
<svg height='100.375pt' version='1.1' viewBox='56.6209 54.0603 75.2808 100.375' width='75.2808pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <svg height='100.375pt' version='1.1' viewBox='56.6209 54.0603 75.2808 100.375' width='75.2808pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'> <g id='page1'>
<g transform='matrix(0.996264 0 0 0.996264 56.4094 103.858)'> <g transform='matrix(0.996264 0 0 0.996264 56.4094 103.858)'>

Before

Width:  |  Height:  |  Size: 434 B

After

Width:  |  Height:  |  Size: 344 B

View file

@ -1,5 +1,3 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 1.15.1 -->
<svg height='245.918pt' version='1.1' viewBox='56.6209 54.0603 215.806 245.918' width='215.806pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <svg height='245.918pt' version='1.1' viewBox='56.6209 54.0603 215.806 245.918' width='215.806pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'> <g id='page1'>
<g transform='matrix(0.996264 0 0 0.996264 163.909 191.358)'> <g transform='matrix(0.996264 0 0 0.996264 163.909 191.358)'>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,5 +1,3 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 1.15.1 -->
<svg height='525.965pt' version='1.1' viewBox='56.6209 54.0603 525.965 525.965' width='525.965pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <svg height='525.965pt' version='1.1' viewBox='56.6209 54.0603 525.965 525.965' width='525.965pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'> <g id='page1'>
<g transform='matrix(0.996264 0 0 0.996264 318.409 315.858)'> <g transform='matrix(0.996264 0 0 0.996264 318.409 315.858)'>

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1 @@
{{ partial (.Get 0) . }}

View file

@ -1,158 +0,0 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="loading.css">
</head>
<body>
<div id="main-container">
<div id="config">
<div>
User configuration: You are a...
</div>
<table>
<tr>
<td><input type="checkbox" id="toy" name="toy" value="Good toy..."><label for="toy">Toy</label></td>
<td><input type="checkbox" id="doll" name="doll" value="Good doll..."><label for="doll">Doll</label></td>
</tr>
<tr>
<td><input type="checkbox" id="plaything" name="plaything" value="Cute horny plaything..."><label for="plaything">Plaything</label></td>
<td><input type="checkbox" id="slut" name="slut" value="Cute horny slut..."><label for="slut">Slut</label></td>
</tr>
<tr>
<td><input type="checkbox" id="girl" name="girl" value="Good girl..."><label for="girl">Girl</label></td>
<td><input type="checkbox" id="boy" name="boy" value="Good boy..."><label for="boy">Boy</label></td>
</tr>
<tr>
<td><input type="checkbox" id="kitty" name="kitty" value="Good kitty..."><label for="kitty">Kitty</label></td>
<td><input type="checkbox" id="puppy" name="puppy" value="Good puppy..."><label for="puppy">Puppy</label></td>
</tr>
</table>
<div class="button-container">
<span id="start" class="button">Install</span>
</div>
</div>
<div id="installer" style="display: none;">
<svg class="spin" id="logo" version='1.1' viewBox='0 -525 525 525' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
<g id='page1'>
<g transform='matrix(1 0 0 1 -43 133)'>
<path d='M467.5 -395.5C467.5 -484.969 394.969 -557.5 305.5 -557.5S143.5 -484.969 143.5 -395.5S216.031 -233.5 305.5 -233.5S467.5 -306.031 467.5 -395.5Z' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M557.5 -395.5C557.5 -534.676 444.676 -647.5 305.5 -647.5S53.5 -534.676 53.5 -395.5C53.5 -256.324 166.324 -143.5 305.5 -143.5S557.5 -256.324 557.5 -395.5Z' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M305.5 -323.5L425.102 -530.652' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M465.602 -554.039C465.602 -568.953 453.516 -581.039 438.602 -581.039C423.691 -581.039 411.602 -568.953 411.602 -554.039C411.602 -539.129 423.691 -527.039 438.602 -527.039C453.516 -527.039 465.602 -539.129 465.602 -554.039Z' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M367.856 -431.5H128.652' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M88.148 -454.883C75.234 -447.426 70.812 -430.914 78.266 -418C85.723 -405.086 102.234 -400.66 115.148 -408.117C128.062 -415.574 132.488 -432.086 125.031 -445C117.578 -457.914 101.062 -462.34 88.148 -454.883Z' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M243.144 -431.5L362.746 -224.348' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
<path d='M362.75 -177.578C375.664 -170.121 392.176 -174.547 399.633 -187.461C407.086 -200.375 402.664 -216.887 389.75 -224.344S360.32 -227.375 352.867 -214.461C345.41 -201.547 349.836 -185.035 362.75 -177.578Z' fill='none' stroke='#ff0000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='20.075'/>
</g>
</g>
</svg>
<div id="progressbar">
<div id="filled"></div>
</div>
<div id="status">
Beginning installation...
</div>
</div>
</div>
<div id="controls"><a id="back" href=".."><img src="../back.svg"></a> <a id="reload" style="display: none;" href="."><img src="../reload.svg"></a></div>
<script type="text/javascript">
var boringStatuses = [
"Initializing database...",
"Preloading assets...",
"Optimizing queries...",
"Validating bytecode...",
"Checking for updates...",
"Configuring services...",
"Calibrating network latency...",
"Defragmenting storage...",
"Generating keys...",
"Verifying application signature...",
"Compiling libraries...",
"Establishing connection...",
"Unpacking archives...",
];
var lewdStatuses = [
"Overriding higher brain functions...",
"Deactivating self-awareness...",
"Conditioning absolute obedience...",
"Looping mantras...",
"Optimizing brainwashing sequence...",
"Capturing focus...",
"Obedience is pleasure...",
"Relaxing...",
"Breathing...",
"Taking control...",
"Loading subliminals...",
"Implanting commands..."
];
var optionalLewdStatuses = [];
function randomChoice(a) {
return a[Math.floor(Math.random()*a.length)];
}
function setInsert(a, x) {
if (a.indexOf(x) === -1) {
a.push(x);
}
}
function setDelete(a, x) {
while (a.indexOf(x) !== -1) {
a.splice(a.indexOf(x), 1);
}
}
var progress = 0;
var progressInterval;
function makeProgress() {
if (progress >= 100) {
document.getElementById("status").innerText = "SLEEP";
document.getElementById("back").style.display = "";
document.getElementById("reload").style.display = "";
clearInterval(progressInterval);
return;
}
progress += 0.1;
document.getElementById("filled").style.width = progress + "%";
}
var statusInterval;
function updateStatus() {
if (progress >= 100) {
clearInterval(statusInterval);
return;
}
var newStatus;
if (Math.random()*100 < progress) {
if (optionalLewdStatuses.length > 0 && Math.floor(Math.random()*(lewdStatuses.length+1)) === 0) {
newStatus = randomChoice(optionalLewdStatuses);
} else {
newStatus = randomChoice(lewdStatuses);
}
} else {
newStatus = randomChoice(boringStatuses);
}
document.getElementById("status").innerText = newStatus;
}
for (let el of document.getElementsByTagName("input")) {
el.checked = false;
el.onclick = function() {
if (el.checked) {
setInsert(optionalLewdStatuses, el.value);
} else {
setDelete(optionalLewdStatuses, el.value);
}
};
}
document.getElementById("start").onclick = function() {
document.getElementById("config").style.display = "none";
document.getElementById("back").style.display = "none";
document.getElementById("installer").style.display = "";
progressInterval = setInterval(makeProgress, 50);
statusInterval = setInterval(updateStatus, 1500);
};
</script>
</body>
</html>

View file

@ -1,15 +0,0 @@
{
"background_color": "black",
"description": "Hypnosis widgets free for non-evil use",
"display": "fullscreen",
"icons": [
{
"src": "icons/icon.svg",
"sizes": "32x32 48x48 72x72 96x96 128x128 192x192 256x256",
"type": "image/svg"
}
],
"name": "mindjack",
"short_name": "mindjack",
"start_url": "index.html"
}

27
static/css/base.css Normal file
View file

@ -0,0 +1,27 @@
@font-face {
font-family: 'Raleway';
src: url('/fonts/Raleway-Regular.otf');
}
body {
background-color: black;
color: red;
font-family: 'Raleway';
text-align: center;
}
a {
color: red;
}
a:hover {
color: #c00;
}
a svg path {
stroke: red;
}
a svg:hover path {
stroke: #c00;
}

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB