Initial commit

This commit is contained in:
mid
2024-06-01 17:40:11 +03:00
commit f4b0a0b531
36 changed files with 4027 additions and 0 deletions

6
static/datetimes.js Normal file
View File

@@ -0,0 +1,6 @@
var z = document.querySelectorAll(".dt")
var off = new Date().getTimezoneOffset()
for(var i = 0, m = z.length; i < m; i++) {
var t = z[i].innerText.match(/\d+/g)
z[i].innerText = new Date(Date.UTC(+t[0], +t[1] - 1, +t[2], +t[3], +t[4], +t[5])).toLocaleString()
}

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

213
static/style.css Normal file
View File

@@ -0,0 +1,213 @@
html, body {
width: 100%;
min-height: 100%;
margin: 0;
}
div.tagbox {
cursor: text;
border: 1px solid gray;
text-align: left;
user-select: contain;
padding: 0.4em;
border-radius: 3px;
}
div.tagbox::after {
content: "penis";
visibility: hidden;
}
div.tag {
display: inline-block;
border: 1px solid blue;
padding: 0.1em;
margin: 0.1em;
}
div.tag.selected {
border-width: 2px;
}
div.tag::before {
font-weight: lighter;
text-shadow: 0px 2px 3px gray;
padding-left: 0.1em;
padding-right: 0.1em;
border-right: 1px solid black;
margin-right: 0.1em;
}
div.tagbox span {
border: 0;
outline: none;
}
div.tagbox > p {
position: absolute;
left: 0.5em;
top: 0;
transform: translateY(-50%);
color: #C0C0C0;
}
div.autocomplete {
text-align: left;
border: 1px solid gray;
background-color: white;
padding: 0.4em;
}
a.searchitem > div {
position: relative;
border: 1px solid #808080;
max-width: 12.5em;
display: inline-block;
padding: 0.5em;
vertical-align: middle;
margin: 0.5em 0 0.5em 0;
}
a.searchitem img {
width: 100%;
}
a.searchitem {
text-decoration-line: none;
color: black;
}
a.searchitem p {
width: 100%;
margin: 0.3em 0 0.3em 0;
}
button {
margin-top: 1em;
}
h1, h2, h3, h4, h5, h6, p, li, span, td, label, div {
font-family: sans-serif;
}
table {
border-collapse: collapse;
}
td {
border: 1px solid black;
padding: 0.5em;
}
header {
position: absolute;
top: 1em;
width: 100%;
}
main {
margin-top: 10%;
margin-left: 10%;
width: 80%;
}
li {
margin: 0.2em 0 0.2em 0;
}
input, input:hover {
outline: none;
}
input[type='text'], input[type='number'] {
padding: 0.4em;
border: 1px solid gray;
border-radius: 3px;
font-size: 1em;
}
input::placeholder {
color: #C0C0C0;
opacity: 1;
}
ul.over18 {
margin: 1em 0 1em 0;
list-style-type: none;
padding: 0 0.4em 0 0.4em;
width: 100%;
text-align: center;
}
ul.over18 label {
cursor: pointer;
font-size: 0.9em;
}
ul.over18 > li {
width: 32%;
height: 1em;
position: relative;
display: inline-block;
border: 1px solid gray;
padding: 0.4em 0 0.4em 0;
}
ul.over18 > li:nth-child(1) {
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
ul.over18 > li:nth-child(3) {
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
ul.over18 > li > * {
position: absolute;
left: 0;
right: 0;
bottom: 50%;
transform: translateY(50%);
}
ul.over18 input:checked + label {
text-shadow: 0px 2px 3px gray;
transform: translateY(60%);
}
ul.over18 input {
opacity: 0.01;
z-index: 100;
}
div.comments {
width: 60%;
}
div.comments h5 {
margin-bottom: 0;
}
div.comments p {
margin: 0.2em 0 0.2em 0;
}
div.comments p:last-child {
margin-bottom: 0;
}
textarea.uf {
font-family: inherit;
width: 100%;
height: 8em;
}
.reportlink {
font-size: 0.5em;
text-decoration: none;
}
.report {
width: 100%;
border-collapse: separate;
border-spacing: 0 1em;
}
.report td {
border: 0;
border-top: 1px solid gray;
border-bottom: 1px solid gray;
}
.report td:first-child {
border-left: 1px solid gray;
}
.report td:last-child {
border-right: 1px solid gray;
background-color: #E0E0E0;
}
.report .content {
margin-left: 1em;
}
footer {
margin-top: 2em;
width: 100%;
text-align: center;
}

100
static/tagbox.js Normal file
View File

@@ -0,0 +1,100 @@
var acTimer;
document.getElementById(document.querySelector("div.tagbox").getAttribute("data-formid")).addEventListener("submit", function(ev) {
document.getElementById(document.querySelector("div.tagbox").getAttribute("data-formparaminputid")).value = Array.from(document.querySelectorAll("div.tagbox div.tag")).map(function(a) {return a.getAttribute("data-tagid")}).join(",")
})
document.querySelector("div.tagbox").onclick = function(ev) {
this.querySelector('span').focus()
}
document.querySelector("div.tagbox span").onkeydown = function(ev) {
if(ev.keyCode == 13) {
ev.preventDefault()
if(document.querySelector("div.tagbox span").innerText.length) {
var from = document.querySelector("div.autocomplete > div.tag.selected") || document.querySelectorAll("div.autocomplete > div.tag")[0]
if(!document.querySelector("div.tagbox div.tag[data-tagid='"+from.getAttribute("data-tagid")+"']")) {
from.classList.remove("selected")
document.querySelector("div.tagbox span").innerText = ""
document.querySelector("div.tagbox").insertBefore(from, document.querySelector("div.tagbox span"))
document.querySelector("div.tagbox").insertBefore(document.createTextNode("\n"), document.querySelector("div.tagbox span"))
var ac = document.querySelector(".autocomplete")
ac.style.visibility = "hidden"
}
} else {
document.getElementById(document.querySelector("div.tagbox").getAttribute("data-formid")).querySelector("input[type='submit']").click()
}
} else if(ev.keyCode == 40) {
ev.preventDefault()
var sel = document.querySelector("div.autocomplete > div.tag.selected")
if(sel) {
sel.classList.toggle("selected")
sel = sel.nextElementSibling
} else {
sel = document.querySelectorAll("div.autocomplete > div.tag")[0]
}
if(sel) sel.classList.toggle("selected")
} else if(ev.keyCode == 38) {
ev.preventDefault()
var sel = document.querySelector("div.autocomplete > div.tag.selected")
if(sel) {
sel.classList.toggle("selected")
sel = sel.previousElementSibling
} else {
var asdf = document.querySelectorAll("div.autocomplete > div.tag")
sel = asdf[asdf.length - 1]
}
if(sel) sel.classList.toggle("selected")
} else if(ev.keyCode == 8 && !document.querySelector("div.tagbox span").innerText.length) {
ev.preventDefault()
var asdf = document.querySelectorAll("div.tagbox div.tag")
if(asdf.length > 0) {
asdf = asdf[asdf.length - 1]
if(asdf) asdf.parentNode.removeChild(asdf)
}
}
}
document.querySelector("div.tagbox span").oninput = function(ev) {
if(document.querySelector("div.tagbox span").innerText.length) {
document.querySelector("div.tagbox > p").style.visibility = "hidden"
if(acTimer) {
clearTimeout(acTimer)
}
acTimer = setTimeout(function() {
var ajax = new XMLHttpRequest()
ajax.open("GET", "/autocomp?q=" + encodeURIComponent(document.querySelector("div.tagbox span").innerText) + (document.querySelector("div.tagbox").getAttribute("data-over18") == "true" ? "&a=" : ""), true)
ajax.onreadystatechange = function() {
if(ajax.readyState == 4 && ajax.status == 200) {
var ac = document.querySelector(".autocomplete")
ac.style.visibility = ""
while(ac.firstChild) ac.removeChild(ac.firstChild)
if(ajax.responseText == "") {
ac.innerText = "No such tags found"
} else ajax.responseText.split("\n").slice(0, -1).forEach(function(line) {
var newtag = document.createElement("div")
newtag.classList.toggle("tag")
newtag.classList.toggle("tc" + line.split(",")[2])
newtag.setAttribute("data-tagid", line.split(",")[0])
newtag.innerText = line.split(",")[1]
ac.insertBefore(newtag, null)
})
}
}
ajax.send()
}, 250)
} else {
if(!document.querySelectorAll(".tagbox > div.tag").length) document.querySelector("div.tagbox > p").style.color = ""
document.querySelector(".autocomplete").style.visibility = "hidden"
clearTimeout(acTimer)
acTimer = undefined
}
}

1
static/tagcats.css Normal file
View File

@@ -0,0 +1 @@
div.tag.tc0::before{content:"G";}div.tag.tc0:hover::before{content:"Gamemode";}div.tag.tc0{border-color:#d7168a;background-color:#ffacff;}div.tag.tc1::before{content:"T";}div.tag.tc1:hover::before{content:"Theme";}div.tag.tc1{border-color:#64f647;background-color:#faffdd;}div.tag.tc2::before{content:"S";}div.tag.tc2:hover::before{content:"Strategy";}div.tag.tc2{border-color:#c87930;background-color:#ffffc6;}div.tag.tc3::before{content:"M";}div.tag.tc3:hover::before{content:"Meta";}div.tag.tc3{border-color:#cc6690;background-color:#fffcff;}div.tag.tc4::before{content:"";}div.tag.tc4:hover::before{content:"";}div.tag.tc4{border-color:#e961b8;background-color:#fff7ff;}div.tag.tc5::before{content:"";}div.tag.tc5:hover::before{content:"";}div.tag.tc5{border-color:#3292b9;background-color:#c8ffff;}div.tag.tc6::before{content:"";}div.tag.tc6:hover::before{content:"";}div.tag.tc6{border-color:#55d128;background-color:#ebffbe;}div.tag.tc7::before{content:"";}div.tag.tc7:hover::before{content:"";}div.tag.tc7{border-color:#c4aab1;background-color:#ffffff;}div.tag.tc8::before{content:"";}div.tag.tc8:hover::before{content:"";}div.tag.tc8{border-color:#471c3e;background-color:#ddb2d4;}div.tag.tc9::before{content:"";}div.tag.tc9:hover::before{content:"";}div.tag.tc9{border-color:#8dd0f9;background-color:#ffffff;}div.tag.tc10::before{content:"";}div.tag.tc10:hover::before{content:"";}div.tag.tc10{border-color:#7a36b1;background-color:#ffccff;}div.tag.tc11::before{content:"";}div.tag.tc11:hover::before{content:"";}div.tag.tc11{border-color:#a0fdaf;background-color:#ffffff;}div.tag.tc12::before{content:"";}div.tag.tc12:hover::before{content:"";}div.tag.tc12{border-color:#5d6283;background-color:#f3f8ff;}div.tag.tc13::before{content:"";}div.tag.tc13:hover::before{content:"";}div.tag.tc13{border-color:#836e3d;background-color:#ffffd3;}div.tag.tc14::before{content:"";}div.tag.tc14:hover::before{content:"";}div.tag.tc14{border-color:#f3c553;background-color:#ffffe9;}div.tag.tc15::before{content:"";}div.tag.tc15:hover::before{content:"";}div.tag.tc15{border-color:#ea8bc2;background-color:#ffffff;}div.tag.tc16::before{content:"";}div.tag.tc16:hover::before{content:"";}div.tag.tc16{border-color:#a2be00;background-color:#ffff96;}div.tag.tc17::before{content:"";}div.tag.tc17:hover::before{content:"";}div.tag.tc17{border-color:#b7a0c5;background-color:#ffffff;}div.tag.tc18::before{content:"";}div.tag.tc18:hover::before{content:"";}div.tag.tc18{border-color:#244010;background-color:#bad6a6;}div.tag.tc19::before{content:"";}div.tag.tc19:hover::before{content:"";}div.tag.tc19{border-color:#9b624f;background-color:#fff8e5;}div.tag.tc20::before{content:"";}div.tag.tc20:hover::before{content:"";}div.tag.tc20{border-color:#042c46;background-color:#9ac2dc;}div.tag.tc21::before{content:"";}div.tag.tc21:hover::before{content:"";}div.tag.tc21{border-color:#3e2dd3;background-color:#d4c3ff;}div.tag.tc22::before{content:"";}div.tag.tc22:hover::before{content:"";}div.tag.tc22{border-color:#23219b;background-color:#b9b7ff;}div.tag.tc23::before{content:"";}div.tag.tc23:hover::before{content:"";}div.tag.tc23{border-color:#cdde87;background-color:#ffffff;}div.tag.tc24::before{content:"";}div.tag.tc24:hover::before{content:"";}div.tag.tc24{border-color:#281c1e;background-color:#beb2b4;}div.tag.tc25::before{content:"";}div.tag.tc25:hover::before{content:"";}div.tag.tc25{border-color:#66a44a;background-color:#fcffe0;}div.tag.tc26::before{content:"";}div.tag.tc26:hover::before{content:"";}div.tag.tc26{border-color:#2139f2;background-color:#b7cfff;}div.tag.tc27::before{content:"";}div.tag.tc27:hover::before{content:"";}div.tag.tc27{border-color:#1bdae4;background-color:#b1ffff;}div.tag.tc28::before{content:"";}div.tag.tc28:hover::before{content:"";}div.tag.tc28{border-color:#ffb984;background-color:#ffffff;}div.tag.tc29::before{content:"";}div.tag.tc29:hover::before{content:"";}div.tag.tc29{border-color:#37dfaf;background-color:#cdffff;}div.tag.tc30::before{content:"";}div.tag.tc30:hover::before{content:"";}div.tag.tc30{border-color:#834f89;background-color:#ffe5ff;}div.tag.tc31::before{content:"";}div.tag.tc31:hover::before{content:"";}div.tag.tc31{border-color:#d6d00f;background-color:#ffffa5;}