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 += "" dat += "" - dat += "" + dat += "" dat += "" dat += "
[button("+", i != 1 ? "upvote=[i]" : "", , i == 1)][button("-", i != choices.len ? "downvote=[i]" : "", , i == choices.len)][i]. [choice][i]. [choice]
" 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;