Fungujici editor polozek
This commit is contained in:
0
administrace/.htaccess
Normal file → Executable file
0
administrace/.htaccess
Normal file → Executable file
0
administrace/data/katalog-26032301.xml
Normal file → Executable file
0
administrace/data/katalog-26032301.xml
Normal file → Executable file
10
administrace/index.html
Normal file → Executable file
10
administrace/index.html
Normal file → Executable file
@@ -47,20 +47,16 @@ input,select,button {
|
||||
</head>
|
||||
<body >
|
||||
<select id="fileSelect">
|
||||
<option value="">-- vyber soubor --</option>
|
||||
<option value="JCH">Katalog-2026-03-23.xml</option>
|
||||
<option value="JCH">Katalog-2026-03-21.xml</option>
|
||||
<option value="JCH">Katalog-2026-02-15.xml</option>
|
||||
<option value="JCH">Katalog-2026-01-01.xml</option>
|
||||
</select>
|
||||
|
||||
<button id="loadkata" onclick="naplnitKatalog()">Načíst Katalog</button>
|
||||
<button id="savekata">Ulozit Katalog</button>
|
||||
<button id="presentkata">Vystavit Katalog</button>
|
||||
<button id="savekata" onclick="ulozitKatalog()">Ulozit Katalog</button>
|
||||
<button id="presentkata" onclick="vystavitKatalog()">Vystavit Katalog</button>
|
||||
<button class="pridat-kategorii" style="">Pridat Kategorii</button>
|
||||
|
||||
|
||||
<div id="telo">
|
||||
</body>
|
||||
</html>
|
||||
<script src="../js/jquery-3.4.1.js"></script>
|
||||
<script src="katalog.js"></script>
|
||||
|
||||
318
administrace/katalog.js
Normal file → Executable file
318
administrace/katalog.js
Normal file → Executable file
@@ -1,55 +1,54 @@
|
||||
|
||||
function katalogToXML(katalog) {
|
||||
let xml = '<katalog>';
|
||||
|
||||
Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
xml += `<kategorie nazev="${kategorie}">`;
|
||||
|
||||
Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
xml += `<produkt nazev="${nazev}">`;
|
||||
Object.entries(data).forEach(([key, value]) => {
|
||||
xml += `<${key}>${value}</${key}>`;
|
||||
});
|
||||
xml += `</produkt>`;
|
||||
});
|
||||
|
||||
xml += `</kategorie>`;
|
||||
});
|
||||
|
||||
xml += '</katalog>';
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
||||
function xmlToKatalog(xmlString) {
|
||||
const parser = new DOMParser();
|
||||
const xmlDoc = parser.parseFromString(xmlString, "application/xml");
|
||||
const katalog = {};
|
||||
|
||||
xmlDoc.querySelectorAll('kategorie').forEach(kat => {
|
||||
const kNazev = kat.getAttribute('nazev');
|
||||
katalog[kNazev] = {};
|
||||
|
||||
kat.querySelectorAll('produkt').forEach(prod => {
|
||||
const pNazev = prod.getAttribute('nazev');
|
||||
const data = {};
|
||||
|
||||
prod.childNodes.forEach(node => {
|
||||
if(node.nodeType === 1) { // ELEMENT_NODE
|
||||
const key = node.nodeName;
|
||||
let value = node.textContent;
|
||||
// pokus převést čísla
|
||||
if(!isNaN(value)) value = Number(value);
|
||||
data[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
katalog[kNazev][pNazev] = data;
|
||||
});
|
||||
});
|
||||
|
||||
return katalog;
|
||||
}
|
||||
// function katalogToXML(katalog) {
|
||||
// let xml = '<katalog>';
|
||||
//
|
||||
// Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
// xml += `<kategorie nazev="${kategorie}">`;
|
||||
//
|
||||
// Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
// xml += `<produkt nazev="${nazev}">`;
|
||||
// Object.entries(data).forEach(([key, value]) => {
|
||||
// xml += `<${key}>${value}</${key}>`;
|
||||
// });
|
||||
// xml += `</produkt>`;
|
||||
// });
|
||||
//
|
||||
// xml += `</kategorie>`;
|
||||
// });
|
||||
//
|
||||
// xml += '</katalog>';
|
||||
// return xml;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// function xmlToKatalog(xmlString) {
|
||||
// const parser = new DOMParser();
|
||||
// const xmlDoc = parser.parseFromString(xmlString, "application/xml");
|
||||
// const katalog = {};
|
||||
//
|
||||
// xmlDoc.querySelectorAll('kategorie').forEach(kat => {
|
||||
// const kNazev = kat.getAttribute('nazev');
|
||||
// katalog[kNazev] = {};
|
||||
//
|
||||
// kat.querySelectorAll('produkt').forEach(prod => {
|
||||
// const pNazev = prod.getAttribute('nazev');
|
||||
// const data = {};
|
||||
//
|
||||
// prod.childNodes.forEach(node => {
|
||||
// if(node.nodeType === 1) { // ELEMENT_NODE
|
||||
// const key = node.nodeName;
|
||||
// let value = node.textContent;
|
||||
// // pokus převést čísla
|
||||
// if(!isNaN(value)) value = Number(value);
|
||||
// data[key] = value;
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// katalog[kNazev][pNazev] = data;
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// return katalog;
|
||||
// }
|
||||
|
||||
function uuidv4() {
|
||||
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
|
||||
@@ -157,13 +156,48 @@ document.addEventListener("click", function(event) {
|
||||
}
|
||||
if(event.target.classList.contains("ulozit-katalog")) {
|
||||
// tady se bude implementovat ulozeni katalogu do XML
|
||||
console.log("FF")
|
||||
console.log(document.getElementById("katalog"))
|
||||
}
|
||||
});
|
||||
|
||||
function ulozitKatalog() {
|
||||
let katalog = {}
|
||||
$("#katalog").children().each(function(i) {
|
||||
let kategorie = $(this).find("input[id^='nazev-']").first().val();
|
||||
let produkty = {}
|
||||
$(this).find(".polozka").each(function(){
|
||||
let polozka = {}
|
||||
let nazev = $(this).find("input[id^='nazev-']").first().val()
|
||||
polozka["nazev"] = nazev
|
||||
polozka["rozmery"] = $(this).find("input[id^='rozmery-']").first().val()
|
||||
polozka["cena"] = $(this).find("input[id^='cena-']").first().val()
|
||||
polozka["cenadph"] = $(this).find("input[id^='cenadph-']").first().val()
|
||||
polozka["cenaks"] = $(this).find("input[id^='cenaks-']").first().val()
|
||||
polozka["mj"] = $(this).find("select[id^='mj-'] :selected").val()
|
||||
produkty[nazev] = polozka
|
||||
})
|
||||
katalog[kategorie] = produkty
|
||||
})
|
||||
|
||||
function vyrobPolozku(nazev, cena, mj, rozmery) {
|
||||
data = {"security_token":"jebatceckyhajzel", "akce":"nahraj", "katalog": katalog}
|
||||
url = "http://localhost/skripty/katalog.php"
|
||||
dataType = "json"
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: JSON.stringify(data),
|
||||
dataType: "json",
|
||||
contentType: "application/json; charset=utf-8",
|
||||
success: function(x, status, xhr) {
|
||||
console.log(x)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function vyrobPolozku(nazev, cena, mj, rozmery, cenadph = -1, cenaks = -1) {
|
||||
|
||||
let uuid = uuidv4()
|
||||
let btnDel = document.createElement("button");
|
||||
@@ -195,9 +229,11 @@ function vyrobPolozku(nazev, cena, mj, rozmery) {
|
||||
let cenaPolozkySDPH = document.createElement("input")
|
||||
cenaPolozkySDPH.setAttribute("type", "text")
|
||||
cenaPolozkySDPH.id = "cenadph-" + uuid
|
||||
cenaPolozkySDPH.value = (cena >= 0) ? cenadph : 0
|
||||
let cenaPolozkyKs = document.createElement("input")
|
||||
cenaPolozkyKs.setAttribute("type", "text")
|
||||
cenaPolozkyKs.id = "cenaks-" + uuid
|
||||
cenaPolozkyKs.value = (cena >= 0) ? cenaks : 0
|
||||
|
||||
let mjPolozky = document.createElement("select")
|
||||
mjPolozky.id = "mj-" + uuid
|
||||
@@ -226,6 +262,21 @@ function vyrobPolozku(nazev, cena, mj, rozmery) {
|
||||
return nova
|
||||
}
|
||||
|
||||
function nactiKatalogy() {
|
||||
url = "http://localhost/skripty/katalog.php"
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function(x, status, xhr) {
|
||||
for(i = 0; i < x.length; i++) {
|
||||
option = '<option value="'+ x[i] + '">' + x[i] + '</option>';
|
||||
$("#fileSelect").append(option)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function vyrobKategorii(nazev) {
|
||||
let uuid = uuidv4()
|
||||
let kategorie = document.createElement("div")
|
||||
@@ -263,130 +314,69 @@ function vyrobKatalog() {
|
||||
return kat
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Vygenerovat ze vzorovych dat
|
||||
// Tady se nepredpoklada dopocitani ceny s DPH a za kus
|
||||
// Cena s DPH a za kus bude ulozena v datech predem vyrobeneho katalogu
|
||||
let kata = vyrobKatalog()
|
||||
|
||||
|
||||
function naplnitKatalog() {
|
||||
let potvrzeni = confirm("Nacist vybrany katalog?\r !! Neulozene zmeny budou ztraceny !!")
|
||||
if(! potvrzeni) {
|
||||
return
|
||||
}
|
||||
document.getElementById("katalog").innerHTML=""
|
||||
let katalog = {
|
||||
"Prkna": {
|
||||
"Prkna 2/15/300 JCH": {
|
||||
"rozmery": "2/15/300",
|
||||
"cena": 100,
|
||||
"mj": "m3"
|
||||
},
|
||||
"Prkna 2/15/400": {
|
||||
"rozmery": "2/15/400",
|
||||
"cena": 110,
|
||||
"mj": "m3"
|
||||
},
|
||||
"Prkna 2/15/500": {
|
||||
"rozmery": "2/15/500",
|
||||
"cena": 120,
|
||||
"mj": "m3"
|
||||
}
|
||||
},
|
||||
"Palubky": {
|
||||
"palubky 2/14/400": {
|
||||
"rozmery": "2/14/400",
|
||||
"cena": 200,
|
||||
"mj": "m3"
|
||||
},
|
||||
"palubky 2/14/500": {
|
||||
"rozmery": "2/14/500",
|
||||
"cena": 210,
|
||||
"mj": "m3"
|
||||
}
|
||||
},
|
||||
"Hranoly": {
|
||||
"hranol 20/20/200": {
|
||||
"rozmery": "20/20/200",
|
||||
"cena": 300,
|
||||
"mj": "m3"
|
||||
},
|
||||
"hranol 25/25/200": {
|
||||
"rozmery": "25/25/200",
|
||||
"cena": 310,
|
||||
"mj": "m3"
|
||||
}
|
||||
|
||||
let katalog;
|
||||
data = {"security_token":"jebatceckyhajzel", "akce":"obsah", "soubor": $("#fileSelect :selected").val()}
|
||||
url = "http://localhost/skripty/katalog.php"
|
||||
dataType = "json"
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: JSON.stringify(data),
|
||||
dataType: "json",
|
||||
contentType: "application/json; charset=utf-8",
|
||||
success: function(x, status, xhr) {
|
||||
katalog = JSON.parse(x)
|
||||
Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
let kat = vyrobKategorii(kategorie)
|
||||
katProdCont = kat.getElementsByClassName("polozky")[0]
|
||||
Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
let prod = vyrobPolozku(nazev, data.cena, data.mj, data.rozmery, data.cenadph, data.cenaks)
|
||||
katProdCont.appendChild(prod)
|
||||
});
|
||||
kata.appendChild(kat)
|
||||
});
|
||||
}
|
||||
}
|
||||
Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
let kat = vyrobKategorii(kategorie)
|
||||
katProdCont = kat.getElementsByClassName("polozky")[0]
|
||||
Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
let prod = vyrobPolozku(nazev, data.cena, data.mj, data.rozmery)
|
||||
katProdCont.appendChild(prod)
|
||||
});
|
||||
kata.appendChild(kat)
|
||||
|
||||
});
|
||||
|
||||
return kata
|
||||
}
|
||||
|
||||
function vystavitKatalog() {
|
||||
let soubor = $("#fileSelect :selected").val()
|
||||
let potvrzeni = confirm("Zverejnit katalog " + soubor + " na web ?")
|
||||
if(! potvrzeni) {
|
||||
return
|
||||
}
|
||||
|
||||
data = {"security_token":"jebatceckyhajzel", "akce":"zverejni", "soubor": soubor}
|
||||
url = "http://localhost/skripty/katalog.php"
|
||||
dataType = "json"
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: JSON.stringify(data),
|
||||
dataType: "json",
|
||||
contentType: "application/json; charset=utf-8",
|
||||
});
|
||||
}
|
||||
|
||||
document.getElementById("telo").appendChild(kata)
|
||||
|
||||
// let pridavatko = document.createElement("button");
|
||||
// pridavatko.className = "pridat-kategorii"
|
||||
// pridavatko.textContent = "Pridat Kategorii"
|
||||
// document.getElementById("katalog").appendChild(pridavatko)
|
||||
|
||||
//document.getElementById("telo").appendChild(ukladatko)
|
||||
|
||||
// console.log(katalogToXML(katalog))
|
||||
//
|
||||
// XML='<katalog><kategorie nazev="Prkna"><produkt nazev="Prkna 2/15/300"><cena>100</cena><mj>m3</mj></produkt><produkt nazev="Prkna 2/15/400"><cena>110</cena><mj>m3</mj></produkt><produkt nazev="Prkna 2/15/500"><cena>120</cena><mj>m3</mj></produkt></kategorie><kategorie nazev="Palubky"><produkt nazev="palubky 2/14/400"><cena>200</cena><mj>m3</mj></produkt><produkt nazev="palubky 2/14/500"><cena>210</cena><mj>m3</mj></produkt></kategorie><kategorie nazev="Hranoly"><produkt nazev="hranol 20/20/200"><cena>300</cena><mj>m3</mj></produkt><produkt nazev="hranol 25/25/200"><cena>310</cena><mj>m3</mj></produkt></kategorie></katalog>'
|
||||
//
|
||||
// console.log(xmlToKatalog(XML))
|
||||
|
||||
|
||||
|
||||
// Tohle je GPT funkcionalita pro management souboru
|
||||
/*
|
||||
const select = document.getElementById('fileSelect');
|
||||
const output = document.getElementById('output');
|
||||
const button = document.getElementById('loadBtn');
|
||||
|
||||
// načtení seznamu souborů
|
||||
async function loadFileList() {
|
||||
const res = await fetch('/api/files');
|
||||
const files = await res.json();
|
||||
|
||||
// filtr jen XML (klidně to nech na backendu)
|
||||
const xmlFiles = files.filter(f => f.name.endsWith('.xml'));
|
||||
|
||||
xmlFiles.forEach(file => {
|
||||
const option = document.createElement('option');
|
||||
option.value = file.name;
|
||||
option.textContent = file.name;
|
||||
select.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
// načtení konkrétního souboru
|
||||
async function loadSelectedFile() {
|
||||
const fileName = select.value;
|
||||
|
||||
if (!fileName) {
|
||||
alert('Nevybral jsi soubor');
|
||||
return;
|
||||
}
|
||||
|
||||
const res = await fetch(`/api/file?name=${encodeURIComponent(fileName)}`);
|
||||
const data = await res.text(); // XML → text
|
||||
|
||||
output.textContent = data;
|
||||
}
|
||||
|
||||
// eventy
|
||||
button.addEventListener('click', loadSelectedFile);
|
||||
|
||||
// init
|
||||
loadFileList();*/
|
||||
$(document).ready(function () {
|
||||
nactiKatalogy()
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user