var nopaque = {}; // nopaque ressources nopaque["socket"] = io(); nopaque["corpora"] = undefined; nopaque["corporaSubscribers"] = []; nopaque["jobs"] = undefined; nopaque["jobsSubscribers"] = []; nopaque["foreignCorpora"] = undefined; nopaque["foreignCorporaSubscribers"] = []; nopaque["foreignJobs"] = undefined; nopaque["foreignJobsSubscribers"] = []; // nopaque functions nopaque["forms"] = {}; nopaque["forms"]["init"] = function() { for (let form of document.querySelectorAll(".nopaque-form")) { form.addEventListener("submit", function(event) { event.preventDefault(); if (form.dataset.hasOwnProperty('loadingModal')) { let loadingModalElement = document.getElementById(form.dataset.loadingModal); M.Modal.getInstance(loadingModalElement).open(); } let data = {}; for (let input of form.querySelectorAll("input")) { if (input.type === "file") { file = input.files[0]; data[`${input.name}-wrapper`] = {"bytes": file, "name": file.name}; } else { data[input.name] = input.value; } } nopaque.socket.emit(`submit-${form.id}`, data); }); } } nopaque["navigation"] = {}; nopaque["navigation"]["init"] = function() { for (let entry of document.querySelectorAll("#slide-out a:not(.subheader)")) { if (entry.href === window.location.href) { entry.parentNode.classList.add("active"); } } } nopaque["toast"] = function(message, color="") { var toast; var toastActionElement; toast = M.toast({"classes": color, "html": `${message} `}); toastActionElement = toast.el.querySelector(`.toast-action[data-action="close"]`); if (toastActionElement) { toastActionElement.addEventListener("click", function() { toast.dismiss(); }); } } // socket event handlers nopaque.socket.on('init-corpora', function(msg) { nopaque.corpora = JSON.parse(msg); for (let subscriber of nopaque.corporaSubscribers) {subscriber._init(nopaque.corpora);} }); nopaque.socket.on('init-jobs', function(msg) { nopaque.jobs = JSON.parse(msg); for (let subscriber of nopaque.jobsSubscribers) {subscriber._init(nopaque.jobs);} }); nopaque.socket.on('update-corpora', function(msg) { var patch; patch = JSON.parse(msg); nopaque.corpora = jsonpatch.apply_patch(nopaque.corpora, patch); for (let subscriber of nopaque.corporaSubscribers) {subscriber._update(patch);} }); nopaque.socket.on('update-jobs', function(msg) { var patch; patch = JSON.parse(msg); nopaque.jobs = jsonpatch.apply_patch(nopaque.jobs, patch); for (let subscriber of nopaque.jobsSubscribers) {subscriber._update(patch);} }); nopaque.socket.on('init-foreign-corpora', function(msg) { nopaque.foreignCorpora = JSON.parse(msg); for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._init(nopaque.foreignCorpora);} }); nopaque.socket.on('init-foreign-jobs', function(msg) { nopaque.foreignJobs = JSON.parse(msg); for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._init(nopaque.foreignJobs);} }); nopaque.socket.on('update-foreign-corpora', function(msg) { var patch; patch = JSON.parse(msg); nopaque.foreignCorpora = jsonpatch.apply_patch(nopaque.foreignCorpora, patch); for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._update(patch);} }); nopaque.socket.on('update-foreign-jobs', function(msg) { var patch; patch = JSON.parse(msg); nopaque.foreignJobs = jsonpatch.apply_patch(nopaque.foreignJobs, patch); for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(patch);} }); document.addEventListener("DOMContentLoaded", function() { M.AutoInit(); M.CharacterCounter.init(document.querySelectorAll(`input[data-length][type="text"]`)); M.Dropdown.init(document.getElementById("nav-notifications"), {"alignment": "right", "constrainWidth": false, "coverTrigger": false}); M.Dropdown.init(document.getElementById("nav-account"), {"alignment": "right", "constrainWidth": false, "coverTrigger": false}); nopaque.forms.init(); nopaque.navigation.init(); nopaque.socket.emit("subscribe_user_ressources"); });