fix: closes #37

This commit is contained in:
Andre Henriques 2023-10-10 11:10:49 +01:00
parent 8d5f2a829a
commit 1229ad5373
3 changed files with 94 additions and 23 deletions

View File

@ -15,6 +15,13 @@ function tabs() {
elm.classList.remove("selected"); elm.classList.remove("selected");
} }
child.classList.add("selected"); child.classList.add("selected");
for (const childElm of child.parentElement.children) {
if (childElm.classList.contains("selected")) {
childElm.classList.remove("selected")
}
}
document.querySelector(`.tabs .content[data-tab="${ document.querySelector(`.tabs .content[data-tab="${
child.getAttribute("data-tab") child.getAttribute("data-tab")
}"]`)?.classList.add("selected"); }"]`)?.classList.add("selected");
@ -41,6 +48,55 @@ function tabs() {
} }
} }
for (const elm of document.querySelectorAll(".tabs-header")) {
let count = 0;
let selected = 0;
for (const child of elm.children[0].children) {
if (child.tagName == "BUTTON") {
count++;
if (child.classList.contains("selected")) {
selected++;
}
if (!child.getAttribute("data-armed")) {
child.addEventListener("click", () => {
if (!child.classList.contains("selected")) {
for (const elm of child.parentElement.children) {
elm.classList.remove("selected");
}
child.classList.add("selected");
for (const childElm of child.parentElement.parentElement.children) {
if (childElm.classList.contains("selected")) {
childElm.classList.remove("selected")
}
}
document.querySelector(`.tabs-header .content[data-tab="${
child.getAttribute("data-tab")
}"]`)?.classList.add("selected");
}
});
child.setAttribute("data-armed", "true")
}
}
}
if (selected > 1 || selected == 0) {
for (const child of elm.children) {
child.classList.remove("selected");
}
for (const child of elm.children[0].children) {
if (child.tagName == "BUTTON") {
child.classList.add("selected");
document.querySelector(`.tabs .content[data-tab="${
child.getAttribute("data-tab")
}"]`)?.classList.add("selected");
break;
}
}
}
}
} }
function load() { function load() {
for (const elm of document.querySelectorAll("form > button")) { for (const elm of document.querySelectorAll("form > button")) {

View File

@ -126,8 +126,9 @@
{{ if eq (len .Classes) 0 }} {{ if eq (len .Classes) 0 }}
TODO CREATE TABLE TODO CREATE TABLE
{{else}} {{else}}
<div class="tabs"> <div class="tabs-header">
{{/* Handle the case where there are to many buttons */}} {{/* Handle the case where there are to many buttons */}}
<div class="header">
{{ range .Classes }} {{ range .Classes }}
{{/* TODO Auto Load 1st */}} {{/* TODO Auto Load 1st */}}
<button <button
@ -135,22 +136,31 @@
hx-target=".content[data-tab='{{ .Name }}']" hx-target=".content[data-tab='{{ .Name }}']"
hx-swap="innerHTML" hx-swap="innerHTML"
hx-headers='{"REQUEST-TYPE": "html"}' hx-headers='{"REQUEST-TYPE": "html"}'
hx-trigger="click"
class="tab" class="tab"
data-tab="{{ .Name }}"> data-tab="{{ .Name }}">
{{ .Name }} {{ .Name }}
</button> </button>
{{ end }} {{ end }}
{{ range .Classes }} </div>
{{ range $i, $a := .Classes }}
{{ if eq $i 0}}
<div
hx-get="/models/data/list?id={{ .Id }}"
hx-target=".content[data-tab='{{ $a.Name }}']"
hx-swap="innerHTML"
hx-headers='{"REQUEST-TYPE": "html"}'
hx-trigger="load"
class="content"
data-tab="{{ $a.Name }}">
</div>
{{ else }}
<div <div
class="content" class="content"
data-tab="{{ .Name }}" data-tab="{{ $a.Name }}" >
hx-get="/models/data/list?id={{ .Id }}"
hx-target=".content[data-tab='{{ .Name }}']"
hx-trigger="load"
hx-swap="innerHTML"
hx-headers='{"REQUEST-TYPE": "html"}'>
</div> </div>
{{ end }} {{ end }}
{{ end }}
</div> </div>
{{end}} {{end}}
{{ end }} {{ end }}

View File

@ -391,6 +391,11 @@ table tr td .button {
gap: 0 5px; gap: 0 5px;
} }
.tabs-header .header {
display: flex;
overflow-x: scroll;
}
.tabs .content { .tabs .content {
display: none; display: none;
padding: 5px; padding: 5px;