{"version":3,"file":"CarbonLite.mjs","sources":["../src/CarbonLite.ts"],"sourcesContent":["import { CarbonLiteMessage } from './elements/CarbonLiteMessage'\r\nimport { CarbonLiteElement } from './elements/CarbonLiteElement'\r\nimport { CarbonLiteConfig } from './config/CarbonLiteConfig';\r\n\r\nexport default class CarbonLite {\r\n    initialised: boolean = false;\r\n    ignoreInteractions: boolean = false;\r\n\r\n    // objects\r\n    carbonLite: CarbonLiteElement = new CarbonLiteElement();\r\n    carbonLiteMessage: CarbonLiteMessage = new CarbonLiteMessage();\r\n    carbonLiteTimer: ReturnType<typeof setTimeout>|undefined = undefined;\r\n    carbonLiteMessageTimer: ReturnType<typeof setTimeout>|undefined = undefined;\r\n\r\n    // configurable\r\n    config: CarbonLiteConfig = {\r\n        message: 'CarbonLite is reducing the carbon usage of this site, one (dark) pixel at a time',\r\n        timeout: 60000,\r\n        backgroundColour: '#000',\r\n        messageTimeout: 3000,\r\n        messageColour: '#254137',\r\n        messageColourHover: '#7DF799',\r\n        messageBorderColour: '#7DF799',\r\n        messageDropShadowColour: '#254137',\r\n        debug: false\r\n    };\r\n\r\n    configure(configuration: object){\r\n        this.config = {...this.config, ...configuration}\r\n    }\r\n\r\n    debug(message: string) {\r\n        if (this.config.debug) {\r\n            console.log(`CarbonLite: ${message}`)\r\n        }\r\n    }\r\n\r\n    init(configuration: CarbonLiteConfig|null = null) {\r\n        this.debug('initialising')\r\n        if (this.initialised) {\r\n            return\r\n        }\r\n\r\n        if (configuration) {\r\n            this.configure(configuration)\r\n        }\r\n\r\n        if (this.config.message) {\r\n            this.carbonLite.configure(this.config.message);\r\n        }\r\n\r\n        // add styles\r\n        const style = document.createElement('style')\r\n        style.innerHTML = this.generateStyles()\r\n        document.head.appendChild(style)\r\n\r\n        this.addEventListeners()\r\n        this.restartTimer()\r\n        this.initialised = true\r\n    }\r\n\r\n    generateStyles() {\r\n        return `\r\n        carbon-lite {\r\n            position: fixed;\r\n            bottom: 0;\r\n            right: 0;\r\n            top: 0;\r\n            left: 0;\r\n            color: ${this.config.messageColour};\r\n            z-index: 2147483646;\r\n            background: ${this.config.backgroundColour};\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            \r\n            div {\r\n                max-width: 80%;\r\n                line-height: 1.5rem;\r\n            }\r\n        }\r\n        \r\n        carbon-lite-message {\r\n            position: fixed;\r\n            bottom: 100px;\r\n            right: 100px;\r\n            color: ${this.config.messageColour};\r\n            text-align: center;\r\n            z-index: 2147483647;\r\n            opacity: 0.8;\r\n            transition: opacity ${this.config.messageTimeout}ms ease-in;\r\n            \r\n            a {\r\n                color: ${this.config.messageColour};\r\n                background: ${this.config.backgroundColour};\r\n                padding: 20px;\r\n                display: block;\r\n                text-decoration: none;\r\n                border-radius: 20px;\r\n                border: 3px solid ${this.config.backgroundColour};\r\n                \r\n                &:hover {\r\n                    color: ${this.config.messageColourHover};\r\n                    text-decoration: underline;\r\n                    border-color: ${this.config.messageBorderColour};\r\n                    filter: drop-shadow(0 0 0.75rem ${this.config.messageDropShadowColour});\r\n                }\r\n                \r\n                svg {\r\n                    height: 100px;\r\n                    display: block;\r\n                    margin: 0 auto 20px auto;\r\n                }               \r\n            }\r\n            \r\n            &.fading {\r\n                opacity: 0;\r\n                \r\n                a {\r\n                    border-color: ${this.config.messageBorderColour};\r\n                    filter: drop-shadow(0 0 0.75rem ${this.config.messageDropShadowColour});\r\n                }\r\n            }\r\n            \r\n            &:hover {\r\n                transition: opacity 0ms linear;\r\n            }\r\n        }\r\n    `;\r\n    }\r\n\r\n    getIframes() {\r\n        let iframes = document.getElementsByTagName(`iframe`);\r\n        let iframesArray = [];\r\n        for (let i = 0; i < iframes.length; i++) {\r\n            iframesArray.push(iframes[i]);\r\n        }\r\n        return iframesArray;\r\n    }\r\n\r\n    addGlobalEventListener(eventType: string) {\r\n        this.debug(`Adding listeners for event type ${eventType}`)\r\n        let CarbonLite = this;\r\n\r\n        let iframes = this.getIframes()\r\n\r\n        iframes.forEach(iframe => {\r\n            iframe.addEventListener(eventType, () => {\r\n                CarbonLite.userInteracted()\r\n            })\r\n        })\r\n\r\n        document.addEventListener(eventType, () => {\r\n            CarbonLite.userInteracted()\r\n        })\r\n    }\r\n\r\n    addEventListeners() {\r\n        this.debug('adding event listeners')\r\n\r\n        this.addGlobalEventListener('mousemove')\r\n        this.addGlobalEventListener('click')\r\n        this.addGlobalEventListener('scroll')\r\n        this.addGlobalEventListener('keypress')\r\n        this.addGlobalEventListener('resize')\r\n        this.addVideoEventListeners()\r\n\r\n        let CarbonLite = this;\r\n\r\n        this.debug('adding message event listeners')\r\n\r\n        CarbonLite.carbonLiteMessage.addEventListener(`mouseenter`, (event) => {\r\n            CarbonLite.carbonLiteMessage.classList.remove('fading')\r\n            if (CarbonLite.carbonLiteMessageTimer) {\r\n                this.debug('clearing message fade out timer due to mouseenter')\r\n                clearTimeout(CarbonLite.carbonLiteMessageTimer)\r\n            }\r\n        })\r\n\r\n        CarbonLite.carbonLiteMessage.addEventListener(`mouseleave`, (event) => {\r\n            CarbonLite.fadeOutMessage()\r\n        })\r\n\r\n        document.addEventListener('carbon-lite-suspend', function(event: CustomEvent) {\r\n            CarbonLite.suspend()\r\n        });\r\n\r\n        document.addEventListener('carbon-lite-resume', function(event: CustomEvent) {\r\n            CarbonLite.resume()\r\n        });\r\n\r\n        document.addEventListener('carbon-lite-open', (event: CustomEvent) => {\r\n            if (event.detail?.interactionDelay) {\r\n                this.debug(`ignoring interactions for ${event.detail.interactionDelay} ms`)\r\n                CarbonLite.ignoreInteractions = true;\r\n                let originalMessage = this.config.message;\r\n\r\n                if (event.detail.tempMessage) {\r\n                    this.debug(`Adding a temporary message ${event.detail.tempMessage}`)\r\n                    this.carbonLite.configure(event.detail.tempMessage);\r\n                }\r\n\r\n                setTimeout(() => {\r\n                    this.debug('allowing interactions')\r\n                    CarbonLite.ignoreInteractions = false;\r\n                    if (originalMessage) {\r\n                        this.carbonLite.configure(originalMessage);\r\n                    }\r\n                }, event.detail.interactionDelay)\r\n            }\r\n\r\n            CarbonLite.open()\r\n        });\r\n    }\r\n\r\n    addVideoEventListeners() {\r\n        this.debug('adding video event listeners')\r\n        let CarbonLite = this;\r\n\r\n        let videos = document.getElementsByTagName(`video`);\r\n\r\n        for (let i = 0; i < videos.length; i++) {\r\n            let videoEl = videos[i]\r\n\r\n            videoEl.addEventListener(`playing`, () => {\r\n                CarbonLite.debug('video playing')\r\n                CarbonLite.suspend()\r\n            })\r\n            videoEl.addEventListener(`ended`, () => {\r\n                CarbonLite.debug('video ended')\r\n                CarbonLite.resume()\r\n            })\r\n            videoEl.addEventListener(`pause`, () => {\r\n                CarbonLite.debug('video paused')\r\n                CarbonLite.resume()\r\n            })\r\n        }\r\n    }\r\n\r\n    restartTimer() {\r\n        clearTimeout(this.carbonLiteTimer)\r\n        this.carbonLiteTimer = setTimeout(() => { this.open() }, this.config.timeout)\r\n    }\r\n\r\n    userInteracted() {\r\n        if (this.ignoreInteractions) {\r\n            this.debug('ignoring interactions')\r\n            return\r\n        }\r\n\r\n        if (this.backgroundIsVisible()) {\r\n            this.debug('user interacted - hiding')\r\n            this.hideBackground()\r\n        } else {\r\n            this.debug('user interacted - restarting timer')\r\n            this.restartTimer()\r\n        }\r\n    }\r\n\r\n    suspend() {\r\n        this.debug('suspending timer')\r\n\r\n        if (this.backgroundIsVisible()) {\r\n            document.body.removeChild(this.carbonLite)\r\n        }\r\n        if (this.messageIsVisible()) {\r\n            document.body.removeChild(this.carbonLiteMessage)\r\n        }\r\n        clearTimeout(this.carbonLiteTimer)\r\n        clearTimeout(this.carbonLiteMessageTimer)\r\n    }\r\n\r\n    backgroundIsVisible() {\r\n        return this.carbonLite.parentNode === document.body\r\n    }\r\n\r\n    messageIsVisible() {\r\n        return this.carbonLiteMessage.parentNode === document.body\r\n    }\r\n\r\n    resume() {\r\n        this.debug('resuming timer')\r\n        this.restartTimer()\r\n    }\r\n\r\n    hideBackground() {\r\n        if (!this.carbonLite || !this.carbonLite.parentNode) {\r\n            return;\r\n        }\r\n\r\n        document.body.removeChild(this.carbonLite)\r\n        this.fadeOutMessage()\r\n    }\r\n\r\n    hideMessage() {\r\n        let CarbonLite = this;\r\n\r\n        if (!CarbonLite.carbonLiteMessage || !CarbonLite.carbonLiteMessage.parentNode) {\r\n            return;\r\n        }\r\n        this.debug('hiding message')\r\n\r\n        document.body.removeChild(CarbonLite.carbonLiteMessage)\r\n        this.debug('clearing message fade out timer due to message being hidden')\r\n        clearTimeout(CarbonLite.carbonLiteMessageTimer)\r\n        CarbonLite.carbonLiteMessage.classList.remove('fading')\r\n\r\n        this.debug('restarting timer after message has been hidden')\r\n        CarbonLite.restartTimer()\r\n    }\r\n\r\n    fadeOutMessage() {\r\n        this.debug('setting timer to fade out message')\r\n\r\n        this.carbonLiteMessage.classList.add('fading')\r\n        this.carbonLiteMessageTimer = setTimeout(() => { this.hideMessage() }, this.config.messageTimeout)\r\n    }\r\n\r\n    open() {\r\n        this.debug('opening')\r\n        let CarbonLite = this;\r\n\r\n        if (CarbonLite.carbonLiteMessageTimer) {\r\n            this.debug('clearing message fade out timer')\r\n            clearTimeout(CarbonLite.carbonLiteMessageTimer)\r\n        }\r\n\r\n        document.body.appendChild(CarbonLite.carbonLite)\r\n        document.body.appendChild(CarbonLite.carbonLiteMessage)\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}