diff --git a/package.json b/package.json index 237155a..b71dc89 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "@isp/xdce-arch-core": "1.50.30", "@isp/xdce-arch-core-base": "1.21.8", "@isp/xdce-widget": "1.125.2", + "@ng-bootstrap/ng-bootstrap": "4.0.0", "ag-grid-angular": "22.1.1", "ag-grid-community": "22.1.1", "@ag-grid-community/all-modules": "22.1.1", diff --git a/src/index.ts b/src/index.ts index 1a79e8b..53b518d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,71 +1,71 @@ -import { ModuleWithProviders, NgModule } from "@angular/core"; - -import { NbpBreadCrumbsComponent } from "./widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component"; -export { NbpBreadCrumbsComponent } from "./widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component"; -import { NbpFidBarChartComponent } from "./widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component"; -export { NbpFidBarChartComponent } from "./widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component"; -import { NbpFidButtonBarComponent } from "./widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component"; -export { NbpFidButtonBarComponent } from "./widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component"; -import { NbpFidDonutChartComponent } from "./widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component"; -export { NbpFidDonutChartComponent } from "./widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component"; -import { NbpFidPyramidChartComponent } from "./widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component"; -export { NbpFidPyramidChartComponent } from "./widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component"; -import { NbpFidSidePopupComponent } from "./widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component"; -export { NbpFidSidePopupComponent } from "./widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component"; -import { NbpFidTableComponent } from "./widgetfideuram/components/nbp-fid-table/nbp-fid-table.component"; -export { NbpFidTableComponent } from "./widgetfideuram/components/nbp-fid-table/nbp-fid-table.component"; -import { NbpFidToggleTabComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y"; -export { NbpFidToggleTabComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y"; -import { NbpFidToggleTabComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y"; -export { NbpFidToggleTabComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y"; -import { NbpFidToggleTabComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component"; -export { NbpFidToggleTabComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component"; -import { NbpFidToggleTabsetComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y"; -export { NbpFidToggleTabsetComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y"; -import { NbpFidToggleTabsetComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y"; -export { NbpFidToggleTabsetComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y"; -import { NbpFidToggleTabsetComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component"; -export { NbpFidToggleTabsetComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component"; -import { NbpFidComboComponent } from "./widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component"; -export { NbpFidComboComponent } from "./widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component"; - -import { ShowcaseComponent } from "./widgetfideuram/components/showcase/showcase.component"; -export { ShowcaseComponent } from "./widgetfideuram/components/showcase/showcase.component"; -import { Showcase1Component } from "./widgetfideuram/components/showcase/showcase1.component"; -export { Showcase1Component } from "./widgetfideuram/components/showcase/showcase1.component"; -import { WidgetFideuramShowcaseComponent } from "./widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component"; -export { WidgetFideuramShowcaseComponent } from "./widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component"; - -import { NbpFidCalendarGeneric } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component"; -export { NbpFidCalendarGeneric } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component"; +import { ModuleWithProviders, NgModule, NO_ERRORS_SCHEMA } from "@angular/core"; import { FormsModule } from "@angular/forms"; +import { XdceArchModule } from "@isp/xdce-arch-core"; +import { NbpModule } from "@isp/xdce-widget"; +import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; import { AgGridModule, AngularFrameworkComponentWrapper, AngularFrameworkOverrides, } from "ag-grid-angular"; -import { NbpModule } from "@isp/xdce-widget"; -import { XdceArchModule } from "@isp/xdce-arch-core"; +import { NbpBreadCrumbsComponent } from "./widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component"; +import { NbpFidBarChartComponent } from "./widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component"; +import { NbpFidButtonBarComponent } from "./widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component"; +import { FidRplCalendarNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker"; +import { NgbFidInputDatepickerNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input"; +import { NgbFidDatepickerRoutingViewNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-routing-view"; +import { FidRplCalendar } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker"; +import { NgbFidInputDatepicker } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input"; +import { NgbFidDatepickerRoutingView } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-routing-view"; import { NbpCalendarGenericComponentA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y"; import { NbpCalendarGenericComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y"; -export { NbpCalendarGenericComponentA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y"; -export { NbpCalendarGenericComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y"; -import { NgbInputDatepicker } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input"; -export { NgbInputDatepicker } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input"; -import { RplCalendarNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker"; -export { RplCalendarNOA11Y } from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker"; -export { AgGridModule } from "ag-grid-angular"; +import { NbpFidCalendarGeneric } from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component"; +import { NbpFidComboComponent } from "./widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component"; +import { NbpFidDonutChartComponent } from "./widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component"; +import { NbpFidPyramidChartComponent } from "./widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component"; +import { NbpFidSidePopupComponent } from "./widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component"; +import { NbpFidTableComponent } from "./widgetfideuram/components/nbp-fid-table/nbp-fid-table.component"; +import { NbpFidToggleTabComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component"; +import { NbpFidToggleTabComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y"; +import { NbpFidToggleTabComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y"; +import { NbpFidToggleTabsetComponent } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component"; +import { NbpFidToggleTabsetComponentA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y"; +import { NbpFidToggleTabsetComponentNOA11Y } from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y"; +import { ShowcaseComponent } from "./widgetfideuram/components/showcase/showcase.component"; +import { Showcase1Component } from "./widgetfideuram/components/showcase/showcase1.component"; +import { WidgetFideuramShowcaseComponent } from "./widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component"; +import { NgbDatepickerService, NgbDatepickerServiceNOA11Y } from '@isp/xdce-widget'; -export { - DATE_STRING_FORMAT, - formatDate, - formatNumber, - setSpinnerMessage, - clearSpinnerMessage, -} from "./widgetfideuram/Utils"; +export { AgGridModule } from "ag-grid-angular"; +export * from "./widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component"; +export * from "./widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component"; +export * from "./widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y"; +export * from "./widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component"; +export * from "./widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component"; +export * from "./widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component"; +export * from "./widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component"; +export * from "./widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component"; +export * from "./widgetfideuram/components/nbp-fid-table/nbp-fid-table.component"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y"; +export * from "./widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y"; +export * from "./widgetfideuram/components/showcase/showcase.component"; +export * from "./widgetfideuram/components/showcase/showcase1.component"; +export * from "./widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component"; + +export * from "./widgetfideuram/Utils"; @NgModule({ - imports: [XdceArchModule, NbpModule, AgGridModule, FormsModule], + imports: [XdceArchModule, NbpModule, AgGridModule, FormsModule, NgbModule], declarations: [ NbpBreadCrumbsComponent, NbpFidBarChartComponent, @@ -85,11 +85,14 @@ export { Showcase1Component, WidgetFideuramShowcaseComponent, NbpFidCalendarGeneric, - NgbInputDatepicker, - RplCalendarNOA11Y, + NgbFidInputDatepicker, + FidRplCalendarNOA11Y, NbpCalendarGenericComponentNOA11Y, NbpCalendarGenericComponentA11Y, - + FidRplCalendar, + NgbFidInputDatepickerNOA11Y, + NgbFidDatepickerRoutingView, + NgbFidDatepickerRoutingViewNOA11Y ], exports: [ NbpBreadCrumbsComponent, @@ -111,9 +114,19 @@ export { WidgetFideuramShowcaseComponent, AgGridModule, NbpFidCalendarGeneric, - RplCalendarNOA11Y + FidRplCalendarNOA11Y, + FidRplCalendar, + NgbFidDatepickerRoutingView, + NgbFidDatepickerRoutingViewNOA11Y, + NgbFidInputDatepickerNOA11Y, + NgbFidInputDatepicker + ], + providers: [ + AngularFrameworkOverrides, + AngularFrameworkComponentWrapper, + { provide: 'NgbDatepickerServiceNOA11Y', useClass: NgbDatepickerServiceNOA11Y }, + { provide: 'NgbDatepickerService', useClass: NgbDatepickerService } ], - providers: [AngularFrameworkOverrides, AngularFrameworkComponentWrapper], entryComponents: [ NbpFidToggleTabComponentA11Y, NbpFidToggleTabComponentNOA11Y, @@ -123,7 +136,12 @@ export { NbpFidToggleTabsetComponent, NbpCalendarGenericComponentA11Y, NbpCalendarGenericComponentNOA11Y, + FidRplCalendarNOA11Y, + FidRplCalendar, + NgbFidDatepickerRoutingView, + NgbFidDatepickerRoutingViewNOA11Y ], + schemas: [NO_ERRORS_SCHEMA] }) export class XdceWidgetFideuramModule { static forRoot(): ModuleWithProviders { diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input.ts index 9e9ddcb..c831371 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-input.ts @@ -22,36 +22,33 @@ import { NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; - -import { - NgbDatepickerNavigateEventNOA11Y, - RplCalendarNOA11Y, -} from "./datepicker"; - -import { Positioning } from "@isp/xdce-widget/user-input/isp-typeahead/ng-bootstrap/positioning"; - import { EventManager } from "@isp/xdce-arch-core-base"; import { - NgbDatepickerServiceNOA11Y, - NgbDate, DayTemplateContextNOA11Y, - NgbDateStruct, NbpCalendarPattern, - NbpDateSeparator, NbpCalendarPosition, - NgbDateParserFormatterNOA11Y, + NbpDateSeparator, NgbCalendarNOA11Y, + NgbDate, + NgbDateParserFormatterNOA11Y, + NgbDateStruct, + NgbDatepickerNavigateEventNOA11Y, + NgbDatepickerServiceNOA11Y, } from "@isp/xdce-widget"; +import { Positioning } from "../util/positioning"; +import { + FidRplCalendarNOA11Y, +} from "./datepicker"; const NGB_DATEPICKER_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => NgbInputDatepickerNOA11Y), + useExisting: forwardRef(() => NgbFidInputDatepickerNOA11Y), multi: true, }; const NGB_DATEPICKER_VALIDATOR = { provide: NG_VALIDATORS, - useExisting: forwardRef(() => NgbInputDatepickerNOA11Y), + useExisting: forwardRef(() => NgbFidInputDatepickerNOA11Y), multi: true, }; @@ -60,8 +57,8 @@ const NGB_DATEPICKER_VALIDATOR = { * Manages integration with the input field itself (data entry) and ngModel (validation etc.). */ @Directive({ - selector: "input[rplCalendarNOA11Y]", - exportAs: "rplCalendarNOA11Y", + selector: "input[fidRplCalendarNOA11Y]", + exportAs: "fidRplCalendarNOA11Y", host: { "(input)": "waitForFormat($event.target.value)", "(change)": "manualDateChange($event.target.value, true)", @@ -75,10 +72,10 @@ const NGB_DATEPICKER_VALIDATOR = { NgbDatepickerServiceNOA11Y, ], }) -export class NgbInputDatepickerNOA11Y +export class NgbFidInputDatepickerNOA11Y implements OnChanges, OnDestroy, ControlValueAccessor, Validator { - private _cRef: ComponentRef = null; + private _cRef: ComponentRef = null; private _model: NgbDate; private _zoneSubscription: any; @@ -432,7 +429,7 @@ export class NgbInputDatepickerNOA11Y } } - const cf = this._cfr.resolveComponentFactory(RplCalendarNOA11Y); + const cf = this._cfr.resolveComponentFactory(FidRplCalendarNOA11Y); this._cRef = this._vcRef.createComponent(cf); this._applyPopupStyling(this._cRef.location.nativeElement); @@ -567,7 +564,7 @@ export class NgbInputDatepickerNOA11Y return 0; } - private _applyDatepickerInputs(datepickerInstance: RplCalendarNOA11Y): void { + private _applyDatepickerInputs(datepickerInstance: FidRplCalendarNOA11Y): void { [ "dayTemplate", "displayMonths", @@ -594,7 +591,7 @@ export class NgbInputDatepickerNOA11Y } private _subscribeForDatepickerOutputs( - datepickerInstance: RplCalendarNOA11Y + datepickerInstance: FidRplCalendarNOA11Y ) { datepickerInstance.navigate.subscribe((date: any) => this.navigate.emit(date) diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-routing-view.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-routing-view.ts index 586e866..122e166 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-routing-view.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker-routing-view.ts @@ -1,40 +1,39 @@ import { - Component, - EventEmitter, - Input, - OnInit, - Output, - TemplateRef, ChangeDetectionStrategy, ChangeDetectorRef, - SimpleChanges, + Component, + ElementRef, + EventEmitter, + Input, OnChanges, OnDestroy, + OnInit, + Output, + SimpleChanges, + TemplateRef, ViewChild, - ElementRef, } from "@angular/core"; - -import { CalendarItemNOA11Y } from "./datepicker"; -import { Subscription } from "rxjs"; import { + CalendarItemNOA11Y, DayTemplateContextNOA11Y, - NgbDataTemplateStruct, + DayViewModel, MonthViewModel, + NgbDataTemplateStruct, NgbDate, NgbDatepickerI18nNOA11Y, NgbDatepickerServiceNOA11Y, - DayViewModel, - WeekViewModel, + WeekViewModel } from "@isp/xdce-widget"; +import { Subscription } from "rxjs"; @Component({ selector: "ngb-datepicker-routing-view", host: { class: "d-block" }, - templateUrl: "./datepicker-routing-view.html", + templateUrl: './datepicker-routing-view.html', styleUrls: ["./datepicker-routing-view.scss"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class NgbDatepickerRoutingViewNOA11Y +export class NgbFidDatepickerRoutingViewNOA11Y implements OnInit, OnChanges, OnDestroy { @Input() dayTemplate: TemplateRef; diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker.ts index 57e2234..d3b85b6 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/datepicker/datepicker.ts @@ -1,24 +1,20 @@ -import { Subscription } from "rxjs"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + ElementRef, + EventEmitter, + forwardRef, Input, OnChanges, - TemplateRef, - forwardRef, - OnInit, - SimpleChanges, - EventEmitter, - Output, OnDestroy, - ElementRef, - ViewChild, - ViewChildren, + OnInit, + Output, + SimpleChanges, + TemplateRef, + ViewChild } from "@angular/core"; -import { NG_VALUE_ACCESSOR, ControlValueAccessor } from "@angular/forms"; - -import { NgbDatepickerRoutingViewNOA11Y } from "./datepicker-routing-view"; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { DatepickerViewModel, DayTemplateContextNOA11Y, @@ -31,40 +27,22 @@ import { NgbDatepickerConfigNOA11Y, NgbDatepickerI18nNOA11Y, NgbDatepickerKeyMapServiceNOA11Y, + RplCalendarNavigateEventNOA11Y, NgbDatepickerServiceNOA11Y, NgbDateStruct, + NgbDatepickerNavigateEventNOA11Y, + CalendarItemNOA11Y } from "@isp/xdce-widget"; -import { toInteger } from "@isp/xdce-widget/user-input/isp-typeahead/ng-bootstrap/util"; +import { toInteger } from "../util/util"; +import { Subscription } from "rxjs"; +import { NgbFidDatepickerRoutingViewNOA11Y } from "./datepicker-routing-view"; const NGB_CALENDAR_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => RplCalendarNOA11Y), + useExisting: forwardRef(() => FidRplCalendarNOA11Y), multi: true, }; -/** - * The payload of the datepicker navigation event - */ -export interface RplCalendarNavigateEventNOA11Y { - /** - * Currently displayed month - */ - current: { year: number; month: number }; - - /** - * Month we're navigating to - */ - next: { year: number; month: number }; -} - -export class CalendarItemNOA11Y { - name: string; - number: number; - focused: boolean; - disabled: boolean; - selected: boolean; -} - /** * A lightweight and highly configurable datepicker directive */ @@ -89,15 +67,15 @@ export class CalendarItemNOA11Y { NgbDatepickerKeyMapServiceNOA11Y, ], }) -export class RplCalendarNOA11Y +export class FidRplCalendarNOA11Y implements OnDestroy, OnChanges, OnInit, ControlValueAccessor { model: DatepickerViewModel; - @ViewChild(forwardRef(() => NgbDatepickerRoutingViewNOA11Y)) - datepickerRoutingView: NgbDatepickerRoutingViewNOA11Y; - @ViewChild(forwardRef(() => NgbDatepickerRoutingViewNOA11Y)) - datepickerHeader: NgbDatepickerRoutingViewNOA11Y; + @ViewChild(forwardRef(() => NgbFidDatepickerRoutingViewNOA11Y)) + datepickerRoutingView: NgbFidDatepickerRoutingViewNOA11Y; + @ViewChild(forwardRef(() => NgbFidDatepickerRoutingViewNOA11Y)) + datepickerHeader: NgbFidDatepickerRoutingViewNOA11Y; private _subscription: Subscription; /** @@ -783,18 +761,4 @@ export class RplCalendarNOA11Y this._subscription.unsubscribe(); } } -} -/** - * The payload of the calendar navigation event - */ -export interface NgbDatepickerNavigateEventNOA11Y { - /** - * Currently displayed month - */ - current: { year: number; month: number }; - - /** - * Month we're navigating to - */ - next: { year: number; month: number }; -} +} \ No newline at end of file diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/positioning.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/positioning.ts new file mode 100644 index 0000000..e250f42 --- /dev/null +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/positioning.ts @@ -0,0 +1,151 @@ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export class Positioning { + private getStyle(element: HTMLElement, prop: string): string { return window.getComputedStyle(element)[prop]; } + + private isStaticPositioned(element: HTMLElement): boolean { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + + private offsetParent(element: HTMLElement): HTMLElement { + let offsetParentEl = element.offsetParent || document.documentElement; + + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = offsetParentEl.offsetParent; + } + + return offsetParentEl || document.documentElement; + } + + position(element: HTMLElement, round = true): ClientRect { + let elPosition: ClientRect; + let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0}; + + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + } else { + const offsetParentEl = this.offsetParent(element); + + elPosition = this.offset(element, false); + + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + + return elPosition; + } + + offset(element: HTMLElement, round = true): ClientRect { + const elBcr = element.getBoundingClientRect(); + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + + return elOffset; + } + + positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): + ClientRect { + const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + const targetElBCR = targetElement.getBoundingClientRect(); + const placementPrimary = placement.split('-')[0] || 'top'; + const placementSecondary = placement.split('-')[1] || 'center'; + + let targetElPosition: ClientRect = { + 'height': targetElBCR.height || targetElement.offsetHeight, + 'width': targetElBCR.width || targetElement.offsetWidth, + 'top': 0, + 'bottom': targetElBCR.height || targetElement.offsetHeight, + 'left': 0, + 'right': targetElBCR.width || targetElement.offsetWidth + }; + + switch (placementPrimary) { + case 'top': + targetElPosition.top = hostElPosition.top - targetElement.offsetHeight; + break; + case 'bottom': + targetElPosition.top = hostElPosition.top + hostElPosition.height; + break; + case 'left': + targetElPosition.left = hostElPosition.left - targetElement.offsetWidth; + break; + case 'right': + targetElPosition.left = hostElPosition.left + hostElPosition.width; + break; + } + + switch (placementSecondary) { + case 'top': + targetElPosition.top = hostElPosition.top; + break; + case 'bottom': + targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + targetElPosition.left = hostElPosition.left; + break; + case 'right': + targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2; + } else { + targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2; + } + break; + } + + targetElPosition.top = Math.round(targetElPosition.top); + targetElPosition.bottom = Math.round(targetElPosition.bottom); + targetElPosition.left = Math.round(targetElPosition.left); + targetElPosition.right = Math.round(targetElPosition.right); + + return targetElPosition; + } +} + +const positionService = new Positioning(); +export function positionElements( + hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): void { + const pos = positionService.positionElements(hostElement, targetElement, placement, appendToBody); + + targetElement.style.top = `${pos.top}px`; + targetElement.style.left = `${pos.left}px`; +} diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/util.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/util.ts new file mode 100644 index 0000000..b03cfde --- /dev/null +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap-noa11y/util/util.ts @@ -0,0 +1,39 @@ +export function toInteger(value: any): number { + return parseInt(`${value}`, 10); + } + + export function toString(value: any): string { + return (value !== undefined && value !== null) ? `${value}` : ''; + } + + export function getValueInRange(value: number, max: number, min = 0): number { + return Math.max(Math.min(value, max), min); + } + + export function isString(value: any): value is string { + return typeof value === 'string'; + } + + export function isNumber(value: any): value is number { + return !isNaN(toInteger(value)); + } + + export function isInteger(value: any): value is number { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; + } + + export function isDefined(value: any): boolean { + return value !== undefined && value !== null; + } + + export function padNumber(value: number) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } else { + return ''; + } + } + + export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + } \ No newline at end of file diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-components.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-components.ts new file mode 100644 index 0000000..e18f089 --- /dev/null +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-components.ts @@ -0,0 +1,17 @@ +import { Injector } from "@angular/core"; +import { + NgbDatepickerNavigation, + NgbDatepickerNavigationSelect, + NgbDatepickerDayView, + NgbDatepickerReplyMonthView, + NgbDatepickerReplyYearsView, + NgbDatepickerI18n, + NgbCalendar, + NgbDatepickerService +} from "@isp/xdce-widget"; + +export class NgbFidDatepickerNavigation extends NgbDatepickerNavigation { + constructor(i18n: NgbDatepickerI18n, _calendar: NgbCalendar, injector: Injector, _service: NgbDatepickerService, translate: TranslateService, elementRef: ElementRef) { + super(i18n, _calendar, injector, _service, translate, elementRef); + } +} \ No newline at end of file diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input.ts index 52c82e2..bdd179e 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-input.ts @@ -22,7 +22,7 @@ import { NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; - +import { EventManager } from "@isp/xdce-arch-core-base"; import { DayTemplateContext, NbpCalendarPattern, @@ -35,20 +35,18 @@ import { NgbDatepickerNavigateEvent, NgbDatepickerService, } from "@isp/xdce-widget"; -import { RplCalendar } from "./datepicker"; - -import { EventManager } from "@isp/xdce-arch-core-base"; -import { Positioning } from "@isp/xdce-widget/user-input/isp-typeahead/ng-bootstrap/positioning"; +import { Positioning } from "../util/positioning"; +import { FidRplCalendar } from "./datepicker"; const NGB_DATEPICKER_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => NgbInputDatepicker), + useExisting: forwardRef(() => NgbFidInputDatepicker), multi: true, }; const NGB_DATEPICKER_VALIDATOR = { provide: NG_VALIDATORS, - useExisting: forwardRef(() => NgbInputDatepicker), + useExisting: forwardRef(() => NgbFidInputDatepicker), multi: true, }; @@ -57,7 +55,7 @@ const NGB_DATEPICKER_VALIDATOR = { * Manages integration with the input field itself (data entry) and ngModel (validation etc.). */ @Directive({ - selector: "input[fidRplCalendar]", + selector: 'input[fidRplCalendar]', exportAs: "fidRplCalendar", host: { "(input)": "waitForFormat($event.target.value)", @@ -72,10 +70,10 @@ const NGB_DATEPICKER_VALIDATOR = { NgbDatepickerService, ], }) -export class NgbInputDatepicker +export class NgbFidInputDatepicker implements OnChanges, OnDestroy, ControlValueAccessor, Validator { - private _cRef: ComponentRef = null; + private _cRef: ComponentRef = null; private _model: NgbDate; private _zoneSubscription: any; @@ -438,7 +436,7 @@ export class NgbInputDatepicker } } - const cf = this._cfr.resolveComponentFactory(RplCalendar); + const cf = this._cfr.resolveComponentFactory(FidRplCalendar); this._cRef = this._vcRef.createComponent(cf); this._applyPopupStyling(this._cRef.location.nativeElement); @@ -592,7 +590,7 @@ export class NgbInputDatepicker return 0; } - private _applyDatepickerInputs(datepickerInstance: RplCalendar): void { + private _applyDatepickerInputs(datepickerInstance: FidRplCalendar): void { [ "dayTemplate", "displayMonths", @@ -618,7 +616,7 @@ export class NgbInputDatepicker this._renderer.setStyle(nativeElement, "padding", "0"); } - private _subscribeForDatepickerOutputs(datepickerInstance: RplCalendar) { + private _subscribeForDatepickerOutputs(datepickerInstance: FidRplCalendar) { datepickerInstance.navigate.subscribe((date: any) => this.navigate.emit(date) ); diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-routing-view.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-routing-view.ts index fe02aff..a41a56f 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-routing-view.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker-routing-view.ts @@ -15,7 +15,6 @@ import { ViewChild, } from "@angular/core"; import { - CalendarItem, DayTemplateContext, DayViewModel, MonthViewModel, @@ -23,18 +22,18 @@ import { NgbDate, NgbDatepickerI18n, NgbDatepickerService, - WeekViewModel, + WeekViewModel } from "@isp/xdce-widget"; import { Subscription } from "rxjs"; @Component({ - selector: "ngb-fid-datepicker-routing-view", + selector: 'ngb-fid-datepicker-routing-view', host: { class: "d-block" }, - templateUrl: "./datepicker-routing-view.html", + templateUrl: './datepicker-routing-view.html', styleUrls: ["./datepicker-routing-view.scss"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class NgbDatepickerRoutingView implements OnInit, OnChanges, OnDestroy { +export class NgbFidDatepickerRoutingView implements OnInit, OnChanges, OnDestroy { @Input() dayTemplate: TemplateRef; @Input() monthTemplate: TemplateRef; @Input() yearsTemplate: TemplateRef; @@ -413,7 +412,7 @@ export class NgbDatepickerRoutingView implements OnInit, OnChanges, OnDestroy { } private resetMesi() { - let months: CalendarItem[][] = []; + let months: [][] = []; months = this.mesi.map((row) => { return row.map((m) => { const res = { ...m }; @@ -430,7 +429,7 @@ export class NgbDatepickerRoutingView implements OnInit, OnChanges, OnDestroy { } private resetAnni() { - let yrs: CalendarItem[][] = []; + let yrs: [][] = []; yrs = this.years.map((row) => { return row.map((y) => { const res = { ...y }; diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker.ts index a172655..71f886c 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/datepicker/datepicker.ts @@ -16,6 +16,7 @@ import { } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { + CalendarItem, DatepickerViewModel, DayTemplateContext, EnabledRangeService, @@ -27,48 +28,26 @@ import { NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerKeyMapService, + NgbDatepickerNavigateEvent, NgbDatepickerService, - NgbDateStruct, + NgbDateStruct } from "@isp/xdce-widget"; -import { toInteger } from "@isp/xdce-widget/user-input/isp-typeahead/ng-bootstrap/util"; import { Subscription } from "rxjs"; -import { NgbDatepickerRoutingView } from "./datepicker-routing-view"; +import { toInteger } from "../util/util"; +import { NgbFidDatepickerRoutingView } from "./datepicker-routing-view"; const NGB_CALENDAR_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => RplCalendar), + useExisting: forwardRef(() => FidRplCalendar), multi: true, }; -/** - * The payload of the datepicker navigation event - */ -export interface RplCalendarNavigateEvent { - /** - * Currently displayed month - */ - current: { year: number; month: number }; - - /** - * Month we're navigating to - */ - next: { year: number; month: number }; -} - -export class CalendarItem { - name: string; - number: number; - focused: boolean; - disabled: boolean; - selected: boolean; -} - /** * A lightweight and highly configurable datepicker directive */ @Component({ - exportAs: "rplCalendar", - selector: "rpl-calendar", + exportAs: "fidRplCalendar", + selector: 'fid-rpl-calendar', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: "d-inline-block rounded", @@ -90,15 +69,15 @@ export class CalendarItem { NgbDatepickerKeyMapService, ], }) -export class RplCalendar +export class FidRplCalendar implements OnDestroy, OnChanges, OnInit, ControlValueAccessor { model: DatepickerViewModel; - @ViewChild(forwardRef(() => NgbDatepickerRoutingView)) - datepickerRoutingView: NgbDatepickerRoutingView; - @ViewChild(forwardRef(() => NgbDatepickerRoutingView)) - datepickerHeader: NgbDatepickerRoutingView; + @ViewChild(forwardRef(() => NgbFidDatepickerRoutingView)) + datepickerRoutingView: NgbFidDatepickerRoutingView; + @ViewChild(forwardRef(() => NgbFidDatepickerRoutingView)) + datepickerHeader: NgbFidDatepickerRoutingView; private _subscription: Subscription; /** @@ -850,18 +829,4 @@ export class RplCalendar this._subscription.unsubscribe(); } } -} -/** - * The payload of the calendar navigation event - */ -export interface NgbDatepickerNavigateEvent { - /** - * Currently displayed month - */ - current: { year: number; month: number }; - - /** - * Month we're navigating to - */ - next: { year: number; month: number }; -} +} \ No newline at end of file diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/positioning.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/positioning.ts new file mode 100644 index 0000000..e250f42 --- /dev/null +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/positioning.ts @@ -0,0 +1,151 @@ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export class Positioning { + private getStyle(element: HTMLElement, prop: string): string { return window.getComputedStyle(element)[prop]; } + + private isStaticPositioned(element: HTMLElement): boolean { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + + private offsetParent(element: HTMLElement): HTMLElement { + let offsetParentEl = element.offsetParent || document.documentElement; + + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = offsetParentEl.offsetParent; + } + + return offsetParentEl || document.documentElement; + } + + position(element: HTMLElement, round = true): ClientRect { + let elPosition: ClientRect; + let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0}; + + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + } else { + const offsetParentEl = this.offsetParent(element); + + elPosition = this.offset(element, false); + + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + + return elPosition; + } + + offset(element: HTMLElement, round = true): ClientRect { + const elBcr = element.getBoundingClientRect(); + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + + return elOffset; + } + + positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): + ClientRect { + const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + const targetElBCR = targetElement.getBoundingClientRect(); + const placementPrimary = placement.split('-')[0] || 'top'; + const placementSecondary = placement.split('-')[1] || 'center'; + + let targetElPosition: ClientRect = { + 'height': targetElBCR.height || targetElement.offsetHeight, + 'width': targetElBCR.width || targetElement.offsetWidth, + 'top': 0, + 'bottom': targetElBCR.height || targetElement.offsetHeight, + 'left': 0, + 'right': targetElBCR.width || targetElement.offsetWidth + }; + + switch (placementPrimary) { + case 'top': + targetElPosition.top = hostElPosition.top - targetElement.offsetHeight; + break; + case 'bottom': + targetElPosition.top = hostElPosition.top + hostElPosition.height; + break; + case 'left': + targetElPosition.left = hostElPosition.left - targetElement.offsetWidth; + break; + case 'right': + targetElPosition.left = hostElPosition.left + hostElPosition.width; + break; + } + + switch (placementSecondary) { + case 'top': + targetElPosition.top = hostElPosition.top; + break; + case 'bottom': + targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + targetElPosition.left = hostElPosition.left; + break; + case 'right': + targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2; + } else { + targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2; + } + break; + } + + targetElPosition.top = Math.round(targetElPosition.top); + targetElPosition.bottom = Math.round(targetElPosition.bottom); + targetElPosition.left = Math.round(targetElPosition.left); + targetElPosition.right = Math.round(targetElPosition.right); + + return targetElPosition; + } +} + +const positionService = new Positioning(); +export function positionElements( + hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): void { + const pos = positionService.positionElements(hostElement, targetElement, placement, appendToBody); + + targetElement.style.top = `${pos.top}px`; + targetElement.style.left = `${pos.left}px`; +} diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/util.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/util.ts new file mode 100644 index 0000000..b03cfde --- /dev/null +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/@ng-bootstrap/util/util.ts @@ -0,0 +1,39 @@ +export function toInteger(value: any): number { + return parseInt(`${value}`, 10); + } + + export function toString(value: any): string { + return (value !== undefined && value !== null) ? `${value}` : ''; + } + + export function getValueInRange(value: number, max: number, min = 0): number { + return Math.max(Math.min(value, max), min); + } + + export function isString(value: any): value is string { + return typeof value === 'string'; + } + + export function isNumber(value: any): value is number { + return !isNaN(toInteger(value)); + } + + export function isInteger(value: any): value is number { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; + } + + export function isDefined(value: any): boolean { + return value !== undefined && value !== null; + } + + export function padNumber(value: number) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } else { + return ''; + } + } + + export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + } \ No newline at end of file diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y.ts index 7211c42..f372b5d 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.a11y.ts @@ -19,8 +19,6 @@ import { SimpleChanges, ViewChild, } from "@angular/core"; -// import forEach from 'lodash/foreach'; - import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, @@ -36,31 +34,28 @@ import { import { AsyncValidatorArray, coerceBooleanProperty, + DateValidator, EnabledRangeService, FormTouchService, + I18n, INbpInput, - NbpFormContainerComponent, - NbpInputElementBase, - NbpStyle, - ValidatorArray, - WidgetMode, -} from "@isp/xdce-widget/base"; - -import { - DateValidator, EnabledRangeService, I18n, NbpCalendarPattern, NbpCalendarPosition, NbpDatepickerConfiguration, NbpDatepickerItI18n, NbpDateSeparator, + NbpFormContainerComponent, + NbpInputElementBase, NbpItDateParserFormatter, + NbpStyle, NgbDate, NgbDateParserFormatter, NgbDatepickerI18n, NgbDateStruct, - NgbInputDatepicker, - + ValidatorArray, + WidgetMode, } from "@isp/xdce-widget"; import { TranslateService } from "@ngx-translate/core"; +import { NgbFidInputDatepicker } from "./@ng-bootstrap/datepicker/datepicker-input"; /** @@ -412,8 +407,8 @@ export class NbpCalendarGenericComponentA11Y this._tax = value ? value : this._tax; } - @ViewChild("rplCalendar", { read: NgbInputDatepicker }) - rplCalendar: NgbInputDatepicker; + @ViewChild("rplCalendar", { read: NgbFidInputDatepicker }) + rplCalendar: NgbFidInputDatepicker; @ViewChild(NgModel) model: NgModel; /** diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y.ts index 31a409e..8eac237 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-calendar-generic.component.noa11y.ts @@ -17,8 +17,6 @@ import { SimpleChanges, ViewChild, } from "@angular/core"; -// import forEach from 'lodash/foreach'; - import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, @@ -26,41 +24,24 @@ import { NgControl, NgModel, } from "@angular/forms"; -import { coerceBooleanProperty } from "@isp/xdce-widget/base"; -import { Observable } from "rxjs"; import { - EventManager, - ApplicationContextManagerInterface, APPLICATION_CONTEXT_MANAGER, - SESSION_MANAGER, + ApplicationContextManagerInterface, + EventManager } from "@isp/xdce-arch-core-base"; import { - NbpFormContainerComponent, - AsyncValidatorArray, - ValidatorArray, - FormTouchService, - NbpStyle, - WidgetMode, - NbpInputElementBase, - INbpInput, -} from "@isp/xdce-widget/base"; - -import { EnabledRangeService, NgbDate, NgbDateParserFormatterNOA11Y, NgbDatepickerI18nNOA11Y, NgbDateStruct, NgbInputDatepickerNOA11Y } from "@isp/xdce-widget"; - -import { DateValidator } from "@isp/xdce-widget"; - -import { + AsyncValidatorArray, coerceBooleanProperty, DateValidator, EnabledRangeService, FormTouchService, I18nNOA11Y, - NbpDatepickerConfigurationNOA11Y, - NbpDatepickerItI18nNOA11Y, + INbpInput, NbpCalendarPattern, + NbpCalendarPosition, NbpDatepickerConfigurationNOA11Y, + NbpDatepickerItI18nNOA11Y, NbpDateSeparator, NbpFormContainerComponent, + NbpInputElementBase, NbpItDateParserFormatterNOA11Y, + NbpStyle, NgbDate, NgbDateParserFormatterNOA11Y, NgbDatepickerI18nNOA11Y, NgbDateStruct, ValidatorArray, + WidgetMode } from "@isp/xdce-widget"; - -import { - NbpCalendarPattern, - NbpCalendarPosition, - NbpDateSeparator, -} from "@isp/xdce-widget"; +import { Observable } from "rxjs"; +import { NgbFidInputDatepickerNOA11Y } from "./@ng-bootstrap-noa11y/datepicker/datepicker-input"; /** @@ -108,8 +89,7 @@ let nextId = 0; }) export class NbpCalendarGenericComponentNOA11Y extends NbpInputElementBase - implements INbpInput, AfterViewInit, OnDestroy -{ + implements INbpInput, AfterViewInit, OnDestroy { /** * (opzionale ) Boolean for keeping the value of the date * when the input is disabled @@ -385,8 +365,8 @@ export class NbpCalendarGenericComponentNOA11Y this._tax = value ? value : this._tax; } - @ViewChild("rplCalendar", { read: NgbInputDatepickerNOA11Y }) - rplCalendar: NgbInputDatepickerNOA11Y; + @ViewChild("rplCalendar", { read: NgbFidInputDatepickerNOA11Y }) + rplCalendar: NgbFidInputDatepickerNOA11Y; @ViewChild(NgModel) model: NgModel; /** @@ -740,10 +720,10 @@ export class NbpCalendarGenericComponentNOA11Y private parseDateStructFromDate(value: Date) { return value && value instanceof Date ? { - day: value.getDate(), - month: value.getMonth() + 1, - year: value.getFullYear(), - } + day: value.getDate(), + month: value.getMonth() + 1, + year: value.getFullYear(), + } : value; } diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component.ts index c32cd9a..c6f1ca9 100644 --- a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component.ts +++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-generic.component.ts @@ -6,7 +6,7 @@ import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/ import { AsyncValidatorArray, FormTouchService, NbpFormContainerComponent, NbpInputElementBase, NbpInputElementBaseComponentA11YWrapper, NbpStyle, ValidatorArray } from '@isp/xdce-widget/base'; import { APPLICATION_CONTEXT_MANAGER, ApplicationContextManagerInterface, EventManager } from '@isp/xdce-arch-core-base'; -import { EnabledRangeService, NbpCalendarGenericComponent, NbpCalendarPattern, NbpDateSeparator, NgbDateStruct } from '@isp/xdce-widget'; +import { EnabledRangeService, NbpCalendarPattern, NbpDateSeparator, NgbDateStruct } from '@isp/xdce-widget'; import { NbpCalendarGenericComponentA11Y } from './nbp-calendar-generic.component.a11y'; import { NbpCalendarGenericComponentNOA11Y } from './nbp-calendar-generic.component.noa11y'; @@ -14,13 +14,13 @@ import { NbpCalendarGenericComponentNOA11Y } from './nbp-calendar-generic.compon export const NBP_CALENDAR_CONTROL_VALUE_ACCESSOR: any = { provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => NbpCalendarGenericComponent), // un riferimento al futuro componente corrente + useExisting: forwardRef(() => NbpFidCalendarGeneric), // un riferimento al futuro componente corrente multi: true }; export const NBP_INPUT_CALENDAR_ELEMENT_BASE: any = { provide: NbpInputElementBase, - useExisting: forwardRef(() => NbpCalendarGenericComponent), // un riferimento al futuro componente corrente + useExisting: forwardRef(() => NbpFidCalendarGeneric), // un riferimento al futuro componente corrente multi: true };