+
0 then %} style="visibility:hidden;"{% end %}>Enter tags...
{% for _, tag in pairs(tags) do %}
{{ Escapes.htmlescape(tag.name) }}
@@ -175,15 +175,28 @@
+
+
@@ -348,4 +440,4 @@
{% end %}
{% end %}
-{# base.inc
\ No newline at end of file
+{# base.inc
diff --git a/pegasus/request.lua b/pegasus/request.lua
index aba78db..ff81637 100644
--- a/pegasus/request.lua
+++ b/pegasus/request.lua
@@ -153,7 +153,15 @@ function Request:parseMultipartFormData(data)
}
end
else
- output[name] = itemdata
+ if name:sub(#name - 1) == "[]" then
+ if output[name] then
+ table.insert(output[name], itemdata)
+ else
+ output[name] = {itemdata}
+ end
+ else
+ output[name] = itemdata
+ end
end
end
end
diff --git a/static/style.css b/static/style.css
index 44d3196..0845255 100644
--- a/static/style.css
+++ b/static/style.css
@@ -11,6 +11,7 @@ div.tagbox {
user-select: contain;
padding: 0.4em;
border-radius: 3px;
+ box-sizing: border-box;
}
div.tagbox::after {
content: "penis";
@@ -113,6 +114,7 @@ input[type='text'], input[type='number'] {
border: 1px solid gray;
border-radius: 3px;
font-size: 1em;
+ box-sizing: border-box;
}
input::placeholder {
color: #C0C0C0;
@@ -125,6 +127,7 @@ ul.over18 {
padding: 0 0.4em 0 0.4em;
width: 100%;
text-align: center;
+ box-sizing: border-box;
}
ul.over18 label {
cursor: pointer;
@@ -210,4 +213,27 @@ footer {
margin-top: 2em;
width: 100%;
text-align: center;
-}
\ No newline at end of file
+}
+
+div.tag.tcNew::before {
+ content: "New";
+}
+
+div#newtagsform {
+ position: fixed;
+ width: 50vw;
+ height: 50vh;
+ top: 25vh;
+ left: 25vw;
+ background: white;
+ border: 1px solid black;
+ padding: 1em;
+}
+
+div#newtagsform select {
+ border: 0;
+}
+
+.hidden {
+ visibility: hidden;
+}
diff --git a/static/tagbox.js b/static/tagbox.js
index ec9e4c7..5b6db09 100644
--- a/static/tagbox.js
+++ b/static/tagbox.js
@@ -1,13 +1,28 @@
+function createtag(name, tc, tagid) {
+ var newtag = document.createElement("div")
+ newtag.classList.toggle("tag")
+ newtag.classList.toggle("tc" + (tc || "New"))
+ if(tagid) {
+ newtag.setAttribute("data-tagid", tagid)
+ }
+ newtag.innerText = name
+ return newtag
+}
+
var acTimer;
-document.getElementById(document.querySelector("div.tagbox").getAttribute("data-formid")).addEventListener("submit", function(ev) {
+function tagbox_updateformdata() {
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.getElementById(document.querySelector("div.tagbox").getAttribute("data-formid")).addEventListener("submit", tagbox_updateformdata)
document.querySelector("div.tagbox").onclick = function(ev) {
this.querySelector('span').focus()
}
+var UnknownTagsMode = document.querySelector("div.tagbox").getAttribute("data-unknowntags") !== null
+
document.querySelector("div.tagbox span").onkeydown = function(ev) {
if(ev.keyCode == 13) {
ev.preventDefault()
@@ -15,16 +30,18 @@ document.querySelector("div.tagbox span").onkeydown = function(ev) {
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"
+ if(from) {
+ if(!document.querySelector("div.tagbox div.tag[data-tagid='"+from.getAttribute("data-tagid")+"']")) {
+ from.classList.remove("selected")
+
+ document.querySelector("div.tagbox").insertBefore(from, document.querySelector("div.tagbox span"))
+ document.querySelector("div.tagbox").insertBefore(document.createTextNode("\n"), document.querySelector("div.tagbox span"))
+ }
}
+
+ document.querySelector("div.tagbox span").innerText = ""
+ var ac = document.querySelector(".autocomplete")
+ ac.style.visibility = "hidden"
} else {
document.getElementById(document.querySelector("div.tagbox").getAttribute("data-formid")).querySelector("input[type='submit']").click()
}
@@ -75,16 +92,17 @@ document.querySelector("div.tagbox span").oninput = function(ev) {
var ac = document.querySelector(".autocomplete")
ac.style.visibility = ""
while(ac.firstChild) ac.removeChild(ac.firstChild)
- if(ajax.responseText == "") {
+ if(!UnknownTagsMode && 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)
- })
+ } else {
+ ajax.responseText.split("\n").slice(0, -1).forEach(function(line) {
+ ac.insertBefore(createtag(line.split(",")[1], line.split(",")[2], line.split(",")[0]), null)
+ })
+
+ if(UnknownTagsMode) {
+ ac.insertBefore(createtag(document.querySelector("div.tagbox span").innerText, null, null), null);
+ }
+ }
}
}
ajax.send()
@@ -97,4 +115,4 @@ document.querySelector("div.tagbox span").oninput = function(ev) {
clearTimeout(acTimer)
acTimer = undefined
}
-}
\ No newline at end of file
+}