feat: add hotone bool
This commit is contained in:
parent
79b3a2196c
commit
ecefc7931a
@ -11,3 +11,58 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 0.4em 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
tbody {
|
||||||
|
tr {
|
||||||
|
&:nth-child(even) {
|
||||||
|
background-color: #ececec;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
--size: 0.6em;
|
||||||
|
--pad: 0.2em;
|
||||||
|
width: calc((var(--size) * 2 + var(--pad)) * 2);
|
||||||
|
height: calc((var(--size) + var(--pad)) * 2);
|
||||||
|
border-radius: calc(var(--size) + var(--pad));
|
||||||
|
appearance: none;
|
||||||
|
background-color: #e1e1e1;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: "";
|
||||||
|
width: calc(var(--size) * 2);
|
||||||
|
height: calc(var(--size) * 2);
|
||||||
|
border-radius: calc(var(--size));
|
||||||
|
background-color: #9b9b9b;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: var(--pad);
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:checked {
|
||||||
|
background-color: #daf0d1;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
left: auto;
|
||||||
|
right: var(--pad);
|
||||||
|
background-color: #6ee74a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -23,13 +23,20 @@ class TracksTable {
|
|||||||
OPTIONS = {
|
OPTIONS = {
|
||||||
"language": ["fre", "eng"]
|
"language": ["fre", "eng"]
|
||||||
}
|
}
|
||||||
|
CONSTRAINTS = {
|
||||||
|
"flags/default": {
|
||||||
|
type: "hotone"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
constructor(table) {
|
constructor(table, callback) {
|
||||||
this.table = table
|
this.table = table
|
||||||
this.headers = this.table.querySelector("thead tr")
|
this.headers = this.table.querySelector("thead tr")
|
||||||
this.body = this.table.querySelector("tbody")
|
this.body = this.table.querySelector("tbody")
|
||||||
this.fields = []
|
this.fields = []
|
||||||
this.tracks = []
|
this.tracks = []
|
||||||
|
this.callback = callback
|
||||||
|
this.hotones = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
showTracks(tracks) {
|
showTracks(tracks) {
|
||||||
@ -45,7 +52,7 @@ class TracksTable {
|
|||||||
tr.dataset.i = i
|
tr.dataset.i = i
|
||||||
this.fields.forEach(field => {
|
this.fields.forEach(field => {
|
||||||
const td = tr.insertCell(-1)
|
const td = tr.insertCell(-1)
|
||||||
const input = this.makeInput(field, track[field.key])
|
const input = this.makeInput(field, track[field.key], i)
|
||||||
td.appendChild(input)
|
td.appendChild(input)
|
||||||
})
|
})
|
||||||
this.body.appendChild(tr)
|
this.body.appendChild(tr)
|
||||||
@ -81,7 +88,7 @@ class TracksTable {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
makeInput(field, value) {
|
makeInput(field, value, trackIdx) {
|
||||||
let input = document.createElement("input")
|
let input = document.createElement("input")
|
||||||
switch (field.type) {
|
switch (field.type) {
|
||||||
case "num":
|
case "num":
|
||||||
@ -97,6 +104,32 @@ class TracksTable {
|
|||||||
case "bool":
|
case "bool":
|
||||||
input.type = "checkbox"
|
input.type = "checkbox"
|
||||||
input.checked = value
|
input.checked = value
|
||||||
|
const hotone = this.CONSTRAINTS[field.key]?.type == "hotone"
|
||||||
|
|
||||||
|
if (hotone) {
|
||||||
|
if (value) {
|
||||||
|
if (field.key in this.hotones) {
|
||||||
|
alert("Error in metadata file: field ${field.name} is hotone but multiple tracks are enabled ")
|
||||||
|
}
|
||||||
|
this.hotones[field.key] = input
|
||||||
|
}
|
||||||
|
input.addEventListener("click", e => {
|
||||||
|
console.log("HOTONE")
|
||||||
|
if (!input.checked) {
|
||||||
|
console.log("Already checked, preventing uncheck")
|
||||||
|
e.preventDefault()
|
||||||
|
} else {
|
||||||
|
if (field.key in this.hotones) {
|
||||||
|
this.hotones[field.key].checked = false
|
||||||
|
this.hotones[field.key].dispatchEvent(new Event("change"))
|
||||||
|
}
|
||||||
|
this.hotones[field.key] = input
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
input.addEventListener("change", () => {
|
||||||
|
this.callback(trackIdx, field.key, input.checked)
|
||||||
|
})
|
||||||
break
|
break
|
||||||
|
|
||||||
case "sel":
|
case "sel":
|
||||||
@ -113,6 +146,7 @@ class TracksTable {
|
|||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
input.dataset.key = field.key
|
||||||
return input
|
return input
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -146,8 +180,12 @@ function displayData(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("load", () => {
|
window.addEventListener("load", () => {
|
||||||
audioTable = new TracksTable(document.getElementById("audio-tracks"))
|
audioTable = new TracksTable(document.getElementById("audio-tracks"), (i, key, value) => {
|
||||||
subtitleTable = new TracksTable(document.getElementById("subtitle-tracks"))
|
console.log(i, key, value)
|
||||||
|
})
|
||||||
|
subtitleTable = new TracksTable(document.getElementById("subtitle-tracks"), (i, key, value) => {
|
||||||
|
console.log(i, key, value)
|
||||||
|
})
|
||||||
|
|
||||||
const params = new URLSearchParams(window.location.search)
|
const params = new URLSearchParams(window.location.search)
|
||||||
const file = params.get("f")
|
const file = params.get("f")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user