|
|
|
|
@ -18,6 +18,8 @@ export class LazyStyleHandler {
|
|
|
|
|
private styles: string[];
|
|
|
|
|
private _dir: LocaleDirection = 'ltr';
|
|
|
|
|
|
|
|
|
|
readonly loaded = new Map<string, HTMLLinkElement>();
|
|
|
|
|
|
|
|
|
|
set dir(dir: LocaleDirection) {
|
|
|
|
|
if (dir === this._dir) return;
|
|
|
|
|
|
|
|
|
|
@ -36,9 +38,17 @@ export class LazyStyleHandler {
|
|
|
|
|
this.listenToLanguageChanges(injector);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getHrefFromLink(link: HTMLLinkElement | null): string {
|
|
|
|
|
if (!link) return '';
|
|
|
|
|
|
|
|
|
|
const a = document.createElement('a');
|
|
|
|
|
a.href = link.href;
|
|
|
|
|
return a.pathname.replace(/^\//, '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getLoadedBootstrap(): LoadedStyle {
|
|
|
|
|
const href = createLazyStyleHref(BOOTSTRAP, this.dir);
|
|
|
|
|
const selector = `[href$="${href}"]`;
|
|
|
|
|
const selector = `[href*="${href.replace(/\.css$/, '')}"]`;
|
|
|
|
|
const link = document.querySelector<HTMLLinkElement>(selector);
|
|
|
|
|
return { href, link };
|
|
|
|
|
}
|
|
|
|
|
@ -75,9 +85,19 @@ export class LazyStyleHandler {
|
|
|
|
|
this.styles.forEach(style => {
|
|
|
|
|
const oldHref = createLazyStyleHref(style, this.dir);
|
|
|
|
|
const newHref = createLazyStyleHref(style, dir);
|
|
|
|
|
|
|
|
|
|
const strategy = LOADING_STRATEGY.PrependAnonymousStyleToHead(newHref);
|
|
|
|
|
this.lazyLoad.load(strategy).subscribe(() => this.lazyLoad.remove(oldHref));
|
|
|
|
|
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) as HTMLLinkElement;
|
|
|
|
|
this.loaded.delete(newHref);
|
|
|
|
|
this.loaded.set(oldHref, oldLink);
|
|
|
|
|
const newLink = this.lazyLoad.loaded.get(href) as HTMLLinkElement;
|
|
|
|
|
this.lazyLoad.loaded.delete(href);
|
|
|
|
|
this.lazyLoad.loaded.set(newHref, newLink);
|
|
|
|
|
this.lazyLoad.remove(oldHref);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|