ng-halfmoon
Version:
Angular Library to build upon the halfmoon-framework
48 lines • 5.86 kB
JavaScript
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