ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
68 lines • 9.1 kB
JavaScript
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);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ImagePreloadService, deps: [{ token: DOCUMENT }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ImagePreloadService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ImagePreloadService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: i1.Platform }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJlbG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29yZS9zZXJ2aWNlcy9pbWFnZS1wcmVsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBY25ELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFDNEIsUUFBbUIsRUFDckMsUUFBa0I7UUFEQSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ3JDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFMcEIsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3BDLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUtuRCxDQUFDO0lBRUosVUFBVSxDQUFDLE1BQXFCO1FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QixPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxZQUFZLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQXFCO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBb0IsQ0FBQztRQUN4RSxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQXlCO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOzhHQXREVSxtQkFBbUIsa0JBS3BCLFFBQVE7a0hBTFAsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU1JLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbnRlcmZhY2UgUHJlbG9hZE9wdGlvbiB7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFByZWxvYWREaXNwb3NlSGFuZGxlID0gKCkgPT4gdm9pZDtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VQcmVsb2FkU2VydmljZSB7XG4gIHByaXZhdGUgY291bnRlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgbGlua1JlZnMgPSBuZXcgTWFwPHN0cmluZywgSFRNTExpbmtFbGVtZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IE56U2FmZUFueSxcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVxuICApIHt9XG5cbiAgYWRkUHJlbG9hZChvcHRpb246IFByZWxvYWRPcHRpb24pOiBQcmVsb2FkRGlzcG9zZUhhbmRsZSB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB1bmlxdWVLZXkgPSBgJHtvcHRpb24uc3JjfSR7b3B0aW9uLnNyY3NldH1gO1xuICAgIGxldCBjdXJyZW50Q291bnQgPSB0aGlzLmNvdW50ZXIuZ2V0KHVuaXF1ZUtleSkgfHwgMDtcbiAgICBjdXJyZW50Q291bnQrKztcbiAgICB0aGlzLmNvdW50ZXIuc2V0KHVuaXF1ZUtleSwgY3VycmVudENvdW50KTtcbiAgICBpZiAoIXRoaXMubGlua1JlZnMuaGFzKHVuaXF1ZUtleSkpIHtcbiAgICAgIGNvbnN0IGxpbmtOb2RlID0gdGhpcy5hcHBlbmRQcmVsb2FkTGluayhvcHRpb24pO1xuICAgICAgdGhpcy5saW5rUmVmcy5zZXQodW5pcXVlS2V5LCBsaW5rTm9kZSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jb3VudGVyLmhhcyh1bmlxdWVLZXkpKSB7XG4gICAgICAgIGxldCBjb3VudCA9IHRoaXMuY291bnRlci5nZXQodW5pcXVlS2V5KSE7XG4gICAgICAgIGNvdW50LS07XG4gICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGxpbmtOb2RlID0gdGhpcy5saW5rUmVmcy5nZXQodW5pcXVlS2V5KSE7XG4gICAgICAgICAgdGhpcy5yZW1vdmVQcmVsb2FkTGluayhsaW5rTm9kZSk7XG4gICAgICAgICAgdGhpcy5jb3VudGVyLmRlbGV0ZSh1bmlxdWVLZXkpO1xuICAgICAgICAgIHRoaXMubGlua1JlZnMuZGVsZXRlKHVuaXF1ZUtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb3VudGVyLnNldCh1bmlxdWVLZXksIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFByZWxvYWRMaW5rKG9wdGlvbjogUHJlbG9hZE9wdGlvbik6IEhUTUxMaW5rRWxlbWVudCB7XG4gICAgY29uc3QgbGlua05vZGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKSBhcyBIVE1MTGlua0VsZW1lbnQ7XG4gICAgbGlua05vZGUuc2V0QXR0cmlidXRlKCdyZWwnLCAncHJlbG9hZCcpO1xuICAgIGxpbmtOb2RlLnNldEF0dHJpYnV0ZSgnYXMnLCAnaW1hZ2UnKTtcbiAgICBsaW5rTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBvcHRpb24uc3JjKTtcblxuICAgIGlmIChvcHRpb24uc3Jjc2V0KSB7XG4gICAgICBsaW5rTm9kZS5zZXRBdHRyaWJ1dGUoJ2ltYWdlc3Jjc2V0Jywgb3B0aW9uLnNyY3NldCk7XG4gICAgfVxuICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rTm9kZSk7XG4gICAgcmV0dXJuIGxpbmtOb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQcmVsb2FkTGluayhsaW5rTm9kZTogSFRNTExpbmtFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnQuaGVhZC5jb250YWlucyhsaW5rTm9kZSkpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XG4gICAgfVxuICB9XG59XG4iXX0=