barsa-novin-ray-core
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.6.
1 lines • 1.26 MB
Source Map (JSON)
{"version":3,"file":"barsa-novin-ray-core.mjs","sources":["../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/barsa-api.ts","../../../projects/barsa-novin-ray-core/src/lib/services/log.service.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/base.component.ts","../../../projects/barsa-novin-ray-core/src/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.ts","../../../projects/barsa-novin-ray-core/src/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.html","../../../projects/barsa-novin-ray-core/src/lib/date-services/date.service.ts","../../../projects/barsa-novin-ray-core/src/lib/date-services/date-hijri.service.ts","../../../projects/barsa-novin-ray-core/src/lib/date-services/date-miladi.service.ts","../../../projects/barsa-novin-ray-core/src/lib/date-services/date-shamsi.service.ts","../../../projects/barsa-novin-ray-core/src/lib/device.ts","../../../projects/barsa-novin-ray-core/src/lib/constants.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/mo-report-value.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/numeral.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/groupby.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/bbb-translate.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/context-menu.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/header-facet-value.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/seperator-fix.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/convert-to-style.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/tlbButtons.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/remove-newline.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/mo-value.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-tab.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/mo-report-value-concat.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-string.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/sort.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/barsa-icon-dict.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/fileinfo-count.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/control-ui.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/visible-value.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-toolbar-control.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/multiple-groupby.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/picture-field-source.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/fiori-icon.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/can-upload.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/list-count.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/total-summary.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/merge-fields-to-columns.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/find-column-by-db-name.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-columns-by-details.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/mo-info-ulv-paging.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/mo-info-ulv-data.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/reverse.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/column-customui.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/sanitize-text.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/column-custom-component.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/column-value.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/column-icon.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/rownumber.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/combo-row-img.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/tree-item-isexpanded.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/th-image-icon.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/find-preview-column.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/replace.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-workflow-mobile.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/hide-columns-inmobile.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/string-to-number.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/column-valueof-parameters.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/hide-accept-cancel-buttons.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/filter-inline-action-list.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/isimage.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/toolbar-settings.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/card-media-size.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/label-star-trim.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/split.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/dynamic-dark-color.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/pipes/chunk-array.pipe.ts","../../../projects/barsa-novin-ray-core/src/lib/services/api.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/breadcrumb.service.ts","../../../projects/barsa-novin-ray-core/src/lib/modal-root.component.ts","../../../projects/barsa-novin-ray-core/src/lib/services/barsa-dialog.service.ts","../../../projects/barsa-novin-ray-core/src/lib/not-found/not-found.component.ts","../../../projects/barsa-novin-ray-core/src/lib/not-found/not-found.component.html","../../../projects/barsa-novin-ray-core/src/lib/services/dynamic-component.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/form-panel.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/form.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/container.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/horizontal-layout.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/layout.service.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/portal-page.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/auth-guard.ts","../../../projects/barsa-novin-ray-core/src/lib/services/local-storage.service.ts","../../../projects/barsa-novin-ray-core/src/lib/form-page-routing/constants.ts","../../../projects/barsa-novin-ray-core/src/lib/services/application-ctrlr.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/portal.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/ui.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/ulvmain.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/upload.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/network-status.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/audio-recording.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/video-recording.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/indexeddb.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/barsa-storage.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/prompt-update.service.ts","../../../projects/barsa-novin-ray-core/src/lib/injdection-tokens.ts","../../../projects/barsa-novin-ray-core/src/lib/services/notification-sw.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/notification.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/column.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/service-worker-communication.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/save-scoll-position.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/routing.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/groupby.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/layout-main-content.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/tabpage.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/inmemory-storage.service.ts","../../../projects/barsa-novin-ray-core/src/lib/services/shellbar-height.service.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/field-base.ts","../../../projects/barsa-novin-ray-core/src/lib/from-intersection-observer.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-toolbar-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/system-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/report-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/report-item-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/application-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/layout-item-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/layout-panel-base.ts","../../../projects/barsa-novin-ray-core/src/lib/container.component.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/page-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/number-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/models.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/files-validation-helper.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/report-view-base.component.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-props.base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/linear-list-helper.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/page-with-form-handler-base.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-page-base.ts","../../../projects/barsa-novin-ray-core/src/lib/form/form.component.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/base.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/form-close.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-page.component.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/base-column-props.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/tile-props.ts","../../../projects/barsa-novin-ray-core/src/lib/abstract-classes/form-field-report-page.component.ts","../../../projects/barsa-novin-ray-core/src/lib/empty-page/empty-page.component.ts","../../../projects/barsa-novin-ray-core/src/lib/empty-page/empty-page.component.html","../../../projects/barsa-novin-ray-core/src/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.ts","../../../projects/barsa-novin-ray-core/src/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.html","../../../projects/barsa-novin-ray-core/src/lib/portal-page/portal-page.component.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/fill-empty-space.ts","../../../projects/barsa-novin-ray-core/src/lib/portal-page/portal-sidebar.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-dynamic.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/dynamic-form.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/dynamic-item.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-view-props.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-view-content-props.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-view-item-props.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-item-content-props.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/base-form-toolbaritem-props.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/dynamic-form-toolbar-item.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/dynamic-layout.component.ts","../../../projects/barsa-novin-ray-core/src/lib/dynamic-component/dynamic-tile-group.component.ts","../../../projects/barsa-novin-ray-core/src/lib/unlimit-session/unlimit-session.component.ts","../../../projects/barsa-novin-ray-core/src/lib/unlimit-session/unlimit-session.component.html","../../../projects/barsa-novin-ray-core/src/lib/directives/load-external-files.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/root-portal/root-portal.component.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/anchor-scroll.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/attr-rtl.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/column-resizer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/dynamic-command.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/ellipsify.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/field-binding.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/img-lazy.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/intersection-observer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/items-renderer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/numbers-only-input.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/placeHolder.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/render-ulv-viewer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/render-ulv-paging.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/table-resizer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/ulv-command.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/until-inview.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/workflow-choice-command.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/copy.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/ellapsis-text.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/mobile.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/body-click.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/prevent-default.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/stop-propagation.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/count-down.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/route-form-change.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/dynamic-style.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/nowraptext.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/label-mandatory.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/absolute-div-body.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/render-ulv.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/print-files.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/save-image.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/webotp.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/splide-slider.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/dynamic-root-variable.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/horizontal-responsive.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/measure-form-title-width.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/overflow-text.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/shortcut-register.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/shortcut-handler.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/barsa-readonly.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/resize-observer.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/column-value.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/scroll-to-selected.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/scroll-persist.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/tooltip.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/simplebar.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/directives/leaflet-longpress.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/portal-dynamic-page.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/portal-form-page.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/portal-report-page.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/tile-group-breadcrumb.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/resolvers/login-settings.resolver.ts","../../../projects/barsa-novin-ray-core/src/lib/form-new/form-new.component.ts","../../../projects/barsa-novin-ray-core/src/lib/report-container/report-container.component.ts","../../../projects/barsa-novin-ray-core/src/lib/report-container/report-container.component.html","../../../projects/barsa-novin-ray-core/src/lib/field-ui/field-ui.component.ts","../../../projects/barsa-novin-ray-core/src/lib/form-page-routing/barsa-sap-ui-form-page-routing.module.ts","../../../projects/barsa-novin-ray-core/src/lib/base.module.ts","../../../projects/barsa-novin-ray-core/src/lib/form-page-routing/barsa-sap-ui-form-page.module.ts","../../../projects/barsa-novin-ray-core/src/lib/controllers/base-controller.ts","../../../projects/barsa-novin-ray-core/src/lib/controllers/base-view.ts","../../../projects/barsa-novin-ray-core/src/lib/button-loading/button-loading.component.ts","../../../projects/barsa-novin-ray-core/src/lib/button-loading/button-loading.component.html","../../../projects/barsa-novin-ray-core/src/lib/base-ulv-setting.component.ts","../../../projects/barsa-novin-ray-core/src/lib/custom-route-reuse-strategy.ts","../../../projects/barsa-novin-ray-core/src/lib/redirect-home-guard.ts","../../../projects/barsa-novin-ray-core/src/lib/root-page/root-page.component.ts","../../../projects/barsa-novin-ray-core/src/lib/root-page/root-page.component.html","../../../projects/barsa-novin-ray-core/src/lib/resizable-module/resizable.directive.ts","../../../projects/barsa-novin-ray-core/src/lib/resizable-module/resizable.component.ts","../../../projects/barsa-novin-ray-core/src/lib/resizable-module/resizable.component.html","../../../projects/barsa-novin-ray-core/src/lib/resizable-module/resizable.module.ts","../../../projects/barsa-novin-ray-core/src/lib/not-internet/not-internet.component.ts","../../../projects/barsa-novin-ray-core/src/lib/not-internet/not-internet.component.html","../../../projects/barsa-novin-ray-core/src/lib/server-connection-error/server-connection-error.component.ts","../../../projects/barsa-novin-ray-core/src/lib/server-connection-error/server-connection-error.component.html","../../../projects/barsa-novin-ray-core/src/lib/barsa-novin-ray-core-routing.module.ts","../../../projects/barsa-novin-ray-core/src/lib/global-error-handler.ts","../../../projects/barsa-novin-ray-core/src/lib/barsa-novin-ray-core.module.ts","../../../projects/barsa-novin-ray-core/src/barsa-novin-ray-core.ts"],"sourcesContent":["export declare const Common: any;\r\nexport declare const Ul: any;\r\nexport declare const Ui: any;\r\nexport declare const Util: any;\r\nexport declare const Bw: any;\r\nexport declare const BBB: any;\r\nexport declare const LoginAction: any;\r\nexport declare const UlvMainCtrl: any;\r\nexport declare const LoginFormUi: any;\r\nexport declare const LoginFormData: any;\r\nexport declare const LoginForm: any;\r\nexport declare const Ext: any;\r\nexport declare const Offline: any;\r\nexport declare const GanttChartHelper: any;\r\nexport class BarsaApi {\r\n static idGenerator = -10000;\r\n static get GanttChartHelper(): any {\r\n return GanttChartHelper;\r\n }\r\n static get Offline(): any {\r\n return Offline;\r\n }\r\n static get Ext(): any {\r\n return Ext;\r\n }\r\n static get Common(): any {\r\n return Common;\r\n }\r\n static get Util(): any {\r\n return Util;\r\n }\r\n static get Ul(): any {\r\n return Ul;\r\n }\r\n static get Ui(): any {\r\n return Ui;\r\n }\r\n static get Bw(): any {\r\n return Bw;\r\n }\r\n static get BBB(): any {\r\n return BBB;\r\n }\r\n static get LoginForm(): any {\r\n return LoginForm;\r\n }\r\n static get LoginAction(): any {\r\n return LoginAction;\r\n }\r\n static get LoginFormUi(): any {\r\n return LoginFormUi;\r\n }\r\n static get LoginFormData(): any {\r\n return LoginFormData;\r\n }\r\n}\r\n","// angular\r\nimport { Injectable } from '@angular/core';\r\n\r\nexport interface IDebug {\r\n LEVEL_1: boolean;\r\n LEVEL_2: boolean;\r\n LEVEL_3: boolean;\r\n LEVEL_4: boolean;\r\n LEVEL_5: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LogService {\r\n public static DEBUG: IDebug = {\r\n LEVEL_1: false, // .warn only\r\n LEVEL_2: false, // .error only\r\n LEVEL_3: false, // .log + all the above\r\n LEVEL_4: false, // .log + all the above + info\r\n LEVEL_5: false // just info (excluding all else)\r\n };\r\n\r\n // info (extra messages like analytics)\r\n // use LEVEL_5 to see only these\r\n public info(...msg: Array<any>): void {\r\n if (LogService.DEBUG.LEVEL_5 || LogService.DEBUG.LEVEL_4) {\r\n // extra messages\r\n /* eslint-disable */\r\n console.info(msg);\r\n }\r\n }\r\n\r\n // debug (standard output)\r\n public debug(...msg: Array<any>): void {\r\n if (LogService.DEBUG.LEVEL_4 || LogService.DEBUG.LEVEL_3) {\r\n // console.debug does not work on {N} apps... use `log`\r\n /* eslint-disable */\r\n console.debug(msg);\r\n }\r\n }\r\n\r\n // error\r\n public error(...err: Array<any>): void {\r\n if (LogService.DEBUG.LEVEL_4 || LogService.DEBUG.LEVEL_3 || LogService.DEBUG.LEVEL_2) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n // warn\r\n public warn(...warn: Array<any>): void {\r\n if (LogService.DEBUG.LEVEL_4 || LogService.DEBUG.LEVEL_3 || LogService.DEBUG.LEVEL_1) {\r\n console.warn(warn);\r\n }\r\n }\r\n}\r\n","import {\r\n OnInit,\r\n AfterViewInit,\r\n Component,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n AfterContentInit,\r\n Input,\r\n ChangeDetectionStrategy,\r\n inject,\r\n ElementRef\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { BarsaApi } from './barsa-api';\r\nimport { LogService } from '../services/log.service';\r\n\r\n@Component({\r\n selector: 'bnrc-base',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport abstract class BaseComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy, OnChanges {\r\n // @Input() settings: any;\r\n @Input() rendered;\r\n protected _el = inject(ElementRef);\r\n protected _log = inject(LogService);\r\n protected readonly _onDestroy$: Subject<void> = new Subject<void>();\r\n get el(): ElementRef {\r\n return this._el;\r\n }\r\n ngAfterContentInit(): void {\r\n if (!BarsaApi.Common.Debug?.Data?.CustomUi) {\r\n return;\r\n }\r\n console.log('ngAfterContentInit');\r\n console.log(this);\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!BarsaApi.Common.Debug?.Data?.CustomUi) {\r\n return;\r\n }\r\n console.log(changes);\r\n }\r\n ngOnInit(): void {\r\n this.rendered = true;\r\n if (!BarsaApi.Common.Debug?.Data?.CustomUi) {\r\n return;\r\n }\r\n console.log('ngOnInit');\r\n console.log(this);\r\n }\r\n ngAfterViewInit(): void {\r\n if (!BarsaApi.Common.Debug?.Data?.CustomUi) {\r\n return;\r\n }\r\n console.log('ngAfterViewInit');\r\n console.log(this);\r\n }\r\n ngOnDestroy(): void {\r\n this._onDestroy$.next();\r\n this._onDestroy$.complete();\r\n if (!BarsaApi.Common.Debug?.Data?.CustomUi) {\r\n return;\r\n }\r\n console.log('ngOnDestroy');\r\n console.log(this);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { BaseComponent } from '../abstract-classes/base.component';\r\n@Component({\r\n selector: 'bnrc-empty-page-with-router-and-router-outlet',\r\n templateUrl: './empty-page-with-router-and-router-outlet.component.html',\r\n styleUrls: ['./empty-page-with-router-and-router-outlet.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EmptyPageWithRouterAndRouterOutletComponent extends BaseComponent {\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<ng-container #containerRef></ng-container>\r\n<router-outlet></router-outlet>\r\n<router-outlet name=\"main\"></router-outlet>\r\n","import { Injectable } from '@angular/core';\nimport moment, { Duration, DurationInputArg1, DurationInputArg2 } from 'moment';\n\nimport { DateInfo } from './date-info';\nimport { LogService } from '../services/log.service';\nimport { Moment } from 'moment';\n\n@Injectable()\nexport abstract class DateService {\n protected logService = new LogService();\n protected abstract locale: string;\n protected get now(): Date {\n return new Date();\n }\n monthNames(): string[] {\n return moment.localeData(this.locale).months();\n }\n\n includeDay(date: Date, startDate: Date, endDate: Date): boolean {\n return moment(date).isBetween(startDate, endDate);\n }\n duration(inp: DurationInputArg1, _?: DurationInputArg2): Duration {\n return moment.duration(inp);\n }\n\n day(date: Date): number {\n return moment(date).weekday();\n }\n\n getDayStr(mode: 'Today' | 'DaysBefore' | 'DaysAfter'): string {\n let date: Date;\n switch (mode) {\n case 'Today':\n date = this.now;\n break;\n case 'DaysBefore':\n date = new Date(this.now.setDate(this.now.getDate() - 1));\n break;\n case 'DaysAfter':\n date = new Date(this.now.setDate(this.now.getDate() + 1));\n break;\n }\n const momentOfDate = this.getMoment(date);\n return this.getDateString(momentOfDate, true, false);\n }\n\n getMonthStr(mode: 'ThisMonth' | 'NextMonth' | 'PrevMonth'): string {\n const momentOfDate = this.getMoment(this.now);\n let date: Date;\n switch (mode) {\n case 'ThisMonth':\n date = this.now;\n break;\n case 'NextMonth':\n date = this.addMonth(momentOfDate, 1);\n break;\n case 'PrevMonth':\n date = this.subtractMonth(momentOfDate, 1);\n break;\n default:\n date = this.now;\n break;\n }\n const dateInfo = this.getDateInfo(date);\n return dateInfo.monthName + ' ' + dateInfo.strYear;\n }\n\n getYearStr(mode: 'ThisYear' | 'PrevYear' | 'NextYear'): number {\n let year: number;\n const thisYear = this.getDateInfo(this.now).year;\n switch (mode) {\n case 'ThisYear':\n year = thisYear;\n break;\n case 'PrevYear':\n year = thisYear - 1;\n break;\n case 'NextYear':\n year = thisYear + 1;\n break;\n default:\n year = thisYear;\n break;\n }\n return year;\n }\n\n getWeekStr(mode: 'ThisWeek' | 'NextWeek' | 'PrevWeek'): string {\n const { from, to } = this.getWeekRange(mode);\n const strFirstDate = this.getDateString(from, true, false);\n const strLastDate = this.getDateString(to, true, false);\n return strFirstDate + this.toText() + strLastDate;\n }\n\n getWeekRange(mode: 'ThisWeek' | 'NextWeek' | 'PrevWeek'): {\n from: Moment;\n to: Moment;\n } {\n let from = moment();\n let to = moment();\n from.locale(this.locale);\n to.locale(this.locale);\n switch (mode) {\n case 'ThisWeek':\n from = from.startOf('week');\n to = to.endOf('week');\n break;\n case 'NextWeek':\n from = from.day(+7).startOf('week');\n to = to.day(+7).endOf('week');\n break;\n case 'PrevWeek':\n from = from.day(-7).startOf('week');\n to = to.day(-7).endOf('week');\n break;\n }\n\n return { from, to };\n }\n format(value: Date, format: string): string {\n const m = this.getMoment(value);\n return m.format(format);\n }\n getShortDateString(date: Date): string {\n const m = moment(date);\n m.locale('fa');\n const format = 'YYYY/MM/DD';\n return m.format(format);\n }\n\n protected checkSame(moment1, moment2, mode, prefix: '' | 'i' | 'j'): boolean {\n const yearF = `${prefix}YYYY`;\n const monthF = `${prefix}MM`;\n const dayF = `${prefix}DD`;\n const dayCompare = yearF + monthF + dayF;\n const monthCompare = yearF + monthF;\n const yearCompare = yearF;\n let val1;\n let val2;\n switch (mode) {\n case 'day':\n val1 = moment1.format(dayCompare);\n val2 = moment2.format(dayCompare);\n break;\n case 'month':\n val1 = moment1.format(monthCompare);\n val2 = moment2.format(monthCompare);\n break;\n case 'year':\n val1 = moment1.format(yearCompare);\n val2 = moment2.format(yearCompare);\n break;\n }\n return val1 === val2;\n }\n\n abstract subtractMonth(moment: any, value: number): Date;\n\n abstract addMonth(moment: any, value: number): Date;\n\n abstract from(date1: Date, date2: Date): string;\n\n abstract to(date: Date, endDate: Date): string;\n\n abstract getTimes(date: string | Date): string;\n\n abstract getDateTimeString(date: Date): string;\n\n abstract weeksCount(momentObj: any): number;\n\n abstract isSame(date1: Date, date2: Date, mode: 'year' | 'month' | 'day'): boolean;\n\n abstract strDate(date: Date): string;\n\n abstract date(date: Date): number;\n\n abstract endOfMonth(moment: any): Date;\n\n abstract startOfMonth(moment: any): Date;\n\n abstract getDateInfo(date: any): DateInfo;\n\n abstract daysInMonth(year: any, month: any): number;\n\n abstract getMoment(date?: Date): any;\n\n abstract stringToMoment(str: string, format: string): any;\n\n abstract getStrMonthName(date: Date): string;\n\n abstract getDateString(date, showDate, showTime): string;\n\n abstract parse(payload: { year: number; month: number; day: number; hour: string; minutes: string }): any;\n\n abstract weekdaysMin(): string[];\n\n abstract weekDays(): string[];\n\n abstract toText();\n}\n\n","import { Injectable } from '@angular/core';\n\nimport moment from 'moment-hijri';\nimport { DateInfo } from './date-info';\nimport { DateService } from './date.service';\nimport 'moment/locale/ar';\n@Injectable()\nexport class DateHijriService extends DateService {\n protected locale = 'ar';\n\n getTimes(date: string | Date): string {\n return moment(date).format('HH:mm');\n }\n weeksCount(momentObj: any): number {\n return moment.duration(moment(momentObj).endOf('iMonth') - moment(momentObj).startOf('iMonth')).weeks() + 1;\n }\n subtractMonth(momentOfDate: any, value: number): Date {\n return momentOfDate.subtract(value, 'iMonth').toDate();\n }\n addMonth(momentOfDate: any, value: number): Date {\n return momentOfDate.add(value, 'iMonth').toDate();\n }\n toText(): string {\n return 'الی ';\n }\n to(date1: Date, date2: Date): string {\n return moment(date1).to(date2);\n }\n from(date1: Date, date2: Date): string {\n return moment(date1).from(date2);\n }\n isSame(date1: Date, date2: Date, mode: 'year' | 'month' | 'day'): boolean {\n const m1 = moment(date1);\n const m2 = moment(date2);\n return this.checkSame(m1, m2, mode, 'i');\n }\n strDate(date: Date): string {\n return moment(date).format('iD');\n }\n weekdaysMin(): string[] {\n return moment.weekdaysMin();\n }\n weekDays(): string[] {\n return moment.weekdays();\n }\n date(date: Date): any {\n return moment(date).iDate();\n }\n endOfMonth(date: Date): any {\n return moment(date).endOf('iMonth').format('iYYYY-iMM-iDD hh:mm');\n }\n startOfMonth(date: Date): any {\n return moment(date).startOf('iMonth').format('iYYYY-iMM-iDD hh:mm');\n }\n getDateInfo(date: any): DateInfo {\n const m = moment(date);\n const shamsi = {\n year: m.iYear(),\n month: m.iMonth(),\n day: m.iDate(),\n hour: m.hour(),\n minutes: m.minute(),\n strYear: m.format('iYYYY'),\n strMonth: m.format('iM'),\n strDay: m.format('iD'),\n monthName: m.format('iMMMM'),\n dayInWeek: 0,\n dayName: m.format('dddd'),\n moment: m,\n date\n };\n shamsi.dayInWeek = m.daysInMonth(shamsi.year, shamsi.month);\n return shamsi;\n }\n daysInMonth(year: number, month: number): number {\n return moment.jDaysInMonth(year, month);\n }\n getMoment(date?: Date): any {\n if (!date) {\n date = new Date();\n }\n return moment(date);\n }\n stringToMoment(str: string, format: string): any {\n return moment(str, format);\n }\n getStrMonthName(date: Date): string {\n return moment(date).format('iMMMM');\n }\n parse(payload: { year: number; month: number; day: number; hour: string; minutes: string }): any {\n const { year, month, day, hour, minutes } = payload;\n const format = 'iYYYY-iM-iD HH:mm';\n const value = `${year}-${month}-${day} ${hour}:${minutes}`;\n if (this.logService) {\n this.logService.info(value, format);\n }\n\n return moment(value, format);\n }\n monthNames(): string[] {\n return moment.localeData()._iMonths;\n }\n format(value: Date, format: string): string {\n const m = this.getMoment(value);\n format = format.indexOf('YYYY') > -1 ? format.replace('YYYY', 'i1111') : format;\n format = format.indexOf('YY') > -1 ? format.replace('YY', 'i11') : format;\n format = format.indexOf('MMMM') > -1 ? format.replace('MMMM', 'i2222') : format;\n format = format.indexOf('MM') > -1 ? format.replace('MM', 'i22') : format;\n format = format.indexOf('DD') > -1 ? format.replace('DD', 'i33') : format;\n\n format = format.replace(/1/g, 'Y');\n format = format.replace(/2/g, 'M');\n format = format.replace(/3/g, 'D');\n return m.format(format);\n }\n getShortDateString(date: Date): string {\n const m = moment(date);\n m.locale('ar-SA');\n const format = 'iYYYY/iMM/iDD';\n return m.format(format);\n }\n getDateTimeString(date: Date): string {\n const m = moment(date);\n m.locale('ar-SA');\n return m.format('iYYYY-iMM-iDD HH:mm');\n }\n getDateString(date: Date, showDate: boolean, showTime: boolean): string {\n const m = moment(date);\n let format = 'dddd';\n if (showDate) {\n format = `${format} iYYYY/iMM/iDD `;\n }\n if (showTime) {\n format = `${format} HH:mm`;\n }\n return m.format(format);\n }\n}\n\n","import { Injectable } from '@angular/core';\r\n\r\nimport moment from 'moment';\r\n\r\nimport { DateInfo } from './date-info';\r\nimport { DateService } from './date.service';\r\n\r\n@Injectable()\r\nexport class DateMiladiService extends DateService { \r\n protected locale = 'en'; \r\n\r\n constructor() {\r\n super();\r\n moment.locale('en');\r\n }\r\n getTimes(date: string | Date): string {\r\n return moment(date).format('HH:mm');\r\n }\r\n weeksCount(momentObj: any): number {\r\n return moment.duration(moment(momentObj).endOf('month').diff(moment(momentObj).startOf('month'))).asWeeks() + 1;\r\n }\r\n subtractMonth(momentOfDate: any, value: number): Date {\r\n return momentOfDate.subtract(value, 'months').toDate();\r\n }\r\n addMonth(momentOfDate: any, value: number): Date {\r\n return momentOfDate.add(value, 'months').toDate();\r\n }\r\n to(date1: Date, date2: Date): string {\r\n return moment(date1).to(date2);\r\n }\r\n from(date1: Date, date2: Date): string {\r\n return moment(date1).from(date2);\r\n }\r\n isSame(date1: Date, date2: Date, mode: 'year' | 'month' | 'day'): boolean {\r\n return moment(date1).isSame(date2, mode);\r\n }\r\n strDate(date: Date): string {\r\n return moment(date).format('D');\r\n }\r\n toText(): string {\r\n return 'to ';\r\n }\r\n date(date: Date): number {\r\n return moment(date).date();\r\n }\r\n endOfMonth(date: Date): Date {\r\n return new Date(moment(date).endOf('month').format('YYYY-MM-DD hh:mm'));\r\n }\r\n startOfMonth(date: Date): Date {\r\n return new Date(moment(date).startOf('month').format('YYYY-MM-DD hh:mm'));\r\n }\r\n getDateInfo(date: any): DateInfo {\r\n const m = moment(date);\r\n const miladi = {\r\n year: m.year(),\r\n month: m.month(),\r\n day: m.date(),\r\n hour: m.hour(),\r\n minutes: m.minute(),\r\n strYear: m.format('YYYY'),\r\n strMonth: m.format('M'),\r\n strDay: m.format('D'),\r\n monthName: m.format('MMMM'),\r\n dayInWeek: 0,\r\n moment: m,\r\n dayName: m.format('dddd'),\r\n date\r\n };\r\n miladi.dayInWeek = m.daysInMonth();\r\n return miladi;\r\n }\r\n daysInMonth(year: number, month: number): number {\r\n return moment([year, month]).daysInMonth();\r\n }\r\n getMoment(date?: Date): any {\r\n if (!date) {\r\n date = new Date();\r\n }\r\n return moment(date);\r\n }\r\n stringToMoment(str: string, format: string): any {\r\n return moment(str, format);\r\n }\r\n getStrMonthName(date: Date): string {\r\n return moment(date).format('MMMM');\r\n }\r\n parse(payload: { year: number; month: number; day: number; hour: string; minutes: string }): any {\r\n const { year, month, day, hour, minutes } = payload;\r\n const format = 'YYYY-M-D HH:mm';\r\n const value = `${year}-${month}-${day} ${hour}:${minutes}`;\r\n if (this.logService) {\r\n this.logService.info(value, format);\r\n }\r\n\r\n return moment(value, format);\r\n }\r\n\r\n getDateString(date: Date, showDate: boolean, showTime: boolean): string {\r\n const m = moment(date);\r\n m.locale('en');\r\n\r\n let format = 'dddd';\r\n if (showDate) {\r\n format = `${format} DD MM YYYY`;\r\n }\r\n if (showTime) {\r\n format = `${format} HH:mm`;\r\n }\r\n return m.format(format);\r\n }\r\n getDateTimeString(date: Date): string {\r\n const m = moment(date);\r\n m.locale('en');\r\n return m.format('YYYY-MM-DD HH:mm');\r\n }\r\n weekdaysMin(): string[] {\r\n return moment.weekdaysMin();\r\n }\r\n weekDays(): string[] {\r\n return moment.weekdays();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\n\nimport moment from 'moment-jalaali';\nimport { DateInfo } from './date-info';\nimport { DateService } from './date.service';\nimport 'moment/locale/fa';\n@Injectable()\nexport class DateShamsiService extends DateService {\n protected locale = 'fa';\n\n constructor() {\n super();\n moment.loadPersian({ usePersianDigits: true, dialect: 'persian-modern' });\n }\n\n getTimes(date: string | Date): string {\n return moment(date).format('HH:mm');\n }\n\n weeksCount(momentObj: any): number {\n return moment.duration(moment(momentObj).endOf('jMonth') - moment(momentObj).startOf('jMonth')).weeks() + 1;\n }\n\n subtractMonth(momentOfDate: any, value: number): Date {\n return momentOfDate.subtract(value, 'jMonth').toDate();\n }\n\n addMonth(momentOfDate: any, value: number): Date {\n return momentOfDate.add(value, 'jMonth').toDate();\n }\n\n to(date1: Date, date2: Date): string {\n return moment(date1).to(date2);\n }\n\n from(date1: Date, date2: Date): string {\n return moment(date1).from(date2);\n }\n\n isSame(date1: Date, date2: Date, mode: 'year' | 'month' | 'day'): boolean {\n const m1 = moment(date1);\n const m2 = moment(date2);\n return this.checkSame(m1, m2, mode, 'j');\n }\n\n strDate(date: Date): string {\n return moment(date).format('jD');\n }\n\n weekdaysMin(): Array<string> {\n return 'ش_ی_د_س_چ_پ_ج'.split('_');\n }\n\n weekDays(): Array<string> {\n return 'شنبه_یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه'.split('_');\n }\n toText(): string {\n return 'تا ';\n }\n date(date: Date): any {\n return moment(date).jDate();\n }\n\n endOfMonth(date: Date): Date {\n return moment(date).endOf('jMonth').toDate();\n }\n\n startOfMonth(date: Date): Date {\n return moment(date).startOf('jMonth').toDate();\n }\n\n monthNames(): string[] {\n return moment.localeData()._jMonths;\n }\n\n getDateInfo(date: any): DateInfo {\n const m = moment(date);\n const shamsi = {\n year: m.jYear(),\n month: m.jMonth(),\n day: m.jDate(),\n hour: m.hour(),\n minutes: m.minute(),\n strYear: m.format('jYYYY'),\n strMonth: m.format('jM'),\n strDay: m.format('jD'),\n monthName: m.format('jMMMM'),\n dayInWeek: 0,\n moment: m,\n dayName: m.format('dddd'),\n date\n };\n shamsi.dayInWeek = m.daysInMonth(shamsi.year, shamsi.month);\n return shamsi;\n }\n\n daysInMonth(year: number, month: number): number {\n return moment.jDaysInMonth(year, month);\n }\n\n getMoment(date?: Date): any {\n if (!date) {\n date = new Date();\n }\n return moment(date);\n }\n stringToMoment(str: string, format: string): any {\n format = this.convertFormatToJalali(format);\n return moment(str, format, true);\n }\n\n getStrMonthName(date: Date): string {\n return moment(date).format('jMMMM');\n }\n\n getDateTimeString(date: Date): string {\n const m = moment(date);\n m.locale('fa');\n return m.format('jYYYY/jMM/jDD HH:mm');\n }\n format(value: Date, format: string): string {\n const m = this.getMoment(value);\n format = this.convertFormatToJalali(format);\n return m.format(format);\n }\n convertFormatToJalali(format: string): string {\n format = format.indexOf('YYYY') > -1 ? format.replace('YYYY', 'j1111') : format;\n format = format.indexOf('YY') > -1 ? format.replace('YY', 'j11') : format;\n format = format.indexOf('MMMM') > -1 ? format.replace('MMMM', 'j2222') : format;\n format = format.indexOf('MM') > -1 ? format.replace('MM', 'j22') : format;\n format = format.indexOf('DD') > -1 ? format.replace('DD', 'j33') : format;\n\n format = format.replace(/1/g, 'Y');\n format = format.replace(/2/g, 'M');\n format = format.replace(/3/g, 'D');\n return format;\n }\n getShortDateString(date: Date): string {\n const m = moment(date);\n m.locale('fa');\n const format = 'jYYYY/jMM/jDD';\n return m.format(format);\n }\n getDateString(date: Date, showDate: boolean, showTime: boolean): string {\n const m = moment(date);\n m.locale('fa');\n let format = '';\n if (showDate) {\n format = `dddd jYYYY/jMM/jDD`;\n }\n if (showTime) {\n format = `${format} HH:mm`;\n }\n return m.format(format);\n }\n\n parse(payload: { year: number; month: number; day: number; hour: string; minutes: string }): any {\n const { year, month, day, hour, minutes } = payload;\n const format = 'jYYYY-jM-jD HH:mm';\n const value = `${year}-${month}-${day} ${hour}:${minutes}`;\n if (this.logService) {\n this.logService.info(value, format);\n }\n\n return moment(value, format);\n }\n}\n\n","/* eslint-disable */\r\n\r\nconst Device: { [key: string]: any } = {};\r\n\r\n// * ******* OS Detection ********\r\n\r\n/**\r\n * Contains information about the operating system of the Device.\r\n * @name Device.os\r\n */\r\n\r\n/**\r\n * Enumeration containing the names of known operating systems.\r\n * @name Device.os.OS\r\n */\r\n\r\n/**\r\n * The name of the operating system.\r\n * @name Device.os.name\r\n * @type String\r\n */\r\n\r\n/**\r\n * The version of the operating system as <code>string</code>. Might be empty if no version can be determined.\r\n * @name Device.os.versionStr\r\n * @type String\r\n */\r\n\r\n/**\r\n * The version of the operating system as <code>float</code>. Might be <code>-1</code> if no version can be determined.\r\n * @name Device.os.version\r\n * @type float\r\n */\r\n\r\n/**\r\n * If this flag is set to <code>true</code>, a Windows operating system is used.\r\n * @name Device.os.windows\r\n * @type boolean\r\n */\r\n\r\n/**\r\n * If this flag is set to <code>true</code>, a Mac operating system is used.\r\n * @name Device.os.macintosh\r\n * @type boolean\r\n */\r\n\r\n/*\r\n * If this flag is set to <code>true</code>, an iOS operating system is used.\r\n * @name Device.os.ios\r\n * @type boolean\r\n */\r\n\r\n/**\r\n * If this flag is set to <code>true</code>, an Android operating system is used.\r\n * @name Device.os.android\r\n * @type boolean\r\n */\r\n\r\n/*\r\n * Windows operating system name.\r\n * @see Device.os.name\r\n * @name Device.os.OS.WINDOWS\r\n */\r\n\r\n/**\r\n * MAC operating system name.\r\n * @see Device.os.name\r\n * @name Device.os.OS.MACINTOSH\r\n */\r\n\r\n/**\r\n * iOS operating system name.\r\n * @see Device.os.name\r\n * @name Device.os.OS.IOS\r\n */\r\n\r\n/**\r\n * Android operating system name.\r\n * @see Device.os.name\r\n * @name Device.os.OS.ANDROID\r\n */\r\n\r\nconst OS = {\r\n WINDOWS: 'win',\r\n MACINTOSH: 'mac',\r\n IOS: 'iOS',\r\n ANDROID: 'Android'\r\n};\r\n\r\nconst _getMobileOS = () => {\r\n const userAgent = navigator.userAgent;\r\n\r\n // iOS, Android\r\n let rPlatform = /\\(([a-zA-Z ]+);\\s(?:[U]?[;]?)([\\D]+)((?:[\\d._]*))(?:.*[)][^\\d]*)([\\d.]*)\\s/;\r\n let aMatches = userAgent.match(rPlatform);\r\n\r\n if (aMatches) {\r\n const rAppleDevices = /iPhone|iPad|iPod/;\r\n\r\n if (aMatches[0].match(rAppleDevices)) {\r\n aMatches[3] = aMatches[3].replace(/_/g, '.');\r\n\r\n return {\r\n name: OS.IOS,\r\n versionStr: aMatches[3]\r\n };\r\n }\r\n\r\n if (aMatches[2].match(/Android/)) {\r\n aMatches[2] = aMatches[2].replace(/\\s/g, '');\r\n return {\r\n name: OS.ANDROID,\r\n versionStr: aMatches[3]\r\n };\r\n }\r\n }\r\n\r\n // Firefox on Android\r\n rPlatform = /\\((Android)[\\s]?([\\d][.\\d]*)?;.*Firefox\\/[\\d][.\\d]*/;\r\n aMatches = userAgent.match(rPlatform);\r\n if (aMatches) {\r\n return {\r\n name: OS.ANDROID,\r\n versionStr: aMatches.length === 3 ? aMatches[2] : ''\r\n };\r\n }\r\n return {};\r\n};\r\n\r\nconst _getDesktopOS = () => {\r\n const sPlatform = navigator.platform;\r\n if (sPlatform.indexOf('Win') !== -1) {\r\n const rVersion = /Windows