diff options
Diffstat (limited to 'ext/bg/js/settings.js')
| -rw-r--r-- | ext/bg/js/settings.js | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js index e4446851..d4b1549e 100644 --- a/ext/bg/js/settings.js +++ b/ext/bg/js/settings.js @@ -212,6 +212,52 @@ $(document).ready(utilAsync(onReady));  /* + * Page exit prevention + */ + +class PageExitPrevention { +    constructor() { +    } + +    start() { +        PageExitPrevention._addInstance(this); +    } + +    end() { +        PageExitPrevention._removeInstance(this); +    } + +    static _addInstance(instance) { +        const size = PageExitPrevention._instances.size; +        PageExitPrevention._instances.set(instance, true); +        if (size === 0) { +            window.addEventListener('beforeunload', PageExitPrevention._onBeforeUnload); +        } +    } + +    static _removeInstance(instance) { +        if ( +            PageExitPrevention._instances.delete(instance) && +            PageExitPrevention._instances.size === 0 +        ) { +            window.removeEventListener('beforeunload', PageExitPrevention._onBeforeUnload); +        } +    } + +    static _onBeforeUnload(e) { +        if (PageExitPrevention._instances.size === 0) { +            return; +        } + +        e.preventDefault(); +        e.returnValue = ''; +        return ''; +    } +} +PageExitPrevention._instances = new Map(); + + +/*   * Appearance   */ |