@esfaenza/core 15.2.0
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 +24 -0
- package/components/back-top/back-top.component.d.ts +12 -0
- package/components/breadcrumb/breadcrumb.component.d.ts +15 -0
- package/components/components.module.d.ts +25 -0
- package/components/error/404/pagenotfound.component.d.ts +13 -0
- package/components/error/500/servererror.component.d.ts +17 -0
- package/components/error/Angular/angularerror.component.d.ts +24 -0
- package/components/external-page/external_pages.component.d.ts +21 -0
- package/components/index.d.ts +5 -0
- package/components/jace-login/jace-login.component.d.ts +7 -0
- package/components/navbar/modules-board/jace-modules-board.component.d.ts +13 -0
- package/components/navbar/navbar.component.d.ts +60 -0
- package/components/navbar/navbar.component.loc.d.ts +8 -0
- package/components/page/pages.component.d.ts +23 -0
- package/components/public-api.d.ts +13 -0
- package/components/redirecter/redirecter.component.d.ts +19 -0
- package/components/sidebar/sidebar.component.d.ts +39 -0
- package/components/sidebar/sidebar.component.service.d.ts +27 -0
- package/directives/directives.module.d.ts +9 -0
- package/directives/draggable/draggable.directive.d.ts +13 -0
- package/directives/index.d.ts +5 -0
- package/directives/public-api.d.ts +4 -0
- package/directives/slim-scroll/slim-scroll.directive.d.ts +15 -0
- package/directives/widget/widget.directive.d.ts +9 -0
- package/domain/index.d.ts +5 -0
- package/domain/models/core/classes/ApplicationMenu.d.ts +16 -0
- package/domain/models/core/classes/EnvOptions.d.ts +14 -0
- package/domain/models/jace/classes/AccountScope.d.ts +9 -0
- package/domain/models/jace/classes/ActiveModuleView.d.ts +15 -0
- package/domain/models/jace/classes/JaceAccount.d.ts +26 -0
- package/domain/models/jace/classes/JaceIdentity.d.ts +17 -0
- package/domain/models/jace/classes/JaceModule.d.ts +6 -0
- package/domain/models/jace/classes/JacePermission.d.ts +9 -0
- package/domain/models/jace/classes/JaceRole.d.ts +11 -0
- package/domain/models/jace/classes/User.d.ts +4 -0
- package/domain/public-api.d.ts +11 -0
- package/domain/tokens.d.ts +16 -0
- package/esm2020/components/back-top/back-top.component.mjs +43 -0
- package/esm2020/components/breadcrumb/breadcrumb.component.mjs +55 -0
- package/esm2020/components/components.module.mjs +74 -0
- package/esm2020/components/error/404/pagenotfound.component.mjs +27 -0
- package/esm2020/components/error/500/servererror.component.mjs +35 -0
- package/esm2020/components/error/Angular/angularerror.component.mjs +50 -0
- package/esm2020/components/esfaenza-core-components.mjs +5 -0
- package/esm2020/components/external-page/external_pages.component.mjs +46 -0
- package/esm2020/components/jace-login/jace-login.component.mjs +17 -0
- package/esm2020/components/navbar/modules-board/jace-modules-board.component.mjs +40 -0
- package/esm2020/components/navbar/navbar.component.loc.mjs +36 -0
- package/esm2020/components/navbar/navbar.component.mjs +179 -0
- package/esm2020/components/page/pages.component.mjs +57 -0
- package/esm2020/components/public-api.mjs +14 -0
- package/esm2020/components/redirecter/redirecter.component.mjs +53 -0
- package/esm2020/components/sidebar/sidebar.component.mjs +179 -0
- package/esm2020/components/sidebar/sidebar.component.service.mjs +58 -0
- package/esm2020/directives/directives.module.mjs +18 -0
- package/esm2020/directives/draggable/draggable.directive.mjs +48 -0
- package/esm2020/directives/esfaenza-core-directives.mjs +5 -0
- package/esm2020/directives/public-api.mjs +5 -0
- package/esm2020/directives/slim-scroll/slim-scroll.directive.mjs +40 -0
- package/esm2020/directives/widget/widget.directive.mjs +36 -0
- package/esm2020/domain/esfaenza-core-domain.mjs +5 -0
- package/esm2020/domain/models/core/classes/ApplicationMenu.mjs +26 -0
- package/esm2020/domain/models/core/classes/EnvOptions.mjs +4 -0
- package/esm2020/domain/models/jace/classes/AccountScope.mjs +8 -0
- package/esm2020/domain/models/jace/classes/ActiveModuleView.mjs +9 -0
- package/esm2020/domain/models/jace/classes/JaceAccount.mjs +5 -0
- package/esm2020/domain/models/jace/classes/JaceIdentity.mjs +16 -0
- package/esm2020/domain/models/jace/classes/JaceModule.mjs +3 -0
- package/esm2020/domain/models/jace/classes/JacePermission.mjs +3 -0
- package/esm2020/domain/models/jace/classes/JaceRole.mjs +3 -0
- package/esm2020/domain/models/jace/classes/User.mjs +3 -0
- package/esm2020/domain/public-api.mjs +12 -0
- package/esm2020/domain/tokens.mjs +11 -0
- package/esm2020/esfaenza-core.mjs +5 -0
- package/esm2020/helpers/classes/ResizeListener.mjs +38 -0
- package/esm2020/helpers/esfaenza-core-helpers.mjs +5 -0
- package/esm2020/helpers/public-api.mjs +2 -0
- package/esm2020/lib/app.component.mjs +26 -0
- package/esm2020/lib/core.module.mjs +227 -0
- package/esm2020/modules/classes/_base.module.mjs +27 -0
- package/esm2020/modules/classes/t_c.module.mjs +85 -0
- package/esm2020/modules/esfaenza-core-modules.mjs +5 -0
- package/esm2020/modules/public-api.mjs +3 -0
- package/esm2020/pipes/esfaenza-core-pipes.mjs +5 -0
- package/esm2020/pipes/included_in/included_in.pipe.mjs +17 -0
- package/esm2020/pipes/pipes.module.mjs +20 -0
- package/esm2020/pipes/public-api.mjs +7 -0
- package/esm2020/pipes/safe_html/safe_html.pipe.mjs +18 -0
- package/esm2020/pipes/safe_script/safe_script.pipe.mjs +18 -0
- package/esm2020/pipes/safe_style/safe_style.pipe.mjs +18 -0
- package/esm2020/pipes/safe_url/safe_url.pipe.mjs +18 -0
- package/esm2020/public-api.mjs +4 -0
- package/esm2020/services/classes/app.accesstoken.mjs +51 -0
- package/esm2020/services/classes/app.errorhandler.mjs +41 -0
- package/esm2020/services/classes/app.event.mjs +27 -0
- package/esm2020/services/classes/app.httpextensions.loc.mjs +15 -0
- package/esm2020/services/classes/app.httpextensions.mjs +90 -0
- package/esm2020/services/classes/app.routeguard.mjs +22 -0
- package/esm2020/services/classes/app.session.mjs +33 -0
- package/esm2020/services/classes/app.state.mjs +172 -0
- package/esm2020/services/classes/preferences/app.cache.persistor.mjs +94 -0
- package/esm2020/services/classes/preferences/app.preference.persistor.mjs +94 -0
- package/esm2020/services/esfaenza-core-services.mjs +5 -0
- package/esm2020/services/public-api.mjs +10 -0
- package/fesm2015/esfaenza-core-components.mjs +870 -0
- package/fesm2015/esfaenza-core-components.mjs.map +1 -0
- package/fesm2015/esfaenza-core-directives.mjs +138 -0
- package/fesm2015/esfaenza-core-directives.mjs.map +1 -0
- package/fesm2015/esfaenza-core-domain.mjs +99 -0
- package/fesm2015/esfaenza-core-domain.mjs.map +1 -0
- package/fesm2015/esfaenza-core-helpers.mjs +44 -0
- package/fesm2015/esfaenza-core-helpers.mjs.map +1 -0
- package/fesm2015/esfaenza-core-modules.mjs +112 -0
- package/fesm2015/esfaenza-core-modules.mjs.map +1 -0
- package/fesm2015/esfaenza-core-pipes.mjs +97 -0
- package/fesm2015/esfaenza-core-pipes.mjs.map +1 -0
- package/fesm2015/esfaenza-core-services.mjs +598 -0
- package/fesm2015/esfaenza-core-services.mjs.map +1 -0
- package/fesm2015/esfaenza-core.mjs +251 -0
- package/fesm2015/esfaenza-core.mjs.map +1 -0
- package/fesm2020/esfaenza-core-components.mjs +863 -0
- package/fesm2020/esfaenza-core-components.mjs.map +1 -0
- package/fesm2020/esfaenza-core-directives.mjs +138 -0
- package/fesm2020/esfaenza-core-directives.mjs.map +1 -0
- package/fesm2020/esfaenza-core-domain.mjs +98 -0
- package/fesm2020/esfaenza-core-domain.mjs.map +1 -0
- package/fesm2020/esfaenza-core-helpers.mjs +44 -0
- package/fesm2020/esfaenza-core-helpers.mjs.map +1 -0
- package/fesm2020/esfaenza-core-modules.mjs +112 -0
- package/fesm2020/esfaenza-core-modules.mjs.map +1 -0
- package/fesm2020/esfaenza-core-pipes.mjs +97 -0
- package/fesm2020/esfaenza-core-pipes.mjs.map +1 -0
- package/fesm2020/esfaenza-core-services.mjs +595 -0
- package/fesm2020/esfaenza-core-services.mjs.map +1 -0
- package/fesm2020/esfaenza-core.mjs +251 -0
- package/fesm2020/esfaenza-core.mjs.map +1 -0
- package/helpers/classes/ResizeListener.d.ts +12 -0
- package/helpers/index.d.ts +5 -0
- package/helpers/public-api.d.ts +1 -0
- package/index.d.ts +5 -0
- package/lib/app.component.d.ts +12 -0
- package/lib/core.module.d.ts +82 -0
- package/modules/classes/_base.module.d.ts +4 -0
- package/modules/classes/t_c.module.d.ts +19 -0
- package/modules/index.d.ts +5 -0
- package/modules/public-api.d.ts +2 -0
- package/package.json +115 -0
- package/pipes/included_in/included_in.pipe.d.ts +7 -0
- package/pipes/index.d.ts +5 -0
- package/pipes/pipes.module.d.ts +11 -0
- package/pipes/public-api.d.ts +6 -0
- package/pipes/safe_html/safe_html.pipe.d.ts +10 -0
- package/pipes/safe_script/safe_script.pipe.d.ts +10 -0
- package/pipes/safe_style/safe_style.pipe.d.ts +10 -0
- package/pipes/safe_url/safe_url.pipe.d.ts +10 -0
- package/public-api.d.ts +3 -0
- package/services/classes/app.accesstoken.d.ts +15 -0
- package/services/classes/app.errorhandler.d.ts +11 -0
- package/services/classes/app.event.d.ts +10 -0
- package/services/classes/app.httpextensions.d.ts +34 -0
- package/services/classes/app.httpextensions.loc.d.ts +8 -0
- package/services/classes/app.routeguard.d.ts +10 -0
- package/services/classes/app.session.d.ts +14 -0
- package/services/classes/app.state.d.ts +59 -0
- package/services/classes/preferences/app.cache.persistor.d.ts +25 -0
- package/services/classes/preferences/app.preference.persistor.d.ts +25 -0
- package/services/index.d.ts +5 -0
- package/services/public-api.d.ts +9 -0
- package/theme/initial.scss +48 -0
- package/theme/styles/_base.scss +257 -0
- package/theme/styles/_bootstrap-override.scss +1624 -0
- package/theme/styles/_font.scss +86 -0
- package/theme/styles/_fullcalendar-override.scss +86 -0
- package/theme/styles/_libs-override.scss +97 -0
- package/theme/styles/_material-override.scss +231 -0
- package/theme/styles/_mixins.scss +50 -0
- package/theme/styles/_preloader.scss +119 -0
- package/theme/styles/_project-override.scss +2383 -0
- package/theme/styles/_variables.scss +52 -0
- package/theme/styles/skins/_blue.scss +16 -0
|
@@ -0,0 +1,870 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, ViewEncapsulation, Input, ViewChild, HostListener, Injectable, ChangeDetectionStrategy, Inject, Optional, NgModule } from '@angular/core';
|
|
3
|
+
import * as i4 from '@esfaenza/core/services';
|
|
4
|
+
import * as i1 from '@angular/router';
|
|
5
|
+
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
6
|
+
import * as i3 from '@angular/platform-browser';
|
|
7
|
+
import * as i3$1 from '@angular/common';
|
|
8
|
+
import { CommonModule } from '@angular/common';
|
|
9
|
+
import * as i1$1 from '@esfaenza/preferences';
|
|
10
|
+
import * as i3$2 from '@esfaenza/httpservice';
|
|
11
|
+
import * as i4$1 from '@esfaenza/localizations';
|
|
12
|
+
import { LocalizationService, LocalizationModule } from '@esfaenza/localizations';
|
|
13
|
+
import * as i2 from '@esfaenza/signalr-notifications';
|
|
14
|
+
import * as i3$3 from '@esfaenza/extensions';
|
|
15
|
+
import * as i9 from '@angular/forms';
|
|
16
|
+
import { FormsModule } from '@angular/forms';
|
|
17
|
+
import * as i10 from 'ngx-bootstrap/progressbar';
|
|
18
|
+
import { ProgressbarModule } from 'ngx-bootstrap/progressbar';
|
|
19
|
+
import * as i11 from '@angular/material/slide-toggle';
|
|
20
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
21
|
+
import { CategoriesWithModules, MENU, MENU_LOCALIZATION, REDIRECT_MAP } from '@esfaenza/core/domain';
|
|
22
|
+
import * as i2$1 from '@esfaenza/access-control';
|
|
23
|
+
import * as i6 from '@esfaenza/core/directives';
|
|
24
|
+
import { DirectivesModule } from '@esfaenza/core/directives';
|
|
25
|
+
|
|
26
|
+
// Angular
|
|
27
|
+
class BackTop {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.position = 400;
|
|
30
|
+
this.showSpeed = 500;
|
|
31
|
+
this.moveSpeed = 1000;
|
|
32
|
+
}
|
|
33
|
+
ngAfterViewInit() {
|
|
34
|
+
this._onWindowScroll();
|
|
35
|
+
}
|
|
36
|
+
_onClick() {
|
|
37
|
+
$("html, body").animate({ scrollTop: 0 }, { duration: this.moveSpeed });
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
_onWindowScroll() {
|
|
41
|
+
let el = this._selector.nativeElement;
|
|
42
|
+
window.scrollY > this.position ? $(el).fadeIn(this.showSpeed) : $(el).fadeOut(this.showSpeed);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
BackTop.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BackTop, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
BackTop.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: BackTop, selector: "back-top", inputs: { position: "position", showSpeed: "showSpeed", moveSpeed: "moveSpeed" }, host: { listeners: { "click": "_onClick()", "window:scroll.out-zone": "_onWindowScroll()" } }, viewQueries: [{ propertyName: "_selector", first: true, predicate: ["backTop"], descendants: true }], ngImport: i0, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: [".back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#fff;background-color:#242d3abf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BackTop, decorators: [{
|
|
48
|
+
type: Component,
|
|
49
|
+
args: [{ selector: "back-top", encapsulation: ViewEncapsulation.None, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: [".back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#fff;background-color:#242d3abf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"] }]
|
|
50
|
+
}], propDecorators: { position: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], showSpeed: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], moveSpeed: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], _selector: [{
|
|
57
|
+
type: ViewChild,
|
|
58
|
+
args: ["backTop", { static: false }]
|
|
59
|
+
}], _onClick: [{
|
|
60
|
+
type: HostListener,
|
|
61
|
+
args: ["click"]
|
|
62
|
+
}], _onWindowScroll: [{
|
|
63
|
+
type: HostListener,
|
|
64
|
+
args: ["window:scroll.out-zone"]
|
|
65
|
+
}] } });
|
|
66
|
+
|
|
67
|
+
// Angular
|
|
68
|
+
class Breadcrumb {
|
|
69
|
+
constructor(_state, _activatedRoute, _titleService) {
|
|
70
|
+
this._state = _state;
|
|
71
|
+
this._activatedRoute = _activatedRoute;
|
|
72
|
+
this._titleService = _titleService;
|
|
73
|
+
this.activePageTitle = "";
|
|
74
|
+
this.subActiveLinks = [];
|
|
75
|
+
this._state.subscribe("menu.adjustNavigationTo", (activeLink) => {
|
|
76
|
+
if (activeLink) {
|
|
77
|
+
this.subActiveLinks = [];
|
|
78
|
+
this.activePageTitle = activeLink;
|
|
79
|
+
this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
/*Gestione della navigazione interna:
|
|
83
|
+
Essenzialmente controllo se la lista di subnavigation gi� contiene l'elemento in cui sono ora,
|
|
84
|
+
se lo contiene gi� significa che ci sono tornato sopra premendo back(browser o pagina), quindi
|
|
85
|
+
elimino l'ultimo elemento della lista per ristabilire la situazione, se invece l'elemento non esiste
|
|
86
|
+
vuol dire che ci ho navigato sopra, quindi lo aggiungo.*/
|
|
87
|
+
this._state.subscribe("menu.adjustSubNavigationTo", (activeLink) => {
|
|
88
|
+
if (activeLink) {
|
|
89
|
+
var index = this.subActiveLinks.indexOf(activeLink);
|
|
90
|
+
if (index != -1 && (index + 1) != this.subActiveLinks.length)
|
|
91
|
+
this.subActiveLinks.pop();
|
|
92
|
+
if (index == -1 && this.activePageTitle != activeLink)
|
|
93
|
+
this.subActiveLinks.push(activeLink);
|
|
94
|
+
this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
this._state.subscribe("menu.removeLastSubNavigation", () => {
|
|
98
|
+
this.subActiveLinks.pop();
|
|
99
|
+
});
|
|
100
|
+
this._state.subscribe("menu.cleanupSubNavigation", () => {
|
|
101
|
+
this.subActiveLinks = [];
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
ngOnInit() {
|
|
105
|
+
if (!this.activePageTitle)
|
|
106
|
+
this.activePageTitle = this._activatedRoute.snapshot.firstChild.data["title"];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, deps: [{ token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i3.Title }], target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
+
Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Breadcrumb, selector: "breadcrumb", ngImport: i0, template: "<div class=\"clearfix\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item fa fa-home m-t-3\"></li>\r\n <li class=\"breadcrumb-item active text-uppercase\">{{ activePageTitle }}</li>\r\n <li class=\"breadcrumb-item active text-uppercase e2eLeafPage\" *ngFor=\"let link of subActiveLinks\">{{ link }}</li>\r\n </ol>\r\n</div>", styles: [".breadcrumb{padding:0;background:transparent;color:#242424;font-size:14px;margin-bottom:15px}.breadcrumb-item+.breadcrumb-item:before{color:#242424;content:\">\"}.breadcrumb-item{float:left}.breadcrumb-item.active{color:#242424;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, decorators: [{
|
|
112
|
+
type: Component,
|
|
113
|
+
args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, template: "<div class=\"clearfix\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item fa fa-home m-t-3\"></li>\r\n <li class=\"breadcrumb-item active text-uppercase\">{{ activePageTitle }}</li>\r\n <li class=\"breadcrumb-item active text-uppercase e2eLeafPage\" *ngFor=\"let link of subActiveLinks\">{{ link }}</li>\r\n </ol>\r\n</div>", styles: [".breadcrumb{padding:0;background:transparent;color:#242424;font-size:14px;margin-bottom:15px}.breadcrumb-item+.breadcrumb-item:before{color:#242424;content:\">\"}.breadcrumb-item{float:left}.breadcrumb-item.active{color:#242424;font-weight:700}\n"] }]
|
|
114
|
+
}], ctorParameters: function () { return [{ type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i3.Title }]; } });
|
|
115
|
+
|
|
116
|
+
// Angular
|
|
117
|
+
class PageNotFoundComponent {
|
|
118
|
+
constructor(router, _location) {
|
|
119
|
+
this._location = _location;
|
|
120
|
+
this.router = router;
|
|
121
|
+
}
|
|
122
|
+
searchResult() {
|
|
123
|
+
this.router.navigate(["pages/search"]);
|
|
124
|
+
}
|
|
125
|
+
goPreviousPage() {
|
|
126
|
+
this._location.back();
|
|
127
|
+
}
|
|
128
|
+
goDashboard() {
|
|
129
|
+
this.router.navigate(["/pages/dashboard"]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PageNotFoundComponent, deps: [{ token: i1.Router }, { token: i3$1.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
+
PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PageNotFoundComponent, selector: "pagenotfound", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", encapsulation: i0.ViewEncapsulation.None });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PageNotFoundComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: "pagenotfound", encapsulation: ViewEncapsulation.None, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
137
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i3$1.Location }]; } });
|
|
138
|
+
|
|
139
|
+
// Angular
|
|
140
|
+
class ServerErrorComponent {
|
|
141
|
+
constructor(router, route, as) {
|
|
142
|
+
this.router = router;
|
|
143
|
+
this.route = route;
|
|
144
|
+
this.as = as;
|
|
145
|
+
this.statusCode = this.route.snapshot.params["statusCode"];
|
|
146
|
+
this.statusText = this.b64DecodeUnicode(this.route.snapshot.params["statusText"]);
|
|
147
|
+
this.previousUrl = this.route.snapshot.params["fromUrl"];
|
|
148
|
+
//Dopo 1 secondo considero la sfilza di errori finita
|
|
149
|
+
setTimeout(() => { this.as.handlingError = false; }, 1000);
|
|
150
|
+
}
|
|
151
|
+
b64DecodeUnicode(str) {
|
|
152
|
+
// Going backwards: from bytestream, to percent-encoding, to original string.
|
|
153
|
+
return decodeURIComponent(atob(str).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join(""));
|
|
154
|
+
}
|
|
155
|
+
goPreviousPage() {
|
|
156
|
+
this.router.navigateByUrl(this.previousUrl);
|
|
157
|
+
}
|
|
158
|
+
goDashboard() {
|
|
159
|
+
this.router.navigate(["/pages/dashboard"]);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i4.AppState }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
+
ServerErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ServerErrorComponent, selector: "servererror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, decorators: [{
|
|
165
|
+
type: Component,
|
|
166
|
+
args: [{ selector: "servererror", encapsulation: ViewEncapsulation.None, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
167
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i4.AppState }]; } });
|
|
168
|
+
|
|
169
|
+
// Angular
|
|
170
|
+
class AngularErrorComponent {
|
|
171
|
+
constructor(router, route, store, http, bts) {
|
|
172
|
+
this.router = router;
|
|
173
|
+
this.route = route;
|
|
174
|
+
this.store = store;
|
|
175
|
+
this.http = http;
|
|
176
|
+
this.bts = bts;
|
|
177
|
+
let identity = this.bts.getJaceIdentity();
|
|
178
|
+
this.previousUrl = this.route.snapshot.params["fromUrl"];
|
|
179
|
+
let calls = (this.http.LastThreeCompletedCalls[0] || "<empty>") + ", " + (this.http.LastThreeCompletedCalls[1] || "<empty>") + ", " + (this.http.LastThreeCompletedCalls[2] || "<empty>");
|
|
180
|
+
this.errorFrom = "From page: " + (this.previousUrl || "<missing>");
|
|
181
|
+
this.errorLastCalls = "Last three calls: " + calls;
|
|
182
|
+
this.identityInfos = "Logged user: " + ((identity === null || identity === void 0 ? void 0 : identity.Idtenant) || '??') + "-" + ((identity === null || identity === void 0 ? void 0 : identity.DsUser) || '???????');
|
|
183
|
+
this.errorMessage = this.b64DecodeUnicode(this.route.snapshot.params["errorMessage"]);
|
|
184
|
+
console.error(this.errorMessage);
|
|
185
|
+
}
|
|
186
|
+
ngOnInit() {
|
|
187
|
+
var item = this.store.getLocalItem("Reload");
|
|
188
|
+
if (item) {
|
|
189
|
+
this.store.removeItem("Reload");
|
|
190
|
+
this.router.navigate([item]);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
b64DecodeUnicode(str) {
|
|
194
|
+
// Going backwards: from bytestream, to percent-encoding, to original string.
|
|
195
|
+
return decodeURIComponent(atob(str).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join(""));
|
|
196
|
+
}
|
|
197
|
+
goPreviousPage() {
|
|
198
|
+
this.store.setLocalItem("Reload", this.previousUrl);
|
|
199
|
+
location.reload();
|
|
200
|
+
}
|
|
201
|
+
goDashboard() {
|
|
202
|
+
this.router.navigate(["/pages/dashboard"]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i1$1.CacheService }, { token: i3$2.HTTPService }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
|
|
206
|
+
AngularErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AngularErrorComponent, selector: "angularerror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, decorators: [{
|
|
208
|
+
type: Component,
|
|
209
|
+
args: [{ selector: "angularerror", encapsulation: ViewEncapsulation.None, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
210
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i1$1.CacheService }, { type: i3$2.HTTPService }, { type: i4.TokenService }]; } });
|
|
211
|
+
|
|
212
|
+
class NavBarLoc extends LocalizationService {
|
|
213
|
+
constructor(injector) {
|
|
214
|
+
super(injector);
|
|
215
|
+
super.set("it->en", "Sessione Scaduta", ["Expired session"]);
|
|
216
|
+
super.set("it->en", "Backend Offline", ["Backend Offline"]);
|
|
217
|
+
super.set("it->en", "Sembra che il Backend sia momentaneamente offline. Questa pagina si aggiornera' automaticamente non appena la situazione tornera' alla normalita'. Ci scusiamo per il disagio", ["Backend seems to be currently offline. This page will reset itself when the situation goes back to normal. Sorry for the inconvenience"]);
|
|
218
|
+
super.set("it->en", "Ripulisci la Cache", ["Clear Caches"]);
|
|
219
|
+
super.set("it->en", "Cache Ripulita", ["Cache Cleared"]);
|
|
220
|
+
super.set("it->en", "Ambiente di Produzione", ["Production Environment"]);
|
|
221
|
+
super.set("it->en", "È disponibile una nuova versione per l'applicazione corrente. Si suggerisce di ricaricare la pagina (CTRL + F5)", ["A new version is available for this application. It is suggested to reload this page (CTRL + F5)"]);
|
|
222
|
+
super.set("it->en", "Le informazioni di Sessione (Tenant/Account) sono cambiate a seguito di un login su modulo diverso utilizzando diverso Tenant/Utente sullo stesso browser. Si suggerisce di ricaricare la pagina (CTRL + F5)", ["Session informations (Tenant/Account) has changed after a login to a different module with the same Tenant/Username using the same browser. It is suggested to reload this page (CTRL + F5)"]);
|
|
223
|
+
super.set("it->en", "Cambia Modulo", ["Change module"]);
|
|
224
|
+
super.set("it->en", "Cambia Tenant", ["Change tenant"]);
|
|
225
|
+
super.set("it->en", "Usa notifiche semplici", ["Use simple alerts"]);
|
|
226
|
+
super.set("it->en", "Consenti notifiche eleganti", ["Allow fancy alerts"]);
|
|
227
|
+
super.set("it->en", "Ambiente di Sviluppo", ["Development Environment"]);
|
|
228
|
+
super.set("it->en", "Ripulisci le Preferenze Utente", ["Clear User Preferences"]);
|
|
229
|
+
super.set("it->en", "Preferenze utente ripulite", ["User preferences has been cleared"]);
|
|
230
|
+
super.set("it->en", "Ambiente di Staging", ["Staging Environment"]);
|
|
231
|
+
super.set("it->en", "Ambiente di Staging A", ["Staging A Environment"]);
|
|
232
|
+
super.set("it->en", "L'attuale sessione di lavoro non è più valida.<br>Si prega di eseguire nuovamente il login.", ["Current session has expired.<br>Please login back into the application."]);
|
|
233
|
+
super.set("it->en", "Notifiche", ["Notifications"]);
|
|
234
|
+
super.set("it->en", "Job Applicativi", ["Application Jobs"]);
|
|
235
|
+
super.set("it->en", "Al momento non c'è nulla in esecuzione", ["Nothing being executed at the moment"]);
|
|
236
|
+
super.set("it->en", "Job Completato", ["Job Completed"]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
NavBarLoc.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavBarLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
240
|
+
NavBarLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavBarLoc });
|
|
241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavBarLoc, decorators: [{
|
|
242
|
+
type: Injectable
|
|
243
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
244
|
+
|
|
245
|
+
// Angular
|
|
246
|
+
class JaceModulesBoardComponent {
|
|
247
|
+
constructor(bts) {
|
|
248
|
+
this.bts = bts;
|
|
249
|
+
this.Categories = [];
|
|
250
|
+
this.Tenant = this.bts.getJaceIdentity().Idtenant;
|
|
251
|
+
}
|
|
252
|
+
ngOnInit() {
|
|
253
|
+
if (!this.Modules)
|
|
254
|
+
return;
|
|
255
|
+
this.Modules.forEach(m => {
|
|
256
|
+
var _a;
|
|
257
|
+
//Fixo href
|
|
258
|
+
m.href = (_a = m.uiurl) === null || _a === void 0 ? void 0 : _a.replace("{tenant}", this.Tenant);
|
|
259
|
+
//Aggiungo il modulo alla categoria giusta. In ogni "fila" di moduli non ce ne possono essere pi� di 6
|
|
260
|
+
var prev = this.Categories.find(c => c.category.toUpperCase() == m.category.toUpperCase());
|
|
261
|
+
var lastRow = prev === null || prev === void 0 ? void 0 : prev.module_rows[prev.module_rows.length - 1];
|
|
262
|
+
if (prev && lastRow.length < 6)
|
|
263
|
+
lastRow.push(m);
|
|
264
|
+
else if (prev && lastRow.length == 6)
|
|
265
|
+
prev.module_rows.push([m]);
|
|
266
|
+
else
|
|
267
|
+
this.Categories.push(new CategoriesWithModules(m));
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
JaceModulesBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceModulesBoardComponent, deps: [{ token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
|
|
272
|
+
JaceModulesBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: { Modules: "Modules" }, ngImport: i0, template: "<div *ngIf=\"Categories\">\r\n <div *ngFor=\"let cat of Categories\">\r\n <div class=\"row\">\r\n <div class=\"section-title app-padding-left-0 app-padding-top-0\">\r\n {{cat.category}}\r\n </div>\r\n </div>\r\n <div *ngFor=\"let modRow of cat.module_rows\" class=\"row app-padding-left-10 app-padding-right-15\">\r\n <div class=\"module\" [class.module-available]=\"module.href\" [class.module-unavailable]=\"!module.href\" *ngFor=\"let module of modRow\">\r\n <a [href]=\"module.href\">\r\n <div class=\"module-name\"><span>{{module.name}}</span></div>\r\n <div class=\"module-footer\">\r\n <span class=\"fa-stack\"><i class=\"fa fa-circle-thin fa-stack-2x\"></i><i class=\"fa fa-chevron-right fa-stack-1x\"></i></span>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".module{padding:.4em .4em .4em .7em;height:6em;width:11.5em;background:#3d3d3d;border:1px solid #383737;border-radius:5px;text-align:center;color:#f7ca26;border-top:3px solid transparent;border-bottom:3px solid transparent;margin-left:5px;margin-bottom:5px}.module-name{color:#fcf9cf;font-family:Passion One,cursive;font-size:18px;text-transform:uppercase;text-align:left;height:65%;white-space:pre-line}.module-footer{height:25%;text-align:right;color:#f7ca26}.module-available{cursor:pointer}.module-available:hover{border-top:3px solid #8e9aaf;border-bottom:3px solid #8e9aaf;background-color:#242d3a;box-shadow:3px 3px 2px #151515}.module-available:hover .module-name{color:#fff}.module-available:hover .module-footer{color:#f7ca26}.module-unavailable,.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}.module-unavailable .module-name,.module-unavailable .module-footer{color:#7d7d7d!important}.section-title{margin-left:15px;margin-right:15px;text-align:left;color:#f7ca26;padding:.4em .4em .4em .7em;border-radius:5px;font-family:Passion One,cursive;font-size:20px;text-transform:uppercase}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceModulesBoardComponent, decorators: [{
|
|
274
|
+
type: Component,
|
|
275
|
+
args: [{ selector: "jace-modules-board", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"Categories\">\r\n <div *ngFor=\"let cat of Categories\">\r\n <div class=\"row\">\r\n <div class=\"section-title app-padding-left-0 app-padding-top-0\">\r\n {{cat.category}}\r\n </div>\r\n </div>\r\n <div *ngFor=\"let modRow of cat.module_rows\" class=\"row app-padding-left-10 app-padding-right-15\">\r\n <div class=\"module\" [class.module-available]=\"module.href\" [class.module-unavailable]=\"!module.href\" *ngFor=\"let module of modRow\">\r\n <a [href]=\"module.href\">\r\n <div class=\"module-name\"><span>{{module.name}}</span></div>\r\n <div class=\"module-footer\">\r\n <span class=\"fa-stack\"><i class=\"fa fa-circle-thin fa-stack-2x\"></i><i class=\"fa fa-chevron-right fa-stack-1x\"></i></span>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".module{padding:.4em .4em .4em .7em;height:6em;width:11.5em;background:#3d3d3d;border:1px solid #383737;border-radius:5px;text-align:center;color:#f7ca26;border-top:3px solid transparent;border-bottom:3px solid transparent;margin-left:5px;margin-bottom:5px}.module-name{color:#fcf9cf;font-family:Passion One,cursive;font-size:18px;text-transform:uppercase;text-align:left;height:65%;white-space:pre-line}.module-footer{height:25%;text-align:right;color:#f7ca26}.module-available{cursor:pointer}.module-available:hover{border-top:3px solid #8e9aaf;border-bottom:3px solid #8e9aaf;background-color:#242d3a;box-shadow:3px 3px 2px #151515}.module-available:hover .module-name{color:#fff}.module-available:hover .module-footer{color:#f7ca26}.module-unavailable,.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}.module-unavailable .module-name,.module-unavailable .module-footer{color:#7d7d7d!important}.section-title{margin-left:15px;margin-right:15px;text-align:left;color:#f7ca26;padding:.4em .4em .4em .7em;border-radius:5px;font-family:Passion One,cursive;font-size:20px;text-transform:uppercase}\n"] }]
|
|
276
|
+
}], ctorParameters: function () { return [{ type: i4.TokenService }]; }, propDecorators: { Modules: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}] } });
|
|
279
|
+
|
|
280
|
+
// Angular
|
|
281
|
+
// Chiamate ai Repository
|
|
282
|
+
const GET_Jace_GetActiveJaceModules = "/api/Jace/GetActiveJaceModules";
|
|
283
|
+
const GET_Adm_ClearAllCaches = "/api/Adm/ClearAllCaches";
|
|
284
|
+
class Navbar {
|
|
285
|
+
constructor(prefsService, cacheService, MessageDef, notifications, msgExts, lc, http, cdr, _state, sr, router) {
|
|
286
|
+
this.prefsService = prefsService;
|
|
287
|
+
this.cacheService = cacheService;
|
|
288
|
+
this.MessageDef = MessageDef;
|
|
289
|
+
this.notifications = notifications;
|
|
290
|
+
this.msgExts = msgExts;
|
|
291
|
+
this.lc = lc;
|
|
292
|
+
this.http = http;
|
|
293
|
+
this.cdr = cdr;
|
|
294
|
+
this._state = _state;
|
|
295
|
+
this.sr = sr;
|
|
296
|
+
this.router = router;
|
|
297
|
+
this.isMenuCollapsed = false;
|
|
298
|
+
this.applicationVersion = myconfig.AppData.ComponentVersion;
|
|
299
|
+
this.myconfig = myconfig;
|
|
300
|
+
this.anomaliesProcessing = false;
|
|
301
|
+
this.intervals = [];
|
|
302
|
+
this.user = "";
|
|
303
|
+
this.tenant = "";
|
|
304
|
+
this.idtenant = "";
|
|
305
|
+
this.groupName = "";
|
|
306
|
+
this.IsJaceAdmin = false;
|
|
307
|
+
this.newVersionWarned = false;
|
|
308
|
+
this.notificationsSubs = [];
|
|
309
|
+
this._state.subscribe("menu.isCollapsed", (isCollapsed) => { this.isMenuCollapsed = isCollapsed; });
|
|
310
|
+
this.thisLoc = lc.Locale;
|
|
311
|
+
this.checkIdentity();
|
|
312
|
+
this.getActiveJaceModules();
|
|
313
|
+
var i = setInterval(() => {
|
|
314
|
+
if (!myconfig.redirectInProgress) {
|
|
315
|
+
this.checkIdentity();
|
|
316
|
+
this.cdr.markForCheck();
|
|
317
|
+
}
|
|
318
|
+
}, 1000);
|
|
319
|
+
this.intervals.push(i);
|
|
320
|
+
this.startSignalRListening();
|
|
321
|
+
this._state.subscribe("app.completedJob", (jobDescription) => {
|
|
322
|
+
this.msgExts.simpleSuccess(this.lc.loc("Job Completato") + ": " + jobDescription);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
ngOnDestroy() {
|
|
326
|
+
this.intervals.forEach(i => { clearInterval(i); });
|
|
327
|
+
this.stopSignalRListening();
|
|
328
|
+
}
|
|
329
|
+
startSignalRListening() {
|
|
330
|
+
this.notificationsSubs.push(this.notifications.observe(this.MessageDef.IN_SendVersion).subscribe((message) => {
|
|
331
|
+
if (message != myconfig.AppData.ComponentVersion && !this.newVersionWarned) {
|
|
332
|
+
this.msgExts.simpleWarning(this.lc.loc("È disponibile una nuova versione per l'applicazione corrente. Si suggerisce di ricaricare la pagina (CTRL + F5)"));
|
|
333
|
+
this.newVersionWarned = true;
|
|
334
|
+
}
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
stopSignalRListening() {
|
|
338
|
+
//Quando viene distrutta la navbar devo distruggere anche il client di signalr perch� vuol dire che ho chiuso la pagina
|
|
339
|
+
this.notificationsSubs.forEach(i => { i.unsubscribe(); });
|
|
340
|
+
this.notifications.disconnect();
|
|
341
|
+
}
|
|
342
|
+
checkIdentity() {
|
|
343
|
+
// Controllo identity
|
|
344
|
+
var identity = this.sr.getJaceIdentity();
|
|
345
|
+
if (identity) {
|
|
346
|
+
this.checkSession(identity);
|
|
347
|
+
if ((this.user != identity.FullName || this.idtenant != identity.Idtenant) && this.user) {
|
|
348
|
+
this.msgExts.simpleWarning(this.lc.loc("Le informazioni di Sessione (Tenant/Account) sono cambiate a seguito di un login su modulo diverso utilizzando diverso Tenant/Utente sullo stesso browser. Si suggerisce di ricaricare la pagina (CTRL + F5)"));
|
|
349
|
+
}
|
|
350
|
+
this.user = identity.FullName;
|
|
351
|
+
this.tenant = identity.TenantName;
|
|
352
|
+
this.idtenant = identity.Idtenant;
|
|
353
|
+
this.Permissions = identity.Permissions;
|
|
354
|
+
this.Roles = identity.Roles;
|
|
355
|
+
this.IsJaceAdmin = identity.Roles.some(t => t == "Jace Admin") && !identity.Permissions.some(t => t == "alg_custom");
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
getActiveJaceModules() {
|
|
359
|
+
this.http.get(GET_Jace_GetActiveJaceModules).subscribe(res => {
|
|
360
|
+
this.Modules = res;
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
checkSession(identity) {
|
|
364
|
+
//10 minuti prima
|
|
365
|
+
if (dayjs() >= dayjs(identity.ExpirationTime).subtract(10, 'minutes') && !myconfig.redirectInProgress) {
|
|
366
|
+
myconfig.redirectInProgress = true;
|
|
367
|
+
//popup
|
|
368
|
+
this.msgExts.expiredSessionMessage(this.lc.loc('Expired session'), this.lc.loc("L'attuale sessione di lavoro non è più valida.<br>Si prega di eseguire nuovamente il login."), () => {
|
|
369
|
+
myconfig.redirectInProgress = false;
|
|
370
|
+
this.router.navigate(["login"]);
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
ngAfterViewInit() {
|
|
375
|
+
this._state.setHeaderHeight(this.navbar.nativeElement.offsetHeight);
|
|
376
|
+
}
|
|
377
|
+
toggleMenu() {
|
|
378
|
+
this.isMenuCollapsed = !this.isMenuCollapsed;
|
|
379
|
+
this._state.notifyDataChanged("menu.isCollapsed", this.isMenuCollapsed);
|
|
380
|
+
}
|
|
381
|
+
logout() {
|
|
382
|
+
window.location.href = `${myconfig.AuthUrl}/logout?client=${myconfig.Client}`;
|
|
383
|
+
}
|
|
384
|
+
changeModule() {
|
|
385
|
+
window.location.href = myconfig.JaceDashboardUrl;
|
|
386
|
+
}
|
|
387
|
+
changeTenant() {
|
|
388
|
+
window.location.href = `${myconfig.AuthUrl}/login/tenant?client=${myconfig.Client}`;
|
|
389
|
+
}
|
|
390
|
+
clearUserPreferences() {
|
|
391
|
+
this.prefsService.clear().subscribe();
|
|
392
|
+
this.msgExts.simpleSuccess(this.lc.loc("Preferenze utente ripulite"));
|
|
393
|
+
}
|
|
394
|
+
clearCacheClient() {
|
|
395
|
+
this.cacheService.clear().subscribe();
|
|
396
|
+
this.http.resetHttpUntimedCacheStorage();
|
|
397
|
+
this.http.resetHttpTimedCacheStorage();
|
|
398
|
+
this.msgExts.simpleSuccess(this.lc.loc("Cache Ripulita"));
|
|
399
|
+
}
|
|
400
|
+
clearCacheServer() {
|
|
401
|
+
this.http.get(GET_Adm_ClearAllCaches).subscribe(_ => {
|
|
402
|
+
this.msgExts.simpleSuccess(this.lc.loc("Cache Ripulita"));
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
clearAll() {
|
|
406
|
+
this.cacheService.clear().subscribe();
|
|
407
|
+
this.http.resetHttpUntimedCacheStorage();
|
|
408
|
+
this.http.resetHttpTimedCacheStorage();
|
|
409
|
+
this.http.get(GET_Adm_ClearAllCaches).subscribe(_ => {
|
|
410
|
+
this.msgExts.simpleSuccess(this.lc.loc("Cache Ripulita"));
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
clearMessages() {
|
|
414
|
+
this.msgExts.clearMessages();
|
|
415
|
+
}
|
|
416
|
+
completedJobClicked(job) {
|
|
417
|
+
if (job.reportid) {
|
|
418
|
+
localStorage.setItem("JOB_RPT_PARS", JSON.stringify(job.reportpars));
|
|
419
|
+
this.router.navigate(["pages/rpt/rpt_details", { 'idRpt': job.reportid, 'searchOnOpen': true }]);
|
|
420
|
+
}
|
|
421
|
+
else if (job.id) {
|
|
422
|
+
this.router.navigate(["pages/job/job_details", { 'idJob': job.id }]);
|
|
423
|
+
}
|
|
424
|
+
else if (job.fileid) {
|
|
425
|
+
// Scaricare il file
|
|
426
|
+
}
|
|
427
|
+
else if (job.complexreportid) {
|
|
428
|
+
// Navigare al complex report (?)
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, deps: [{ token: i1$1.PreferencesService }, { token: i1$1.CacheService }, { token: i2.BaseMessageService }, { token: i2.NotificationsService }, { token: i3$3.MessageService }, { token: i4$1.LocalizationService }, { token: i3$2.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i4.AppState }, { token: i4.TokenService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
433
|
+
Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Navbar, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], ngImport: i0, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" alt=\"\" class=\"d-md-block d-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" alt=\"\" class=\"d-md-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <li>\r\n <a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a>\r\n </li>\r\n <li class=\"d-none d-md-block\">\r\n <form role=\"search\" class=\"app-search\">\r\n <input type=\"text\" placeholder=\"Search...\" class=\"form-control\">\r\n <a><i class=\"fa fa-search\" style=\"color: #aaa\"></i></a>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle>\r\n </a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\">\r\n <jace-modules-board [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!-- USER MENU -->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"pull-right d-none d-sm-block\">\r\n <div class=\"app-white-text\">\r\n {{user}} - ({{tenant}})\r\n </div>\r\n <div class=\"app-white-text text-sm-center\">\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 1\">\r\n {{'Ambiente di Produzione' | localize : lc}}\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <div>\r\n {{user}} - {{tenant}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\"> </i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\"> </i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\"> </i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\"> </i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\"> </i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \"> </i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\"> </i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: ["Modules"] }, { kind: "pipe", type: i4$1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, decorators: [{
|
|
435
|
+
type: Component,
|
|
436
|
+
args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" alt=\"\" class=\"d-md-block d-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" alt=\"\" class=\"d-md-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <li>\r\n <a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a>\r\n </li>\r\n <li class=\"d-none d-md-block\">\r\n <form role=\"search\" class=\"app-search\">\r\n <input type=\"text\" placeholder=\"Search...\" class=\"form-control\">\r\n <a><i class=\"fa fa-search\" style=\"color: #aaa\"></i></a>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle>\r\n </a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\">\r\n <jace-modules-board [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!-- USER MENU -->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"pull-right d-none d-sm-block\">\r\n <div class=\"app-white-text\">\r\n {{user}} - ({{tenant}})\r\n </div>\r\n <div class=\"app-white-text text-sm-center\">\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 1\">\r\n {{'Ambiente di Produzione' | localize : lc}}\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <div>\r\n {{user}} - {{tenant}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\"> </i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\"> </i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\"> </i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\"> </i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\"> </i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \"> </i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\"> </i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"] }]
|
|
437
|
+
}], ctorParameters: function () { return [{ type: i1$1.PreferencesService }, { type: i1$1.CacheService }, { type: i2.BaseMessageService }, { type: i2.NotificationsService }, { type: i3$3.MessageService }, { type: i4$1.LocalizationService }, { type: i3$2.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i4.AppState }, { type: i4.TokenService }, { type: i1.Router }]; }, propDecorators: { navbar: [{
|
|
438
|
+
type: ViewChild,
|
|
439
|
+
args: ["navbar", { static: false }]
|
|
440
|
+
}] } });
|
|
441
|
+
|
|
442
|
+
// Angular
|
|
443
|
+
class SidebarService {
|
|
444
|
+
constructor(utiExts, aac, menuItems) {
|
|
445
|
+
this.utiExts = utiExts;
|
|
446
|
+
this.aac = aac;
|
|
447
|
+
this.menuItems = menuItems;
|
|
448
|
+
this.custom_permissions = [];
|
|
449
|
+
}
|
|
450
|
+
getMenuItems() {
|
|
451
|
+
var items = [];
|
|
452
|
+
var itemsTMP = this.utiExts.deepClone(this.menuItems);
|
|
453
|
+
itemsTMP.forEach(t => {
|
|
454
|
+
if (!t.ac || this.aac.has(t.ac)) {
|
|
455
|
+
if (!t.subMenu || t.subMenu.length == 0)
|
|
456
|
+
items.push(t);
|
|
457
|
+
else {
|
|
458
|
+
var toPush = this.checkSubMenuOverClaims(t);
|
|
459
|
+
items.push(toPush);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// Calcolo qui per non doverlo calcolare lato HTML
|
|
463
|
+
t.padding_left = t.level > 2 ? (65 + ((t.level - 3) * 15) + 'px !important') : null;
|
|
464
|
+
});
|
|
465
|
+
return items;
|
|
466
|
+
}
|
|
467
|
+
checkSubMenuOverClaims(menuItem) {
|
|
468
|
+
var menuTMP = this.utiExts.deepClone(menuItem);
|
|
469
|
+
menuTMP.subMenu = [];
|
|
470
|
+
menuItem.subMenu.forEach(t => {
|
|
471
|
+
if (!t.ac || this.aac.has(t.ac)) {
|
|
472
|
+
if (!t.subMenu || t.subMenu.length == 0)
|
|
473
|
+
menuTMP.subMenu.push(t);
|
|
474
|
+
else {
|
|
475
|
+
var toPush = this.checkSubMenuOverClaims(t);
|
|
476
|
+
menuTMP.subMenu.push(toPush);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
return menuTMP;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
SidebarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService, deps: [{ token: i3$3.UtilityService }, { token: i2$1.AccessControlService }, { token: MENU }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
484
|
+
SidebarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService });
|
|
485
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService, decorators: [{
|
|
486
|
+
type: Injectable
|
|
487
|
+
}], ctorParameters: function () {
|
|
488
|
+
return [{ type: i3$3.UtilityService }, { type: i2$1.AccessControlService }, { type: undefined, decorators: [{
|
|
489
|
+
type: Inject,
|
|
490
|
+
args: [MENU]
|
|
491
|
+
}] }];
|
|
492
|
+
} });
|
|
493
|
+
class MenuItem {
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Angular
|
|
497
|
+
class Sidebar {
|
|
498
|
+
constructor(lc, lcMenu, cdr, _elementRef, _router, _state, _sidebarService, zone) {
|
|
499
|
+
this.lc = lc;
|
|
500
|
+
this.cdr = cdr;
|
|
501
|
+
this._elementRef = _elementRef;
|
|
502
|
+
this._router = _router;
|
|
503
|
+
this._state = _state;
|
|
504
|
+
this._sidebarService = _sidebarService;
|
|
505
|
+
this.zone = zone;
|
|
506
|
+
this.isMenuCollapsed = false;
|
|
507
|
+
this.isMenuShouldCollapsed = false;
|
|
508
|
+
this._state.subscribe("menu.isCollapsed", (isCollapsed) => {
|
|
509
|
+
this.isMenuCollapsed = isCollapsed;
|
|
510
|
+
this.cdr.markForCheck();
|
|
511
|
+
});
|
|
512
|
+
this._state.subscribe("application.DeployAvailable", (available) => {
|
|
513
|
+
if (available)
|
|
514
|
+
this.ngOnInit();
|
|
515
|
+
});
|
|
516
|
+
this._router.events.subscribe(event => {
|
|
517
|
+
if (event instanceof NavigationEnd) {
|
|
518
|
+
let width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
|
|
519
|
+
if (width <= 768) {
|
|
520
|
+
this._state.notifyDataChanged("menu.isCollapsed", true);
|
|
521
|
+
}
|
|
522
|
+
window.scrollTo(0, 0);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
this.lc = this.lc.generateFromType(lcMenu);
|
|
526
|
+
}
|
|
527
|
+
ngOnInit() {
|
|
528
|
+
// Ivnentarsi una sorta di refresh
|
|
529
|
+
this.init();
|
|
530
|
+
}
|
|
531
|
+
init() {
|
|
532
|
+
var mi = this._sidebarService.getMenuItems();
|
|
533
|
+
;
|
|
534
|
+
for (let i = 0; i < mi.length; i++)
|
|
535
|
+
this.assignLevel(mi[i], 1);
|
|
536
|
+
this.menuItems = mi;
|
|
537
|
+
if (this._shouldMenuCollapse())
|
|
538
|
+
this.menuCollapse();
|
|
539
|
+
this.updateSidebarHeight();
|
|
540
|
+
this._state.setSidebarWidth(this.sidebar.nativeElement.offsetWidth);
|
|
541
|
+
}
|
|
542
|
+
assignLevel(menuItem, level) {
|
|
543
|
+
menuItem.level = level;
|
|
544
|
+
if (!menuItem.subMenu)
|
|
545
|
+
return;
|
|
546
|
+
for (let i = 0; i < menuItem.subMenu.length; i++)
|
|
547
|
+
this.assignLevel(menuItem.subMenu[i], level + 1);
|
|
548
|
+
}
|
|
549
|
+
onWindowResize() {
|
|
550
|
+
var isMenuShouldCollapsed = this._shouldMenuCollapse();
|
|
551
|
+
if (this.isMenuShouldCollapsed !== isMenuShouldCollapsed) {
|
|
552
|
+
this.menuCollapseStateChange(isMenuShouldCollapsed);
|
|
553
|
+
}
|
|
554
|
+
this.isMenuShouldCollapsed = isMenuShouldCollapsed;
|
|
555
|
+
this.updateSidebarHeight();
|
|
556
|
+
}
|
|
557
|
+
_shouldMenuCollapse() {
|
|
558
|
+
return window.innerWidth <= 768;
|
|
559
|
+
}
|
|
560
|
+
menuCollapse() {
|
|
561
|
+
this.menuCollapseStateChange(true);
|
|
562
|
+
this._state.setSidebarWidth(this.sidebar.nativeElement.offsetWidth);
|
|
563
|
+
}
|
|
564
|
+
menuCollapseStateChange(isCollapsed) {
|
|
565
|
+
this.isMenuCollapsed = isCollapsed;
|
|
566
|
+
this._state.notifyDataChanged("menu.isCollapsed", this.isMenuCollapsed);
|
|
567
|
+
}
|
|
568
|
+
menuExpand() {
|
|
569
|
+
this.menuCollapseStateChange(false);
|
|
570
|
+
this._state.setSidebarWidth(this.sidebar.nativeElement.offsetWidth);
|
|
571
|
+
}
|
|
572
|
+
hoverItem($event) {
|
|
573
|
+
this.showHoverElem = true;
|
|
574
|
+
this.hoverElemHeight = $event.currentTarget.clientHeight;
|
|
575
|
+
this.hoverElemTop = $event.currentTarget.getBoundingClientRect().top - 60;
|
|
576
|
+
$(".sidebar-hover-elem").css("top", this.hoverElemTop + "px");
|
|
577
|
+
$(".sidebar-hover-elem").css("height", this.hoverElemHeight + "px");
|
|
578
|
+
$(".sidebar-hover-elem").addClass("show-hover-elem");
|
|
579
|
+
}
|
|
580
|
+
sendAwayHoverElement() {
|
|
581
|
+
this.hoverElemTop = -200;
|
|
582
|
+
$(".sidebar-hover-elem").css("top", this.hoverElemTop + "px");
|
|
583
|
+
}
|
|
584
|
+
updateSidebarHeight() {
|
|
585
|
+
this.menuHeight = this._elementRef.nativeElement.children[0].clientHeight - 60;
|
|
586
|
+
}
|
|
587
|
+
//Nonostante questa funzione sia collegata con (click.out-zone) per qualche motivo angular le esegue comunque nella sua zone
|
|
588
|
+
//generando un po' di irresponsivit� iniziale... succede solo col click... boh
|
|
589
|
+
collapseMenu($event, item) {
|
|
590
|
+
if (this.isMenuCollapsed)
|
|
591
|
+
this.menuExpand();
|
|
592
|
+
if (!item.level)
|
|
593
|
+
console.warn("Livello non presente in un oggetto del menu!");
|
|
594
|
+
//N.B: Tutte le funzioni di JQuery le esguo fuori da Angular dato che c'� una buona probabilit� che siano eventi asincroni
|
|
595
|
+
this.zone.runOutsideAngular(() => { this.outsideAngularClickHandler($event, item); });
|
|
596
|
+
return false;
|
|
597
|
+
}
|
|
598
|
+
outsideAngularClickHandler($event, item) {
|
|
599
|
+
let levelClass = item.level ? "level-" + (item.level) : "";
|
|
600
|
+
let levelClassPlusOne = item.level ? "level-" + (item.level + 1) : "";
|
|
601
|
+
let slidePeriod = 400;
|
|
602
|
+
var link = jQuery($event.currentTarget);
|
|
603
|
+
//Se l'elemento non � espanso
|
|
604
|
+
if (!link.closest(".sidebar-item-expanded" + "_" + levelClass).length) {
|
|
605
|
+
//Tiro su tutti gli elementi dello stesso livello espansi e li chiudo
|
|
606
|
+
//Se ho compresso un menu vado a vedere se c'� anche un altro menu di livello pi� basso da richiudere
|
|
607
|
+
jQuery("ul.nav-sidebar li" + "." + (levelClassPlusOne)).each(function () {
|
|
608
|
+
let closestLi = jQuery(this).closest("li");
|
|
609
|
+
if (closestLi.children("ul").length && closestLi.hasClass("sidebar-item-expanded")) {
|
|
610
|
+
closestLi.children("ul").slideUp(slidePeriod);
|
|
611
|
+
//Le uso sempre entrambe insieme. La prima � la classe per la logica, la seconda per le animazioni
|
|
612
|
+
closestLi.removeClass("sidebar-item-expanded" + "_" + (levelClassPlusOne));
|
|
613
|
+
closestLi.removeClass("sidebar-item-expanded");
|
|
614
|
+
}
|
|
615
|
+
});
|
|
616
|
+
//Dopodich� richiudo tutti quelli del mio livello attuale
|
|
617
|
+
jQuery("ul.nav-sidebar li" + "." + levelClass).each(function () {
|
|
618
|
+
let closestLi = jQuery(this).closest("li");
|
|
619
|
+
if (closestLi.children("ul").length && closestLi.hasClass("sidebar-item-expanded")) {
|
|
620
|
+
closestLi.children("ul").slideUp(slidePeriod);
|
|
621
|
+
//Le uso sempre entrambe insieme. La prima � la classe per la logica, la seconda per le animazioni
|
|
622
|
+
closestLi.removeClass("sidebar-item-expanded" + "_" + levelClass);
|
|
623
|
+
closestLi.removeClass("sidebar-item-expanded");
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
//Dopodich� espando quello attuale
|
|
627
|
+
link.next().slideDown(slidePeriod);
|
|
628
|
+
if (item.subMenu) {
|
|
629
|
+
//Le uso sempre entrambe insieme. La prima � la classe per la logica, la seconda per le animazioni
|
|
630
|
+
link.closest("li").addClass("sidebar-item-expanded" + "_" + levelClass);
|
|
631
|
+
link.closest("li").addClass("sidebar-item-expanded");
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
//Altrimenti, se l'elemento � gi� espanso lo chiudo
|
|
636
|
+
if (item.subMenu) {
|
|
637
|
+
//Le uso sempre entrambe insieme. La prima � la classe per la logica, la seconda per le animazioni
|
|
638
|
+
link.closest("li").removeClass("sidebar-item-expanded" + "_" + levelClass);
|
|
639
|
+
link.closest("li").removeClass("sidebar-item-expanded");
|
|
640
|
+
}
|
|
641
|
+
link.next().slideUp(slidePeriod);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, deps: [{ token: i4$1.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.Router }, { token: i4.AppState }, { token: SidebarService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
646
|
+
Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Sidebar, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SidebarService], viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "pipe", type: i4$1.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
647
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, decorators: [{
|
|
648
|
+
type: Component,
|
|
649
|
+
args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [SidebarService], template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"] }]
|
|
650
|
+
}], ctorParameters: function () {
|
|
651
|
+
return [{ type: i4$1.LocalizationService }, { type: i0.Type, decorators: [{
|
|
652
|
+
type: Optional
|
|
653
|
+
}, {
|
|
654
|
+
type: Inject,
|
|
655
|
+
args: [MENU_LOCALIZATION]
|
|
656
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.Router }, { type: i4.AppState }, { type: SidebarService }, { type: i0.NgZone }];
|
|
657
|
+
}, propDecorators: { sidebar: [{
|
|
658
|
+
type: ViewChild,
|
|
659
|
+
args: ["sidebar", { static: true }]
|
|
660
|
+
}], onWindowResize: [{
|
|
661
|
+
type: HostListener,
|
|
662
|
+
args: ["window:resize"]
|
|
663
|
+
}] } });
|
|
664
|
+
|
|
665
|
+
// Angular
|
|
666
|
+
class PagesComponent {
|
|
667
|
+
constructor(sanitizer, _state, _location, router) {
|
|
668
|
+
this.sanitizer = sanitizer;
|
|
669
|
+
this._state = _state;
|
|
670
|
+
this._location = _location;
|
|
671
|
+
this.router = router;
|
|
672
|
+
this.isMenuCollapsed = false;
|
|
673
|
+
this.maxHeight = 0;
|
|
674
|
+
this.dynamicCSSUrl = null;
|
|
675
|
+
this.loadedModuleCss = "";
|
|
676
|
+
this._state.subscribe("menu.isCollapsed", (isCollapsed) => {
|
|
677
|
+
this.isMenuCollapsed = isCollapsed;
|
|
678
|
+
});
|
|
679
|
+
}
|
|
680
|
+
ngOnInit() {
|
|
681
|
+
this.getCurrentPageName();
|
|
682
|
+
this.getHeight();
|
|
683
|
+
}
|
|
684
|
+
getCurrentPageName() {
|
|
685
|
+
var url = this._location.path();
|
|
686
|
+
setTimeout(function () {
|
|
687
|
+
window.scrollTo(0, 0);
|
|
688
|
+
jQuery('a[href="#' + url + '"]').closest("li").closest("ul").closest("li").addClass("sidebar-item-expanded");
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
hideMenu() {
|
|
692
|
+
this._state.notifyDataChanged("menu.isCollapsed", true);
|
|
693
|
+
}
|
|
694
|
+
getHeight() {
|
|
695
|
+
var html = document.documentElement;
|
|
696
|
+
this.maxHeight = html.clientHeight - 60;
|
|
697
|
+
}
|
|
698
|
+
onResize(event) {
|
|
699
|
+
this.getHeight();
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
PagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PagesComponent, deps: [{ token: i3.DomSanitizer }, { token: i4.AppState }, { token: i3$1.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
703
|
+
PagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PagesComponent, selector: "pages", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<navbar></navbar>\r\n<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <sidebar></sidebar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n\r\n <div class=\"main\">\r\n <breadcrumb></breadcrumb>\r\n <router-outlet></router-outlet>\r\n </div>\r\n\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: [".main-wrapper{margin-left:230px;padding:20px 40px;margin-top:60px;position:relative;width:100%;overflow:auto}.main-wrapper.menu-collapsed{margin-left:50px}.main{height:100%;min-height:500px}.footer{padding-top:20px}.footer .footer-main{display:inline-block}.footer .footer-main .copyright{color:#242424;font-size:14px}.footer .footer-main .copyright a{color:#242d3a}.footer .footer-main .share{padding-left:5px;margin:0}.footer .footer-main .share li{list-style:none;float:left;margin-left:10px}.footer .footer-main .share li i{cursor:pointer;transition:all .1s ease;color:#fff;padding:9px 9px 6px;font-size:12px;border-radius:50%;background-color:#242d3a}.footer .footer-main .share li i.socicon-facebook{background-color:#3b5998}.footer .footer-main .share li i.socicon-twitter{background-color:#55acee}.footer .footer-main .share li i.socicon-instagram{background-color:#8a3ab9}.footer .footer-main .share li i.socicon-pinterest{background-color:#c92228}.footer .footer-main .share li i:hover{opacity:.9}.footer .created{color:#242424;font-size:14px}.footer .created i{color:red}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(36,45,58,.2);width:100%;height:100%;display:none}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:50px}.az-overlay{display:block}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: BackTop, selector: "back-top", inputs: ["position", "showSpeed", "moveSpeed"] }, { kind: "component", type: Breadcrumb, selector: "breadcrumb" }, { kind: "component", type: Navbar, selector: "navbar" }, { kind: "component", type: Sidebar, selector: "sidebar" }], encapsulation: i0.ViewEncapsulation.None });
|
|
704
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PagesComponent, decorators: [{
|
|
705
|
+
type: Component,
|
|
706
|
+
args: [{ selector: "pages", encapsulation: ViewEncapsulation.None, template: "<navbar></navbar>\r\n<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <sidebar></sidebar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n\r\n <div class=\"main\">\r\n <breadcrumb></breadcrumb>\r\n <router-outlet></router-outlet>\r\n </div>\r\n\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: [".main-wrapper{margin-left:230px;padding:20px 40px;margin-top:60px;position:relative;width:100%;overflow:auto}.main-wrapper.menu-collapsed{margin-left:50px}.main{height:100%;min-height:500px}.footer{padding-top:20px}.footer .footer-main{display:inline-block}.footer .footer-main .copyright{color:#242424;font-size:14px}.footer .footer-main .copyright a{color:#242d3a}.footer .footer-main .share{padding-left:5px;margin:0}.footer .footer-main .share li{list-style:none;float:left;margin-left:10px}.footer .footer-main .share li i{cursor:pointer;transition:all .1s ease;color:#fff;padding:9px 9px 6px;font-size:12px;border-radius:50%;background-color:#242d3a}.footer .footer-main .share li i.socicon-facebook{background-color:#3b5998}.footer .footer-main .share li i.socicon-twitter{background-color:#55acee}.footer .footer-main .share li i.socicon-instagram{background-color:#8a3ab9}.footer .footer-main .share li i.socicon-pinterest{background-color:#c92228}.footer .footer-main .share li i:hover{opacity:.9}.footer .created{color:#242424;font-size:14px}.footer .created i{color:red}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(36,45,58,.2);width:100%;height:100%;display:none}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:50px}.az-overlay{display:block}}\n"] }]
|
|
707
|
+
}], ctorParameters: function () { return [{ type: i3.DomSanitizer }, { type: i4.AppState }, { type: i3$1.Location }, { type: i1.Router }]; }, propDecorators: { onResize: [{
|
|
708
|
+
type: HostListener,
|
|
709
|
+
args: ['window:resize', ['$event']]
|
|
710
|
+
}] } });
|
|
711
|
+
|
|
712
|
+
class ExternalPagesComponent {
|
|
713
|
+
constructor(aac, lc, http, _state, route, bts) {
|
|
714
|
+
this.aac = aac;
|
|
715
|
+
this.lc = lc;
|
|
716
|
+
this.http = http;
|
|
717
|
+
this._state = _state;
|
|
718
|
+
this.route = route;
|
|
719
|
+
this.bts = bts;
|
|
720
|
+
this.Username = "";
|
|
721
|
+
this.Password = "";
|
|
722
|
+
this.Tenant = "";
|
|
723
|
+
this._state.registerNavigation(this.route.snapshot);
|
|
724
|
+
this.Username = this.route.snapshot.params["user"];
|
|
725
|
+
this.Password = this.route.snapshot.params["pswd"];
|
|
726
|
+
this.Tenant = this.route.snapshot.params["tnt"];
|
|
727
|
+
}
|
|
728
|
+
ngOnInit() {
|
|
729
|
+
console.log("Caricamento pagina nell'IFRAME completato!");
|
|
730
|
+
console.log("[" + this.Tenant + "]" + this.Username + " - " + this.Password);
|
|
731
|
+
// Le info di login che ho passato sono le stesse delle info di login salvate nel token --> È un redirect da un sito esterno ma il token c'è già. Esco
|
|
732
|
+
// Ho un token di login e non ho nessuna info sull'utente da usare --> È un redirect da Jace, quindi sono a posto. Esco
|
|
733
|
+
let currentIdentity = this.bts.getJaceIdentity();
|
|
734
|
+
if (currentIdentity && (!(this.Tenant + this.Username + this.Password) || currentIdentity.Idtenant == this.Tenant && currentIdentity.DsUser == this.Username)) {
|
|
735
|
+
this.aac.initializeIdentity(currentIdentity);
|
|
736
|
+
return;
|
|
737
|
+
}
|
|
738
|
+
// Altrimenti devo effettuare il login
|
|
739
|
+
let LoginDTO = { tenant: "FX", username: this.Username, password: this.Password, client_id: "jacedev" };
|
|
740
|
+
this.http.post(`${myconfig.AuthUrl}/api/login/dologin`, LoginDTO).subscribe(t => {
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
ExternalPagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExternalPagesComponent, deps: [{ token: i2$1.AccessControlService }, { token: i4$1.LocalizationService }, { token: i3$2.HTTPService }, { token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
|
|
745
|
+
ExternalPagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ExternalPagesComponent, selector: "external-pages", ngImport: i0, template: "<router-outlet></router-outlet>", dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
746
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExternalPagesComponent, decorators: [{
|
|
747
|
+
type: Component,
|
|
748
|
+
args: [{ selector: "external-pages", template: "<router-outlet></router-outlet>" }]
|
|
749
|
+
}], ctorParameters: function () { return [{ type: i2$1.AccessControlService }, { type: i4$1.LocalizationService }, { type: i3$2.HTTPService }, { type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i4.TokenService }]; } });
|
|
750
|
+
|
|
751
|
+
// Angular
|
|
752
|
+
class JaceLoginComponent {
|
|
753
|
+
constructor() {
|
|
754
|
+
}
|
|
755
|
+
ngOnInit() {
|
|
756
|
+
window.location.href = `${myconfig.AuthUrl}/login/form?client=${myconfig.Client}`;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
JaceLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceLoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
760
|
+
JaceLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: JaceLoginComponent, selector: "login", ngImport: i0, template: "<div class=\"login-container\">\r\n <div class=\"redirecting-div\">\r\n <div class=\"redirecting-message\"><h1>Redirecting to login...</h1></div>\r\n <div class=\"signal\"></div>\r\n </div>\r\n</div>\r\n", styles: [".redirecting-div{background:#3d3d3d!important;display:flex;align-items:center;justify-content:center;min-height:100vh}.redirecting-div h1{color:#fbc925;font-family:Passion One}.redirecting-message{align-self:center}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
761
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceLoginComponent, decorators: [{
|
|
762
|
+
type: Component,
|
|
763
|
+
args: [{ selector: "login", encapsulation: ViewEncapsulation.None, template: "<div class=\"login-container\">\r\n <div class=\"redirecting-div\">\r\n <div class=\"redirecting-message\"><h1>Redirecting to login...</h1></div>\r\n <div class=\"signal\"></div>\r\n </div>\r\n</div>\r\n", styles: [".redirecting-div{background:#3d3d3d!important;display:flex;align-items:center;justify-content:center;min-height:100vh}.redirecting-div h1{color:#fbc925;font-family:Passion One}.redirecting-message{align-self:center}\n"] }]
|
|
764
|
+
}], ctorParameters: function () { return []; } });
|
|
765
|
+
|
|
766
|
+
// Angular
|
|
767
|
+
// TODO: loc.ts
|
|
768
|
+
class RedirecterComponent {
|
|
769
|
+
constructor(_state, route, router, redirectMap) {
|
|
770
|
+
this._state = _state;
|
|
771
|
+
this.route = route;
|
|
772
|
+
this.router = router;
|
|
773
|
+
this.redirectMap = redirectMap;
|
|
774
|
+
this.Error = "";
|
|
775
|
+
}
|
|
776
|
+
ngOnInit() {
|
|
777
|
+
let url = this.route.snapshot.params["url"];
|
|
778
|
+
//§ = 167... non so perché ma scrivendolo esplicitamente non funziona
|
|
779
|
+
let parts = url.split(String.fromCharCode(167)).filter(s => !!s);
|
|
780
|
+
if (parts.length < 2) {
|
|
781
|
+
this.Error = "L'url passato è incompleto. Impossibile riconoscerlo";
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
else {
|
|
785
|
+
var redirect = this.redirectMap[parts[0]];
|
|
786
|
+
if (!redirect) {
|
|
787
|
+
this.Error = "L'url passato fa riferimento a un oggetto non navigabile. Impossibile procedere";
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
if (redirect.params.length != parts.length - 1) {
|
|
791
|
+
this.Error = "Il numero di parametri richiesti per navigare all'entità richiesta è diverso dal numero di parametri passato";
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
let parObject = {};
|
|
795
|
+
redirect.params.forEach((t, i) => parObject[t] = parts[i + 1]);
|
|
796
|
+
this.router.navigate(["pages/" + redirect.url, parObject]);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
RedirecterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedirecterComponent, deps: [{ token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: REDIRECT_MAP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
801
|
+
RedirecterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RedirecterComponent, selector: "redirecter", ngImport: i0, template: "<div *ngIf=\"Error\">{{Error}}</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
802
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedirecterComponent, decorators: [{
|
|
803
|
+
type: Component,
|
|
804
|
+
args: [{ selector: "redirecter", encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"Error\">{{Error}}</div>" }]
|
|
805
|
+
}], ctorParameters: function () {
|
|
806
|
+
return [{ type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: undefined, decorators: [{
|
|
807
|
+
type: Optional
|
|
808
|
+
}, {
|
|
809
|
+
type: Inject,
|
|
810
|
+
args: [REDIRECT_MAP]
|
|
811
|
+
}] }];
|
|
812
|
+
} });
|
|
813
|
+
|
|
814
|
+
// Angular
|
|
815
|
+
const COMPONENTS = [
|
|
816
|
+
BackTop,
|
|
817
|
+
Breadcrumb,
|
|
818
|
+
PageNotFoundComponent,
|
|
819
|
+
ServerErrorComponent,
|
|
820
|
+
AngularErrorComponent,
|
|
821
|
+
PagesComponent,
|
|
822
|
+
ExternalPagesComponent,
|
|
823
|
+
JaceLoginComponent,
|
|
824
|
+
JaceModulesBoardComponent,
|
|
825
|
+
Navbar,
|
|
826
|
+
RedirecterComponent,
|
|
827
|
+
Sidebar
|
|
828
|
+
];
|
|
829
|
+
class ComponentsModule {
|
|
830
|
+
}
|
|
831
|
+
ComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
832
|
+
ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, declarations: [BackTop,
|
|
833
|
+
Breadcrumb,
|
|
834
|
+
PageNotFoundComponent,
|
|
835
|
+
ServerErrorComponent,
|
|
836
|
+
AngularErrorComponent,
|
|
837
|
+
PagesComponent,
|
|
838
|
+
ExternalPagesComponent,
|
|
839
|
+
JaceLoginComponent,
|
|
840
|
+
JaceModulesBoardComponent,
|
|
841
|
+
Navbar,
|
|
842
|
+
RedirecterComponent,
|
|
843
|
+
Sidebar], imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule], exports: [BackTop,
|
|
844
|
+
Breadcrumb,
|
|
845
|
+
PageNotFoundComponent,
|
|
846
|
+
ServerErrorComponent,
|
|
847
|
+
AngularErrorComponent,
|
|
848
|
+
PagesComponent,
|
|
849
|
+
ExternalPagesComponent,
|
|
850
|
+
JaceLoginComponent,
|
|
851
|
+
JaceModulesBoardComponent,
|
|
852
|
+
Navbar,
|
|
853
|
+
RedirecterComponent,
|
|
854
|
+
Sidebar] });
|
|
855
|
+
ComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule] });
|
|
856
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
|
|
857
|
+
type: NgModule,
|
|
858
|
+
args: [{
|
|
859
|
+
imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule],
|
|
860
|
+
declarations: [...COMPONENTS],
|
|
861
|
+
exports: [...COMPONENTS]
|
|
862
|
+
}]
|
|
863
|
+
}] });
|
|
864
|
+
|
|
865
|
+
/**
|
|
866
|
+
* Generated bundle index. Do not edit.
|
|
867
|
+
*/
|
|
868
|
+
|
|
869
|
+
export { AngularErrorComponent, BackTop, Breadcrumb, ComponentsModule, ExternalPagesComponent, JaceLoginComponent, JaceModulesBoardComponent, Navbar, PageNotFoundComponent, PagesComponent, RedirecterComponent, ServerErrorComponent, Sidebar };
|
|
870
|
+
//# sourceMappingURL=esfaenza-core-components.mjs.map
|