UNPKG

ng-zorro-antd

Version:

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

73 lines 8.95 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { Platform } from '@angular/cdk/platform'; import { DOCUMENT } from '@angular/common'; import { Inject, Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 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.ɵprov = i0.ɵɵdefineInjectable({ factory: function ImagePreloadService_Factory() { return new ImagePreloadService(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i2.Platform)); }, token: ImagePreloadService, providedIn: "root" }); ImagePreloadService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; ImagePreloadService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: Platform } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJlbG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29yZS9zZXJ2aWNlcy9pbWFnZS1wcmVsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFjbkQsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUFzQyxRQUFtQixFQUFVLFFBQWtCO1FBQS9DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSDdFLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7SUFFa0MsQ0FBQztJQUV6RixVQUFVLENBQUMsTUFBcUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsWUFBWSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQy9CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUFDO2dCQUN6QyxLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7b0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3BDO2FBQ0Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBcUI7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFvQixDQUFDO1FBQ3hFLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakIsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUF5QjtRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDOzs7O1lBdERGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQUtjLE1BQU0sU0FBQyxRQUFRO1lBcEJyQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmludGVyZmFjZSBQcmVsb2FkT3B0aW9uIHtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY3NldD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUHJlbG9hZERpc3Bvc2VIYW5kbGUgPSAoKSA9PiB2b2lkO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbWFnZVByZWxvYWRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb3VudGVyID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBsaW5rUmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MTGlua0VsZW1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogTnpTYWZlQW55LCBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSkge31cblxuICBhZGRQcmVsb2FkKG9wdGlvbjogUHJlbG9hZE9wdGlvbik6IFByZWxvYWREaXNwb3NlSGFuZGxlIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybiAoKSA9PiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IGAke29wdGlvbi5zcmN9JHtvcHRpb24uc3Jjc2V0fWA7XG4gICAgbGV0IGN1cnJlbnRDb3VudCA9IHRoaXMuY291bnRlci5nZXQodW5pcXVlS2V5KSB8fCAwO1xuICAgIGN1cnJlbnRDb3VudCsrO1xuICAgIHRoaXMuY291bnRlci5zZXQodW5pcXVlS2V5LCBjdXJyZW50Q291bnQpO1xuICAgIGlmICghdGhpcy5saW5rUmVmcy5oYXModW5pcXVlS2V5KSkge1xuICAgICAgY29uc3QgbGlua05vZGUgPSB0aGlzLmFwcGVuZFByZWxvYWRMaW5rKG9wdGlvbik7XG4gICAgICB0aGlzLmxpbmtSZWZzLnNldCh1bmlxdWVLZXksIGxpbmtOb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvdW50ZXIuaGFzKHVuaXF1ZUtleSkpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5jb3VudGVyLmdldCh1bmlxdWVLZXkpITtcbiAgICAgICAgY291bnQtLTtcbiAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgbGlua05vZGUgPSB0aGlzLmxpbmtSZWZzLmdldCh1bmlxdWVLZXkpITtcbiAgICAgICAgICB0aGlzLnJlbW92ZVByZWxvYWRMaW5rKGxpbmtOb2RlKTtcbiAgICAgICAgICB0aGlzLmNvdW50ZXIuZGVsZXRlKHVuaXF1ZUtleSk7XG4gICAgICAgICAgdGhpcy5saW5rUmVmcy5kZWxldGUodW5pcXVlS2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvdW50ZXIuc2V0KHVuaXF1ZUtleSwgY291bnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUHJlbG9hZExpbmsob3B0aW9uOiBQcmVsb2FkT3B0aW9uKTogSFRNTExpbmtFbGVtZW50IHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICBsaW5rTm9kZS5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdwcmVsb2FkJyk7XG4gICAgbGlua05vZGUuc2V0QXR0cmlidXRlKCdhcycsICdpbWFnZScpO1xuICAgIGxpbmtOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIG9wdGlvbi5zcmMpO1xuXG4gICAgaWYgKG9wdGlvbi5zcmNzZXQpIHtcbiAgICAgIGxpbmtOb2RlLnNldEF0dHJpYnV0ZSgnaW1hZ2VzcmNzZXQnLCBvcHRpb24uc3Jjc2V0KTtcbiAgICB9XG4gICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmtOb2RlKTtcbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVByZWxvYWRMaW5rKGxpbmtOb2RlOiBIVE1MTGlua0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudC5oZWFkLmNvbnRhaW5zKGxpbmtOb2RlKSkge1xuICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==