diff --git a/code/datums/helper_datums/input.dm b/code/datums/helper_datums/input.dm
index 19205a4ab62..d0676984520 100644
--- a/code/datums/helper_datums/input.dm
+++ b/code/datums/helper_datums/input.dm
@@ -100,15 +100,20 @@
height = 400
immediate_submit = TRUE
+/datum/async_input/ranked/New()
+ ..()
+ popup.add_script("rankedInput.js", 'html/browser/rankedInput.js')
+ popup.add_head_content("
Drag and drop or use the buttons to reorder")
+
/datum/async_input/ranked/render_choices()
var/dat = ""
- dat += "
"
+ dat += ""
for(var/i = 1, i <= choices.len, i++)
var/choice = choices[i]
dat += ""
dat += "| [button("+", i != 1 ? "upvote=[i]" : "", , i == 1)] | "
dat += "[button("-", i != choices.len ? "downvote=[i]" : "", , i == choices.len)] | "
- dat += "[i]. [choice] | "
+ dat += "[i]. [choice] | "
dat += "
"
dat += "
"
dat += ""
@@ -131,6 +136,15 @@
show()
return
+ if(href_list["cut"] && href_list["insert"])
+ var/cut = text2num(href_list["cut"])
+ var/insert = text2num(href_list["insert"])
+ var/choice = choices[cut]
+ choices.Cut(cut, cut + 1)
+ choices.Insert(insert, choice)
+ show()
+ return
+
..()
/datum/async_input/autocomplete
diff --git a/html/browser/rankedInput.js b/html/browser/rankedInput.js
new file mode 100644
index 00000000000..fb5af2aeb69
--- /dev/null
+++ b/html/browser/rankedInput.js
@@ -0,0 +1,26 @@
+var uid;
+
+function allowDrop(ev) {
+ ev.preventDefault();
+}
+
+function drag(ev) {
+ var index = ev.target.getAttribute('index');
+ if (index) {
+ ev.dataTransfer.setData('text', index);
+ }
+}
+
+function drop(ev) {
+ ev.preventDefault();
+ var data = ev.dataTransfer.getData('text');
+ if (data && ev.target.getAttribute('index')) {
+ window.location = '?src=' + uid + ';' + 'cut=' + data + ';' + 'insert=' + ev.target.getAttribute('index');
+ }
+}
+
+function setUid() {
+ uid = document.getElementById('choices').getAttribute('uid');
+}
+
+window.onload = setUid;