redesign for mulituser

change validation concept (client and server)
using entities
This commit is contained in:
Markus
2026-10-06 08:55:35 +02:00
parent 14e050e4ba
commit 995e2ec111
41 changed files with 2402 additions and 1223 deletions

View File

@@ -1,67 +1,71 @@
function newCat(){
$('#editor').removeClass('d-none');
$("#id").val(0);
tree = document.getElementById('tree');
editor = document.getElementById("editor");
var elementTop = $('#editor').offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
if (!(elementBottom > viewportTop && elementTop < viewportBottom))
editor.scrollIntoView( {behavior: "smooth" });
function moveEditor(){
treepos = 90 - document.getElementById("tree").getBoundingClientRect().top;
editor.style.position = 'relative';
editor.style.top = treepos+'px';
}
function scrollToEditor(){
let editor = document.getElementById("editor");
editor.scrollIntoView( {behavior: "smooth" });
}
$(function () {
$('.tree li:has(ul)').addClass('parent_li').find(' > span');
$('.tree li.parent_li > span').on('click', function (e) {
var children = $(this).parent('li.parent_li').find(' > ul > li');
if (children.is(":visible")) {
children.hide('fast');
// $(this).find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
} else {
children.show('fast');
// $(this).find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
}
e.stopPropagation();
});
$("span").on('click', function(e){
$('#editor').removeClass('d-none');
bookable = ($(this).attr('data-bookable') == "f")?false:true;
lkz = ($(this).attr('data-lkz') == 0)?false:true;
type = $(this).attr('data-type');
pid = $(this).attr('data-pid');
id = $(this).attr('data-id');
description = $(this).attr('data-description');
typeAccount = (type === "account") ? true : false;
typeInput = (type === "input") ? true : false;
typeOutput = (type === "output") ? true : false;
$('#bookable').prop('checked', bookable);
$('#typeInput').prop('checked', typeInput);
$('#typeOutput').prop('checked', typeOutput);
$('#typeAccount').prop('checked', typeAccount);
$('#lkz').prop('checked', lkz);
$("#parent").val(pid).change();
$("#id").val(id);
$("#description").val(description).change();
tree = document.getElementById('tree');
editor = document.getElementById("editor");
var elementTop = $('#editor').offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
if (!(elementBottom > viewportTop && elementTop < viewportBottom))
editor.scrollIntoView( {behavior: "smooth" });
//$('#parent').prop('selected', pid);
function newCat(){
document.getElementById("editor").classList.remove("d-none");
document.getElementById("id").value = 0;
document.getElementById("bookable").checked = true;
document.getElementById("account").checked = false;
document.getElementById("monitor").checked = false;
document.getElementById("deleted_at").checked = false;
document.getElementById("parent").value = 0;
document.getElementById("description").value = "";
// scrollEditor();
}
// title: "Edit Account",
// placement: 'bottom',
// html: true,
// content: $('[data-name="popover-content"]')
document.addEventListener("DOMContentLoaded", function(event) {
editor = document.getElementById("editor");
document.querySelectorAll('.tree li:has(ul)').forEach((single) => {
single.classList.add("parent_li");
single.getElementsByTagName("i")[0].classList.add("fa-square-minus");
});
document.querySelectorAll(".tree span").forEach((spa) => {
spa.addEventListener("dblclick", (event) => {
const viewportWidth = document.documentElement.clientWidth;
if (viewportWidth < 768)
scrollToEditor();
else
moveEditor();
editor.classList.remove("d-none");
document.getElementById("bookable").checked = event.target.getAttribute("data-bookable")=="true";
document.getElementById("account").checked = event.target.getAttribute("data-account")=="true";
document.getElementById("monitor").checked = event.target.getAttribute("data-monitor")=="true";
document.getElementById("deleted_at").checked = event.target.getAttribute("data-deleted")!== "";
document.getElementById("id").value = event.target.getAttribute("data-id");
document.getElementById("parent").value = event.target.getAttribute("data-pid");
document.getElementById("description").value = event.target.getAttribute("data-description");
// scrollEditor();
});
});
document.querySelectorAll('.tree li.parent_li > span, .tree li.parent_li > i').forEach((parent) => {
parent.addEventListener("click",(event) => {
let single = event.target.parentElement.querySelector('ul,li');
let visible = single.classList.toggle("d-none");
if (visible) {
event.target.parentElement.querySelector("i").classList.add("fa-square-plus");
event.target.parentElement.querySelector("i").classList.remove("fa-square-minus");
} else {
event.target.parentElement.querySelector("i").classList.add("fa-square-minus");
event.target.parentElement.querySelector("i").classList.remove("fa-square-plus");
}
});
});
document.getElementById("viewdeleted").addEventListener("click",(event) => {
document.querySelectorAll(".tree span").forEach((spa) => {
if (event.currentTarget.checked && spa.getAttribute("data-deleted")!== "")
spa.parentElement.classList.remove("d-none");
else if ((!event.currentTarget.checked) && spa.getAttribute("data-deleted")!== "")
spa.parentElement.classList.add("d-none");
});
});
});