@progress/kendo-angular-pager 4.0.6 → 4.1.0-dev.202211230837
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/bundles/kendo-angular-pager.umd.js +1 -1
- package/esm2015/main.js +1 -0
- package/esm2015/package-metadata.js +1 -1
- package/esm2015/pager/focusable.directive.js +51 -0
- package/esm2015/pager/localization/custom-messages.component.js +3 -3
- package/esm2015/pager/localization/localized-messages.directive.js +3 -3
- package/esm2015/pager/localization/messages.js +5 -3
- package/esm2015/pager/navigation.service.js +37 -0
- package/esm2015/pager/pager-element.component.js +3 -3
- package/esm2015/pager/pager-info.component.js +3 -3
- package/esm2015/pager/pager-input.component.js +15 -9
- package/esm2015/pager/pager-next-buttons.component.js +9 -8
- package/esm2015/pager/pager-numeric-buttons.component.js +20 -13
- package/esm2015/pager/pager-page-sizes.component.js +7 -6
- package/esm2015/pager/pager-prev-buttons.component.js +9 -8
- package/esm2015/pager/pager-template.directive.js +3 -3
- package/esm2015/pager/pager.component.js +138 -20
- package/esm2015/pager/pager.module.js +11 -7
- package/esm2015/util.js +26 -0
- package/fesm2015/kendo-angular-pager.js +320 -87
- package/main.d.ts +1 -0
- package/package.json +1 -1
- package/pager/focusable.directive.d.ts +23 -0
- package/pager/localization/messages.d.ts +5 -1
- package/pager/navigation.service.d.ts +15 -0
- package/pager/pager-input.component.d.ts +4 -2
- package/pager/pager.component.d.ts +27 -3
- package/pager/pager.module.d.ts +6 -5
- package/util.d.ts +8 -0
|
@@ -7,7 +7,8 @@ import { PagerElementComponent } from './pager-element.component';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@progress/kendo-angular-l10n";
|
|
9
9
|
import * as i2 from "./pager-context.service";
|
|
10
|
-
import * as i3 from "
|
|
10
|
+
import * as i3 from "./focusable.directive";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
11
12
|
/**
|
|
12
13
|
* Displays numeric buttons to enable navigation between the pages.
|
|
13
14
|
*/
|
|
@@ -87,9 +88,9 @@ export class PagerNumericButtonsComponent extends PagerElementComponent {
|
|
|
87
88
|
return this.textFor('selectPage');
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
91
|
-
PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
|
92
|
-
<select
|
|
91
|
+
PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
+
PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, host: { properties: { "class.k-pager-numbers-wrap": "this.numbersWrapClass" } }, usesInheritance: true, ngImport: i0, template: `
|
|
93
|
+
<select kendoPagerFocusable
|
|
93
94
|
class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
|
|
94
95
|
[attr.title]="pageChooserLabel"
|
|
95
96
|
[attr.aria-label]="pageChooserLabel"
|
|
@@ -118,15 +119,17 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
|
|
|
118
119
|
<ul [ngClass]="{'k-pager-numbers': true}">
|
|
119
120
|
<li *ngIf="start > 1">
|
|
120
121
|
<button
|
|
121
|
-
type="button"
|
|
122
|
+
type="button" kendoPagerFocusable
|
|
122
123
|
class="k-link"
|
|
123
124
|
[attr.aria-label]="pageLabel(start - 1)"
|
|
125
|
+
[attr.title]="pageLabel(start - 1)"
|
|
124
126
|
(click)="changePage(start - 2)">...</button>
|
|
125
127
|
</li>
|
|
126
128
|
<li *ngFor="let num of buttons">
|
|
127
129
|
<button
|
|
128
|
-
type="button"
|
|
130
|
+
type="button" kendoPagerFocusable
|
|
129
131
|
[attr.aria-label]="pageLabel(num)"
|
|
132
|
+
[attr.title]="pageLabel(num)"
|
|
130
133
|
[attr.aria-current]="currentPage === num ? 'page' : undefined"
|
|
131
134
|
[ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
|
|
132
135
|
(click)="changePage(num - 1)">
|
|
@@ -135,20 +138,21 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
|
|
|
135
138
|
</li>
|
|
136
139
|
<li *ngIf="end < totalPages">
|
|
137
140
|
<button
|
|
138
|
-
type="button"
|
|
141
|
+
type="button" kendoPagerFocusable
|
|
139
142
|
class="k-link"
|
|
140
143
|
[attr.aria-label]="pageLabel(end + 1)"
|
|
144
|
+
[attr.title]="pageLabel(end + 1)"
|
|
141
145
|
(click)="changePage(end)">...</button>
|
|
142
146
|
</li>
|
|
143
147
|
</ul>
|
|
144
|
-
`, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type:
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
148
|
+
`, isInline: true, directives: [{ type: i3.PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
|
|
146
150
|
type: Component,
|
|
147
151
|
args: [{
|
|
148
152
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
149
153
|
selector: 'kendo-datapager-numeric-buttons',
|
|
150
154
|
template: `
|
|
151
|
-
<select
|
|
155
|
+
<select kendoPagerFocusable
|
|
152
156
|
class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
|
|
153
157
|
[attr.title]="pageChooserLabel"
|
|
154
158
|
[attr.aria-label]="pageChooserLabel"
|
|
@@ -177,15 +181,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
177
181
|
<ul [ngClass]="{'k-pager-numbers': true}">
|
|
178
182
|
<li *ngIf="start > 1">
|
|
179
183
|
<button
|
|
180
|
-
type="button"
|
|
184
|
+
type="button" kendoPagerFocusable
|
|
181
185
|
class="k-link"
|
|
182
186
|
[attr.aria-label]="pageLabel(start - 1)"
|
|
187
|
+
[attr.title]="pageLabel(start - 1)"
|
|
183
188
|
(click)="changePage(start - 2)">...</button>
|
|
184
189
|
</li>
|
|
185
190
|
<li *ngFor="let num of buttons">
|
|
186
191
|
<button
|
|
187
|
-
type="button"
|
|
192
|
+
type="button" kendoPagerFocusable
|
|
188
193
|
[attr.aria-label]="pageLabel(num)"
|
|
194
|
+
[attr.title]="pageLabel(num)"
|
|
189
195
|
[attr.aria-current]="currentPage === num ? 'page' : undefined"
|
|
190
196
|
[ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
|
|
191
197
|
(click)="changePage(num - 1)">
|
|
@@ -194,9 +200,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
194
200
|
</li>
|
|
195
201
|
<li *ngIf="end < totalPages">
|
|
196
202
|
<button
|
|
197
|
-
type="button"
|
|
203
|
+
type="button" kendoPagerFocusable
|
|
198
204
|
class="k-link"
|
|
199
205
|
[attr.aria-label]="pageLabel(end + 1)"
|
|
206
|
+
[attr.title]="pageLabel(end + 1)"
|
|
200
207
|
(click)="changePage(end)">...</button>
|
|
201
208
|
</li>
|
|
202
209
|
</ul>
|
|
@@ -9,6 +9,7 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
import * as i1 from "@progress/kendo-angular-l10n";
|
|
10
10
|
import * as i2 from "./pager-context.service";
|
|
11
11
|
import * as i3 from "@progress/kendo-angular-dropdowns";
|
|
12
|
+
import * as i4 from "./focusable.directive";
|
|
12
13
|
/**
|
|
13
14
|
* Displays a drop-down list for the page size selection ([see example]({% slug pager_settings %})).
|
|
14
15
|
*/
|
|
@@ -187,9 +188,9 @@ export class PagerPageSizesComponent extends PagerElementComponent {
|
|
|
187
188
|
this.cd.markForCheck();
|
|
188
189
|
}
|
|
189
190
|
}
|
|
190
|
-
PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
191
|
-
PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
|
192
|
-
<kendo-dropdownlist
|
|
191
|
+
PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
192
|
+
PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, viewQueries: [{ propertyName: "dropDownList", first: true, predicate: ["dropdownlist"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
193
|
+
<kendo-dropdownlist kendoPagerFocusable
|
|
193
194
|
#dropdownlist
|
|
194
195
|
[data]="pageSizes"
|
|
195
196
|
textField="text"
|
|
@@ -198,14 +199,14 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
|
|
|
198
199
|
[value]="pageSize"
|
|
199
200
|
(valueChange)="pageSizeChange($event, dropdownlist)"></kendo-dropdownlist>
|
|
200
201
|
{{ textFor('itemsPerPage') }}
|
|
201
|
-
`, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
202
|
+
`, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
|
|
203
204
|
type: Component,
|
|
204
205
|
args: [{
|
|
205
206
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
206
207
|
selector: 'kendo-datapager-page-sizes',
|
|
207
208
|
template: `
|
|
208
|
-
<kendo-dropdownlist
|
|
209
|
+
<kendo-dropdownlist kendoPagerFocusable
|
|
209
210
|
#dropdownlist
|
|
210
211
|
[data]="pageSizes"
|
|
211
212
|
textField="text"
|
|
@@ -8,6 +8,7 @@ import { PagerElementComponent } from './pager-element.component';
|
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "@progress/kendo-angular-l10n";
|
|
10
10
|
import * as i2 from "./pager-context.service";
|
|
11
|
+
import * as i3 from "./focusable.directive";
|
|
11
12
|
/**
|
|
12
13
|
* Displays buttons for navigating to the first and to the previous page ([see example]({% slug pager_settings %})).
|
|
13
14
|
*/
|
|
@@ -32,10 +33,10 @@ export class PagerPrevButtonsComponent extends PagerElementComponent {
|
|
|
32
33
|
this.cd.markForCheck();
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
|
-
PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
36
|
-
PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
|
36
|
+
PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
+
PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
|
|
37
38
|
<button
|
|
38
|
-
type="button"
|
|
39
|
+
type="button" kendoPagerFocusable
|
|
39
40
|
class="k-link k-pager-nav k-pager-first"
|
|
40
41
|
[class.k-disabled]="disabled"
|
|
41
42
|
[title]="textFor('firstPage')"
|
|
@@ -45,7 +46,7 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
|
|
|
45
46
|
<span class="k-icon k-i-seek-w" role="note" [attr.aria-label]="textFor('firstPage')"></span>
|
|
46
47
|
</button>
|
|
47
48
|
<button
|
|
48
|
-
type="button"
|
|
49
|
+
type="button" kendoPagerFocusable
|
|
49
50
|
class="k-link k-pager-nav"
|
|
50
51
|
[class.k-disabled]="disabled"
|
|
51
52
|
[title]="textFor('previousPage')"
|
|
@@ -54,15 +55,15 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
|
|
|
54
55
|
(click)="currentPage !== 1 ? changePage(currentPage-2) : false">
|
|
55
56
|
<span class="k-icon k-i-arrow-w" role="note" [attr.aria-label]="textFor('previousPage')"></span>
|
|
56
57
|
</button>
|
|
57
|
-
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
58
|
+
`, isInline: true, directives: [{ type: i3.PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
|
|
59
60
|
type: Component,
|
|
60
61
|
args: [{
|
|
61
62
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
62
63
|
selector: 'kendo-datapager-prev-buttons',
|
|
63
64
|
template: `
|
|
64
65
|
<button
|
|
65
|
-
type="button"
|
|
66
|
+
type="button" kendoPagerFocusable
|
|
66
67
|
class="k-link k-pager-nav k-pager-first"
|
|
67
68
|
[class.k-disabled]="disabled"
|
|
68
69
|
[title]="textFor('firstPage')"
|
|
@@ -72,7 +73,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
72
73
|
<span class="k-icon k-i-seek-w" role="note" [attr.aria-label]="textFor('firstPage')"></span>
|
|
73
74
|
</button>
|
|
74
75
|
<button
|
|
75
|
-
type="button"
|
|
76
|
+
type="button" kendoPagerFocusable
|
|
76
77
|
class="k-link k-pager-nav"
|
|
77
78
|
[class.k-disabled]="disabled"
|
|
78
79
|
[title]="textFor('previousPage')"
|
|
@@ -51,9 +51,9 @@ export class PagerTemplateDirective {
|
|
|
51
51
|
this.templateRef = templateRef;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
PagerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
55
|
-
PagerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
54
|
+
PagerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
PagerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: PagerTemplateDirective, selector: "[kendoDataPagerTemplate]", ngImport: i0 });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerTemplateDirective, decorators: [{
|
|
57
57
|
type: Directive,
|
|
58
58
|
args: [{
|
|
59
59
|
selector: '[kendoDataPagerTemplate]'
|
|
@@ -3,32 +3,37 @@
|
|
|
3
3
|
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { RESPONSIVE_BREAKPOINT_MEDIUM, RESPONSIVE_BREAKPOINT_LARGE } from './common/constants';
|
|
6
|
-
import { Component, Input, EventEmitter, Output, HostBinding, ViewChild, ContentChild } from '@angular/core';
|
|
6
|
+
import { Component, Input, EventEmitter, Output, HostBinding, ViewChild, ContentChild, HostListener } from '@angular/core';
|
|
7
7
|
import { PagerTemplateDirective } from "./pager-template.directive";
|
|
8
|
-
import { anyChanged, ResizeSensorComponent } from "@progress/kendo-angular-common";
|
|
8
|
+
import { anyChanged, Keys, ResizeSensorComponent } from "@progress/kendo-angular-common";
|
|
9
9
|
import { PagerContextService } from "./pager-context.service";
|
|
10
10
|
import { Subscription } from "rxjs";
|
|
11
11
|
import { DEFAULT_PAGE_SIZE_VALUES } from '../util';
|
|
12
12
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
13
13
|
import { validatePackage } from '@progress/kendo-licensing';
|
|
14
14
|
import { packageMetadata } from '../package-metadata';
|
|
15
|
+
import { PagerNavigationService } from './navigation.service';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "./pager-context.service";
|
|
17
18
|
import * as i2 from "@progress/kendo-angular-l10n";
|
|
18
|
-
import * as i3 from "./
|
|
19
|
-
import * as i4 from "./pager-
|
|
20
|
-
import * as i5 from "./pager-
|
|
21
|
-
import * as i6 from "./pager-
|
|
22
|
-
import * as i7 from "./pager-
|
|
23
|
-
import * as i8 from "./pager-
|
|
24
|
-
import * as i9 from "
|
|
25
|
-
import * as i10 from "
|
|
26
|
-
import * as i11 from "
|
|
19
|
+
import * as i3 from "./navigation.service";
|
|
20
|
+
import * as i4 from "./pager-prev-buttons.component";
|
|
21
|
+
import * as i5 from "./pager-numeric-buttons.component";
|
|
22
|
+
import * as i6 from "./pager-input.component";
|
|
23
|
+
import * as i7 from "./pager-next-buttons.component";
|
|
24
|
+
import * as i8 from "./pager-info.component";
|
|
25
|
+
import * as i9 from "./pager-page-sizes.component";
|
|
26
|
+
import * as i10 from "@progress/kendo-angular-common";
|
|
27
|
+
import * as i11 from "./localization/localized-messages.directive";
|
|
28
|
+
import * as i12 from "@angular/common";
|
|
27
29
|
export class PagerComponent {
|
|
28
|
-
constructor(pagerContext, element, localization) {
|
|
30
|
+
constructor(pagerContext, element, localization, renderer, ngZone, navigationService) {
|
|
29
31
|
this.pagerContext = pagerContext;
|
|
30
32
|
this.element = element;
|
|
31
33
|
this.localization = localization;
|
|
34
|
+
this.renderer = renderer;
|
|
35
|
+
this.ngZone = ngZone;
|
|
36
|
+
this.navigationService = navigationService;
|
|
32
37
|
/**
|
|
33
38
|
* Represents the total number of data items in the collection.
|
|
34
39
|
*/
|
|
@@ -65,10 +70,15 @@ export class PagerComponent {
|
|
|
65
70
|
*/
|
|
66
71
|
this.pageSizeChange = new EventEmitter();
|
|
67
72
|
this.pagerClass = true;
|
|
68
|
-
this.widgetRole = '
|
|
73
|
+
this.widgetRole = 'application';
|
|
74
|
+
this.roleDescription = 'pager';
|
|
75
|
+
this.keyShortcuts = 'Enter ArrowRight ArrowLeft';
|
|
76
|
+
this.hostTabindex = '0';
|
|
69
77
|
this.subscriptions = new Subscription();
|
|
70
78
|
this._templateContext = {};
|
|
71
79
|
this._pageSizeValues = DEFAULT_PAGE_SIZE_VALUES;
|
|
80
|
+
this.isInnerNavigationEnabled = false;
|
|
81
|
+
this._navigable = false;
|
|
72
82
|
this.resizeHandler = () => {
|
|
73
83
|
if (this.template) {
|
|
74
84
|
return;
|
|
@@ -100,9 +110,30 @@ export class PagerComponent {
|
|
|
100
110
|
set pageSizeValues(pageSizeValues) {
|
|
101
111
|
this._pageSizeValues = Array.isArray(pageSizeValues) ? pageSizeValues : pageSizeValues ? DEFAULT_PAGE_SIZE_VALUES : false;
|
|
102
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* If set to `true`, the user can use dedicated shortcuts to interact with the Pager ([see example]({% slug keyboard_navigation_pager %})).
|
|
115
|
+
* By default, navigation is disabled and the Pager content is accessible in the normal tab sequence.
|
|
116
|
+
* @default false
|
|
117
|
+
*/
|
|
118
|
+
set navigable(value) {
|
|
119
|
+
this._navigable = value;
|
|
120
|
+
this.navigationService.isNavigable = value;
|
|
121
|
+
}
|
|
122
|
+
;
|
|
123
|
+
get navigable() {
|
|
124
|
+
return this._navigable;
|
|
125
|
+
}
|
|
126
|
+
;
|
|
103
127
|
get dir() {
|
|
104
128
|
return this.direction;
|
|
105
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* @hidden
|
|
132
|
+
*/
|
|
133
|
+
focusHandler(ev) {
|
|
134
|
+
const isInnerNavigationEnabled = ev.target !== this.element.nativeElement;
|
|
135
|
+
this.navigationService.toggleInnerNavigation(isInnerNavigationEnabled);
|
|
136
|
+
}
|
|
106
137
|
get totalPages() {
|
|
107
138
|
return Math.ceil((this.total || 0) / this.pageSize);
|
|
108
139
|
}
|
|
@@ -128,9 +159,17 @@ export class PagerComponent {
|
|
|
128
159
|
this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
|
|
129
160
|
this.direction = rtl ? 'rtl' : 'ltr';
|
|
130
161
|
}));
|
|
162
|
+
this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
|
|
163
|
+
if (this.navigable) {
|
|
164
|
+
const wrapper = this.element.nativeElement;
|
|
165
|
+
this.ngZone.runOutsideAngular(() => {
|
|
166
|
+
this.subscriptions.add(this.renderer.listen(wrapper, 'keydown', this.keyDownHandler.bind(this)));
|
|
167
|
+
});
|
|
168
|
+
}
|
|
131
169
|
}
|
|
132
170
|
ngAfterViewInit() {
|
|
133
171
|
this.resizeHandler();
|
|
172
|
+
this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
|
|
134
173
|
}
|
|
135
174
|
ngOnChanges(changes) {
|
|
136
175
|
if (anyChanged(["pageSize", "skip", "total"], changes, false)) {
|
|
@@ -139,6 +178,7 @@ export class PagerComponent {
|
|
|
139
178
|
skip: this.skip,
|
|
140
179
|
total: this.total
|
|
141
180
|
});
|
|
181
|
+
this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
|
|
142
182
|
}
|
|
143
183
|
}
|
|
144
184
|
ngOnDestroy() {
|
|
@@ -173,11 +213,68 @@ export class PagerComponent {
|
|
|
173
213
|
this.pageChange.emit({ skip: this.skip, take: event.newPageSize });
|
|
174
214
|
}
|
|
175
215
|
}
|
|
216
|
+
textFor(value) {
|
|
217
|
+
return this.localization.get(value);
|
|
218
|
+
}
|
|
219
|
+
get ariaLabel() {
|
|
220
|
+
return `${this.textFor('page')} ${this.currentPage} ${this.textFor('of')} ${this.totalPages}`;
|
|
221
|
+
}
|
|
222
|
+
keyDownHandler(e) {
|
|
223
|
+
const target = e.target;
|
|
224
|
+
const wrapper = this.element.nativeElement;
|
|
225
|
+
const isArrowLeftOrPageUp = e.keyCode === Keys.ArrowLeft || e.keyCode === Keys.PageUp;
|
|
226
|
+
const isArrowRightOrPageDown = e.keyCode === Keys.ArrowRight || e.keyCode === Keys.PageDown;
|
|
227
|
+
const isEnter = e.keyCode === Keys.Enter;
|
|
228
|
+
const isHome = e.keyCode === Keys.Home;
|
|
229
|
+
const isEnd = e.keyCode === Keys.End;
|
|
230
|
+
const isEsc = e.keyCode === Keys.Escape;
|
|
231
|
+
const isTab = e.keyCode === Keys.Tab;
|
|
232
|
+
const isFirstPage = this.currentPage === 1;
|
|
233
|
+
const isLastPage = this.currentPage === this.totalPages;
|
|
234
|
+
this.ngZone.run(() => {
|
|
235
|
+
if (isHome && !isFirstPage) {
|
|
236
|
+
this.pagerContext.changePage(0);
|
|
237
|
+
}
|
|
238
|
+
else if (isEnd && !isLastPage) {
|
|
239
|
+
this.pagerContext.changePage(this.totalPages - 1);
|
|
240
|
+
}
|
|
241
|
+
else if (this.isInnerNavigationEnabled) {
|
|
242
|
+
if (isEsc) {
|
|
243
|
+
this.navigationService.toggleInnerNavigation(false);
|
|
244
|
+
wrapper.focus();
|
|
245
|
+
}
|
|
246
|
+
else if (isTab) {
|
|
247
|
+
this.navigationService.keepFocusWithinComponent(wrapper, target, e);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
if (isArrowLeftOrPageUp && !isFirstPage) {
|
|
252
|
+
this.pagerContext.prevPage();
|
|
253
|
+
}
|
|
254
|
+
else if (isArrowRightOrPageDown && !isLastPage) {
|
|
255
|
+
this.pagerContext.nextPage();
|
|
256
|
+
}
|
|
257
|
+
else if (isEnter) {
|
|
258
|
+
if (e.target !== wrapper) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
e.preventDefault();
|
|
262
|
+
const [firstFocusable] = this.navigationService.getFirstAndLastFocusable(wrapper);
|
|
263
|
+
this.navigationService.toggleInnerNavigation(true);
|
|
264
|
+
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
innerNavigationChange(value) {
|
|
270
|
+
this.isInnerNavigationEnabled = value;
|
|
271
|
+
}
|
|
176
272
|
}
|
|
177
|
-
PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
178
|
-
PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
|
273
|
+
PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerComponent, deps: [{ token: i1.PagerContextService }, { token: i0.ElementRef }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i3.PagerNavigationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
274
|
+
PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerComponent, selector: "kendo-datapager", inputs: { total: "total", skip: "skip", pageSize: "pageSize", buttonCount: "buttonCount", info: "info", type: "type", pageSizeValues: "pageSizeValues", previousNext: "previousNext", navigable: "navigable" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, host: { listeners: { "focusin": "focusHandler($event)" }, properties: { "class.k-pager": "this.pagerClass", "attr.role": "this.widgetRole", "attr.aria-roledescription": "this.roleDescription", "attr.aria-keyshortcuts": "this.keyShortcuts", "attr.tabindex": "this.hostTabindex", "attr.dir": "this.dir" } }, providers: [
|
|
179
275
|
LocalizationService,
|
|
180
|
-
PagerContextService
|
|
276
|
+
PagerContextService,
|
|
277
|
+
PagerNavigationService
|
|
181
278
|
], queries: [{ propertyName: "template", first: true, predicate: PagerTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "resizeSensor", first: true, predicate: ResizeSensorComponent, descendants: true, static: true }], exportAs: ["kendoDataPager"], usesOnChanges: true, ngImport: i0, template: `
|
|
182
279
|
<ng-container kendoDataPagerLocalizedMessages
|
|
183
280
|
i18n-firstPage="kendo.pager.firstPage|The label for the first page button in the Pager"
|
|
@@ -209,6 +306,9 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
209
306
|
|
|
210
307
|
i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
|
|
211
308
|
selectPage="Select page"
|
|
309
|
+
|
|
310
|
+
i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
|
|
311
|
+
inputLabel="Type a page number"
|
|
212
312
|
>
|
|
213
313
|
</ng-container>
|
|
214
314
|
<ng-container
|
|
@@ -228,15 +328,16 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
228
328
|
<kendo-datapager-page-sizes *ngIf="pageSizeValues" [pageSizes]="pageSizeValues"></kendo-datapager-page-sizes>
|
|
229
329
|
</ng-container>
|
|
230
330
|
<kendo-resize-sensor></kendo-resize-sensor>
|
|
231
|
-
`, isInline: true, components: [{ type:
|
|
232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
331
|
+
`, isInline: true, components: [{ type: i4.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons" }, { type: i5.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: ["buttonCount"] }, { type: i6.PagerInputComponent, selector: "kendo-datapager-input" }, { type: i7.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons" }, { type: i8.PagerInfoComponent, selector: "kendo-datapager-info" }, { type: i9.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: ["pageSizes"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i11.LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerComponent, decorators: [{
|
|
233
333
|
type: Component,
|
|
234
334
|
args: [{
|
|
235
335
|
selector: 'kendo-datapager',
|
|
236
336
|
exportAs: 'kendoDataPager',
|
|
237
337
|
providers: [
|
|
238
338
|
LocalizationService,
|
|
239
|
-
PagerContextService
|
|
339
|
+
PagerContextService,
|
|
340
|
+
PagerNavigationService
|
|
240
341
|
],
|
|
241
342
|
template: `
|
|
242
343
|
<ng-container kendoDataPagerLocalizedMessages
|
|
@@ -269,6 +370,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
269
370
|
|
|
270
371
|
i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
|
|
271
372
|
selectPage="Select page"
|
|
373
|
+
|
|
374
|
+
i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
|
|
375
|
+
inputLabel="Type a page number"
|
|
272
376
|
>
|
|
273
377
|
</ng-container>
|
|
274
378
|
<ng-container
|
|
@@ -290,7 +394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
290
394
|
<kendo-resize-sensor></kendo-resize-sensor>
|
|
291
395
|
`
|
|
292
396
|
}]
|
|
293
|
-
}], ctorParameters: function () { return [{ type: i1.PagerContextService }, { type: i0.ElementRef }, { type: i2.LocalizationService }]; }, propDecorators: { resizeSensor: [{
|
|
397
|
+
}], ctorParameters: function () { return [{ type: i1.PagerContextService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i3.PagerNavigationService }]; }, propDecorators: { resizeSensor: [{
|
|
294
398
|
type: ViewChild,
|
|
295
399
|
args: [ResizeSensorComponent, { static: true }]
|
|
296
400
|
}], template: [{
|
|
@@ -312,6 +416,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
312
416
|
type: Input
|
|
313
417
|
}], previousNext: [{
|
|
314
418
|
type: Input
|
|
419
|
+
}], navigable: [{
|
|
420
|
+
type: Input
|
|
315
421
|
}], pageChange: [{
|
|
316
422
|
type: Output
|
|
317
423
|
}], pageSizeChange: [{
|
|
@@ -322,7 +428,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
322
428
|
}], widgetRole: [{
|
|
323
429
|
type: HostBinding,
|
|
324
430
|
args: ['attr.role']
|
|
431
|
+
}], roleDescription: [{
|
|
432
|
+
type: HostBinding,
|
|
433
|
+
args: ['attr.aria-roledescription']
|
|
434
|
+
}], keyShortcuts: [{
|
|
435
|
+
type: HostBinding,
|
|
436
|
+
args: ['attr.aria-keyshortcuts']
|
|
437
|
+
}], hostTabindex: [{
|
|
438
|
+
type: HostBinding,
|
|
439
|
+
args: ['attr.tabindex']
|
|
325
440
|
}], dir: [{
|
|
326
441
|
type: HostBinding,
|
|
327
442
|
args: ['attr.dir']
|
|
443
|
+
}], focusHandler: [{
|
|
444
|
+
type: HostListener,
|
|
445
|
+
args: ['focusin', ['$event']]
|
|
328
446
|
}] } });
|
|
@@ -19,6 +19,7 @@ import { EventsModule } from '@progress/kendo-angular-common';
|
|
|
19
19
|
import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
|
|
20
20
|
import { CustomMessagesComponent } from './localization/custom-messages.component';
|
|
21
21
|
import { ResizeSensorModule } from '@progress/kendo-angular-common';
|
|
22
|
+
import { PagerFocusableDirective } from './focusable.directive';
|
|
22
23
|
import * as i0 from "@angular/core";
|
|
23
24
|
const importedModules = [
|
|
24
25
|
CommonModule,
|
|
@@ -37,7 +38,8 @@ const INTERNAL_COMPONENTS = [
|
|
|
37
38
|
PagerPageSizesComponent,
|
|
38
39
|
PagerTemplateDirective,
|
|
39
40
|
LocalizedMessagesDirective,
|
|
40
|
-
CustomMessagesComponent
|
|
41
|
+
CustomMessagesComponent,
|
|
42
|
+
PagerFocusableDirective
|
|
41
43
|
];
|
|
42
44
|
const providers = [
|
|
43
45
|
{
|
|
@@ -62,8 +64,8 @@ export class PagerModule {
|
|
|
62
64
|
];
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
PagerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
66
|
-
PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
|
67
|
+
PagerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
68
|
+
PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, declarations: [PagerComponent,
|
|
67
69
|
PagerPrevButtonsComponent,
|
|
68
70
|
PagerNextButtonsComponent,
|
|
69
71
|
PagerNumericButtonsComponent,
|
|
@@ -72,7 +74,8 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
72
74
|
PagerPageSizesComponent,
|
|
73
75
|
PagerTemplateDirective,
|
|
74
76
|
LocalizedMessagesDirective,
|
|
75
|
-
CustomMessagesComponent
|
|
77
|
+
CustomMessagesComponent,
|
|
78
|
+
PagerFocusableDirective], imports: [CommonModule,
|
|
76
79
|
NumericTextBoxModule,
|
|
77
80
|
DropDownListModule,
|
|
78
81
|
EventsModule,
|
|
@@ -85,9 +88,10 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
85
88
|
PagerPageSizesComponent,
|
|
86
89
|
PagerTemplateDirective,
|
|
87
90
|
LocalizedMessagesDirective,
|
|
88
|
-
CustomMessagesComponent
|
|
89
|
-
|
|
90
|
-
i0.ɵɵ
|
|
91
|
+
CustomMessagesComponent,
|
|
92
|
+
PagerFocusableDirective] });
|
|
93
|
+
PagerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, providers: [providers], imports: [[...importedModules]] });
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, decorators: [{
|
|
91
95
|
type: NgModule,
|
|
92
96
|
args: [{
|
|
93
97
|
declarations: [INTERNAL_COMPONENTS],
|
package/esm2015/util.js
CHANGED
|
@@ -6,3 +6,29 @@
|
|
|
6
6
|
* @hidden
|
|
7
7
|
*/
|
|
8
8
|
export const DEFAULT_PAGE_SIZE_VALUES = [5, 10, 20];
|
|
9
|
+
/**
|
|
10
|
+
* @hidden
|
|
11
|
+
*/
|
|
12
|
+
const focusableDirectiveSelector = '[kendoPagerFocusable]';
|
|
13
|
+
/**
|
|
14
|
+
* @hidden
|
|
15
|
+
*/
|
|
16
|
+
export const getAllFocusableChildren = (parent) => {
|
|
17
|
+
return parent.querySelectorAll(focusableDirectiveSelector);
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @hidden
|
|
21
|
+
*/
|
|
22
|
+
export const focusableSelector = [
|
|
23
|
+
'a[href]:not([disabled])',
|
|
24
|
+
'area[href]:not([disabled])',
|
|
25
|
+
'input:not([disabled])',
|
|
26
|
+
'select:not([disabled])',
|
|
27
|
+
'textarea:not([disabled])',
|
|
28
|
+
'button',
|
|
29
|
+
'iframe:not([disabled])',
|
|
30
|
+
'object:not([disabled])',
|
|
31
|
+
'embed:not([disabled])',
|
|
32
|
+
'*[tabindex]:not([disabled])',
|
|
33
|
+
'*[contenteditable]:not([disabled]):not([contenteditable="false"])'
|
|
34
|
+
].join(',');
|