UNPKG

@abp/ng.theme.basic

Version:

<h1> @abp/ng.theme.basic </h1>

82 lines 12.2 kB
import { LazyLoadService, LOADING_STRATEGY } from '@abp/ng.core'; import { DocumentDirHandlerService } from '@abp/ng.theme.shared'; import { Injectable, Injector } from '@angular/core'; import { LAZY_STYLES } from '../tokens/lazy-styles.token'; import * as i0 from "@angular/core"; export const BOOTSTRAP = 'bootstrap-{{dir}}.min.css'; export class LazyStyleHandler { constructor(injector) { this._dir = 'ltr'; this.loaded = new Map(); this.setStyles(injector); this.setLazyLoad(injector); this.listenToDirectionChanges(injector); } set dir(dir) { if (dir === this._dir) return; this.switchCSS(dir); this._dir = dir; } get dir() { return this._dir; } getHrefFromLink(link) { if (!link) return ''; const a = document.createElement('a'); a.href = link.href; return a.pathname.replace(/^\//, ''); } getLoadedBootstrap() { const href = createLazyStyleHref(BOOTSTRAP, this.dir); const selector = `[href*="${href.replace(/\.css$/, '')}"]`; const link = document.querySelector(selector); return { href, link }; } listenToDirectionChanges(injector) { const docDirHandler = injector.get(DocumentDirHandlerService); // will always listen, no need to unsubscribe docDirHandler.dir$.subscribe(dir => { this.dir = dir; }); } setLazyLoad(injector) { this.lazyLoad = injector.get(LazyLoadService); const { href, link } = this.getLoadedBootstrap(); this.lazyLoad.loaded.set(href, link); } setStyles(injector) { this.styles = injector.get(LAZY_STYLES, [BOOTSTRAP]); } switchCSS(dir) { this.styles.forEach(style => { const oldHref = createLazyStyleHref(style, this.dir); const newHref = createLazyStyleHref(style, dir); const link = this.loaded.get(newHref); const href = this.getHrefFromLink(link) || newHref; const strategy = LOADING_STRATEGY.PrependAnonymousStyleToHead(href); this.lazyLoad.load(strategy).subscribe(() => { const oldLink = this.lazyLoad.loaded.get(oldHref); this.loaded.delete(newHref); this.loaded.set(oldHref, oldLink); const newLink = this.lazyLoad.loaded.get(href); this.lazyLoad.loaded.delete(href); this.lazyLoad.loaded.set(newHref, newLink); this.lazyLoad.remove(oldHref); }); }); } } LazyStyleHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LazyStyleHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); LazyStyleHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LazyStyleHandler }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LazyStyleHandler, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); export function createLazyStyleHref(style, dir) { return style.replace(/{{\s*dir\s*}}/g, dir); } export function initLazyStyleHandler(injector) { return () => new LazyStyleHandler(injector); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1zdHlsZS5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtYmFzaWMvc3JjL2xpYi9oYW5kbGVycy9sYXp5LXN0eWxlLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQW1CLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUMxRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUM7QUFHckQsTUFBTSxPQUFPLGdCQUFnQjtJQWtCM0IsWUFBWSxRQUFrQjtRQWZ0QixTQUFJLEdBQW9CLEtBQUssQ0FBQztRQUU3QixXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFjbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBZkQsSUFBSSxHQUFHLENBQUMsR0FBb0I7UUFDMUIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRTlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBUU8sZUFBZSxDQUFDLElBQXdDO1FBQzlELElBQUks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QUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs2R0E1RVUsZ0JBQWdCO2lIQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7QUFnRlgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWEsRUFBRSxHQUFXO0lBQzVELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWtCO0lBQ3JELE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGF6eUxvYWRTZXJ2aWNlLCBMT0FESU5HX1NUUkFURUdZIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgRG9jdW1lbnREaXJIYW5kbGVyU2VydmljZSwgTG9jYWxlRGlyZWN0aW9uIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMQVpZX1NUWUxFUyB9IGZyb20gJy4uL3Rva2Vucy9sYXp5LXN0eWxlcy50b2tlbic7XHJcbmV4cG9ydCBjb25zdCBCT09UU1RSQVAgPSAnYm9vdHN0cmFwLXt7ZGlyfX0ubWluLmNzcyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMYXp5U3R5bGVIYW5kbGVyIHtcclxuICBwcml2YXRlIGxhenlMb2FkITogTGF6eUxvYWRTZXJ2aWNlO1xyXG4gIHByaXZhdGUgc3R5bGVzITogc3RyaW5nW107XHJcbiAgcHJpdmF0ZSBfZGlyOiBMb2NhbGVEaXJlY3Rpb24gPSAnbHRyJztcclxuXHJcbiAgcmVhZG9ubHkgbG9hZGVkID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxMaW5rRWxlbWVudD4oKTtcclxuXHJcbiAgc2V0IGRpcihkaXI6IExvY2FsZURpcmVjdGlvbikge1xyXG4gICAgaWYgKGRpciA9PT0gdGhpcy5fZGlyKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zd2l0Y2hDU1MoZGlyKTtcclxuICAgIHRoaXMuX2RpciA9IGRpcjtcclxuICB9XHJcblxyXG4gIGdldCBkaXIoKTogTG9jYWxlRGlyZWN0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXI7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMuc2V0U3R5bGVzKGluamVjdG9yKTtcclxuICAgIHRoaXMuc2V0TGF6eUxvYWQoaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5saXN0ZW5Ub0RpcmVjdGlvbkNoYW5nZXMoaW5qZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcmVmRnJvbUxpbmsobGluazogSFRNTExpbmtFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWxpbmspIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gbGluay5ocmVmO1xyXG4gICAgcmV0dXJuIGEucGF0aG5hbWUucmVwbGFjZSgvXlxcLy8sICcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9hZGVkQm9vdHN0cmFwKCk6IExvYWRlZFN0eWxlIHtcclxuICAgIGNvbnN0IGhyZWYgPSBjcmVhdGVMYXp5U3R5bGVIcmVmKEJPT1RTVFJBUCwgdGhpcy5kaXIpO1xyXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgW2hyZWYqPVwiJHtocmVmLnJlcGxhY2UoL1xcLmNzcyQvLCAnJyl9XCJdYDtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxMaW5rRWxlbWVudD4oc2VsZWN0b3IpO1xyXG4gICAgcmV0dXJuIHsgaHJlZiwgbGluayB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Ub0RpcmVjdGlvbkNoYW5nZXMoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBjb25zdCBkb2NEaXJIYW5kbGVyID0gaW5qZWN0b3IuZ2V0KERvY3VtZW50RGlySGFuZGxlclNlcnZpY2UpO1xyXG5cclxuICAgIC8vIHdpbGwgYWx3YXlzIGxpc3Rlbiwgbm8gbmVlZCB0byB1bnN1YnNjcmliZVxyXG4gICAgZG9jRGlySGFuZGxlci5kaXIkLnN1YnNjcmliZShkaXIgPT4ge1xyXG4gICAgICB0aGlzLmRpciA9IGRpcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMYXp5TG9hZChpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMubGF6eUxvYWQgPSBpbmplY3Rvci5nZXQoTGF6eUxvYWRTZXJ2aWNlKTtcclxuICAgIGNvbnN0IHsgaHJlZiwgbGluayB9ID0gdGhpcy5nZXRMb2FkZWRCb290c3RyYXAoKTtcclxuICAgIHRoaXMubGF6eUxvYWQubG9hZGVkLnNldChocmVmLCBsaW5rKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3R5bGVzKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5zdHlsZXMgPSBpbmplY3Rvci5nZXQoTEFaWV9TVFlMRVMsIFtCT09UU1RSQVBdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3dpdGNoQ1NTKGRpcjogTG9jYWxlRGlyZWN0aW9uKSB7XHJcbiAgICB0aGlzLnN0eWxlcy5mb3JFYWNoKHN0eWxlID0+IHtcclxuICAgICAgY29uc3Qgb2xkSHJlZiA9IGNyZWF0ZUxhenlTdHlsZUhyZWYoc3R5bGUsIHRoaXMuZGlyKTtcclxuICAgICAgY29uc3QgbmV3SHJlZiA9IGNyZWF0ZUxhenlTdHlsZUhyZWYoc3R5bGUsIGRpcik7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLmxvYWRlZC5nZXQobmV3SHJlZik7XHJcbiAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmdldEhyZWZGcm9tTGluayhsaW5rKSB8fCBuZXdIcmVmO1xyXG5cclxuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBMT0FESU5HX1NUUkFURUdZLlByZXBlbmRBbm9ueW1vdXNTdHlsZVRvSGVhZChocmVmKTtcclxuICAgICAgdGhpcy5sYXp5TG9hZC5sb2FkKHN0cmF0ZWd5KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9sZExpbmsgPSB0aGlzLmxhenlMb2FkLmxvYWRlZC5nZXQob2xkSHJlZikgYXMgSFRNTExpbmtFbGVtZW50O1xyXG4gICAgICAgIHRoaXMubG9hZGVkLmRlbGV0ZShuZXdIcmVmKTtcclxuICAgICAgICB0aGlzLmxvYWRlZC5zZXQob2xkSHJlZiwgb2xkTGluayk7XHJcbiAgICAgICAgY29uc3QgbmV3TGluayA9IHRoaXMubGF6eUxvYWQubG9hZGVkLmdldChocmVmKSBhcyBIVE1MTGlua0VsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5sYXp5TG9hZC5sb2FkZWQuZGVsZXRlKGhyZWYpO1xyXG4gICAgICAgIHRoaXMubGF6eUxvYWQubG9hZGVkLnNldChuZXdIcmVmLCBuZXdMaW5rKTtcclxuICAgICAgICB0aGlzLmxhenlMb2FkLnJlbW92ZShvbGRIcmVmKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXp5U3R5bGVIcmVmKHN0eWxlOiBzdHJpbmcsIGRpcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3R5bGUucmVwbGFjZSgve3tcXHMqZGlyXFxzKn19L2csIGRpcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0TGF6eVN0eWxlSGFuZGxlcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICByZXR1cm4gKCkgPT4gbmV3IExhenlTdHlsZUhhbmRsZXIoaW5qZWN0b3IpO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTG9hZGVkU3R5bGUge1xyXG4gIGhyZWY6IHN0cmluZztcclxuICBsaW5rOiBIVE1MTGlua0VsZW1lbnQgfCBudWxsO1xyXG59XHJcbiJdfQ==