From bed6f9b0efbace16c0b610e2762e92b1a1fd2601 Mon Sep 17 00:00:00 2001 From: tayyyyyyy Date: Wed, 22 May 2019 17:51:45 -0700 Subject: [PATCH] Drag and drop in ranked preferences input --- code/datums/helper_datums/input.dm | 18 ++++++++++++++++-- html/browser/rankedInput.js | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 html/browser/rankedInput.js 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 += "" 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/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;