@pepperi/ngx-lib
Version:
Pepperi Angular Components and Services
127 lines • 14.5 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
// Const BIDI_RTL_LANGS Array
// BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left
// Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)
const _BIDI_RTL_LANGS = [
'ae',
'ar',
'arc',
'bcc',
'bqi',
'ckb',
'dv',
'fa',
'glk',
'he',
'ku',
'mzn',
'nqo',
'pnb',
'ps',
'sd',
'ug',
'ur',
'yi' /* 'ייִדיש', Yiddish */
];
export var ORIENTATION;
(function (ORIENTATION) {
ORIENTATION[ORIENTATION["Landscape"] = 0] = "Landscape";
ORIENTATION[ORIENTATION["Portrait"] = 1] = "Portrait";
})(ORIENTATION || (ORIENTATION = {}));
export var SCREEN_SIZE;
(function (SCREEN_SIZE) {
SCREEN_SIZE[SCREEN_SIZE["XL"] = 0] = "XL";
SCREEN_SIZE[SCREEN_SIZE["LG"] = 1] = "LG";
SCREEN_SIZE[SCREEN_SIZE["MD"] = 2] = "MD";
SCREEN_SIZE[SCREEN_SIZE["SM"] = 3] = "SM";
SCREEN_SIZE[SCREEN_SIZE["XS"] = 4] = "XS";
})(SCREEN_SIZE || (SCREEN_SIZE = {}));
export class LayoutService {
constructor(translate) {
this.translate = translate;
this.resizeSubject = new BehaviorSubject(SCREEN_SIZE.LG);
}
get onResize$() {
return this.resizeSubject.asObservable().pipe(distinctUntilChanged());
}
/**
* Set the current screen size.
* @param size The size to change to.
*/
onResize(size) {
this.resizeSubject.next(size);
}
getOrintation() {
if (window.innerHeight > window.innerWidth) {
return ORIENTATION.Portrait;
}
else {
return ORIENTATION.Landscape;
}
}
getScreenWidth() {
let retVal = 250.0;
switch (this.resizeSubject.getValue()) {
case SCREEN_SIZE.XS: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 130.0 : 65.0;
break;
}
case SCREEN_SIZE.SM:
case SCREEN_SIZE.MD: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 220.0 : 140.0;
break;
}
case SCREEN_SIZE.LG: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 400.0 : 250.0;
break;
}
}
return retVal;
}
getScreenHeight() {
let retVal = 250.0;
switch (this.resizeSubject.getValue()) {
case SCREEN_SIZE.XS: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 65.0 : 130.0;
break;
}
case SCREEN_SIZE.SM:
case SCREEN_SIZE.MD: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 140.0 : 220.0;
break;
}
case SCREEN_SIZE.LG: {
retVal = this.getOrintation() === ORIENTATION.Landscape ? 250.0 : 400.0;
break;
}
}
return retVal;
}
getScreenHeightPx() {
return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
}
getScreenWidthPx() {
return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
}
getCurrentLanguage() {
return this.translate && this.translate.currentLang || navigator.language;
}
isRtl() {
const userLang = this.getCurrentLanguage();
const isRtl = _BIDI_RTL_LANGS.indexOf(userLang) >= 0;
return isRtl;
}
}
LayoutService.ɵfac = function LayoutService_Factory(t) { return new (t || LayoutService)(i0.ɵɵinject(i1.TranslateService)); };
LayoutService.ɵprov = i0.ɵɵdefineInjectable({ token: LayoutService, factory: LayoutService.ɵfac, providedIn: 'root' });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(LayoutService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], function () { return [{ type: i1.TranslateService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2xheW91dC9sYXlvdXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBR3RELDZCQUE2QjtBQUM3QixpRUFBaUU7QUFDakUsOEVBQThFO0FBQzlFLE1BQU0sZUFBZSxHQUFHO0lBQ3BCLElBQUk7SUFDSixJQUFJO0lBQ0osS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLElBQUk7SUFDSixJQUFJO0lBQ0osS0FBSztJQUNMLElBQUk7SUFDSixJQUFJO0lBQ0osS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUksQ0FBSSx1QkFBdUI7Q0FDbEMsQ0FBQztBQUVGLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDbkIsdURBQVMsQ0FBQTtJQUNULHFEQUFRLENBQUE7QUFDWixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQU1YO0FBTkQsV0FBWSxXQUFXO0lBQ25CLHlDQUFFLENBQUE7SUFDRix5Q0FBRSxDQUFBO0lBQ0YseUNBQUUsQ0FBQTtJQUNGLHlDQUFFLENBQUE7SUFDRix5Q0FBRSxDQUFBO0FBQ04sQ0FBQyxFQU5XLFdBQVcsS0FBWCxXQUFXLFFBTXRCO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFPdEIsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Ms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VSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM5RSxDQUFDO0lBRU0sS0FBSztRQUNSLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OzBFQXBGUSxhQUFhO3FEQUFiLGFBQWEsV0FBYixhQUFhLG1CQUZWLE1BQU07a0RBRVQsYUFBYTtjQUh6QixVQUFVO2VBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuLy8gQ29uc3QgQklESV9SVExfTEFOR1MgQXJyYXlcclxuLy8gQklESV9SVExfTEFOR1MgcmVmOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JpZ2h0LXRvLWxlZnRcclxuLy8gVGFibGUgb2Ygc2NyaXB0cyBpbiBVbmljb2RlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY3JpcHRfKFVuaWNvZGUpXHJcbmNvbnN0IF9CSURJX1JUTF9MQU5HUyA9IFtcclxuICAgICdhZScsXHQvKiBBdmVzdGFuICovXHJcbiAgICAnYXInLCAgIC8qICfYp9mE2LnYsdio2YrYqScsIEFyYWJpYyAqL1xyXG4gICAgJ2FyYycsICAvKiBBcmFtYWljICovXHJcbiAgICAnYmNjJywgIC8qICfYqNmE2YjahtuMINmF2qnYsdin2YbbjCcsIFNvdXRoZXJuIEJhbG9jaGkgKi9cclxuICAgICdicWknLCAgLyogJ9io2K7YqtmK2KfYsdmKJywgQmFrdGhpYXJpICovXHJcbiAgICAnY2tiJywgIC8qICdTb3JhbsOuIC8g2qnZiNix2K/bjCcsIFNvcmFuaSAqL1xyXG4gICAgJ2R2JywgICAvKiBEaGl2ZWhpICovXHJcbiAgICAnZmEnLCAgIC8qICfZgdin2LHYs9uMJywgUGVyc2lhbiAqL1xyXG4gICAgJ2dsaycsICAvKiAn2q/bjNmE2qnbjCcsIEdpbGFraSAqL1xyXG4gICAgJ2hlJywgICAvKiAn16LXkdeo15nXqicsIEhlYnJldyAqL1xyXG4gICAgJ2t1JywgICAvKiAnS3VyZMOuIC8g2YPZiNix2K/bjCcsIEt1cmRpc2ggKi9cclxuICAgICdtem4nLCAgLyogJ9mF2KfYstmQ2LHZiNmG24wnLCBNYXphbmRlcmFuaSAqL1xyXG4gICAgJ25xbycsICAvKiBOJ0tvICovXHJcbiAgICAncG5iJywgIC8qICfZvtmG2KzYp9io24wnLCBXZXN0ZXJuIFB1bmphYmkgKi9cclxuICAgICdwcycsICAgLyogJ9m+2prYqtmIJywgUGFzaHRvLCAqL1xyXG4gICAgJ3NkJywgICAvKiAn2LPZhtqM2YonLCBTaW5kaGkgKi9cclxuICAgICd1ZycsICAgLyogJ1V5Z2h1cmNoZSAvINim24fZiti624fYsdqG25UnLCBVeWdodXIgKi9cclxuICAgICd1cicsICAgLyogJ9in2LHYr9mIJywgVXJkdSAqL1xyXG4gICAgJ3lpJyAgICAvKiAn15nXmda015PXmdepJywgWWlkZGlzaCAqL1xyXG5dO1xyXG5cclxuZXhwb3J0IGVudW0gT1JJRU5UQVRJT04ge1xyXG4gICAgTGFuZHNjYXBlLFxyXG4gICAgUG9ydHJhaXQsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNDUkVFTl9TSVpFIHtcclxuICAgIFhMLFxyXG4gICAgTEcsXHJcbiAgICBNRCxcclxuICAgIFNNLFxyXG4gICAgWFMsXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExheW91dFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZXNpemVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8U0NSRUVOX1NJWkU+O1xyXG5cclxuICAgIGdldCBvblJlc2l6ZSQoKTogT2JzZXJ2YWJsZTxTQ1JFRU5fU0laRT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucmVzaXplU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoU0NSRUVOX1NJWkUuTEcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjdXJyZW50IHNjcmVlbiBzaXplLlxyXG4gICAgICogQHBhcmFtIHNpemUgVGhlIHNpemUgdG8gY2hhbmdlIHRvLlxyXG4gICAgICovXHJcbiAgICBvblJlc2l6ZShzaXplOiBTQ1JFRU5fU0laRSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVzaXplU3ViamVjdC5uZXh0KHNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPcmludGF0aW9uKCk6IE9SSUVOVEFUSU9OIHtcclxuICAgICAgICBpZiAod2luZG93LmlubmVySGVpZ2h0ID4gd2luZG93LmlubmVyV2lkdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9SSUVOVEFUSU9OLlBvcnRyYWl0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPUklFTlRBVElPTi5MYW5kc2NhcGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTY3JlZW5XaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCByZXRWYWwgPSAyNTAuMDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucmVzaXplU3ViamVjdC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU0NSRUVOX1NJWkUuWFM6IHtcclxuICAgICAgICAgICAgICAgIHJldFZhbCA9IHRoaXMuZ2V0T3JpbnRhdGlvbigpID09PSBPUklFTlRBVElPTi5MYW5kc2NhcGUgPyAxMzAuMCA6IDY1LjA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFNDUkVFTl9TSVpFLlNNOlxyXG4gICAgICAgICAgICBjYXNlIFNDUkVFTl9TSVpFLk1EOiB7XHJcbiAgICAgICAgICAgICAgICByZXRWYWwgPSB0aGlzLmdldE9yaW50YXRpb24oKSA9PT0gT1JJRU5UQVRJT04uTGFuZHNjYXBlID8gMjIwLjAgOiAxNDAuMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgU0NSRUVOX1NJWkUuTEc6IHtcclxuICAgICAgICAgICAgICAgIHJldFZhbCA9IHRoaXMuZ2V0T3JpbnRhdGlvbigpID09PSBPUklFTlRBVElPTi5MYW5kc2NhcGUgPyA0MDAuMCA6IDI1MC4wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2NyZWVuSGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHJldFZhbCA9IDI1MC4wO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5yZXNpemVTdWJqZWN0LmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgY2FzZSBTQ1JFRU5fU0laRS5YUzoge1xyXG4gICAgICAgICAgICAgICAgcmV0VmFsID0gdGhpcy5nZXRPcmludGF0aW9uKCkgPT09IE9SSUVOVEFUSU9OLkxhbmRzY2FwZSA/IDY1LjAgOiAxMzAuMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgU0NSRUVOX1NJWkUuU006XHJcbiAgICAgICAgICAgIGNhc2UgU0NSRUVOX1NJWkUuTUQ6IHtcclxuICAgICAgICAgICAgICAgIHJldFZhbCA9IHRoaXMuZ2V0T3JpbnRhdGlvbigpID09PSBPUklFTlRBVElPTi5MYW5kc2NhcGUgPyAxNDAuMCA6IDIyMC4wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBTQ1JFRU5fU0laRS5MRzoge1xyXG4gICAgICAgICAgICAgICAgcmV0VmFsID0gdGhpcy5nZXRPcmludGF0aW9uKCkgPT09IE9SSUVOVEFUSU9OLkxhbmRzY2FwZSA/IDI1MC4wIDogNDAwLjA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmFsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjcmVlbkhlaWdodFB4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjcmVlbldpZHRoUHgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudExhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IG5hdmlnYXRvci5sYW5ndWFnZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSdGwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdXNlckxhbmcgPSB0aGlzLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgICAgIGNvbnN0IGlzUnRsID0gX0JJRElfUlRMX0xBTkdTLmluZGV4T2YodXNlckxhbmcpID49IDA7XHJcblxyXG4gICAgICAgIHJldHVybiBpc1J0bDtcclxuICAgIH1cclxufVxyXG4iXX0=