UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

68 lines 9.01 kB
import { DOCUMENT } from '@angular/common'; import { Inject, Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/platform"; export class ImagePreloadService { constructor(document, platform) { this.document = document; this.platform = platform; this.counter = new Map(); this.linkRefs = new Map(); } addPreload(option) { if (this.platform.isBrowser) { return () => void 0; } const uniqueKey = `${option.src}${option.srcset}`; let currentCount = this.counter.get(uniqueKey) || 0; currentCount++; this.counter.set(uniqueKey, currentCount); if (!this.linkRefs.has(uniqueKey)) { const linkNode = this.appendPreloadLink(option); this.linkRefs.set(uniqueKey, linkNode); } return () => { if (this.counter.has(uniqueKey)) { let count = this.counter.get(uniqueKey); count--; if (count === 0) { const linkNode = this.linkRefs.get(uniqueKey); this.removePreloadLink(linkNode); this.counter.delete(uniqueKey); this.linkRefs.delete(uniqueKey); } else { this.counter.set(uniqueKey, count); } } }; } appendPreloadLink(option) { const linkNode = this.document.createElement('link'); linkNode.setAttribute('rel', 'preload'); linkNode.setAttribute('as', 'image'); linkNode.setAttribute('href', option.src); if (option.srcset) { linkNode.setAttribute('imagesrcset', option.srcset); } this.document.head.appendChild(linkNode); return linkNode; } removePreloadLink(linkNode) { if (this.document.head.contains(linkNode)) { this.document.head.removeChild(linkNode); } } } ImagePreloadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImagePreloadService, deps: [{ token: DOCUMENT }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); ImagePreloadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImagePreloadService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImagePreloadService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i1.Platform }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJlbG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29yZS9zZXJ2aWNlcy9pbWFnZS1wcmVsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBY25ELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBc0MsUUFBbUIsRUFBVSxRQUFrQjtRQUEvQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUg3RSxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0lBRWtDLENBQUM7SUFFekYsVUFBVSxDQUFDLE1BQXFCO1FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELFlBQVksRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQztnQkFDekMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUFDO29CQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNwQzthQUNGO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQXFCO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBb0IsQ0FBQztRQUN4RSxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2pCLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBeUI7UUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQzs7aUhBbkRVLG1CQUFtQixrQkFJVixRQUFRO3FIQUpqQixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFLYyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuaW50ZXJmYWNlIFByZWxvYWRPcHRpb24ge1xuICBzcmM6IHN0cmluZztcbiAgc3Jjc2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQcmVsb2FkRGlzcG9zZUhhbmRsZSA9ICgpID0+IHZvaWQ7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlUHJlbG9hZFNlcnZpY2Uge1xuICBwcml2YXRlIGNvdW50ZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIGxpbmtSZWZzID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxMaW5rRWxlbWVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBOelNhZmVBbnksIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtKSB7fVxuXG4gIGFkZFByZWxvYWQob3B0aW9uOiBQcmVsb2FkT3B0aW9uKTogUHJlbG9hZERpc3Bvc2VIYW5kbGUge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuICgpID0+IHZvaWQgMDtcbiAgICB9XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gYCR7b3B0aW9uLnNyY30ke29wdGlvbi5zcmNzZXR9YDtcbiAgICBsZXQgY3VycmVudENvdW50ID0gdGhpcy5jb3VudGVyLmdldCh1bmlxdWVLZXkpIHx8IDA7XG4gICAgY3VycmVudENvdW50Kys7XG4gICAgdGhpcy5jb3VudGVyLnNldCh1bmlxdWVLZXksIGN1cnJlbnRDb3VudCk7XG4gICAgaWYgKCF0aGlzLmxpbmtSZWZzLmhhcyh1bmlxdWVLZXkpKSB7XG4gICAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuYXBwZW5kUHJlbG9hZExpbmsob3B0aW9uKTtcbiAgICAgIHRoaXMubGlua1JlZnMuc2V0KHVuaXF1ZUtleSwgbGlua05vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY291bnRlci5oYXModW5pcXVlS2V5KSkge1xuICAgICAgICBsZXQgY291bnQgPSB0aGlzLmNvdW50ZXIuZ2V0KHVuaXF1ZUtleSkhO1xuICAgICAgICBjb3VudC0tO1xuICAgICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMubGlua1JlZnMuZ2V0KHVuaXF1ZUtleSkhO1xuICAgICAgICAgIHRoaXMucmVtb3ZlUHJlbG9hZExpbmsobGlua05vZGUpO1xuICAgICAgICAgIHRoaXMuY291bnRlci5kZWxldGUodW5pcXVlS2V5KTtcbiAgICAgICAgICB0aGlzLmxpbmtSZWZzLmRlbGV0ZSh1bmlxdWVLZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY291bnRlci5zZXQodW5pcXVlS2V5LCBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRQcmVsb2FkTGluayhvcHRpb246IFByZWxvYWRPcHRpb24pOiBIVE1MTGlua0VsZW1lbnQge1xuICAgIGNvbnN0IGxpbmtOb2RlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJykgYXMgSFRNTExpbmtFbGVtZW50O1xuICAgIGxpbmtOb2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ3ByZWxvYWQnKTtcbiAgICBsaW5rTm9kZS5zZXRBdHRyaWJ1dGUoJ2FzJywgJ2ltYWdlJyk7XG4gICAgbGlua05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgb3B0aW9uLnNyYyk7XG5cbiAgICBpZiAob3B0aW9uLnNyY3NldCkge1xuICAgICAgbGlua05vZGUuc2V0QXR0cmlidXRlKCdpbWFnZXNyY3NldCcsIG9wdGlvbi5zcmNzZXQpO1xuICAgIH1cbiAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGlua05vZGUpO1xuICAgIHJldHVybiBsaW5rTm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUHJlbG9hZExpbmsobGlua05vZGU6IEhUTUxMaW5rRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRvY3VtZW50LmhlYWQuY29udGFpbnMobGlua05vZGUpKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQobGlua05vZGUpO1xuICAgIH1cbiAgfVxufVxuIl19