Ograničenje konekcija BE emulatora, sopstveni kontekst fiskalizacije nezavisan od prekida zahteva, validacija porta na setup stranici, serverska optimizacija kratke pretrage bez eval-a, testovi

This commit is contained in:
2026-07-13 15:10:02 +02:00
parent bc60288a0d
commit 9cf4e66f00
24 changed files with 619 additions and 40 deletions
+12
View File
@@ -21,6 +21,18 @@ window.addEventListener('pageshow', function(e) {
});
});
// otvara nativni date/time picker na BILO KOJI klik unutar polja, ne samo na
// malu kalendar/sat ikonicu koju browser crta — u Firefoxu (i na nekim
// sistemima/rezolucijama) ta ikonica ima vrlo uzak klik-hitbox, pa korisnik
// klikne tik pored nje i pomisli da "klik na kalendar ne radi ništa".
// showPicker() zahteva user-gesture kontekst — click handler to ispunjava.
document.addEventListener('click', function(e) {
var el = e.target.closest('input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"], input[type="week"]');
if (el && typeof el.showPicker === 'function') {
try { el.showPicker(); } catch (err) { /* readonly/disabled i sl. — ignoriši */ }
}
});
// otvara/zatvara podmeni u sidebaru — radi i kad je sidebar skupljen i kad je proširen
// (sidebar ostaje u zatečenom stanju). U isto vreme sme biti otvoren samo jedan podmeni.
function ntechTogglePodmeni(btn) {
+1 -1
View File
@@ -20,7 +20,7 @@
<input type="text" name="pretraga" value="{{.Pretraga}}"
placeholder="Pretraži dobavljače..."
style="flex:1;"
hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
hx-trigger="keyup changed delay:150ms, search"
hx-get="/dobavljaci" hx-target="#dobavljaci-rezultati" hx-select="#dobavljaci-rezultati" hx-swap="innerHTML" hx-push-url="true">
</form>
</div>
+6 -2
View File
@@ -46,7 +46,7 @@
<canvas id="grafikon-prihod"></canvas>
</div>
<div style="overflow-x:auto;">
<div class="tabela-skrol">
<table class="tabela">
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
@@ -98,7 +98,7 @@
<div class="kartica izv-sekcija animiraj">
<div class="izv-naslov">Stari otvoreni nalozi — bez završetka duže od 14 dana</div>
{{if .StariNalozi}}
<div style="overflow-x:auto;">
<div class="tabela-skrol">
<table class="tabela">
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
@@ -143,6 +143,7 @@
<div class="kartica izv-grid-kartica animiraj">
<div class="izv-naslov">Najprodavaniji artikli — top 10</div>
{{if .TopArtikli}}
<div class="tabela-skrol">
<table class="tabela">
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
@@ -168,6 +169,7 @@
{{end}}
</tbody>
</table>
</div>
{{else}}
<div style="font-size:13px;color:var(--tekst-sporedni);padding:8px 0;">Nema podataka o prodaji.</div>
{{end}}
@@ -177,6 +179,7 @@
<div class="kartica izv-grid-kartica animiraj">
<div class="izv-naslov">Najvažniji klijenti — top 10</div>
{{if .TopKlijenti}}
<div class="tabela-skrol">
<table class="tabela">
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
@@ -199,6 +202,7 @@
{{end}}
</tbody>
</table>
</div>
{{else}}
<div style="font-size:13px;color:var(--tekst-sporedni);padding:8px 0;">Nema podataka o klijentima.</div>
{{end}}
+1 -1
View File
@@ -56,7 +56,7 @@
<div class="kartica animiraj">
{{if .Zapisi}}
<div class="tabela-omotac">
<div class="tabela-omotac tabela-skrol">
<table class="tabela">
<thead>
<tr>
+1 -1
View File
@@ -40,7 +40,7 @@
<input type="text" name="pretraga" value="{{.Filter.Pretraga}}"
placeholder="Pretraži po nazivu, šifri, barkodu, lokaciji..."
style="width:100%;"
hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
hx-trigger="keyup changed delay:150ms, search"
hx-get="{{.OsnovniUrl}}" hx-include="closest form" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;">
<select name="kategorija" style="flex:1;min-width:140px;"
+1 -1
View File
@@ -28,7 +28,7 @@
<input type="text" name="pretraga" value="{{.Pretraga}}"
placeholder="Pretraži troškove po nazivu ili šifri..."
style="width:100%;"
hx-get="/troskovi" hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
hx-get="/troskovi" hx-trigger="keyup changed delay:150ms, search"
hx-target="#troskovi-rezultati" hx-select="#troskovi-rezultati" hx-swap="innerHTML" hx-push-url="true">
</form>
+1 -1
View File
@@ -24,7 +24,7 @@
<input type="text" name="pretraga" value="{{.Pretraga}}"
placeholder="Pretraži usluge po nazivu ili šifri..."
style="width:100%;"
hx-get="/usluge" hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
hx-get="/usluge" hx-trigger="keyup changed delay:150ms, search"
hx-target="#usluge-rezultati" hx-select="#usluge-rezultati" hx-swap="innerHTML" hx-push-url="true">
</form>