UNPKG

ng-halfmoon

Version:

Angular Library to build upon the halfmoon-framework

48 lines 5.86 kB
import { Injectable, RendererFactory2 } from '@angular/core'; import * as halfmoon from 'halfmoon'; import { BehaviorSubject } from 'rxjs'; export class DarkModeService { constructor(rendererFactory) { this.darkModeOn = false; this._darkModeEnabled$ = new BehaviorSubject(false); this.cookieName = 'halfmoon_preferredMode'; this.renderer = rendererFactory.createRenderer(document.body, null); const cookie = halfmoon.readCookie(this.cookieName); if (cookie === 'light-mode') { this.darkModeOn = false; this._darkModeEnabled$.next(this.darkModeOn); } else if (cookie === 'dark-mode') { this.darkModeOn = true; this._darkModeEnabled$.next(this.darkModeOn); } this.toggleClass(); } get darkModeEnabled$() { return this._darkModeEnabled$.asObservable(); } toggleDarkMode() { this.darkModeOn = !this.darkModeOn; this._darkModeEnabled$.next(this.darkModeOn); this.toggleCookie(); this.toggleClass(); } toggleCookie() { halfmoon.createCookie(this.cookieName, this.darkModeOn ? 'dark-mode' : 'light-mode', 365); } toggleClass() { if (this.darkModeOn) { this.renderer.addClass(document.body, 'dark-mode'); } else { this.renderer.removeClass(document.body, 'dark-mode'); } } } DarkModeService.decorators = [ { type: Injectable } ]; DarkModeService.ctorParameters = () => [ { type: RendererFactory2 } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1oYWxmbW9vbi9zcmMvbGliL2Jhc2ljcy9kYXJrLW1vZGUvZGFyay1tb2RlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBYSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBR2pELE1BQU0sT0FBTyxlQUFlO0lBWTFCLFlBQVksZUFBaUM7UUFYckMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FDdkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHckIsZUFBVSxHQUFHLHdCQUF3QixDQUFDO1FBT3JELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxLQUFLLFlBQVksRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QzthQUFNLElBQUksTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBaEJELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFnQkQsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsUUFBUSxDQUFDLFlBQVksQ0FDbkIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFDNUMsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7OztZQWhERixVQUFVOzs7WUFKb0IsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgaGFsZm1vb24gZnJvbSAnaGFsZm1vb24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGFya01vZGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkYXJrTW9kZU9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RhcmtNb2RlRW5hYmxlZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZU5hbWUgPSAnaGFsZm1vb25fcHJlZmVycmVkTW9kZSc7XG5cbiAgZ2V0IGRhcmtNb2RlRW5hYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhcmtNb2RlRW5hYmxlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihyZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIpIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50LmJvZHksIG51bGwpO1xuICAgIGNvbnN0IGNvb2tpZSA9IGhhbGZtb29uLnJlYWRDb29raWUodGhpcy5jb29raWVOYW1lKTtcbiAgICBpZiAoY29va2llID09PSAnbGlnaHQtbW9kZScpIHtcbiAgICAgIHRoaXMuZGFya01vZGVPbiA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGFya01vZGVFbmFibGVkJC5uZXh0KHRoaXMuZGFya01vZGVPbik7XG4gICAgfSBlbHNlIGlmIChjb29raWUgPT09ICdkYXJrLW1vZGUnKSB7XG4gICAgICB0aGlzLmRhcmtNb2RlT24gPSB0cnVlO1xuICAgICAgdGhpcy5fZGFya01vZGVFbmFibGVkJC5uZXh0KHRoaXMuZGFya01vZGVPbik7XG4gICAgfVxuXG4gICAgdGhpcy50b2dnbGVDbGFzcygpO1xuICB9XG5cbiAgdG9nZ2xlRGFya01vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5kYXJrTW9kZU9uID0gIXRoaXMuZGFya01vZGVPbjtcbiAgICB0aGlzLl9kYXJrTW9kZUVuYWJsZWQkLm5leHQodGhpcy5kYXJrTW9kZU9uKTtcbiAgICB0aGlzLnRvZ2dsZUNvb2tpZSgpO1xuICAgIHRoaXMudG9nZ2xlQ2xhc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ29va2llKCk6IHZvaWQge1xuICAgIGhhbGZtb29uLmNyZWF0ZUNvb2tpZShcbiAgICAgIHRoaXMuY29va2llTmFtZSxcbiAgICAgIHRoaXMuZGFya01vZGVPbiA/ICdkYXJrLW1vZGUnIDogJ2xpZ2h0LW1vZGUnLFxuICAgICAgMzY1XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGFya01vZGVPbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnZGFyay1tb2RlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2RhcmstbW9kZScpO1xuICAgIH1cbiAgfVxufVxuIl19