diff --git a/output/about.html b/output/about.html index 799b9e8..f4231d0 100644 --- a/output/about.html +++ b/output/about.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + About Page @@ -194,7 +194,12 @@ + + + + +
@@ -212,9 +217,9 @@
Updated: 2025-08-08 Fri 23:07
-
-

About

-
+
+

About

+

TODO

diff --git a/output/assets/scripts/bigger-picture.min.js b/output/assets/scripts/bigger-picture.min.js new file mode 100644 index 0000000..93bcaa7 --- /dev/null +++ b/output/assets/scripts/bigger-picture.min.js @@ -0,0 +1 @@ +var BiggerPicture=function(){function t(){}const n=t=>t;function e(t,n){for(const e in n)t[e]=n[e];return t}function o(t){return t()}function r(t){t.forEach(o)}function i(t){return"function"==typeof t}function c(t,n){return t!=t?n==n:t!==n}function s(n,e,o){n.u.t.push(((n,...e)=>{if(null==n)return t;const o=n.subscribe(...e);return o.unsubscribe?()=>o.unsubscribe():o})(e,o))}function u(n){return n&&i(n.destroy)?n.destroy:t}let l=()=>globalThis.performance.now(),a=t=>requestAnimationFrame(t);const p=new Set;function f(t){p.forEach((n=>{n.c(t)||(p.delete(n),n.f())})),0!==p.size&&a(f)}function d(t){let n;return 0===p.size&&a(f),{promise:new Promise((e=>{p.add(n={c:t,f:e})})),abort(){p.delete(n)}}}function m(t,n){t.appendChild(n)}function b(t,n,e){t.insertBefore(n,e||null)}function h(t){t.parentNode.removeChild(t)}function g(t){return document.createElement(t)}function x(){return document.createTextNode("")}function v(t,n,e,o){return t.addEventListener(n,e,o),()=>t.removeEventListener(n,e,o)}function w(t,n,e){null==e?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function y(t,n,e,o){null===e?t.style.removeProperty(n):t.style.setProperty(n,e)}function $(t,n,e){t.classList[e?"add":"remove"](n)}let k,_,M=0,S={};function z(t,n,e,o,r,i,c,s=0){const u=16.666/o;let l="{\n";for(let t=0;1>=t;t+=u){const o=n+(e-n)*i(t);l+=100*t+`%{${c(o,1-o)}}\n`}const a=l+`100% {${c(e,1-e)}}\n}`,p=`_bp_${Math.round(1e9*Math.random())}_${s}`;if(!S[p]){if(!k){const t=g("style");document.head.appendChild(t),k=t.sheet}S[p]=1,k.insertRule(`@keyframes ${p} ${a}`,k.cssRules.length)}const f=t.style.animation||"";return t.style.animation=`${f?f+", ":""}${p} ${o}ms linear ${r}ms 1 both`,M+=1,p}function I(t,n){t.style.animation=(t.style.animation||"").split(", ").filter(n?t=>0>t.indexOf(n):t=>-1===t.indexOf("_bp")).join(", "),n&&!--M&&a((()=>{if(M)return;let t=k.cssRules.length;for(;t--;)k.deleteRule(t);S={}}))}function P(t){_=t}const T=[],A=[],N=[],O=[],C=Promise.resolve();let E=0;function R(t){N.push(t)}const j=new Set;let q,F=0;function J(){const t=_;do{for(;T.length>F;){const t=T[F];F++,P(t),B(t.u)}for(P(null),T.length=0,F=0;A.length;)A.pop()();for(let t=0;N.length>t;t+=1){const n=N[t];j.has(n)||(j.add(n),n())}N.length=0}while(T.length);for(;O.length;)O.pop()();E=0,j.clear(),P(t)}function B(t){if(null!==t.l){t.update(),r(t.g);const n=t.v;t.v=[-1],t.l&&t.l.p(t.$,n),t.k.forEach(R)}}function D(){return q||(q=Promise.resolve(),q.then((()=>{q=null}))),q}function K(t,n,e){t.dispatchEvent(((t,n,e=0)=>{const o=document.createEvent("CustomEvent");return o.initCustomEvent(t,e,0,n),o})(`${n?"intro":"outro"}${e}`))}const L=new Set;let W;function X(){W={r:0,c:[],p:W}}function Y(){W.r||r(W.c),W=W.p}function G(t,n){t&&t.i&&(L.delete(t),t.i(n))}function H(t,n,e,o){if(t&&t.o){if(L.has(t))return;L.add(t),W.c.push((()=>{L.delete(t),o&&(e&&t.d(1),o())})),t.o(n)}}const Q={duration:0};function U(e,o,r){let c,s,u=o(e,r),a=0,p=0;function f(){c&&I(e,c)}function m(){const{delay:o=0,duration:r=300,_:i=n,M:m=t,css:b}=u||Q;b&&(c=z(e,0,1,r,o,i,b,p++)),m(0,1);const h=l()+o,g=h+r;s&&s.abort(),a=1,R((()=>K(e,1,"start"))),s=d((t=>{if(a){if(t>=g)return m(1,0),K(e,1,"end"),f(),a=0;if(t>=h){const n=i((t-h)/r);m(n,1-n)}}return a}))}let b=0;return{start(){b||(b=1,I(e),i(u)?(u=u(),D().then(m)):m())},S(){b=0},end(){a&&(f(),a=0)}}}function V(e,o,c){let s,u=o(e,c),a=1;const p=W;function f(){const{delay:o=0,duration:i=300,_:c=n,M:f=t,css:m}=u||Q;m&&(s=z(e,1,0,i,o,c,m));const b=l()+o,h=b+i;R((()=>K(e,0,"start"))),d((t=>{if(a){if(t>=h)return f(0,1),K(e,0,"end"),--p.r||r(p.c),0;if(t>=b){const n=c((t-b)/i);f(1-n,n)}}return a}))}return p.r+=1,i(u)?D().then((()=>{u=u(),f()})):f(),{end(t){t&&u.M&&u.M(1,0),a&&(s&&I(e,s),a=0)}}}function Z(t){t&&t.c()}function tt(t,n,e,c){const{l:s,I:u,t:l,k:a}=t.u;s&&s.m(n,e),c||R((()=>{const n=u.map(o).filter(i);l?l.push(...n):r(n),t.u.I=[]})),a.forEach(R)}function nt(t,n){const e=t.u;null!==e.l&&(r(e.t),e.l&&e.l.d(n),e.t=e.l=null,e.$=[])}function et(n,e,o,i,c,s,u,l=[-1]){const a=_;P(n);const p=n.u={l:null,$:null,P:s,update:t,T:c,bound:{},I:[],t:[],A:[],g:[],k:[],context:new Map(e.context||(a?a.u.context:[])),N:{},v:l,O:0,root:e.target||a.u.root};u&&u(p.root);let f=0;p.$=o?o(n,e.P||{},((t,e,...o)=>{const r=o.length?o[0]:e;return p.$&&c(p.$[t],p.$[t]=r)&&(!p.O&&p.bound[t]&&p.bound[t](r),f&&((t,n)=>{-1===t.u.v[0]&&(T.push(t),E||(E=1,C.then(J)),t.u.v.fill(0)),t.u.v[n/31|0]|=1<{const t=e.indexOf(n);-1!==t&&e.splice(t,1)}}C(t){this.R&&0!==Object.keys(t).length&&(this.u.O=1,this.R(t),this.u.O=0)}}function rt(t){const n=t-1;return n*n*n+1}function it(t,{delay:n=0,duration:e=400,_:o=rt,x:r=0,y:i=0,opacity:c=0}={}){const s=getComputedStyle(t),u=+s.opacity,l="none"===s.transform?"":s.transform,a=u*(1-c);return{delay:n,duration:e,_:o,css(t,n){return`\n\t\t\ttransform: ${l} translate(${(1-t)*r}px, ${(1-t)*i}px);\n\t\t\topacity: ${u-a*n}`}}}const ct=[];function st(n,e=t){let o;const r=new Set;function i(t){if(c(n,t)&&(n=t,o)){const t=!ct.length;for(const t of r)t[1](),ct.push(t,n);if(t){for(let t=0;ct.length>t;t+=2)ct[t][0](ct[t+1]);ct.length=0}}}return{set:i,update(t){i(t(n))},subscribe(c,s=t){const u=[c,s];return r.add(u),1===r.size&&(o=e(i)||t),c(n),()=>{r.delete(u),0===r.size&&(o(),o=null)}}}}function ut(t,n){if(t===n||t!=t)return()=>t;const e=typeof t;if(Array.isArray(t)){const e=n.map(((n,e)=>ut(t[e],n)));return t=>e.map((n=>n(t)))}if("number"===e){const e=n-t;return n=>t+n*e}}function lt(t,o={}){const r=st(t);let i,c=t;function s(s,u){if(null==t)return r.set(t=s),Promise.resolve();c=s;let a=i,p=0,{delay:f=0,duration:m=400,_:b=n,interpolate:h=ut}=e(e({},o),u);if(0===m)return a&&(a.abort(),a=null),r.set(t=c),Promise.resolve();const g=l()+f;let x;return i=d((n=>{if(g>n)return 1;p||(x=h(t,s),"function"==typeof m&&(m=m(t,s)),p=1),a&&(a.abort(),a=null);const e=n-g;return e>m?(r.set(t=s),0):(r.set(t=x(b(e/m))),1)})),i.promise}return{set:s,update(n,e){return s(n(c,t),e)},subscribe:r.subscribe}}const at=st(0),pt=globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches,ft=t=>({_:rt,duration:pt?0:t}),dt=t=>!t.thumb||`url(${t.thumb})`,mt=(t,n)=>{if(n){"string"==typeof n&&(n=JSON.parse(n));for(const e in n)t.setAttribute(e,n[e])}};function bt(t){let n,e,o;return{c(){n=g("div"),n.innerHTML='',w(n,"class","bp-load"),y(n,"background-image",dt(t[0]))},m(t,e){b(t,n,e),o=1},p(t,e){1&e&&y(n,"background-image",dt(t[0]))},i(t){o||(e&&e.end(1),o=1)},o(t){t&&(e=V(n,it,{duration:480})),o=0},d(t){t&&h(n),t&&e&&e.end()}}}function ht(n){let e,o;return{c(){e=g("div"),w(e,"class","bp-load"),y(e,"background-image",dt(n[0]))},m(t,n){b(t,e,n)},p(t,n){1&n&&y(e,"background-image",dt(t[0]))},i(t){o||R((()=>{o=U(e,it,{duration:480}),o.start()}))},o:t,d(t){t&&h(e)}}}function gt(t){let n,e,o=!t[1]&&bt(t),r=t[2]&&ht(t);return{c(){o&&o.c(),n=x(),r&&r.c(),e=x()},m(t,i){o&&o.m(t,i),b(t,n,i),r&&r.m(t,i),b(t,e,i)},p(t,[i]){t[1]?o&&(X(),H(o,1,1,(()=>{o=null})),Y()):o?(o.p(t,i),2&i&&G(o,1)):(o=bt(t),o.c(),G(o,1),o.m(n.parentNode,n)),t[2]?r?(r.p(t,i),4&i&&G(r,1)):(r=ht(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(r.d(1),r=null)},i(t){G(o),G(r)},o(t){H(o)},d(t){o&&o.d(t),t&&h(n),r&&r.d(t),t&&h(e)}}}function xt(t,n,e){let o;s(t,at,(t=>e(2,o=t)));let{j:r}=n,{loaded:i}=n;return t.R=t=>{"j"in t&&e(0,r=t.j),"loaded"in t&&e(1,i=t.loaded)},[r,i,o]}class vt extends ot{constructor(t){super(),et(this,t,xt,gt,c,{j:0,loaded:1})}}function wt(t){let n,e,o,i,c,s;return{c(){n=g("img"),w(n,"sizes",e=t[8].sizes||t[1]+"px"),w(n,"alt",t[7].alt)},m(e,o){b(e,n,o),i=1,c||(s=[u(t[21].call(null,n)),v(n,"error",t[27])],c=1)},p(t,o){(!i||2&o[0]&&e!==(e=t[8].sizes||t[1]+"px"))&&w(n,"sizes",e)},i(t){i||(o&&o.end(1),i=1)},o(t){o=V(n,it,{}),i=0},d(t){t&&h(n),t&&o&&o.end(),c=0,r(s)}}}function yt(t){let n,e;return n=new vt({P:{j:t[7],loaded:t[2]}}),{c(){Z(n.u.l)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};4&e[0]&&(o.loaded=t[2]),n.C(o)},i(t){e||(G(n.u.l,t),e=1)},o(t){H(n.u.l,t),e=0},d(t){nt(n,t)}}}function $t(t){let n,e,o,i,c,s,l=`translate3d(${t[0][0]/-2+t[6][0]}px, ${t[0][1]/-2+t[6][1]}px, 0)`,a=t[2]&&wt(t),p=t[3]&&yt(t);return{c(){n=g("div"),e=g("div"),a&&a.c(),o=x(),p&&p.c(),w(e,"class","bp-img"),y(e,"width",t[0][0]+"px"),y(e,"height",t[0][1]+"px"),$(e,"bp-drag",t[4]),$(e,"bp-canzoom",t[11]>1&&t[12]>t[0][0]),y(e,"background-image",dt(t[7])),y(e,"transform",l),w(n,"class","bp-img-wrap"),$(n,"bp-close",t[5])},m(r,l){b(r,n,l),m(n,e),a&&a.m(e,null),m(e,o),p&&p.m(e,null),i=1,c||(s=[u(t[20].call(null,e)),v(n,"wheel",t[15]),v(n,"pointerdown",t[16]),v(n,"pointermove",t[17]),v(n,"pointerup",t[19]),v(n,"pointercancel",t[18])],c=1)},p(t,r){t[2]?a?(a.p(t,r),4&r[0]&&G(a,1)):(a=wt(t),a.c(),G(a,1),a.m(e,o)):a&&(X(),H(a,1,1,(()=>{a=null})),Y()),t[3]?p?(p.p(t,r),8&r[0]&&G(p,1)):(p=yt(t),p.c(),G(p,1),p.m(e,null)):p&&(X(),H(p,1,1,(()=>{p=null})),Y()),(!i||1&r[0])&&y(e,"width",t[0][0]+"px"),(!i||1&r[0])&&y(e,"height",t[0][1]+"px"),(!i||16&r[0])&&$(e,"bp-drag",t[4]),(!i||6145&r[0])&&$(e,"bp-canzoom",t[11]>1&&t[12]>t[0][0]),65&r[0]&&l!==(l=`translate3d(${t[0][0]/-2+t[6][0]}px, ${t[0][1]/-2+t[6][1]}px, 0)`)&&y(e,"transform",l),(!i||32&r[0])&&$(n,"bp-close",t[5])},i(t){i||(G(a),G(p),i=1)},o(t){H(a),H(p),i=0},d(t){t&&h(n),a&&a.d(),p&&p.d(),c=0,r(s)}}}function kt(t,n,e){let o,r,i,c;s(t,at,(t=>e(26,i=t)));let{P:u}=n,{q:l}=n,{j:a,F:p,J:f,next:d,zoomed:m,container:b}=u;s(t,m,(t=>e(25,o=t)));let h,g,x,v,w,y,$,k,_,M,S,z=a.maxZoom||p.maxZoom||10,I=u.B(a),P=I[0],T=0;const A=+a.width,N=[],O=new Map,C=lt(I,ft(400));s(t,C,(t=>e(0,c=t)));const E=lt([0,0],ft(400));s(t,E,(t=>e(6,r=t)));const R=([t,n],o=c)=>{const r=(o[0]-b.w)/2,i=(o[1]-b.h)/2;return 0>r?t=0:t>r?l?(t=w?r+(t-r)/10:r)>r+20&&e(4,w=f()):t=r:-r>t&&(l?-r-20>(t=w?-r-(-r-t)/10:-r)&&e(4,w=d()):t=-r),0>i?n=0:n>i?n=i:-i>n&&(n=-i),[t,n]};function j(t=z,n){if(i)return;const o=I[0]*z;let s=c[0]+c[0]*t,u=c[1]+c[1]*t;if(t>0)s>o&&(s=o,u=I[1]*z),s>A&&(s=A,u=+a.height);else if(I[0]>s)return C.set(I),E.set([0,0]);let{x:l,y:p,width:f,height:d}=v.getBoundingClientRect();const m=n?n.clientX-l-f/2:0,b=n?n.clientY-p-d/2:0;l=s/f*-m+m,p=u/d*-b+b;const h=[s,u];C.set(h).then((()=>{e(1,P=Math.round(Math.max(P,s)))})),E.set(R([r[0]+l,r[1]+p],h))}Object.defineProperty(a,"zoom",{configurable:1,get(){return o},set(t){return j(t?z:-z)}});const q=t=>O.delete(t.pointerId);return t.R=t=>{"q"in t&&e(23,l=t.q)},t.u.update=()=>{if(16777217&t.u.v[0]&&m.set(c[0]-10>I[0]),117440512&t.u.v[0]&&i&&o&&!p.intro){const t=ft(480);E.set([0,0],t),C.set(I,t),e(5,S=1)}},[c,P,h,g,w,S,r,a,p,m,b,z,A,C,E,t=>{p.inline&&!o||(t.preventDefault(),j(t.deltaY/-300,t))},t=>{2!==t.button&&(t.preventDefault(),e(4,w=1),O.set(t.pointerId,t),$=t.clientX,k=t.clientY,_=r[0],M=r[1])},t=>{if(O.size>1)return e(4,w=0),p.noPinch?.(b.el)||(t=>{const[n,e]=O.set(t.pointerId,t).values(),o=Math.hypot(n.clientX-e.clientX,n.clientY-e.clientY);x=x||{clientX:(n.clientX+e.clientX)/2,clientY:(n.clientY+e.clientY)/2},j(((T||o)-o)/-35,x),T=o})(t);if(!w)return;let n=t.clientX,r=t.clientY;y=N.push({x:n,y:r})>2,n-=$,r-=k,o||(-90>r&&e(4,w=!p.noClose&&u.close()),30>Math.abs(r)&&(n>40&&e(4,w=f()),-40>n&&e(4,w=d()))),o&&y&&!i&&E.set(R([_+n,M+r]),{duration:0})},q,function(t){if(q(t),x&&(e(4,w=T=0),x=O.size?x:null),w){if(e(4,w=0),t.target===this&&!p.noClose)return u.close();if(y){const[t,n,e]=N.slice(-3);Math.hypot(n.x-e.x,n.y-e.y)>5&&E.set(R([r[0]-5*(t.x-e.x),r[1]-5*(t.y-e.y)]))}else p.onImageClick?.(b.el,a)||j(o?-z:z,t);y=0,N.length=0}},t=>{v=t,u.D((()=>{e(24,I=u.B(a)),!p.inline&&l||(C.set(I),E.set([0,0]))})),u.K(a).then((()=>{e(2,h=1),u.L()})),setTimeout((()=>{e(3,g=!h)}),250)},t=>{mt(t,a.attr),t.srcset=a.img},u,l,I,o,i,t=>p.onError?.(b,a,t)]}class _t extends ot{constructor(t){super(),et(this,t,kt,$t,c,{P:22,q:23},null,[-1,-1])}}function Mt(t){let n,e,o,i,c,s;return o=new vt({P:{j:t[2],loaded:t[0]}}),{c(){n=g("div"),e=g("iframe"),Z(o.u.l),w(e,"allow","autoplay; fullscreen"),w(e,"title",t[2].title),w(n,"class","bp-if"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px")},m(r,l){b(r,n,l),m(n,e),tt(o,n,null),i=1,c||(s=[u(t[3].call(null,e)),v(e,"load",t[5])],c=1)},p(t,[e]){const r={};1&e&&(r.loaded=t[0]),o.C(r),(!i||2&e)&&y(n,"width",t[1][0]+"px"),(!i||2&e)&&y(n,"height",t[1][1]+"px")},i(t){i||(G(o.u.l,t),i=1)},o(t){H(o.u.l,t),i=0},d(t){t&&h(n),nt(o),c=0,r(s)}}}function St(t,n,e){let o,r,{P:i}=n;const{j:c}=i,s=()=>e(1,r=i.B(c));return s(),i.D(s),[o,r,c,t=>{mt(t,c.attr),t.src=c.iframe},i,()=>e(0,o=1)]}class zt extends ot{constructor(t){super(),et(this,t,St,Mt,c,{P:4})}}function It(t){let n,e,o,r,i;return e=new vt({P:{j:t[2],loaded:t[0]}}),{c(){n=g("div"),Z(e.u.l),w(n,"class","bp-vid"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px"),y(n,"background-image",dt(t[2]))},m(c,s){b(c,n,s),tt(e,n,null),o=1,r||(i=u(t[3].call(null,n)),r=1)},p(t,[r]){const i={};1&r&&(i.loaded=t[0]),e.C(i),(!o||2&r)&&y(n,"width",t[1][0]+"px"),(!o||2&r)&&y(n,"height",t[1][1]+"px")},i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){t&&h(n),nt(e),r=0,i()}}}function Pt(t,n,e){let o,r,{P:i}=n;const{j:c,F:s,container:u}=i,l=()=>e(1,r=i.B(c));return l(),i.D(l),[o,r,c,t=>{let n;const r=(t,e)=>{Array.isArray(e)||(e=JSON.parse(e));for(const o of e){n||(n=document.createElement(o.type?.includes("audio")?"audio":"video"),mt(n,{controls:1,autoplay:1,playsinline:1,tabindex:"0"}),mt(n,c.attr));const e=document.createElement(t);mt(e,o),"source"==t&&(e.onError=t=>s.onError?.(u,c,t)),n.append(e)}};r("source",c.sources),r("track",c.tracks||[]),n.oncanplay=()=>e(0,o=1),t.append(n)},i]}class Tt extends ot{constructor(t){super(),et(this,t,Pt,It,c,{P:4})}}function At(n){let e,o,i,s,l,a,p,f,d,x=n[6].i,y=jt(n),k=n[0].length>1&&qt(n);return{c(){e=g("div"),o=g("div"),y.c(),s=g("div"),l=g("button"),k&&k.c(),w(l,"class","bp-x"),w(l,"title","Close"),w(l,"aria-label","Close"),w(s,"class","bp-controls"),w(e,"class","bp-wrap"),$(e,"bp-zoomed",n[10]),$(e,"bp-inline",n[8]),$(e,"bp-small",n[7]),$(e,"bp-noclose",n[5].noClose)},m(t,r){b(t,e,r),m(e,o),y.m(e,null),m(e,s),m(s,l),k&&k.m(s,null),p=1,f||(d=[v(l,"click",n[1]),u(n[14].call(null,e))],f=1)},p(n,o){64&o[0]&&c(x,x=n[6].i)?(X(),H(y,1,1,t),Y(),y=jt(n),y.c(),G(y,1),y.m(e,s)):y.p(n,o),n[0].length>1?k?k.p(n,o):(k=qt(n),k.c(),k.m(s,null)):k&&(k.d(1),k=null),(!p||1024&o[0])&&$(e,"bp-zoomed",n[10]),(!p||256&o[0])&&$(e,"bp-inline",n[8]),(!p||128&o[0])&&$(e,"bp-small",n[7]),(!p||32&o[0])&&$(e,"bp-noclose",n[5].noClose)},i(t){p||(i&&i.end(1),G(y),a&&a.end(1),p=1)},o(t){t&&(i=V(o,it,{duration:480})),H(y),t&&(a=V(s,it,{})),p=0},d(t){t&&h(e),t&&i&&i.end(),y.d(t),k&&k.d(),t&&a&&a.end(),f=0,r(d)}}}function Nt(n){let e,o=(n[6].html??n[6].element.outerHTML)+"";return{c(){e=g("div"),w(e,"class","bp-html")},m(t,n){b(t,e,n),e.innerHTML=o},p(t,n){64&n[0]&&o!==(o=(t[6].html??t[6].element.outerHTML)+"")&&(e.innerHTML=o)},i:t,o:t,d(t){t&&h(e)}}}function Ot(n){let e,o;return e=new zt({P:{P:n[13]()}}),{c(){Z(e.u.l)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){nt(e,t)}}}function Ct(n){let e,o;return e=new Tt({P:{P:n[13]()}}),{c(){Z(e.u.l)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){nt(e,t)}}}function Et(t){let n,e;return n=new _t({P:{P:t[13](),q:t[7]}}),{c(){Z(n.u.l)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};128&e[0]&&(o.q=t[7]),n.C(o)},i(t){e||(G(n.u.l,t),e=1)},o(t){H(n.u.l,t),e=0},d(t){nt(n,t)}}}function Rt(t){let n,e,o,r=t[6].caption+"";return{c(){n=g("div"),w(n,"class","bp-cap")},m(t,e){b(t,n,e),n.innerHTML=r,o=1},p(t,e){(!o||64&e[0])&&r!==(r=t[6].caption+"")&&(n.innerHTML=r)},i(t){o||(e&&e.end(1),o=1)},o(t){e=V(n,it,{duration:200}),o=0},d(t){t&&h(n),t&&e&&e.end()}}}function jt(t){let n,e,o,i,c,s,u,l,a;const p=[Et,Ct,Ot,Nt],f=[];function d(t,n){return t[6].img?0:t[6].sources?1:t[6].iframe?2:3}e=d(t),o=f[e]=p[e](t);let m=t[6].caption&&Rt(t);return{c(){n=g("div"),o.c(),m&&m.c(),s=x(),w(n,"class","bp-inner")},m(o,r){b(o,n,r),f[e].m(n,null),m&&m.m(o,r),b(o,s,r),u=1,l||(a=[v(n,"pointerdown",t[20]),v(n,"pointerup",t[21])],l=1)},p(t,r){let i=e;e=d(t),e===i?f[e].p(t,r):(X(),H(f[i],1,1,(()=>{f[i]=null})),Y(),o=f[e],o?o.p(t,r):(o=f[e]=p[e](t),o.c()),G(o,1),o.m(n,null)),t[6].caption?m?(m.p(t,r),64&r[0]&&G(m,1)):(m=Rt(t),m.c(),G(m,1),m.m(s.parentNode,s)):m&&(X(),H(m,1,1,(()=>{m=null})),Y())},i(e){u||(G(o),R((()=>{c&&c.end(1),i=U(n,t[12],1),i.start()})),G(m),u=1)},o(e){H(o),i&&i.S(),c=V(n,t[12],0),H(m),u=0},d(t){t&&h(n),f[e].d(),t&&c&&c.end(),m&&m.d(t),t&&h(s),l=0,r(a)}}}function qt(t){let n,e,o,i,c,s=`${t[4]+1} / ${t[0].length}`;return{c(){n=g("div"),e=g("button"),o=g("button"),w(n,"class","bp-count"),w(e,"class","bp-prev"),w(e,"title","Previous"),w(e,"aria-label","Previous"),w(o,"class","bp-next"),w(o,"title","Next"),w(o,"aria-label","Next")},m(r,u){b(r,n,u),n.innerHTML=s,b(r,e,u),b(r,o,u),i||(c=[v(e,"click",t[2]),v(o,"click",t[3])],i=1)},p(t,e){17&e[0]&&s!==(s=`${t[4]+1} / ${t[0].length}`)&&(n.innerHTML=s)},d(t){t&&h(n),t&&h(e),t&&h(o),i=0,r(c)}}}function Ft(t){let n,e,o=t[0]&&At(t);return{c(){o&&o.c(),n=x()},m(t,r){o&&o.m(t,r),b(t,n,r),e=1},p(t,e){t[0]?o?(o.p(t,e),1&e[0]&&G(o,1)):(o=At(t),o.c(),G(o,1),o.m(n.parentNode,n)):o&&(X(),H(o,1,1,(()=>{o=null})),Y())},i(t){e||(G(o),e=1)},o(t){H(o),e=0},d(t){o&&o.d(t),t&&h(n)}}}function Jt(t,n,e){let o,{items:r}=n,{target:i}=n;const c=document.documentElement;let u,l,a,p,f,d,m,b,h;const g=()=>!h.img&&!h.sources&&!h.iframe;let x;const v=t=>x=t,w={},y=st(0);s(t,y,(t=>e(10,o=t)));const $=()=>{l.onClose?.(w.el,h),at.set(1),e(0,r=null),p?.focus({preventScroll:1})},k=()=>M(u-1),_=()=>M(u+1),M=t=>{m=t-u,e(4,u=S(t))},S=t=>(t+r.length)%r.length,z=t=>{const{key:n,shiftKey:e}=t;if("Escape"===n)!l.noClose&&$();else if("ArrowRight"===n)_();else if("ArrowLeft"===n)k();else if("Tab"===n){const{activeElement:n}=document;if(e||!n.controls){t.preventDefault();const{focusWrap:o=w.el}=l,r=[...o.querySelectorAll("*")].filter((t=>t.tabIndex>=0));let i=r.indexOf(n);i+=r.length+(e?-1:1),r[i%r.length].focus()}}},I=({width:t=1920,height:n=1080})=>{const{scale:e=.99}=l,o=Math.min(1,w.w/t*e,w.h/n*e);return[Math.round(t*o),Math.round(n*o)]},P=()=>{if(r){const t=r[S(u+1)],n=r[S(u-1)];!t.preload&&T(t),!n.preload&&T(n)}},T=t=>{if(t.img){const n=document.createElement("img");return n.sizes=l.sizes||I(t)[0]+"px",n.srcset=t.img,t.preload=1,n.decode().catch((t=>{}))}};return t.R=t=>{"items"in t&&e(0,r=t.items),"target"in t&&e(15,i=t.target)},t.u.update=()=>{786545&t.u.v[0]&&r&&(e(6,h=r[u]),a&&l.onUpdate?.(w.el,h))},[r,$,k,_,u,l,h,f,d,b,o,y,(t,n)=>a&&r?it(t,{x:(m>0?20:-20)*(n?1:-1),duration:250}):(e(18,a=n),l.intro?it(t,{y:n?10:-10}):(t=>{let n;if(g()){const e=t.firstChild.firstChild;n=[e.clientWidth,e.clientHeight]}else n=I(h);const e=(h.element||p).getBoundingClientRect(),o=e.left-(w.w-e.width)/2,r=e.top-(w.h-e.height)/2,i=e.width/n[0],c=e.height/n[1];return{duration:480,_:rt,css:(t,n)=>`transform:translate3d(${o*n}px, ${r*n}px, 0) scale3d(${i+t*(1-i)}, ${c+t*(1-c)}, 1)`}})(t)),()=>({j:h,B:I,K:T,L:P,F:l,J:k,next:_,close:$,D:v,zoomed:y,container:w}),t=>{let n;e(19,w.el=t,w),l.onOpen?.(w.el,h),d||globalThis.addEventListener("keydown",z);const o=new ResizeObserver((t=>{n&&(e(19,w.w=t[0].contentRect.width,w),e(19,w.h=t[0].contentRect.height,w),e(7,f=769>w.w),g()||x?.(),l.onResize?.(w.el,h)),n=1}));return o.observe(t),{destroy(){o.disconnect(),globalThis.removeEventListener("keydown",z),at.set(0),c.classList.remove("bp-lock"),l.onClosed?.()}}},i,t=>{e(5,l=t),e(8,d=l.inline),!d&&c.scrollHeight>c.clientHeight&&c.classList.add("bp-lock"),p=document.activeElement,e(19,w.w=i.offsetWidth,w),e(19,w.h=i===document.body?globalThis.innerHeight:i.clientHeight,w),e(7,f=769>w.w),e(4,u=l.position||0),e(0,r=[]);for(let t=0;(l.items.length||1)>t;t++){let n=l.items[t]||l.items;"dataset"in n?r.push({element:n,i:t,...n.dataset}):(n.i=t,r.push(n),n=n.element),l.el&&l.el===n&&e(4,u=t)}},M,a,w,t=>e(9,b=t.target),function(t){2!==t.button&&t.target===this&&b===this&&!l.noClose&&$()}]}class Bt extends ot{constructor(t){super(),et(this,t,Jt,Ft,c,{items:0,target:15,open:16,close:1,J:2,next:3,setPosition:17},null,[-1,-1])}get items(){return this.u.$[0]}get target(){return this.u.$[15]}get open(){return this.u.$[16]}get close(){return this.u.$[1]}get J(){return this.u.$[2]}get next(){return this.u.$[3]}get setPosition(){return this.u.$[17]}}return t=>new Bt({...t,P:t})}(); diff --git a/output/assets/scripts/gallery-init.js b/output/assets/scripts/gallery-init.js new file mode 100644 index 0000000..8d06245 --- /dev/null +++ b/output/assets/scripts/gallery-init.js @@ -0,0 +1,138 @@ +document.addEventListener('DOMContentLoaded', () => { + if (typeof window.BiggerPicture !== 'function') { + console.error('[gallery-init] BiggerPicture not found. Check script path.'); + return; + } + + // 1) Wrap Org-exported images so they’re clickable + const imgs = document.querySelectorAll('.figure img, img.org-svg'); + imgs.forEach((img) => { + if (img.closest('a')) return; // already wrapped + const a = document.createElement('a'); + const href = img.currentSrc || img.src; + a.href = href; + a.dataset.img = href; // lets BP pre-size/raster slides + a.dataset.alt = img.alt || ''; + const setDims = () => { + a.dataset.width = img.naturalWidth || img.width || 1920; + a.dataset.height = img.naturalHeight || img.height || 1080; + }; + if (img.complete) setDims(); else img.addEventListener('load', setDims); + img.style.cursor = 'zoom-in'; + img.parentElement.insertBefore(a, img); + a.appendChild(img); + }); + + // 2) One global BP instance + const bp = BiggerPicture({ target: document.body }); + + // SVG pan/zoom handle + let activePanZoom = null; + const destroyPanZoom = () => { try { activePanZoom?.destroy(); } catch(_){} activePanZoom = null; }; + + // 3) Build galleries per content container + const containers = document.querySelectorAll('main, article, .content, body'); + containers.forEach((container) => { + const links = Array.from(container.querySelectorAll('.figure a, a:has(img.org-svg)')); + if (!links.length) return; + + // Start the lightbox on click + links.forEach((link, index) => { + link.addEventListener('click', (e) => { + e.preventDefault(); + document.querySelectorAll(".theme-toggle").forEach(el => { + el.classList.add("hidden"); + }); + + + bp.open({ + // IMPORTANT: pass the anchor ELEMENTS, not custom objects + items: links, + el: link, + caption: (el) => el.querySelector('img')?.alt || el.title || '', + maxZoom: 40, // for raster images (PNG/JPG); SVG handled separately + + // Fade-out polish + cleanup + onClose(containerEl) { + destroyPanZoom(); + if (containerEl) containerEl.classList.add('bp-fadeout'); + const themeToggle = document.querySelector(".theme-toggle"); + if (themeToggle) { + themeToggle.classList.remove("hidden"); + } + }, + + // Called once after open and on every slide change + onOpen(containerEl) { enhanceSVG(containerEl); }, + onUpdate(containerEl){ enhanceSVG(containerEl); } + }); + }); + }); + }); + + // 4) If current slide is an SVG, swap to inline + enable svg-pan-zoom + async function enhanceSVG(containerEl) { + try { + destroyPanZoom(); + + const imgEl = containerEl.querySelector('.bp-img img'); + if (!imgEl) return; + + const src = imgEl.currentSrc || imgEl.src || ''; + const isSVG = src.toLowerCase().endsWith('.svg'); + const htmlLayer = containerEl.querySelector('.bp-html'); + if (!isSVG || !htmlLayer) { + // ensure any previous holder is removed and bitmap is visible + const old = htmlLayer?.querySelector('.bp-svg-holder'); + if (old) old.remove(); + imgEl.style.visibility = ''; + return; + } + + // Create/clear holder + let holder = htmlLayer.querySelector('.bp-svg-holder'); + if (!holder) { + holder = document.createElement('div'); + holder.className = 'bp-svg-holder'; + holder.style.maxWidth = '95vw'; + holder.style.maxHeight = '95vh'; + htmlLayer.appendChild(holder); + } + holder.innerHTML = ''; + + // Hide the bitmap so only the inline SVG shows + imgEl.style.visibility = 'hidden'; + + // Inline the SVG + const res = await fetch(src, { cache: 'force-cache' }); + const text = await res.text(); + holder.innerHTML = text; + + const svg = holder.querySelector('svg'); + if (!svg) { imgEl.style.visibility = ''; return; } + + svg.style.maxWidth = '95vw'; + svg.style.maxHeight = '95vh'; + svg.style.display = 'block'; + + if (typeof window.svgPanZoom === 'function') { + activePanZoom = svgPanZoom(svg, { + zoomEnabled: true, + controlIconsEnabled: true, + fit: true, + center: true, + minZoom: 0.05, + maxZoom: 400, // effectively "unlimited" + zoomScaleSensitivity: 0.25, + dblClickZoomEnabled: true + }); + // Keep wheel inside lightbox + holder.addEventListener('wheel', (e) => e.stopPropagation(), { passive: true }); + } else { + console.warn('[gallery-init] svg-pan-zoom not loaded'); + } + } catch (err) { + console.error('[gallery-init] SVG enhance failed:', err); + } + } +}); diff --git a/output/assets/scripts/svg-pan-zoom.min.js b/output/assets/scripts/svg-pan-zoom.min.js new file mode 100644 index 0000000..844f34d --- /dev/null +++ b/output/assets/scripts/svg-pan-zoom.min.js @@ -0,0 +1,27 @@ +// svg-pan-zoom v3.6.2 +// https://github.com/bumbu/svg-pan-zoom +/* Copyright 2009-2010 Andrea Leofreddi +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +!function s(r,a,l){function u(e,t){if(!a[e]){if(!r[e]){var o="function"==typeof require&&require;if(!t&&o)return o(e,!0);if(h)return h(e,!0);var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}var i=a[e]={exports:{}};r[e][0].call(i.exports,function(t){return u(r[e][1][t]||t)},i,i.exports,s,r,a,l)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;tthis.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},i.prototype.zoom=function(t,e){this.zoomAtPoint(t,a.getSvgCenterPoint(this.svg,this.width,this.height),e)},i.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},i.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),"SVGPoint"!==r.getType(e)){if(!("x"in e&&"y"in e))throw new Error("Given point is invalid");e=a.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},i.prototype.getZoom=function(){return this.viewport.getZoom()},i.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},i.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},i.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},i.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},i.prototype.reset=function(){this.resetZoom(),this.resetPan()},i.prototype.handleDblClick=function(t){var e;if((this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled)&&-1<(t.target.getAttribute("class")||"").indexOf("svg-pan-zoom-control"))return!1;e=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var o=a.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(e,o)},i.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),r.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&r.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},i.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},i.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},i.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},i.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},i.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},i.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},i.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},i.prototype.resize=function(){var t=a.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},i.prototype.destroy=function(){var e=this;for(var t in this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,(this.onUpdatedCTM=null)!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()}),this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(t,this.eventListeners[t],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(t){return t.svg!==e.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},i.prototype.getPublicInstance=function(){var o=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return o.options.panEnabled=!0,o.pi},disablePan:function(){return o.options.panEnabled=!1,o.pi},isPanEnabled:function(){return!!o.options.panEnabled},pan:function(t){return o.pan(t),o.pi},panBy:function(t){return o.panBy(t),o.pi},getPan:function(){return o.getPan()},setBeforePan:function(t){return o.options.beforePan=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnPan:function(t){return o.options.onPan=null===t?null:r.proxy(t,o.publicInstance),o.pi},enableZoom:function(){return o.options.zoomEnabled=!0,o.pi},disableZoom:function(){return o.options.zoomEnabled=!1,o.pi},isZoomEnabled:function(){return!!o.options.zoomEnabled},enableControlIcons:function(){return o.options.controlIconsEnabled||(o.options.controlIconsEnabled=!0,s.enable(o)),o.pi},disableControlIcons:function(){return o.options.controlIconsEnabled&&(o.options.controlIconsEnabled=!1,s.disable(o)),o.pi},isControlIconsEnabled:function(){return!!o.options.controlIconsEnabled},enableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!0,o.pi},disableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!1,o.pi},isDblClickZoomEnabled:function(){return!!o.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return o.enableMouseWheelZoom(),o.pi},disableMouseWheelZoom:function(){return o.disableMouseWheelZoom(),o.pi},isMouseWheelZoomEnabled:function(){return!!o.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(t){return o.options.zoomScaleSensitivity=t,o.pi},setMinZoom:function(t){return o.options.minZoom=t,o.pi},setMaxZoom:function(t){return o.options.maxZoom=t,o.pi},setBeforeZoom:function(t){return o.options.beforeZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnZoom:function(t){return o.options.onZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},zoom:function(t){return o.publicZoom(t,!0),o.pi},zoomBy:function(t){return o.publicZoom(t,!1),o.pi},zoomAtPoint:function(t,e){return o.publicZoomAtPoint(t,e,!0),o.pi},zoomAtPointBy:function(t,e){return o.publicZoomAtPoint(t,e,!1),o.pi},zoomIn:function(){return this.zoomBy(1+o.options.zoomScaleSensitivity),o.pi},zoomOut:function(){return this.zoomBy(1/(1+o.options.zoomScaleSensitivity)),o.pi},getZoom:function(){return o.getRelativeZoom()},setOnUpdatedCTM:function(t){return o.options.onUpdatedCTM=null===t?null:r.proxy(t,o.publicInstance),o.pi},resetZoom:function(){return o.resetZoom(),o.pi},resetPan:function(){return o.resetPan(),o.pi},reset:function(){return o.reset(),o.pi},fit:function(){return o.fit(),o.pi},contain:function(){return o.contain(),o.pi},center:function(){return o.center(),o.pi},updateBBox:function(){return o.updateBBox(),o.pi},resize:function(){return o.resize(),o.pi},getSizes:function(){return{width:o.width,height:o.height,realZoom:o.getZoom(),viewBox:o.viewport.getViewBox()}},destroy:function(){return o.destroy(),o.pi}}),this.publicInstance};var c=[];e.exports=function(t,e){var o=r.getSvg(t);if(null===o)return null;for(var n=c.length-1;0<=n;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new i(o,e)}),c[c.length-1].instance.getPublicInstance()}},{"./control-icons":1,"./shadow-viewport":2,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e,o){var l=t("./utilities"),s="unknown";document.documentMode&&(s="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var o=null;if(!(o=l.isElement(e)?e:t.querySelector(e))){var n=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===n.length&&"g"===n[0].nodeName&&null===n[0].getAttribute("transform")&&(o=n[0])}if(!o){var i="viewport-"+(new Date).toISOString().replace(/\D/g,"");(o=document.createElementNS(this.svgNS,"g")).setAttribute("id",i);var s=t.childNodes||t.children;if(s&&0div:first-child{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);animation:bp-fadein .48s cubic-bezier(.215,.61,.355,1)}.bp-vid audio{position:absolute;left:14px;width:calc(100% - 28px);bottom:14px;height:50px}.bp-inner{top:0;left:0;width:100%;height:100%;position:absolute;display:flex}.bp-html{display:contents}.bp-html>:first-child{margin:auto}.bp-img-wrap{top:0;left:0;width:100%;height:100%;position:absolute;contain:strict}.bp-img-wrap .bp-canzoom{cursor:zoom-in}.bp-img-wrap .bp-drag{cursor:grabbing}.bp-close{contain:layout size}.bp-img{position:absolute;top:50%;left:50%;user-select:none;background-size:100% 100%}.bp-img div,.bp-img img{position:absolute;top:0;left:0;width:100%;height:100%}.bp-img .bp-o{display:none}.bp-zoomed .bp-img:not(.bp-drag){cursor:grab}.bp-zoomed .bp-cap{opacity:0;animation:none!important}.bp-zoomed.bp-small .bp-controls{opacity:0}.bp-zoomed.bp-small .bp-controls button{pointer-events:none}.bp-controls{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;text-align:left;transition:opacity .3s;animation:bp-fadein .3s}.bp-controls button{pointer-events:auto;cursor:pointer;position:absolute;border:0;background:rgba(0,0,0,.15);opacity:.9;transition:all .1s;contain:content}.bp-controls button:hover{background-color:rgba(0,0,0,.2);opacity:1}.bp-controls svg{fill:#fff}.bp-count{position:absolute;color:rgba(255,255,255,.9);line-height:1;margin:16px;height:50px;width:100px}.bp-next,.bp-prev{top:50%;right:0;margin-top:-32px;height:64px;width:58px;border-radius:3px 0 0 3px}.bp-next:hover:before,.bp-prev:hover:before{transform:translateX(-2px)}.bp-next:before,.bp-prev:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z'/%3E%3C/svg%3E");position:absolute;left:7px;top:9px;width:46px;transition:all .2s}.bp-prev{right:auto;left:0;transform:scalex(-1)}.bp-x{top:0;right:0;height:55px;width:58px;border-radius:0 0 0 3px}.bp-x:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' fill='%23fff'%3E%3Cpath d='M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z'/%3E%3C/svg%3E");position:absolute;width:37px;top:8px;right:10px}.bp-if,.bp-vid{position:relative;margin:auto;background:#000;background-size:100% 100%}.bp-if div,.bp-if iframe,.bp-if video,.bp-vid div,.bp-vid iframe,.bp-vid video{top:0;left:0;width:100%;height:100%;position:absolute;border:0}.bp-load{display:flex;background-size:100% 100%;overflow:hidden;z-index:1}.bp-bar{position:absolute;top:0;left:0;height:3px;width:100%;transform:translateX(-100%);background:rgba(255,255,255,.9);border-radius:0 3px 3px 0;animation:bp-bar 4s both}.bp-o,.bp-o:after{border-radius:50%;width:90px;height:90px}.bp-o{margin:auto;border:10px solid rgba(255,255,255,.2);border-left-color:rgba(255,255,255,.9);animation:bp-o 1s infinite linear}.bp-cap{position:absolute;bottom:2%;background:rgba(9,9,9,.8);color:rgba(255,255,255,.9);border-radius:4px;max-width:95%;line-height:1.3;padding:.6em 1.2em;left:50%;transform:translateX(-50%);width:fit-content;width:-moz-fit-content;display:table;transition:opacity .3s;animation:bp-fadein .2s}.bp-cap a{color:inherit}.bp-inline{position:absolute}.bp-lock{overflow-y:hidden}.bp-lock body{overflow:scroll}.bp-noclose .bp-x{display:none}.bp-noclose:not(.bp-zoomed){touch-action:pan-y}.bp-noclose:not(.bp-zoomed) .bp-img-wrap{cursor:zoom-in}@media (prefers-reduced-motion){.bp-wrap *{animation-duration:0s!important}}@media (max-width:500px){.bp-x{height:47px;width:47px}.bp-x:before{width:34px;top:6px;right:6px}.bp-next,.bp-prev{margin-top:-27px;height:54px;width:45px}.bp-next:before,.bp-prev:before{top:7px;left:2px;width:43px}.bp-o,.bp-o:after{border-width:6px;width:60px;height:60px}.bp-count{margin:12px 10px}} +/*# sourceMappingURL=/sm/15e96278e1e731ce40eef8d6284cefc81b81dda67c3a0aa386ec893f183bd57f.map */ \ No newline at end of file diff --git a/output/assets/styles/style.css b/output/assets/styles/style.css index fba46da..6dffb3a 100644 --- a/output/assets/styles/style.css +++ b/output/assets/styles/style.css @@ -2,8 +2,6 @@ Theme variables ========================= */ :root{ - /* Layout */ - --gutter: 2rem; --margin: 420px; --body-pad: 1rem; @@ -14,21 +12,43 @@ ); --content-min: 60ch; --content-max: 880px; - /* Fullwidth media tuning */ --bleed: 48px; --fullwidth-cap: 860px; - - /* Colors */ --bg: #faf9f6; --fg: #000000; --link: #1a0dab; --heading: #004c99; --code-bg: #f0f0f0; --active-toc: #cacaca; - - /* Notes */ --note-color: #555; --note-bg: transparent; + --border: #d7d7d7; + --chip-bg: #f0f0f0; + --chip-fg: #444; + --muted: #666; +} + + +/* ========================================= + Dark mode β€” manual (data-theme) wins + ========================================= */ + +:root[data-theme="dark"]{ + --bg: #0f1115; + --fg: #e6e6e6; + --link: #8ab4ff; + --heading: #9ecbff; + --code-bg: #1a1d24; + + --note-color: #c2c7cf; + --note-bg: transparent; + + --border: #2a2f3a; + --chip-bg: #1f2330; + --chip-fg: #cfd3da; + --muted: #a9b0bb; + --active-toc: #313131; + } /* ========================= @@ -46,11 +66,11 @@ h1, h2, h3{ color: var(--heading); } a { color: var(--link); - text-decoration: none; /* removes underline by default */ + text-decoration: none; } a:hover { - text-decoration: underline; /* only show on hover */ + text-decoration: underline; } /* ========================= @@ -97,11 +117,7 @@ nav{ max-width: 100%; } -@media (max-width: 1250px){ - #preamble.status{ - padding-right: var(--body-pad); - } -} + /* ========================= Footer @@ -214,25 +230,7 @@ body{ counter-reset: sidenote-counter; } text-align: center; font-size: .95rem; color: #666; margin-top: .4rem; } -@media (max-width: 1250px){ - #content.content{ - padding-right: var(--body-pad); - } - .sidenote, - .marginnote{ - float: none; - clear: both; - width: auto; - display: block; /* β¬… make them start on a new line */ - margin: 0.5rem 0 0.75rem; /* spacing above/below */ - padding-left: 0.75rem; - border-left: 3px solid rgba(0,0,0,.08); - margin-right: 0; - } - .fullwidth{ - max-width: calc(100vw - 2 * var(--body-pad)); - } -} + /* Ultra-wide comfort tweaks */ @@ -277,7 +275,7 @@ pre { } .org-src-container > pre{ overflow: auto; } -/* Language badges (optional) */ +/* Language badges */ .org-src-container > pre:before{ display: block; position: absolute; top: 0; right: 0; background-color: #b3b3b3; color: #fff; @@ -460,34 +458,7 @@ li ol li::before { .epigraph blockquote::after { content: none; } -/* ========================================= - Dark mode β€” manual (data-theme) wins - ========================================= */ -:root { - /* optional: shared tokens for borders/chips */ - --border: #d7d7d7; - --chip-bg: #f0f0f0; - --chip-fg: #444; - --muted: #666; -} -:root[data-theme="dark"]{ - --bg: #0f1115; - --fg: #e6e6e6; - --link: #8ab4ff; - --heading: #9ecbff; - --code-bg: #1a1d24; - - --note-color: #c2c7cf; - --note-bg: transparent; - - --border: #2a2f3a; - --chip-bg: #1f2330; - --chip-fg: #cfd3da; - --muted: #a9b0bb; - --active-toc: #313131; - -} /* Auto scheme if no manual override is set */ @media (prefers-color-scheme: dark){ @@ -530,13 +501,6 @@ li ol li::before { } .epigraph blockquote footer{ color: var(--muted); } -/* Mobile sidenote rule uses a light border; make it theme-aware */ -@media (max-width: 1250px){ - .sidenote, .marginnote{ - border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent); - } -} - /* Theme toggle button positioning + transparent background */ .theme-toggle { position: fixed; @@ -600,14 +564,7 @@ li ol li::before { line-height: 1.35; } -/* Mobile: these already stack under content via your media query; nothing special needed, - but we can soften the border a touch to match the mobile sidenote rule */ -@media (max-width: 1250px){ - .sidenote .mn-img, - .marginnote .mn-img{ - border-color: color-mix(in oklab, var(--fg) 12%, transparent); - } -} + .sidenote img { margin-top: 0.35rem; display: block; @@ -671,22 +628,6 @@ li ol li::before { /* Headings offset so anchors don’t hide under the sticky header */ h2[id], h3[id], h4[id] { scroll-margin-top: 6.5rem; } -/* ========================= - Mobile / narrow view - ========================= */ -@media (max-width: 1250px){ - #table-of-contents{ - float: none; - position: static; /* no sticky on small screens */ - width: auto; - margin: 0 0 1rem; - padding: .5rem .75rem; - border-right: 0; - border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent); - background: color-mix(in oklab, var(--bg) 96%, var(--fg) 4%); - border-radius: 4px; - } -} #text-table-of-contents a.is-active{ // font-weight: 700; text-decoration: underline; @@ -694,3 +635,68 @@ h2[id], h3[id], h4[id] { scroll-margin-top: 6.5rem; } //border: 1px solid var(--border, #ccc); } + +/*BP STUFF*/ + +/* theme removal */ +.hidden { display: none !important; } + +.bp-x{ right:72px; } + +.bp-next,.bp-prev{ right:8px; } +.bp-prev{ left:8px; } + +/* Smooth exit */ +.bp-wrap{ transition: opacity .18s ease; } +.bp-wrap.bp-fadeout{ opacity: 0; } + +/* Respect notches */ +.bp-controls{ + padding-top: env(safe-area-inset-top, 0); + padding-right: calc(env(safe-area-inset-right, 0) + 8px); +} + + +@media (max-width: 1250px){ + #preamble.status{ + padding-right: var(--body-pad); + } + + #content.content{ + padding-right: var(--body-pad); + } + .sidenote, + .marginnote{ + float: none; + clear: both; + width: auto; + display: block; + margin: 0.5rem 0 0.75rem; + padding-left: 0.75rem; + border-left: 3px solid rgba(0,0,0,.08); + margin-right: 0; + } + .fullwidth{ + max-width: calc(100vw - 2 * var(--body-pad)); + } + .sidenote, .marginnote{ + border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent); + } + .sidenote .mn-img, + .marginnote .mn-img{ + border-color: color-mix(in oklab, var(--fg) 12%, transparent); + } + + #table-of-contents{ + float: none; + position: static; + width: auto; + margin: 0 0 1rem; + padding: .5rem .75rem; + border-right: 0; + border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent); + background: color-mix(in oklab, var(--bg) 96%, var(--fg) 4%); + border-radius: 4px; + } + +} diff --git a/output/blogs/2025/08/spending-the-whole-day-on-this-website.html b/output/blogs/2025/08/spending-the-whole-day-on-this-website.html index 7eed2c2..c964022 100644 --- a/output/blogs/2025/08/spending-the-whole-day-on-this-website.html +++ b/output/blogs/2025/08/spending-the-whole-day-on-this-website.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + 09-08-2025: Website Changes @@ -194,7 +194,12 @@ + + + + +
@@ -215,9 +220,9 @@

09-08-2025: Website Changes

-
-

What was worked on

-
+
+

What was worked on

+

I saw a few websites that used marginal notes on the right side of the screen like this one, so I decided to try and implement this feature in this wesbite. In my mind I thought of using an external pre-configured CSS that I can just insert and ta-da it would work.

diff --git a/output/blogs/2025/08/wacom-with-arch.html b/output/blogs/2025/08/wacom-with-arch.html index 7028957..ebab7b4 100644 --- a/output/blogs/2025/08/wacom-with-arch.html +++ b/output/blogs/2025/08/wacom-with-arch.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Wacom With Arch @@ -194,7 +194,12 @@ + + + + +
@@ -215,9 +220,9 @@

Wacom With Arch

-
-

Setting up Wacom Tablet in Arch Hyprland

-
+
+

Setting up Wacom Tablet in Arch Hyprland

+

I purchased a One by Wacom tablet almost 2 years ago now and it works flawlessly in both Windows and MacOS and even in most Linux distros with some configuration.

diff --git a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html index ee0f97a..854ccf3 100644 --- a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html +++ b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Weekly review: Week ending August 10, 2025 @@ -194,7 +194,12 @@ + + + + + -
-

Reviewing the week

-
+
+

Reviewing the week

+

Mostly continuing reading from the book clean code, also setup the ankii cards and this website. The amount of leetcode problems I solved could improve however.

@@ -249,27 +254,27 @@ I'm thinking of using time-blocks to represent the hours I spent doing each thin

-
-

Next week

-
+
+

Next week

+
-
-

TODO Read as much of Clean Code as possible

+
+

TODO Read as much of Clean Code as possible

-
-

TODO Finish another (misc) book

+
+

TODO Finish another (misc) book

-
-

TODO Write more (metric unspecified, need to experiment to see what works best)

+
+

TODO Write more (metric unspecified, need to experiment to see what works best)

-
-

TODO Start the book Dose Effect

+
+

TODO Start the book Dose Effect

-
-

TODO More leetcode problems to solve (again, metric unspecified)

+
+

TODO More leetcode problems to solve (again, metric unspecified)

-
-

TODO Touch typing: daily practice

+
+

TODO Touch typing: daily practice

diff --git a/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html b/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html index 0fef978..dd818dc 100644 --- a/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html +++ b/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + What Do I Want To Do With Emacs @@ -194,7 +194,12 @@ + + + + +
@@ -209,7 +214,7 @@
-
Updated: 2025-08-09 Sat 09:13
+
Updated: 2025-08-10 Sun 22:22

What Do I Want To Do With Emacs

@@ -240,7 +245,7 @@ After some thinking I narrowed it down and collated it in the following diagram:

-
+

2025-08-08-emacs.svg

diff --git a/output/blogs/2025/08/zettelkasten.html b/output/blogs/2025/08/zettelkasten.html index 9cac9ac..745d00a 100644 --- a/output/blogs/2025/08/zettelkasten.html +++ b/output/blogs/2025/08/zettelkasten.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Zettelkasten Method @@ -194,7 +194,12 @@ + + + + +
@@ -215,9 +220,9 @@

Zettelkasten Method

-
-

The Zettelkasten Method

-
+
+

The Zettelkasten Method

+

This Zettelkasten method is growing in popularity for taking notes. Ever felt as though there's too much pieces of information but you don't know how to deal with it? This method solves exactly that problem and more. Think of it as forming a second brain, where you can jot down ideas and information whilst simultaneously being able to connect them together.

@@ -241,7 +246,7 @@ There are many personal knowledge management systems' (PKMS) out there that allo

-
+

org-roam-ui-graph.png

diff --git a/output/blogs/blogs-intro.html b/output/blogs/blogs-intro.html index 2b60a31..0e38af6 100644 --- a/output/blogs/blogs-intro.html +++ b/output/blogs/blogs-intro.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Blogs Introduction @@ -194,7 +194,12 @@ + + + + +
@@ -215,9 +220,9 @@

Blogs Introduction

-
-

Introduction

-
+
+

Introduction

+

In this section you will find posts that are not as structured as the ones found in here. Mainly these will deal with findings, research, assorted writings and random bits and blobs.

diff --git a/output/blogs/blogs-list.html b/output/blogs/blogs-list.html index b37eece..6798cc1 100644 --- a/output/blogs/blogs-list.html +++ b/output/blogs/blogs-list.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Blogs List @@ -194,7 +194,12 @@ + + + + +
@@ -209,16 +214,16 @@
-
Updated: 2025-08-10 Sun 20:55
+
Updated: 2025-08-10 Sun 22:23

Blogs List

See the categories: Categories

-
-

Blogs:

-
+
+

Blogs:

+
-
-

Categories (Includes both blogs and posts)

-
+
+

Categories (Includes both blogs and posts)

+
  • (2)
  • (1)
  • diff --git a/output/contact.html b/output/contact.html index 1c95568..609cc08 100644 --- a/output/contact.html +++ b/output/contact.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Contact @@ -194,7 +194,12 @@ + + + + +
    @@ -213,9 +218,9 @@

    Contact

    -
    -

    Contact Using the Following:

    -
    +
    +

    Contact Using the Following:

    +

    > LinkedIn: LinkedIn

    diff --git a/output/index.html b/output/index.html index 10c54b2..4002418 100644 --- a/output/index.html +++ b/output/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Home Page @@ -194,7 +194,12 @@ + + + + + -
    -

    Welcome! 🌱

    -
    +
    +

    Welcome! 🌱

    +

    This is a website built using Emacs Org-mode and published using org-publish. The very first iteration of this website used the Angular framework, only after a while I realised (as every Emacs lover does) that I want to make this an Emacs-centric project

    @@ -242,9 +247,9 @@ Feel free to explore:
-
-

How to publish web pages using org-publish

-
+
+

How to publish web pages using org-publish

+

This website is heavily inspired by some people who have decided to use org-publish as a way to convert org files into html. I came across a few that took the plunge and decided to migrate from platforms like Wordpress and instead opted for a more transparent, text-based workflow.

@@ -341,9 +346,9 @@ And there we go! The files are now being hosted on http://localhost:8000/<

-
-

Contact

-
+
+

Contact

+

Feel free to reach out on GitHub: https://github.com/zainezq

diff --git a/output/posts.html b/output/posts.html index 9e9bcaf..5845fdd 100644 --- a/output/posts.html +++ b/output/posts.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Posts @@ -194,7 +194,12 @@ + + + + +
@@ -213,18 +218,18 @@

Posts

-
-

Links

-
+
+

Links

+
-
-

Posts Introduction   intro

+
+

Posts Introduction   intro

-
-

Zettelkasten Method   education

-
+
+

Zettelkasten Method   education

+

<2025-08-06 Wed>

diff --git a/output/posts/clean-code/clean-code-chapter-1.html b/output/posts/clean-code/clean-code-chapter-1.html index 3d04d84..b8a5b7f 100644 --- a/output/posts/clean-code/clean-code-chapter-1.html +++ b/output/posts/clean-code/clean-code-chapter-1.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Clean Code: Chapter 1 Notes @@ -194,7 +194,12 @@ + + + + +
@@ -219,16 +224,16 @@

Table of Contents

Link to Chapter 2

-
-

Chapter 1: Clean Code

-
+
+

Chapter 1: Clean Code

+

Referenced Items:

diff --git a/output/posts/clean-code/clean-code-chapter-2.html b/output/posts/clean-code/clean-code-chapter-2.html index 5b0a105..36c514e 100644 --- a/output/posts/clean-code/clean-code-chapter-2.html +++ b/output/posts/clean-code/clean-code-chapter-2.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Clean Code: Chapter 2 Notes @@ -194,7 +194,12 @@ + + + + +
@@ -219,22 +224,22 @@

Table of Contents

@@ -243,13 +248,13 @@

Link to Chapter 1

-
-

Chapter 2: Meaningful Names

-
+
+

Chapter 2: Meaningful Names

+
-
-

Use intention revealing names:

-
+
+

Use intention revealing names:

+

Names should reveal intent, there is no revelation in naming an integer d, intending it stands for days. Instead, you should use the following names:

@@ -262,17 +267,17 @@ Names should reveal intent, there is no revelation in naming an integer d<
-
-

Avoid disinformation

-
+
+

Avoid disinformation

+

Don't postfix the word 'list' to the name 'accounts' unless it's actually a list. This is because the reader will assume the data type of accountsList is indeed a list, instead choose a name like accountsGroup.

-
-

Make Meaningful Distinctions

-
+
+

Make Meaningful Distinctions

+

While it is possible to name by being disinformative, it is also possible to name being non informative. Consider:

@@ -297,18 +302,18 @@ Furthermore, noise words are redundant. We should never use the word varia

-
-

Use Pronouncable Names

-
+
+

Use Pronouncable Names

+

This is quite straightforward. Do not use a name like genymdhms to refer to generation date, year, month, day, hour, minute, and second. Instead use generationTimeStamp.

-
-

Use Searchable Names

-
+
+

Use Searchable Names

+

In modern IDE's, it is still quite difficult to search for single-lettered variables. The writer states a personal preference of using single-letter names only as local variables and inside short methods. The following principle is given:

@@ -318,42 +323,42 @@ In modern IDE's, it is still quite difficult to search for single-lettered varia

-
-

Avoid Encodings

-
+
+

Avoid Encodings

+

Don't prefix variables with letters like m_ as was done in the past. Do not type encode as well, an example of this is: PhoneNumber phoneString; we can see the reader being misled into thinking the phone number is a String.

-
-

Avoid Mental Mappings

-
+
+

Avoid Mental Mappings

+

Clarity is king, don't use a name for a variable that only you know what it stands for. For example: using the letter r as the lower-cased version of the url with the host and scheme removed. That's being smart, not professional.

-
-

Class Names

-
+
+

Class Names

+

Classes and objects should have noun or noun phrase names like Customer, WikiPage, Account, and AddressParser. Avoid words like Manager, Processor, Data, or Info in the name of a class. A class name should not be a verb

-
-

Method Names

-
+
+

Method Names

+

Methods should have verb or verb phrase names.

-
-

Don't be cute/Don't use puns

-
+
+

Don't be cute/Don't use puns

+

Do not use names that are only understandable to people whom you share jokes etc with. Furthermore, do not use colloquialism and slang in names.

@@ -363,17 +368,17 @@ Do not use names that are only understandable to people whom you share jokes etc
-
-

Pick one word per concept

-
+
+

Pick one word per concept

+

If you have multiple choices for naming a concept, use one and stick with it. For instance if your options are fetch, get and retrieve, use one and stick with it throughout.

-
-

Solution Domain Names and Problem Domain Names

-
+
+

Solution Domain Names and Problem Domain Names

+

Where possible use solution domain names, as the people that are going to be reading the code are programmers. Therefore, do not shy away from using CS terms, algorithm names, math names and so forth.

@@ -383,17 +388,17 @@ However when it is not possible to use solution domain names (in other words, wh

-
-

Add Meaningful Context

-
+
+

Add Meaningful Context

+

Enclose names with well-named classes, functions, or namespaces. When all else fails, then prefix with something that provides more context.

-
-

Don't add gratuitous context

-
+
+

Don't add gratuitous context

+

Shorter names are better than longer ones, generally. This is so long as the context and intent is clear. Don't add redundant or irrelevant additions to the name in the for the sake of 'context'.

diff --git a/output/posts/posts-intro.html b/output/posts/posts-intro.html index 887fe95..36d5d5b 100644 --- a/output/posts/posts-intro.html +++ b/output/posts/posts-intro.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Posts Introduction @@ -194,7 +194,12 @@ + + + + +
@@ -215,9 +220,9 @@

Posts Introduction

-
-

Introduction

-
+
+

Introduction

+

In this section you will find posts related to both technical and non-technical topics. As Einstein said: β€œIf you can’t explain it simply you don’t understand it well enough”, thus the goal with these posts is to develop the skill of being able to deliver habitual high quality explanations as well as reinforcing the topic(s) learnt.

diff --git a/output/posts/posts-list.html b/output/posts/posts-list.html index ccfad25..53cbb9e 100644 --- a/output/posts/posts-list.html +++ b/output/posts/posts-list.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Posts List @@ -194,7 +194,12 @@ + + + + +
@@ -209,16 +214,16 @@
-
Updated: 2025-08-10 Sun 20:55
+
Updated: 2025-08-10 Sun 22:23

Posts List

See the categories: Categories

-
-

Posts:

-
+
+

Posts:

+
  • Clean Code: Chapter 2 Notes
  • Clean Code: Chapter 1 Notes
  • diff --git a/output/setup.html b/output/setup.html index c09248d..fe4d15c 100644 --- a/output/setup.html +++ b/output/setup.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Setup @@ -194,7 +194,12 @@ + + + + +
    @@ -213,9 +218,9 @@

    Setup

    -
    -

    Introduction

    -
    +
    +

    Introduction

    +

    Last updated: <2025-08-10 Sun 20:42>

    @@ -230,9 +235,9 @@ This page will highlight the build-script.el used to generate this
    -
    -

    The script

    -
    +
    +

    The script

    +

    The script is as follows, at the start I have some metadata relating to the file, followed by package management,then the declaration of variables/functions and finally the org-publish-project-alist which handles nearly all of the project generation instructions.

    @@ -645,9 +650,9 @@ Created with %c on <a href=\"https://www.archlinux.org/\">Arch</a> &
    -
    -

    Publish Script

    -
    +
    +

    Publish Script

    +

    As the project is hosted on Github, I have created a small script that is able to push changes to the remote repository, which Cloudflare will automatically detect and rebuild the website:

    diff --git a/output/sitemap.html b/output/sitemap.html index 8d21de5..131c6f9 100644 --- a/output/sitemap.html +++ b/output/sitemap.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Sitemap @@ -194,7 +194,12 @@ + + + + +
    @@ -209,7 +214,7 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23

    Sitemap

    @@ -218,8 +223,8 @@
  • Home Page
  • Contact
  • Posts
  • -
  • Categories
  • Setup
  • +
  • Categories
  • posts
  • tags
  • diff --git a/output/tags/books.html b/output/tags/books.html index 68ea91a..0d6adb9 100644 --- a/output/tags/books.html +++ b/output/tags/books.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: books @@ -194,7 +194,12 @@ + + + + +
    @@ -209,12 +214,12 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged books

    -
    +
    +

    Posts tagged books

    +
    • Clean Code: Chapter 2 Notes
    • Clean Code: Chapter 1 Notes
    • diff --git a/output/tags/education.html b/output/tags/education.html index 8bf82b5..fff38eb 100644 --- a/output/tags/education.html +++ b/output/tags/education.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: education @@ -194,7 +194,12 @@ + + + + +
      @@ -209,12 +214,12 @@
      -
      Updated: 2025-08-10 Sun 20:55
      +
      Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged education

    -
    +
    +

    Posts tagged education

    +
    diff --git a/output/tags/emacs.html b/output/tags/emacs.html index cdf6463..e4e396d 100644 --- a/output/tags/emacs.html +++ b/output/tags/emacs.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: emacs @@ -194,7 +194,12 @@ + + + + +
    @@ -209,12 +214,12 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged emacs

    -
    +
    +

    Posts tagged emacs

    +
    • 09-08-2025: Website Changes
    • What Do I Want To Do With Emacs
    • diff --git a/output/tags/insights.html b/output/tags/insights.html index 8d55d08..1ae6f85 100644 --- a/output/tags/insights.html +++ b/output/tags/insights.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: insights @@ -194,7 +194,12 @@ + + + + +
      @@ -209,12 +214,12 @@
      -
      Updated: 2025-08-10 Sun 20:55
      +
      Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged insights

    -
    +
    +

    Posts tagged insights

    +
    diff --git a/output/tags/introduction.html b/output/tags/introduction.html index 45d5b75..2ae60c3 100644 --- a/output/tags/introduction.html +++ b/output/tags/introduction.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: introduction @@ -194,7 +194,12 @@ + + + + +
    @@ -209,12 +214,12 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged introduction

    -
    +
    +

    Posts tagged introduction

    +
    • Blogs Introduction
    • Posts Introduction
    • diff --git a/output/tags/notes.html b/output/tags/notes.html index 1d7a8ce..fb7eea7 100644 --- a/output/tags/notes.html +++ b/output/tags/notes.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: notes @@ -194,7 +194,12 @@ + + + + +
      @@ -209,12 +214,12 @@
      -
      Updated: 2025-08-10 Sun 20:55
      +
      Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged notes

    -
    +
    +

    Posts tagged notes

    +
    • Clean Code: Chapter 2 Notes
    • Clean Code: Chapter 1 Notes
    • diff --git a/output/tags/review.html b/output/tags/review.html index 0612186..55f7411 100644 --- a/output/tags/review.html +++ b/output/tags/review.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: review @@ -194,7 +194,12 @@ + + + + +
      @@ -209,12 +214,12 @@
      -
      Updated: 2025-08-10 Sun 20:55
      +
      Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged review

    -
    +
    +

    Posts tagged review

    +
    diff --git a/output/tags/website.html b/output/tags/website.html index f93c80d..5781f81 100644 --- a/output/tags/website.html +++ b/output/tags/website.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: website @@ -194,7 +194,12 @@ + + + + +
    @@ -209,12 +214,12 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged website

    -
    +
    +

    Posts tagged website

    +
    diff --git a/output/tags/weekly-review.html b/output/tags/weekly-review.html index 3e1fdf3..2dd561f 100644 --- a/output/tags/weekly-review.html +++ b/output/tags/weekly-review.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Tag: weekly-review @@ -194,7 +194,12 @@ + + + + +
    @@ -209,12 +214,12 @@
    -
    Updated: 2025-08-10 Sun 20:55
    +
    Updated: 2025-08-10 Sun 22:23
    -
    -

    Posts tagged weekly-review

    -
    +
    +

    Posts tagged weekly-review

    +