|
|
@@ -137,6 +137,70 @@ $(() => {
|
|
|
redraw(container, evt.detail);
|
|
|
});
|
|
|
|
|
|
+ function serializeFileSize(size) {
|
|
|
+ let units = [ 'o', 'Ko', 'Mo', 'Go', 'To' ];
|
|
|
+ let idx = 0;
|
|
|
+ while (size >= 800 && idx < units.length) {
|
|
|
+ ++idx;
|
|
|
+ size /= 1024;
|
|
|
+ }
|
|
|
+ size = Math.floor(size * 100) / 100;
|
|
|
+ return `${size} ${units[idx]}`;
|
|
|
+ }
|
|
|
+
|
|
|
+ function displayMeta(key, value) {
|
|
|
+ let li = document.createElement("li");
|
|
|
+ let type = value?.type || null;
|
|
|
+ let val = (value?.value ? value.value : value) || null;
|
|
|
+ if (!val)
|
|
|
+ return null;
|
|
|
+ if (type === 'date')
|
|
|
+ val = val.toLocaleString();
|
|
|
+ if (["dimension", "height", "width"].indexOf(key) >= 0)
|
|
|
+ val += ' px';
|
|
|
+ if (["fileSize"].indexOf(key) >= 0)
|
|
|
+ val = serializeFileSize(val);
|
|
|
+ let keyTranslate = {
|
|
|
+ fileSize: "File Size",
|
|
|
+ photochamberImport: "Photochamber Imported",
|
|
|
+ lensModel: "Lens Model",
|
|
|
+ exposureTimeStr: "Exposure Time"
|
|
|
+ };
|
|
|
+ let keyStr = keyTranslate[key] || (key[0].toUpperCase()+key.substr(1));
|
|
|
+ li.innerText = `${keyStr}: ${val}`;
|
|
|
+ return li;
|
|
|
+ }
|
|
|
+
|
|
|
+ function displayMetas(metaData) {
|
|
|
+ let metaList = document.createElement("ul");
|
|
|
+
|
|
|
+ metaData.libraryPath = null;
|
|
|
+
|
|
|
+ if (metaData.exposureTime && metaData.exposureTimeStr)
|
|
|
+ metaData.exposureTime = null;
|
|
|
+
|
|
|
+ if (metaData.date && metaData.dateTime)
|
|
|
+ metaData.dateTime = null;
|
|
|
+
|
|
|
+ if (metaData.height && metaData.width) {
|
|
|
+ metaData.dimension = { type: "string", value: `${metaData.width.value} x ${metaData.height.value}` }
|
|
|
+ metaData.height = metaData.width = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i of [ "date", "dimension", "height", "width", "fileSize" ]) {
|
|
|
+ let metaItem = displayMeta(i, metaData[i]);
|
|
|
+ metaItem && metaList.appendChild(metaItem);
|
|
|
+ metaData[i] = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // FIXME sort and filter
|
|
|
+ for (let i in metaData) {
|
|
|
+ let metaItem = displayMeta(i, metaData[i]);
|
|
|
+ metaItem && metaList.appendChild(metaItem);
|
|
|
+ }
|
|
|
+ return metaList;
|
|
|
+ }
|
|
|
+
|
|
|
function _displayMediaFullPage(fileName, imgUrl, metaData, downloadLink) {
|
|
|
return new Promise(ok => {
|
|
|
document.getElementById("pch-fullPagePreviewContainer").classList.add("loading");
|
|
|
@@ -144,13 +208,7 @@ $(() => {
|
|
|
document.getElementById("pch-fullPagePreview").onceLoaded = ok;
|
|
|
document.getElementById("pch-fullPagePreview").src = imgUrl;
|
|
|
document.getElementById("pch-fullPageDetail").innerText = "";
|
|
|
- let metaList = document.createElement("ul");
|
|
|
- for (let i in metaData || {}) {
|
|
|
- let li = document.createElement("li");
|
|
|
- li.innerText = `${i}: ${metaData[i]}`;
|
|
|
- metaList.appendChild(li);
|
|
|
- }
|
|
|
- document.getElementById("pch-fullPageDetail").appendChild(metaList);
|
|
|
+ document.getElementById("pch-fullPageDetail").appendChild(displayMetas(Object.create(metaData || {})));
|
|
|
if (downloadLink) {
|
|
|
document.getElementById("pch-fullPageDetail-dlButton").classList.remove("hidden");
|
|
|
document.getElementById("pch-fullPageDetail-dlButton").dataset["link"] = downloadLink;
|
|
|
@@ -183,9 +241,11 @@ $(() => {
|
|
|
document.getElementById("pch-fullPagePreview").parentNode.style.maxHeight = "100%";
|
|
|
let meta = {
|
|
|
...mediaItem.meta,
|
|
|
- date: mediaItem.date || undefined,
|
|
|
- filename: mediaItem.fileName || undefined
|
|
|
+ date: { type: 'date', value: mediaItem.date } || undefined,
|
|
|
+ filename: mediaItem.filename ? { type: 'string', value: mediaItem.fileName } : undefined
|
|
|
};
|
|
|
+ if (document.location.hash != `#${mediaItem.md5sum}`)
|
|
|
+ history.pushState({}, '', `#${mediaItem.md5sum}`);
|
|
|
return _displayMediaFullPage(mediaItem.fileName, `${mediaItem.thumbnail}?w=${requestSize.width}&h=${requestSize.height}&q=6`, meta, mediaItem.original);
|
|
|
}
|
|
|
|