diff --git a/ereuse_devicehub/static/js/api.js b/ereuse_devicehub/static/js/api.js index ee98a08f..abf6df89 100644 --- a/ereuse_devicehub/static/js/api.js +++ b/ereuse_devicehub/static/js/api.js @@ -4,7 +4,7 @@ const Api = { * @returns get lots */ async get_lots() { - var request = await this.doRequest(API_URLS.lots, "GET", null); + const request = await this.doRequest(API_URLS.lots, "GET", null); if (request != undefined) return request.items; throw request; }, @@ -15,7 +15,7 @@ const Api = { * @returns full detailed device list */ async get_devices(ids) { - var request = await this.doRequest(API_URLS.devices + '?filter={"id": [' + ids.toString() + ']}', "GET", null); + const request = await this.doRequest(`${API_URLS.devices }?filter={"id": [${ ids.toString() }]}`, "GET", null); if (request != undefined) return request.items; throw request; }, @@ -26,7 +26,7 @@ const Api = { * @returns full detailed device list */ async search_device(id) { - var request = await this.doRequest(API_URLS.devices + '?filter={"devicehub_id": ["' + id + '"]}', "GET", null) + const request = await this.doRequest(`${API_URLS.devices }?filter={"devicehub_id": ["${ id }"]}`, "GET", null) if (request != undefined) return request.items throw request }, @@ -37,7 +37,7 @@ const Api = { * @param {number[]} listDevices list devices id */ async devices_add(lotID, listDevices) { - var queryURL = API_URLS.devices_modify.replace("UUID", lotID) + "?" + listDevices.map(deviceID => "id=" + deviceID).join("&"); + const queryURL = `${API_URLS.devices_modify.replace("UUID", lotID) }?${ listDevices.map(deviceID => `id=${ deviceID}`).join("&")}`; return await Api.doRequest(queryURL, "POST", null); }, @@ -47,7 +47,7 @@ const Api = { * @param {number[]} listDevices list devices id */ async devices_remove(lotID, listDevices) { - var queryURL = API_URLS.devices_modify.replace("UUID", lotID) + "?" + listDevices.map(deviceID => "id=" + deviceID).join("&"); + const queryURL = `${API_URLS.devices_modify.replace("UUID", lotID) }?${ listDevices.map(deviceID => `id=${ deviceID}`).join("&")}`; return await Api.doRequest(queryURL, "DELETE", null); }, @@ -59,13 +59,13 @@ const Api = { * @returns */ async doRequest(url, type, body) { - var result; + let result; try { result = await $.ajax({ - url: url, - type: type, + url, + type, headers: { "Authorization": API_URLS.Auth_Token }, - body: body + body }); return result; } catch (error) { diff --git a/ereuse_devicehub/static/js/create_device.js b/ereuse_devicehub/static/js/create_device.js index 1c9e0655..a1b609b0 100644 --- a/ereuse_devicehub/static/js/create_device.js +++ b/ereuse_devicehub/static/js/create_device.js @@ -1,15 +1,15 @@ -$(document).ready(function() { +$(document).ready(() => { $("#type").on("change", deviceInputs); deviceInputs(); }) function deviceInputs() { - if ($("#type").val() == 'Monitor') { + if ($("#type").val() == "Monitor") { $("#screen").show(); $("#resolution").show(); $("#imei").hide(); $("#meid").hide(); - } else if (['Smartphone', 'Cellphone', 'Tablet'].includes($("#type").val())) { + } else if (["Smartphone", "Cellphone", "Tablet"].includes($("#type").val())) { $("#screen").hide(); $("#resolution").hide(); $("#imei").show(); diff --git a/ereuse_devicehub/static/js/main.js b/ereuse_devicehub/static/js/main.js index 5eaec3ea..f8a97d3a 100644 --- a/ereuse_devicehub/static/js/main.js +++ b/ereuse_devicehub/static/js/main.js @@ -14,9 +14,9 @@ el = el.trim() if (all) { return [...document.querySelectorAll(el)] - } else { + } return document.querySelector(el) - } + } /** @@ -34,103 +34,101 @@ * Easy on scroll event listener */ const onscroll = (el, listener) => { - el.addEventListener('scroll', listener) + el.addEventListener("scroll", listener) } /** * Sidebar toggle */ - if (select('.toggle-sidebar-btn')) { - on('click', '.toggle-sidebar-btn', function (e) { - select('body').classList.toggle('toggle-sidebar') + if (select(".toggle-sidebar-btn")) { + on("click", ".toggle-sidebar-btn", (e) => { + select("body").classList.toggle("toggle-sidebar") }) } /** * Search bar toggle */ - if (select('.search-bar-toggle')) { - on('click', '.search-bar-toggle', function (e) { - select('.search-bar').classList.toggle('search-bar-show') + if (select(".search-bar-toggle")) { + on("click", ".search-bar-toggle", (e) => { + select(".search-bar").classList.toggle("search-bar-show") }) } /** * Navbar links active state on scroll */ - let navbarlinks = select('#navbar .scrollto', true) + const navbarlinks = select("#navbar .scrollto", true) const navbarlinksActive = () => { - let position = window.scrollY + 200 + const position = window.scrollY + 200 navbarlinks.forEach(navbarlink => { if (!navbarlink.hash) return - let section = select(navbarlink.hash) + const section = select(navbarlink.hash) if (!section) return if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { - navbarlink.classList.add('active') + navbarlink.classList.add("active") } else { - navbarlink.classList.remove('active') + navbarlink.classList.remove("active") } }) } - window.addEventListener('load', navbarlinksActive) + window.addEventListener("load", navbarlinksActive) onscroll(document, navbarlinksActive) /** * Toggle .header-scrolled class to #header when page is scrolled */ - let selectHeader = select('#header') + const selectHeader = select("#header") if (selectHeader) { const headerScrolled = () => { if (window.scrollY > 100) { - selectHeader.classList.add('header-scrolled') + selectHeader.classList.add("header-scrolled") } else { - selectHeader.classList.remove('header-scrolled') + selectHeader.classList.remove("header-scrolled") } } - window.addEventListener('load', headerScrolled) + window.addEventListener("load", headerScrolled) onscroll(document, headerScrolled) } /** * Back to top button */ - let backtotop = select('.back-to-top') + const backtotop = select(".back-to-top") if (backtotop) { const toggleBacktotop = () => { if (window.scrollY > 100) { - backtotop.classList.add('active') + backtotop.classList.add("active") } else { - backtotop.classList.remove('active') + backtotop.classList.remove("active") } } - window.addEventListener('load', toggleBacktotop) + window.addEventListener("load", toggleBacktotop) onscroll(document, toggleBacktotop) } /** * Initiate tooltips */ - var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) - var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { - return new bootstrap.Tooltip(tooltipTriggerEl) - }) + const tooltipTriggerList = [].slice.call(document.querySelectorAll("[data-bs-toggle=\"tooltip\"]")) + const tooltipList = tooltipTriggerList.map((tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl)) /** * Initiate quill editors */ - if (select('.quill-editor-default')) { - new Quill('.quill-editor-default', { - theme: 'snow' + if (select(".quill-editor-default")) { + new Quill(".quill-editor-default", { + theme: "snow" }); } - if (select('.quill-editor-bubble')) { - new Quill('.quill-editor-bubble', { - theme: 'bubble' + if (select(".quill-editor-bubble")) { + new Quill(".quill-editor-bubble", { + theme: "bubble" }); } - if (select('.quill-editor-full')) { + if (select(".quill-editor-full")) { new Quill(".quill-editor-full", { modules: { toolbar: [ @@ -181,24 +179,24 @@ /** * Initiate Bootstrap validation check */ - var needsValidation = document.querySelectorAll('.needs-validation') + const needsValidation = document.querySelectorAll(".needs-validation") Array.prototype.slice.call(needsValidation) - .forEach(function (form) { - form.addEventListener('submit', function (event) { + .forEach((form) => { + form.addEventListener("submit", (event) => { if (!form.checkValidity()) { event.preventDefault() event.stopPropagation() } - form.classList.add('was-validated') + form.classList.add("was-validated") }, false) }) /** * Initiate Datatables */ - const datatables = select('.datatable', true) + const datatables = select(".datatable", true) datatables.forEach(datatable => { new simpleDatatables.DataTable(datatable); }) @@ -206,11 +204,11 @@ /** * Autoresize echart charts */ - const mainContainer = select('#main'); + const mainContainer = select("#main"); if (mainContainer) { setTimeout(() => { - new ResizeObserver(function () { - select('.echart', true).forEach(getEchart => { + new ResizeObserver(() => { + select(".echart", true).forEach(getEchart => { echarts.getInstanceByDom(getEchart).resize(); }) }).observe(mainContainer); @@ -220,11 +218,11 @@ /** * Select all functionality */ - var btnSelectAll = document.getElementById("SelectAllBTN"); - var tableListCheckboxes = document.querySelectorAll(".deviceSelect"); + const btnSelectAll = document.getElementById("SelectAllBTN"); + const tableListCheckboxes = document.querySelectorAll(".deviceSelect"); function itemListCheckChanged(event) { - let isAllChecked = Array.from(tableListCheckboxes).map(itm => itm.checked); + const isAllChecked = Array.from(tableListCheckboxes).map(itm => itm.checked); if (isAllChecked.every(bool => bool == true)) { btnSelectAll.checked = true; btnSelectAll.indeterminate = false; @@ -241,7 +239,7 @@ }) btnSelectAll.addEventListener("click", event => { - let checkedState = event.target.checked; + const checkedState = event.target.checked; tableListCheckboxes.forEach(ckeckbox => ckeckbox.checked = checkedState); }) @@ -256,23 +254,23 @@ * Search form functionality */ window.addEventListener("DOMContentLoaded", () => { - var searchForm = document.getElementById("SearchForm") - var inputSearch = document.querySelector("#SearchForm > input") - var doSearch = true + const searchForm = document.getElementById("SearchForm") + const inputSearch = document.querySelector("#SearchForm > input") + const doSearch = true searchForm.addEventListener("submit", (event) => { event.preventDefault(); }) let timeoutHandler = setTimeout(() => { }, 1) - let dropdownList = document.getElementById("dropdown-search-list") - let defaultEmptySearch = document.getElementById("dropdown-search-list").innerHTML + const dropdownList = document.getElementById("dropdown-search-list") + const defaultEmptySearch = document.getElementById("dropdown-search-list").innerHTML inputSearch.addEventListener("input", (e) => { clearTimeout(timeoutHandler) - let searchText = e.target.value - if (searchText == '') { + const searchText = e.target.value + if (searchText == "") { document.getElementById("dropdown-search-list").innerHTML = defaultEmptySearch; return } @@ -315,7 +313,7 @@ const device = devices[i]; // See: ereuse_devicehub/resources/device/models.py - var verboseName = `${device.type} ${device.manufacturer} ${device.model}` + const verboseName = `${device.type} ${device.manufacturer} ${device.model}` const templateString = `
  • diff --git a/ereuse_devicehub/static/js/main_inventory.js b/ereuse_devicehub/static/js/main_inventory.js index bf2fdf43..4ba8ced2 100644 --- a/ereuse_devicehub/static/js/main_inventory.js +++ b/ereuse_devicehub/static/js/main_inventory.js @@ -1,7 +1,7 @@ -$(document).ready(function() { - var show_allocate_form = $("#allocateModal").data('show-action-form'); - var show_datawipe_form = $("#datawipeModal").data('show-action-form'); - var show_trade_form = $("#tradeLotModal").data('show-action-form'); +$(document).ready(() => { + const show_allocate_form = $("#allocateModal").data("show-action-form"); + const show_datawipe_form = $("#datawipeModal").data("show-action-form"); + const show_trade_form = $("#tradeLotModal").data("show-action-form"); if (show_allocate_form != "None") { $("#allocateModal .btn-primary").show(); newAllocate(show_allocate_form); @@ -18,7 +18,7 @@ $(document).ready(function() { }) function deviceSelect() { - var devices_count = $(".deviceSelect").filter(':checked').length; + const devices_count = $(".deviceSelect").filter(":checked").length; get_device_list(); if (devices_count == 0) { $("#addingLotModal .pol").show(); @@ -60,7 +60,7 @@ function deviceSelect() { } function removeLot() { - var devices = $(".deviceSelect"); + const devices = $(".deviceSelect"); if (devices.length > 0) { $("#btnRemoveLots .text-danger").show(); } else { @@ -70,10 +70,10 @@ function removeLot() { } function removeTag() { - var devices = $(".deviceSelect").filter(':checked'); - var devices_id = $.map(devices, function(x) { return $(x).attr('data')}); + const devices = $(".deviceSelect").filter(":checked"); + const devices_id = $.map(devices, (x) => $(x).attr("data")); if (devices_id.length == 1) { - var url = "/inventory/tag/devices/"+devices_id[0]+"/del/"; + const url = `/inventory/tag/devices/${devices_id[0]}/del/`; window.location.href = url; } else { $("#unlinkTagAlertModal").click(); @@ -81,8 +81,8 @@ function removeTag() { } function addTag() { - var devices = $(".deviceSelect").filter(':checked'); - var devices_id = $.map(devices, function(x) { return $(x).attr('data')}); + const devices = $(".deviceSelect").filter(":checked"); + const devices_id = $.map(devices, (x) => $(x).attr("data")); if (devices_id.length == 1) { $("#addingTagModal .pol").hide(); $("#addingTagModal .btn-primary").show(); @@ -95,20 +95,20 @@ function addTag() { } function newTrade(action) { - var title = "Trade " - var user_to = $("#user_to").data("email"); - var user_from = $("#user_from").data("email"); - if (action == 'user_from') { - title = 'Trade Incoming'; - $("#user_to").attr('readonly', 'readonly'); - $("#user_from").prop('readonly', false); - $("#user_from").val(''); + let title = "Trade " + const user_to = $("#user_to").data("email"); + const user_from = $("#user_from").data("email"); + if (action == "user_from") { + title = "Trade Incoming"; + $("#user_to").attr("readonly", "readonly"); + $("#user_from").prop("readonly", false); + $("#user_from").val(""); $("#user_to").val(user_to); - } else if (action == 'user_to') { - title = 'Trade Outgoing'; - $("#user_from").attr('readonly', 'readonly'); - $("#user_to").prop('readonly', false); - $("#user_to").val(''); + } else if (action == "user_to") { + title = "Trade Outgoing"; + $("#user_from").attr("readonly", "readonly"); + $("#user_to").prop("readonly", false); + $("#user_to").val(""); $("#user_from").val(user_from); } $("#tradeLotModal #title-action").html(title); @@ -137,44 +137,44 @@ function newDataWipe(action) { } function get_device_list() { - var devices = $(".deviceSelect").filter(':checked'); + const devices = $(".deviceSelect").filter(":checked"); /* Insert the correct count of devices in actions form */ - var devices_count = devices.length; + const devices_count = devices.length; $("#datawipeModal .devices-count").html(devices_count); $("#allocateModal .devices-count").html(devices_count); $("#actionModal .devices-count").html(devices_count); /* Insert the correct value in the input devicesList */ - var devices_id = $.map(devices, function(x) { return $(x).attr('data')}).join(","); - $.map($(".devicesList"), function(x) { + const devices_id = $.map(devices, (x) => $(x).attr("data")).join(","); + $.map($(".devicesList"), (x) => { $(x).val(devices_id); }); /* Create a list of devices for human representation */ - var computer = { + const computer = { "Desktop": "", "Laptop": "", }; - list_devices = devices.map(function (x) { - var typ = $(devices[x]).data("device-type"); - var manuf = $(devices[x]).data("device-manufacturer"); - var dhid = $(devices[x]).data("device-dhid"); + list_devices = devices.map((x) => { + let typ = $(devices[x]).data("device-type"); + const manuf = $(devices[x]).data("device-manufacturer"); + const dhid = $(devices[x]).data("device-dhid"); if (computer[typ]) { typ = computer[typ]; }; - return typ + " " + manuf + " " + dhid; + return `${typ } ${ manuf } ${ dhid}`; }); - description = $.map(list_devices, function(x) { return x }).join(", "); + description = $.map(list_devices, (x) => x).join(", "); $(".enumeration-devices").html(description); } function export_file(type_file) { - var devices = $(".deviceSelect").filter(':checked'); - var devices_id = $.map(devices, function(x) { return $(x).attr('data-device-dhid')}).join(","); + const devices = $(".deviceSelect").filter(":checked"); + const devices_id = $.map(devices, (x) => $(x).attr("data-device-dhid")).join(","); if (devices_id){ - var url = "/inventory/export/"+type_file+"/?ids="+devices_id; + const url = `/inventory/export/${type_file}/?ids=${devices_id}`; window.location.href = url; } else { $("#exportAlertModal").click(); @@ -200,11 +200,11 @@ async function processSelectedDevices() { */ manage(event, lotID, deviceListID) { event.preventDefault(); - const indeterminate = event.srcElement.indeterminate; + const {indeterminate} = event.srcElement; const checked = !event.srcElement.checked; - var found = this.list.filter(list => list.lotID == lotID)[0]; - var foundIndex = found != undefined ? this.list.findLastIndex(x => x.lotID == found.lotID) : -1; + const found = this.list.filter(list => list.lotID == lotID)[0]; + const foundIndex = found != undefined ? this.list.findLastIndex(x => x.lotID == found.lotID) : -1; if (checked) { if (found != undefined && found.type == "Remove") { @@ -215,10 +215,9 @@ async function processSelectedDevices() { this.list = this.list.filter(list => list.lotID != lotID); } } else { - this.list.push({ type: "Add", lotID: lotID, devices: deviceListID, isFromIndeterminate: indeterminate }); + this.list.push({ type: "Add", lotID, devices: deviceListID, isFromIndeterminate: indeterminate }); } - } else { - if (found != undefined && found.type == "Add") { + } else if (found != undefined && found.type == "Add") { if (found.isFromIndeterminate == true) { found.type = "Remove"; this.list[foundIndex] = found; @@ -226,9 +225,8 @@ async function processSelectedDevices() { this.list = this.list.filter(list => list.lotID != lotID); } } else { - this.list.push({ type: "Remove", lotID: lotID, devices: deviceListID, isFromIndeterminate: indeterminate }); + this.list.push({ type: "Remove", lotID, devices: deviceListID, isFromIndeterminate: indeterminate }); } - } if (this.list.length > 0) { document.getElementById("ApplyDeviceLots").classList.remove("disabled"); @@ -244,10 +242,10 @@ async function processSelectedDevices() { * @param {boolean} isError defines if a toast is a error */ notifyUser(title, toastText, isError) { - let toast = document.createElement("div"); - toast.classList = "alert alert-dismissible fade show " + (isError ? "alert-danger" : "alert-success"); + const toast = document.createElement("div"); + toast.classList = `alert alert-dismissible fade show ${ isError ? "alert-danger" : "alert-success"}`; toast.attributes["data-autohide"] = !isError; - toast.attributes["role"] = "alert"; + toast.attributes.role = "alert"; toast.style = "margin-left: auto; width: fit-content;"; toast.innerHTML = `${title}`; if (toastText && toastText.length > 0) { @@ -265,7 +263,7 @@ async function processSelectedDevices() { * Get actions and execute call request to add or remove devices from lots */ doActions() { - var requestCount = 0; // This is for count all requested api count, to perform reRender of table device list + let requestCount = 0; // This is for count all requested api count, to perform reRender of table device list this.list.forEach(async action => { if (action.type == "Add") { try { @@ -295,13 +293,13 @@ async function processSelectedDevices() { * Re-render list in table */ async reRenderTable() { - var newRequest = await Api.doRequest(window.location) + const newRequest = await Api.doRequest(window.location) - var tmpDiv = document.createElement("div") + const tmpDiv = document.createElement("div") tmpDiv.innerHTML = newRequest - var oldTable = Array.from(document.querySelectorAll("table.table > tbody > tr .deviceSelect")).map(x => x.attributes["data-device-dhid"].value) - var newTable = Array.from(tmpDiv.querySelectorAll("table.table > tbody > tr .deviceSelect")).map(x => x.attributes["data-device-dhid"].value) + const oldTable = Array.from(document.querySelectorAll("table.table > tbody > tr .deviceSelect")).map(x => x.attributes["data-device-dhid"].value) + const newTable = Array.from(tmpDiv.querySelectorAll("table.table > tbody > tr .deviceSelect")).map(x => x.attributes["data-device-dhid"].value) for (let i = 0; i < oldTable.length; i++) { if (!newTable.includes(oldTable[i])) { @@ -312,7 +310,7 @@ async function processSelectedDevices() { } } - var eventClickActions; + let eventClickActions; /** * Generates a list item with a correspondient checkbox state @@ -324,12 +322,12 @@ async function processSelectedDevices() { function templateLot(lotID, lot, selectedDevicesIDs, elementTarget, actions) { elementTarget.innerHTML = "" - var htmlTemplate = ` + const htmlTemplate = ` `; - var existLotList = selectedDevicesIDs.map(selected => lot.devices.includes(selected)); + const existLotList = selectedDevicesIDs.map(selected => lot.devices.includes(selected)); - var doc = document.createElement('li'); + const doc = document.createElement("li"); doc.innerHTML = htmlTemplate; if (selectedDevicesIDs.length <= 0) { @@ -342,21 +340,21 @@ async function processSelectedDevices() { doc.children[0].indeterminate = true; } - doc.children[0].addEventListener('mouseup', (ev) => actions.manage(ev, lotID, selectedDevicesIDs)); + doc.children[0].addEventListener("mouseup", (ev) => actions.manage(ev, lotID, selectedDevicesIDs)); elementTarget.append(doc); } - var listHTML = $("#LotsSelector") + const listHTML = $("#LotsSelector") // Get selected devices - var selectedDevicesIDs = $.map($(".deviceSelect").filter(':checked'), function (x) { return parseInt($(x).attr('data')) }); + const selectedDevicesIDs = $.map($(".deviceSelect").filter(":checked"), (x) => parseInt($(x).attr("data"))); if (selectedDevicesIDs.length <= 0) { - listHTML.html('
  • No devices selected
  • '); + listHTML.html("
  • No devices selected
  • "); return; } // Initialize Actions list, and set checkbox triggers - var actions = new Actions(); + const actions = new Actions(); if (eventClickActions) { document.getElementById("ApplyDeviceLots").removeEventListener(eventClickActions); } @@ -364,9 +362,9 @@ async function processSelectedDevices() { document.getElementById("ApplyDeviceLots").classList.add("disabled"); try { - listHTML.html('
  • ') - var devices = await Api.get_devices(selectedDevicesIDs); - var lots = await Api.get_lots(); + listHTML.html("
  • ") + const devices = await Api.get_devices(selectedDevicesIDs); + let lots = await Api.get_lots(); lots = lots.map(lot => { lot.devices = devices @@ -375,10 +373,10 @@ async function processSelectedDevices() { return lot; }) - listHTML.html(''); + listHTML.html(""); lots.forEach(lot => templateLot(lot.id, lot, selectedDevicesIDs, listHTML, actions)); } catch (error) { console.log(error); - listHTML.html('
  • Error feching devices and lots
    (see console for more details)
  • '); + listHTML.html("
  • Error feching devices and lots
    (see console for more details)
  • "); } }