| /*= Hover styles =*/ | /*= Hover styles =*/ | ||||
| /*=--------------=*/ | /*=--------------=*/ | ||||
| .img img:hover { | |||||
| .image-wrapper img:hover { | |||||
| filter: drop-shadow(0 0 3px #777); | filter: drop-shadow(0 0 3px #777); | ||||
| cursor: zoom-in; | cursor: zoom-in; | ||||
| } | } | ||||
| .img img:active { | |||||
| .image-wrapper img:active { | |||||
| transform: scale(0.975); | transform: scale(0.975); | ||||
| } | } | ||||
| function imageFocusSetup() { | function imageFocusSetup() { | ||||
| if (typeof GW.imageFocus == "undefined") | if (typeof GW.imageFocus == "undefined") | ||||
| GW.imageFocus = { | GW.imageFocus = { | ||||
| contentImagesSelector: "article img, .gallery img", | |||||
| focusedImageSelector: "article img.focused, .gallery img.focused", | |||||
| contentImagesSelector: ".gallery img", | |||||
| focusedImageSelector: ".gallery img.focused", | |||||
| shrinkRatio: 0.975, | shrinkRatio: 0.975, | ||||
| hideUITimerDuration: 1500, | hideUITimerDuration: 1500, | ||||
| hideUITimerExpired: () => { | hideUITimerExpired: () => { | ||||
| image.addEventListener("click", GW.imageClickedToFocus); | image.addEventListener("click", GW.imageClickedToFocus); | ||||
| }); | }); | ||||
| // Wrap all images in a span. | |||||
| // Add image wrapper class. | |||||
| document.querySelectorAll(GW.imageFocus.contentImagesSelector).forEach(image => { | document.querySelectorAll(GW.imageFocus.contentImagesSelector).forEach(image => { | ||||
| let wrapper = document.createElement("span"); | |||||
| wrapper.classList.add("image-wrapper", "img"); | |||||
| image.parentElement.insertBefore(wrapper, image); | |||||
| wrapper.appendChild(image); | |||||
| wrapper.classList.add(...image.classList); | |||||
| image.classList.remove(...image.classList); | |||||
| }); | |||||
| let wrapper = image.closest(".img"); | |||||
| if (wrapper) | |||||
| wrapper.classList.add("image-wrapper"); | |||||
| }); | |||||
| // Create the image focus overlay. | // Create the image focus overlay. | ||||
| let imageFocusOverlay = addUIElement("<div id='image-focus-overlay'>" + | let imageFocusOverlay = addUIElement("<div id='image-focus-overlay'>" + | ||||
| `<div class='help-overlay'> | `<div class='help-overlay'> | ||||
| }); | }); | ||||
| } | } | ||||
| } | } | ||||
| /******************/ | |||||
| /* INITIALIZATION */ | |||||
| /******************/ | |||||
| imageFocusSetup(); | |||||
| focusImageSpecifiedByURL(); |
| /*************************/ | /*************************/ | ||||
| registerInitializer('pageLayoutFinished', false, () => (document.readyState == "complete"), () => { | registerInitializer('pageLayoutFinished', false, () => (document.readyState == "complete"), () => { | ||||
| GWLog("INITIALIZER pageLayoutFinished"); | |||||
| forceInitializer('earlyInitialize'); | forceInitializer('earlyInitialize'); | ||||
| GWLog("INITIALIZER pageLayoutFinished"); | |||||
| // We pre-query the relevant elements, so we don’t have to run queryAll on | // We pre-query the relevant elements, so we don’t have to run queryAll on | ||||
| // every firing of the scroll listener. | // every firing of the scroll listener. | ||||
| GW.scrollState = { | GW.scrollState = { | ||||
| GW.scrollState.siteNavUI.forEach(element => { | GW.scrollState.siteNavUI.forEach(element => { | ||||
| element.addEventListener("mouseover", () => { showSiteNavUI(); }); | element.addEventListener("mouseover", () => { showSiteNavUI(); }); | ||||
| }); | }); | ||||
| // Wrap all images in a span. | |||||
| document.querySelectorAll("main > nav ~ * img").forEach(image => { | |||||
| let wrapper = document.createElement("span"); | |||||
| wrapper.classList.add("img"); | |||||
| image.parentElement.insertBefore(wrapper, image); | |||||
| wrapper.appendChild(image); | |||||
| wrapper.classList.add(...image.classList); | |||||
| image.classList.remove(...image.classList); | |||||
| }); | |||||
| imageFocusSetup(); | |||||
| focusImageSpecifiedByURL(); | |||||
| }); | }); | ||||