From 02e93d6b90efc63d77044f9416a469a5b314d372 Mon Sep 17 00:00:00 2001 From: INOPIAE Date: Mon, 25 Jan 2021 16:16:15 +0100 Subject: [PATCH] upd: move cancel and finish button and add confirm question The change in schema.sql is needed to clean database due to a change implemented in another commit. Change-Id: I07320b8411837ae3caa29637ec3d657fc88012d8 --- sql/schema.sql | 1 + static/js/expert.js | 183 +++++++++++++++++++++++++++++++++++ templates/base.html | 1 + templates/single_motion.html | 27 +++--- tests/test_motion.py | 12 ++- 5 files changed, 209 insertions(+), 15 deletions(-) create mode 100644 static/js/expert.js diff --git a/sql/schema.sql b/sql/schema.sql index c3967a4..56055bc 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -22,6 +22,7 @@ CREATE TABLE motion (id serial NOT NULL, CREATE UNIQUE INDEX motion_ident ON motion (identifier); DROP TABLE IF EXISTS vote; +DROP TABLE IF EXISTS voteresult; DROP TYPE IF EXISTS "vote_type"; CREATE TYPE "vote_type" AS ENUM ('yes', 'no', 'abstain'); CREATE TABLE vote (motion_id INTEGER NOT NULL, diff --git a/static/js/expert.js b/static/js/expert.js new file mode 100644 index 0000000..a4add1a --- /dev/null +++ b/static/js/expert.js @@ -0,0 +1,183 @@ +(function() { + var modal = undefined; + + function showModal(content){ + var HTML = ``; + if(modal === undefined) { + modal = $(HTML); + modal.action = function(){}; + modal.appendTo("body"); + $(modal.get(0)).find(".modal-footer .btn-confirm").click(function(){ + modal.action(); + modal.modal("hide"); + }); + } + var m = $(modal.get(0)); + m.find(".modal-body").text($(content).attr("data-confirm")); + var reply = $(content).attr("data-reply").split(","); + m.find(".modal-footer .btn-cancel").text(reply[0]); + m.find(".modal-footer .btn-confirm").text(reply[1]); + modal.action=function(){ + content.confirmed=true; + $(content).click(); + }; + modal.modal("show"); + } + function initConfirm() { + $(".btn-confirm").click(function(){ + if(this.confirmed === true){ + return true; + } + showModal(this); + return false; + }); + } + function showExpert(isExpert) + { + var elements = document.getElementsByClassName("expert"); + for(var i = 0; elements.length > i; i++) + { + if(!isExpert) { + elements[i].setAttribute("class","expert experthidden"); + } else { + elements[i].setAttribute("class","expert"); + } + } + } + function initCertForm() { + if(document.getElementById("placeholderName") == null) { + return; + } + function getHint(id){ + var elem = document.getElementById(id); + if(elem === null) { + return null; + } + return $(elem).text(); + } + $("select[name=profile]").off("change"); + $("textarea[name=SANs]").off("keydown"); + $("textarea[name=SANs]").get(0).modified=false; + $("input[name=CN]").off("keydown"); + $("input[name=CN]").get(0).modified=false; + + var placeholderName = getHint("placeholderName"); + var defaultName = getHint("defaultName"); + var defaultEmail = getHint("defaultEmail"); + var defaultDomain = getHint("defaultDomain"); + if(defaultName === null) { + return; + } + $("textarea[name=SANs]").on("keydown", function(){ + this.modified = this.value !== ""; + }); + $("input[name=CN]").on("keydown", function(){ + this.modified = this.value !== ""; + }); + + var loginCheck = document.getElementById("login"); + $("select[name=profile]").change(function(){ + var val = this.value; + var sans = $("textarea[name=SANs]").get(0); + if(val.match(/client.*/)) { + loginCheck.checked = true; + loginCheck.disabled = false; + } else { + loginCheck.checked = false; + loginCheck.disabled = true; + } + if(val.match(/client.*|mail.*/)) { + if(!sans.modified) { + sans.value = "email:"+defaultEmail; + } + } else if(val.match(/server.*/)) { + if(!sans.modified) { + sans.value = defaultDomain === null ? "" : "dns:" + defaultDomain; + } + } + var cn = $("input[name=CN]").get(0); + if(val.match(/.*-a/)) { + if(!cn.modified) { + cn.value = defaultName; + } + }else{ + if(!cn.modified) { + cn.value = placeholderName; + } + } + }); + var children = $("select[name=profile]").get(0).children; + var target = "client-mail"; + for(var i=0; i < children.length; i++){ + if(children[i].value == "client-mail-a"){ + target = "client-mail-a"; + } + } + + $("select[name=profile]").get(0).value = target; + $("select[name=profile]").trigger("change"); + + } + function init(){ + showExpert(false); + initCertForm(); + var expert = document.getElementById("expertbox"); + if(expert !== null) { + expert.onchange = (function(expert){return function(){showExpert(expert.checked)}})(expert); + } + $(".card-activatable").map(function() { + var card = $(this); + var refresh = function(){ + var radio = this.type == "radio"; + if(radio && this.form.currentRadios === undefined) { + this.form.currentRadios = {}; + } + if(this.checked) { + card.find(".card-body").removeClass("d-none"); + if(radio) { + var rds = this.form.currentRadios; + if(rds[this.name] !== undefined){ + $(rds[this.name]).trigger("change"); + } + rds[this.name] = this; + } + } else { + card.find(".card-body").addClass("d-none"); + } + }; + card.find(".card-heading [type=\"checkbox\"]").map(refresh); + card.find(".card-heading [type=\"checkbox\"]").change(refresh); + card.find(".card-heading [type=\"radio\"]").map(refresh); + card.find(".card-heading [type=\"radio\"]").change(refresh); + return this.id; + }); + initConfirm(); + } + (function(oldLoad) { + if (oldLoad == undefined) { + window.onload = init; + } else { + window.onload = function() { + init(); + oldLoad(); + } + } + })(window.onload); + +})(); diff --git a/templates/base.html b/templates/base.html index 936e1cb..a689be9 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,6 +5,7 @@ +