@ionic/angular 8.0.0-dev.11709245047.1565a499 → 8.0.0-dev.11711035263.183d2423
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/common/directives/control-value-accessors/value-accessor.d.ts +1 -1
- package/common/directives/navigation/back-button.d.ts +1 -4
- package/common/directives/navigation/nav.d.ts +10 -2
- package/common/directives/navigation/router-link-delegate.d.ts +2 -2
- package/common/directives/navigation/router-outlet.d.ts +6 -6
- package/common/directives/navigation/tabs.d.ts +5 -5
- package/common/overlays/modal.d.ts +1 -1
- package/common/overlays/popover.d.ts +1 -1
- package/common/providers/dom-controller.d.ts +1 -1
- package/css/palettes/dark.always.css.map +1 -0
- package/css/{themes → palettes}/dark.class.css +4 -4
- package/css/palettes/dark.class.css.map +1 -0
- package/css/palettes/dark.system.css.map +1 -0
- package/css/palettes/high-contrast-dark.always.css.map +1 -0
- package/css/{themes → palettes}/high-contrast-dark.class.css +10 -10
- package/css/palettes/high-contrast-dark.class.css.map +1 -0
- package/css/palettes/high-contrast-dark.system.css.map +1 -0
- package/css/palettes/high-contrast.always.css.map +1 -0
- package/css/{themes → palettes}/high-contrast.class.css +31 -31
- package/css/palettes/high-contrast.class.css.map +1 -0
- package/css/palettes/high-contrast.system.css.map +1 -0
- package/directives/control-value-accessors/boolean-value-accessor.d.ts +1 -1
- package/directives/control-value-accessors/numeric-value-accessor.d.ts +1 -1
- package/directives/control-value-accessors/select-value-accessor.d.ts +1 -1
- package/directives/control-value-accessors/text-value-accessor.d.ts +1 -1
- package/directives/navigation/ion-back-button.d.ts +1 -1
- package/directives/navigation/ion-nav.d.ts +1 -1
- package/directives/navigation/ion-router-outlet.d.ts +3 -3
- package/directives/navigation/ion-tabs.d.ts +1 -1
- package/directives/navigation/router-link-delegate.d.ts +2 -2
- package/directives/overlays/modal.d.ts +1 -1
- package/directives/overlays/popover.d.ts +1 -1
- package/directives/proxies-list.d.ts +1 -1
- package/directives/proxies.d.ts +89 -80
- package/directives/validators/max-validator.d.ts +1 -1
- package/directives/validators/min-validator.d.ts +1 -1
- package/esm2022/common/directives/control-value-accessors/value-accessor.mjs +145 -0
- package/esm2022/common/directives/navigation/back-button.mjs +61 -0
- package/esm2022/common/directives/navigation/nav-params.mjs +46 -0
- package/esm2022/common/directives/navigation/nav.mjs +49 -0
- package/esm2022/common/directives/navigation/router-link-delegate.mjs +123 -0
- package/esm2022/common/directives/navigation/router-outlet.mjs +480 -0
- package/esm2022/common/directives/navigation/stack-controller.mjs +280 -0
- package/esm2022/common/directives/navigation/tabs.mjs +174 -0
- package/esm2022/common/overlays/modal.mjs +91 -0
- package/esm2022/common/overlays/popover.mjs +83 -0
- package/esm2022/common/providers/angular-delegate.mjs +155 -0
- package/{esm2020 → esm2022}/common/providers/config.mjs +4 -4
- package/{esm2020 → esm2022}/common/providers/dom-controller.mjs +4 -4
- package/esm2022/common/providers/menu-controller.mjs +114 -0
- package/esm2022/common/providers/nav-controller.mjs +227 -0
- package/esm2022/common/providers/platform.mjs +257 -0
- package/esm2022/common/utils/overlay.mjs +26 -0
- package/esm2022/directives/control-value-accessors/boolean-value-accessor.mjs +41 -0
- package/esm2022/directives/control-value-accessors/numeric-value-accessor.mjs +49 -0
- package/esm2022/directives/control-value-accessors/select-value-accessor.mjs +38 -0
- package/esm2022/directives/control-value-accessors/text-value-accessor.mjs +37 -0
- package/{esm2020 → esm2022}/directives/navigation/ion-back-button.mjs +4 -4
- package/{esm2020 → esm2022}/directives/navigation/ion-nav.mjs +4 -4
- package/esm2022/directives/navigation/ion-router-outlet.mjs +52 -0
- package/esm2022/directives/navigation/ion-tabs.mjs +50 -0
- package/{esm2020 → esm2022}/directives/navigation/router-link-delegate.mjs +7 -7
- package/{esm2020 → esm2022}/directives/overlays/modal.mjs +5 -5
- package/{esm2020 → esm2022}/directives/overlays/popover.mjs +4 -4
- package/esm2022/directives/proxies-list.mjs +85 -0
- package/esm2022/directives/proxies.mjs +2234 -0
- package/{esm2020 → esm2022}/directives/validators/max-validator.mjs +4 -4
- package/{esm2020 → esm2022}/directives/validators/min-validator.mjs +4 -4
- package/{esm2020 → esm2022}/ionic-module.mjs +41 -41
- package/{esm2020 → esm2022}/providers/action-sheet-controller.mjs +4 -4
- package/{esm2020 → esm2022}/providers/alert-controller.mjs +4 -4
- package/{esm2020 → esm2022}/providers/animation-controller.mjs +4 -4
- package/esm2022/providers/gesture-controller.mjs +32 -0
- package/{esm2020 → esm2022}/providers/loading-controller.mjs +4 -4
- package/{esm2020 → esm2022}/providers/menu-controller.mjs +4 -4
- package/esm2022/providers/modal-controller.mjs +24 -0
- package/{esm2020 → esm2022}/providers/picker-controller.mjs +4 -4
- package/esm2022/providers/popover-controller.mjs +18 -0
- package/{esm2020 → esm2022}/providers/toast-controller.mjs +4 -4
- package/esm2022/standalone/directives/checkbox.mjs +74 -0
- package/esm2022/standalone/directives/datetime.mjs +93 -0
- package/esm2022/standalone/directives/icon.mjs +35 -0
- package/esm2022/standalone/directives/input.mjs +113 -0
- package/esm2022/standalone/directives/proxies.mjs +2138 -0
- package/esm2022/standalone/directives/radio-group.mjs +60 -0
- package/esm2022/standalone/directives/range.mjs +78 -0
- package/esm2022/standalone/directives/searchbar.mjs +82 -0
- package/esm2022/standalone/directives/segment.mjs +60 -0
- package/esm2022/standalone/directives/select.mjs +82 -0
- package/esm2022/standalone/directives/textarea.mjs +91 -0
- package/esm2022/standalone/directives/toggle.mjs +74 -0
- package/esm2022/standalone/navigation/back-button.mjs +32 -0
- package/esm2022/standalone/navigation/nav.mjs +28 -0
- package/{esm2020 → esm2022}/standalone/navigation/router-link-delegate.mjs +7 -7
- package/esm2022/standalone/navigation/router-outlet.mjs +60 -0
- package/esm2022/standalone/navigation/tabs.mjs +49 -0
- package/esm2022/standalone/overlays/modal.mjs +32 -0
- package/{esm2020 → esm2022}/standalone/overlays/popover.mjs +4 -4
- package/{esm2020 → esm2022}/standalone/providers/action-sheet-controller.mjs +4 -4
- package/{esm2020 → esm2022}/standalone/providers/alert-controller.mjs +4 -4
- package/{esm2020 → esm2022}/standalone/providers/animation-controller.mjs +4 -4
- package/esm2022/standalone/providers/gesture-controller.mjs +32 -0
- package/esm2022/standalone/providers/ionic-angular.mjs +38 -0
- package/{esm2020 → esm2022}/standalone/providers/loading-controller.mjs +4 -4
- package/{esm2020 → esm2022}/standalone/providers/menu-controller.mjs +4 -4
- package/esm2022/standalone/providers/modal-controller.mjs +26 -0
- package/{esm2020 → esm2022}/standalone/providers/picker-controller.mjs +4 -4
- package/esm2022/standalone/providers/popover-controller.mjs +20 -0
- package/{esm2020 → esm2022}/standalone/providers/toast-controller.mjs +4 -4
- package/{fesm2020 → fesm2022}/ionic-angular-common.mjs +221 -156
- package/fesm2022/ionic-angular-common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ionic-angular-standalone.mjs +616 -418
- package/fesm2022/ionic-angular-standalone.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ionic-angular.mjs +593 -391
- package/fesm2022/ionic-angular.mjs.map +1 -0
- package/ionic-module.d.ts +1 -1
- package/package.json +16 -26
- package/schematics/add/files/root/theme/variables.css +10 -247
- package/schematics/utils/config.js +0 -1
- package/standalone/directives/checkbox.d.ts +1 -1
- package/standalone/directives/datetime.d.ts +1 -1
- package/standalone/directives/icon.d.ts +1 -1
- package/standalone/directives/input.d.ts +1 -1
- package/standalone/directives/proxies.d.ts +78 -69
- package/standalone/directives/radio-group.d.ts +1 -1
- package/standalone/directives/range.d.ts +1 -1
- package/standalone/directives/searchbar.d.ts +1 -1
- package/standalone/directives/segment.d.ts +1 -1
- package/standalone/directives/select.d.ts +1 -1
- package/standalone/directives/textarea.d.ts +1 -1
- package/standalone/directives/toggle.d.ts +1 -1
- package/standalone/navigation/back-button.d.ts +1 -1
- package/standalone/navigation/nav.d.ts +1 -1
- package/standalone/navigation/router-link-delegate.d.ts +2 -2
- package/standalone/navigation/router-outlet.d.ts +3 -3
- package/standalone/navigation/tabs.d.ts +1 -1
- package/standalone/overlays/modal.d.ts +1 -1
- package/standalone/overlays/popover.d.ts +1 -1
- package/standalone/providers/ionic-angular.d.ts +2 -2
- package/css/themes/dark.always.css.map +0 -1
- package/css/themes/dark.class.css.map +0 -1
- package/css/themes/dark.system.css.map +0 -1
- package/css/themes/high-contrast-dark.always.css.map +0 -1
- package/css/themes/high-contrast-dark.class.css.map +0 -1
- package/css/themes/high-contrast-dark.system.css.map +0 -1
- package/css/themes/high-contrast.always.css.map +0 -1
- package/css/themes/high-contrast.class.css.map +0 -1
- package/css/themes/high-contrast.system.css.map +0 -1
- package/esm2020/common/directives/control-value-accessors/value-accessor.mjs +0 -141
- package/esm2020/common/directives/navigation/back-button.mjs +0 -59
- package/esm2020/common/directives/navigation/nav-params.mjs +0 -45
- package/esm2020/common/directives/navigation/nav.mjs +0 -47
- package/esm2020/common/directives/navigation/router-link-delegate.mjs +0 -111
- package/esm2020/common/directives/navigation/router-outlet.mjs +0 -470
- package/esm2020/common/directives/navigation/stack-controller.mjs +0 -272
- package/esm2020/common/directives/navigation/tabs.mjs +0 -172
- package/esm2020/common/overlays/modal.mjs +0 -87
- package/esm2020/common/overlays/popover.mjs +0 -79
- package/esm2020/common/providers/angular-delegate.mjs +0 -152
- package/esm2020/common/providers/menu-controller.mjs +0 -113
- package/esm2020/common/providers/nav-controller.mjs +0 -221
- package/esm2020/common/providers/platform.mjs +0 -254
- package/esm2020/common/utils/overlay.mjs +0 -25
- package/esm2020/directives/control-value-accessors/boolean-value-accessor.mjs +0 -41
- package/esm2020/directives/control-value-accessors/numeric-value-accessor.mjs +0 -48
- package/esm2020/directives/control-value-accessors/select-value-accessor.mjs +0 -38
- package/esm2020/directives/control-value-accessors/text-value-accessor.mjs +0 -37
- package/esm2020/directives/navigation/ion-router-outlet.mjs +0 -43
- package/esm2020/directives/navigation/ion-tabs.mjs +0 -47
- package/esm2020/directives/proxies-list.mjs +0 -84
- package/esm2020/directives/proxies.mjs +0 -2047
- package/esm2020/providers/gesture-controller.mjs +0 -31
- package/esm2020/providers/modal-controller.mjs +0 -24
- package/esm2020/providers/popover-controller.mjs +0 -18
- package/esm2020/standalone/directives/checkbox.mjs +0 -72
- package/esm2020/standalone/directives/datetime.mjs +0 -91
- package/esm2020/standalone/directives/icon.mjs +0 -33
- package/esm2020/standalone/directives/input.mjs +0 -111
- package/esm2020/standalone/directives/proxies.mjs +0 -1970
- package/esm2020/standalone/directives/radio-group.mjs +0 -58
- package/esm2020/standalone/directives/range.mjs +0 -76
- package/esm2020/standalone/directives/searchbar.mjs +0 -80
- package/esm2020/standalone/directives/segment.mjs +0 -58
- package/esm2020/standalone/directives/select.mjs +0 -80
- package/esm2020/standalone/directives/textarea.mjs +0 -89
- package/esm2020/standalone/directives/toggle.mjs +0 -72
- package/esm2020/standalone/navigation/back-button.mjs +0 -32
- package/esm2020/standalone/navigation/nav.mjs +0 -28
- package/esm2020/standalone/navigation/router-outlet.mjs +0 -51
- package/esm2020/standalone/navigation/tabs.mjs +0 -46
- package/esm2020/standalone/overlays/modal.mjs +0 -32
- package/esm2020/standalone/providers/gesture-controller.mjs +0 -31
- package/esm2020/standalone/providers/ionic-angular.mjs +0 -43
- package/esm2020/standalone/providers/modal-controller.mjs +0 -26
- package/esm2020/standalone/providers/popover-controller.mjs +0 -20
- package/fesm2015/ionic-angular-common.mjs +0 -2484
- package/fesm2015/ionic-angular-common.mjs.map +0 -1
- package/fesm2015/ionic-angular-standalone.mjs +0 -3146
- package/fesm2015/ionic-angular-standalone.mjs.map +0 -1
- package/fesm2015/ionic-angular.mjs +0 -2790
- package/fesm2015/ionic-angular.mjs.map +0 -1
- package/fesm2020/ionic-angular-common.mjs.map +0 -1
- package/fesm2020/ionic-angular-standalone.mjs.map +0 -1
- package/fesm2020/ionic-angular.mjs.map +0 -1
- package/test/README.md +0 -118
- package/css/{themes → palettes}/dark.always.css +0 -0
- package/css/{themes → palettes}/dark.css +0 -0
- package/css/{themes → palettes}/dark.css.map +0 -0
- package/css/{themes → palettes}/dark.system.css +0 -0
- package/css/{themes → palettes}/high-contrast-dark.always.css +1 -1
- package/css/{themes → palettes}/high-contrast-dark.css +0 -0
- package/css/{themes → palettes}/high-contrast-dark.css.map +0 -0
- package/css/{themes → palettes}/high-contrast-dark.system.css +1 -1
- package/css/{themes → palettes}/high-contrast.always.css +25 -25
- package/css/{themes → palettes}/high-contrast.css +0 -0
- package/css/{themes → palettes}/high-contrast.css.map +0 -0
- package/css/{themes → palettes}/high-contrast.system.css +25 -25
- /package/{esm2020 → esm2022}/app-initialize.mjs +0 -0
- /package/{esm2020 → esm2022}/common/directives/control-value-accessors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/common/directives/navigation/stack-utils.mjs +0 -0
- /package/{esm2020 → esm2022}/common/index.mjs +0 -0
- /package/{esm2020 → esm2022}/common/ionic-angular-common.mjs +0 -0
- /package/{esm2020 → esm2022}/common/types/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/common/types/ionic-lifecycle-hooks.mjs +0 -0
- /package/{esm2020 → esm2022}/common/utils/proxy.mjs +0 -0
- /package/{esm2020 → esm2022}/common/utils/routing.mjs +0 -0
- /package/{esm2020 → esm2022}/common/utils/util.mjs +0 -0
- /package/{esm2020 → esm2022}/directives/angular-component-lib/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/directives/control-value-accessors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/directives/validators/index.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ionic-angular.mjs +0 -0
- /package/{esm2020 → esm2022}/standalone/directives/angular-component-lib/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/standalone/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/standalone/index.mjs +0 -0
- /package/{esm2020 → esm2022}/standalone/ionic-angular-standalone.mjs +0 -0
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ContentChild, Directive, TemplateRef, } from '@angular/core';
|
|
3
|
-
import { ProxyCmp, proxyOutputs } from '../utils/proxy';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
const POPOVER_INPUTS = [
|
|
6
|
-
'alignment',
|
|
7
|
-
'animated',
|
|
8
|
-
'arrow',
|
|
9
|
-
'keepContentsMounted',
|
|
10
|
-
'backdropDismiss',
|
|
11
|
-
'cssClass',
|
|
12
|
-
'dismissOnSelect',
|
|
13
|
-
'enterAnimation',
|
|
14
|
-
'event',
|
|
15
|
-
'isOpen',
|
|
16
|
-
'keyboardClose',
|
|
17
|
-
'leaveAnimation',
|
|
18
|
-
'mode',
|
|
19
|
-
'showBackdrop',
|
|
20
|
-
'translucent',
|
|
21
|
-
'trigger',
|
|
22
|
-
'triggerAction',
|
|
23
|
-
'reference',
|
|
24
|
-
'size',
|
|
25
|
-
'side',
|
|
26
|
-
];
|
|
27
|
-
const POPOVER_METHODS = ['present', 'dismiss', 'onDidDismiss', 'onWillDismiss'];
|
|
28
|
-
let IonPopover = class IonPopover {
|
|
29
|
-
constructor(c, r, z) {
|
|
30
|
-
this.z = z;
|
|
31
|
-
this.isCmpOpen = false;
|
|
32
|
-
this.el = r.nativeElement;
|
|
33
|
-
this.el.addEventListener('ionMount', () => {
|
|
34
|
-
this.isCmpOpen = true;
|
|
35
|
-
c.detectChanges();
|
|
36
|
-
});
|
|
37
|
-
this.el.addEventListener('didDismiss', () => {
|
|
38
|
-
this.isCmpOpen = false;
|
|
39
|
-
c.detectChanges();
|
|
40
|
-
});
|
|
41
|
-
proxyOutputs(this, this.el, [
|
|
42
|
-
'ionPopoverDidPresent',
|
|
43
|
-
'ionPopoverWillPresent',
|
|
44
|
-
'ionPopoverWillDismiss',
|
|
45
|
-
'ionPopoverDidDismiss',
|
|
46
|
-
'didPresent',
|
|
47
|
-
'willPresent',
|
|
48
|
-
'willDismiss',
|
|
49
|
-
'didDismiss',
|
|
50
|
-
]);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
/** @nocollapse */ IonPopover.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: IonPopover, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
54
|
-
/** @nocollapse */ IonPopover.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: IonPopover, selector: "ion-popover", inputs: { alignment: "alignment", animated: "animated", arrow: "arrow", keepContentsMounted: "keepContentsMounted", backdropDismiss: "backdropDismiss", cssClass: "cssClass", dismissOnSelect: "dismissOnSelect", enterAnimation: "enterAnimation", event: "event", isOpen: "isOpen", keyboardClose: "keyboardClose", leaveAnimation: "leaveAnimation", mode: "mode", showBackdrop: "showBackdrop", translucent: "translucent", trigger: "trigger", triggerAction: "triggerAction", reference: "reference", size: "size", side: "side" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
55
|
-
IonPopover = __decorate([
|
|
56
|
-
ProxyCmp({
|
|
57
|
-
inputs: POPOVER_INPUTS,
|
|
58
|
-
methods: POPOVER_METHODS,
|
|
59
|
-
})
|
|
60
|
-
/**
|
|
61
|
-
* @Component extends from @Directive
|
|
62
|
-
* so by defining the inputs here we
|
|
63
|
-
* do not need to re-define them for the
|
|
64
|
-
* lazy loaded popover.
|
|
65
|
-
*/
|
|
66
|
-
], IonPopover);
|
|
67
|
-
export { IonPopover };
|
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: IonPopover, decorators: [{
|
|
69
|
-
type: Directive,
|
|
70
|
-
args: [{
|
|
71
|
-
selector: 'ion-popover',
|
|
72
|
-
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
73
|
-
inputs: POPOVER_INPUTS,
|
|
74
|
-
}]
|
|
75
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { template: [{
|
|
76
|
-
type: ContentChild,
|
|
77
|
-
args: [TemplateRef, { static: false }]
|
|
78
|
-
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbW1vbi9zcmMvb3ZlcmxheXMvcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBSVQsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBcUN4RCxNQUFNLGNBQWMsR0FBRztJQUNyQixXQUFXO0lBQ1gsVUFBVTtJQUNWLE9BQU87SUFDUCxxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxRQUFRO0lBQ1IsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixNQUFNO0lBQ04sY0FBYztJQUNkLGFBQWE7SUFDYixTQUFTO0lBQ1QsZUFBZTtJQUNmLFdBQVc7SUFDWCxNQUFNO0lBQ04sTUFBTTtDQUNQLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBbUJuRSxVQUFVLFNBQVYsVUFBVTtJQVFyQixZQUFZLENBQW9CLEVBQUUsQ0FBYSxFQUFZLENBQVM7UUFBVCxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBSnBFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFLaEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRTFCLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzFCLHNCQUFzQjtZQUN0Qix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBQ3ZCLHNCQUFzQjtZQUN0QixZQUFZO1lBQ1osYUFBYTtZQUNiLGFBQWE7WUFDYixZQUFZO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUE7MkhBOUJZLFVBQVU7K0dBQVYsVUFBVSxtbUJBRVAsV0FBVztBQUZkLFVBQVU7SUFqQnRCLFFBQVEsQ0FBQztRQUNSLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUM7SUFDRjs7Ozs7T0FLRztHQVFVLFVBQVUsQ0E4QnRCO1NBOUJZLFVBQVU7NEZBQVYsVUFBVTtrQkFQdEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsdUVBQXVFO29CQUN2RSxNQUFNLEVBQUUsY0FBYztpQkFDdkI7c0pBSytDLFFBQVE7c0JBQXJELFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBOZ1pvbmUsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50cyB9IGZyb20gJ0Bpb25pYy9jb3JlL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBQcm94eUNtcCwgcHJveHlPdXRwdXRzIH0gZnJvbSAnLi4vdXRpbHMvcHJveHknO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW9uUG9wb3ZlciBleHRlbmRzIENvbXBvbmVudHMuSW9uUG9wb3ZlciB7XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBwcmVzZW50ZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyRGlkUHJlc2VudDogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PjtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgYmVmb3JlIHRoZSBwb3BvdmVyIGhhcyBwcmVzZW50ZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBkaXNtaXNzZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyV2lsbERpc21pc3M6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBkaXNtaXNzZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PjtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIHBvcG92ZXIgaGFzIHByZXNlbnRlZC4gU2hvcnRoYW5kIGZvciBpb25Qb3BvdmVyRGlkUHJlc2VudC5cbiAgICovXG4gIGRpZFByZXNlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgcG9wb3ZlciBoYXMgcHJlc2VudGVkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJXaWxsUHJlc2VudC5cbiAgICovXG4gIHdpbGxQcmVzZW50OiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+O1xuICAvKipcbiAgICogRW1pdHRlZCBhZnRlciB0aGUgcG9wb3ZlciBoYXMgcHJlc2VudGVkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJXaWxsRGlzbWlzcy5cbiAgICovXG4gIHdpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+O1xuICAvKipcbiAgICogRW1pdHRlZCBhZnRlciB0aGUgcG9wb3ZlciBoYXMgZGlzbWlzc2VkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJEaWREaXNtaXNzLlxuICAgKi9cbiAgZGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50Pjtcbn1cblxuY29uc3QgUE9QT1ZFUl9JTlBVVFMgPSBbXG4gICdhbGlnbm1lbnQnLFxuICAnYW5pbWF0ZWQnLFxuICAnYXJyb3cnLFxuICAna2VlcENvbnRlbnRzTW91bnRlZCcsXG4gICdiYWNrZHJvcERpc21pc3MnLFxuICAnY3NzQ2xhc3MnLFxuICAnZGlzbWlzc09uU2VsZWN0JyxcbiAgJ2VudGVyQW5pbWF0aW9uJyxcbiAgJ2V2ZW50JyxcbiAgJ2lzT3BlbicsXG4gICdrZXlib2FyZENsb3NlJyxcbiAgJ2xlYXZlQW5pbWF0aW9uJyxcbiAgJ21vZGUnLFxuICAnc2hvd0JhY2tkcm9wJyxcbiAgJ3RyYW5zbHVjZW50JyxcbiAgJ3RyaWdnZXInLFxuICAndHJpZ2dlckFjdGlvbicsXG4gICdyZWZlcmVuY2UnLFxuICAnc2l6ZScsXG4gICdzaWRlJyxcbl07XG5cbmNvbnN0IFBPUE9WRVJfTUVUSE9EUyA9IFsncHJlc2VudCcsICdkaXNtaXNzJywgJ29uRGlkRGlzbWlzcycsICdvbldpbGxEaXNtaXNzJ107XG5cbkBQcm94eUNtcCh7XG4gIGlucHV0czogUE9QT1ZFUl9JTlBVVFMsXG4gIG1ldGhvZHM6IFBPUE9WRVJfTUVUSE9EUyxcbn0pXG4vKipcbiAqIEBDb21wb25lbnQgZXh0ZW5kcyBmcm9tIEBEaXJlY3RpdmVcbiAqIHNvIGJ5IGRlZmluaW5nIHRoZSBpbnB1dHMgaGVyZSB3ZVxuICogZG8gbm90IG5lZWQgdG8gcmUtZGVmaW5lIHRoZW0gZm9yIHRoZVxuICogbGF6eSBsb2FkZWQgcG9wb3Zlci5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW9uLXBvcG92ZXInLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFBPUE9WRVJfSU5QVVRTLFxufSlcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgSW9uUG9wb3ZlciB7XG4gIC8vIFRPRE8oRlctMjgyNyk6IHR5cGVcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGlzQ21wT3BlbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoYzogQ2hhbmdlRGV0ZWN0b3JSZWYsIHI6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCB6OiBOZ1pvbmUpIHtcbiAgICB0aGlzLmVsID0gci5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb3VudCcsICgpID0+IHtcbiAgICAgIHRoaXMuaXNDbXBPcGVuID0gdHJ1ZTtcbiAgICAgIGMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignZGlkRGlzbWlzcycsICgpID0+IHtcbiAgICAgIHRoaXMuaXNDbXBPcGVuID0gZmFsc2U7XG4gICAgICBjLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICBwcm94eU91dHB1dHModGhpcywgdGhpcy5lbCwgW1xuICAgICAgJ2lvblBvcG92ZXJEaWRQcmVzZW50JyxcbiAgICAgICdpb25Qb3BvdmVyV2lsbFByZXNlbnQnLFxuICAgICAgJ2lvblBvcG92ZXJXaWxsRGlzbWlzcycsXG4gICAgICAnaW9uUG9wb3ZlckRpZERpc21pc3MnLFxuICAgICAgJ2RpZFByZXNlbnQnLFxuICAgICAgJ3dpbGxQcmVzZW50JyxcbiAgICAgICd3aWxsRGlzbWlzcycsXG4gICAgICAnZGlkRGlzbWlzcycsXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { ApplicationRef, NgZone, Injectable, Injector, inject, createComponent, InjectionToken, } from '@angular/core';
|
|
2
|
-
import { LIFECYCLE_DID_ENTER, LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_WILL_UNLOAD, } from '@ionic/core/components';
|
|
3
|
-
import { NavParams } from '../directives/navigation/nav-params';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
// TODO(FW-2827): types
|
|
6
|
-
export class AngularDelegate {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.zone = inject(NgZone);
|
|
9
|
-
this.applicationRef = inject(ApplicationRef);
|
|
10
|
-
}
|
|
11
|
-
create(environmentInjector, injector, elementReferenceKey) {
|
|
12
|
-
return new AngularFrameworkDelegate(environmentInjector, injector, this.applicationRef, this.zone, elementReferenceKey);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/** @nocollapse */ AngularDelegate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16
|
-
/** @nocollapse */ AngularDelegate.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate });
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate, decorators: [{
|
|
18
|
-
type: Injectable
|
|
19
|
-
}] });
|
|
20
|
-
export class AngularFrameworkDelegate {
|
|
21
|
-
constructor(environmentInjector, injector, applicationRef, zone, elementReferenceKey) {
|
|
22
|
-
this.environmentInjector = environmentInjector;
|
|
23
|
-
this.injector = injector;
|
|
24
|
-
this.applicationRef = applicationRef;
|
|
25
|
-
this.zone = zone;
|
|
26
|
-
this.elementReferenceKey = elementReferenceKey;
|
|
27
|
-
this.elRefMap = new WeakMap();
|
|
28
|
-
this.elEventsMap = new WeakMap();
|
|
29
|
-
}
|
|
30
|
-
attachViewToDom(container, component, params, cssClasses) {
|
|
31
|
-
return this.zone.run(() => {
|
|
32
|
-
return new Promise((resolve) => {
|
|
33
|
-
const componentProps = {
|
|
34
|
-
...params,
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Ionic Angular passes a reference to a modal
|
|
38
|
-
* or popover that can be accessed using a
|
|
39
|
-
* variable in the overlay component. If
|
|
40
|
-
* elementReferenceKey is defined, then we should
|
|
41
|
-
* pass a reference to the component using
|
|
42
|
-
* elementReferenceKey as the key.
|
|
43
|
-
*/
|
|
44
|
-
if (this.elementReferenceKey !== undefined) {
|
|
45
|
-
componentProps[this.elementReferenceKey] = container;
|
|
46
|
-
}
|
|
47
|
-
const el = attachView(this.zone, this.environmentInjector, this.injector, this.applicationRef, this.elRefMap, this.elEventsMap, container, component, componentProps, cssClasses, this.elementReferenceKey);
|
|
48
|
-
resolve(el);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
removeViewFromDom(_container, component) {
|
|
53
|
-
return this.zone.run(() => {
|
|
54
|
-
return new Promise((resolve) => {
|
|
55
|
-
const componentRef = this.elRefMap.get(component);
|
|
56
|
-
if (componentRef) {
|
|
57
|
-
componentRef.destroy();
|
|
58
|
-
this.elRefMap.delete(component);
|
|
59
|
-
const unbindEvents = this.elEventsMap.get(component);
|
|
60
|
-
if (unbindEvents) {
|
|
61
|
-
unbindEvents();
|
|
62
|
-
this.elEventsMap.delete(component);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
resolve();
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
export const attachView = (zone, environmentInjector, injector, applicationRef, elRefMap, elEventsMap, container, component, params, cssClasses, elementReferenceKey) => {
|
|
71
|
-
/**
|
|
72
|
-
* Wraps the injector with a custom injector that
|
|
73
|
-
* provides NavParams to the component.
|
|
74
|
-
*
|
|
75
|
-
* NavParams is a legacy feature from Ionic v3 that allows
|
|
76
|
-
* Angular developers to provide data to a component
|
|
77
|
-
* and access it by providing NavParams as a dependency
|
|
78
|
-
* in the constructor.
|
|
79
|
-
*
|
|
80
|
-
* The modern approach is to access the data directly
|
|
81
|
-
* from the component's class instance.
|
|
82
|
-
*/
|
|
83
|
-
const childInjector = Injector.create({
|
|
84
|
-
providers: getProviders(params),
|
|
85
|
-
parent: injector,
|
|
86
|
-
});
|
|
87
|
-
const componentRef = createComponent(component, {
|
|
88
|
-
environmentInjector,
|
|
89
|
-
elementInjector: childInjector,
|
|
90
|
-
});
|
|
91
|
-
const instance = componentRef.instance;
|
|
92
|
-
const hostElement = componentRef.location.nativeElement;
|
|
93
|
-
if (params) {
|
|
94
|
-
/**
|
|
95
|
-
* For modals and popovers, a reference to the component is
|
|
96
|
-
* added to `params` during the call to attachViewToDom. If
|
|
97
|
-
* a reference using this name is already set, this means
|
|
98
|
-
* the app is trying to use the name as a component prop,
|
|
99
|
-
* which will cause collisions.
|
|
100
|
-
*/
|
|
101
|
-
if (elementReferenceKey && instance[elementReferenceKey] !== undefined) {
|
|
102
|
-
console.error(`[Ionic Error]: ${elementReferenceKey} is a reserved property when using ${container.tagName.toLowerCase()}. Rename or remove the "${elementReferenceKey}" property from ${component.name}.`);
|
|
103
|
-
}
|
|
104
|
-
Object.assign(instance, params);
|
|
105
|
-
}
|
|
106
|
-
if (cssClasses) {
|
|
107
|
-
for (const cssClass of cssClasses) {
|
|
108
|
-
hostElement.classList.add(cssClass);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
const unbindEvents = bindLifecycleEvents(zone, instance, hostElement);
|
|
112
|
-
container.appendChild(hostElement);
|
|
113
|
-
applicationRef.attachView(componentRef.hostView);
|
|
114
|
-
elRefMap.set(hostElement, componentRef);
|
|
115
|
-
elEventsMap.set(hostElement, unbindEvents);
|
|
116
|
-
return hostElement;
|
|
117
|
-
};
|
|
118
|
-
const LIFECYCLES = [
|
|
119
|
-
LIFECYCLE_WILL_ENTER,
|
|
120
|
-
LIFECYCLE_DID_ENTER,
|
|
121
|
-
LIFECYCLE_WILL_LEAVE,
|
|
122
|
-
LIFECYCLE_DID_LEAVE,
|
|
123
|
-
LIFECYCLE_WILL_UNLOAD,
|
|
124
|
-
];
|
|
125
|
-
export const bindLifecycleEvents = (zone, instance, element) => {
|
|
126
|
-
return zone.run(() => {
|
|
127
|
-
const unregisters = LIFECYCLES.filter((eventName) => typeof instance[eventName] === 'function').map((eventName) => {
|
|
128
|
-
const handler = (ev) => instance[eventName](ev.detail);
|
|
129
|
-
element.addEventListener(eventName, handler);
|
|
130
|
-
return () => element.removeEventListener(eventName, handler);
|
|
131
|
-
});
|
|
132
|
-
return () => unregisters.forEach((fn) => fn());
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
const NavParamsToken = new InjectionToken('NavParamsToken');
|
|
136
|
-
const getProviders = (params) => {
|
|
137
|
-
return [
|
|
138
|
-
{
|
|
139
|
-
provide: NavParamsToken,
|
|
140
|
-
useValue: params,
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
provide: NavParams,
|
|
144
|
-
useFactory: provideNavParamsInjectable,
|
|
145
|
-
deps: [NavParamsToken],
|
|
146
|
-
},
|
|
147
|
-
];
|
|
148
|
-
};
|
|
149
|
-
const provideNavParamsInjectable = (params) => {
|
|
150
|
-
return new NavParams(params);
|
|
151
|
-
};
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kZWxlZ2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbW1vbi9zcmMvcHJvdmlkZXJzL2FuZ3VsYXItZGVsZWdhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFFUixNQUFNLEVBQ04sZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFaEUsdUJBQXVCO0FBR3ZCLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRVUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQWVqRDtJQWJDLE1BQU0sQ0FDSixtQkFBd0MsRUFDeEMsUUFBa0IsRUFDbEIsbUJBQTRCO1FBRTVCLE9BQU8sSUFBSSx3QkFBd0IsQ0FDakMsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsSUFBSSxFQUNULG1CQUFtQixDQUNwQixDQUFDO0lBQ0osQ0FBQzs7Z0lBaEJVLGVBQWU7b0lBQWYsZUFBZTs0RkFBZixlQUFlO2tCQUQzQixVQUFVOztBQW9CWCxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQ1UsbUJBQXdDLEVBQ3hDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLElBQVksRUFDWixtQkFBNEI7UUFKNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FB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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgTmdab25lLFxuICBJbmplY3RhYmxlLFxuICBJbmplY3RvcixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW5qZWN0LFxuICBjcmVhdGVDb21wb25lbnQsXG4gIEluamVjdGlvblRva2VuLFxuICBDb21wb25lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRGVsZWdhdGUsXG4gIExJRkVDWUNMRV9ESURfRU5URVIsXG4gIExJRkVDWUNMRV9ESURfTEVBVkUsXG4gIExJRkVDWUNMRV9XSUxMX0VOVEVSLFxuICBMSUZFQ1lDTEVfV0lMTF9MRUFWRSxcbiAgTElGRUNZQ0xFX1dJTExfVU5MT0FELFxufSBmcm9tICdAaW9uaWMvY29yZS9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgTmF2UGFyYW1zIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9uYXZpZ2F0aW9uL25hdi1wYXJhbXMnO1xuXG4vLyBUT0RPKEZXLTI4MjcpOiB0eXBlc1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQW5ndWxhckRlbGVnYXRlIHtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgYXBwbGljYXRpb25SZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuXG4gIGNyZWF0ZShcbiAgICBlbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbGVtZW50UmVmZXJlbmNlS2V5Pzogc3RyaW5nXG4gICk6IEFuZ3VsYXJGcmFtZXdvcmtEZWxlZ2F0ZSB7XG4gICAgcmV0dXJuIG5ldyBBbmd1bGFyRnJhbWV3b3JrRGVsZWdhdGUoXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgaW5qZWN0b3IsXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLFxuICAgICAgdGhpcy56b25lLFxuICAgICAgZWxlbWVudFJlZmVyZW5jZUtleVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGcmFtZXdvcmtEZWxlZ2F0ZSBpbXBsZW1lbnRzIEZyYW1ld29ya0RlbGVnYXRlIHtcbiAgcHJpdmF0ZSBlbFJlZk1hcCA9IG5ldyBXZWFrTWFwPEhUTUxFbGVtZW50LCBDb21wb25lbnRSZWY8YW55Pj4oKTtcbiAgcHJpdmF0ZSBlbEV2ZW50c01hcCA9IG5ldyBXZWFrTWFwPEhUTUxFbGVtZW50LCAoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWZlcmVuY2VLZXk/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIGF0dGFjaFZpZXdUb0RvbShjb250YWluZXI6IGFueSwgY29tcG9uZW50OiBhbnksIHBhcmFtcz86IGFueSwgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UHJvcHMgPSB7XG4gICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJb25pYyBBbmd1bGFyIHBhc3NlcyBhIHJlZmVyZW5jZSB0byBhIG1vZGFsXG4gICAgICAgICAqIG9yIHBvcG92ZXIgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgYVxuICAgICAgICAgKiB2YXJpYWJsZSBpbiB0aGUgb3ZlcmxheSBjb21wb25lbnQuIElmXG4gICAgICAgICAqIGVsZW1lbnRSZWZlcmVuY2VLZXkgaXMgZGVmaW5lZCwgdGhlbiB3ZSBzaG91bGRcbiAgICAgICAgICogcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IHVzaW5nXG4gICAgICAgICAqIGVsZW1lbnRSZWZlcmVuY2VLZXkgYXMgdGhlIGtleS5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWZlcmVuY2VLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXBvbmVudFByb3BzW3RoaXMuZWxlbWVudFJlZmVyZW5jZUtleV0gPSBjb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbCA9IGF0dGFjaFZpZXcoXG4gICAgICAgICAgdGhpcy56b25lLFxuICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYsXG4gICAgICAgICAgdGhpcy5lbFJlZk1hcCxcbiAgICAgICAgICB0aGlzLmVsRXZlbnRzTWFwLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgY29tcG9uZW50UHJvcHMsXG4gICAgICAgICAgY3NzQ2xhc3NlcyxcbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWZlcmVuY2VLZXlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzb2x2ZShlbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZVZpZXdGcm9tRG9tKF9jb250YWluZXI6IGFueSwgY29tcG9uZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5lbFJlZk1hcC5nZXQoY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5lbFJlZk1hcC5kZWxldGUoY29tcG9uZW50KTtcbiAgICAgICAgICBjb25zdCB1bmJpbmRFdmVudHMgPSB0aGlzLmVsRXZlbnRzTWFwLmdldChjb21wb25lbnQpO1xuICAgICAgICAgIGlmICh1bmJpbmRFdmVudHMpIHtcbiAgICAgICAgICAgIHVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy5lbEV2ZW50c01hcC5kZWxldGUoY29tcG9uZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGF0dGFjaFZpZXcgPSAoXG4gIHpvbmU6IE5nWm9uZSxcbiAgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gIGVsUmVmTWFwOiBXZWFrTWFwPEhUTUxFbGVtZW50LCBDb21wb25lbnRSZWY8YW55Pj4sXG4gIGVsRXZlbnRzTWFwOiBXZWFrTWFwPEhUTUxFbGVtZW50LCAoKSA9PiB2b2lkPixcbiAgY29udGFpbmVyOiBhbnksXG4gIGNvbXBvbmVudDogYW55LFxuICBwYXJhbXM6IGFueSxcbiAgY3NzQ2xhc3Nlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGVsZW1lbnRSZWZlcmVuY2VLZXk6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogYW55ID0+IHtcbiAgLyoqXG4gICAqIFdyYXBzIHRoZSBpbmplY3RvciB3aXRoIGEgY3VzdG9tIGluamVjdG9yIHRoYXRcbiAgICogcHJvdmlkZXMgTmF2UGFyYW1zIHRvIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE5hdlBhcmFtcyBpcyBhIGxlZ2FjeSBmZWF0dXJlIGZyb20gSW9uaWMgdjMgdGhhdCBhbGxvd3NcbiAgICogQW5ndWxhciBkZXZlbG9wZXJzIHRvIHByb3ZpZGUgZGF0YSB0byBhIGNvbXBvbmVudFxuICAgKiBhbmQgYWNjZXNzIGl0IGJ5IHByb3ZpZGluZyBOYXZQYXJhbXMgYXMgYSBkZXBlbmRlbmN5XG4gICAqIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogVGhlIG1vZGVybiBhcHByb2FjaCBpcyB0byBhY2Nlc3MgdGhlIGRhdGEgZGlyZWN0bHlcbiAgICogZnJvbSB0aGUgY29tcG9uZW50J3MgY2xhc3MgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICBwcm92aWRlcnM6IGdldFByb3ZpZGVycyhwYXJhbXMpLFxuICAgIHBhcmVudDogaW5qZWN0b3IsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudDxhbnk+KGNvbXBvbmVudCwge1xuICAgIGVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgZWxlbWVudEluamVjdG9yOiBjaGlsZEluamVjdG9yLFxuICB9KTtcblxuICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcblxuICBpZiAocGFyYW1zKSB7XG4gICAgLyoqXG4gICAgICogRm9yIG1vZGFscyBhbmQgcG9wb3ZlcnMsIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgaXNcbiAgICAgKiBhZGRlZCB0byBgcGFyYW1zYCBkdXJpbmcgdGhlIGNhbGwgdG8gYXR0YWNoVmlld1RvRG9tLiBJZlxuICAgICAqIGEgcmVmZXJlbmNlIHVzaW5nIHRoaXMgbmFtZSBpcyBhbHJlYWR5IHNldCwgdGhpcyBtZWFuc1xuICAgICAqIHRoZSBhcHAgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgbmFtZSBhcyBhIGNvbXBvbmVudCBwcm9wLFxuICAgICAqIHdoaWNoIHdpbGwgY2F1c2UgY29sbGlzaW9ucy5cbiAgICAgKi9cbiAgICBpZiAoZWxlbWVudFJlZmVyZW5jZUtleSAmJiBpbnN0YW5jZVtlbGVtZW50UmVmZXJlbmNlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgW0lvbmljIEVycm9yXTogJHtlbGVtZW50UmVmZXJlbmNlS2V5fSBpcyBhIHJlc2VydmVkIHByb3BlcnR5IHdoZW4gdXNpbmcgJHtjb250YWluZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpfS4gUmVuYW1lIG9yIHJlbW92ZSB0aGUgXCIke2VsZW1lbnRSZWZlcmVuY2VLZXl9XCIgcHJvcGVydHkgZnJvbSAke1xuICAgICAgICAgIGNvbXBvbmVudC5uYW1lXG4gICAgICAgIH0uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBwYXJhbXMpO1xuICB9XG4gIGlmIChjc3NDbGFzc2VzKSB7XG4gICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBjc3NDbGFzc2VzKSB7XG4gICAgICBob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdW5iaW5kRXZlbnRzID0gYmluZExpZmVjeWNsZUV2ZW50cyh6b25lLCBpbnN0YW5jZSwgaG9zdEVsZW1lbnQpO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaG9zdEVsZW1lbnQpO1xuXG4gIGFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcblxuICBlbFJlZk1hcC5zZXQoaG9zdEVsZW1lbnQsIGNvbXBvbmVudFJlZik7XG4gIGVsRXZlbnRzTWFwLnNldChob3N0RWxlbWVudCwgdW5iaW5kRXZlbnRzKTtcbiAgcmV0dXJuIGhvc3RFbGVtZW50O1xufTtcblxuY29uc3QgTElGRUNZQ0xFUyA9IFtcbiAgTElGRUNZQ0xFX1dJTExfRU5URVIsXG4gIExJRkVDWUNMRV9ESURfRU5URVIsXG4gIExJRkVDWUNMRV9XSUxMX0xFQVZFLFxuICBMSUZFQ1lDTEVfRElEX0xFQVZFLFxuICBMSUZFQ1lDTEVfV0lMTF9VTkxPQUQsXG5dO1xuXG5leHBvcnQgY29uc3QgYmluZExpZmVjeWNsZUV2ZW50cyA9ICh6b25lOiBOZ1pvbmUsIGluc3RhbmNlOiBhbnksIGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogKCgpID0+IHZvaWQpID0+IHtcbiAgcmV0dXJuIHpvbmUucnVuKCgpID0+IHtcbiAgICBjb25zdCB1bnJlZ2lzdGVycyA9IExJRkVDWUNMRVMuZmlsdGVyKChldmVudE5hbWUpID0+IHR5cGVvZiBpbnN0YW5jZVtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nKS5tYXAoKGV2ZW50TmFtZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChldjogYW55KSA9PiBpbnN0YW5jZVtldmVudE5hbWVdKGV2LmRldGFpbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gdW5yZWdpc3RlcnMuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICB9KTtcbn07XG5cbmNvbnN0IE5hdlBhcmFtc1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ05hdlBhcmFtc1Rva2VuJyk7XG5cbmNvbnN0IGdldFByb3ZpZGVycyA9IChwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOYXZQYXJhbXNUb2tlbixcbiAgICAgIHVzZVZhbHVlOiBwYXJhbXMsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOYXZQYXJhbXMsXG4gICAgICB1c2VGYWN0b3J5OiBwcm92aWRlTmF2UGFyYW1zSW5qZWN0YWJsZSxcbiAgICAgIGRlcHM6IFtOYXZQYXJhbXNUb2tlbl0sXG4gICAgfSxcbiAgXTtcbn07XG5cbmNvbnN0IHByb3ZpZGVOYXZQYXJhbXNJbmplY3RhYmxlID0gKHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4ge1xuICByZXR1cm4gbmV3IE5hdlBhcmFtcyhwYXJhbXMpO1xufTtcbiJdfQ==
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
export class MenuController {
|
|
2
|
-
constructor(menuController) {
|
|
3
|
-
this.menuController = menuController;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Programmatically open the Menu.
|
|
7
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
8
|
-
* @return returns a promise when the menu is fully opened
|
|
9
|
-
*/
|
|
10
|
-
open(menuId) {
|
|
11
|
-
return this.menuController.open(menuId);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Programmatically close the Menu. If no `menuId` is given as the first
|
|
15
|
-
* argument then it'll close any menu which is open. If a `menuId`
|
|
16
|
-
* is given then it'll close that exact menu.
|
|
17
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
18
|
-
* @return returns a promise when the menu is fully closed
|
|
19
|
-
*/
|
|
20
|
-
close(menuId) {
|
|
21
|
-
return this.menuController.close(menuId);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Toggle the menu. If it's closed, it will open, and if opened, it
|
|
25
|
-
* will close.
|
|
26
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
27
|
-
* @return returns a promise when the menu has been toggled
|
|
28
|
-
*/
|
|
29
|
-
toggle(menuId) {
|
|
30
|
-
return this.menuController.toggle(menuId);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Used to enable or disable a menu. For example, there could be multiple
|
|
34
|
-
* left menus, but only one of them should be able to be opened at the same
|
|
35
|
-
* time. If there are multiple menus on the same side, then enabling one menu
|
|
36
|
-
* will also automatically disable all the others that are on the same side.
|
|
37
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
38
|
-
* @return Returns the instance of the menu, which is useful for chaining.
|
|
39
|
-
*/
|
|
40
|
-
enable(shouldEnable, menuId) {
|
|
41
|
-
return this.menuController.enable(shouldEnable, menuId);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Used to enable or disable the ability to swipe open the menu.
|
|
45
|
-
* @param shouldEnable True if it should be swipe-able, false if not.
|
|
46
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
47
|
-
* @return Returns the instance of the menu, which is useful for chaining.
|
|
48
|
-
*/
|
|
49
|
-
swipeGesture(shouldEnable, menuId) {
|
|
50
|
-
return this.menuController.swipeGesture(shouldEnable, menuId);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
54
|
-
* @return Returns true if the specified menu is currently open, otherwise false.
|
|
55
|
-
* If the menuId is not specified, it returns true if ANY menu is currenly open.
|
|
56
|
-
*/
|
|
57
|
-
isOpen(menuId) {
|
|
58
|
-
return this.menuController.isOpen(menuId);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
62
|
-
* @return Returns true if the menu is currently enabled, otherwise false.
|
|
63
|
-
*/
|
|
64
|
-
isEnabled(menuId) {
|
|
65
|
-
return this.menuController.isEnabled(menuId);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Used to get a menu instance. If a `menuId` is not provided then it'll
|
|
69
|
-
* return the first menu found. If a `menuId` is `left` or `right`, then
|
|
70
|
-
* it'll return the enabled menu on that side. Otherwise, if a `menuId` is
|
|
71
|
-
* provided, then it'll try to find the menu using the menu's `id`
|
|
72
|
-
* property. If a menu is not found then it'll return `null`.
|
|
73
|
-
* @param [menuId] Optionally get the menu by its id, or side.
|
|
74
|
-
* @return Returns the instance of the menu if found, otherwise `null`.
|
|
75
|
-
*/
|
|
76
|
-
get(menuId) {
|
|
77
|
-
return this.menuController.get(menuId);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* @return Returns the instance of the menu already opened, otherwise `null`.
|
|
81
|
-
*/
|
|
82
|
-
getOpen() {
|
|
83
|
-
return this.menuController.getOpen();
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* @return Returns an array of all menu instances.
|
|
87
|
-
*/
|
|
88
|
-
getMenus() {
|
|
89
|
-
return this.menuController.getMenus();
|
|
90
|
-
}
|
|
91
|
-
registerAnimation(name, animation) {
|
|
92
|
-
return this.menuController.registerAnimation(name, animation);
|
|
93
|
-
}
|
|
94
|
-
isAnimating() {
|
|
95
|
-
return this.menuController.isAnimating();
|
|
96
|
-
}
|
|
97
|
-
_getOpenSync() {
|
|
98
|
-
return this.menuController._getOpenSync();
|
|
99
|
-
}
|
|
100
|
-
_createAnimation(type, menuCmp) {
|
|
101
|
-
return this.menuController._createAnimation(type, menuCmp);
|
|
102
|
-
}
|
|
103
|
-
_register(menu) {
|
|
104
|
-
return this.menuController._register(menu);
|
|
105
|
-
}
|
|
106
|
-
_unregister(menu) {
|
|
107
|
-
return this.menuController._unregister(menu);
|
|
108
|
-
}
|
|
109
|
-
_setOpen(menu, shouldOpen, animated) {
|
|
110
|
-
return this.menuController._setOpen(menu, shouldOpen, animated);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tbW9uL3NyYy9wcm92aWRlcnMvbWVudS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtJQUFHLENBQUM7SUFFdkQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxNQUFlO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxNQUFlO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE1BQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFxQixFQUFFLE1BQWU7UUFDM0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLFlBQXFCLEVBQUUsTUFBZTtRQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFlO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsR0FBRyxDQUFDLE1BQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxTQUEyQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBYztRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLENBQUMsSUFBVztRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVztRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBVyxFQUFFLFVBQW1CLEVBQUUsUUFBaUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWVudUNvbnRyb2xsZXJJLCBBbmltYXRpb25CdWlsZGVyLCBNZW51SSwgQW5pbWF0aW9uIH0gZnJvbSAnQGlvbmljL2NvcmUvY29tcG9uZW50cyc7XG5cbmV4cG9ydCBjbGFzcyBNZW51Q29udHJvbGxlciBpbXBsZW1lbnRzIE1lbnVDb250cm9sbGVySSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVudUNvbnRyb2xsZXI6IE1lbnVDb250cm9sbGVySSkge31cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBvcGVuIHRoZSBNZW51LlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiByZXR1cm5zIGEgcHJvbWlzZSB3aGVuIHRoZSBtZW51IGlzIGZ1bGx5IG9wZW5lZFxuICAgKi9cbiAgb3BlbihtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5vcGVuKG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBjbG9zZSB0aGUgTWVudS4gSWYgbm8gYG1lbnVJZGAgaXMgZ2l2ZW4gYXMgdGhlIGZpcnN0XG4gICAqIGFyZ3VtZW50IHRoZW4gaXQnbGwgY2xvc2UgYW55IG1lbnUgd2hpY2ggaXMgb3Blbi4gSWYgYSBgbWVudUlkYFxuICAgKiBpcyBnaXZlbiB0aGVuIGl0J2xsIGNsb3NlIHRoYXQgZXhhY3QgbWVudS5cbiAgICogQHBhcmFtIFttZW51SWRdICBPcHRpb25hbGx5IGdldCB0aGUgbWVudSBieSBpdHMgaWQsIG9yIHNpZGUuXG4gICAqIEByZXR1cm4gcmV0dXJucyBhIHByb21pc2Ugd2hlbiB0aGUgbWVudSBpcyBmdWxseSBjbG9zZWRcbiAgICovXG4gIGNsb3NlKG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLmNsb3NlKG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBtZW51LiBJZiBpdCdzIGNsb3NlZCwgaXQgd2lsbCBvcGVuLCBhbmQgaWYgb3BlbmVkLCBpdFxuICAgKiB3aWxsIGNsb3NlLlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiByZXR1cm5zIGEgcHJvbWlzZSB3aGVuIHRoZSBtZW51IGhhcyBiZWVuIHRvZ2dsZWRcbiAgICovXG4gIHRvZ2dsZShtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci50b2dnbGUobWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGEgbWVudS4gRm9yIGV4YW1wbGUsIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlXG4gICAqIGxlZnQgbWVudXMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBhYmxlIHRvIGJlIG9wZW5lZCBhdCB0aGUgc2FtZVxuICAgKiB0aW1lLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWVudXMgb24gdGhlIHNhbWUgc2lkZSwgdGhlbiBlbmFibGluZyBvbmUgbWVudVxuICAgKiB3aWxsIGFsc28gYXV0b21hdGljYWxseSBkaXNhYmxlIGFsbCB0aGUgb3RoZXJzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIHNpZGUuXG4gICAqIEBwYXJhbSBbbWVudUlkXSAgT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtZW51LCB3aGljaCBpcyB1c2VmdWwgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgZW5hYmxlKHNob3VsZEVuYWJsZTogYm9vbGVhbiwgbWVudUlkPzogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5lbmFibGUoc2hvdWxkRW5hYmxlLCBtZW51SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFiaWxpdHkgdG8gc3dpcGUgb3BlbiB0aGUgbWVudS5cbiAgICogQHBhcmFtIHNob3VsZEVuYWJsZSAgVHJ1ZSBpZiBpdCBzaG91bGQgYmUgc3dpcGUtYWJsZSwgZmFsc2UgaWYgbm90LlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgbWVudSwgd2hpY2ggaXMgdXNlZnVsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHN3aXBlR2VzdHVyZShzaG91bGRFbmFibGU6IGJvb2xlYW4sIG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuc3dpcGVHZXN0dXJlKHNob3VsZEVuYWJsZSwgbWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gW21lbnVJZF0gT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIG1lbnUgaXMgY3VycmVudGx5IG9wZW4sIG90aGVyd2lzZSBmYWxzZS5cbiAgICogSWYgdGhlIG1lbnVJZCBpcyBub3Qgc3BlY2lmaWVkLCBpdCByZXR1cm5zIHRydWUgaWYgQU5ZIG1lbnUgaXMgY3VycmVubHkgb3Blbi5cbiAgICovXG4gIGlzT3BlbihtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5pc09wZW4obWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaXMgY3VycmVudGx5IGVuYWJsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIGlzRW5hYmxlZChtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5pc0VuYWJsZWQobWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGdldCBhIG1lbnUgaW5zdGFuY2UuIElmIGEgYG1lbnVJZGAgaXMgbm90IHByb3ZpZGVkIHRoZW4gaXQnbGxcbiAgICogcmV0dXJuIHRoZSBmaXJzdCBtZW51IGZvdW5kLiBJZiBhIGBtZW51SWRgIGlzIGBsZWZ0YCBvciBgcmlnaHRgLCB0aGVuXG4gICAqIGl0J2xsIHJldHVybiB0aGUgZW5hYmxlZCBtZW51IG9uIHRoYXQgc2lkZS4gT3RoZXJ3aXNlLCBpZiBhIGBtZW51SWRgIGlzXG4gICAqIHByb3ZpZGVkLCB0aGVuIGl0J2xsIHRyeSB0byBmaW5kIHRoZSBtZW51IHVzaW5nIHRoZSBtZW51J3MgYGlkYFxuICAgKiBwcm9wZXJ0eS4gSWYgYSBtZW51IGlzIG5vdCBmb3VuZCB0aGVuIGl0J2xsIHJldHVybiBgbnVsbGAuXG4gICAqIEBwYXJhbSBbbWVudUlkXSAgT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtZW51IGlmIGZvdW5kLCBvdGhlcndpc2UgYG51bGxgLlxuICAgKi9cbiAgZ2V0KG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuZ2V0KG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgbWVudSBhbHJlYWR5IG9wZW5lZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICovXG4gIGdldE9wZW4oKTogUHJvbWlzZTxIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5nZXRPcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBtZW51IGluc3RhbmNlcy5cbiAgICovXG4gIGdldE1lbnVzKCk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5nZXRNZW51cygpO1xuICB9XG5cbiAgcmVnaXN0ZXJBbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb246IEFuaW1hdGlvbkJ1aWxkZXIpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5yZWdpc3RlckFuaW1hdGlvbihuYW1lLCBhbmltYXRpb24pO1xuICB9XG5cbiAgaXNBbmltYXRpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuaXNBbmltYXRpbmcoKTtcbiAgfVxuXG4gIF9nZXRPcGVuU3luYygpOiBIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLl9nZXRPcGVuU3luYygpO1xuICB9XG5cbiAgX2NyZWF0ZUFuaW1hdGlvbih0eXBlOiBzdHJpbmcsIG1lbnVDbXA6IE1lbnVJKTogUHJvbWlzZTxBbmltYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5fY3JlYXRlQW5pbWF0aW9uKHR5cGUsIG1lbnVDbXApO1xuICB9XG5cbiAgX3JlZ2lzdGVyKG1lbnU6IE1lbnVJKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuX3JlZ2lzdGVyKG1lbnUpO1xuICB9XG5cbiAgX3VucmVnaXN0ZXIobWVudTogTWVudUkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5fdW5yZWdpc3RlcihtZW51KTtcbiAgfVxuXG4gIF9zZXRPcGVuKG1lbnU6IE1lbnVJLCBzaG91bGRPcGVuOiBib29sZWFuLCBhbmltYXRlZDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLl9zZXRPcGVuKG1lbnUsIHNob3VsZE9wZW4sIGFuaW1hdGVkKTtcbiAgfVxufVxuIl19
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { NavigationStart } from '@angular/router';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./platform";
|
|
5
|
-
import * as i2 from "@angular/common";
|
|
6
|
-
import * as i3 from "@angular/router";
|
|
7
|
-
export class NavController {
|
|
8
|
-
constructor(platform, location, serializer, router) {
|
|
9
|
-
this.location = location;
|
|
10
|
-
this.serializer = serializer;
|
|
11
|
-
this.router = router;
|
|
12
|
-
this.direction = DEFAULT_DIRECTION;
|
|
13
|
-
this.animated = DEFAULT_ANIMATED;
|
|
14
|
-
this.guessDirection = 'forward';
|
|
15
|
-
this.lastNavId = -1;
|
|
16
|
-
// Subscribe to router events to detect direction
|
|
17
|
-
if (router) {
|
|
18
|
-
router.events.subscribe((ev) => {
|
|
19
|
-
if (ev instanceof NavigationStart) {
|
|
20
|
-
// restoredState is set if the browser back/forward button is used
|
|
21
|
-
const id = ev.restoredState ? ev.restoredState.navigationId : ev.id;
|
|
22
|
-
this.guessDirection = this.guessAnimation = id < this.lastNavId ? 'back' : 'forward';
|
|
23
|
-
this.lastNavId = this.guessDirection === 'forward' ? ev.id : id;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
// Subscribe to backButton events
|
|
28
|
-
platform.backButton.subscribeWithPriority(0, (processNextHandler) => {
|
|
29
|
-
this.pop();
|
|
30
|
-
processNextHandler();
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
|
|
35
|
-
* it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
|
|
36
|
-
*
|
|
37
|
-
* Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
|
|
38
|
-
* and that it will show a "forward" animation by default.
|
|
39
|
-
*
|
|
40
|
-
* Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
|
|
41
|
-
*
|
|
42
|
-
* ```html
|
|
43
|
-
* <a routerLink="/path/to/page" routerDirection="forward">Link</a>
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
navigateForward(url, options = {}) {
|
|
47
|
-
this.setDirection('forward', options.animated, options.animationDirection, options.animation);
|
|
48
|
-
return this.navigate(url, options);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
|
|
52
|
-
* it's equivalent to calling:
|
|
53
|
-
*
|
|
54
|
-
* ```ts
|
|
55
|
-
* this.navController.setDirection('back');
|
|
56
|
-
* this.router.navigateByUrl(path);
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* Going **back** means that all the pages in the stack until the navigated page is found will be popped,
|
|
60
|
-
* and that it will show a "back" animation by default.
|
|
61
|
-
*
|
|
62
|
-
* Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
|
|
63
|
-
*
|
|
64
|
-
* ```html
|
|
65
|
-
* <a routerLink="/path/to/page" routerDirection="back">Link</a>
|
|
66
|
-
* ```
|
|
67
|
-
*/
|
|
68
|
-
navigateBack(url, options = {}) {
|
|
69
|
-
this.setDirection('back', options.animated, options.animationDirection, options.animation);
|
|
70
|
-
return this.navigate(url, options);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
|
|
74
|
-
* it's equivalent to calling:
|
|
75
|
-
*
|
|
76
|
-
* ```ts
|
|
77
|
-
* this.navController.setDirection('root');
|
|
78
|
-
* this.router.navigateByUrl(path);
|
|
79
|
-
* ```
|
|
80
|
-
*
|
|
81
|
-
* Going **root** means that all existing pages in the stack will be removed,
|
|
82
|
-
* and the navigated page will become the single page in the stack.
|
|
83
|
-
*
|
|
84
|
-
* Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
|
|
85
|
-
*
|
|
86
|
-
* ```html
|
|
87
|
-
* <a routerLink="/path/to/page" routerDirection="root">Link</a>
|
|
88
|
-
* ```
|
|
89
|
-
*/
|
|
90
|
-
navigateRoot(url, options = {}) {
|
|
91
|
-
this.setDirection('root', options.animated, options.animationDirection, options.animation);
|
|
92
|
-
return this.navigate(url, options);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Same as [Location](https://angular.io/api/common/Location)'s back() method.
|
|
96
|
-
* It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
|
|
97
|
-
* by default.
|
|
98
|
-
*/
|
|
99
|
-
back(options = { animated: true, animationDirection: 'back' }) {
|
|
100
|
-
this.setDirection('back', options.animated, options.animationDirection, options.animation);
|
|
101
|
-
return this.location.back();
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* This methods goes back in the context of Ionic's stack navigation.
|
|
105
|
-
*
|
|
106
|
-
* It recursively finds the top active `ion-router-outlet` and calls `pop()`.
|
|
107
|
-
* This is the recommended way to go back when you are using `ion-router-outlet`.
|
|
108
|
-
*
|
|
109
|
-
* Resolves to `true` if it was able to pop.
|
|
110
|
-
*/
|
|
111
|
-
async pop() {
|
|
112
|
-
let outlet = this.topOutlet;
|
|
113
|
-
while (outlet) {
|
|
114
|
-
if (await outlet.pop()) {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
outlet = outlet.parentOutlet;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* This methods specifies the direction of the next navigation performed by the Angular router.
|
|
125
|
-
*
|
|
126
|
-
* `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
|
|
127
|
-
*
|
|
128
|
-
* It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
|
|
129
|
-
*/
|
|
130
|
-
setDirection(direction, animated, animationDirection, animationBuilder) {
|
|
131
|
-
this.direction = direction;
|
|
132
|
-
this.animated = getAnimation(direction, animated, animationDirection);
|
|
133
|
-
this.animationBuilder = animationBuilder;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* @internal
|
|
137
|
-
*/
|
|
138
|
-
setTopOutlet(outlet) {
|
|
139
|
-
this.topOutlet = outlet;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* @internal
|
|
143
|
-
*/
|
|
144
|
-
consumeTransition() {
|
|
145
|
-
let direction = 'root';
|
|
146
|
-
let animation;
|
|
147
|
-
const animationBuilder = this.animationBuilder;
|
|
148
|
-
if (this.direction === 'auto') {
|
|
149
|
-
direction = this.guessDirection;
|
|
150
|
-
animation = this.guessAnimation;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
animation = this.animated;
|
|
154
|
-
direction = this.direction;
|
|
155
|
-
}
|
|
156
|
-
this.direction = DEFAULT_DIRECTION;
|
|
157
|
-
this.animated = DEFAULT_ANIMATED;
|
|
158
|
-
this.animationBuilder = undefined;
|
|
159
|
-
return {
|
|
160
|
-
direction,
|
|
161
|
-
animation,
|
|
162
|
-
animationBuilder,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
navigate(url, options) {
|
|
166
|
-
if (Array.isArray(url)) {
|
|
167
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
168
|
-
return this.router.navigate(url, options);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
/**
|
|
172
|
-
* navigateByUrl ignores any properties that
|
|
173
|
-
* would change the url, so things like queryParams
|
|
174
|
-
* would be ignored unless we create a url tree
|
|
175
|
-
* More Info: https://github.com/angular/angular/issues/18798
|
|
176
|
-
*/
|
|
177
|
-
const urlTree = this.serializer.parse(url.toString());
|
|
178
|
-
if (options.queryParams !== undefined) {
|
|
179
|
-
urlTree.queryParams = { ...options.queryParams };
|
|
180
|
-
}
|
|
181
|
-
if (options.fragment !== undefined) {
|
|
182
|
-
urlTree.fragment = options.fragment;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* `navigateByUrl` will still apply `NavigationExtras` properties
|
|
186
|
-
* that do not modify the url, such as `replaceUrl` which is why
|
|
187
|
-
* `options` is passed in here.
|
|
188
|
-
*/
|
|
189
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
190
|
-
return this.router.navigateByUrl(urlTree, options);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/** @nocollapse */ NavController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, deps: [{ token: i1.Platform }, { token: i2.Location }, { token: i3.UrlSerializer }, { token: i3.Router, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
195
|
-
/** @nocollapse */ NavController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, providedIn: 'root' });
|
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, decorators: [{
|
|
197
|
-
type: Injectable,
|
|
198
|
-
args: [{
|
|
199
|
-
providedIn: 'root',
|
|
200
|
-
}]
|
|
201
|
-
}], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.Location }, { type: i3.UrlSerializer }, { type: i3.Router, decorators: [{
|
|
202
|
-
type: Optional
|
|
203
|
-
}] }]; } });
|
|
204
|
-
const getAnimation = (direction, animated, animationDirection) => {
|
|
205
|
-
if (animated === false) {
|
|
206
|
-
return undefined;
|
|
207
|
-
}
|
|
208
|
-
if (animationDirection !== undefined) {
|
|
209
|
-
return animationDirection;
|
|
210
|
-
}
|
|
211
|
-
if (direction === 'forward' || direction === 'back') {
|
|
212
|
-
return direction;
|
|
213
|
-
}
|
|
214
|
-
else if (direction === 'root' && animated === true) {
|
|
215
|
-
return 'forward';
|
|
216
|
-
}
|
|
217
|
-
return undefined;
|
|
218
|
-
};
|
|
219
|
-
const DEFAULT_DIRECTION = 'auto';
|
|
220
|
-
const DEFAULT_ANIMATED = undefined;
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21tb24vc3JjL3Byb3ZpZGVycy9uYXYtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQW9ELGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQWtCcEcsTUFBTSxPQUFPLGFBQWE7SUFTeEIsWUFDRSxRQUFrQixFQUNWLFFBQWtCLEVBQ2xCLFVBQXlCLEVBQ2IsTUFBZTtRQUYzQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBWDdCLGNBQVMsR0FBeUMsaUJBQWlCLENBQUM7UUFDcEUsYUFBUSxHQUFrQixnQkFBZ0IsQ0FBQztRQUUzQyxtQkFBYyxHQUFvQixTQUFTLENBQUM7UUFFNUMsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBUXJCLGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksRUFBRSxZQUFZLGVBQWUsRUFBRTtvQkFDakMsa0VBQWtFO29CQUNsRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJ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LFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQ3JDO1lBRUQ7Ozs7ZUFJRztZQUNILG9FQUFvRTtZQUNwRSxPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7OzhIQXROVSxhQUFhO2tJQUFiLGFBQWEsY0FGWixNQUFNOzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjSSxRQUFROztBQTRNYixNQUFNLFlBQVksR0FBRyxDQUNuQixTQUEwQixFQUMxQixRQUE2QixFQUM3QixrQkFBa0QsRUFDeEIsRUFBRTtJQUM1QixJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7UUFDdEIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtRQUNwQyxPQUFPLGtCQUFrQixDQUFDO0tBQzNCO0lBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDbkQsT0FBTyxTQUFTLENBQUM7S0FDbEI7U0FBTSxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNwRCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsU2VyaWFsaXplciwgVXJsVHJlZSwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB0eXBlIHsgQW5pbWF0aW9uQnVpbGRlciwgTmF2RGlyZWN0aW9uLCBSb3V0ZXJEaXJlY3Rpb24gfSBmcm9tICdAaW9uaWMvY29yZS9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgSW9uUm91dGVyT3V0bGV0IH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9uYXZpZ2F0aW9uL3JvdXRlci1vdXRsZXQnO1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJy4vcGxhdGZvcm0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvbk9wdGlvbnMge1xuICBhbmltYXRlZD86IGJvb2xlYW47XG4gIGFuaW1hdGlvbj86IEFuaW1hdGlvbkJ1aWxkZXI7XG4gIGFuaW1hdGlvbkRpcmVjdGlvbj86ICdmb3J3YXJkJyB8ICdiYWNrJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0aW9uT3B0aW9ucyBleHRlbmRzIE5hdmlnYXRpb25FeHRyYXMsIEFuaW1hdGlvbk9wdGlvbnMge31cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkNvbnRyb2xsZXIge1xuICBwcml2YXRlIHRvcE91dGxldD86IElvblJvdXRlck91dGxldDtcbiAgcHJpdmF0ZSBkaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrJyB8ICdyb290JyB8ICdhdXRvJyA9IERFRkFVTFRfRElSRUNUSU9OO1xuICBwcml2YXRlIGFuaW1hdGVkPzogTmF2RGlyZWN0aW9uID0gREVGQVVMVF9BTklNQVRFRDtcbiAgcHJpdmF0ZSBhbmltYXRpb25CdWlsZGVyPzogQW5pbWF0aW9uQnVpbGRlcjtcbiAgcHJpdmF0ZSBndWVzc0RpcmVjdGlvbjogUm91dGVyRGlyZWN0aW9uID0gJ2ZvcndhcmQnO1xuICBwcml2YXRlIGd1ZXNzQW5pbWF0aW9uPzogTmF2RGlyZWN0aW9uO1xuICBwcml2YXRlIGxhc3ROYXZJZCA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZXI/OiBSb3V0ZXJcbiAgKSB7XG4gICAgLy8gU3Vic2NyaWJlIHRvIHJvdXRlciBldmVudHMgdG8gZGV0ZWN0IGRpcmVjdGlvblxuICAgIGlmIChyb3V0ZXIpIHtcbiAgICAgIHJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldikgPT4ge1xuICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAvLyByZXN0b3JlZFN0YXRlIGlzIHNldCBpZiB0aGUgYnJvd3NlciBiYWNrL2ZvcndhcmQgYnV0dG9uIGlzIHVzZWRcbiAgICAgICAgICBjb25zdCBpZCA9IGV2LnJlc3RvcmVkU3RhdGUgPyBldi5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZCA6IGV2LmlkO1xuICAgICAgICAgIHRoaXMuZ3Vlc3NEaXJlY3Rpb24gPSB0aGlzLmd1ZXNzQW5pbWF0aW9uID0gaWQgPCB0aGlzLmxhc3ROYXZJZCA/ICdiYWNrJyA6ICdmb3J3YXJkJztcbiAgICAgICAgICB0aGlzLmxhc3ROYXZJZCA9IHRoaXMuZ3Vlc3NEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IGV2LmlkIDogaWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliZSB0byBiYWNrQnV0dG9uIGV2ZW50c1xuICAgIHBsYXRmb3JtLmJhY2tCdXR0b24uc3Vic2NyaWJlV2l0aFByaW9yaXR5KDAsIChwcm9jZXNzTmV4dEhhbmRsZXIpID0+IHtcbiAgICAgIHRoaXMucG9wKCk7XG4gICAgICBwcm9jZXNzTmV4dEhhbmRsZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2VzIEFuZ3VsYXIncyBbUm91dGVyXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL3JvdXRlci9Sb3V0ZXIpIHVuZGVyIHRoZSBob29kLFxuICAgKiBpdCdzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgpYCwgYnV0IGl0J3MgZXhwbGljaXQgYWJvdXQgdGhlICoqZGlyZWN0aW9uKiogb2YgdGhlIHRyYW5zaXRpb24uXG4gICAqXG4gICAqIEdvaW5nICoqZm9yd2FyZCoqIG1lYW5zIHRoYXQgYSBuZXcgcGFnZSBpcyBnb2luZyB0byBiZSBwdXNoZWQgdG8gdGhlIHN0YWNrIG9mIHRoZSBvdXRsZXQgKGlvbi1yb3V0ZXItb3V0bGV0KSxcbiAgICogYW5kIHRoYXQgaXQgd2lsbCBzaG93IGEgXCJmb3J3YXJkXCIgYW5pbWF0aW9uIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIE5hdmlnYXRpbmcgZm9yd2FyZCBjYW4gYWxzbyBiZSB0cmlnZ2VyZWQgaW4gYSBkZWNsYXJhdGl2ZSBtYW5uZXIgYnkgdXNpbmcgdGhlIGBbcm91dGVyRGlyZWN0aW9uXWAgZGlyZWN0aXZlOlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxhIHJvdXRlckxpbms9XCIvcGF0aC90by9wYWdlXCIgcm91dGVyRGlyZWN0aW9uPVwiZm9yd2FyZFwiPkxpbms8L2E+XG4gICAqIGBgYFxuICAgKi9cbiAgbmF2aWdhdGVGb3J3YXJkKHVybDogc3RyaW5nIHwgVXJsVHJlZSB8IGFueVtdLCBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zZXREaXJlY3Rpb24oJ2ZvcndhcmQnLCBvcHRpb25zLmFuaW1hdGVkLCBvcHRpb25zLmFuaW1hdGlvbkRpcmVjdGlvbiwgb3B0aW9ucy5hbmltYXRpb24pO1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgdXNlcyBBbmd1bGFyJ3MgW1JvdXRlcl0oaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvUm91dGVyKSB1bmRlciB0aGUgaG9vZCxcbiAgICogaXQncyBlcXVpdmFsZW50IHRvIGNhbGxpbmc6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHRoaXMubmF2Q29udHJvbGxlci5zZXREaXJlY3Rpb24oJ2JhY2snKTtcbiAgICogdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEdvaW5nICoqYmFjayoqIG1lYW5zIHRoYXQgYWxsIHRoZSBwYWdlcyBpbiB0aGUgc3RhY2sgdW50aWwgdGhlIG5hdmlnYXRlZCBwYWdlIGlzIGZvdW5kIHdpbGwgYmUgcG9wcGVkLFxuICAgKiBhbmQgdGhhdCBpdCB3aWxsIHNob3cgYSBcImJhY2tcIiBhbmltYXRpb24gYnkgZGVmYXVsdC5cbiAgICpcbiAgICogTmF2aWdhdGluZyBiYWNrIGNhbiBhbHNvIGJlIHRyaWdnZXJlZCBpbiBhIGRlY2xhcmF0aXZlIG1hbm5lciBieSB1c2luZyB0aGUgYFtyb3V0ZXJEaXJlY3Rpb25dYCBkaXJlY3RpdmU6XG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGEgcm91dGVyTGluaz1cIi9wYXRoL3RvL3BhZ2VcIiByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCI+TGluazwvYT5cbiAgICogYGBgXG4gICAqL1xuICBuYXZpZ2F0ZUJhY2sodXJsOiBzdHJpbmcgfCBVcmxUcmVlIHwgYW55W10sIG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNldERpcmVjdGlvbignYmFjaycsIG9wdGlvbnMuYW5pbWF0ZWQsIG9wdGlvbnMuYW5pbWF0aW9uRGlyZWN0aW9uLCBvcHRpb25zLmFuaW1hdGlvbik7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2VzIEFuZ3VsYXIncyBbUm91dGVyXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL3JvdXRlci9Sb3V0ZXIpIHVuZGVyIHRoZSBob29kLFxuICAgKiBpdCdzIGVxdWl2YWxlbnQgdG8gY2FsbGluZzpcbiAgICpcbiAgICogYGBgdHNcbiAgICogdGhpcy5uYXZDb250cm9sbGVyLnNldERpcmVjdGlvbigncm9vdCcpO1xuICAgKiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogR29pbmcgKipyb290KiogbWVhbnMgdGhhdCBhbGwgZXhpc3RpbmcgcGFnZXMgaW4gdGhlIHN0YWNrIHdpbGwgYmUgcmVtb3ZlZCxcbiAgICogYW5kIHRoZSBuYXZpZ2F0ZWQgcGFnZSB3aWxsIGJlY29tZSB0aGUgc2luZ2xlIHBhZ2UgaW4gdGhlIHN0YWNrLlxuICAgKlxuICAgKiBOYXZpZ2F0aW5nIHJvb3QgY2FuIGFsc28gYmUgdHJpZ2dlcmVkIGluIGEgZGVjbGFyYXRpdmUgbWFubmVyIGJ5IHVzaW5nIHRoZSBgW3JvdXRlckRpcmVjdGlvbl1gIGRpcmVjdGl2ZTpcbiAgICpcbiAgICogYGBgaHRtbFxuICAgKiA8YSByb3V0ZXJMaW5rPVwiL3BhdGgvdG8vcGFnZVwiIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIj5MaW5rPC9hPlxuICAgKiBgYGBcbiAgICovXG4gIG5hdmlnYXRlUm9vdCh1cmw6IHN0cmluZyB8IFVybFRyZWUgfCBhbnlbXSwgb3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuc2V0RGlyZWN0aW9uKCdyb290Jywgb3B0aW9ucy5hbmltYXRlZCwgb3B0aW9ucy5hbmltYXRpb25EaXJlY3Rpb24sIG9wdGlvbnMuYW5pbWF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgW0xvY2F0aW9uXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9Mb2NhdGlvbikncyBiYWNrKCkgbWV0aG9kLlxuICAgKiBJdCB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgYHdpbmRvdy5oaXN0b3J5LmJhY2soKWAgdW5kZXIgdGhlIGhvb2QsIGJ1dCBmZWF0dXJpbmcgYSBgYmFja2AgYW5pbWF0aW9uXG4gICAqIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBiYWNrKG9wdGlvbnM6IEFuaW1hdGlvbk9wdGlvbnMgPSB7IGFuaW1hdGVkOiB0cnVlLCBhbmltYXRpb25EaXJlY3Rpb246ICdiYWNrJyB9KTogdm9pZCB7XG4gICAgdGhpcy5zZXREaXJlY3Rpb24oJ2JhY2snLCBvcHRpb25zLmFuaW1hdGVkLCBvcHRpb25zLmFuaW1hdGlvbkRpcmVjdGlvbiwgb3B0aW9ucy5hbmltYXRpb24pO1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZHMgZ29lcyBiYWNrIGluIHRoZSBjb250ZXh0IG9mIElvbmljJ3Mgc3RhY2sgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogSXQgcmVjdXJzaXZlbHkgZmluZHMgdGhlIHRvcCBhY3RpdmUgYGlvbi1yb3V0ZXItb3V0bGV0YCBhbmQgY2FsbHMgYHBvcCgpYC5cbiAgICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGdvIGJhY2sgd2hlbiB5b3UgYXJlIHVzaW5nIGBpb24tcm91dGVyLW91dGxldGAuXG4gICAqXG4gICAqIFJlc29sdmVzIHRvIGB0cnVlYCBpZiBpdCB3YXMgYWJsZSB0byBwb3AuXG4gICAqL1xuICBhc3luYyBwb3AoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IG91dGxldCA9IHRoaXMudG9wT3V0bGV0O1xuXG4gICAgd2hpbGUgKG91dGxldCkge1xuICAgICAgaWYgKGF3YWl0IG91dGxldC5wb3AoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dGxldCA9IG91dGxldC5wYXJlbnRPdXRsZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kcyBzcGVjaWZpZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmV4dCBuYXZpZ2F0aW9uIHBlcmZvcm1lZCBieSB0aGUgQW5ndWxhciByb3V0ZXIuXG4gICAqXG4gICAqIGBzZXREaXJlY3Rpb24oKWAgZG9lcyBub3QgdHJpZ2dlciBhbnkgdHJhbnNpdGlvbiwgaXQganVzdCBzZXRzIHNvbWUgZmxhZ3MgdG8gYmUgY29uc3VtZWQgYnkgYGlvbi1yb3V0ZXItb3V0bGV0YC5cbiAgICpcbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYG5hdmlnYXRlRm9yd2FyZCgpYCwgYG5hdmlnYXRlQmFjaygpYCBhbmQgYG5hdmlnYXRlUm9vdCgpYCBpbnN0ZWFkIG9mIGBzZXREaXJlY3Rpb24oKWAuXG4gICAqL1xuICBzZXREaXJlY3Rpb24oXG4gICAgZGlyZWN0aW9uOiBSb3V0ZXJEaXJlY3Rpb24sXG4gICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICAgIGFuaW1hdGlvbkRpcmVjdGlvbj86ICdmb3J3YXJkJyB8ICdiYWNrJyxcbiAgICBhbmltYXRpb25CdWlsZGVyPzogQW5pbWF0aW9uQnVpbGRlclxuICApOiB2b2lkIHtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmFuaW1hdGVkID0gZ2V0QW5pbWF0aW9uKGRpcmVjdGlvbiwgYW5pbWF0ZWQsIGFuaW1hdGlvbkRpcmVjdGlvbik7XG4gICAgdGhpcy5hbmltYXRpb25CdWlsZGVyID0gYW5pbWF0aW9uQnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNldFRvcE91dGxldChvdXRsZXQ6IElvblJvdXRlck91dGxldCk6IHZvaWQge1xuICAgIHRoaXMudG9wT3V0bGV0ID0gb3V0bGV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3VtZVRyYW5zaXRpb24oKToge1xuICAgIGRpcmVjdGlvbjogUm91dGVyRGlyZWN0aW9uO1xuICAgIGFuaW1hdGlvbjogTmF2RGlyZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGFuaW1hdGlvbkJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIgfCB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGxldCBkaXJlY3Rpb246IFJvdXRlckRpcmVjdGlvbiA9ICdyb290JztcbiAgICBsZXQgYW5pbWF0aW9uOiBOYXZEaXJlY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYW5pbWF0aW9uQnVpbGRlcjtcblxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2F1dG8nKSB7XG4gICAgICBkaXJlY3Rpb24gPSB0aGlzLmd1ZXNzRGlyZWN0aW9uO1xuICAgICAgYW5pbWF0aW9uID0gdGhpcy5ndWVzc0FuaW1hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRlZDtcbiAgICAgIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLmRpcmVjdGlvbiA9IERFRkFVTFRfRElSRUNUSU9OO1xuICAgIHRoaXMuYW5pbWF0ZWQgPSBERUZBVUxUX0FOSU1BVEVEO1xuICAgIHRoaXMuYW5pbWF0aW9uQnVpbGRlciA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBhbmltYXRpb24sXG4gICAgICBhbmltYXRpb25CdWlsZGVyLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlKHVybDogc3RyaW5nIHwgVXJsVHJlZSB8IGFueVtdLCBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIhLm5hdmlnYXRlKHVybCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogbmF2aWdhdGVCeVVybCBpZ25vcmVzIGFueSBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgICAqIHdvdWxkIGNoYW5nZSB0aGUgdXJsLCBzbyB0aGluZ3MgbGlrZSBxdWVyeVBhcmFtc1xuICAgICAgICogd291bGQgYmUgaWdub3JlZCB1bmxlc3Mgd2UgY3JlYXRlIGEgdXJsIHRyZWVcbiAgICAgICAqIE1vcmUgSW5mbzogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTg3OThcbiAgICAgICAqL1xuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuc2VyaWFsaXplci5wYXJzZSh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICAgIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJsVHJlZS5xdWVyeVBhcmFtcyA9IHsgLi4ub3B0aW9ucy5xdWVyeVBhcmFtcyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVybFRyZWUuZnJhZ21lbnQgPSBvcHRpb25zLmZyYWdtZW50O1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIGBuYXZpZ2F0ZUJ5VXJsYCB3aWxsIHN0aWxsIGFwcGx5IGBOYXZpZ2F0aW9uRXh0cmFzYCBwcm9wZXJ0aWVzXG4gICAgICAgKiB0aGF0IGRvIG5vdCBtb2RpZnkgdGhlIHVybCwgc3VjaCBhcyBgcmVwbGFjZVVybGAgd2hpY2ggaXMgd2h5XG4gICAgICAgKiBgb3B0aW9uc2AgaXMgcGFzc2VkIGluIGhlcmUuXG4gICAgICAgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwodXJsVHJlZSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGdldEFuaW1hdGlvbiA9IChcbiAgZGlyZWN0aW9uOiBSb3V0ZXJEaXJlY3Rpb24sXG4gIGFuaW1hdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBhbmltYXRpb25EaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrJyB8IHVuZGVmaW5lZFxuKTogTmF2RGlyZWN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGFuaW1hdGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGFuaW1hdGlvbkRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFuaW1hdGlvbkRpcmVjdGlvbjtcbiAgfVxuICBpZiAoZGlyZWN0aW9uID09PSAnZm9yd2FyZCcgfHwgZGlyZWN0aW9uID09PSAnYmFjaycpIHtcbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3Jvb3QnICYmIGFuaW1hdGVkID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdmb3J3YXJkJztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgREVGQVVMVF9ESVJFQ1RJT04gPSAnYXV0byc7XG5jb25zdCBERUZBVUxUX0FOSU1BVEVEID0gdW5kZWZpbmVkO1xuIl19
|