@geosdi/ngx-leaflet-timedimension-plugin 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,24 +1,56 @@
1
1
  # NgxLeafletTimedimensionPlugin
2
2
 
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.0.0.
4
4
 
5
- ## Code scaffolding
5
+ # General information
6
6
 
7
- Run `ng generate component component-name --project ngx-leaflet-timedimension-plugin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-leaflet-timedimension-plugin`.
8
- > Note: Don't forget to add `--project ngx-leaflet-timedimension-plugin` or else it will be added to the default project in your `angular.json` file.
7
+ Service to wrap leaflet timedimensione see documentation to https://github.com/socib/Leaflet.TimeDimension
9
8
 
10
- ## Build
9
+ ## Installation
11
10
 
12
- Run `ng build ngx-leaflet-timedimension-plugin` to build the project. The build artifacts will be stored in the `dist/` directory.
11
+ `npm i @geosdi/ngx-leaflet-timedimension-plugin --save`
13
12
 
14
- ## Publishing
13
+ It depends on :
15
14
 
16
- After building your library with `ng build ngx-leaflet-timedimension-plugin`, go to the dist folder `cd dist/ngx-leaflet-timedimension-plugin` and run `npm publish`.
15
+ "@angular/common": ">=13.0.0",
16
+ "@angular/core": ">=13.0.0",
17
+ "leaflet": ">=1.7.1",
18
+ "leaflet-timedimension": "^1.1.1"
17
19
 
18
- ## Running unit tests
20
+ ## Usage
19
21
 
