Commit a02ef258 by Matteo

Funziona sotto android

parent 971cd80e
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget id="it.aimconsulting.intranet" version="0.0.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget id="it.aimconsulting.intranet" version="0.0.9" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>2P2 App</name> <name>2P2 App</name>
<description>An awesome Ionic/Cordova app.</description> <description>An awesome Ionic/Cordova app.</description>
<author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author> <author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author>
......
import { AppPage } from './app.po'; import { AppPage } from './app.po';
describe('new App', () => { describe('new App', () => {
let page: AppPage; let page: AppPage;
beforeEach(() => { beforeEach(() => {
page = new AppPage(); page = new AppPage();
}); });
it('should display welcome message', () => { it('should display welcome message', () => {
page.navigateTo(); page.navigateTo();
expect(page.getPageTitle()).toContain('Tab One'); expect(page.getPageTitle()).toContain('Tab One');
}); });
}); });
import { browser, by, element } from 'protractor'; import { browser, by, element } from 'protractor';
export class AppPage { export class AppPage {
navigateTo() { navigateTo() {
return browser.get('/'); return browser.get('/');
} }
getPageTitle() { getPageTitle() {
return element(by.css('ion-title')).getText(); return element(by.css('ion-title')).getText();
} }
} }
{ {
"extends": "../tsconfig.json", "extends": "../tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "../out-tsc/app", "outDir": "../out-tsc/app",
"module": "commonjs", "module": "commonjs",
"target": "es5", "target": "es5",
"types": [ "types": [
"jasmine", "jasmine",
"jasminewd2", "jasminewd2",
"node" "node"
] ]
} }
} }
These are Cordova resources. You can replace icon.png and splash.png and run These are Cordova resources. You can replace icon.png and splash.png and run
`ionic cordova resources` to generate custom icons and splash screens for your `ionic cordova resources` to generate custom icons and splash screens for your
app. See `ionic cordova resources --help` for details. app. See `ionic cordova resources --help` for details.
Cordova reference documentation: Cordova reference documentation:
- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
{ {
"name": "2P2 App", "name": "2P2 App",
"integrations": { "integrations": {
"cordova": {} "cordova": {}
}, },
"type": "angular" "type": "angular"
} }
{ {
"name": "proxy-example", "name": "proxy-example",
"app_id": "", "app_id": "",
"proxies": [ "proxies": [
{ {
"path": "/stman", "path": "/stman",
"proxyUrl": "http://localhost:8080/stman" "proxyUrl": "http://localhost:8080/stman"
} },
] {
"path": "/watch",
"proxyUrl": "www.youtube.com/watch"
}
]
} }
\ No newline at end of file
<ion-app> <ion-app>
<!--<ion-toolbar color="dark"> <!--<ion-toolbar color="dark">
<ion-buttons (click)="openSideBar()"> <ion-buttons (click)="openSideBar()">
<ion-icon src="../assets/img/uscita.svg" style="zoom:4.0;"></ion-icon> <ion-icon src="../assets/img/uscita.svg" style="zoom:4.0;"></ion-icon>
</ion-buttons> </ion-buttons>
<ion-title> <ion-title>
<img src="../assets/img/logo.png"> <img src="../assets/img/logo.png">
</ion-title> </ion-title>
<ion-buttons (click)="logout()" slot="end"> <ion-buttons (click)="logout()" slot="end">
<ion-icon src="../assets/img/uscita.svg" style="zoom:4.0;"></ion-icon> <ion-icon src="../assets/img/uscita.svg" style="zoom:4.0;"></ion-icon>
</ion-buttons> </ion-buttons>
</ion-toolbar> </ion-toolbar>
<ion-item> <ion-item>
<ion-label>Clicca per selezionare un nuovo Cliente</ion-label> <ion-label>Clicca per selezionare un nuovo Cliente</ion-label>
<ion-select value="clienteSel" [(ngModel)]="clienteSel" (ionChange)="cambiaCliente()"> <ion-select value="clienteSel" [(ngModel)]="clienteSel" (ionChange)="cambiaCliente()">
<ion-select-option *ngFor="let cliente of clienti;" value="{{cliente.id}}">{{cliente.denominazione}}</ion-select-option> <ion-select-option *ngFor="let cliente of clienti;" value="{{cliente.id}}">{{cliente.denominazione}}</ion-select-option>
</ion-select> </ion-select>
</ion-item> </ion-item>
<ion-item> <ion-item>
<p>Il Cliente Selezionato è {{clienteSelezionato.denominazione}}</p> <p>Il Cliente Selezionato è {{clienteSelezionato.denominazione}}</p>
</ion-item>--> </ion-item>-->
<ion-router-outlet> <ion-router-outlet>
<ion-content> <ion-content>
<ion-menu side="start" menu-id="mainmenu2" content-id="content"> <ion-menu side="start" menu-id="mainmenu2" content-id="content">
<ion-header> <ion-header>
<ion-toolbar color="primary"> <ion-toolbar color="primary">
<ion-title>Menu Principale</ion-title> <ion-title>Menu Principale</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-list> <ion-list>
<div> <div>
<ion-item (click)="apriPagina('home')">Home</ion-item> <ion-item (click)="apriPagina('home')">Home</ion-item>
</div> </div>
<div> <div>
<ion-item (click)="apriPagina('documenti')">Documenti</ion-item> <ion-item (click)="apriPagina('documenti')">Documenti</ion-item>
</div> </div>
<div> <div>
<ion-item (click)="apriPagina('interviste')">Domande/Risposte</ion-item> <ion-item (click)="apriPagina('interviste')">Domande/Risposte</ion-item>
</div> </div>
<div> <div>
<ion-item (click)="apriPagina('pareri')">Pareri</ion-item> <ion-item (click)="apriPagina('pareri')">Pareri</ion-item>
</div> </div>
<div> <div>
<ion-item (click)="apriPagina('segreteria')">Segreteria</ion-item> <ion-item (click)="apriPagina('segreteria')">Segreteria</ion-item>
</div> </div>
<div> <div>
<ion-item (click)="apriPagina('change-password')">Cambia Password</ion-item> <ion-item (click)="apriPagina('change-password')">Cambia Password</ion-item>
</div> </div>
</ion-list> </ion-list>
</ion-content> </ion-content>
</ion-menu> </ion-menu>
<ion-content id="content2"></ion-content> <ion-content id="content2"></ion-content>
<div id="modal"></div> <div id="modal"></div>
<div id="content"></div> <div id="content"></div>
</ion-content> </ion-content>
</ion-router-outlet> </ion-router-outlet>
</ion-app> </ion-app>
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { TestBed, async } from '@angular/core/testing'; import { TestBed, async } from '@angular/core/testing';
import { Platform } from '@ionic/angular'; import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
describe('AppComponent', () => { describe('AppComponent', () => {
let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy; let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy;
beforeEach(async(() => { beforeEach(async(() => {
statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']); statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']); splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
platformReadySpy = Promise.resolve(); platformReadySpy = Promise.resolve();
platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy }); platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy });
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [AppComponent], declarations: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [ providers: [
{ provide: StatusBar, useValue: statusBarSpy }, { provide: StatusBar, useValue: statusBarSpy },
{ provide: SplashScreen, useValue: splashScreenSpy }, { provide: SplashScreen, useValue: splashScreenSpy },
{ provide: Platform, useValue: platformSpy }, { provide: Platform, useValue: platformSpy },
], ],
}).compileComponents(); }).compileComponents();
})); }));
it('should create the app', () => { it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent); const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance; const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy(); expect(app).toBeTruthy();
}); });
it('should initialize the app', async () => { it('should initialize the app', async () => {
TestBed.createComponent(AppComponent); TestBed.createComponent(AppComponent);
expect(platformSpy.ready).toHaveBeenCalled(); expect(platformSpy.ready).toHaveBeenCalled();
await platformReadySpy; await platformReadySpy;
expect(statusBarSpy.styleDefault).toHaveBeenCalled(); expect(statusBarSpy.styleDefault).toHaveBeenCalled();
expect(splashScreenSpy.hide).toHaveBeenCalled(); expect(splashScreenSpy.hide).toHaveBeenCalled();
}); });
// TODO: add more tests! // TODO: add more tests!
}); });
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Platform, MenuController } from '@ionic/angular'; import { Platform, MenuController } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AuthService } from './auth/service/auth.service'; import { AuthService } from './auth/service/auth.service';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'; import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
import { UtilService } from './service/util.service'; import { UtilService } from './service/util.service';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: 'app.component.html' templateUrl: 'app.component.html'
}) })
export class AppComponent { export class AppComponent {
constructor( constructor(
private platform: Platform, private platform: Platform,
private splashScreen: SplashScreen, private splashScreen: SplashScreen,
private statusBar: StatusBar, private statusBar: StatusBar,
private router: Router, private router: Router,
private authService: AuthService, private authService: AuthService,
private utilService: UtilService, private utilService: UtilService,
private androidPermissions: AndroidPermissions, private androidPermissions: AndroidPermissions,
public menuCtrl: MenuController public menuCtrl: MenuController
) { ) {
this.initializeApp(); this.initializeApp();
} }
async initializeApp() { async initializeApp() {
this.utilService.loadLingua(); this.utilService.loadLingua();
this.utilService.initConfig(false, 'notifiche'); this.utilService.initConfig(false, 'notifiche');
} }
async logout(){ async logout(){
await this.authService.logout(); await this.authService.logout();
this.router.navigateByUrl('login'); this.router.navigateByUrl('login');
} }
apriPagina(pagina:string) apriPagina(pagina:string)
{ {
switch(pagina) switch(pagina)
{ {
case "home": case "home":
{ {
this.router.navigateByUrl('index'); this.router.navigateByUrl('index');
break; break;
} }
case "documenti": case "documenti":
{ {
this.router.navigateByUrl('documenti'); this.router.navigateByUrl('documenti');
break; break;
} }
case "interviste": case "interviste":
{ {
this.router.navigateByUrl('interviste'); this.router.navigateByUrl('interviste');
break; break;
} }
case "pareri": case "pareri":
{ {
this.router.navigateByUrl('pareri'); this.router.navigateByUrl('pareri');
break; break;
} }
case "segreteria": case "segreteria":
{ {
this.router.navigateByUrl('segreteria'); this.router.navigateByUrl('segreteria');
break; break;
} }
case "change-password": case "change-password":
{ {
this.router.navigateByUrl('change-pwd'); this.router.navigateByUrl('change-pwd');
break; break;
} }
} }
} }
openSideBar() openSideBar()
{ {
this.menuCtrl.open('mainmenu'); this.menuCtrl.open('mainmenu');
} }
closeSideMenu() { closeSideMenu() {
this.menuCtrl.close(); this.menuCtrl.close();
} }
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router'; import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { IonicStorageModule } from '@ionic/storage'; import { IonicStorageModule } from '@ionic/storage';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { DatePicker } from '@ionic-native/date-picker/ngx'; import { DatePicker } from '@ionic-native/date-picker/ngx';
import { File } from '@ionic-native/file/ngx'; import { File } from '@ionic-native/file/ngx';
import { FileOpener } from '@ionic-native/file-opener/ngx'; import { FileOpener } from '@ionic-native/file-opener/ngx';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'; import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
import { EmailComposer } from '@ionic-native/email-composer/ngx'; import { EmailComposer } from '@ionic-native/email-composer/ngx';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { SocialSharing } from '@ionic-native/social-sharing/ngx'; import { SocialSharing } from '@ionic-native/social-sharing/ngx';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Push } from '@ionic-native/push/ngx'; import { Push } from '@ionic-native/push/ngx';
export function createTranslateLoader(http: HttpClient) { export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json'); return new TranslateHttpLoader(http, './assets/i18n/', '.json');
} }
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],
entryComponents: [], entryComponents: [],
imports: [ imports: [
BrowserModule, BrowserModule,
IonicModule.forRoot(), IonicModule.forRoot(),
AppRoutingModule, AppRoutingModule,
IonicStorageModule.forRoot(), IonicStorageModule.forRoot(),
FormsModule, FormsModule,
HttpClientModule, HttpClientModule,
TranslateModule.forRoot({ TranslateModule.forRoot({
loader: { loader: {
provide: TranslateLoader, provide: TranslateLoader,
useFactory: createTranslateLoader, useFactory: createTranslateLoader,
deps: [HttpClient] deps: [HttpClient]
} }
}) })
], ],
providers: [ providers: [
StatusBar, StatusBar,
SplashScreen, SplashScreen,
DatePicker, DatePicker,
File, File,
FileOpener, FileOpener,
AndroidPermissions, AndroidPermissions,
EmailComposer, EmailComposer,
InAppBrowser, InAppBrowser,
SocialSharing, SocialSharing,
Push, Push,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy } { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
export class AppModule {} export class AppModule {}
import { Cliente } from './cliente'; import { Cliente } from './cliente';
export interface AuthResponse { export interface AuthResponse {
id: number; id: number;
errorMsg: string; errorMsg: string;
error: boolean; error: boolean;
nome: string; nome: string;
clienti: Cliente[]; clienti: Cliente[];
cliente: boolean; cliente: boolean;
} }
export interface Cliente { export interface Cliente {
id: number; id: number;
denominazione: string; denominazione: string;
} }
export interface ErrorResponse { export interface ErrorResponse {
error: boolean, error: boolean,
errorMsg: string errorMsg: string
} }
/*export class ErrorResponse{ /*export class ErrorResponse{
public object: {}; public object: {};
constructor( constructor(
public error: boolean, public error: boolean,
public errorMsg: string public errorMsg: string
) { ) {
this.object = { this.object = {
error: this.error, error: this.error,
errorMsg: this.errorMsg, errorMsg: this.errorMsg,
}; };
} }
}*/ }*/
export interface User { export interface User {
email: string; email: string;
password: string; password: string;
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { ChangePwdPage } from './change-pwd.page'; import { ChangePwdPage } from './change-pwd.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: ChangePwdPage component: ChangePwdPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
ReactiveFormsModule, ReactiveFormsModule,
TranslateModule TranslateModule
], ],
declarations: [ChangePwdPage] declarations: [ChangePwdPage]
}) })
export class ChangePwdPageModule {} export class ChangePwdPageModule {}
<!--<ion-header class="header-subpage" no-border> <!--<ion-header class="header-subpage" no-border>
<ion-toolbar> <ion-toolbar>
<ion-title class="titolo-sezione-head">{{ 'change_password' | translate }}</ion-title> <ion-title class="titolo-sezione-head">{{ 'change_password' | translate }}</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header>--> </ion-header>-->
<ion-content> <ion-content>
<ion-grid class="transparent bc-grid"> <ion-grid class="transparent bc-grid">
<ion-row class="transparent"> <ion-row class="transparent">
<ion-col align-self-end size-md="6" size-lg="6" size-xs="12" class="transparent"> <ion-col align-self-end size-md="6" size-lg="6" size-xs="12" class="transparent">
<div class="body-form body-img12"> <div class="body-form body-img12">
<ion-row justify-content-center *ngIf="platform.is('desktop')"> <ion-row justify-content-center *ngIf="platform.is('desktop')">
<ion-col> <ion-col>
<ion-buttons class="back-button-desktop-cp" (click)="back()" title="{{ 'back_login' | translate }}"> <ion-buttons class="back-button-desktop-cp" (click)="back()" title="{{ 'back_login' | translate }}">
<ion-icon name="arrow-round-back" color="#2b94d1" class="back" tappable></ion-icon> <ion-icon name="arrow-round-back" color="#2b94d1" class="back" tappable></ion-icon>
<!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>--> <!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>-->
</ion-buttons> </ion-buttons>
</ion-col> </ion-col>
<ion-col> <ion-col>
<!--<div class="change-title bc-title"> <!--<div class="change-title bc-title">
{{ 'change_password' | translate }} {{ 'change_password' | translate }}
</div>--> </div>-->
<div class="documenti-title"> <div class="documenti-title">
<ion-title>{{ 'change_password' | translate }}</ion-title> <ion-title>{{ 'change_password' | translate }}</ion-title>
</div> </div>
</ion-col> </ion-col>
<ion-col></ion-col> <ion-col></ion-col>
</ion-row> </ion-row>
<form #form="ngForm" (ngSubmit)="change(form)" [formGroup]="matching_passwords_group"> <form #form="ngForm" (ngSubmit)="change(form)" [formGroup]="matching_passwords_group">
<ion-grid> <ion-grid>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<ion-col> <ion-col>
<div padding> <div padding>
<ion-item> <ion-item>
<ion-input formControlName="oldpassword" type="password" placeholder="{{ 'old_pwd' | translate }}" ngModel required></ion-input> <ion-input formControlName="oldpassword" type="password" placeholder="{{ 'old_pwd' | translate }}" ngModel required></ion-input>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-input formControlName="newpassword" type="password" placeholder="{{ 'new_pwd' | translate }}" ngModel required></ion-input> <ion-input formControlName="newpassword" type="password" placeholder="{{ 'new_pwd' | translate }}" ngModel required></ion-input>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-input formControlName="newpasswordbis" type="password" placeholder="{{ 'repeat_new_pwd' | translate }}" ngModel required></ion-input> <ion-input formControlName="newpasswordbis" type="password" placeholder="{{ 'repeat_new_pwd' | translate }}" ngModel required></ion-input>
</ion-item> </ion-item>
</div> </div>
<div padding> <div padding>
<ion-button type="submit" [disabled]="form.invalid" class="bc-invia">{{ 'change_password' | translate }}</ion-button> <ion-button type="submit" [disabled]="form.invalid" class="bc-invia">{{ 'change_password' | translate }}</ion-button>
</div> </div>
</ion-col> </ion-col>
</ion-row> </ion-row>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<div class="validation-errors" justify-content-center> <div class="validation-errors" justify-content-center>
<ng-container *ngFor="let validation of validation_messages.newpassword"> <ng-container *ngFor="let validation of validation_messages.newpassword">
<div class="error-message" *ngIf="matching_passwords_group.get('newpassword').hasError(validation.type) && (matching_passwords_group.get('newpassword').dirty <div class="error-message" *ngIf="matching_passwords_group.get('newpassword').hasError(validation.type) && (matching_passwords_group.get('newpassword').dirty
|| matching_passwords_group.get('newpassword').touched)"> || matching_passwords_group.get('newpassword').touched)">
{{ validation.message }} {{ validation.message }}
</div> </div>
</ng-container> </ng-container>
<ng-container *ngFor="let validation of validation_messages.newpasswordbis"> <ng-container *ngFor="let validation of validation_messages.newpasswordbis">
<div class="error-message" *ngIf="matching_passwords_group.get('newpasswordbis').hasError(validation.type) && (matching_passwords_group.get('newpasswordbis').dirty <div class="error-message" *ngIf="matching_passwords_group.get('newpasswordbis').hasError(validation.type) && (matching_passwords_group.get('newpasswordbis').dirty
|| matching_passwords_group.get('newpasswordbis').touched)"> || matching_passwords_group.get('newpasswordbis').touched)">
{{ validation.message }} {{ validation.message }}
</div> </div>
</ng-container> </ng-container>
<ng-container *ngFor="let validation of validation_messages.newpasswordbis"> <ng-container *ngFor="let validation of validation_messages.newpasswordbis">
<div class="error-message" *ngIf="matching_passwords_group.hasError('areEqual')"> <div class="error-message" *ngIf="matching_passwords_group.hasError('areEqual')">
{{ validation.message }} {{ validation.message }}
</div> </div>
</ng-container> </ng-container>
</div> </div>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</form> </form>
</div> </div>
</ion-col> </ion-col>
<ion-col align-self-end size-md="6" size-lg="6" size-xs="12"> <ion-col align-self-end size-md="6" size-lg="6" size-xs="12">
<div class="body-blue2"></div> <div class="body-blue2"></div>
<div class="body-img22"></div> <div class="body-img22"></div>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</ion-content> </ion-content>
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChangePwdPage } from './change-pwd.page'; import { ChangePwdPage } from './change-pwd.page';
describe('ChangePwdPage', () => { describe('ChangePwdPage', () => {
let component: ChangePwdPage; let component: ChangePwdPage;
let fixture: ComponentFixture<ChangePwdPage>; let fixture: ComponentFixture<ChangePwdPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ ChangePwdPage ], declarations: [ ChangePwdPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ChangePwdPage); fixture = TestBed.createComponent(ChangePwdPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { PasswordValidator } from '../../validators/password.validator'; import { PasswordValidator } from '../../validators/password.validator';
import { Validators, FormControl, FormGroup } from '@angular/forms'; import { Validators, FormControl, FormGroup } from '@angular/forms';
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { AuthService } from '../../service/auth.service'; import { AuthService } from '../../service/auth.service';
import { ErrorResponse } from '../../interface/error-response'; import { ErrorResponse } from '../../interface/error-response';
import { UtilService } from '../../../service/util.service'; import { UtilService } from '../../../service/util.service';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { Platform, Events } from '@ionic/angular'; import { Platform, Events } from '@ionic/angular';
@Component({ @Component({
selector: 'app-change-pwd', selector: 'app-change-pwd',
templateUrl: './change-pwd.page.html', templateUrl: './change-pwd.page.html',
styleUrls: ['./change-pwd.page.scss'], styleUrls: ['./change-pwd.page.scss'],
}) })
export class ChangePwdPage implements OnInit { export class ChangePwdPage implements OnInit {
constructor( constructor(
private authService: AuthService, private authService: AuthService,
private router: Router, private router: Router,
public platform: Platform, public platform: Platform,
private utilService: UtilService, private utilService: UtilService,
public translate: TranslateService, public translate: TranslateService,
public events: Events) { public events: Events) {
this.events.subscribe('functionCall:linguaCambiata', eventData => { this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate; translate = utilService.translate;
}); });
translate = utilService.translate; translate = utilService.translate;
} }
change(form){ change(form){
this.utilService.showLoading(); this.utilService.showLoading();
this.authService.getId().then(state => { this.authService.getId().then(state => {
this.authService.changePwd(form.value).subscribe((res: ErrorResponse)=>{ this.authService.changePwd(form.value).subscribe((res: ErrorResponse)=>{
this.utilService.closeLoading(); this.utilService.closeLoading();
if(res.error){ if(res.error){
this.utilService.presentAlert("Errore", "", res.errorMsg, ["OK"]); this.utilService.presentAlert("Errore", "", res.errorMsg, ["OK"]);
} }
else else
{ {
this.utilService.presentAlert("Info", "", "La Password è stata cambiata correttamente", ["OK"]); this.utilService.presentAlert("Info", "", "La Password è stata cambiata correttamente", ["OK"]);
this.utilService.apriPagina("home"); this.utilService.apriPagina("home");
} }
}, },
(error: ErrorResponse) => { (error: ErrorResponse) => {
this.utilService.closeLoading(); this.utilService.closeLoading();
var text = "Errore durante la procedura di cambio password"; var text = "Errore durante la procedura di cambio password";
this.utilService.stampaErrore(text, error); this.utilService.stampaErrore(text, error);
}); });
}); });
} }
matching_passwords_group = new FormGroup({ matching_passwords_group = new FormGroup({
oldpassword: new FormControl('', Validators.required), oldpassword: new FormControl('', Validators.required),
newpassword: new FormControl('', Validators.compose([ newpassword: new FormControl('', Validators.compose([
Validators.minLength(5), Validators.minLength(5),
Validators.required, Validators.required,
Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]+$') //this is for the letters (both uppercase and lowercase) and numbers validation Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]+$') //this is for the letters (both uppercase and lowercase) and numbers validation
])), ])),
newpasswordbis: new FormControl('', Validators.compose([ newpasswordbis: new FormControl('', Validators.compose([
Validators.required Validators.required
])) ]))
},(formGroup: FormGroup) => { },(formGroup: FormGroup) => {
return PasswordValidator.areEqual(formGroup); return PasswordValidator.areEqual(formGroup);
}); });
validation_messages = { validation_messages = {
'newpassword': [ 'newpassword': [
{ type: 'required', message: 'Password è richiesta.' }, { type: 'required', message: 'Password è richiesta.' },
{ type: 'minlength', message: 'La lunghezza minima è 5 caratteri' }, { type: 'minlength', message: 'La lunghezza minima è 5 caratteri' },
{ type: 'pattern', message: 'Deve essere composta da numeri e lettere' } { type: 'pattern', message: 'Deve essere composta da numeri e lettere' }
], ],
'newpasswordbis': [ 'newpasswordbis': [
{ type: 'areEqual', message: 'La password deve essere uguale a quella nuova' }, { type: 'areEqual', message: 'La password deve essere uguale a quella nuova' },
{ type: 'required', message: 'Il Repeat Password è richiesto.' } { type: 'required', message: 'Il Repeat Password è richiesto.' }
] ]
} }
back() back()
{ {
this.utilService.apriPagina("home"); this.utilService.apriPagina("home");
} }
ngOnInit() { ngOnInit() {
} }
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { LoginPage } from './login.page'; import { LoginPage } from './login.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: LoginPage component: LoginPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [LoginPage] declarations: [LoginPage]
}) })
export class LoginPageModule {} export class LoginPageModule {}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LoginPage } from './login.page'; import { LoginPage } from './login.page';
describe('LoginPage', () => { describe('LoginPage', () => {
let component: LoginPage; let component: LoginPage;
let fixture: ComponentFixture<LoginPage>; let fixture: ComponentFixture<LoginPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ LoginPage ], declarations: [ LoginPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(LoginPage); fixture = TestBed.createComponent(LoginPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
...@@ -60,7 +60,8 @@ export class LoginPage implements OnInit { ...@@ -60,7 +60,8 @@ export class LoginPage implements OnInit {
} }
else else
{ {
this.utilService.pushNotification(AuthService.idReferente); if(AuthService.idReferente != null) this.utilService.pushNotification(AuthService.idReferente);
else this.utilService.pushNotification(AuthService.idCliente);
UtilService.titoloPagina = ''; UtilService.titoloPagina = '';
this.utilService.redirectToFirstPage('notifiche'); this.utilService.redirectToFirstPage('notifiche');
this.events.publish('functionCall:startup', null); this.events.publish('functionCall:startup', null);
......
...@@ -41,7 +41,8 @@ export class RegistrazionePage implements OnInit { ...@@ -41,7 +41,8 @@ export class RegistrazionePage implements OnInit {
else else
{ {
this.utilService.presentAlert("Info", "", "Registrazione effettuata con successo", ["OK"]); this.utilService.presentAlert("Info", "", "Registrazione effettuata con successo", ["OK"]);
this.utilService.pushNotification(AuthService.idReferente); if(AuthService.idReferente != null) this.utilService.pushNotification(AuthService.idReferente);
else this.utilService.pushNotification(AuthService.idCliente);
UtilService.titoloPagina = ''; UtilService.titoloPagina = '';
this.utilService.redirectToFirstPage('notifiche'); this.utilService.redirectToFirstPage('notifiche');
this.events.publish('functionCall:startup', null); this.events.publish('functionCall:startup', null);
......
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { ResetPage } from './reset.page'; import { ResetPage } from './reset.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: ResetPage component: ResetPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
ReactiveFormsModule, ReactiveFormsModule,
TranslateModule TranslateModule
], ],
declarations: [ResetPage] declarations: [ResetPage]
}) })
export class ResetPageModule {} export class ResetPageModule {}
<ion-header> <ion-header>
<title>2p2</title> <title>2p2</title>
</ion-header> </ion-header>
<ion-content> <ion-content>
<div class="background-blu rp-height" *ngIf="!platform.is('desktop')"> <div class="background-blu rp-height" *ngIf="!platform.is('desktop')">
<ion-grid> <ion-grid>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<ion-col align-self-center> <ion-col align-self-center>
<ion-toolbar class="business-toolbar"> <ion-toolbar class="business-toolbar">
<ion-buttons (click)="back()" slot="start" title="{{ 'back_login' | translate }}"> <ion-buttons (click)="back()" slot="start" title="{{ 'back_login' | translate }}">
<ion-icon name="arrow-round-back" color="#2b94d1" class="back-white" tappable></ion-icon> <ion-icon name="arrow-round-back" color="#2b94d1" class="back-white" tappable></ion-icon>
<!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>--> <!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>-->
</ion-buttons> </ion-buttons>
<img src="assets/img/LogoBianco.svg" class="immagine-piccola"> <img src="assets/img/LogoBianco.svg" class="immagine-piccola">
</ion-toolbar> </ion-toolbar>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
<div class="messaggio-bianco"> <div class="messaggio-bianco">
{{ 'reset_pwd' | translate }} {{ 'reset_pwd' | translate }}
</div> </div>
</div> </div>
<ion-grid class="transparent bc-grid"> <ion-grid class="transparent bc-grid">
<ion-row class="transparent"> <ion-row class="transparent">
<ion-col align-self-end size-md="6" size-lg="6" size-xs="12" class="transparent"> <ion-col align-self-end size-md="6" size-lg="6" size-xs="12" class="transparent">
<div class="body-form body-img12"> <div class="body-form body-img12">
<form #form="ngForm" (ngSubmit)="reset(form)" [formGroup]="matching_email_group"> <form #form="ngForm" (ngSubmit)="reset(form)" [formGroup]="matching_email_group">
<ion-grid> <ion-grid>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<ion-col align-self-center> <ion-col align-self-center>
<ion-row *ngIf="platform.is('desktop')"> <ion-row *ngIf="platform.is('desktop')">
<ion-buttons (click)="back()" title="{{ 'back_login' | translate }}" class="back-button-desktop back-button-desktop-reset"> <ion-buttons (click)="back()" title="{{ 'back_login' | translate }}" class="back-button-desktop back-button-desktop-reset">
<ion-icon name="arrow-round-back" color="#232D4B" class="back" tappable></ion-icon> <ion-icon name="arrow-round-back" color="#232D4B" class="back" tappable></ion-icon>
</ion-buttons> </ion-buttons>
<ion-title class="logo-piccolo"> <ion-title class="logo-piccolo">
<img src="assets/icon/2p2-logo-color.svg"> <img src="assets/icon/2p2-logo-color.svg">
</ion-title> </ion-title>
</ion-row> </ion-row>
<div text-center *ngIf="platform.is('desktop')"> <div text-center *ngIf="platform.is('desktop')">
<h3>{{ 'reset_pwd' | translate }}</h3> <h3>{{ 'reset_pwd' | translate }}</h3>
</div> </div>
<div padding> <div padding>
<ion-item> <ion-item>
<ion-input formControlName="email" type="email" placeholder="{{ 'email' | translate }}" ngModel required></ion-input> <ion-input formControlName="email" type="email" placeholder="{{ 'email' | translate }}" ngModel required></ion-input>
</ion-item> </ion-item>
</div> </div>
<div padding> <div padding>
<ion-button type="submit" [disabled]="form.invalid" class="bc-invia">{{ 'reset_pwd' | translate }}</ion-button> <ion-button type="submit" [disabled]="form.invalid" class="bc-invia">{{ 'reset_pwd' | translate }}</ion-button>
</div> </div>
</ion-col> </ion-col>
</ion-row> </ion-row>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<div class="validation-errors" justify-content-center> <div class="validation-errors" justify-content-center>
<ng-container *ngFor="let validation of validation_messages.email"> <ng-container *ngFor="let validation of validation_messages.email">
<div class="error-message" *ngIf="matching_email_group.get('email').hasError(validation.type) && (matching_email_group.get('email').dirty <div class="error-message" *ngIf="matching_email_group.get('email').hasError(validation.type) && (matching_email_group.get('email').dirty
|| matching_email_group.get('email').touched)"> || matching_email_group.get('email').touched)">
{{ validation.message }} {{ validation.message }}
</div> </div>
</ng-container> </ng-container>
</div> </div>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</form> </form>
</div> </div>
</ion-col> </ion-col>
<ion-col align-self-end size-md="6" size-lg="6" size-xs="12"> <ion-col align-self-end size-md="6" size-lg="6" size-xs="12">
<div class="body-blue2"></div> <div class="body-blue2"></div>
<div class="body-img22"></div> <div class="body-img22"></div>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</ion-content> </ion-content>
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ResetPage } from './reset.page'; import { ResetPage } from './reset.page';
describe('ResetPage', () => { describe('ResetPage', () => {
let component: ResetPage; let component: ResetPage;
let fixture: ComponentFixture<ResetPage>; let fixture: ComponentFixture<ResetPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ ResetPage ], declarations: [ ResetPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ResetPage); fixture = TestBed.createComponent(ResetPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Validators, FormControl, FormGroup } from '@angular/forms'; import { Validators, FormControl, FormGroup } from '@angular/forms';
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { AuthService } from '../../service/auth.service'; import { AuthService } from '../../service/auth.service';
import { ErrorResponse } from './../../interface/error-response'; import { ErrorResponse } from './../../interface/error-response';
import { UtilService } from '../../../service/util.service'; import { UtilService } from '../../../service/util.service';
import { Events, Platform } from '@ionic/angular'; import { Events, Platform } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
@Component({ @Component({
selector: 'app-reset', selector: 'app-reset',
templateUrl: './reset.page.html', templateUrl: './reset.page.html',
styleUrls: ['./reset.page.scss'], styleUrls: ['./reset.page.scss'],
}) })
export class ResetPage implements OnInit { export class ResetPage implements OnInit {
constructor( constructor(
private authService: AuthService, private authService: AuthService,
private router: Router, private router: Router,
public events: Events, public events: Events,
public platform: Platform, public platform: Platform,
private utilService: UtilService, private utilService: UtilService,
public translate: TranslateService public translate: TranslateService
) { ) {
this.events.subscribe('functionCall:linguaCambiata', eventData => { this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate; translate = utilService.translate;
}); });
translate = utilService.translate; translate = utilService.translate;
} }
reset(form){ reset(form){
this.utilService.showLoading(); this.utilService.showLoading();
this.authService.reset(form.value).subscribe((res: ErrorResponse)=>{ this.authService.reset(form.value).subscribe((res: ErrorResponse)=>{
this.utilService.closeLoading(); this.utilService.closeLoading();
if(res.error){ if(res.error){
this.utilService.presentAlert("Errore", "", res.errorMsg, ["OK"]); this.utilService.presentAlert("Errore", "", res.errorMsg, ["OK"]);
} }
else else
{ {
this.utilService.presentAlert("Info", "", "Una mail è stata spedita all'indirizzo comunicato con una password temporanea.", ["OK"]); this.utilService.presentAlert("Info", "", "Una mail è stata spedita all'indirizzo comunicato con una password temporanea.", ["OK"]);
this.router.navigateByUrl('/login'); this.router.navigateByUrl('/login');
} }
}, },
(error: ErrorResponse) => { (error: ErrorResponse) => {
this.utilService.closeLoading(); this.utilService.closeLoading();
var text = "Errore durante la procedura di reset password"; var text = "Errore durante la procedura di reset password";
this.utilService.stampaErrore(text, error); this.utilService.stampaErrore(text, error);
}); });
} }
matching_email_group = new FormGroup({ matching_email_group = new FormGroup({
email: new FormControl('', Validators.compose([ email: new FormControl('', Validators.compose([
Validators.required, Validators.required,
Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$') Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$')
])) ]))
}); });
validation_messages = { validation_messages = {
'email': [ 'email': [
{ type: 'required', message: 'Email è richiesta.' }, { type: 'required', message: 'Email è richiesta.' },
{ type: 'pattern', message: 'Deve essere composta da numeri e lettere' } { type: 'pattern', message: 'Deve essere composta da numeri e lettere' }
] ]
} }
ngOnInit() { ngOnInit() {
} }
back() back()
{ {
this.router.navigateByUrl('/login'); this.router.navigateByUrl('/login');
} }
} }
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { AuthService } from './auth.service'; import { AuthService } from './auth.service';
describe('AuthService', () => { describe('AuthService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: AuthService = TestBed.get(AuthService); const service: AuthService = TestBed.get(AuthService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { AbstractControl, ValidatorFn, FormControl, FormGroup } from '@angular/forms'; import { AbstractControl, ValidatorFn, FormControl, FormGroup } from '@angular/forms';
export class PasswordValidator { export class PasswordValidator {
// Inspired on: http://plnkr.co/edit/Zcbg2T3tOxYmhxs7vaAm?p=preview // Inspired on: http://plnkr.co/edit/Zcbg2T3tOxYmhxs7vaAm?p=preview
static equals = (newpasswordControl: AbstractControl): ValidatorFn => { static equals = (newpasswordControl: AbstractControl): ValidatorFn => {
let equal: boolean = false; let equal: boolean = false;
return (passwordBisControl: AbstractControl): {[key: string]: boolean} => { return (passwordBisControl: AbstractControl): {[key: string]: boolean} => {
if(newpasswordControl.value == passwordBisControl.value) { if(newpasswordControl.value == passwordBisControl.value) {
return { return {
equals: true equals: true
}; };
} }
else return null; else return null;
}; };
} }
static areEqual(formGroup: FormGroup) { static areEqual(formGroup: FormGroup) {
let val; let val;
let valid = true; let valid = true;
for (let key in formGroup.controls) { for (let key in formGroup.controls) {
if (formGroup.controls.hasOwnProperty(key)) { if (formGroup.controls.hasOwnProperty(key)) {
if(key == "oldpassword") continue; if(key == "oldpassword") continue;
let control: FormControl = <FormControl>formGroup.controls[key]; let control: FormControl = <FormControl>formGroup.controls[key];
if (val === undefined) { if (val === undefined) {
val = control.value val = control.value
} else { } else {
if (val !== control.value) { if (val !== control.value) {
valid = false; valid = false;
break; break;
} }
} }
} }
} }
if (!valid) /*{ if (!valid) /*{
return null; return null;
return { return {
areEqual: false areEqual: false
} }
}*/ }*/
return { return {
areEqual: true areEqual: true
} }
} }
} }
\ No newline at end of file
<div> <div>
<form #form="ngForm" (ngSubmit)="dismiss(form)"> <form #form="ngForm" (ngSubmit)="dismiss(form)">
<ion-grid> <ion-grid>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12"> <ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div text-center> <div text-center>
<h3>Login</h3> <h3>Login</h3>
</div> </div>
<div padding> <div padding>
<ion-item> <ion-item>
<ion-textarea name="question" placeholder="Inserisci una domanda" ngModel required></ion-textarea> <ion-textarea name="question" placeholder="Inserisci una domanda" ngModel required></ion-textarea>
</ion-item> </ion-item>
</div> </div>
<div padding> <div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Salva</ion-button> <ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Salva</ion-button>
</div> </div>
<div padding> <div padding>
<ion-button size="large" expand="block" (click)="close()">Cancel</ion-button> <ion-button size="large" expand="block" (click)="close()">Cancel</ion-button>
</div> </div>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</form> </form>
</div> </div>
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ModalQuestionComponent } from './modal-question.component'; import { ModalQuestionComponent } from './modal-question.component';
describe('ModalQuestionComponent', () => { describe('ModalQuestionComponent', () => {
let component: ModalQuestionComponent; let component: ModalQuestionComponent;
let fixture: ComponentFixture<ModalQuestionComponent>; let fixture: ComponentFixture<ModalQuestionComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ ModalQuestionComponent ], declarations: [ ModalQuestionComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ModalQuestionComponent); fixture = TestBed.createComponent(ModalQuestionComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import {ModalController} from '@ionic/angular'; import {ModalController} from '@ionic/angular';
@Component({ @Component({
selector: 'app-modal-question', selector: 'app-modal-question',
templateUrl: './modal-question.component.html', templateUrl: './modal-question.component.html',
styleUrls: ['./modal-question.component.scss'], styleUrls: ['./modal-question.component.scss'],
}) })
export class ModalQuestionComponent implements OnInit { export class ModalQuestionComponent implements OnInit {
constructor(private modalController: ModalController) { } constructor(private modalController: ModalController) { }
async dismiss(form) async dismiss(form)
{ {
await this.modalController.dismiss(form.value.question); await this.modalController.dismiss(form.value.question);
} }
async close() async close()
{ {
await this.modalController.dismiss(); await this.modalController.dismiss();
} }
ngOnInit() {} ngOnInit() {}
} }
<div> <div>
<form #form="ngForm" (ngSubmit)="dismiss(form)"> <form #form="ngForm" (ngSubmit)="dismiss(form)">
<ion-grid> <ion-grid>
<ion-row color="primary" justify-content-center> <ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12"> <ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div text-center> <div text-center>
<h3>Crea Parere</h3> <h3>Crea Parere</h3>
</div> </div>
<div padding> <div padding>
<ion-item> <ion-item>
<ion-input name="title" type="text" placeholder="Titolo Parere" ngModel required></ion-input> <ion-input name="title" type="text" placeholder="Titolo Parere" ngModel required></ion-input>
</ion-item> </ion-item>
</div> </div>
<div padding> <div padding>
<ion-item> <ion-item>
<ion-textarea name="question" placeholder="Inserisci una domanda" ngModel required></ion-textarea> <ion-textarea name="question" placeholder="Inserisci una domanda" ngModel required></ion-textarea>
</ion-item> </ion-item>
</div> </div>
<ion-item> <ion-item>
<h4>Aggiungi Allegato</h4> <h4>Aggiungi Allegato</h4>
<ion-input id="file" type="file" name="file" ngModel (ionChange)="loadFile();"></ion-input> <ion-input id="file" type="file" name="file" ngModel (ionChange)="loadFile();"></ion-input>
</ion-item> </ion-item>
<div padding> <div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Salva</ion-button> <ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Salva</ion-button>
</div> </div>
<div padding> <div padding>
<ion-button size="large" expand="block" (click)="close()">Cancel</ion-button> <ion-button size="large" expand="block" (click)="close()">Cancel</ion-button>
</div> </div>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</form> </form>
</div> </div>
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ParereModalComponent } from './parere-modal.component'; import { ParereModalComponent } from './parere-modal.component';
describe('ParereModalComponent', () => { describe('ParereModalComponent', () => {
let component: ParereModalComponent; let component: ParereModalComponent;
let fixture: ComponentFixture<ParereModalComponent>; let fixture: ComponentFixture<ParereModalComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ ParereModalComponent ], declarations: [ ParereModalComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ParereModalComponent); fixture = TestBed.createComponent(ParereModalComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { DataWithFileUploaded } from './../../interface/data-with-file-uploaded'; import { DataWithFileUploaded } from './../../interface/data-with-file-uploaded';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import {ModalController} from '@ionic/angular'; import {ModalController} from '@ionic/angular';
@Component({ @Component({
selector: 'app-parere-modal', selector: 'app-parere-modal',
templateUrl: './parere-modal.component.html', templateUrl: './parere-modal.component.html',
styleUrls: ['./parere-modal.component.scss'], styleUrls: ['./parere-modal.component.scss'],
}) })
export class ParereModalComponent implements OnInit { export class ParereModalComponent implements OnInit {
constructor(private modalController: ModalController) { constructor(private modalController: ModalController) {
result = {dati: null, file: null}; result = {dati: null, file: null};
} }
ngOnInit() {} ngOnInit() {}
loadFile() loadFile()
{ {
var element : HTMLInputElement = document.querySelector('input[type=file]'); var element : HTMLInputElement = document.querySelector('input[type=file]');
var file: Blob = element.files[0]; var file: Blob = element.files[0];
var reader = new FileReader(); var reader = new FileReader();
reader.onloadend = function () { reader.onloadend = function () {
result.file = reader.result; result.file = reader.result;
}; };
/*reader.addEventListener("load", function () { /*reader.addEventListener("load", function () {
result.file = reader.result; result.file = reader.result;
}, false);*/ }, false);*/
if (file) { if (file) {
reader.readAsDataURL(file); reader.readAsDataURL(file);
} }
} }
async dismiss(form) async dismiss(form)
{ {
result.dati = form.value; result.dati = form.value;
await this.modalController.dismiss(result); await this.modalController.dismiss(result);
} }
async close() async close()
{ {
await this.modalController.dismiss(); await this.modalController.dismiss();
} }
fileName; fileName;
} }
var result: DataWithFileUploaded; var result: DataWithFileUploaded;
export interface ArchiviaNotificaRequest { export interface ArchiviaNotificaRequest {
daArchiviare: boolean, daArchiviare: boolean,
cliente: number, cliente: number,
listaNotifiche: number[]; listaNotifiche: number[];
} }
import { ArchiviaNotificaRequest } from './archivia-notifica-request'; import { ArchiviaNotificaRequest } from './archivia-notifica-request';
import { Notifica } from './notifica'; import { Notifica } from './notifica';
export interface ArchiviaNotificaResponse { export interface ArchiviaNotificaResponse {
notifica: ArchiviaNotificaRequest, notifica: ArchiviaNotificaRequest,
error: string, error: string,
notificheNonArchiviate: Notifica[] notificheNonArchiviate: Notifica[]
} }
export interface ArchiviaRichiestaRequest { export interface ArchiviaRichiestaRequest {
daArchiviare: boolean, daArchiviare: boolean,
cliente: number, cliente: number,
listaRichieste: number[]; listaRichieste: number[];
} }
import { ArchiviaRichiestaRequest } from './archivia-richiesta-request'; import { ArchiviaRichiestaRequest } from './archivia-richiesta-request';
import { Richiesta } from './richiesta'; import { Richiesta } from './richiesta';
export interface ArchiviaRichiestaResponse { export interface ArchiviaRichiestaResponse {
richiesta: ArchiviaRichiestaRequest, richiesta: ArchiviaRichiestaRequest,
error: string, error: string,
richiesteNonArchiviate: Richiesta[] richiesteNonArchiviate: Richiesta[]
} }
export interface DataWithFileUploaded { export interface DataWithFileUploaded {
file; file;
dati; dati;
} }
import { DocumentiRequest } from './documenti-request'; import { DocumentiRequest } from './documenti-request';
import { Documento } from './documento'; import { Documento } from './documento';
export interface DocumentiResponse { export interface DocumentiResponse {
cliente: DocumentiRequest; cliente: DocumentiRequest;
error: string; error: string;
documenti: Documento[]; documenti: Documento[];
} }
export interface Documento { export interface Documento {
idDocumento: number; idDocumento: number;
titolo: string; titolo: string;
data: string; data: string;
url: string; url: string;
tipo: string; tipo: string;
nomeFile: string; nomeFile: string;
checked: boolean; checked: boolean;
} }
export interface Fattura { export interface Fattura {
id: number; id: number;
dataProgNotula: string; dataProgNotula: string;
dataNotula: string; dataNotula: string;
urlProgNotula: string; urlProgNotula: string;
urlNotula: string; urlNotula: string;
nrProgNotula: string; nrProgNotula: string;
nrNotula: string; nrNotula: string;
checked: boolean; checked: boolean;
} }
import { Pair } from './pair'; import { Pair } from './pair';
export interface FattureRequest { export interface FattureRequest {
cliente: number; cliente: number;
limite: number; limite: number;
struttura: number; struttura: number;
filtri: Pair[]; filtri: Pair[];
} }
import { Fattura } from './fattura'; import { Fattura } from './fattura';
import { FattureRequest } from './fatture-request'; import { FattureRequest } from './fatture-request';
export interface FattureResponse { export interface FattureResponse {
notula: FattureRequest; notula: FattureRequest;
error: string; error: string;
notule: Fattura[]; notule: Fattura[];
} }
export interface Intervento { export interface Intervento {
idIntervento: number; idIntervento: number;
titolo: string; titolo: string;
testo: string; testo: string;
data: string; data: string;
utente: string; utente: string;
url: string; url: string;
nomeFile: string; nomeFile: string;
} }
export interface NewRichiestaRequest { export interface NewRichiestaRequest {
cliente: number; cliente: number;
richiesta: number; richiesta: number;
titolo: string; titolo: string;
testo: string; testo: string;
tipo: string; tipo: string;
file: any; file: any;
nomeFile: string; nomeFile: string;
} }
import { NewRichiestaRequest } from './new-richiesta-request'; import { NewRichiestaRequest } from './new-richiesta-request';
export interface NewRichiestaResponse { export interface NewRichiestaResponse {
richiesta: NewRichiestaRequest; richiesta: NewRichiestaRequest;
error: string; error: string;
idRichiesta:number; idRichiesta:number;
} }
export interface P2pResponse { export interface P2pResponse {
token:string; token:string;
} }
export interface Pair { export interface Pair {
key: string; key: string;
value: string; value: string;
type: string; type: string;
} }
export interface ParereResponse { export interface ParereResponse {
error:string; error:string;
idCliente: number; idCliente: number;
autorizzato: boolean; autorizzato: boolean;
} }
import { Intervento } from './intervento'; import { Intervento } from './intervento';
export interface Richiesta { export interface Richiesta {
idRichiesta: number; idRichiesta: number;
titolo: string; titolo: string;
testo: string; testo: string;
data: string; data: string;
url: string; url: string;
tipo: string; tipo: string;
interventi: Intervento[]; interventi: Intervento[];
nomeFile: string; nomeFile: string;
checked: boolean; checked: boolean;
errorText: string; errorText: string;
archiviato: boolean; archiviato: boolean;
} }
import { Pair } from './pair'; import { Pair } from './pair';
export interface RichiesteRequest { export interface RichiesteRequest {
cliente: number; cliente: number;
limite: number; limite: number;
richiesta: number; richiesta: number;
filtri: Pair[]; filtri: Pair[];
} }
import { RichiesteRequest } from './richieste-request'; import { RichiesteRequest } from './richieste-request';
import { Richiesta } from './richiesta'; import { Richiesta } from './richiesta';
export interface RichiesteResponse { export interface RichiesteResponse {
richiesta: RichiesteRequest; richiesta: RichiesteRequest;
error: string; error: string;
richieste: Richiesta[]; richieste: Richiesta[];
} }
export interface Struttura { export interface Struttura {
id: number; id: number;
denominazione: string; denominazione: string;
} }
import { Struttura } from './struttura'; import { Struttura } from './struttura';
export interface StruttureResponse { export interface StruttureResponse {
idCliente: number; idCliente: number;
error: string; error: string;
strutture: Struttura[]; strutture: Struttura[];
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { BiPage } from './bi.page'; import { BiPage } from './bi.page';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: BiPage component: BiPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes) RouterModule.forChild(routes)
], ],
declarations: [BiPage] declarations: [BiPage]
}) })
export class BiPageModule {} export class BiPageModule {}
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title>bi</ion-title> <ion-title>bi</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
</ion-content> </ion-content>
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { BiPage } from './bi.page'; import { BiPage } from './bi.page';
describe('BiPage', () => { describe('BiPage', () => {
let component: BiPage; let component: BiPage;
let fixture: ComponentFixture<BiPage>; let fixture: ComponentFixture<BiPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ BiPage ], declarations: [ BiPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(BiPage); fixture = TestBed.createComponent(BiPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Events } from '@ionic/angular'; import { Events } from '@ionic/angular';
import { InAppBrowser, InAppBrowserOptions } from '@ionic-native/in-app-browser/ngx'; import { InAppBrowser, InAppBrowserOptions } from '@ionic-native/in-app-browser/ngx';
@Component({ @Component({
selector: 'app-bi', selector: 'app-bi',
templateUrl: './bi.page.html', templateUrl: './bi.page.html',
styleUrls: ['./bi.page.scss'], styleUrls: ['./bi.page.scss'],
}) })
export class BiPage implements OnInit { export class BiPage implements OnInit {
options : InAppBrowserOptions = { options : InAppBrowserOptions = {
location : 'yes',//Or 'no' location : 'yes',//Or 'no'
hidden : 'no', //Or 'yes' hidden : 'no', //Or 'yes'
clearcache : 'yes', clearcache : 'yes',
clearsessioncache : 'yes', clearsessioncache : 'yes',
zoom : 'yes',//Android only ,shows browser zoom controls zoom : 'yes',//Android only ,shows browser zoom controls
hardwareback : 'yes', hardwareback : 'yes',
mediaPlaybackRequiresUserAction : 'no', mediaPlaybackRequiresUserAction : 'no',
shouldPauseOnSuspend : 'no', //Android only shouldPauseOnSuspend : 'no', //Android only
closebuttoncaption : 'Close', //iOS only closebuttoncaption : 'Close', //iOS only
disallowoverscroll : 'no', //iOS only disallowoverscroll : 'no', //iOS only
toolbar : 'yes', //iOS only toolbar : 'yes', //iOS only
enableViewportScale : 'no', //iOS only enableViewportScale : 'no', //iOS only
allowInlineMediaPlayback : 'no',//iOS only allowInlineMediaPlayback : 'no',//iOS only
presentationstyle : 'pagesheet',//iOS only presentationstyle : 'pagesheet',//iOS only
//fullscreen : 'yes',//Windows only //fullscreen : 'yes',//Windows only
}; };
constructor(public events: Events, private iab: InAppBrowser) { constructor(public events: Events, private iab: InAppBrowser) {
this.events.publish('functionCall:startup', null); this.events.publish('functionCall:startup', null);
const browser = this.iab.create('https://ionicframework.com/', "_blank", this.options); const browser = this.iab.create('https://ionicframework.com/', "_blank", this.options);
} }
ngOnInit() { ngOnInit() {
} }
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { BusinesscallPage } from './businesscall.page'; import { BusinesscallPage } from './businesscall.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: BusinesscallPage component: BusinesscallPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [BusinesscallPage] declarations: [BusinesscallPage]
}) })
export class BusinesscallPageModule {} export class BusinesscallPageModule {}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { BusinesscallPage } from './businesscall.page'; import { BusinesscallPage } from './businesscall.page';
describe('BusinesscallPage', () => { describe('BusinesscallPage', () => {
let component: BusinesscallPage; let component: BusinesscallPage;
let fixture: ComponentFixture<BusinesscallPage>; let fixture: ComponentFixture<BusinesscallPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ BusinesscallPage ], declarations: [ BusinesscallPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(BusinesscallPage); fixture = TestBed.createComponent(BusinesscallPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { DocumentiPage } from './documenti.page'; import { DocumentiPage } from './documenti.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: DocumentiPage component: DocumentiPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [DocumentiPage] declarations: [DocumentiPage]
}) })
export class DocumentiPageModule {} export class DocumentiPageModule {}
.header .col { .header .col {
background-color:lightgrey; background-color:lightgrey;
} }
.col { .col {
border: solid 1px grey; border: solid 1px grey;
border-bottom-style: none; border-bottom-style: none;
border-right-style: none; border-right-style: none;
} }
.col:last-child { .col:last-child {
border-right: solid 1px grey; border-right: solid 1px grey;
} }
.row:last-child .col { .row:last-child .col {
border-bottom: solid 1px grey; border-bottom: solid 1px grey;
} }
.row:nth-child(odd){ .row:nth-child(odd){
background-color: #99ff99; background-color: #99ff99;
} }
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DocumentiPage } from './documenti.page'; import { DocumentiPage } from './documenti.page';
describe('DocumentiPage', () => { describe('DocumentiPage', () => {
let component: DocumentiPage; let component: DocumentiPage;
let fixture: ComponentFixture<DocumentiPage>; let fixture: ComponentFixture<DocumentiPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ DocumentiPage ], declarations: [ DocumentiPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(DocumentiPage); fixture = TestBed.createComponent(DocumentiPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { HomePageRoutingModule } from './home.router.module'; import { HomePageRoutingModule } from './home.router.module';
import { HomePage } from './home.page'; import { HomePage } from './home.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
@NgModule({ @NgModule({
imports: [ imports: [
IonicModule, IonicModule,
CommonModule, CommonModule,
FormsModule, FormsModule,
HomePageRoutingModule, HomePageRoutingModule,
TranslateModule TranslateModule
], ],
declarations: [HomePage] declarations: [HomePage]
}) })
export class HomePageModule {} export class HomePageModule {}
ion-title{ ion-title{
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
padding: 0 90px 1px; padding: 0 90px 1px;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
ion-tab-bar{ ion-tab-bar{
@media (min-width: 1080px) { @media (min-width: 1080px) {
justify-content: left; justify-content: left;
} }
} }
.tabbar { .tabbar {
@media (max-width: 1080px) { @media (max-width: 1080px) {
display: flex; display: flex;
overflow-x: scroll; overflow-x: scroll;
min-height: 80px; min-height: 80px;
.tabbutton { .tabbutton {
display: inline-block !important; display: inline-block !important;
min-width: 100px !important; min-width: 100px !important;
width: auto !important; width: auto !important;
} }
} }
} }
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HomePage } from './home.page'; import { HomePage } from './home.page';
describe('HomePage', () => { describe('HomePage', () => {
let component: HomePage; let component: HomePage;
let fixture: ComponentFixture<HomePage>; let fixture: ComponentFixture<HomePage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [HomePage], declarations: [HomePage],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(HomePage); fixture = TestBed.createComponent(HomePage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { IndexPage } from './index.page'; import { IndexPage } from './index.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: IndexPage component: IndexPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [IndexPage] declarations: [IndexPage]
}) })
export class IndexPageModule {} export class IndexPageModule {}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IndexPage } from './index.page'; import { IndexPage } from './index.page';
describe('IndexPage', () => { describe('IndexPage', () => {
let component: IndexPage; let component: IndexPage;
let fixture: ComponentFixture<IndexPage>; let fixture: ComponentFixture<IndexPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ IndexPage ], declarations: [ IndexPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(IndexPage); fixture = TestBed.createComponent(IndexPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { IntervistePage } from './interviste.page'; import { IntervistePage } from './interviste.page';
import {ModalQuestionComponent} from '../../components/modal-question/modal-question.component'; import {ModalQuestionComponent} from '../../components/modal-question/modal-question.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: IntervistePage component: IntervistePage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [IntervistePage, ModalQuestionComponent], declarations: [IntervistePage, ModalQuestionComponent],
entryComponents: [ModalQuestionComponent] entryComponents: [ModalQuestionComponent]
}) })
export class IntervistePageModule {} export class IntervistePageModule {}
.my-custom-menu { .my-custom-menu {
--width: 500px; --width: 500px;
} }
ion-content { ion-content {
//background: url(../assets/imgs/chat-back.png) no-repeat center center fixed; //background: url(../assets/imgs/chat-back.png) no-repeat center center fixed;
background-size: cover; background-size: cover;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
.item-md, .item-ios { .item-md, .item-ios {
background: none; background: none;
} }
} }
ion-footer { ion-footer {
background: white; background: white;
ion-icon { ion-icon {
padding: 10px; padding: 10px;
font-size: 20px; font-size: 20px;
color: green; color: green;
} }
} }
.message { .message {
width: 60%; width: 60%;
} }
.chat-status { .chat-status {
min-height: 49px; min-height: 49px;
.chat-date { .chat-date {
display: block; display: block;
font-size: 10px; font-size: 10px;
font-style: italic; font-style: italic;
color: #fff; color: #fff;
text-shadow: 0px -1px 0px #222, 0px 1px 0px #aaa; text-shadow: 0px -1px 0px #222, 0px 1px 0px #aaa;
height: 15px; height: 15px;
left: 10%; left: 10%;
right:10%; right:10%;
} }
.chat-content-center { .chat-content-center {
padding: 5px 10px; padding: 5px 10px;
background-color: #e1e1f7; background-color: #e1e1f7;
border-radius: 6px; border-radius: 6px;
font-size: 12px; font-size: 12px;
color: #555; color: #555;
height: 34px; height: 34px;
left: 10%; left: 10%;
right:10%; right:10%;
} }
} }
.chat-message { .chat-message {
width: 80%; width: 80%;
min-height: 40px; min-height: 40px;
.right-bubble { .right-bubble {
position: relative; position: relative;
background: #dcf8c6; background: #dcf8c6;
border-top-left-radius: .4em; border-top-left-radius: .4em;
border-bottom-left-radius: .4em; border-bottom-left-radius: .4em;
border-bottom-right-radius: .4em; border-bottom-right-radius: .4em;
padding: 5px 10px 10px; padding: 5px 10px 10px;
left: 15%; left: 15%;
span.msg-name { span.msg-name {
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
color: green; color: green;
} }
span.msg-date { span.msg-date {
font-size: 10px; font-size: 10px;
} }
} }
.right-bubble:after { .right-bubble:after {
content: ''; content: '';
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
width: 0; width: 0;
height: 0; height: 0;
border: 27px solid transparent; border: 27px solid transparent;
border-left-color: #dcf8c6; border-left-color: #dcf8c6;
border-right: 0; border-right: 0;
border-top: 0; border-top: 0;
margin-top: -13.5px; margin-top: -13.5px;
margin-right: -27px; margin-right: -27px;
} }
.left-bubble { .left-bubble {
position: relative; position: relative;
background: #7117d8; background: #7117d8;
border-top-right-radius: .4em; border-top-right-radius: .4em;
border-bottom-left-radius: .4em; border-bottom-left-radius: .4em;
border-bottom-right-radius: .4em; border-bottom-right-radius: .4em;
padding: 5px 10px 10px; padding: 5px 10px 10px;
left: 5%; left: 5%;
span.msg-name { span.msg-name {
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
color: blue; color: blue;
} }
span.msg-date { span.msg-date {
font-size: 10px; font-size: 10px;
} }
} }
.left-bubble:after { .left-bubble:after {
content: ''; content: '';
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
width: 0; width: 0;
height: 0; height: 0;
border: 27px solid transparent; border: 27px solid transparent;
border-right-color: #7117d8; border-right-color: #7117d8;
border-left: 0; border-left: 0;
border-top: 0; border-top: 0;
margin-top: -13.5px; margin-top: -13.5px;
margin-left: -27px; margin-left: -27px;
} }
} }
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IntervistePage } from './interviste.page'; import { IntervistePage } from './interviste.page';
describe('IntervistePage', () => { describe('IntervistePage', () => {
let component: IntervistePage; let component: IntervistePage;
let fixture: ComponentFixture<IntervistePage>; let fixture: ComponentFixture<IntervistePage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ IntervistePage ], declarations: [ IntervistePage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(IntervistePage); fixture = TestBed.createComponent(IntervistePage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { ParerePage } from './parere.page'; import { ParerePage } from './parere.page';
import {ParereModalComponent} from '../../components/parere-modal/parere-modal.component'; import {ParereModalComponent} from '../../components/parere-modal/parere-modal.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: ParerePage component: ParerePage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [ParerePage, ParereModalComponent], declarations: [ParerePage, ParereModalComponent],
entryComponents: [ParereModalComponent] entryComponents: [ParereModalComponent]
}) })
export class ParerePageModule {} export class ParerePageModule {}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ParerePage } from './parere.page'; import { ParerePage } from './parere.page';
describe('ParerePage', () => { describe('ParerePage', () => {
let component: ParerePage; let component: ParerePage;
let fixture: ComponentFixture<ParerePage>; let fixture: ComponentFixture<ParerePage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ ParerePage ], declarations: [ ParerePage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ParerePage); fixture = TestBed.createComponent(ParerePage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { PrivacyPage } from './privacy.page'; import { PrivacyPage } from './privacy.page';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: PrivacyPage component: PrivacyPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes) RouterModule.forChild(routes)
], ],
declarations: [PrivacyPage] declarations: [PrivacyPage]
}) })
export class PrivacyPageModule {} export class PrivacyPageModule {}
a{ a{
color: #3697d1; color: #3697d1;
} }
ion-content{ ion-content{
height: 100%; height: 100%;
font-family: "futura-pt",sans-serif; font-family: "futura-pt",sans-serif;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
color: #515151; color: #515151;
font-size: 17px; font-size: 17px;
} }
h1, h2, h3, h4, h5, strong, b{ h1, h2, h3, h4, h5, strong, b{
font-family: "futura-pt-bold",sans-serif; font-family: "futura-pt-bold",sans-serif;
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
color: rgb(81, 81, 81); color: rgb(81, 81, 81);
} }
.titleh2{ .titleh2{
font-size: 30px; font-size: 30px;
margin-top: 20px; margin-top: 20px;
} }
section{ section{
width: 100%; width: 100%;
float: left; float: left;
padding: 30px 0; padding: 30px 0;
/* padding-bottom:0px; */ /* padding-bottom:0px; */
} }
section h1{ section h1{
margin-top: 0; margin-top: 0;
} }
section h2{ section h2{
margin-top: 0; margin-top: 0;
font-size: 28px; font-size: 28px;
} }
section.gray{ section.gray{
background: #eee; background: #eee;
} }
section h2 img{ section h2 img{
height: 47px; height: 47px;
width: auto; width: auto;
position: relative; position: relative;
top: -3px; top: -3px;
} }
hr.hr{ hr.hr{
border: 0; border: 0;
height: 4px; height: 4px;
background: #f8c24f; background: #f8c24f;
margin: 30px 0; margin: 30px 0;
} }
html{ html{
background: #fff !important; background: #fff !important;
} }
hr{ hr{
clear: both; clear: both;
width: 100%; width: 100%;
display: block; display: block;
} }
.single-product .tab-content .tab-pane .row:last-child .wrapponj .wrappino, .single-product .spessoinsieme .row:last-child .wrapponj .wrappino { .single-product .tab-content .tab-pane .row:last-child .wrapponj .wrappino, .single-product .spessoinsieme .row:last-child .wrapponj .wrappino {
border-bottom: 0px !important; border-bottom: 0px !important;
} }
.row.ruote { .row.ruote {
margin-top: 20px; margin-top: 20px;
} }
.row.is-flex { .row.is-flex {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.row.is-flex > [class*='col-'] { .row.is-flex > [class*='col-'] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
/* /*
* And with max cross-browser enabled. * And with max cross-browser enabled.
* Nobody should ever write this by hand. * Nobody should ever write this by hand.
* Use a preprocesser with autoprefixing. * Use a preprocesser with autoprefixing.
*/ */
.row.is-flex { .row.is-flex {
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
display: -ms-flexbox; display: -ms-flexbox;
display: flex; display: flex;
-webkit-flex-wrap: wrap; -webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap; -ms-flex-wrap: wrap;
flex-wrap: wrap; flex-wrap: wrap;
} }
.row.is-flex > [class*='col-'] { .row.is-flex > [class*='col-'] {
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
display: -ms-flexbox; display: -ms-flexbox;
display: flex; display: flex;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-direction: normal; -webkit-box-direction: normal;
-webkit-flex-direction: column; -webkit-flex-direction: column;
-ms-flex-direction: column; -ms-flex-direction: column;
flex-direction: column; flex-direction: column;
} }
.row.spaz-tr { .row.spaz-tr {
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
display: -ms-flexbox; display: -ms-flexbox;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.row.spaz-tr > [class*='col-'] { .row.spaz-tr > [class*='col-'] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.centralzone li, .contentpost li { .centralzone li, .contentpost li {
padding-left: 24px; padding-left: 24px;
position: relative; position: relative;
margin-bottom: 8px; margin-bottom: 8px;
} }
.centralzone ul, .contentpost ul { .centralzone ul, .contentpost ul {
list-style: none; list-style: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
margin-top:10px; margin-top:10px;
} }
.centralzone li:before, .contentpost li:before { .centralzone li:before, .contentpost li:before {
content: ""; content: "";
background-color: #3697D2; background-color: #3697D2;
width: 8px; width: 8px;
height: 8px; height: 8px;
position: absolute; position: absolute;
top: 9px; top: 9px;
left: 8px; left: 8px;
} }
.centralzone h2 { .centralzone h2 {
text-transform: uppercase; text-transform: uppercase;
border-bottom:1px solid #ddd; border-bottom:1px solid #ddd;
} }
.page .proposte { .page .proposte {
width: 150px; width: 150px;
display: block; display: block;
margin:auto; margin:auto;
} }
.page .spaceagg { .page .spaceagg {
margin-top:40px; margin-top:40px;
} }
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PrivacyPage } from './privacy.page'; import { PrivacyPage } from './privacy.page';
describe('PrivacyPage', () => { describe('PrivacyPage', () => {
let component: PrivacyPage; let component: PrivacyPage;
let fixture: ComponentFixture<PrivacyPage>; let fixture: ComponentFixture<PrivacyPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ PrivacyPage ], declarations: [ PrivacyPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(PrivacyPage); fixture = TestBed.createComponent(PrivacyPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router"; import { Router } from "@angular/router";
@Component({ @Component({
selector: 'app-privacy', selector: 'app-privacy',
templateUrl: './privacy.page.html', templateUrl: './privacy.page.html',
styleUrls: ['./privacy.page.scss'], styleUrls: ['./privacy.page.scss'],
}) })
export class PrivacyPage implements OnInit { export class PrivacyPage implements OnInit {
constructor(private router: Router) { } constructor(private router: Router) { }
back() back()
{ {
this.router.navigateByUrl('/businesscall'); this.router.navigateByUrl('/businesscall');
} }
ngOnInit() { ngOnInit() {
} }
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { SegreteriaPage } from './segreteria.page'; import { SegreteriaPage } from './segreteria.page';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: SegreteriaPage component: SegreteriaPage
} }
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
RouterModule.forChild(routes), RouterModule.forChild(routes),
TranslateModule TranslateModule
], ],
declarations: [SegreteriaPage] declarations: [SegreteriaPage]
}) })
export class SegreteriaPageModule {} export class SegreteriaPageModule {}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SegreteriaPage } from './segreteria.page'; import { SegreteriaPage } from './segreteria.page';
describe('SegreteriaPage', () => { describe('SegreteriaPage', () => {
let component: SegreteriaPage; let component: SegreteriaPage;
let fixture: ComponentFixture<SegreteriaPage>; let fixture: ComponentFixture<SegreteriaPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ SegreteriaPage ], declarations: [ SegreteriaPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(SegreteriaPage); fixture = TestBed.createComponent(SegreteriaPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { DocumentiService } from './documenti.service'; import { DocumentiService } from './documenti.service';
describe('DocumentiService', () => { describe('DocumentiService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: DocumentiService = TestBed.get(DocumentiService); const service: DocumentiService = TestBed.get(DocumentiService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { HttpClientDataService } from './http-client-data.service'; import { HttpClientDataService } from './http-client-data.service';
describe('HttpClientDataService', () => { describe('HttpClientDataService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: HttpClientDataService = TestBed.get(HttpClientDataService); const service: HttpClientDataService = TestBed.get(HttpClientDataService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { HttpHeaders} from '@angular/common/http'; import { HttpHeaders} from '@angular/common/http';
import { environment } from '../../environments/environment'; import { environment } from '../../environments/environment';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class HttpClientDataService { export class HttpClientDataService {
constructor() { constructor() {
this.BASE_ADDRESS = environment.BASE_ADDRESS; this.BASE_ADDRESS = environment.BASE_ADDRESS;
this.P2PSingleSignOnUrl = environment.P2PSingleSignOnUrl; this.P2PSingleSignOnUrl = environment.P2PSingleSignOnUrl;
this.P2PTokenUrl = environment.P2PTokenUrl; this.P2PTokenUrl = environment.P2PTokenUrl;
} }
BASE_ADDRESS: string = ''; BASE_ADDRESS: string = '';
P2PTokenUrl: string = ""; P2PTokenUrl: string = "";
P2PSingleSignOnUrl: string = ""; P2PSingleSignOnUrl: string = "";
httpFormData = { httpFormData = {
headers: new HttpHeaders({ headers: new HttpHeaders({
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data'
}) })
}; };
httpOptions = { httpOptions = {
headers: new HttpHeaders({ headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded' 'Content-Type': 'application/x-www-form-urlencoded'
}) })
}; };
httpOptionsJson = { httpOptionsJson = {
headers: new HttpHeaders({ headers: new HttpHeaders({
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}) })
}; };
} }
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { IntervisteService } from './interviste.service'; import { IntervisteService } from './interviste.service';
describe('IntervisteService', () => { describe('IntervisteService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: IntervisteService = TestBed.get(IntervisteService); const service: IntervisteService = TestBed.get(IntervisteService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { ParereService } from './parere.service'; import { ParereService } from './parere.service';
describe('ParereService', () => { describe('ParereService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: ParereService = TestBed.get(ParereService); const service: ParereService = TestBed.get(ParereService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { SegreteriaService } from './segreteria.service'; import { SegreteriaService } from './segreteria.service';
describe('SegreteriaService', () => { describe('SegreteriaService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: SegreteriaService = TestBed.get(SegreteriaService); const service: SegreteriaService = TestBed.get(SegreteriaService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { UtilService } from './util.service'; import { UtilService } from './util.service';
describe('UtilService', () => { describe('UtilService', () => {
beforeEach(() => TestBed.configureTestingModule({})); beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => { it('should be created', () => {
const service: UtilService = TestBed.get(UtilService); const service: UtilService = TestBed.get(UtilService);
expect(service).toBeTruthy(); expect(service).toBeTruthy();
}); });
}); });
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve"> viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.6.0"> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.6.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""/> <rdf:Description rdf:about=""/>
</rdf:RDF> </rdf:RDF>
</x:xmpmeta> </x:xmpmeta>
<?xpacket end="w"?></metadata> <?xpacket end="w"?></metadata>
<style type="text/css"> <style type="text/css">
.st0{fill:#242D4B;} .st0{fill:#242D4B;}
</style> </style>
<path class="st0" d="M165.58,136.77V13.71c0-3.36-2.72-6.08-6.08-6.08H45.18c-3.36,0-6.08,2.72-6.08,6.08v10.93 <path class="st0" d="M165.58,136.77V13.71c0-3.36-2.72-6.08-6.08-6.08H45.18c-3.36,0-6.08,2.72-6.08,6.08v10.93
c-1.23-0.07-2.46-0.11-3.71-0.11c-3.36,0-6.08,2.72-6.08,6.08v155.68c0,3.36,2.72,6.08,6.08,6.08h129.22c3.36,0,6.08-2.72,6.08-6.08 c-1.23-0.07-2.46-0.11-3.71-0.11c-3.36,0-6.08,2.72-6.08,6.08v155.68c0,3.36,2.72,6.08,6.08,6.08h129.22c3.36,0,6.08-2.72,6.08-6.08
v-43.52C170.69,139.74,168.48,137.24,165.58,136.77z M51.25,19.79h102.18v116.9h-5.88c-9.38,0-18.17-2.6-25.68-7.11h17.75 v-43.52C170.69,139.74,168.48,137.24,165.58,136.77z M51.25,19.79h102.18v116.9h-5.88c-9.38,0-18.17-2.6-25.68-7.11h17.75
c2.24,0,4.05-1.81,4.05-4.05c0-2.24-1.81-4.05-4.05-4.05h-27.95c-3.15-3.25-5.87-6.93-8.06-10.94h36.01c2.24,0,4.05-1.81,4.05-4.05 c2.24,0,4.05-1.81,4.05-4.05c0-2.24-1.81-4.05-4.05-4.05h-27.95c-3.15-3.25-5.87-6.93-8.06-10.94h36.01c2.24,0,4.05-1.81,4.05-4.05
c0-2.24-1.81-4.05-4.05-4.05h-39.53c-1.16-3.49-1.95-7.15-2.31-10.94h41.84c2.24,0,4.05-1.81,4.05-4.05s-1.81-4.05-4.05-4.05H97.46 c0-2.24-1.81-4.05-4.05-4.05h-39.53c-1.16-3.49-1.95-7.15-2.31-10.94h41.84c2.24,0,4.05-1.81,4.05-4.05s-1.81-4.05-4.05-4.05H97.46
c-0.2-3.74-0.73-7.4-1.56-10.94h43.71c2.24,0,4.05-1.81,4.05-4.05s-1.81-4.05-4.05-4.05H93.39c-1.49-3.84-3.34-7.5-5.52-10.94h51.74 c-0.2-3.74-0.73-7.4-1.56-10.94h43.71c2.24,0,4.05-1.81,4.05-4.05s-1.81-4.05-4.05-4.05H93.39c-1.49-3.84-3.34-7.5-5.52-10.94h51.74
c2.24,0,4.05-1.81,4.05-4.05c0-2.24-1.81-4.05-4.05-4.05H81.73c-8-8.95-18.54-15.57-30.48-18.73V19.79z M158.54,180.21H41.46V37.05 c2.24,0,4.05-1.81,4.05-4.05c0-2.24-1.81-4.05-4.05-4.05H81.73c-8-8.95-18.54-15.57-30.48-18.73V19.79z M158.54,180.21H41.46V37.05
c24.72,3.01,43.93,24.12,43.93,49.64c0,34.27,27.88,62.16,62.16,62.16h10.99L158.54,180.21L158.54,180.21z"/> c24.72,3.01,43.93,24.12,43.93,49.64c0,34.27,27.88,62.16,62.16,62.16h10.99L158.54,180.21L158.54,180.21z"/>
</svg> </svg>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 97.6 117.5" style="enable-background:new 0 0 97.6 117.5;" xml:space="preserve"> viewBox="0 0 97.6 117.5" style="enable-background:new 0 0 97.6 117.5;" xml:space="preserve">
<style type="text/css"> <style type="text/css">
.st0{fill:#FFFFFF;} .st0{fill:#FFFFFF;}
</style> </style>
<g> <g>
<g> <g>
<path class="st0" d="M63.7,8.6H9.5v100.2H88V33L63.7,8.6z M64.6,14.3L82.3,32H64.6V14.3z M12.9,105.5V12h48.4v23.4h23.4v70.2H12.9 <path class="st0" d="M63.7,8.6H9.5v100.2H88V33L63.7,8.6z M64.6,14.3L82.3,32H64.6V14.3z M12.9,105.5V12h48.4v23.4h23.4v70.2H12.9
z"/> z"/>
<path class="st0" d="M26.2,37h15c0.9,0,1.7-0.7,1.7-1.7s-0.7-1.7-1.7-1.7h-15c-0.9,0-1.7,0.7-1.7,1.7S25.3,37,26.2,37z"/> <path class="st0" d="M26.2,37h15c0.9,0,1.7-0.7,1.7-1.7s-0.7-1.7-1.7-1.7h-15c-0.9,0-1.7,0.7-1.7,1.7S25.3,37,26.2,37z"/>
<path class="st0" d="M26.2,50.4h8.4c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7h-8.4c-0.9,0-1.7,0.7-1.7,1.7 <path class="st0" d="M26.2,50.4h8.4c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7h-8.4c-0.9,0-1.7,0.7-1.7,1.7
C24.6,49.6,25.3,50.4,26.2,50.4z"/> C24.6,49.6,25.3,50.4,26.2,50.4z"/>
<path class="st0" d="M51.3,50.4H63c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7H51.3c-0.9,0-1.7,0.7-1.7,1.7 <path class="st0" d="M51.3,50.4H63c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7H51.3c-0.9,0-1.7,0.7-1.7,1.7
C49.6,49.6,50.4,50.4,51.3,50.4z"/> C49.6,49.6,50.4,50.4,51.3,50.4z"/>
<path class="st0" d="M41.7,47.5c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2c0.3,0.3,0.8,0.5,1.2,0.5s0.9-0.2,1.2-0.5 <path class="st0" d="M41.7,47.5c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2c0.3,0.3,0.8,0.5,1.2,0.5s0.9-0.2,1.2-0.5
c0.3-0.3,0.5-0.7,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2C43.5,46.9,42.4,46.9,41.7,47.5z"/> c0.3-0.3,0.5-0.7,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2C43.5,46.9,42.4,46.9,41.7,47.5z"/>
<path class="st0" d="M71.3,50.4c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0 <path class="st0" d="M71.3,50.4c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0
c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C70.5,50.2,70.9,50.4,71.3,50.4z"/> c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C70.5,50.2,70.9,50.4,71.3,50.4z"/>
<path class="st0" d="M46.3,60.4H34.6c-0.9,0-1.7,0.7-1.7,1.7s0.7,1.7,1.7,1.7h11.7c0.9,0,1.7-0.7,1.7-1.7 <path class="st0" d="M46.3,60.4H34.6c-0.9,0-1.7,0.7-1.7,1.7s0.7,1.7,1.7,1.7h11.7c0.9,0,1.7-0.7,1.7-1.7
C47.9,61.1,47.2,60.4,46.3,60.4z"/> C47.9,61.1,47.2,60.4,46.3,60.4z"/>
<path class="st0" d="M26.2,63.7c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0 <path class="st0" d="M26.2,63.7c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0
c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C25.4,63.6,25.8,63.7,26.2,63.7z"/> c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C25.4,63.6,25.8,63.7,26.2,63.7z"/>
<path class="st0" d="M31.5,75.7c-3.7,1.9-4.9,5.5-5.3,9.3c-0.7-0.6-1.4-1.2-2.1-1.7c-1.6-1.4-4,1-2.4,2.4c1.6,1.3,3.1,2.6,4.7,3.9 <path class="st0" d="M31.5,75.7c-3.7,1.9-4.9,5.5-5.3,9.3c-0.7-0.6-1.4-1.2-2.1-1.7c-1.6-1.4-4,1-2.4,2.4c1.6,1.3,3.1,2.6,4.7,3.9
c1.1,0.9,2.8,0.3,2.9-1.2c0.1-3.6,0.3-7.9,3.9-9.8C35.1,77.6,33.4,74.7,31.5,75.7z"/> c1.1,0.9,2.8,0.3,2.9-1.2c0.1-3.6,0.3-7.9,3.9-9.8C35.1,77.6,33.4,74.7,31.5,75.7z"/>
<path class="st0" d="M42.6,82.4c-2.3,0.5-4.9,3.5-6.6,0.2c-1-1.9-3.8-0.2-2.9,1.7c0.9,1.8,2.5,3,4.5,3.2c1,0.1,1.9,0,2.8-0.4 <path class="st0" d="M42.6,82.4c-2.3,0.5-4.9,3.5-6.6,0.2c-1-1.9-3.8-0.2-2.9,1.7c0.9,1.8,2.5,3,4.5,3.2c1,0.1,1.9,0,2.8-0.4
c0.7-0.3,3.2-2.2,3.8-1.2c1,1.9,3.9,0.2,2.9-1.7C46.2,82.6,44.4,82,42.6,82.4z"/> c0.7-0.3,3.2-2.2,3.8-1.2c1,1.9,3.9,0.2,2.9-1.7C46.2,82.6,44.4,82,42.6,82.4z"/>
<path class="st0" d="M76.8,66.3c-0.4-0.1-0.6-0.4-0.6-0.6c-0.1-0.2-0.2-0.5,0-0.9c0.8-1.7,0.5-3.7-0.9-5c-1.3-1.3-3.3-1.7-5-0.9 <path class="st0" d="M76.8,66.3c-0.4-0.1-0.6-0.4-0.6-0.6c-0.1-0.2-0.2-0.5,0-0.9c0.8-1.7,0.5-3.7-0.9-5c-1.3-1.3-3.3-1.7-5-0.9
c-0.4,0.2-0.7,0.1-0.9,0c-0.2-0.1-0.5-0.2-0.6-0.6c-0.6-1.8-2.3-2.9-4.2-2.9c-1.9,0-3.5,1.1-4.2,2.9c-0.1,0.4-0.4,0.6-0.6,0.6 c-0.4,0.2-0.7,0.1-0.9,0c-0.2-0.1-0.5-0.2-0.6-0.6c-0.6-1.8-2.3-2.9-4.2-2.9c-1.9,0-3.5,1.1-4.2,2.9c-0.1,0.4-0.4,0.6-0.6,0.6
c-0.2,0.1-0.5,0.2-0.9,0c-1.7-0.8-3.7-0.5-5,0.9c-1.3,1.3-1.7,3.3-0.9,5c0.2,0.4,0.1,0.7,0,0.9c-0.1,0.2-0.2,0.5-0.6,0.6 c-0.2,0.1-0.5,0.2-0.9,0c-1.7-0.8-3.7-0.5-5,0.9c-1.3,1.3-1.7,3.3-0.9,5c0.2,0.4,0.1,0.7,0,0.9c-0.1,0.2-0.2,0.5-0.6,0.6
c-1.8,0.6-2.9,2.3-2.9,4.2s1.1,3.5,2.9,4.2c0.4,0.1,0.6,0.4,0.6,0.6c0.1,0.2,0.2,0.5,0,0.9c-0.8,1.7-0.5,3.7,0.9,5 c-1.8,0.6-2.9,2.3-2.9,4.2s1.1,3.5,2.9,4.2c0.4,0.1,0.6,0.4,0.6,0.6c0.1,0.2,0.2,0.5,0,0.9c-0.8,1.7-0.5,3.7,0.9,5
c0.6,0.6,1.4,1.1,2.3,1.2v20.6l8.4-8.4l8.4,8.4V82.3c0.8-0.2,1.6-0.6,2.3-1.2c1.3-1.3,1.7-3.3,0.9-5c-0.2-0.4-0.1-0.7,0-0.9 c0.6,0.6,1.4,1.1,2.3,1.2v20.6l8.4-8.4l8.4,8.4V82.3c0.8-0.2,1.6-0.6,2.3-1.2c1.3-1.3,1.7-3.3,0.9-5c-0.2-0.4-0.1-0.7,0-0.9
c0.1-0.2,0.2-0.5,0.6-0.6c1.8-0.6,2.9-2.3,2.9-4.2S78.5,66.9,76.8,66.3z M64.6,89.8l-5,5v-13c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0.1 c0.1-0.2,0.2-0.5,0.6-0.6c1.8-0.6,2.9-2.3,2.9-4.2S78.5,66.9,76.8,66.3z M64.6,89.8l-5,5v-13c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0.1
c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.6,1.8,2.3,2.9,4.2,2.9c1.9,0,3.5-1.1,4.2-2.9c0.1-0.2,0.2-0.3,0.3-0.4 c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.6,1.8,2.3,2.9,4.2,2.9c1.9,0,3.5-1.1,4.2-2.9c0.1-0.2,0.2-0.3,0.3-0.4
c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.1,0,0.2-0.1c0,0,0,0,0,0v13L64.6,89.8z M75.6,71.4c-1.2,0.4-2.1,1.3-2.6,2.5 c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.1,0,0.2-0.1c0,0,0,0,0,0v13L64.6,89.8z M75.6,71.4c-1.2,0.4-2.1,1.3-2.6,2.5
c-0.5,1.2-0.4,2.5,0.1,3.6c0.3,0.6,0,1.1-0.2,1.2c-0.1,0.1-0.5,0.4-0.9,0.3l-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2 c-0.5,1.2-0.4,2.5,0.1,3.6c0.3,0.6,0,1.1-0.2,1.2c-0.1,0.1-0.5,0.4-0.9,0.3l-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.5-0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.3,0-0.5,0c-0.1,0-0.3,0-0.4,0 c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.5-0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.3,0-0.5,0c-0.1,0-0.3,0-0.4,0
c-0.3,0.1-0.6,0.1-0.9,0.3c0,0,0,0,0,0l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0.1-0.4,0.2-0.6,0.3c-0.2,0.2-0.4,0.3-0.6,0.5 c-0.3,0.1-0.6,0.1-0.9,0.3c0,0,0,0,0,0l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0.1-0.4,0.2-0.6,0.3c-0.2,0.2-0.4,0.3-0.6,0.5
c0,0-0.1,0-0.1,0.1c-0.4,0.4-0.8,1-1,1.6c-0.2,0.6-0.8,0.7-1,0.7s-0.8-0.1-1-0.7c-0.2-0.6-0.5-1.1-1-1.6c0,0,0,0-0.1,0 c0,0-0.1,0-0.1,0.1c-0.4,0.4-0.8,1-1,1.6c-0.2,0.6-0.8,0.7-1,0.7s-0.8-0.1-1-0.7c-0.2-0.6-0.5-1.1-1-1.6c0,0,0,0-0.1,0
c-0.2-0.2-0.4-0.4-0.6-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.1,0-0.1-0.1-0.2-0.1l0,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0 c-0.2-0.2-0.4-0.4-0.6-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.1,0-0.1-0.1-0.2-0.1l0,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.2,0-0.4,0-0.6-0.1c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0c-0.6,0-1.2,0.1-1.7,0.4L57.3,79 c-0.2-0.1-0.5-0.2-0.7-0.2c-0.2,0-0.4,0-0.6-0.1c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0c-0.6,0-1.2,0.1-1.7,0.4L57.3,79
c-0.5,0.1-0.8-0.1-1-0.3c-0.2-0.2-0.5-0.6-0.2-1.2c0.5-1.1,0.6-2.4,0.1-3.6c-0.5-1.1-1.4-2-2.6-2.5c-0.6-0.2-0.7-0.8-0.7-1 c-0.5,0.1-0.8-0.1-1-0.3c-0.2-0.2-0.5-0.6-0.2-1.2c0.5-1.1,0.6-2.4,0.1-3.6c-0.5-1.1-1.4-2-2.6-2.5c-0.6-0.2-0.7-0.8-0.7-1
s0.1-0.8,0.7-1c1.2-0.4,2.1-1.3,2.6-2.5c0.5-1.2,0.4-2.5-0.1-3.6c-0.3-0.6,0-1.1,0.2-1.2c0.2-0.2,0.6-0.5,1.2-0.2 s0.1-0.8,0.7-1c1.2-0.4,2.1-1.3,2.6-2.5c0.5-1.2,0.4-2.5-0.1-3.6c-0.3-0.6,0-1.1,0.2-1.2c0.2-0.2,0.6-0.5,1.2-0.2
c1.1,0.5,2.4,0.6,3.6,0.1c1.1-0.5,2-1.4,2.5-2.6c0.2-0.6,0.8-0.7,1-0.7s0.8,0.1,1,0.7c0.4,1.2,1.3,2.1,2.5,2.6 c1.1,0.5,2.4,0.6,3.6,0.1c1.1-0.5,2-1.4,2.5-2.6c0.2-0.6,0.8-0.7,1-0.7s0.8,0.1,1,0.7c0.4,1.2,1.3,2.1,2.5,2.6
c1.1,0.5,2.5,0.4,3.6-0.1c0.6-0.3,1.1,0,1.2,0.2c0.2,0.2,0.5,0.6,0.2,1.2c-0.5,1.1-0.6,2.4-0.1,3.6c0.5,1.1,1.4,2,2.6,2.5 c1.1,0.5,2.5,0.4,3.6-0.1c0.6-0.3,1.1,0,1.2,0.2c0.2,0.2,0.5,0.6,0.2,1.2c-0.5,1.1-0.6,2.4-0.1,3.6c0.5,1.1,1.4,2,2.6,2.5
c0.6,0.2,0.7,0.8,0.7,1S76.3,71.2,75.6,71.4z"/> c0.6,0.2,0.7,0.8,0.7,1S76.3,71.2,75.6,71.4z"/>
</g> </g>
</g> </g>
</svg> </svg>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 97.6 117.5" style="enable-background:new 0 0 97.6 117.5;" xml:space="preserve"> viewBox="0 0 97.6 117.5" style="enable-background:new 0 0 97.6 117.5;" xml:space="preserve">
<style type="text/css"> <style type="text/css">
.st0{fill:#525252;} .st0{fill:#525252;}
</style> </style>
<g> <g>
<g> <g>
<path class="st0" d="M63.7,8.6H9.5v100.2H88V33L63.7,8.6z M64.6,14.3L82.3,32H64.6V14.3z M12.9,105.5V12h48.4v23.4h23.4v70.2H12.9 <path class="st0" d="M63.7,8.6H9.5v100.2H88V33L63.7,8.6z M64.6,14.3L82.3,32H64.6V14.3z M12.9,105.5V12h48.4v23.4h23.4v70.2H12.9
z"/> z"/>
<path class="st0" d="M26.2,37h15c0.9,0,1.7-0.7,1.7-1.7s-0.7-1.7-1.7-1.7h-15c-0.9,0-1.7,0.7-1.7,1.7S25.3,37,26.2,37z"/> <path class="st0" d="M26.2,37h15c0.9,0,1.7-0.7,1.7-1.7s-0.7-1.7-1.7-1.7h-15c-0.9,0-1.7,0.7-1.7,1.7S25.3,37,26.2,37z"/>
<path class="st0" d="M26.2,50.4h8.4c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7h-8.4c-0.9,0-1.7,0.7-1.7,1.7 <path class="st0" d="M26.2,50.4h8.4c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7h-8.4c-0.9,0-1.7,0.7-1.7,1.7
C24.6,49.6,25.3,50.4,26.2,50.4z"/> C24.6,49.6,25.3,50.4,26.2,50.4z"/>
<path class="st0" d="M51.3,50.4H63c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7H51.3c-0.9,0-1.7,0.7-1.7,1.7 <path class="st0" d="M51.3,50.4H63c0.9,0,1.7-0.7,1.7-1.7c0-0.9-0.7-1.7-1.7-1.7H51.3c-0.9,0-1.7,0.7-1.7,1.7
C49.6,49.6,50.4,50.4,51.3,50.4z"/> C49.6,49.6,50.4,50.4,51.3,50.4z"/>
<path class="st0" d="M41.7,47.5c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2c0.3,0.3,0.8,0.5,1.2,0.5s0.9-0.2,1.2-0.5 <path class="st0" d="M41.7,47.5c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2c0.3,0.3,0.8,0.5,1.2,0.5s0.9-0.2,1.2-0.5
c0.3-0.3,0.5-0.7,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2C43.5,46.9,42.4,46.9,41.7,47.5z"/> c0.3-0.3,0.5-0.7,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2C43.5,46.9,42.4,46.9,41.7,47.5z"/>
<path class="st0" d="M71.3,50.4c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0 <path class="st0" d="M71.3,50.4c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0
c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C70.5,50.2,70.9,50.4,71.3,50.4z"/> c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C70.5,50.2,70.9,50.4,71.3,50.4z"/>
<path class="st0" d="M46.3,60.4H34.6c-0.9,0-1.7,0.7-1.7,1.7s0.7,1.7,1.7,1.7h11.7c0.9,0,1.7-0.7,1.7-1.7 <path class="st0" d="M46.3,60.4H34.6c-0.9,0-1.7,0.7-1.7,1.7s0.7,1.7,1.7,1.7h11.7c0.9,0,1.7-0.7,1.7-1.7
C47.9,61.1,47.2,60.4,46.3,60.4z"/> C47.9,61.1,47.2,60.4,46.3,60.4z"/>
<path class="st0" d="M26.2,63.7c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0 <path class="st0" d="M26.2,63.7c0.4,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.8,0.5-1.2c0-0.4-0.2-0.9-0.5-1.2c-0.6-0.6-1.7-0.6-2.4,0
c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C25.4,63.6,25.8,63.7,26.2,63.7z"/> c-0.3,0.3-0.5,0.7-0.5,1.2c0,0.4,0.2,0.9,0.5,1.2C25.4,63.6,25.8,63.7,26.2,63.7z"/>
<path class="st0" d="M31.5,75.7c-3.7,1.9-4.9,5.5-5.3,9.3c-0.7-0.6-1.4-1.2-2.1-1.7c-1.6-1.4-4,1-2.4,2.4c1.6,1.3,3.1,2.6,4.7,3.9 <path class="st0" d="M31.5,75.7c-3.7,1.9-4.9,5.5-5.3,9.3c-0.7-0.6-1.4-1.2-2.1-1.7c-1.6-1.4-4,1-2.4,2.4c1.6,1.3,3.1,2.6,4.7,3.9
c1.1,0.9,2.8,0.3,2.9-1.2c0.1-3.6,0.3-7.9,3.9-9.8C35.1,77.6,33.4,74.7,31.5,75.7z"/> c1.1,0.9,2.8,0.3,2.9-1.2c0.1-3.6,0.3-7.9,3.9-9.8C35.1,77.6,33.4,74.7,31.5,75.7z"/>
<path class="st0" d="M42.6,82.4c-2.3,0.5-4.9,3.5-6.6,0.2c-1-1.9-3.8-0.2-2.9,1.7c0.9,1.8,2.5,3,4.5,3.2c1,0.1,1.9,0,2.8-0.4 <path class="st0" d="M42.6,82.4c-2.3,0.5-4.9,3.5-6.6,0.2c-1-1.9-3.8-0.2-2.9,1.7c0.9,1.8,2.5,3,4.5,3.2c1,0.1,1.9,0,2.8-0.4
c0.7-0.3,3.2-2.2,3.8-1.2c1,1.9,3.9,0.2,2.9-1.7C46.2,82.6,44.4,82,42.6,82.4z"/> c0.7-0.3,3.2-2.2,3.8-1.2c1,1.9,3.9,0.2,2.9-1.7C46.2,82.6,44.4,82,42.6,82.4z"/>
<path class="st0" d="M76.8,66.3c-0.4-0.1-0.6-0.4-0.6-0.6c-0.1-0.2-0.2-0.5,0-0.9c0.8-1.7,0.5-3.7-0.9-5c-1.3-1.3-3.3-1.7-5-0.9 <path class="st0" d="M76.8,66.3c-0.4-0.1-0.6-0.4-0.6-0.6c-0.1-0.2-0.2-0.5,0-0.9c0.8-1.7,0.5-3.7-0.9-5c-1.3-1.3-3.3-1.7-5-0.9
c-0.4,0.2-0.7,0.1-0.9,0c-0.2-0.1-0.5-0.2-0.6-0.6c-0.6-1.8-2.3-2.9-4.2-2.9c-1.9,0-3.5,1.1-4.2,2.9c-0.1,0.4-0.4,0.6-0.6,0.6 c-0.4,0.2-0.7,0.1-0.9,0c-0.2-0.1-0.5-0.2-0.6-0.6c-0.6-1.8-2.3-2.9-4.2-2.9c-1.9,0-3.5,1.1-4.2,2.9c-0.1,0.4-0.4,0.6-0.6,0.6
c-0.2,0.1-0.5,0.2-0.9,0c-1.7-0.8-3.7-0.5-5,0.9c-1.3,1.3-1.7,3.3-0.9,5c0.2,0.4,0.1,0.7,0,0.9c-0.1,0.2-0.2,0.5-0.6,0.6 c-0.2,0.1-0.5,0.2-0.9,0c-1.7-0.8-3.7-0.5-5,0.9c-1.3,1.3-1.7,3.3-0.9,5c0.2,0.4,0.1,0.7,0,0.9c-0.1,0.2-0.2,0.5-0.6,0.6
c-1.8,0.6-2.9,2.3-2.9,4.2s1.1,3.5,2.9,4.2c0.4,0.1,0.6,0.4,0.6,0.6c0.1,0.2,0.2,0.5,0,0.9c-0.8,1.7-0.5,3.7,0.9,5 c-1.8,0.6-2.9,2.3-2.9,4.2s1.1,3.5,2.9,4.2c0.4,0.1,0.6,0.4,0.6,0.6c0.1,0.2,0.2,0.5,0,0.9c-0.8,1.7-0.5,3.7,0.9,5
c0.6,0.6,1.4,1.1,2.3,1.2v20.6l8.4-8.4l8.4,8.4V82.3c0.8-0.2,1.6-0.6,2.3-1.2c1.3-1.3,1.7-3.3,0.9-5c-0.2-0.4-0.1-0.7,0-0.9 c0.6,0.6,1.4,1.1,2.3,1.2v20.6l8.4-8.4l8.4,8.4V82.3c0.8-0.2,1.6-0.6,2.3-1.2c1.3-1.3,1.7-3.3,0.9-5c-0.2-0.4-0.1-0.7,0-0.9
c0.1-0.2,0.2-0.5,0.6-0.6c1.8-0.6,2.9-2.3,2.9-4.2S78.5,66.9,76.8,66.3z M64.6,89.8l-5,5v-13c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0.1 c0.1-0.2,0.2-0.5,0.6-0.6c1.8-0.6,2.9-2.3,2.9-4.2S78.5,66.9,76.8,66.3z M64.6,89.8l-5,5v-13c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0.1
c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.6,1.8,2.3,2.9,4.2,2.9c1.9,0,3.5-1.1,4.2-2.9c0.1-0.2,0.2-0.3,0.3-0.4 c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.6,1.8,2.3,2.9,4.2,2.9c1.9,0,3.5-1.1,4.2-2.9c0.1-0.2,0.2-0.3,0.3-0.4
c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.1,0,0.2-0.1c0,0,0,0,0,0v13L64.6,89.8z M75.6,71.4c-1.2,0.4-2.1,1.3-2.6,2.5 c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.1,0,0.2-0.1c0,0,0,0,0,0v13L64.6,89.8z M75.6,71.4c-1.2,0.4-2.1,1.3-2.6,2.5
c-0.5,1.2-0.4,2.5,0.1,3.6c0.3,0.6,0,1.1-0.2,1.2c-0.1,0.1-0.5,0.4-0.9,0.3l-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2 c-0.5,1.2-0.4,2.5,0.1,3.6c0.3,0.6,0,1.1-0.2,1.2c-0.1,0.1-0.5,0.4-0.9,0.3l-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.5-0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.3,0-0.5,0c-0.1,0-0.3,0-0.4,0 c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.5-0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.3,0-0.5,0c-0.1,0-0.3,0-0.4,0
c-0.3,0.1-0.6,0.1-0.9,0.3c0,0,0,0,0,0l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0.1-0.4,0.2-0.6,0.3c-0.2,0.2-0.4,0.3-0.6,0.5 c-0.3,0.1-0.6,0.1-0.9,0.3c0,0,0,0,0,0l0,0c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0.1-0.4,0.2-0.6,0.3c-0.2,0.2-0.4,0.3-0.6,0.5
c0,0-0.1,0-0.1,0.1c-0.4,0.4-0.8,1-1,1.6c-0.2,0.6-0.8,0.7-1,0.7s-0.8-0.1-1-0.7c-0.2-0.6-0.5-1.1-1-1.6c0,0,0,0-0.1,0 c0,0-0.1,0-0.1,0.1c-0.4,0.4-0.8,1-1,1.6c-0.2,0.6-0.8,0.7-1,0.7s-0.8-0.1-1-0.7c-0.2-0.6-0.5-1.1-1-1.6c0,0,0,0-0.1,0
c-0.2-0.2-0.4-0.4-0.6-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.1,0-0.1-0.1-0.2-0.1l0,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0 c-0.2-0.2-0.4-0.4-0.6-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.1,0-0.1-0.1-0.2-0.1l0,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.2,0-0.4,0-0.6-0.1c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0c-0.6,0-1.2,0.1-1.7,0.4L57.3,79 c-0.2-0.1-0.5-0.2-0.7-0.2c-0.2,0-0.4,0-0.6-0.1c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0c-0.6,0-1.2,0.1-1.7,0.4L57.3,79
c-0.5,0.1-0.8-0.1-1-0.3c-0.2-0.2-0.5-0.6-0.2-1.2c0.5-1.1,0.6-2.4,0.1-3.6c-0.5-1.1-1.4-2-2.6-2.5c-0.6-0.2-0.7-0.8-0.7-1 c-0.5,0.1-0.8-0.1-1-0.3c-0.2-0.2-0.5-0.6-0.2-1.2c0.5-1.1,0.6-2.4,0.1-3.6c-0.5-1.1-1.4-2-2.6-2.5c-0.6-0.2-0.7-0.8-0.7-1
s0.1-0.8,0.7-1c1.2-0.4,2.1-1.3,2.6-2.5c0.5-1.2,0.4-2.5-0.1-3.6c-0.3-0.6,0-1.1,0.2-1.2c0.2-0.2,0.6-0.5,1.2-0.2 s0.1-0.8,0.7-1c1.2-0.4,2.1-1.3,2.6-2.5c0.5-1.2,0.4-2.5-0.1-3.6c-0.3-0.6,0-1.1,0.2-1.2c0.2-0.2,0.6-0.5,1.2-0.2
c1.1,0.5,2.4,0.6,3.6,0.1c1.1-0.5,2-1.4,2.5-2.6c0.2-0.6,0.8-0.7,1-0.7s0.8,0.1,1,0.7c0.4,1.2,1.3,2.1,2.5,2.6 c1.1,0.5,2.4,0.6,3.6,0.1c1.1-0.5,2-1.4,2.5-2.6c0.2-0.6,0.8-0.7,1-0.7s0.8,0.1,1,0.7c0.4,1.2,1.3,2.1,2.5,2.6
c1.1,0.5,2.5,0.4,3.6-0.1c0.6-0.3,1.1,0,1.2,0.2c0.2,0.2,0.5,0.6,0.2,1.2c-0.5,1.1-0.6,2.4-0.1,3.6c0.5,1.1,1.4,2,2.6,2.5 c1.1,0.5,2.5,0.4,3.6-0.1c0.6-0.3,1.1,0,1.2,0.2c0.2,0.2,0.5,0.6,0.2,1.2c-0.5,1.1-0.6,2.4-0.1,3.6c0.5,1.1,1.4,2,2.6,2.5
c0.6,0.2,0.7,0.8,0.7,1S76.3,71.2,75.6,71.4z"/> c0.6,0.2,0.7,0.8,0.7,1S76.3,71.2,75.6,71.4z"/>
</g> </g>
</g> </g>
</svg> </svg>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment