@foblex/platform
Version:
An Angular library providing a set of services for supporting server-side rendering (SSR) and other features.
70 lines • 8.13 kB
JavaScript
import { Injectable, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { F_WINDOW } from './window';
import { F_LOCAL_STORAGE } from './local-storage';
import * as i0 from "@angular/core";
import * as i1 from "./platform.service";
export class BrowserService {
injectedDocument;
windowService;
localStorageService;
platformService;
constructor(injectedDocument, windowService, localStorageService, platformService) {
this.injectedDocument = injectedDocument;
this.windowService = windowService;
this.localStorageService = localStorageService;
this.platformService = platformService;
}
isBrowser() {
return this.platformService.isBrowser;
}
get window() {
return this.windowService;
}
get localStorage() {
return this.localStorageService;
}
get document() {
return this.injectedDocument;
}
toPixels(value, clientWidth, clientHeight, fontSize) {
if (value.endsWith('px')) {
return parseFloat(value);
}
else if (value.endsWith('%')) {
const percentage = parseFloat(value) / 100;
return Math.max(clientWidth, clientHeight) * percentage;
}
else if (value.endsWith('em')) {
return parseFloat(value) * parseFloat(fontSize);
}
else if (value.endsWith('rem')) {
return parseFloat(value) * parseFloat(getComputedStyle(this.document.documentElement).fontSize);
}
else if (value.endsWith('vh')) {
const vh = this.window.innerHeight / 100;
return parseFloat(value) * vh;
}
else if (value.endsWith('vw')) {
const vw = this.window.innerWidth / 100;
return parseFloat(value) * vw;
}
return parseFloat(value) || 0;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrowserService, deps: [{ token: DOCUMENT }, { token: F_WINDOW }, { token: F_LOCAL_STORAGE }, { token: i1.PlatformService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrowserService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrowserService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [F_WINDOW]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [F_LOCAL_STORAGE]
}] }, { type: i1.PlatformService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1wbGF0Zm9ybS9zcmMvbGliL2Jyb3dzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBSWpFLE1BQU0sT0FBTyxjQUFjO0lBR0c7SUFDQTtJQUNPO0lBQ3pCO0lBSlYsWUFDNEIsZ0JBQTBCLEVBQzFCLGFBQTZCLEVBQ3RCLG1CQUFrQyxFQUMzRCxlQUFnQztRQUhkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBVTtRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFlO1FBQzNELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUUxQyxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQ3hGLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDekMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDeEMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzt1R0E1Q1UsY0FBYyxrQkFHZixRQUFRLGFBQ1IsUUFBUSxhQUNSLGVBQWU7MkdBTGQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBSTdCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZfV0lORE9XLCBJV2luZG93U2VydmljZSB9IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7IEZfTE9DQUxfU1RPUkFHRSwgSUxvY2FsU3RvcmFnZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuL3BsYXRmb3JtLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEJyb3dzZXJTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGluamVjdGVkRG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoRl9XSU5ET1cpIHByaXZhdGUgd2luZG93U2VydmljZTogSVdpbmRvd1NlcnZpY2UsXG4gICAgQEluamVjdChGX0xPQ0FMX1NUT1JBR0UpIHByaXZhdGUgbG9jYWxTdG9yYWdlU2VydmljZTogSUxvY2FsU3RvcmFnZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgcHVibGljIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuaXNCcm93c2VyO1xuICB9XG5cbiAgcHVibGljIGdldCB3aW5kb3coKTogSVdpbmRvd1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLndpbmRvd1NlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvY2FsU3RvcmFnZSgpOiBJTG9jYWxTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0ZWREb2N1bWVudDtcbiAgfVxuXG4gIHB1YmxpYyB0b1BpeGVscyh2YWx1ZTogc3RyaW5nLCBjbGllbnRXaWR0aDogbnVtYmVyLCBjbGllbnRIZWlnaHQ6IG51bWJlciwgZm9udFNpemU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5lbmRzV2l0aCgnJScpKSB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDA7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCkgKiBwZXJjZW50YWdlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUuZW5kc1dpdGgoJ2VtJykpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIHBhcnNlRmxvYXQoZm9udFNpemUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUuZW5kc1dpdGgoJ3JlbScpKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgKiBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmZvbnRTaXplKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKCd2aCcpKSB7XG4gICAgICBjb25zdCB2aCA9IHRoaXMud2luZG93LmlubmVySGVpZ2h0IC8gMTAwO1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpICogdmg7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5lbmRzV2l0aCgndncnKSkge1xuICAgICAgY29uc3QgdncgPSB0aGlzLndpbmRvdy5pbm5lcldpZHRoIC8gMTAwO1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpICogdnc7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwO1xuICB9XG59XG4iXX0=