@abp/ng.theme.basic
Version:
<h1> @abp/ng.theme.basic </h1>
82 lines • 12.2 kB
JavaScript
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==