From c6fa363cd91f1bd10c9da98ddc0a0045eab40203 Mon Sep 17 00:00:00 2001 From: Samy Avrillon Date: Fri, 13 Jun 2025 12:51:38 +0200 Subject: [PATCH] Added item reordering - end of quizz edit page --- src/main/resources/static/css/style.css | 2 +- src/main/resources/templates/quizz-edit.html | 258 ++++++++++++++----- 2 files changed, 199 insertions(+), 61 deletions(-) diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index ce7dfb3..d705758 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -50,7 +50,7 @@ main{ color: #96c7e8; font-size: 24px; flex-direction: column; - margin-top: 75px; + margin-top: 115px; } .button a{ position: fixed; diff --git a/src/main/resources/templates/quizz-edit.html b/src/main/resources/templates/quizz-edit.html index 3b1df65..2f761d0 100644 --- a/src/main/resources/templates/quizz-edit.html +++ b/src/main/resources/templates/quizz-edit.html @@ -19,9 +19,10 @@
- - - + + + +
    @@ -53,6 +54,8 @@ qpositions={} // the name of the quizz quizzName = "" + + editing = new Set() function getdata() { $.ajax({ @@ -74,6 +77,7 @@ qpositions[questions[i]["id"]] = i internalCreateQuestion(i) } + $(`.reorder-button`).hide() } }) } @@ -83,62 +87,64 @@ qu = questions[i] qid = qu["id"] newhtml = ` -
  1. -
    -
    +
  2. +
    +
    - - - - - + + + + + + + + +
  3. ` newdom = $('
  4. ').html(newhtml).contents() $("#questions-list").append(newdom) const theqid = qid - $(`#question-display-${qid}-button-edit`).on('click',e => edit(theqid)) - $(`#question-display-${qid}-type-edit`).on('click',e => setType(theqid)) - $(`#question-display-${qid}-remove`).on('click',e => removeQuestion(theqid)) - $(`#question-display-${qid}-validate-edit`).on('click',e => commitEdit(theqid)) - $(`#question-display-${qid}-cancel-edit`).on('click',e => cancelEdit(theqid)) + $(`#q-${qid}-button-edit`).on('click',e => edit(theqid)) + $(`#q-${qid}-type-edit`).on('click',e => setType(theqid)) + $(`#q-${qid}-remove`).on('click',e => removeQuestion(theqid)) + $(`#q-${qid}-validate-edit`).on('click',e => commitEdit(theqid)) + $(`#q-${qid}-cancel-edit`).on('click',e => cancelEdit(theqid)) + $(`#q-${qid}-reorder-uup`).on('click',e => reorderMove(theqid,'uup')) + $(`#q-${qid}-reorder-up`).on('click',e => reorderMove(theqid,'up')) + $(`#q-${qid}-reorder-down`).on('click',e => reorderMove(theqid,'down')) + $(`#q-${qid}-reorder-ddown`).on('click',e => reorderMove(theqid,'ddown')) newcontent = QTYPES[qu["type"]]["display"](qid,qu["value"]) - $(`#question-display-${qid}-content`).replaceWith(newcontent) + $(`#q-${qid}-content`).replaceWith(newcontent) newedit = QTYPES[qu["type"]]["edit"](qid,qu["value"]) - $(`#question-display-${qid}-edit`).replaceWith(newedit) + $(`#q-${qid}-edit`).replaceWith(newedit) contentMode(qid) } function contentMode(qid) { - $(`#question-display-${qid}-content`).show() - $(`#question-display-${qid}-button-edit`).show() - $(`#question-display-${qid}-type-edit`).show() - $(`#question-display-${qid}-remove`).show() - $(`#question-display-${qid}-edit`).hide() - $(`#question-display-${qid}-validate-edit`).hide() - $(`#question-display-${qid}-cancel-edit`).hide() + $(`#q-${qid}-content`).show() + $(`.display-button-${qid}`).show() + $(`#q-${qid}-edit`).hide() + $(`.edit-button-${qid}`).hide() + $('.reorder-button').hide() } function editMode(qid) { - $(`#question-display-${qid}-content`).hide() - $(`#question-display-${qid}-button-edit`).hide() - $(`#question-display-${qid}-type-edit`).hide() - $(`#question-display-${qid}-remove`).hide() - $(`#question-display-${qid}-edit`).show() - $(`#question-display-${qid}-validate-edit`).show() - $(`#question-display-${qid}-cancel-edit`).show() + $(`#q-${qid}-content`).hide() + $(`.display-button-${qid}`).hide() + $(`#q-${qid}-edit`).show() + $(`.edit-button-${qid}`).show() + $('.reorder-button').hide() } function lockEdit(qid) { - $(`#question-display-${qid}-edit *`).prop('disabled', true) - $(`#question-display-${qid}-validate-edit`).prop('disabled', true) - $(`#question-display-${qid}-cancel-edit`).prop('disabled', true) + $(`#q-${qid}-edit *`).prop('disabled', true) + $(`.edit-button-${qid}`).prop('disabled', true) } function unlockEdit(qid) { - $(`#question-display-${qid}-edit *`).prop('disabled', false) - $(`#question-display-${qid}-validate-edit`).prop('disabled', false) - $(`#question-display-${qid}-cancel-edit`).prop('disabled', false) + $(`#q-${qid}-edit *`).prop('disabled', false) + $(`.edit-button-${qid}`).prop('disabled', false) } function contentNameMode() { $("#question-name").show() @@ -155,12 +161,32 @@ $(`#edit-question-name-cancel`).show() } + function reorderMode() { + $(`.display-button`).hide() + $(`.edit-button`).hide() + $(`.reorder-button`).show() + for (let qid of editing) { + lockEdit(qid) + } + } + function unReorderMode() { + $(`.reorder-button`).hide() + $(`.display-button`).show() + for (let qid of editing) { + $(`.display-button-${qid}`).hide() + $(`.edit-button-${qid}`).show() + editMode(qid) + unlockEdit(qid) + } + } + function setType(qid) { //TODO à faire ^^ } function edit(qid) { + editing.add(qid) editMode(qid) } @@ -184,17 +210,18 @@ i = qpositions[qid] questions[i]["value"] = newvalue newcontent = QTYPES[questions[i]["type"]]["display"](qid,questions[i]["value"]) - $(`#question-display-${qid}-content`).replaceWith(newcontent) + $(`#q-${qid}-content`).replaceWith(newcontent) unlockEdit(qid) + editing.delete(qid) contentMode(qid) } }) } function removeQuestion(qid) { - $(`#question-display-${qid}-remove`).prop('disabled',true) + $(`#q-${qid}-remove`).prop('disabled',true) if(!confirm(`Voulez-vous vraiment supprimer la question ${qpositions[qid]+1}`)) { - $(`#question-display-${qid}-remove`).prop('disabled', false) + $(`#q-${qid}-remove`).prop('disabled', false) return; } $.ajax({ @@ -206,22 +233,23 @@ if(!res["success"]) { console.log(res["message"]) error(res["message"]) - $(`#question-display-${qid}-remove`).prop('disabled', false) + $(`#q-${qid}-remove`).prop('disabled', false) return } - $(`#question-display-${qid}-remove`).prop('disabled', false) + $(`#q-${qid}-remove`).prop('disabled', false) i = qpositions[qid] qpositions[qid] = null questions.splice(i,1) - $(`#question-display-${qid}`).remove() + $(`#q-${qid}`).remove() } }) } function cancelEdit(qid) { i = qpositions[qid] newedit = QTYPES[questions[i]["type"]]["edit"](qid,questions[i]["value"]) - $(`#question-display-${qid}-edit`).replaceWith(newedit) + $(`#q-${qid}-edit`).replaceWith(newedit) + editing.delete(qid) contentMode(qid) } @@ -231,9 +259,9 @@ $.ajax({ url: "/questions/quizz-edit/"+quizzid+"/set-name", type: "POST", - data: JSON.stringify(newname), - dataType: "json", - contentType: 'application/json', + data: newname, + dataType: 'json', + contentType: 'text/plain', success: function(res) { console.log(res) if(!res["success"]) { @@ -277,21 +305,128 @@ } }) } + + // Map newindex -> oldindex + ordermapping = [] + + function startReorder() { + ordermapping = new Array(questions.length) + for (let i=0;ij;k--){ + ordermapping[k] = ordermapping[k-1] + } + } + ordermapping[j] = oldomi + + if(j==ordermapping.length-1) { + $(`#q-${qid}`).appendTo($("#questions-list")) + } else { + // We want the one _currently_ at position j+1 + qid2 = questions[ordermapping[j+1]]['id'] + console.log(`Moving ${qid} before ${qid2}`) + $(`#q-${qid}`).insertBefore($(`#q-${qid2}`)) + } + + } + + function commitReorder() { + $(".reorder-button").prop('disabled', true) + newIdOrders = [] + for(let p=0;p question data + newquestions=new Array(questions.length) + newqpositions={} + for(let p=0;p -
    +
      -
    1. -
    2. -
    3. -
    @@ -300,11 +435,11 @@ return out } function readEditBlockBCC(id) { - questionText = $(`#question-display-${id}-edit-question`).val() - goodText = $(`#question-display-${id}-edit-good`).val() - wrongText1 = $(`#question-display-${id}-edit-wrong1`).val() - wrongText2 = $(`#question-display-${id}-edit-wrong2`).val() - wrongText3 = $(`#question-display-${id}-edit-wrong3`).val() + questionText = $(`#q-${id}-edit-question`).val() + goodText = $(`#q-${id}-edit-good`).val() + wrongText1 = $(`#q-${id}-edit-wrong1`).val() + wrongText2 = $(`#q-${id}-edit-wrong2`).val() + wrongText3 = $(`#q-${id}-edit-wrong3`).val() return { "text": questionText, "good": goodText, @@ -313,7 +448,7 @@ } function makeAnswerBlockBCC(id,question) { html = ` -
    +
    ${_.escape(question["text"])}
    1. ☑ ${_.escape(question["good"])}
    2. @@ -328,6 +463,9 @@ } contentNameMode() + $("#reorder-questions").on("click",startReorder) + $("#reorder-questions-commit").on("click",commitReorder) + $("#reorder-questions-cancel").on("click",cancelReorder) $("#edit-question-name-button").on("click",editNameMode) $("#edit-question-name-confirm").on("click",commitEditName) $("#edit-question-name-cancel").on("click",cancelEditName)