diff --git a/code/datums/helper_datums/input.dm b/code/datums/helper_datums/input.dm
index aa73b1e387f..4c3dc6a1cf4 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/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm
index cdc81a9e759..5570053d946 100644
--- a/code/modules/response_team/ert.dm
+++ b/code/modules/response_team/ert.dm
@@ -63,7 +63,7 @@ var/ert_request_answered = FALSE
active_team.setSlots(commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots)
send_emergency_team = TRUE
- var/list/ert_candidates = pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT])
+ var/list/ert_candidates = shuffle(pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT]))
if(!ert_candidates.len)
active_team.cannot_send_team()
send_emergency_team = FALSE
@@ -95,8 +95,8 @@ var/ert_request_answered = FALSE
for(var/datum/async_input/A in ert_gender_prefs)
A.close()
for(var/mob/M in response_team_members)
- ert_role_prefs.Add(input_ranked_async(M, "Please order ERT roles from most to least preferred (15 seconds):", active_team.get_slot_list()))
- addtimer(CALLBACK(GLOBAL_PROC, .proc/dispatch_response_team, response_team_members, ert_gender_prefs, ert_role_prefs), 150)
+ ert_role_prefs.Add(input_ranked_async(M, "Please order ERT roles from most to least preferred (20 seconds):", active_team.get_slot_list()))
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/dispatch_response_team, response_team_members, ert_gender_prefs, ert_role_prefs), 200)
/proc/dispatch_response_team(list/response_team_members, list/ert_gender_prefs, list/ert_role_prefs)
var/spawn_index = 1
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;