From c4b2f94ee2d2ff7c149dd7420c7e9dbebeb83a4e Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 23 Mar 2022 22:07:09 +0000 Subject: [PATCH] . --- static/js/anatomy.js | 1053 +++++++++++++++++++++--------------------- 1 file changed, 527 insertions(+), 526 deletions(-) diff --git a/static/js/anatomy.js b/static/js/anatomy.js index 3959803f..fdfb4c72 100644 --- a/static/js/anatomy.js +++ b/static/js/anatomy.js @@ -1,527 +1,528 @@ -import * as dicomViewer from "./dicomViewer.js" - -window.dicomViewer = dicomViewer; - -window.marked_answers = { - "correct": [], - "half-correct": [], - "incorrect": [], -} - -window.control_pressed = false; - - -$(document).ready(function () { - $("table thead th input").click((e) => { - let status = e.currentTarget.checked; - $("table tbody input").prop("checked", status); - }) - - //$(".answer-list li").each(function (index, element) { - // $(element).append($("G")); - //}); - - $(".answer-list span.answer").each(function (index, element) { - console.log(element); - - $(element).click(function (e) { - - var classes = ['answer correct', 'answer half-correct', 'answer incorrect']; - $(element).each(function () { - let mark = classes[($.inArray(this.className, classes) + 1) % classes.length]; - this.className = mark - this.dataset.newmark = mark.split(" ")[1] - }); - - prepAnswerData(); - - - - }); - }); - prepAnswerData(); - - if ($(".post-form").length > 0) { - $(".post-form").get(0).addEventListener("submit", function (e) { - //if ($(".not-marked").length > 0 && e.submitter.name != "skip") { - // e.preventDefault(); // before the code - // alert("Ensure all answers are marked first"); - //} - - }); - } - - let dicom_images = document.getElementsByClassName("dicom-image"); - if (dicom_images.length) { - - for (let element of dicom_images) { - setUpDicom(element) - } - - } - - - loadDicomViewer(); - - if ($("#question-mark-list").length) { - $(".show-all-button").click(() => { - $("#question-mark-list li").show(); - }); - $(".show-unmarked-button").click(() => { - $("#question-mark-list li").each((n, el) => { - // Can't seem to get django to output this as a int.... - if (parseInt(el.dataset.markcount) < 1) { - $(el).hide(); - } - }) - }); - - } - -// $(document).keydown(keyDownHandler); -// $(document).keyup(keyUpHandler); - - $("#button-select-add-exam").click(function (evt) { - // Find selected objects - - - - var jqxhr = $.get(evt.target.dataset.exam_list_url, function (data) { - console.log(data); - $("#exam-options").empty(); - data.forEach((obj, n) => { - $("#exam-options").append($(document.createElement('button')).prop({ - type: 'button', - innerHTML: obj.name, - class: '', - - }).data("exam-id", obj.id).click((evt) => { - addToExam(evt) - })) - }) - }) - .done(function () { - //alert( "second success" ); - }) - .fail(function () { - //alert( "error" ); - }) - .always(function () { - //alert( "finished" ); - }); - - return; - - - function addToExam(evt) { - - let ids = [] - $("tbody input:checked").each((n, el) => { - ids.push(el.value) - }) - - // if no question selected - if (ids.length < 1) { - toastr.info('No question selected.'); - return - } - let post_url = document.getElementById("button-select-add-exam").dataset.exam_json_edit_url; - let type = document.getElementById("button-select-add-exam").dataset.type; - let csrf = document.getElementById("button-select-add-exam").dataset.csrf; - $.ajax({ - url: post_url, - data: { - csrfmiddlewaretoken: csrf, - add_exam_questions: JSON.stringify(ids), - type: type, - exam_id: $(evt.target).data("exam-id"), - }, - type: "POST", - dataType: "json", - }) - // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly - .done(function (data) { - console.log(data); - - if (data.status == "success") { - toastr.info('Questions added to exams.') - } - }) - .always(function () { - console.log('[Done]'); - $("#exam-options").empty(); - }) - } - }); - - -}); - -window.loadDicomViewerEvent = new Event('loadDicomViewer'); -window.addEventListener('loadDicomViewer', function (e) { - //console.log("listen", e.detail) - let images = []; - //console.log($("#image_form_set img")); - $(e.detail).each((n, el) => { - images.push($(el).attr("src")); - }); - //console.log("listen2", images) - loadDicomViewer(images); -}, false); - -window.loadDicomViewerEvent = new Event('loadDicomViewerUrls'); -window.addEventListener('loadDicomViewerUrls', function (e) { - - loadDicomViewer(e.detail.images, e.detail.annotations); -}, false); - -function loadDicomViewer(images_to_load, annotations_to_load) { - console.log("loadDicomViewer", images_to_load); - let single_dicom = document.getElementById("single-dicom-viewer"); - if (single_dicom) { - $(single_dicom).empty() - let images = single_dicom.dataset.images; - - if (images_to_load != undefined) { - images = images_to_load; - //} else if (images.indexOf(",") > 0) { - } else if (images == undefined || images == "") { - // No images to load - return - } else { - images = JSON.parse(images); - } - - console.log(images); - - let annotations = single_dicom.dataset.annotations; - if (annotations_to_load != undefined) { - annotations = annotations_to_load; - } else if (annotations && annotations.indexOf(",") > 0) { - annotations = JSON.parse(annotations); - } else { - annotations = undefined; - } - - let load_as_stack; - if (images.length > 5) { - load_as_stack = true; - } else { - load_as_stack = false; - } - - if (images) { - dicomViewer.loadCornerstone($(single_dicom), null, images, annotations, load_as_stack); - } - } -} - -function prepAnswerData() { - //$("#id_correct").val($("li.correct").map(function() { - // ans = $(this).text(); - // window.marked_answers["correct"].push(ans); - // return ans - //}).get().join('--//--')); - //$("#id_half_correct").val($("li.half-correct").map(function() { - // ans = $(this).text(); - // window.marked_answers["half-correct"].push(ans); - // return ans; - //}).get().join('--//--')); - //$("#id_incorrect").val($("li.incorrect").map(function() { - // ans = $(this).text(); - // window.marked_answers["incorrect"].push(ans); - // return ans; - //}).get().join('--//--')); - - window.marked_answers["correct"] = []; - window.marked_answers["half-correct"] = []; - window.marked_answers["incorrect"] = []; - $("li span.correct").map(function () { - let ans = $(this).text(); - window.marked_answers["correct"].push(ans); - }) - $("li span.half-correct").map(function () { - let ans = $(this).text(); - window.marked_answers["half-correct"].push(ans); - }) - $("li span.incorrect").map(function () { - let ans = $(this).text(); - window.marked_answers["incorrect"].push(ans); - }) - $("#id_marked_answers").val(JSON.stringify(window.marked_answers)); -} - -function loadJsonToolStateOnCurrentImage(json) { - let el = document.getElementById("dicom-image"); - - const toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager; - - const c = cornerstone.getEnabledElement(el); - - let image_id = c.image.imageId; - - let tool_state_no_id = JSON.parse(json); - - let tool_state = {}; - tool_state[image_id] = tool_state_no_id; - - toolStateManager.restoreToolState(tool_state); - - cornerstone.reset(el); - - return tool_state; - - -} - -function setUpDicom(element) { - - console.log("Dicom element found ", $(element)); - - $(element).bind('contextmenu', function (e) { - return false; - }); - - $(element).dblclick((evt) => { - element.requestFullscreen(); - }) - - cornerstoneBase64ImageLoader.external.cornerstone = cornerstone; - cornerstoneWebImageLoader.external.cornerstone = cornerstone; - cornerstoneWADOImageLoader.external.cornerstone = cornerstone; - - cornerstoneTools.init(); - const PanTool = cornerstoneTools.PanTool; - const ZoomTool = cornerstoneTools.ZoomTool; - const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool; - const WwwcTool = cornerstoneTools.WwwcTool; - const WwwcRegionTool = cornerstoneTools.WwwcRegionTool; - const RotateTool = cornerstoneTools.RotateTool; - const StackScrollTool = cornerstoneTools.StackScrollTool; - const MagnifyTool = cornerstoneTools.MagnifyTool; - const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool; - - - const imageIds = element.dataset.url.split(","); - - console.log("Dicom - load imageId: ", imageIds); - for (let index = 0; index < imageIds.length; index++) { - if (imageIds[index].endsWith("dcm")) { - imageIds[index] = "wadouri:" + imageIds[index]; - } - - } - - cornerstone.enable(element); - cornerstone.loadAndCacheImage(imageIds[0]).then(function (image) { - cornerstone.displayImage(element, image); - - cornerstoneTools.addToolForElement(element, PanTool); - cornerstoneTools.addToolForElement(element, ZoomTool); - cornerstoneTools.addToolForElement(element, ZoomMouseWheelTool); - cornerstoneTools.addToolForElement(element, WwwcTool); - cornerstoneTools.addToolForElement(element, WwwcRegionTool); - cornerstoneTools.addToolForElement(element, RotateTool); - cornerstoneTools.addToolForElement(element, StackScrollTool); - cornerstoneTools.addToolForElement(element, MagnifyTool); - - cornerstoneTools.addToolForElement(element, ArrowAnnotateTool, { - configuration: { - getTextCallback: () => {}, - changeTextCallback: () => {}, - allowEmptyLabel: true, - renderDashed: false, - drawHandles: false, - drawHandlesOnHover: true, - }, - }); - - - - // Enable our tools - // Avoid incorrect aspect ratio - cornerstoneTools.setToolActiveForElement(element, "Pan", { - mouseButtonMask: 1 - }); - cornerstoneTools.setToolActiveForElement(element, "Wwwc", { - mouseButtonMask: 2 - }); - cornerstoneTools.setToolActiveForElement(element, "ZoomMouseWheel", { - mouseButtonMask: 3 - }); - cornerstoneTools.setToolActiveForElement(element, "Zoom", { - mouseButtonMask: 4 - }); - - if (element.dataset.edit_annotation == "true") { - cornerstoneTools.setToolActiveForElement(element, "ArrowAnnotate", { - mouseButtonMask: 2 - }); - } else { - cornerstoneTools.setToolEnabledForElement(element, "ArrowAnnotate"); - } - - if (element.dataset.annotations) { - loadJsonToolStateOnCurrentImage(element.dataset.annotations) - } - - cornerstone.resize(element); - - - }); - -} - -//function keyUpHandler(e) { -// if (e.key == "Control") { -// dicomViewer.registerPrimaryDicomInterface(e); -// window.control_pressed = false; -// } -//} -// -//function keyDownHandler(e) { -// // Ignore our custom keybindings if we are currently in a field that -// // accepts some kind of input -// if ($("*:focus:not(disabled)").is("textarea, input")) { -// // unless a modifier key is pressed (not shift) -// if (e.altKey ? true : false || e.ctrlKey ? true : false) {} else { -// return; -// } -// } -// -// if (e.key == "Control") { -// if (window.control_pressed == false) { -// window.control_pressed = true; -// dicomViewer.registerAltDicomInterface(e); -// } -// } -// -// var charCode = typeof e.which == "number" ? e.which : e.keyCode; -// console.log(e, charCode); -// -// function numberKeyPressed(e, x) { -// if (e.altKey ? true : false) { -// dicomViewer.selectThumb(x); -// e.preventDefault(); -// } else {} -// } -// -// switch (charCode) { -// case 13: // Return -// if (e.shiftKey ? true : false) { -// //$(".next-button:last").click(); -// } else { -// //$(".check-button:last").click(); -// } -// break; -// case 32: // Space -// if (e.shiftKey ? true : false) { -// //$(".previous-button:last").click(); -// } else { -// //$(".next-button:last").click(); -// } -// e.preventDefault(); // Needed to stop the default action (scroll) -// break; -// case 46: // . -// //toggleFlagged(); -// break; -// -// // Numbers 1-9 select the corresponding answer (if it exists) -// // TODO: fix for multi question questions -// case 49: // 1 -// numberKeyPressed(e, 0); -// break; -// case 50: // 2 -// numberKeyPressed(e, 1); -// break; -// case 51: // 3 -// numberKeyPressed(e, 2); -// break; -// case 52: // 4 -// numberKeyPressed(e, 3); -// break; -// case 53: // 5 -// numberKeyPressed(e, 4); -// break; -// case 54: // 6 -// numberKeyPressed(e, 5); -// break; -// case 55: // 7 -// numberKeyPressed(e, 6); -// break; -// case 56: // 8 -// numberKeyPressed(e, 7); -// break; -// case 57: // 9 -// numberKeyPressed(e, 8); -// break; -// case 72: // H -// previousQuestion(); -// break; -// case 76: // L -// //nextQuestion(); -// break; -// -// case 102: // f -// //$("#filter-toggle").click(); -// break; -// case 103: // g -// //$("#options").slideDown("slow"); -// //$("#goto-question-input").focus(); -// //e.preventDefault(); -// break; -// -// // Vim like scrolling (incredibly important) -// case 106: // j -// //window.scrollBy(0, 25); -// break; -// case 107: // k -// //window.scrollBy(0, -25); -// break; -// } -//} - - -function create_popup_window(url, title) { - newwindow = window.open(url, title, 'height=800,width=600'); - if (window.focus) { - newwindow.focus() - } - return false; -} - -window.create_popup_window = create_popup_window - -function delete_multiple(url, csrf_token) { - - let answer_ids = []; - $("tbody input:checked").each((n, el) => { - answer_ids.push(el.value); - }) - if (confirm(`Delete ${answer_ids.length} answers?`)) { - $.ajax({ - url: url, - data: { - csrfmiddlewaretoken: csrf_token, - answer_ids: JSON.stringify(answer_ids) // true if checked else false - }, - type: "POST", - dataType: "json", - }) - // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly - .done(function (data) { - console.log(data); - - if (data.status == "success") { - toastr.info('Deleted.') - } - // show some message according to the response. - // For eg. A message box showing that the status has been changed - }) - .always(function () { - console.log('[Done]'); - }) - } - -} +import * as dicomViewer from "./dicomViewer.js" + +window.dicomViewer = dicomViewer; + +window.marked_answers = { + "correct": [], + "half-correct": [], + "incorrect": [], +} + +window.control_pressed = false; + + +$(document).ready(function () { + $("table thead th input").click((e) => { + let status = e.currentTarget.checked; + $("table tbody input").prop("checked", status); + }) + + //$(".answer-list li").each(function (index, element) { + // $(element).append($("G")); + //}); + + $(".answer-list span.answer").each(function (index, element) { + console.log(element); + + $(element).click(function (e) { + + var classes = ['answer correct', 'answer half-correct', 'answer incorrect']; + $(element).each(function () { + let mark = classes[($.inArray(this.className, classes) + 1) % classes.length]; + this.className = mark + this.dataset.newmark = mark.split(" ")[1] + }); + + prepAnswerData(); + + + + }); + }); + prepAnswerData(); + + if ($(".post-form").length > 0) { + $(".post-form").get(0).addEventListener("submit", function (e) { + //if ($(".not-marked").length > 0 && e.submitter.name != "skip") { + // e.preventDefault(); // before the code + // alert("Ensure all answers are marked first"); + //} + + }); + } + + let dicom_images = document.getElementsByClassName("dicom-image"); + if (dicom_images.length) { + + for (let element of dicom_images) { + setUpDicom(element) + } + + } + + + loadDicomViewer(); + + if ($("#question-mark-list").length) { + $(".show-all-button").click(() => { + $("#question-mark-list li").show(); + }); + $(".show-unmarked-button").click(() => { + $("#question-mark-list li").each((n, el) => { + // Can't seem to get django to output this as a int.... + if (parseInt(el.dataset.markcount) < 1) { + $(el).hide(); + } + }) + }); + + } + +// $(document).keydown(keyDownHandler); +// $(document).keyup(keyUpHandler); + + $("#button-select-add-exam").click(function (evt) { + // Find selected objects + + + + var jqxhr = $.get(evt.target.dataset.exam_list_url, function (data) { + console.log(data); + $("#exam-options").empty(); + data.forEach((obj, n) => { + $("#exam-options").append($(document.createElement('button')).prop({ + type: 'button', + innerHTML: obj.name, + class: '', + + }).data("exam-id", obj.id).click((evt) => { + addToExam(evt) + })) + }) + }) + .done(function () { + //alert( "second success" ); + }) + .fail(function () { + //alert( "error" ); + }) + .always(function () { + //alert( "finished" ); + }); + + return; + + + function addToExam(evt) { + + let ids = [] + $("tbody input:checked").each((n, el) => { + ids.push(el.value) + }) + + // if no question selected + if (ids.length < 1) { + toastr.info('No question selected.'); + return + } + let post_url = document.getElementById("button-select-add-exam").dataset.exam_json_edit_url; + let type = document.getElementById("button-select-add-exam").dataset.type; + let csrf = document.getElementById("button-select-add-exam").dataset.csrf; + $.ajax({ + url: post_url, + data: { + csrfmiddlewaretoken: csrf, + add_exam_questions: JSON.stringify(ids), + type: type, + exam_id: $(evt.target).data("exam-id"), + }, + type: "POST", + dataType: "json", + }) + // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly + .done(function (data) { + console.log(data); + + if (data.status == "success") { + toastr.info('Questions added to exams.') + } + }) + .always(function () { + console.log('[Done]'); + $("#exam-options").empty(); + }) + } + }); + + +}); + +window.loadDicomViewerEvent = new Event('loadDicomViewer'); +window.addEventListener('loadDicomViewer', function (e) { + //console.log("listen", e.detail) + let images = []; + //console.log($("#image_form_set img")); + $(e.detail).each((n, el) => { + images.push($(el).attr("src")); + }); + //console.log("listen2", images) + loadDicomViewer(images); +}, false); + +window.loadDicomViewerEvent = new Event('loadDicomViewerUrls'); +window.addEventListener('loadDicomViewerUrls', function (e) { + + loadDicomViewer(e.detail.images, e.detail.annotations); +}, false); + +function loadDicomViewer(images_to_load, annotations_to_load) { + console.log("loadDicomViewer", images_to_load); + let single_dicom = document.getElementById("single-dicom-viewer"); + if (single_dicom) { + $(single_dicom).empty() + let images = single_dicom.dataset.images; + + if (images_to_load != undefined) { + images = images_to_load; + //} else if (images.indexOf(",") > 0) { + } else if (images == undefined || images == "") { + // No images to load + return + } else { + images = JSON.parse(images); + } + + console.log(images); + + let annotations = single_dicom.dataset.annotations; + if (annotations_to_load != undefined) { + annotations = annotations_to_load; + } else if (annotations && annotations.indexOf(",") > 0) { + annotations = JSON.parse(annotations); + } else { + annotations = undefined; + } + + let load_as_stack; + if (images.length > 5) { + load_as_stack = true; + } else { + load_as_stack = false; + } + + if (images) { + dicomViewer.loadCornerstone($(single_dicom), null, images, annotations, load_as_stack); + } + } +} +window.loadDicomViewer = loadDicomViewer + +function prepAnswerData() { + //$("#id_correct").val($("li.correct").map(function() { + // ans = $(this).text(); + // window.marked_answers["correct"].push(ans); + // return ans + //}).get().join('--//--')); + //$("#id_half_correct").val($("li.half-correct").map(function() { + // ans = $(this).text(); + // window.marked_answers["half-correct"].push(ans); + // return ans; + //}).get().join('--//--')); + //$("#id_incorrect").val($("li.incorrect").map(function() { + // ans = $(this).text(); + // window.marked_answers["incorrect"].push(ans); + // return ans; + //}).get().join('--//--')); + + window.marked_answers["correct"] = []; + window.marked_answers["half-correct"] = []; + window.marked_answers["incorrect"] = []; + $("li span.correct").map(function () { + let ans = $(this).text(); + window.marked_answers["correct"].push(ans); + }) + $("li span.half-correct").map(function () { + let ans = $(this).text(); + window.marked_answers["half-correct"].push(ans); + }) + $("li span.incorrect").map(function () { + let ans = $(this).text(); + window.marked_answers["incorrect"].push(ans); + }) + $("#id_marked_answers").val(JSON.stringify(window.marked_answers)); +} + +function loadJsonToolStateOnCurrentImage(json) { + let el = document.getElementById("dicom-image"); + + const toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager; + + const c = cornerstone.getEnabledElement(el); + + let image_id = c.image.imageId; + + let tool_state_no_id = JSON.parse(json); + + let tool_state = {}; + tool_state[image_id] = tool_state_no_id; + + toolStateManager.restoreToolState(tool_state); + + cornerstone.reset(el); + + return tool_state; + + +} + +function setUpDicom(element) { + + console.log("Dicom element found ", $(element)); + + $(element).bind('contextmenu', function (e) { + return false; + }); + + $(element).dblclick((evt) => { + element.requestFullscreen(); + }) + + cornerstoneBase64ImageLoader.external.cornerstone = cornerstone; + cornerstoneWebImageLoader.external.cornerstone = cornerstone; + cornerstoneWADOImageLoader.external.cornerstone = cornerstone; + + cornerstoneTools.init(); + const PanTool = cornerstoneTools.PanTool; + const ZoomTool = cornerstoneTools.ZoomTool; + const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool; + const WwwcTool = cornerstoneTools.WwwcTool; + const WwwcRegionTool = cornerstoneTools.WwwcRegionTool; + const RotateTool = cornerstoneTools.RotateTool; + const StackScrollTool = cornerstoneTools.StackScrollTool; + const MagnifyTool = cornerstoneTools.MagnifyTool; + const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool; + + + const imageIds = element.dataset.url.split(","); + + console.log("Dicom - load imageId: ", imageIds); + for (let index = 0; index < imageIds.length; index++) { + if (imageIds[index].endsWith("dcm")) { + imageIds[index] = "wadouri:" + imageIds[index]; + } + + } + + cornerstone.enable(element); + cornerstone.loadAndCacheImage(imageIds[0]).then(function (image) { + cornerstone.displayImage(element, image); + + cornerstoneTools.addToolForElement(element, PanTool); + cornerstoneTools.addToolForElement(element, ZoomTool); + cornerstoneTools.addToolForElement(element, ZoomMouseWheelTool); + cornerstoneTools.addToolForElement(element, WwwcTool); + cornerstoneTools.addToolForElement(element, WwwcRegionTool); + cornerstoneTools.addToolForElement(element, RotateTool); + cornerstoneTools.addToolForElement(element, StackScrollTool); + cornerstoneTools.addToolForElement(element, MagnifyTool); + + cornerstoneTools.addToolForElement(element, ArrowAnnotateTool, { + configuration: { + getTextCallback: () => {}, + changeTextCallback: () => {}, + allowEmptyLabel: true, + renderDashed: false, + drawHandles: false, + drawHandlesOnHover: true, + }, + }); + + + + // Enable our tools + // Avoid incorrect aspect ratio + cornerstoneTools.setToolActiveForElement(element, "Pan", { + mouseButtonMask: 1 + }); + cornerstoneTools.setToolActiveForElement(element, "Wwwc", { + mouseButtonMask: 2 + }); + cornerstoneTools.setToolActiveForElement(element, "ZoomMouseWheel", { + mouseButtonMask: 3 + }); + cornerstoneTools.setToolActiveForElement(element, "Zoom", { + mouseButtonMask: 4 + }); + + if (element.dataset.edit_annotation == "true") { + cornerstoneTools.setToolActiveForElement(element, "ArrowAnnotate", { + mouseButtonMask: 2 + }); + } else { + cornerstoneTools.setToolEnabledForElement(element, "ArrowAnnotate"); + } + + if (element.dataset.annotations) { + loadJsonToolStateOnCurrentImage(element.dataset.annotations) + } + + cornerstone.resize(element); + + + }); + +} + +//function keyUpHandler(e) { +// if (e.key == "Control") { +// dicomViewer.registerPrimaryDicomInterface(e); +// window.control_pressed = false; +// } +//} +// +//function keyDownHandler(e) { +// // Ignore our custom keybindings if we are currently in a field that +// // accepts some kind of input +// if ($("*:focus:not(disabled)").is("textarea, input")) { +// // unless a modifier key is pressed (not shift) +// if (e.altKey ? true : false || e.ctrlKey ? true : false) {} else { +// return; +// } +// } +// +// if (e.key == "Control") { +// if (window.control_pressed == false) { +// window.control_pressed = true; +// dicomViewer.registerAltDicomInterface(e); +// } +// } +// +// var charCode = typeof e.which == "number" ? e.which : e.keyCode; +// console.log(e, charCode); +// +// function numberKeyPressed(e, x) { +// if (e.altKey ? true : false) { +// dicomViewer.selectThumb(x); +// e.preventDefault(); +// } else {} +// } +// +// switch (charCode) { +// case 13: // Return +// if (e.shiftKey ? true : false) { +// //$(".next-button:last").click(); +// } else { +// //$(".check-button:last").click(); +// } +// break; +// case 32: // Space +// if (e.shiftKey ? true : false) { +// //$(".previous-button:last").click(); +// } else { +// //$(".next-button:last").click(); +// } +// e.preventDefault(); // Needed to stop the default action (scroll) +// break; +// case 46: // . +// //toggleFlagged(); +// break; +// +// // Numbers 1-9 select the corresponding answer (if it exists) +// // TODO: fix for multi question questions +// case 49: // 1 +// numberKeyPressed(e, 0); +// break; +// case 50: // 2 +// numberKeyPressed(e, 1); +// break; +// case 51: // 3 +// numberKeyPressed(e, 2); +// break; +// case 52: // 4 +// numberKeyPressed(e, 3); +// break; +// case 53: // 5 +// numberKeyPressed(e, 4); +// break; +// case 54: // 6 +// numberKeyPressed(e, 5); +// break; +// case 55: // 7 +// numberKeyPressed(e, 6); +// break; +// case 56: // 8 +// numberKeyPressed(e, 7); +// break; +// case 57: // 9 +// numberKeyPressed(e, 8); +// break; +// case 72: // H +// previousQuestion(); +// break; +// case 76: // L +// //nextQuestion(); +// break; +// +// case 102: // f +// //$("#filter-toggle").click(); +// break; +// case 103: // g +// //$("#options").slideDown("slow"); +// //$("#goto-question-input").focus(); +// //e.preventDefault(); +// break; +// +// // Vim like scrolling (incredibly important) +// case 106: // j +// //window.scrollBy(0, 25); +// break; +// case 107: // k +// //window.scrollBy(0, -25); +// break; +// } +//} + + +function create_popup_window(url, title) { + newwindow = window.open(url, title, 'height=800,width=600'); + if (window.focus) { + newwindow.focus() + } + return false; +} + +window.create_popup_window = create_popup_window + +function delete_multiple(url, csrf_token) { + + let answer_ids = []; + $("tbody input:checked").each((n, el) => { + answer_ids.push(el.value); + }) + if (confirm(`Delete ${answer_ids.length} answers?`)) { + $.ajax({ + url: url, + data: { + csrfmiddlewaretoken: csrf_token, + answer_ids: JSON.stringify(answer_ids) // true if checked else false + }, + type: "POST", + dataType: "json", + }) + // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly + .done(function (data) { + console.log(data); + + if (data.status == "success") { + toastr.info('Deleted.') + } + // show some message according to the response. + // For eg. A message box showing that the status has been changed + }) + .always(function () { + console.log('[Done]'); + }) + } + +} window.delete_multiple = delete_multiple \ No newline at end of file