20
- Run `ng test ngx-leaflet-timedimension-plugin` to execute the unit tests via [Karma](https://karma-runner.github.io).
22
+ ```typescript
21
23
 
22
- ## Further help
24
+ import { Injectable } from '@angular/core';
25
+ import {TimeDimensionExtensionService} from "./time-dimension-extension-service";
23
26
 
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
27
+ @Injectable({
28
+ providedIn: 'root'
29
+ })
30
+ export class Service {
31
+
32
+
33
+ constructor(private ngxLeafletTimedimensionPluginService: TimeDimensionExtensionService) {
34
+ }
35
+
36
+ public addPlugin() {
37
+ //4/11/2021
38
+ const endTime = new Date(1636022400000);
39
+ //28/10/2021
40
+ const startTime = new Date(1636022400000 - 604800000);
41
+ this.ngxLeafletTimedimensionPluginService
42
+ .withTimeDimensionOptionsOptions({
43
+ times: L.TimeDimension.Util.explodeTimeRange(startTime, endTime, "PT5M"),
44
+ period: "P5M",
45
+ })
46
+ .withMap(this.map).withPlayerOptions({loop: true, transitionTime: 333}).applyTimeDimensionPlugin();
47
+ this.ngxLeafletTimedimensionPluginService.setPlayerToLoop(true);
48
+ wmsLayer.addTo(this.map);
49
+ setTimeout(() => {
50
+ this.ngxLeafletTimedimensionPluginService.setPlayerToLoop(false);
51
+ }, 2000);
52
+ }
53
+
54
+ }
55
+
56
+ ```
@@ -0,0 +1,20 @@
1
+ import { NgModule } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * @author Vito Salvia - CNR IMAA geoSDI Group
5
+ * @email vito.salvia@gmail.com
6
+ */
7
+ export class NgxLeafletTimedimensionPluginModule {
8
+ }
9
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule });
11
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [],
16
+ imports: [],
17
+ exports: [],
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW4ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2Vvc2RpL25neC1sZWFmbGV0LXRpbWVkaW1lbnNpb24tcGx1Z2luL3NyYy9saWIvbmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW4ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXpDOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxtQ0FBbUM7O21KQUFuQyxtQ0FBbUM7b0pBQW5DLG1DQUFtQztvSkFBbkMsbUNBQW1DOzJGQUFuQyxtQ0FBbUM7a0JBTC9DLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEBhdXRob3IgVml0byBTYWx2aWEgLSBDTlIgSU1BQSBnZW9TREkgR3JvdXBcbiAqIEBlbWFpbCB2aXRvLnNhbHZpYUBnbWFpbC5jb21cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hMZWFmbGV0VGltZWRpbWVuc2lvblBsdWdpbk1vZHVsZSB7fVxuIl19
@@ -0,0 +1,189 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as L from "leaflet";
3
+ import { BreakpointObserver } from "@angular/cdk/layout";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/layout";
6
+ export class NgxLeafletTimedimensionPluginService {
7
+ constructor(breakpointObserver) {
8
+ this.breakpointObserver = breakpointObserver;
9
+ this._playEnabled = false;
10
+ this.position = "topleft";
11
+ this.minSpeed = 1;
12
+ this.maxSpeed = 5;
13
+ }
14
+ /**
15
+ * @param range
16
+ */
17
+ withMap(map) {
18
+ this.map = map;
19
+ return this;
20
+ }
21
+ withPlayerOptions(options) {
22
+ this.playerOptions = options;
23
+ return this;
24
+ }
25
+ withPosition(position) {
26
+ this.position = position;
27
+ return this;
28
+ }
29
+ /***
30
+ * @param options
31
+ */
32
+ withTimeDimensionOptionsOptions(options) {
33
+ this.timeDimensionOptions = options;
34
+ return this;
35
+ }
36
+ /**
37
+ * @param maxSpeed
38
+ */
39
+ withMaxSpeed(maxSpeed) {
40
+ this.maxSpeed = maxSpeed;
41
+ return this;
42
+ }
43
+ /**
44
+ * @param minSpeed
45
+ */
46
+ withMinSpeed(minSpeed) {
47
+ this.minSpeed = minSpeed;
48
+ return this;
49
+ }
50
+ /**
51
+ *
52
+ * @param startTime
53
+ * @param endTime
54
+ */
55
+ refreshAvailableTimes(startTime, endTime) {
56
+ this.timeDimension.setAvailableTimes(L.TimeDimension.Util.explodeTimeRange(startTime, endTime, this._period), "replace");
57
+ }
58
+ /**
59
+ *
60
+ */
61
+ getCurrentTime() {
62
+ return this.timeDimension.getCurrentTime();
63
+ }
64
+ /**
65
+ * @param time
66
+ */
67
+ setCurrentTime(time) {
68
+ this.timeDimension.setCurrentTime(new Date(time));
69
+ }
70
+ /**
71
+ *
72
+ */
73
+ autoApdate() {
74
+ return (this.getUpperTimeLimit() === null ||
75
+ this.getUpperTimeLimit() === this.timeDimension.getCurrentTime());
76
+ }
77
+ /**
78
+ */
79
+ getLowerTimeLimit() {
80
+ return this.timeDimension.getAvailableTimes()[0];
81
+ }
82
+ /**
83
+ *
84
+ */
85
+ refreshTimeDimensionAtLastTime(time, range) {
86
+ const endTime = new Date(time);
87
+ const startTime = new Date(time - range);
88
+ this.refreshAvailableTimes(startTime, endTime);
89
+ }
90
+ /**
91
+ *
92
+ */
93
+ getUpperTimeLimit() {
94
+ const length = this.timeDimension.getAvailableTimes().length;
95
+ return this.timeDimension.getAvailableTimes()[length - 1];
96
+ }
97
+ /**
98
+ *
99
+ * @param time
100
+ */
101
+ setTransitionTime(time) {
102
+ this.player.setTransitionTime(time);
103
+ }
104
+ /**
105
+ *
106
+ * @param step
107
+ */
108
+ play(step) {
109
+ this.player.start(step);
110
+ }
111
+ /**
112
+ * @param looped
113
+ */
114
+ setPlayerToLoop(looped) {
115
+ this.player.setLooped(looped);
116
+ }
117
+ /**
118
+ *
119
+ * @param value
120
+ */
121
+ set period(value) {
122
+ this._period = value;
123
+ }
124
+ /**
125
+ */
126
+ applyTimeDimensionPlugin() {
127
+ if (!this.map) {
128
+ alert("Impossibile aggiungere il plugin timedimension");
129
+ }
130
+ else {
131
+ this.timeDimension = new L.TimeDimension(this.timeDimensionOptions);
132
+ this.player = new L.TimeDimension.Player(this.playerOptions, this.timeDimension);
133
+ this.timeDimensionControl = new L.Control.TimeDimension({
134
+ player: this.player,
135
+ loopButton: true,
136
+ playReverseButton: true,
137
+ timeSlider: this.isMd(),
138
+ speedSlider: this.isLg(),
139
+ position: this.position,
140
+ minSpeed: this.minSpeed,
141
+ maxSpeed: this.maxSpeed,
142
+ timeZones: ["Local", "UTC"],
143
+ });
144
+ this.player.on("play", (eo) => {
145
+ this._playEnabled = true;
146
+ });
147
+ this.player.on("stop", (eo) => {
148
+ this._playEnabled = false;
149
+ });
150
+ this.timeDimension.on("timeload", () => {
151
+ this.onLoadTimeChaged();
152
+ });
153
+ this.timeDimension.on("availabletimeschanged", (availableTimes) => {
154
+ this.onAvailableTimeChangedChaged();
155
+ });
156
+ this.map.timeDimension = this.timeDimension;
157
+ this.map.addControl(this.timeDimensionControl);
158
+ }
159
+ }
160
+ /**
161
+ *
162
+ */
163
+ onLoadTimeChaged() { }
164
+ /**
165
+ *
166
+ */
167
+ onAvailableTimeChangedChaged() { }
168
+ /**
169
+ *
170
+ */
171
+ isMd() {
172
+ return this.breakpointObserver.isMatched(["(min-width: 768px)"]);
173
+ }
174
+ /**
175
+ *
176
+ */
177
+ isLg() {
178
+ return this.breakpointObserver.isMatched(["(min-width: 992px)"]);
179
+ }
180
+ }
181
+ /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
182
+ /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, providedIn: "root" });
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, decorators: [{
184
+ type: Injectable,
185
+ args: [{
186
+ providedIn: "root",
187
+ }]
188
+ }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlb3NkaS9uZ3gtbGVhZmxldC10aW1lZGltZW5zaW9uLXBsdWdpbi9zcmMvbGliL25neC1sZWFmbGV0LXRpbWVkaW1lbnNpb24tcGx1Z2luLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBOEZ6RCxNQUFNLE9BQU8sb0NBQW9DO0lBZTdDLFlBQW1CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBWGpELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBT3JCLGFBQVEsR0FBVyxTQUFTLENBQUM7UUFDN0IsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQVcsQ0FBQyxDQUFDO0lBRStCLENBQUM7SUFFN0Q7O09BRUc7SUFDSCxPQUFPLENBQUMsR0FBUTtRQUNaLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQVk7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFlBQVksQ0FDUixRQUErRDtRQUUvRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCwrQkFBK0IsQ0FDM0IsT0FBWTtRQUVaLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7UUFD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QUFFO2dCQUM5RCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxnQkFBZ0IsS0FBVSxDQUFDO0lBRXJDOztPQUVHO0lBQ08sNEJBQTRCLEtBQVUsQ0FBQztJQUVqRDs7T0FFRztJQUNLLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssSUFBSTtRQUNSLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDOztvSkEzTlEsb0NBQW9DO3dKQUFwQyxvQ0FBb0MsY0FGakMsTUFBTTsyRkFFVCxvQ0FBb0M7a0JBSGhELFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgKiBhcyBMIGZyb20gXCJsZWFmbGV0XCI7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2xheW91dFwiO1xuXG4vKipcbiAqIEBhdXRob3IgVml0byBTYWx2aWEgLSBDTlIgSU1BQSBnZW9TREkgR3JvdXBcbiAqIEBlbWFpbCB2aXRvLnNhbHZpYUBnbWFpbC5jb21cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB0aXRsZVxuICogQHBhcmFtIHBhZ2VTaXplXG4gKiBAcGFyYW0gYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIG1hcFxuICAgICAqL1xuICAgIHdpdGhNYXAobWFwOiBhbnkpOiBJTmd4TGVhZmxldFRpbWVkaW1lbnNpb25QbHVnaW5TZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICB3aXRoUGxheWVyT3B0aW9ucyhvcHRpb25zOiBhbnkpOiBJTmd4TGVhZmxldFRpbWVkaW1lbnNpb25QbHVnaW5TZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICB3aXRoVGltZURpbWVuc2lvbk9wdGlvbnNPcHRpb25zKFxuICAgICAgICBvcHRpb25zOiBhbnksXG4gICAgKTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHdpdGhQb3NpdGlvbihcbiAgICAgICAgcG9zaXRpb246IFwidG9wbGVmdFwiIHwgXCJ0b3ByaWdodFwiIHwgXCJib3R0b21sZWZ0XCIgfCBcImJvdHRvbXJpZ2h0XCIsXG4gICAgKTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtaW5TcGVlZFxuICAgICAqL1xuICAgIHdpdGhNaW5TcGVlZChtaW5TcGVlZDogbnVtYmVyKTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtYXhTcGVlZFxuICAgICAqL1xuICAgIHdpdGhNYXhTcGVlZChtYXhTcGVlZDogbnVtYmVyKTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZTtcblxuICAgIC8qXG4gICAgICovXG4gICAgYXBwbHlUaW1lRGltZW5zaW9uUGx1Z2luKCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc3RhcnRUaW1lXG4gICAgICogQHBhcmFtIGVuZFRpbWVcbiAgICAgKi9cbiAgICByZWZyZXNoQXZhaWxhYmxlVGltZXMoc3RhcnRUaW1lOiBEYXRlLCBlbmRUaW1lOiBEYXRlKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqL1xuICAgIGdldEN1cnJlbnRUaW1lKCk6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqL1xuICAgIGdldExvd2VyVGltZUxpbWl0KCk6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0aW1lXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICovXG4gICAgcmVmcmVzaFRpbWVEaW1lbnNpb25BdExhc3RUaW1lKHRpbWU6IG51bWJlciwgcmFuZ2U6IG51bWJlcik7XG5cbiAgICAvKipcbiAgICAgKi9cbiAgICBnZXRVcHBlclRpbWVMaW1pdCgpOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHBsYXkoc3RlcDogbnVtYmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBsb29wZWRcbiAgICAgKi9cbiAgICBzZXRQbGF5ZXJUb0xvb3AobG9vcGVkOiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0aW1lXG4gICAgICovXG4gICAgc2V0Q3VycmVudFRpbWUodGltZTogbnVtYmVyKTogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIE5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZVxuICAgIGltcGxlbWVudHMgSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZVxue1xuICAgIHByaXZhdGUgcGxheWVyOiBMLlRpbWVEaW1lbnNpb24uUGxheWVyO1xuICAgIHByaXZhdGUgX3BsYXlFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwbGF5ZXJPcHRpb25zOiBhbnk7XG4gICAgcHJpdmF0ZSB0aW1lRGltZW5zaW9uT3B0aW9uczogYW55O1xuICAgIHByaXZhdGUgdGltZURpbWVuc2lvbkNvbnRyb2w6IEwuQ29udHJvbC5UaW1lRGltZW5zaW9uO1xuICAgIHByaXZhdGUgdGltZURpbWVuc2lvbjogTC5UaW1lRGltZW5zaW9uO1xuICAgIHByaXZhdGUgbWFwOiBhbnk7XG4gICAgcHJpdmF0ZSBfcGVyaW9kOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwb3NpdGlvbjogc3RyaW5nID0gXCJ0b3BsZWZ0XCI7XG4gICAgcHJpdmF0ZSBtaW5TcGVlZDogbnVtYmVyID0gMTtcbiAgICBwcml2YXRlIG1heFNwZWVkOiBudW1iZXIgPSA1O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyKSB7fVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICovXG4gICAgd2l0aE1hcChtYXA6IGFueSk6IElOZ3hMZWFmbGV0VGltZWRpbWVuc2lvblBsdWdpblNlcnZpY2Uge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBsYXllck9wdGlvbnMob3B0aW9uczogYW55KTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZSB7XG4gICAgICAgIHRoaXMucGxheWVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhQb3NpdGlvbihcbiAgICAgICAgcG9zaXRpb246IFwidG9wbGVmdFwiIHwgXCJ0b3ByaWdodFwiIHwgXCJib3R0b21sZWZ0XCIgfCBcImJvdHRvbXJpZ2h0XCIsXG4gICAgKTogSU5neExlYWZsZXRUaW1lZGltZW5zaW9uUGx1Z2luU2VydmljZSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqKlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgd2l0aFRpbWVEaW1lbnNpb25PcHRpb25zT3B0aW9ucyhcbiAgICAgICAgb3B0aW9uczogYW55LFxuICAgICk6IElOZ3hMZWFmbGV0VGltZWRpbWVuc2lvblBsdWdpblNlcnZpY2Uge1xuICAgICAgICB0aGlzLnRpbWVEaW1lbnNpb25PcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG1heFNwZWVkXG4gICAgICovXG4gICAgd2l0aE1heFNwZWVkKG1heFNwZWVkOiBudW1iZXIpOiBJTmd4TGVhZmxldFRpbWVkaW1lbnNpb25QbHVnaW5TZXJ2aWNlIHtcbiAgICAgICAgdGhpcy5tYXhTcGVlZCA9IG1heFNwZWVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbWluU3BlZWRcbiAgICAgKi9cbiAgICB3aXRoTWluU3BlZWQobWluU3BlZWQ6IG51bWJlcik6IElOZ3hMZWFmbGV0VGltZWRpbWVuc2lvblBsdWdpblNlcnZpY2Uge1xuICAgICAgICB0aGlzLm1pblNwZWVkID0gbWluU3BlZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXJ0VGltZVxuICAgICAqIEBwYXJhbSBlbmRUaW1lXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hBdmFpbGFibGVUaW1lcyhzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy50aW1lRGltZW5zaW9uLnNldEF2YWlsYWJsZVRpbWVzKFxuICAgICAgICAgICAgTC5UaW1lRGltZW5zaW9uLlV0aWwuZXhwbG9kZVRpbWVSYW5nZShcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXJpb2QsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgXCJyZXBsYWNlXCIsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFRpbWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZURpbWVuc2lvbi5nZXRDdXJyZW50VGltZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0aW1lXG4gICAgICovXG4gICAgcHVibGljIHNldEN1cnJlbnRUaW1lKHRpbWU6IG51bWJlcik6IGFueSB7XG4gICAgICAgIHRoaXMudGltZURpbWVuc2lvbi5zZXRDdXJyZW50VGltZShuZXcgRGF0ZSh0aW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0b0FwZGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0VXBwZXJUaW1lTGltaXQoKSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy5nZXRVcHBlclRpbWVMaW1pdCgpID09PSB0aGlzLnRpbWVEaW1lbnNpb24uZ2V0Q3VycmVudFRpbWUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMb3dlclRpbWVMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lRGltZW5zaW9uLmdldEF2YWlsYWJsZVRpbWVzKClbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICByZWZyZXNoVGltZURpbWVuc2lvbkF0TGFzdFRpbWUodGltZTogbnVtYmVyLCByYW5nZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSh0aW1lKTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUodGltZSAtIHJhbmdlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQXZhaWxhYmxlVGltZXMoc3RhcnRUaW1lLCBlbmRUaW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFVwcGVyVGltZUxpbWl0KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMudGltZURpbWVuc2lvbi5nZXRBdmFpbGFibGVUaW1lcygpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZURpbWVuc2lvbi5nZXRBdmFpbGFibGVUaW1lcygpW2xlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbWVcbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uVGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIuc2V0VHJhbnNpdGlvblRpbWUodGltZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHBsYXkoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGxheWVyLnN0YXJ0KHN0ZXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBsb29wZWRcbiAgICAgKi9cbiAgICBzZXRQbGF5ZXJUb0xvb3AobG9vcGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxheWVyLnNldExvb3BlZChsb29wZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgc2V0IHBlcmlvZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3BlcmlvZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqL1xuICAgIGFwcGx5VGltZURpbWVuc2lvblBsdWdpbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcCkge1xuICAgICAgICAgICAgYWxlcnQoXCJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGlsIHBsdWdpbiB0aW1lZGltZW5zaW9uXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lRGltZW5zaW9uID0gbmV3IEwuVGltZURpbWVuc2lvbih0aGlzLnRpbWVEaW1lbnNpb25PcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMucGxheWVyID0gbmV3IEwuVGltZURpbWVuc2lvbi5QbGF5ZXIoXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgIHRoaXMudGltZURpbWVuc2lvbixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRpbWVEaW1lbnNpb25Db250cm9sID0gbmV3IEwuQ29udHJvbC5UaW1lRGltZW5zaW9uKHtcbiAgICAgICAgICAgICAgICBwbGF5ZXI6IHRoaXMucGxheWVyLFxuICAgICAgICAgICAgICAgIGxvb3BCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgcGxheVJldmVyc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZVNsaWRlcjogdGhpcy5pc01kKCksXG4gICAgICAgICAgICAgICAgc3BlZWRTbGlkZXI6IHRoaXMuaXNMZygpLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIG1pblNwZWVkOiB0aGlzLm1pblNwZWVkLFxuICAgICAgICAgICAgICAgIG1heFNwZWVkOiB0aGlzLm1heFNwZWVkLFxuICAgICAgICAgICAgICAgIHRpbWVab25lczogW1wiTG9jYWxcIiwgXCJVVENcIl0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIub24oXCJwbGF5XCIsIChlbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIub24oXCJzdG9wXCIsIChlbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZURpbWVuc2lvbi5vbihcInRpbWVsb2FkXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZFRpbWVDaGFnZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lRGltZW5zaW9uLm9uKFwiYXZhaWxhYmxldGltZXNjaGFuZ2VkXCIsIChhdmFpbGFibGVUaW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25BdmFpbGFibGVUaW1lQ2hhbmdlZENoYWdlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1hcC50aW1lRGltZW5zaW9uID0gdGhpcy50aW1lRGltZW5zaW9uO1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkQ29udHJvbCh0aGlzLnRpbWVEaW1lbnNpb25Db250cm9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uTG9hZFRpbWVDaGFnZWQoKTogdm9pZCB7fVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25BdmFpbGFibGVUaW1lQ2hhbmdlZENoYWdlZCgpOiB2b2lkIHt9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNNZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChbXCIobWluLXdpZHRoOiA3NjhweClcIl0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0xnKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKFtcIihtaW4td2lkdGg6IDk5MnB4KVwiXSk7XG4gICAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Public API Surface of ngx-leaflet-timedimension-plugin
3
3
  */
4
- export * from './lib/ngx-leaflet-timedimension-plugin.service';
5
- export * from './lib/ngx-leaflet-timedimension-plugin.module';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dlb3NkaS9uZ3gtbGVhZmxldC10aW1lZGltZW5zaW9uLXBsdWdpbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtbGVhZmxldC10aW1lZGltZW5zaW9uLXBsdWdpbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1sZWFmbGV0LXRpbWVkaW1lbnNpb24tcGx1Z2luLm1vZHVsZSc7XG4iXX0=
4
+ export * from "./lib/ngx-leaflet-timedimension-plugin.service";
5
+ export * from "./lib/ngx-leaflet-timedimension-plugin.module";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dlb3NkaS9uZ3gtbGVhZmxldC10aW1lZGltZW5zaW9uLXBsdWdpbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW5cbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbmd4LWxlYWZsZXQtdGltZWRpbWVuc2lvbi1wbHVnaW4uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL25neC1sZWFmbGV0LXRpbWVkaW1lbnNpb24tcGx1Z2luLm1vZHVsZVwiO1xuIl19
@@ -2,13 +2,12 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
3
  import * as L from 'leaflet';
4
4
  import * as i1 from '@angular/cdk/layout';
5
- import 'node_modules/leaflet-timedimension/dist/leaflet.timedimension.min';
6
5
 
7
6
  class NgxLeafletTimedimensionPluginService {
8
7
  constructor(breakpointObserver) {
9
8
  this.breakpointObserver = breakpointObserver;
10
9
  this._playEnabled = false;
11
- this.position = 'topleft';
10
+ this.position = "topleft";
12
11
  this.minSpeed = 1;
13
12
  this.maxSpeed = 5;
14
13
  }
@@ -54,7 +53,7 @@ class NgxLeafletTimedimensionPluginService {
54
53
  * @param endTime
55
54
  */
56
55
  refreshAvailableTimes(startTime, endTime) {
57
- this.timeDimension.setAvailableTimes(L.TimeDimension.Util.explodeTimeRange(startTime, endTime, this._period), 'replace');
56
+ this.timeDimension.setAvailableTimes(L.TimeDimension.Util.explodeTimeRange(startTime, endTime, this._period), "replace");
58
57
  }
59
58
  /**
60
59
  *
@@ -72,7 +71,8 @@ class NgxLeafletTimedimensionPluginService {
72
71
  *
73
72
  */
74
73
  autoApdate() {
75
- return (this.getUpperTimeLimit() === null || this.getUpperTimeLimit() === this.timeDimension.getCurrentTime());
74
+ return (this.getUpperTimeLimit() === null ||
75
+ this.getUpperTimeLimit() === this.timeDimension.getCurrentTime());
76
76
  }
77
77
  /**
78
78
  */
@@ -125,7 +125,7 @@ class NgxLeafletTimedimensionPluginService {
125
125
  */
126
126
  applyTimeDimensionPlugin() {
127
127
  if (!this.map) {
128
- alert('Impossibile aggiungere il plugin timedimension');
128
+ alert("Impossibile aggiungere il plugin timedimension");
129
129
  }
130
130
  else {
131
131
  this.timeDimension = new L.TimeDimension(this.timeDimensionOptions);
@@ -139,18 +139,18 @@ class NgxLeafletTimedimensionPluginService {
139
139
  position: this.position,
140
140
  minSpeed: this.minSpeed,
141
141
  maxSpeed: this.maxSpeed,
142
- timeZones: ['Local', 'UTC'],
142
+ timeZones: ["Local", "UTC"],
143
143
  });
144
- this.player.on('play', (eo) => {
144
+ this.player.on("play", (eo) => {
145
145
  this._playEnabled = true;
146
146
  });
147
- this.player.on('stop', (eo) => {
147
+ this.player.on("stop", (eo) => {
148
148
  this._playEnabled = false;
149
149
  });
150
- this.timeDimension.on('timeload', () => {
150
+ this.timeDimension.on("timeload", () => {
151
151
  this.onLoadTimeChaged();
152
152
  });
153
- this.timeDimension.on('availabletimeschanged', (availableTimes) => {
153
+ this.timeDimension.on("availabletimeschanged", (availableTimes) => {
154
154
  this.onAvailableTimeChangedChaged();
155
155
  });
156
156
  this.map.timeDimension = this.timeDimension;
@@ -160,46 +160,48 @@ class NgxLeafletTimedimensionPluginService {
160
160
  /**
161
161
  *
162
162
  */
163
- onLoadTimeChaged() {
164
- }
163
+ onLoadTimeChaged() { }
165
164
  /**
166
165
  *
167
166
  */
168
- onAvailableTimeChangedChaged() {
169
- }
167
+ onAvailableTimeChangedChaged() { }
170
168
  /**
171
169
  *
172
170
  */
173
171
  isMd() {
174
- return this.breakpointObserver.isMatched(['(min-width: 768px)']);
172
+ return this.breakpointObserver.isMatched(["(min-width: 768px)"]);
175
173
  }
176
174
  /**
177
175
  *
178
176
  */
179
177
  isLg() {
180
- return this.breakpointObserver.isMatched(['(min-width: 992px)']);
178
+ return this.breakpointObserver.isMatched(["(min-width: 992px)"]);
181
179
  }
182
180
  }
183
- /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginService, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
184
- /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginService, providedIn: 'root' });
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginService, decorators: [{
181
+ /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
182
+ /** @nocollapse */ NgxLeafletTimedimensionPluginService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, providedIn: "root" });
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginService, decorators: [{
186
184
  type: Injectable,
187
185
  args: [{
188
- providedIn: 'root'
186
+ providedIn: "root",
189
187
  }]
190
188
  }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
191
189
 
190
+ /**
191
+ * @author Vito Salvia - CNR IMAA geoSDI Group
192
+ * @email vito.salvia@gmail.com
193
+ */
192
194
  class NgxLeafletTimedimensionPluginModule {
193
195
  }
194
- /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
195
- /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginModule });
196
- /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, imports: [[]] });
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, decorators: [{
196
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
197
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule });
198
+ /** @nocollapse */ NgxLeafletTimedimensionPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule });
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NgxLeafletTimedimensionPluginModule, decorators: [{
198
200
  type: NgModule,
199
201
  args: [{
200
202
  declarations: [],
201
203
  imports: [],
202
- exports: []
204
+ exports: [],
203
205
  }]
204
206
  }] });
205
207
 
@@ -212,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
212
214
  */
213
215
 
214
216
  export { NgxLeafletTimedimensionPluginModule, NgxLeafletTimedimensionPluginService };
215
- //# sourceMappingURL=geosdi-ngx-leaflet-timedimension-plugin.js.map
217
+ //# sourceMappingURL=geosdi-ngx-leaflet-timedimension-plugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geosdi-ngx-leaflet-timedimension-plugin.mjs","sources":["../../../../projects/geosdi/ngx-leaflet-timedimension-plugin/src/lib/ngx-leaflet-timedimension-plugin.service.ts","../../../../projects/geosdi/ngx-leaflet-timedimension-plugin/src/lib/ngx-leaflet-timedimension-plugin.module.ts","../../../../projects/geosdi/ngx-leaflet-timedimension-plugin/src/public-api.ts","../../../../projects/geosdi/ngx-leaflet-timedimension-plugin/src/geosdi-ngx-leaflet-timedimension-plugin.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport * as L from \"leaflet\";\nimport { BreakpointObserver } from \"@angular/cdk/layout\";\n\n/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\n\n/**\n * @param title\n * @param pageSize\n * @param action\n */\nexport interface INgxLeafletTimedimensionPluginService {\n /**\n * @param map\n */\n withMap(map: any): INgxLeafletTimedimensionPluginService;\n\n /**\n * @param options\n */\n withPlayerOptions(options: any): INgxLeafletTimedimensionPluginService;\n\n /**\n * @param options\n */\n withTimeDimensionOptionsOptions(\n options: any,\n ): INgxLeafletTimedimensionPluginService;\n\n /**\n * @param position\n */\n withPosition(\n position: \"topleft\" | \"topright\" | \"bottomleft\" | \"bottomright\",\n ): INgxLeafletTimedimensionPluginService;\n\n /**\n * @param minSpeed\n */\n withMinSpeed(minSpeed: number): INgxLeafletTimedimensionPluginService;\n\n /**\n * @param maxSpeed\n */\n withMaxSpeed(maxSpeed: number): INgxLeafletTimedimensionPluginService;\n\n /*\n */\n applyTimeDimensionPlugin(): void;\n\n /**\n * @param startTime\n * @param endTime\n */\n refreshAvailableTimes(startTime: Date, endTime: Date): void;\n\n /**\n */\n getCurrentTime(): number;\n\n /**\n */\n getLowerTimeLimit(): number;\n\n /**\n * @param time\n * @param range\n */\n refreshTimeDimensionAtLastTime(time: number, range: number);\n\n /**\n */\n getUpperTimeLimit(): number;\n\n /**\n * @param step\n */\n play(step: number);\n\n /**\n * @param looped\n */\n setPlayerToLoop(looped: boolean): void;\n\n /**\n * @param time\n */\n setCurrentTime(time: number): any;\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class NgxLeafletTimedimensionPluginService\n implements INgxLeafletTimedimensionPluginService\n{\n private player: L.TimeDimension.Player;\n private _playEnabled = false;\n private playerOptions: any;\n private timeDimensionOptions: any;\n private timeDimensionControl: L.Control.TimeDimension;\n private timeDimension: L.TimeDimension;\n private map: any;\n private _period: string;\n private position: string = \"topleft\";\n private minSpeed: number = 1;\n private maxSpeed: number = 5;\n\n constructor(public breakpointObserver: BreakpointObserver) {}\n\n /**\n * @param range\n */\n withMap(map: any): INgxLeafletTimedimensionPluginService {\n this.map = map;\n return this;\n }\n\n withPlayerOptions(options: any): INgxLeafletTimedimensionPluginService {\n this.playerOptions = options;\n return this;\n }\n\n withPosition(\n position: \"topleft\" | \"topright\" | \"bottomleft\" | \"bottomright\",\n ): INgxLeafletTimedimensionPluginService {\n this.position = position;\n return this;\n }\n\n /***\n * @param options\n */\n withTimeDimensionOptionsOptions(\n options: any,\n ): INgxLeafletTimedimensionPluginService {\n this.timeDimensionOptions = options;\n return this;\n }\n\n /**\n * @param maxSpeed\n */\n withMaxSpeed(maxSpeed: number): INgxLeafletTimedimensionPluginService {\n this.maxSpeed = maxSpeed;\n return this;\n }\n\n /**\n * @param minSpeed\n */\n withMinSpeed(minSpeed: number): INgxLeafletTimedimensionPluginService {\n this.minSpeed = minSpeed;\n return this;\n }\n\n /**\n *\n * @param startTime\n * @param endTime\n */\n public refreshAvailableTimes(startTime: Date, endTime: Date) {\n this.timeDimension.setAvailableTimes(\n L.TimeDimension.Util.explodeTimeRange(\n startTime,\n endTime,\n this._period,\n ),\n \"replace\",\n );\n }\n\n /**\n *\n */\n public getCurrentTime(): number {\n return this.timeDimension.getCurrentTime();\n }\n\n /**\n * @param time\n */\n public setCurrentTime(time: number): any {\n this.timeDimension.setCurrentTime(new Date(time));\n }\n\n /**\n *\n */\n public autoApdate(): boolean {\n return (\n this.getUpperTimeLimit() === null ||\n this.getUpperTimeLimit() === this.timeDimension.getCurrentTime()\n );\n }\n\n /**\n */\n public getLowerTimeLimit(): number {\n return this.timeDimension.getAvailableTimes()[0];\n }\n\n /**\n *\n */\n refreshTimeDimensionAtLastTime(time: number, range: number) {\n const endTime = new Date(time);\n const startTime = new Date(time - range);\n this.refreshAvailableTimes(startTime, endTime);\n }\n\n /**\n *\n */\n getUpperTimeLimit(): number {\n const length = this.timeDimension.getAvailableTimes().length;\n return this.timeDimension.getAvailableTimes()[length - 1];\n }\n\n /**\n *\n * @param time\n */\n setTransitionTime(time: number) {\n this.player.setTransitionTime(time);\n }\n\n /**\n *\n * @param step\n */\n play(step: number) {\n this.player.start(step);\n }\n\n /**\n * @param looped\n */\n setPlayerToLoop(looped: boolean): void {\n this.player.setLooped(looped);\n }\n\n /**\n *\n * @param value\n */\n set period(value: string) {\n this._period = value;\n }\n\n /**\n */\n applyTimeDimensionPlugin(): void {\n if (!this.map) {\n alert(\"Impossibile aggiungere il plugin timedimension\");\n } else {\n this.timeDimension = new L.TimeDimension(this.timeDimensionOptions);\n this.player = new L.TimeDimension.Player(\n this.playerOptions,\n this.timeDimension,\n );\n this.timeDimensionControl = new L.Control.TimeDimension({\n player: this.player,\n loopButton: true,\n playReverseButton: true,\n timeSlider: this.isMd(),\n speedSlider: this.isLg(),\n position: this.position,\n minSpeed: this.minSpeed,\n maxSpeed: this.maxSpeed,\n timeZones: [\"Local\", \"UTC\"],\n });\n\n this.player.on(\"play\", (eo) => {\n this._playEnabled = true;\n });\n this.player.on(\"stop\", (eo) => {\n this._playEnabled = false;\n });\n this.timeDimension.on(\"timeload\", () => {\n this.onLoadTimeChaged();\n });\n this.timeDimension.on(\"availabletimeschanged\", (availableTimes) => {\n this.onAvailableTimeChangedChaged();\n });\n this.map.timeDimension = this.timeDimension;\n this.map.addControl(this.timeDimensionControl);\n }\n }\n\n /**\n *\n */\n protected onLoadTimeChaged(): void {}\n\n /**\n *\n */\n protected onAvailableTimeChangedChaged(): void {}\n\n /**\n *\n */\n private isMd(): boolean {\n return this.breakpointObserver.isMatched([\"(min-width: 768px)\"]);\n }\n\n /**\n *\n */\n private isLg(): boolean {\n return this.breakpointObserver.isMatched([\"(min-width: 992px)\"]);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\n/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n})\nexport class NgxLeafletTimedimensionPluginModule {}\n","/*\n * Public API Surface of ngx-leaflet-timedimension-plugin\n */\n\nexport * from \"./lib/ngx-leaflet-timedimension-plugin.service\";\nexport * from \"./lib/ngx-leaflet-timedimension-plugin.module\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}