From: Christopher Coté Date: Thu, 10 Feb 2022 21:12:57 +0000 (-0500) Subject: add exif data X-Git-Url: http://git.entropealabs.com/?a=commitdiff_plain;h=d09d3e154d2f9a745605f48f24527da6ed65b4c5;p=photography.git add exif data --- diff --git a/src/index.js b/src/index.js index 0a1ffd9d..1a86b10f 100644 --- a/src/index.js +++ b/src/index.js @@ -140,10 +140,16 @@ function image(image){ hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: false } - dt.innerText = Intl.DateTimeFormat('en-US', options).format(image.datetime); + dt.innerHTML = Intl.DateTimeFormat('en-US', options).format(image.datetime); + + let exif = document.createElement("span"); + exif.className = "exif"; + exif.innerHTML = " ƒ" + image.aperture + " | " + secs(image.exposure_time) + " | " + image.focal_length + "mm | ISO" + image.iso; + w.appendChild(i); w.appendChild(u); w.appendChild(dt); + w.appendChild(exif) return w; } @@ -158,4 +164,16 @@ function tag(tag){ return t; } +function secs(time){ + if(time >= 1){ + return time + "\""; + }else if(time == 0){ + return "∞"; + }else{ + let den = 1 / time; + den = Math.floor(den); + return "1"+ den +"\""; + } +} + init(); diff --git a/www/index.html b/www/index.html index ce9a5e6c..6a1be22b 100644 --- a/www/index.html +++ b/www/index.html @@ -57,6 +57,12 @@ float: right; font-size: 10px; } + + span.exif{ + margin-top: 7px; + float: left; + font-size: 10px; + } #tags{ max-width: 900px; diff --git a/www/js/index.js b/www/js/index.js index f8f8423b..05ad9c18 100644 --- a/www/js/index.js +++ b/www/js/index.js @@ -1,2 +1,2 @@ -(()=>{var d=null,l={},o=[],f=null;function p(){g()}function g(){fetch("config.json").then(e=>e.json()).then(e=>_(e))}function _(e){d=e.media_server,E()}function E(){fetch("metadata.json").then(e=>e.json()).then(e=>C(e))}function C(e){e.forEach(t=>t.datetime=new Date(t.datetime)),e.sort((t,n)=>t.datetime{t.tags.forEach(n=>{l[n]=l[n]?l[n]:[],l[n].push(t)})}),w(),x(),j()}function w(){l.latest=[];for(var e=0;e<10;e++)l.latest.push(o[e])}function j(){let e=window.location.hash;e=e.substring(1),console.log(e),v(e)?s(e):y(e)?k(e):s("latest")}function v(e){return l[e]}function y(e){return o.find(t=>t.hash==e)}function s(e){window.scroll(0,0);let t=document.getElementById("media");for(u(e),r(e);t.firstChild;)t.removeChild(t.firstChild);f=e,l[e].forEach(n=>{let a=m(n);t.appendChild(a)})}function k(e){let t=document.getElementById("media");for(;t.firstChild;)t.removeChild(t.firstChild);let n=o.find(i=>i.hash==e),a=m(n);t.appendChild(a),r(n.hash)}function r(e){let n=e.split(" ").map(a=>a[0].toUpperCase()+a.substring(1)).join(" ");document.getElementById("tag").innerHTML=n}function x(){let e=document.getElementById("tags"),t=Object.keys(l);t.sort(),t.forEach(n=>{let a=B(n);e.appendChild(a)})}function m(e){let t=document.createElement("div");t.className="img";let n=document.createElement("img");n.src=d+e.path,n.onclick=h=>u(e.hash),n.style.height=e.height+"px";let a=document.createElement("ul");a.className="image-tags",e.tags.forEach(h=>{let c=document.createElement("li");c.innerText=h,c.className="img-tag",c.onclick=I=>s(h),a.appendChild(c)});let i=document.createElement("span");return i.className="datetime",i.innerText=e.datetime,t.appendChild(n),t.appendChild(a),t.appendChild(i),t}function u(e){window.location.hash=e}function B(e){let t=document.createElement("li");return t.innerText=e,t.onclick=n=>s(e),t}p();})(); +(()=>{var u=null,l={},s=[],p=null;function g(){_()}function _(){fetch("config.json").then(e=>e.json()).then(e=>E(e))}function E(e){u=e.media_server,C()}function C(){fetch("metadata.json").then(e=>e.json()).then(e=>w(e))}function w(e){e.forEach(t=>t.datetime=new Date(t.datetime)),e=e.sort((t,n)=>t.datetimen.datetime?-1:0),s=e,e.forEach(t=>{t.tags.forEach(n=>{l[n]=l[n]?l[n]:[],l[n].push(t)})}),y(),x(),j()}function y(){l.latest=[];for(var e=0;e<10;e++)l.latest.push(s[e])}function j(){let e=window.location.hash;e=e.substring(1),console.log(e),v(e)?o(e):I(e)?T(e):o("latest")}function v(e){return l[e]}function I(e){return s.find(t=>t.hash==e)}function o(e){window.scroll(0,0);let t=document.getElementById("media");for(f(e),h(e);t.firstChild;)t.removeChild(t.firstChild);p=e,l[e].forEach(n=>{let i=m(n);t.appendChild(i)})}function T(e){let t=document.getElementById("media");for(;t.firstChild;)t.removeChild(t.firstChild);let n=s.find(a=>a.hash==e),i=m(n);t.appendChild(i),h(n.hash)}function h(e){let n=e.split(" ").map(i=>i[0].toUpperCase()+i.substring(1)).join(" ");document.getElementById("tag").innerHTML=n}function x(){let e=document.getElementById("tags"),t=Object.keys(l);t.sort(),t.forEach(n=>{let i=N(n);e.appendChild(i)})}function m(e){let t=document.createElement("div");t.className="img";let n=document.createElement("img");n.src=u+e.path,n.onclick=d=>f(e.hash);let i=document.createElement("ul");i.className="image-tags",e.tags.forEach(d=>{let r=document.createElement("li");r.innerText=d,r.className="img-tag",r.onclick=k=>o(d),i.appendChild(r)});let a=document.createElement("span");a.className="datetime",options={year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1},a.innerHTML=Intl.DateTimeFormat("en-US",options).format(e.datetime);let c=document.createElement("span");return c.className="exif",c.innerHTML=" \u0192"+e.aperture+" | "+b(e.exposure_time)+" | "+e.focal_length+"mm | ISO"+e.iso,t.appendChild(n),t.appendChild(i),t.appendChild(a),t.appendChild(c),t}function f(e){window.location.hash=e}function N(e){let t=document.createElement("li");return t.innerText=e,t.onclick=n=>o(e),t}function b(e){if(e>=1)return e+'"';if(e==0)return"∞";{let t=1/e;return t=Math.floor(t),"1"+t+'"'}}g();})(); //# sourceMappingURL=index.js.map diff --git a/www/js/index.js.map b/www/js/index.js.map index 1b5762fe..c004dd24 100644 --- a/www/js/index.js.map +++ b/www/js/index.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../src/index.js"], - "sourcesContent": ["let server = null;\nlet tags = {};\nlet media = [];\nlet current_tag = null;\nlet current_hash = null;\n\nfunction init(){\n get_config();\n}\n\nfunction get_config(){\n fetch(\"config.json\")\n .then(result => result.json())\n .then(data => handle_config(data))\n}\n\nfunction handle_config(data){\n server = data.media_server;\n get_metadata();\n}\n\nfunction get_metadata(){\n fetch(\"metadata.json\")\n .then(result => result.json())\n .then(data => process_media(data))\n}\n\nfunction process_media(items){\n items.forEach(i => i.datetime = new Date(i.datetime));\n items.sort((a, b) => a.datetime < b.datetime);\n media = items;\n items.forEach(i => {\n i.tags.forEach(t => {\n tags[t] = tags[t] ? tags[t] : [];\n tags[t].push(i);\n })\n });\n create_latest_ten();\n create_tags();\n parse_hash();\n}\n\nfunction create_latest_ten(){\n tags[\"latest\"] = []\n for(var i=0; i<10; i++){\n tags[\"latest\"].push(media[i]);\n }\n}\n\nfunction parse_hash(){\n let hash = window.location.hash;\n hash = hash.substring(1);\n console.log(hash)\n if(is_tag(hash)){\n show_tag(hash);\n }else if(is_image(hash)){\n show_image(hash);\n }else{\n show_tag(\"latest\");\n }\n}\n\nfunction is_tag(hash){\n return tags[hash];\n}\n\nfunction is_image(hash){\n return media.find(img => img.hash == hash);\n}\n\nfunction show_tag(tag){\n window.scroll(0, 0);\n let p = document.getElementById(\"media\");\n set_hash(tag);\n set_title(tag);\n while(p.firstChild){\n p.removeChild(p.firstChild);\n }\n current_tag = tag;\n tags[tag].forEach(i => {\n let img = image(i);\n p.appendChild(img);\n });\n}\n\nfunction show_image(hash){\n let p = document.getElementById(\"media\");\n while(p.firstChild){\n p.removeChild(p.firstChild);\n }\n let img = media.find(img => img.hash == hash)\n let i = image(img);\n p.appendChild(i);\n set_title(img.hash);\n}\n\nfunction set_title(tag){\n let words = tag.split(\" \");\n let t = words.map((word) => word[0].toUpperCase() + word.substring(1)).join(\" \");\n document.getElementById(\"tag\").innerHTML = t;\n}\n\nfunction create_tags(){\n let p = document.getElementById(\"tags\");\n let ta = Object.keys(tags);\n ta.sort();\n ta.forEach(t => {\n let ta = tag(t);\n p.appendChild(ta);\n })\n}\n\nfunction image(image){\n let w = document.createElement(\"div\");\n w.className = \"img\";\n let i = document.createElement(\"img\");\n i.src = server + image.path;\n i.onclick = (e) => set_hash(image.hash);\n i.style.height = image.height + \"px\";\n let u = document.createElement(\"ul\");\n u.className = \"image-tags\";\n image.tags.forEach(t => {\n let l = document.createElement(\"li\");\n l.innerText = t;\n l.className = \"img-tag\";\n l.onclick = (e) => show_tag(t);\n u.appendChild(l);\n });\n let dt = document.createElement(\"span\");\n dt.className = \"datetime\";\n dt.innerText = image.datetime;\n w.appendChild(i);\n w.appendChild(u);\n w.appendChild(dt);\n return w;\n}\n\nfunction set_hash(hash){\n window.location.hash = hash;\n}\n\nfunction tag(tag){\n let t = document.createElement(\"li\");\n t.innerText = tag;\n t.onclick = (e) => show_tag(tag);\n return t;\n}\n\ninit();\n"], - "mappings": "MAAA,GAAI,GAAS,KACT,EAAO,GACP,EAAQ,GACR,EAAc,KAGlB,YAAe,CACb,IAGF,YAAqB,CACnB,MAAM,eACH,KAAK,GAAU,EAAO,QACtB,KAAK,GAAQ,EAAc,IAGhC,WAAuB,EAAK,CAC1B,EAAS,EAAK,aACd,IAGF,YAAuB,CACrB,MAAM,iBACH,KAAK,GAAU,EAAO,QACtB,KAAK,GAAQ,EAAc,IAGhC,WAAuB,EAAM,CAC3B,EAAM,QAAQ,GAAK,EAAE,SAAW,GAAI,MAAK,EAAE,WAC3C,EAAM,KAAK,CAAC,EAAG,IAAM,EAAE,SAAW,EAAE,UACpC,EAAQ,EACR,EAAM,QAAQ,GAAK,CACjB,EAAE,KAAK,QAAQ,GAAK,CAClB,EAAK,GAAK,EAAK,GAAK,EAAK,GAAK,GAC9B,EAAK,GAAG,KAAK,OAGjB,IACA,IACA,IAGF,YAA4B,CAC1B,EAAK,OAAY,GACjB,OAAQ,GAAE,EAAG,EAAE,GAAI,IACjB,EAAK,OAAU,KAAK,EAAM,IAI9B,YAAqB,CACnB,GAAI,GAAO,OAAO,SAAS,KAC3B,EAAO,EAAK,UAAU,GACtB,QAAQ,IAAI,GACZ,AAAG,EAAO,GACR,EAAS,GACL,AAAG,EAAS,GAChB,EAAW,GAEX,EAAS,UAIb,WAAgB,EAAK,CACnB,MAAO,GAAK,GAGd,WAAkB,EAAK,CACrB,MAAO,GAAM,KAAK,GAAO,EAAI,MAAQ,GAGvC,WAAkB,EAAI,CACpB,OAAO,OAAO,EAAG,GACjB,GAAI,GAAI,SAAS,eAAe,SAGhC,IAFA,EAAS,GACT,EAAU,GACJ,EAAE,YACN,EAAE,YAAY,EAAE,YAElB,EAAc,EACd,EAAK,GAAK,QAAQ,GAAK,CACrB,GAAI,GAAM,EAAM,GAChB,EAAE,YAAY,KAIlB,WAAoB,EAAK,CACvB,GAAI,GAAI,SAAS,eAAe,SAChC,KAAM,EAAE,YACN,EAAE,YAAY,EAAE,YAElB,GAAI,GAAM,EAAM,KAAK,GAAO,EAAI,MAAQ,GACpC,EAAI,EAAM,GACd,EAAE,YAAY,GACd,EAAU,EAAI,MAGhB,WAAmB,EAAI,CAErB,GAAI,GAAI,AADI,EAAI,MAAM,KACR,IAAI,AAAC,GAAS,EAAK,GAAG,cAAgB,EAAK,UAAU,IAAI,KAAK,KAC5E,SAAS,eAAe,OAAO,UAAY,EAG7C,YAAsB,CACpB,GAAI,GAAI,SAAS,eAAe,QAC5B,EAAK,OAAO,KAAK,GACrB,EAAG,OACH,EAAG,QAAQ,GAAK,CACd,GAAI,GAAK,EAAI,GACb,EAAE,YAAY,KAIlB,WAAe,EAAM,CACnB,GAAI,GAAI,SAAS,cAAc,OAC/B,EAAE,UAAY,MACd,GAAI,GAAI,SAAS,cAAc,OAC/B,EAAE,IAAM,EAAS,EAAM,KACvB,EAAE,QAAU,AAAC,GAAM,EAAS,EAAM,MAClC,EAAE,MAAM,OAAS,EAAM,OAAS,KAChC,GAAI,GAAI,SAAS,cAAc,MAC/B,EAAE,UAAY,aACd,EAAM,KAAK,QAAQ,GAAK,CACtB,GAAI,GAAI,SAAS,cAAc,MAC/B,EAAE,UAAY,EACd,EAAE,UAAY,UACd,EAAE,QAAU,AAAC,GAAM,EAAS,GAC5B,EAAE,YAAY,KAEhB,GAAI,GAAK,SAAS,cAAc,QAChC,SAAG,UAAY,WACf,EAAG,UAAY,EAAM,SACrB,EAAE,YAAY,GACd,EAAE,YAAY,GACd,EAAE,YAAY,GACP,EAGT,WAAkB,EAAK,CACrB,OAAO,SAAS,KAAO,EAGzB,WAAa,EAAI,CACf,GAAI,GAAI,SAAS,cAAc,MAC/B,SAAE,UAAY,EACd,EAAE,QAAU,AAAC,GAAM,EAAS,GACrB,EAGT", + "sourcesContent": ["let server = null;\nlet tags = {};\nlet media = [];\nlet current_tag = null;\nlet current_hash = null;\n\nfunction init(){\n get_config();\n}\n\nfunction get_config(){\n fetch(\"config.json\")\n .then(result => result.json())\n .then(data => handle_config(data))\n}\n\nfunction handle_config(data){\n server = data.media_server;\n get_metadata();\n}\n\nfunction get_metadata(){\n fetch(\"metadata.json\")\n .then(result => result.json())\n .then(data => process_media(data))\n}\n\nfunction process_media(items){\n items.forEach(i => i.datetime = new Date(i.datetime));\n items = items.sort((a, b) => {\n if(a.datetime < b.datetime){\n return 1;\n }else if(a.datetime > b.datetime){\n return -1;\n }else{\n return 0;\n }\n });\n media = items;\n items.forEach(i => {\n i.tags.forEach(t => {\n tags[t] = tags[t] ? tags[t] : [];\n tags[t].push(i);\n })\n });\n create_latest_ten();\n create_tags();\n parse_hash();\n}\n\nfunction create_latest_ten(){\n tags[\"latest\"] = []\n for(var i=0; i<10; i++){\n tags[\"latest\"].push(media[i]);\n }\n}\n\nfunction parse_hash(){\n let hash = window.location.hash;\n hash = hash.substring(1);\n console.log(hash)\n if(is_tag(hash)){\n show_tag(hash);\n }else if(is_image(hash)){\n show_image(hash);\n }else{\n show_tag(\"latest\");\n }\n}\n\nfunction is_tag(hash){\n return tags[hash];\n}\n\nfunction is_image(hash){\n return media.find(img => img.hash == hash);\n}\n\nfunction show_tag(tag){\n window.scroll(0, 0);\n let p = document.getElementById(\"media\");\n set_hash(tag);\n set_title(tag);\n while(p.firstChild){\n p.removeChild(p.firstChild);\n }\n current_tag = tag;\n tags[tag].forEach(i => {\n let img = image(i);\n p.appendChild(img);\n });\n}\n\nfunction show_image(hash){\n let p = document.getElementById(\"media\");\n while(p.firstChild){\n p.removeChild(p.firstChild);\n }\n let img = media.find(img => img.hash == hash)\n let i = image(img);\n p.appendChild(i);\n set_title(img.hash);\n}\n\nfunction set_title(tag){\n let words = tag.split(\" \");\n let t = words.map((word) => word[0].toUpperCase() + word.substring(1)).join(\" \");\n document.getElementById(\"tag\").innerHTML = t;\n}\n\nfunction create_tags(){\n let p = document.getElementById(\"tags\");\n let ta = Object.keys(tags);\n ta.sort();\n ta.forEach(t => {\n let ta = tag(t);\n p.appendChild(ta);\n })\n}\n\nfunction image(image){\n let w = document.createElement(\"div\");\n w.className = \"img\";\n let i = document.createElement(\"img\");\n i.src = server + image.path;\n i.onclick = (e) => set_hash(image.hash);\n let u = document.createElement(\"ul\");\n u.className = \"image-tags\";\n image.tags.forEach(t => {\n let l = document.createElement(\"li\");\n l.innerText = t;\n l.className = \"img-tag\";\n l.onclick = (e) => show_tag(t);\n u.appendChild(l);\n });\n let dt = document.createElement(\"span\");\n dt.className = \"datetime\";\n options = {\n year: 'numeric', month: 'numeric', day: 'numeric',\n hour: 'numeric', minute: 'numeric', second: 'numeric',\n hour12: false\n }\n dt.innerHTML = Intl.DateTimeFormat('en-US', options).format(image.datetime);\n\n let exif = document.createElement(\"span\");\n exif.className = \"exif\";\n exif.innerHTML = \" \u0192\" + image.aperture + \" | \" + secs(image.exposure_time) + \" | \" + image.focal_length + \"mm | ISO\" + image.iso;\n\n w.appendChild(i);\n w.appendChild(u);\n w.appendChild(dt);\n w.appendChild(exif)\n return w;\n}\n\nfunction set_hash(hash){\n window.location.hash = hash;\n}\n\nfunction tag(tag){\n let t = document.createElement(\"li\");\n t.innerText = tag;\n t.onclick = (e) => show_tag(tag);\n return t;\n}\n\nfunction secs(time){\n if(time >= 1){\n return time + \"\\\"\";\n }else if(time == 0){\n return \"∞\";\n }else{\n let den = 1 / time;\n den = Math.floor(den);\n return \"1\"+ den +\"\\\"\";\n }\n}\n\ninit();\n"], + "mappings": "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", "names": [] }