UNPKG

@santinobch/os-window-angular

Version:

Create windows inside a browser window!

148 lines 18.9 kB
export class StyleClass { constructor(_componentElement, _renderer, _globalConfigService, _componentName) { this._componentElement = _componentElement; this._renderer = _renderer; this._globalConfigService = _globalConfigService; this._componentName = _componentName; this.globalConfigData = { name: '', variant: '', }; this.style = { name: '', variant: '', color: '', }; this.previousStyle = { name: '', variant: '', color: '', }; this.componentElement = _componentElement; this.renderer = _renderer; this.globalConfigService = _globalConfigService; this.componentName = _componentName; } isValidStyle() { if (this.style.name !== '' && this.style.name !== undefined && this.style.variant !== '' && this.style.variant !== undefined) { for (const i of this.globalConfigService.getThemes()) { if (i.name == this.style.name) { for (const v of i.variants) { if (v == this.style.variant) { return true; } } console.error('Invalid variant at ' + this.componentName + ' component: ' + this.style.variant); return false; } } console.error('Invalid Theme at ' + this.componentName + ' component: ' + this.style.name); return false; } return false; } isValidColor() { if (this.style.name !== '' && this.style.name !== undefined && this.style.color !== '' && this.style.color !== undefined) { for (const i of this.globalConfigService.getThemes()) { if (i.name == this.style.name) { for (const p of i.palette) { if (p == this.style.color) { return true; } } console.error('Invalid color at ' + this.componentName + ' component: ' + this.style.color); return false; } } console.error('Invalid Theme at ' + this.componentName + ' component: ' + this.style.name); return false; } return false; } getStyle() { return (this.style.name + '-' + this.style.variant + '-os-' + this.componentName); } getPreviousStyle() { return (this.previousStyle.name + '-' + this.previousStyle.variant + '-os-' + this.componentName); } getColor() { return this.style.color + '-os-' + this.componentName; } getPreviousColor() { return this.previousStyle.color + '-os-' + this.componentName; } loadGlobalStyles() { //Global theme config this.globalConfigData = this.globalConfigService.getGlobalTheme(); this.style.name = this.globalConfigData.name; this.style.variant = this.globalConfigData.variant; this.renderer.addClass(this.componentElement.nativeElement, this.getStyle()); } loadStyles() { if (this.isValidStyle()) { //Removes old theme class if (this.previousStyle.name !== '' && this.previousStyle.name !== undefined && this.previousStyle.variant !== '' && this.previousStyle.variant !== undefined) { this.renderer.removeClass(this.componentElement.nativeElement, this.getPreviousStyle()); } this.previousStyle.name = this.style.name; this.previousStyle.variant = this.style.variant; //Adds theme class this.renderer.addClass(this.componentElement.nativeElement, this.getStyle()); } else { this.loadGlobalStyles(); } } loadColor() { if (this.isValidColor()) { if (this.previousStyle.color !== '' && this.previousStyle.color !== undefined) { this.renderer.removeClass(this.componentElement.nativeElement, this.getPreviousColor()); } this.previousStyle.color = this.style.color; this.renderer.addClass(this.componentElement.nativeElement, this.getColor()); } } onChanges(changes) { if (changes != undefined) { if (changes['theme'] != undefined) { this.style.name = changes['theme'].currentValue; } if (changes.variant != undefined) { this.style.variant = changes['variant'].currentValue; } if (changes['theme'] != undefined || changes['variant'] != undefined) { this.loadStyles(); } if (changes['color'] != undefined) { this.loadColor(); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3R5bGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcy13aW5kb3ctYW5ndWxhci9zcmMvbGliL2NsYXNzZXMvU3R5bGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLFVBQVU7SUFNckIsWUFDVSxpQkFBNkIsRUFDN0IsU0FBb0IsRUFDcEIsb0JBQXFDLEVBQ3JDLGNBQXNCO1FBSHRCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBWTtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBaUI7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFReEIscUJBQWdCLEdBQVU7WUFDaEMsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFSyxVQUFLLEdBQVU7WUFDcEIsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUVNLGtCQUFhLEdBQVU7WUFDN0IsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQXJCQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG9CQUFvQixDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBQ3RDLENBQUM7SUFtQk8sWUFBWTtRQUNsQixJQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFO1lB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U0FBUyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbkI7WUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNsQjtTQUNGO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vcy1jb25maWcvb3MtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVEhFTUVfTElTVCB9IGZyb20gJy4uL3RoZW1lcy90aGVtZV9saXN0JztcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi4vbW9kZWxzL1RoZW1lLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFN0eWxlQ2xhc3Mge1xuICBwcml2YXRlIGNvbXBvbmVudEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIHJlbmRlcmVyITogUmVuZGVyZXIyO1xuICBwcml2YXRlIGdsb2JhbENvbmZpZ1NlcnZpY2UhOiBPc0NvbmZpZ1NlcnZpY2U7XG4gIHByaXZhdGUgY29tcG9uZW50TmFtZSE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb21wb25lbnRFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBfZ2xvYmFsQ29uZmlnU2VydmljZTogT3NDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbXBvbmVudE5hbWU6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLmNvbXBvbmVudEVsZW1lbnQgPSBfY29tcG9uZW50RWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyID0gX3JlbmRlcmVyO1xuICAgIHRoaXMuZ2xvYmFsQ29uZmlnU2VydmljZSA9IF9nbG9iYWxDb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IF9jb21wb25lbnROYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnbG9iYWxDb25maWdEYXRhOiBUaGVtZSA9IHtcbiAgICBuYW1lOiAnJyxcbiAgICB2YXJpYW50OiAnJyxcbiAgfTtcblxuICBwdWJsaWMgc3R5bGU6IFRoZW1lID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIHZhcmlhbnQ6ICcnLFxuICAgIGNvbG9yOiAnJyxcbiAgfTtcblxuICBwcml2YXRlIHByZXZpb3VzU3R5bGU6IFRoZW1lID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIHZhcmlhbnQ6ICcnLFxuICAgIGNvbG9yOiAnJyxcbiAgfTtcblxuICBwcml2YXRlIGlzVmFsaWRTdHlsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0eWxlLm5hbWUgIT09ICcnICYmXG4gICAgICB0aGlzLnN0eWxlLm5hbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5zdHlsZS52YXJpYW50ICE9PSAnJyAmJlxuICAgICAgdGhpcy5zdHlsZS52YXJpYW50ICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLmdsb2JhbENvbmZpZ1NlcnZpY2UuZ2V0VGhlbWVzKCkpIHtcbiAgICAgICAgaWYgKGkubmFtZSA9PSB0aGlzLnN0eWxlLm5hbWUpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgaS52YXJpYW50cykge1xuICAgICAgICAgICAgaWYgKHYgPT0gdGhpcy5zdHlsZS52YXJpYW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgdmFyaWFudCBhdCAnICtcbiAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnROYW1lICtcbiAgICAgICAgICAgICAgJyBjb21wb25lbnQ6ICcgK1xuICAgICAgICAgICAgICB0aGlzLnN0eWxlLnZhcmlhbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0ludmFsaWQgVGhlbWUgYXQgJyArXG4gICAgICAgICAgdGhpcy5jb21wb25lbnROYW1lICtcbiAgICAgICAgICAnIGNvbXBvbmVudDogJyArXG4gICAgICAgICAgdGhpcy5zdHlsZS5uYW1lXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDb2xvcigpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0eWxlLm5hbWUgIT09ICcnICYmXG4gICAgICB0aGlzLnN0eWxlLm5hbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5zdHlsZS5jb2xvciAhPT0gJycgJiZcbiAgICAgIHRoaXMuc3R5bGUuY29sb3IgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuZ2xvYmFsQ29uZmlnU2VydmljZS5nZXRUaGVtZXMoKSkge1xuICAgICAgICBpZiAoaS5uYW1lID09IHRoaXMuc3R5bGUubmFtZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBpLnBhbGV0dGUpIHtcbiAgICAgICAgICAgIGlmIChwID09IHRoaXMuc3R5bGUuY29sb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCBjb2xvciBhdCAnICtcbiAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnROYW1lICtcbiAgICAgICAgICAgICAgJyBjb21wb25lbnQ6ICcgK1xuICAgICAgICAgICAgICB0aGlzLnN0eWxlLmNvbG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdJbnZhbGlkIFRoZW1lIGF0ICcgK1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50TmFtZSArXG4gICAgICAgICAgJyBjb21wb25lbnQ6ICcgK1xuICAgICAgICAgIHRoaXMuc3R5bGUubmFtZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0eWxlLm5hbWUgKyAnLScgKyB0aGlzLnN0eWxlLnZhcmlhbnQgKyAnLW9zLScgKyB0aGlzLmNvbXBvbmVudE5hbWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmV2aW91c1N0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJldmlvdXNTdHlsZS5uYW1lICtcbiAgICAgICctJyArXG4gICAgICB0aGlzLnByZXZpb3VzU3R5bGUudmFyaWFudCArXG4gICAgICAnLW9zLScgK1xuICAgICAgdGhpcy5jb21wb25lbnROYW1lXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGUuY29sb3IgKyAnLW9zLScgKyB0aGlzLmNvbXBvbmVudE5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXZpb3VzQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXNTdHlsZS5jb2xvciArICctb3MtJyArIHRoaXMuY29tcG9uZW50TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkR2xvYmFsU3R5bGVzKCkge1xuICAgIC8vR2xvYmFsIHRoZW1lIGNvbmZpZ1xuICAgIHRoaXMuZ2xvYmFsQ29uZmlnRGF0YSA9IHRoaXMuZ2xvYmFsQ29uZmlnU2VydmljZS5nZXRHbG9iYWxUaGVtZSgpO1xuICAgIHRoaXMuc3R5bGUubmFtZSA9IHRoaXMuZ2xvYmFsQ29uZmlnRGF0YS5uYW1lO1xuICAgIHRoaXMuc3R5bGUudmFyaWFudCA9IHRoaXMuZ2xvYmFsQ29uZmlnRGF0YS52YXJpYW50O1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICB0aGlzLmNvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuZ2V0U3R5bGUoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbG9hZFN0eWxlcygpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkU3R5bGUoKSkge1xuICAgICAgLy9SZW1vdmVzIG9sZCB0aGVtZSBjbGFzc1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnByZXZpb3VzU3R5bGUubmFtZSAhPT0gJycgJiZcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0eWxlLm5hbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnByZXZpb3VzU3R5bGUudmFyaWFudCAhPT0gJycgJiZcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0eWxlLnZhcmlhbnQgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgICAgdGhpcy5jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5nZXRQcmV2aW91c1N0eWxlKClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2aW91c1N0eWxlLm5hbWUgPSB0aGlzLnN0eWxlLm5hbWU7XG4gICAgICB0aGlzLnByZXZpb3VzU3R5bGUudmFyaWFudCA9IHRoaXMuc3R5bGUudmFyaWFudDtcblxuICAgICAgLy9BZGRzIHRoZW1lIGNsYXNzXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICB0aGlzLmNvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5nZXRTdHlsZSgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRHbG9iYWxTdHlsZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZENvbG9yKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWRDb2xvcigpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucHJldmlvdXNTdHlsZS5jb2xvciAhPT0gJycgJiZcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0eWxlLmNvbG9yICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgIHRoaXMuY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UHJldmlvdXNDb2xvcigpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXZpb3VzU3R5bGUuY29sb3IgPSB0aGlzLnN0eWxlLmNvbG9yO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICB0aGlzLmNvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5nZXRDb2xvcigpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoYW5nZXNbJ3RoZW1lJ10gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc3R5bGUubmFtZSA9IGNoYW5nZXNbJ3RoZW1lJ10uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMudmFyaWFudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zdHlsZS52YXJpYW50ID0gY2hhbmdlc1sndmFyaWFudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXNbJ3RoZW1lJ10gIT0gdW5kZWZpbmVkIHx8IGNoYW5nZXNbJ3ZhcmlhbnQnXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sb2FkU3R5bGVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydjb2xvciddICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmxvYWRDb2xvcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19