@provoly/dashboard 1.1.7 → 1.1.9
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/admin/admin.module.d.ts +1 -1
- package/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.d.ts +3 -2
- package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +76 -0
- package/admin/components/admin-dataset/store/admin-dataset.effects.d.ts +71 -0
- package/admin/components/admin-dataset/store/admin-dataset.reducer.d.ts +10 -0
- package/admin/components/admin-dataset/store/admin-dataset.selectors.d.ts +10 -0
- package/admin/components/admin-dataset/store/admin-dataset.service.d.ts +20 -0
- package/admin/store/admin.effects.d.ts +1 -14
- package/components/metadata-editor/store/metadata.effects.d.ts +1 -23
- package/components/stepper/stepper.component.d.ts +2 -1
- package/esm2022/admin/admin.module.mjs +8 -2
- package/esm2022/admin/components/admin-dataset/admin-dataset.component.mjs +8 -6
- package/esm2022/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.mjs +5 -4
- package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +11 -9
- package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +4 -3
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +17 -0
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +104 -0
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.reducer.mjs +29 -0
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.selectors.mjs +19 -0
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.service.mjs +56 -0
- package/esm2022/admin/store/admin.effects.mjs +9 -36
- package/esm2022/components/metadata-editor/store/metadata.effects.mjs +4 -23
- package/esm2022/components/stepper/stepper.component.mjs +11 -8
- package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +1 -1
- package/esm2022/import/components/import.component.mjs +101 -61
- package/esm2022/import/i18n/en.translations.mjs +3 -2
- package/esm2022/import/i18n/fr.translations.mjs +3 -2
- package/esm2022/import/style/css.component.mjs +2 -2
- package/esm2022/lib/core/access/access.service.mjs +4 -1
- package/esm2022/lib/core/components/share/access-rights-share/access-rights-share.component.mjs +23 -10
- package/esm2022/lib/core/components/share/access-rights-share-modal/access-rights-share-modal.component.mjs +92 -0
- package/esm2022/lib/core/components/share/share.module.mjs +39 -6
- package/esm2022/lib/core/i18n/fr.translations.mjs +2 -2
- package/esm2022/lib/core/model/filter.interface.mjs +1 -1
- package/esm2022/lib/core/public-api.mjs +2 -1
- package/esm2022/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.mjs +52 -47
- package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -15
- package/esm2022/lib/core/store/data-source/data-source.effects.mjs +1 -39
- package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +8 -29
- package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +1 -9
- package/esm2022/lib/core/store/data-source/data-source.service.mjs +1 -36
- package/esm2022/presentation/components/presentation.component.mjs +14 -92
- package/esm2022/restitution/components/restitution/restitution.component.mjs +4 -3
- package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +10 -23
- package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +4 -16
- package/esm2022/restitution/i18n/en.translations.mjs +2 -1
- package/esm2022/restitution/i18n/fr.translations.mjs +2 -1
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/toolbox/components/edit-mode-action/edit-mode-action.component.mjs +1 -1
- package/esm2022/toolbox/components/save-view/save-view.component.mjs +1 -1
- package/esm2022/toolbox/components/share/share.component.mjs +18 -75
- package/esm2022/toolbox/components/toolbox-action/toolbox-action.component.mjs +7 -4
- package/esm2022/toolbox/toolbox.model.mjs +2 -2
- package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +2 -2
- package/fesm2022/provoly-dashboard-admin.mjs +216 -37
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +4 -21
- package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-components-stepper.mjs +10 -7
- package/fesm2022/provoly-dashboard-components-stepper.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-import.mjs +106 -65
- package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +13 -91
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +13 -34
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +33 -82
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +206 -194
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/import/components/import.component.d.ts +31 -18
- package/import/i18n/en.translations.d.ts +2 -1
- package/import/i18n/fr.translations.d.ts +2 -1
- package/import/style/_o-import.scss +16 -29
- package/lib/core/access/access.service.d.ts +2 -0
- package/lib/core/components/share/access-rights-share/access-rights-share.component.d.ts +5 -2
- package/lib/core/components/share/access-rights-share-modal/access-rights-share-modal.component.d.ts +34 -0
- package/lib/core/components/share/share.module.d.ts +9 -8
- package/lib/core/model/filter.interface.d.ts +1 -1
- package/lib/core/public-api.d.ts +1 -0
- package/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.d.ts +1 -1
- package/lib/core/store/data-source/data-source.actions.d.ts +1 -91
- package/lib/core/store/data-source/data-source.effects.d.ts +2 -30
- package/lib/core/store/data-source/data-source.reducer.d.ts +0 -3
- package/lib/core/store/data-source/data-source.selectors.d.ts +0 -4
- package/lib/core/store/data-source/data-source.service.d.ts +0 -9
- package/package.json +19 -19
- package/presentation/components/presentation.component.d.ts +4 -18
- package/restitution/components/restitution/restitution.component.d.ts +1 -0
- package/restitution/components/restitution-list/restitution-list.component.d.ts +3 -9
- package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +1 -4
- package/restitution/i18n/en.translations.d.ts +1 -0
- package/restitution/i18n/fr.translations.d.ts +1 -0
- package/restitution/style/_o-restitution-list.scss +0 -11
- package/styles/components/_o-modal.scss +1 -1
- package/styles-theme/components-theme/_o-restitution-list.theme.scss +0 -9
- package/toolbox/components/share/share.component.d.ts +4 -22
- package/toolbox/components/toolbox-action/toolbox-action.component.d.ts +3 -1
|
@@ -2,7 +2,7 @@ import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
|
|
2
2
|
import { ElementRef, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
4
|
import { Store } from '@ngrx/store';
|
|
5
|
-
import { DashboardManifest, ManifestDescription, PryBaseAccess, PryTitleService, SubscriptionnerDirective, ViewMode } from '@provoly/dashboard';
|
|
5
|
+
import { DashboardManifest, ManifestDescription, PryBaseAccess, PryDialogService, PryTitleService, SubscriptionnerDirective, ViewMode } from '@provoly/dashboard';
|
|
6
6
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class PryPresentationComponent extends SubscriptionnerDirective {
|
|
@@ -14,19 +14,14 @@ export declare class PryPresentationComponent extends SubscriptionnerDirective {
|
|
|
14
14
|
protected activatedRoute: ActivatedRoute;
|
|
15
15
|
protected ngZone: NgZone;
|
|
16
16
|
private access;
|
|
17
|
+
private dialog;
|
|
17
18
|
manifests$: Observable<ManifestDescription[]>;
|
|
18
19
|
selectedPresentation$: BehaviorSubject<ManifestDescription | null>;
|
|
19
20
|
staticManifest$?: Observable<DashboardManifest>;
|
|
20
21
|
selectedMode: ViewMode;
|
|
21
22
|
modalOpened: boolean;
|
|
22
23
|
templateModalActions: TemplateRef<any>;
|
|
23
|
-
template: TemplateRef<any>;
|
|
24
24
|
openModal: ElementRef<HTMLButtonElement>;
|
|
25
|
-
confirm: ElementRef<HTMLButtonElement>;
|
|
26
|
-
submit: ElementRef<HTMLButtonElement>;
|
|
27
|
-
cross: ElementRef<HTMLButtonElement>;
|
|
28
|
-
crossVisibility: ElementRef<HTMLButtonElement>;
|
|
29
|
-
visibilityModal: ElementRef;
|
|
30
25
|
overlayRef?: OverlayRef;
|
|
31
26
|
accessRightsByGroup: {
|
|
32
27
|
[key: string]: string[];
|
|
@@ -38,14 +33,12 @@ export declare class PryPresentationComponent extends SubscriptionnerDirective {
|
|
|
38
33
|
search$: BehaviorSubject<string>;
|
|
39
34
|
filteredPresentations$: Observable<ManifestDescription[]>;
|
|
40
35
|
listOfManifests$: BehaviorSubject<ManifestDescription[] | null>;
|
|
41
|
-
allowedShareGroups$: Observable<string[] | null>;
|
|
42
|
-
disableShareButton$: BehaviorSubject<boolean>;
|
|
43
36
|
mode: 'theme' | 'meta';
|
|
44
37
|
set listOfManifests(manifests: ManifestDescription[] | null);
|
|
45
38
|
hideToolbox: boolean;
|
|
46
39
|
inputSearch$: BehaviorSubject<string>;
|
|
47
40
|
set search(query: string);
|
|
48
|
-
constructor(store: Store<any>, overlay: Overlay, viewContainerRef: ViewContainerRef, router: Router, titleService: PryTitleService, activatedRoute: ActivatedRoute, ngZone: NgZone, access: PryBaseAccess);
|
|
41
|
+
constructor(store: Store<any>, overlay: Overlay, viewContainerRef: ViewContainerRef, router: Router, titleService: PryTitleService, activatedRoute: ActivatedRoute, ngZone: NgZone, access: PryBaseAccess, dialog: PryDialogService);
|
|
49
42
|
closeRestitution(): void;
|
|
50
43
|
fetch(presentation: ManifestDescription): void;
|
|
51
44
|
creation(): void;
|
|
@@ -53,16 +46,9 @@ export declare class PryPresentationComponent extends SubscriptionnerDirective {
|
|
|
53
46
|
delete(id: string): void;
|
|
54
47
|
toggleModalActions(presentation?: ManifestDescription | null, moreButton?: HTMLButtonElement): void;
|
|
55
48
|
toggleModal(presentation?: ManifestDescription | null): void;
|
|
56
|
-
changeVisibility(presentation?: ManifestDescription): void;
|
|
57
|
-
focusCrossElement(): void;
|
|
58
|
-
focusValidation(): void;
|
|
59
49
|
editContent(selectedPresentation: ManifestDescription): void;
|
|
60
|
-
updateAccessRights($event: {
|
|
61
|
-
[key: string]: string[];
|
|
62
|
-
}, presentation?: ManifestDescription): void;
|
|
63
|
-
updateDisableButtonValue(presentation?: ManifestDescription): void;
|
|
64
50
|
isPrivate(presentation: ManifestDescription): boolean;
|
|
65
51
|
canModify$(presentation: ManifestDescription): Observable<boolean>;
|
|
66
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PryPresentationComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
|
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PryPresentationComponent, [null, null, null, null, null, null, null, { optional: true; }, null]>;
|
|
67
53
|
static ɵcmp: i0.ɵɵComponentDeclaration<PryPresentationComponent, "pry-presentation", never, { "editionStartUrl": { "alias": "editionStartUrl"; "required": false; }; "consultStartUrl": { "alias": "consultStartUrl"; "required": false; }; "meAsOwner": { "alias": "meAsOwner"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "listOfManifests": { "alias": "listOfManifests"; "required": false; }; "hideToolbox": { "alias": "hideToolbox"; "required": false; }; "search": { "alias": "search"; "required": false; }; }, {}, never, never, false, never>;
|
|
68
54
|
}
|
|
@@ -37,6 +37,7 @@ export declare class PryRestitutionComponent extends SubscriptionnerDirective im
|
|
|
37
37
|
manifest: WidgetManifest;
|
|
38
38
|
}[];
|
|
39
39
|
usedDatasources$: Observable<DataSource[]>;
|
|
40
|
+
activeStepIndex: number;
|
|
40
41
|
constructor(toolboxManifestService: ToolboxManifestService, store: Store, toolboxMenuService: ToolboxMenuService);
|
|
41
42
|
ngOnInit(): void;
|
|
42
43
|
cancel(stepper: PryStepperComponent): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Store } from '@ngrx/store';
|
|
2
|
-
import { CatalogEntry, PryI18nService,
|
|
2
|
+
import { CatalogEntry, PryI18nService, SubscriptionnerDirective, ToolboxManifestService, ToolboxMenuService } from '@provoly/dashboard';
|
|
3
3
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class PryRestitutionListComponent extends SubscriptionnerDirective {
|
|
@@ -8,9 +8,9 @@ export declare class PryRestitutionListComponent extends SubscriptionnerDirectiv
|
|
|
8
8
|
private toolboxManifestService;
|
|
9
9
|
private store;
|
|
10
10
|
showTabs: boolean;
|
|
11
|
+
private _customModels;
|
|
11
12
|
get customModels(): string[];
|
|
12
13
|
set customModels(models: string[]);
|
|
13
|
-
private _customModels;
|
|
14
14
|
search$: BehaviorSubject<string>;
|
|
15
15
|
type$: BehaviorSubject<string | undefined>;
|
|
16
16
|
filteredWidgets$: Observable<CatalogEntry[]>;
|
|
@@ -21,15 +21,9 @@ export declare class PryRestitutionListComponent extends SubscriptionnerDirectiv
|
|
|
21
21
|
label: string;
|
|
22
22
|
type: string;
|
|
23
23
|
}[]>;
|
|
24
|
-
selectedRestitution: Widget | null;
|
|
25
|
-
mode: typeof ViewMode;
|
|
26
|
-
selectedMode: ViewMode;
|
|
27
24
|
categories: string[];
|
|
28
|
-
PryVisibilityType: typeof PryVisibilityType;
|
|
29
25
|
constructor(toolboxMenuService: ToolboxMenuService, translateService: PryI18nService, toolboxManifestService: ToolboxManifestService, store: Store);
|
|
30
|
-
|
|
31
|
-
selectRestitution($event: Widget): void;
|
|
32
|
-
closeRestitution(): void;
|
|
26
|
+
selectType(type: string): void;
|
|
33
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<PryRestitutionListComponent, never>;
|
|
34
28
|
static ɵcmp: i0.ɵɵComponentDeclaration<PryRestitutionListComponent, "pry-catalog", never, { "showTabs": { "alias": "showTabs"; "required": false; }; "customModels": { "alias": "customModels"; "required": false; }; }, {}, never, never, false, never>;
|
|
35
29
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
1
|
import { Store } from '@ngrx/store';
|
|
3
2
|
import { CatalogEntry, PryVisibilityType, SubscriptionnerDirective, ToolboxManifestService, Widget } from '@provoly/dashboard';
|
|
4
3
|
import { Observable } from 'rxjs';
|
|
@@ -8,15 +7,13 @@ export declare class PryRestitutionListItemComponent extends SubscriptionnerDire
|
|
|
8
7
|
private toolboxManifestService;
|
|
9
8
|
widget: CatalogEntry;
|
|
10
9
|
translate: boolean;
|
|
11
|
-
selectRestitution: EventEmitter<Widget>;
|
|
12
10
|
catalog: Widget[] | undefined;
|
|
13
11
|
automaticGridMode$: Observable<boolean>;
|
|
14
12
|
automaticGridMode: boolean;
|
|
15
13
|
PryVisibilityType: typeof PryVisibilityType;
|
|
16
14
|
constructor(store: Store, toolboxManifestService: ToolboxManifestService);
|
|
17
15
|
dragStart($event: DragEvent, type: string): void;
|
|
18
|
-
emitSelectedRestitution(catalogEntry: CatalogEntry): void;
|
|
19
16
|
viewInDashboard(widget: CatalogEntry): void;
|
|
20
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<PryRestitutionListItemComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PryRestitutionListItemComponent, "pry-catalog-item", never, { "widget": { "alias": "widget"; "required": false; }; "translate": { "alias": "translate"; "required": false; }; }, {
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PryRestitutionListItemComponent, "pry-catalog-item", never, { "widget": { "alias": "widget"; "required": false; }; "translate": { "alias": "translate"; "required": false; }; }, {}, never, never, false, never>;
|
|
22
19
|
}
|
|
@@ -142,17 +142,6 @@
|
|
|
142
142
|
-ms-hyphens: auto;
|
|
143
143
|
hyphens: auto;
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
&__action {
|
|
147
|
-
width: 100%;
|
|
148
|
-
padding: toRem(6) toRem(10);
|
|
149
|
-
text-align: center;
|
|
150
|
-
|
|
151
|
-
.a-btn--secondary {
|
|
152
|
-
height: auto;
|
|
153
|
-
padding: 0 toRem(5);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
145
|
}
|
|
157
146
|
}
|
|
158
147
|
|
|
@@ -13,15 +13,6 @@
|
|
|
13
13
|
.is-private {
|
|
14
14
|
color: themed($theme-map, 'color', 'primary', 500);
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
&__action {
|
|
18
|
-
border-top: 1px themed($theme-map, 'color', 'primary', 300) solid;
|
|
19
|
-
|
|
20
|
-
.a-btn--secondary {
|
|
21
|
-
font-size: toRem(14);
|
|
22
|
-
line-height: toRem(18);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
16
|
}
|
|
26
17
|
}
|
|
27
18
|
|
|
@@ -1,29 +1,11 @@
|
|
|
1
|
-
import { TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
1
|
import { Store } from '@ngrx/store';
|
|
3
|
-
import { PryBaseAccess } from '@provoly/dashboard';
|
|
2
|
+
import { PryBaseAccess, PryDialogService } from '@provoly/dashboard';
|
|
4
3
|
import { ToolboxActionComponent } from '../toolbox-action/toolbox-action.component';
|
|
5
|
-
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
|
6
|
-
import { BehaviorSubject, Observable } from 'rxjs';
|
|
7
4
|
import * as i0 from "@angular/core";
|
|
8
5
|
export declare class ShareComponent extends ToolboxActionComponent {
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
modalOpened: boolean;
|
|
12
|
-
overlayRef?: OverlayRef;
|
|
13
|
-
accessRightsByGroup: {
|
|
14
|
-
[key: string]: string[];
|
|
15
|
-
};
|
|
16
|
-
template: TemplateRef<any>;
|
|
17
|
-
allowedShareGroups$: Observable<string[] | null>;
|
|
18
|
-
disableShareButton$: BehaviorSubject<boolean>;
|
|
19
|
-
constructor(store: Store, access: PryBaseAccess, overlay: Overlay, viewContainerRef: ViewContainerRef);
|
|
6
|
+
private dialog;
|
|
7
|
+
constructor(store: Store, access: PryBaseAccess, dialog: PryDialogService);
|
|
20
8
|
trigger(): void;
|
|
21
|
-
|
|
22
|
-
validate(): void;
|
|
23
|
-
updateAccessRights($event: {
|
|
24
|
-
[key: string]: string[];
|
|
25
|
-
}): void;
|
|
26
|
-
updateDisableButtonValue(): void;
|
|
27
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ShareComponent, [null, { optional: true; }, null, null]>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ShareComponent, [null, { optional: true; }, null]>;
|
|
28
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<ShareComponent, "pry-share-pres", never, {}, {}, never, never, false, never>;
|
|
29
11
|
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
2
|
import { Store } from '@ngrx/store';
|
|
3
3
|
import { ManifestDescription, PryBaseAccess, SubscriptionnerDirective } from '@provoly/dashboard';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class ToolboxActionComponent extends SubscriptionnerDirective {
|
|
6
7
|
protected store: Store;
|
|
7
8
|
protected access: PryBaseAccess;
|
|
8
9
|
displayLabels: boolean;
|
|
9
10
|
closeOptions: EventEmitter<void>;
|
|
11
|
+
currentManifest$: Observable<ManifestDescription | undefined>;
|
|
10
12
|
currentManifest: ManifestDescription | undefined;
|
|
11
13
|
constructor(store: Store, access: PryBaseAccess);
|
|
12
14
|
close(): void;
|
|
13
|
-
canModify$():
|
|
15
|
+
canModify$(): Observable<boolean>;
|
|
14
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<ToolboxActionComponent, [null, { optional: true; }]>;
|
|
15
17
|
static ɵcmp: i0.ɵɵComponentDeclaration<ToolboxActionComponent, "pry-toolbox-action", never, { "displayLabels": { "alias": "displayLabels"; "required": false; }; }, { "closeOptions": "closeOptions"; }, never, never, false, never>;
|
|
16
18
|
}
|