|
|
@@ -149,11 +149,11 @@ $(() => {
|
|
|
return `${size} ${units[idx]}`;
|
|
|
}
|
|
|
|
|
|
- function displayMeta(key, value) {
|
|
|
+ function displayMeta(key, value, isRo) {
|
|
|
let li = document.createElement("li");
|
|
|
let type = value?.type || null;
|
|
|
- let val = (value?.value ? value.value : value) || null;
|
|
|
- if (!val)
|
|
|
+ let val = (value?.value ? value.value : value);
|
|
|
+ if (!val && val !== '')
|
|
|
return null;
|
|
|
if (type === 'date')
|
|
|
val = val.toLocaleString();
|
|
|
@@ -170,17 +170,39 @@ $(() => {
|
|
|
exposureTimeStr: "Exposure Time"
|
|
|
};
|
|
|
let keySpan = document.createElement('span');
|
|
|
- let valSpan = document.createElement('span');
|
|
|
- keySpan.classList.add("metaKey");
|
|
|
- valSpan.classList.add("metaVal");
|
|
|
+ let valSpan = document.createElement('div');
|
|
|
+ li.classList.add("row");
|
|
|
+ keySpan.className = "metaKey col-xl-12 col-4";
|
|
|
+ valSpan.className = "metaVal col-xl-12 col-8";
|
|
|
+ let inputGroup = document.createElement('form');
|
|
|
+ valSpan.appendChild(inputGroup);
|
|
|
+ inputGroup.classList.add('input-group');
|
|
|
keySpan.innerText = (keyTranslate[key] || (key[0].toUpperCase()+key.substr(1))) + ':';
|
|
|
- valSpan.innerText = val;
|
|
|
+ let valInput = document.createElement("input");
|
|
|
+ valInput.classList.add("form-control");
|
|
|
+ valInput.value = val;
|
|
|
+ valInput.disabled = isRo;
|
|
|
+ valInput.addEventListener('keyup', evt => evt.stopPropagation());
|
|
|
+ valInput.addEventListener('keydown', evt => evt.stopPropagation());
|
|
|
+ inputGroup.appendChild(valInput);
|
|
|
+ if (!isRo) {
|
|
|
+ let bt = document.createElement('button');
|
|
|
+ bt.className = 'btn btn-outline-secondary';
|
|
|
+ bt.type = 'button';
|
|
|
+ bt.innerHTML = '<i class="bi bi-pen"></i>';
|
|
|
+ inputGroup.appendChild(bt);
|
|
|
+ bt.addEventListener('click', () => MediaStorage.Instance.setMetaValue(fullPageMediaDisplayed.md5sum, key, valInput.value));
|
|
|
+ inputGroup.addEventListener('submit', evt => {
|
|
|
+ evt.preventDefault();
|
|
|
+ MediaStorage.Instance.setMetaValue(fullPageMediaDisplayed.md5sum, key, valInput.value);
|
|
|
+ });
|
|
|
+ }
|
|
|
li.appendChild(keySpan);
|
|
|
li.appendChild(valSpan);
|
|
|
return li;
|
|
|
}
|
|
|
|
|
|
- function displayMetas(metaData) {
|
|
|
+ function displayMetas(metaData, isRo) {
|
|
|
let metaList = document.createElement("ul");
|
|
|
|
|
|
metaData.libraryPath = null;
|
|
|
@@ -199,16 +221,23 @@ $(() => {
|
|
|
}
|
|
|
|
|
|
for (let i of [ "date", "dimension", "height", "width", "fileSize" ]) {
|
|
|
- let metaItem = displayMeta(i, metaData[i]);
|
|
|
+ let metaItem = displayMeta(i, metaData[i], true);
|
|
|
metaItem && metaList.appendChild(metaItem);
|
|
|
metaData[i] = null;
|
|
|
}
|
|
|
|
|
|
- // FIXME sort and filter
|
|
|
- for (let i in metaData) {
|
|
|
- let metaItem = displayMeta(i, metaData[i]);
|
|
|
+ for (let i of Object.keys(metaData).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()))) {
|
|
|
+ let metaItem = displayMeta(i, metaData[i], isRo || !MediaStorage.Instance.allMetaTypes[i]?.canWrite);
|
|
|
metaItem && metaList.appendChild(metaItem);
|
|
|
}
|
|
|
+
|
|
|
+ if (!isRo)
|
|
|
+ for (let i of ['geoCountry']) {
|
|
|
+ if (!metaData[i]) {
|
|
|
+ let metaItem = displayMeta(i, "", false);
|
|
|
+ metaItem && metaList.appendChild(metaItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
return metaList;
|
|
|
}
|
|
|
|
|
|
@@ -246,7 +275,7 @@ $(() => {
|
|
|
document.getElementById("pch-fullPagePreview").onceLoaded = ok;
|
|
|
document.getElementById("pch-fullPagePreview").src = imgUrl;
|
|
|
document.getElementById("pch-fullPageDetail").innerText = "";
|
|
|
- document.getElementById("pch-fullPageDetail").appendChild(displayMetas(Object.create(metaData || {})));
|
|
|
+ document.getElementById("pch-fullPageDetail").appendChild(displayMetas(Object.assign({}, metaData || {}), !writeAccess));
|
|
|
document.getElementById("pch-fullPageDetail").appendChild(displayTags(metaData?.fixedTags || [], metaData?.tags || [], writeAccess));
|
|
|
if (downloadLink) {
|
|
|
document.getElementById("pch-fullPageDetail-dlButton").classList.remove("hidden");
|