summaryrefslogtreecommitdiffstats
path: root/lightbox/lightbox.js
blob: d6b974fbf3c7732a885ca34f869f27d0c174a24a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Lightbox {
    constructor(selector) {
        this.initalizeTags(selector);
        const css = "img.lightbox[data-light-box-id]{cursor:pointer}[data-light-box-wrapper-id]{background-color:#0b0704;position:fixed;top:0;left:0;height:100%;width:100%;display:flex;justify-content:center;align-items:center}[data-light-box-wrapper-id] img{padding:1rem;max-height:calc(100% - 50px);max-width:calc(100% - 50px)}";
        const styleSheet = document.createElement("style");
        styleSheet.innerHTML = css;
        styleSheet.dataset.lightboxStyles = "true";
        document.head.appendChild(styleSheet);
    }

    openLightbox(id) {
        const source = document.querySelector("[data-light-box-id='" + id + "']");
        const wrapper = document.createElement("div");
        wrapper.dataset.lightBoxWrapperId = id;
        wrapper.onclick = () => this.closeLightbox(id);
        const img = document.createElement("img");
        img.src = source.src;
        wrapper.appendChild(img);
        document.body.style = "overflow: hidden !important;";
        document.body.appendChild(wrapper);
    }

    closeLightbox(id) {
        document.querySelector("[data-light-box-wrapper-id='" + id + "']").remove();
        document.body.style.overflow = "";
    }

    initalizeTags(selector) {
        document.querySelectorAll(selector).forEach(image => {
            image.dataset.lightBoxId = Math.random().toString(36).substring(2) + Date.now().toString(36);
            image.onclick = () => this.openLightbox(image.dataset.lightBoxId);
        });
    }
}