@swimlane/ngx-datatable 11.1.4 → 11.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +6 -0
- package/README.md +2 -1
- package/config/deploy.js +2 -2
- package/config/karma.conf.js +5 -0
- package/config/webpack.package.js +4 -0
- package/package.json +15 -14
- package/release/components/body/body-cell.component.js.map +1 -1
- package/release/components/body/body-cell.component.metadata.json +1 -1
- package/release/components/body/body-group-header-template.directive.js.map +1 -1
- package/release/components/body/body-group-header-template.directive.metadata.json +1 -1
- package/release/components/body/body-group-header.directive.d.ts +4 -5
- package/release/components/body/body-group-header.directive.js +4 -5
- package/release/components/body/body-group-header.directive.js.map +1 -1
- package/release/components/body/body-group-header.directive.metadata.json +1 -1
- package/release/components/body/body-row-wrapper.component.js.map +1 -1
- package/release/components/body/body-row-wrapper.component.metadata.json +1 -1
- package/release/components/body/body-row.component.js +5 -1
- package/release/components/body/body-row.component.js.map +1 -1
- package/release/components/body/body-row.component.metadata.json +1 -1
- package/release/components/body/body.component.d.ts +2 -1
- package/release/components/body/body.component.js +31 -16
- package/release/components/body/body.component.js.map +1 -1
- package/release/components/body/body.component.metadata.json +1 -1
- package/release/components/body/index.js.map +1 -1
- package/release/components/body/index.metadata.json +1 -1
- package/release/components/body/progress-bar.component.js.map +1 -1
- package/release/components/body/progress-bar.component.metadata.json +1 -1
- package/release/components/body/scroller.component.d.ts +3 -2
- package/release/components/body/scroller.component.js +5 -3
- package/release/components/body/scroller.component.js.map +1 -1
- package/release/components/body/scroller.component.metadata.json +1 -1
- package/release/components/body/selection.component.js.map +1 -1
- package/release/components/body/selection.component.metadata.json +1 -1
- package/release/components/columns/column-cell.directive.js.map +1 -1
- package/release/components/columns/column-cell.directive.metadata.json +1 -1
- package/release/components/columns/column-header.directive.js.map +1 -1
- package/release/components/columns/column-header.directive.metadata.json +1 -1
- package/release/components/columns/column.directive.js.map +1 -1
- package/release/components/columns/column.directive.metadata.json +1 -1
- package/release/components/columns/index.js.map +1 -1
- package/release/components/columns/index.metadata.json +1 -1
- package/release/components/datatable.component.css +7 -2
- package/release/components/datatable.component.d.ts +8 -3
- package/release/components/datatable.component.js +29 -11
- package/release/components/datatable.component.js.map +1 -1
- package/release/components/datatable.component.metadata.json +1 -1
- package/release/components/footer/footer-template.directive.js.map +1 -1
- package/release/components/footer/footer-template.directive.metadata.json +1 -1
- package/release/components/footer/footer.component.js.map +1 -1
- package/release/components/footer/footer.component.metadata.json +1 -1
- package/release/components/footer/footer.directive.js.map +1 -1
- package/release/components/footer/footer.directive.metadata.json +1 -1
- package/release/components/footer/index.js.map +1 -1
- package/release/components/footer/index.metadata.json +1 -1
- package/release/components/footer/pager.component.js +1 -1
- package/release/components/footer/pager.component.js.map +1 -1
- package/release/components/footer/pager.component.metadata.json +1 -1
- package/release/components/header/header-cell.component.js +2 -1
- package/release/components/header/header-cell.component.js.map +1 -1
- package/release/components/header/header-cell.component.metadata.json +1 -1
- package/release/components/header/header.component.js +1 -0
- package/release/components/header/header.component.js.map +1 -1
- package/release/components/header/header.component.metadata.json +1 -1
- package/release/components/header/index.js.map +1 -1
- package/release/components/header/index.metadata.json +1 -1
- package/release/components/index.js.map +1 -1
- package/release/components/index.metadata.json +1 -1
- package/release/components/row-detail/index.js.map +1 -1
- package/release/components/row-detail/index.metadata.json +1 -1
- package/release/components/row-detail/row-detail-template.directive.js.map +1 -1
- package/release/components/row-detail/row-detail-template.directive.metadata.json +1 -1
- package/release/components/row-detail/row-detail.directive.js.map +1 -1
- package/release/components/row-detail/row-detail.directive.metadata.json +1 -1
- package/release/datatable.module.d.ts +0 -1
- package/release/datatable.module.js +2 -2
- package/release/datatable.module.js.map +1 -1
- package/release/datatable.module.metadata.json +1 -1
- package/release/directives/draggable.directive.js +3 -3
- package/release/directives/draggable.directive.js.map +1 -1
- package/release/directives/draggable.directive.metadata.json +1 -1
- package/release/directives/index.js.map +1 -1
- package/release/directives/index.metadata.json +1 -1
- package/release/directives/long-press.directive.js +3 -3
- package/release/directives/long-press.directive.js.map +1 -1
- package/release/directives/long-press.directive.metadata.json +1 -1
- package/release/directives/orderable.directive.js.map +1 -1
- package/release/directives/orderable.directive.metadata.json +1 -1
- package/release/directives/resizeable.directive.d.ts +3 -2
- package/release/directives/resizeable.directive.js +13 -8
- package/release/directives/resizeable.directive.js.map +1 -1
- package/release/directives/resizeable.directive.metadata.json +1 -1
- package/release/directives/visibility.directive.js.map +1 -1
- package/release/directives/visibility.directive.metadata.json +1 -1
- package/release/events.d.ts +1 -0
- package/release/events.js +1 -0
- package/release/events.js.map +1 -1
- package/release/events.metadata.json +1 -1
- package/release/index.css +8 -3
- package/release/index.d.ts +1 -0
- package/release/index.js +198 -14804
- package/release/index.js.map +1 -1
- package/release/index.metadata.json +1 -1
- package/release/index.min.js +1 -1
- package/release/index.min.js.map +1 -1
- package/release/services/dimensions-helper.service.d.ts +7 -0
- package/release/services/dimensions-helper.service.js +26 -0
- package/release/services/dimensions-helper.service.js.map +1 -0
- package/release/services/dimensions-helper.service.metadata.json +1 -0
- package/release/services/index.d.ts +1 -0
- package/release/services/index.js +1 -0
- package/release/services/index.js.map +1 -1
- package/release/services/index.metadata.json +1 -1
- package/release/services/scrollbar-helper.service.js.map +1 -1
- package/release/services/scrollbar-helper.service.metadata.json +1 -1
- package/release/types/click.type.js.map +1 -1
- package/release/types/click.type.metadata.json +1 -1
- package/release/types/column-mode.type.js.map +1 -1
- package/release/types/column-mode.type.metadata.json +1 -1
- package/release/types/contextmenu.type.js.map +1 -1
- package/release/types/contextmenu.type.metadata.json +1 -1
- package/release/types/index.js.map +1 -1
- package/release/types/index.metadata.json +1 -1
- package/release/types/selection.type.js.map +1 -1
- package/release/types/selection.type.metadata.json +1 -1
- package/release/types/sort-direction.type.js.map +1 -1
- package/release/types/sort-direction.type.metadata.json +1 -1
- package/release/types/sort-prop-dir.type.js.map +1 -1
- package/release/types/sort-prop-dir.type.metadata.json +1 -1
- package/release/types/sort.type.js.map +1 -1
- package/release/types/sort.type.metadata.json +1 -1
- package/release/types/table-column.type.js.map +1 -1
- package/release/types/table-column.type.metadata.json +1 -1
- package/release/utils/camel-case.js.map +1 -1
- package/release/utils/camel-case.metadata.json +1 -1
- package/release/utils/column-helper.js.map +1 -1
- package/release/utils/column-helper.metadata.json +1 -1
- package/release/utils/column-prop-getters.js.map +1 -1
- package/release/utils/column-prop-getters.metadata.json +1 -1
- package/release/utils/column.d.ts +0 -4
- package/release/utils/column.js +0 -10
- package/release/utils/column.js.map +1 -1
- package/release/utils/column.metadata.json +1 -1
- package/release/utils/elm-from-point.js.map +1 -1
- package/release/utils/elm-from-point.metadata.json +1 -1
- package/release/utils/id.js.map +1 -1
- package/release/utils/id.metadata.json +1 -1
- package/release/utils/index.js.map +1 -1
- package/release/utils/index.metadata.json +1 -1
- package/release/utils/keys.js.map +1 -1
- package/release/utils/keys.metadata.json +1 -1
- package/release/utils/math.js +1 -1
- package/release/utils/math.js.map +1 -1
- package/release/utils/math.metadata.json +1 -1
- package/release/utils/prefixes.js +4 -6
- package/release/utils/prefixes.js.map +1 -1
- package/release/utils/prefixes.metadata.json +1 -1
- package/release/utils/row-height-cache.js.map +1 -1
- package/release/utils/row-height-cache.metadata.json +1 -1
- package/release/utils/selection.js.map +1 -1
- package/release/utils/selection.metadata.json +1 -1
- package/release/utils/sort.d.ts +2 -1
- package/release/utils/sort.js +6 -2
- package/release/utils/sort.js.map +1 -1
- package/release/utils/sort.metadata.json +1 -1
- package/release/utils/throttle.js.map +1 -1
- package/release/utils/throttle.metadata.json +1 -1
- package/release/utils/translate.js.map +1 -1
- package/release/utils/translate.metadata.json +1 -1
- package/src/components/body/body-group-header.directive.ts +5 -6
- package/src/components/body/body-row.component.ts +5 -5
- package/src/components/body/body.component.ts +46 -36
- package/src/components/body/scroller.component.ts +7 -5
- package/src/components/body/selection.component.ts +1 -1
- package/src/components/datatable.component.scss +14 -1
- package/src/components/datatable.component.spec.ts +383 -220
- package/src/components/datatable.component.ts +26 -13
- package/src/components/footer/footer.component.spec.ts +329 -47
- package/src/components/footer/pager.component.ts +10 -0
- package/src/components/header/header-cell.component.ts +2 -1
- package/src/components/header/header.component.ts +1 -0
- package/src/datatable.module.ts +6 -3
- package/src/directives/draggable.directive.ts +3 -2
- package/src/directives/long-press.directive.ts +3 -3
- package/src/directives/resizeable.directive.ts +11 -7
- package/src/events.ts +1 -0
- package/src/index.ts +1 -0
- package/src/services/dimensions-helper.service.ts +14 -0
- package/src/services/index.ts +1 -0
- package/src/utils/column-prop-getters.spec.ts +44 -0
- package/src/utils/column.ts +0 -12
- package/src/utils/facade/browser.ts +26 -0
- package/src/utils/math.ts +1 -1
- package/src/utils/sort.ts +7 -3
- package/test/index.ts +1 -0
- package/test/jasmine-matchers.d.ts +12 -0
- package/test/jasmine-matchers.ts +70 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Directive, ElementRef, HostListener, Input, Output, EventEmitter, OnDestroy, AfterViewInit
|
|
2
|
+
Directive, ElementRef, HostListener, Input, Output, EventEmitter, OnDestroy, AfterViewInit, Renderer2
|
|
3
3
|
} from '@angular/core';
|
|
4
4
|
import { Observable } from 'rxjs/Observable';
|
|
5
5
|
import { Subscription } from 'rxjs/Subscription';
|
|
6
6
|
import { MouseEvent } from '../events';
|
|
7
7
|
import { takeUntil } from 'rxjs/operators';
|
|
8
|
+
import { fromEvent } from 'rxjs/observable/fromEvent';
|
|
8
9
|
|
|
9
10
|
@Directive({
|
|
10
11
|
selector: '[resizeable]',
|
|
@@ -24,16 +25,19 @@ export class ResizeableDirective implements OnDestroy, AfterViewInit {
|
|
|
24
25
|
subscription: Subscription;
|
|
25
26
|
resizing: boolean = false;
|
|
26
27
|
|
|
27
|
-
constructor(element: ElementRef) {
|
|
28
|
+
constructor(element: ElementRef, private renderer: Renderer2) {
|
|
28
29
|
this.element = element.nativeElement;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
ngAfterViewInit(): void {
|
|
33
|
+
const renderer2 = this.renderer;
|
|
34
|
+
const node = renderer2.createElement('span');
|
|
32
35
|
if (this.resizeEnabled) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
renderer2.addClass(node, 'resize-handle');
|
|
37
|
+
} else {
|
|
38
|
+
renderer2.addClass(node, 'resize-handle--not-resizable');
|
|
36
39
|
}
|
|
40
|
+
renderer2.appendChild(this.element, node);
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
ngOnDestroy(): void {
|
|
@@ -59,11 +63,11 @@ export class ResizeableDirective implements OnDestroy, AfterViewInit {
|
|
|
59
63
|
event.stopPropagation();
|
|
60
64
|
this.resizing = true;
|
|
61
65
|
|
|
62
|
-
const mouseup =
|
|
66
|
+
const mouseup = fromEvent(document, 'mouseup');
|
|
63
67
|
this.subscription = mouseup
|
|
64
68
|
.subscribe((ev: MouseEvent) => this.onMouseup());
|
|
65
69
|
|
|
66
|
-
const mouseMoveSub =
|
|
70
|
+
const mouseMoveSub = fromEvent(document, 'mousemove')
|
|
67
71
|
.pipe(takeUntil(mouseup))
|
|
68
72
|
.subscribe((e: MouseEvent) => this.move(e, initialWidth, mouseDownScreenX));
|
|
69
73
|
|
package/src/events.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Gets the width of the scrollbar. Nesc for windows
|
|
5
|
+
* http://stackoverflow.com/a/13382873/888165
|
|
6
|
+
*/
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class DimensionsHelper {
|
|
9
|
+
|
|
10
|
+
getDimensions(element: Element): ClientRect {
|
|
11
|
+
return element.getBoundingClientRect();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
}
|
package/src/services/index.ts
CHANGED
|
@@ -50,4 +50,48 @@ describe('deepValueGetter', () => {
|
|
|
50
50
|
expect(deepValueGetter(data, 'a.b.value')).toEqual(5);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
+
it('should get array-element two-level deep', () => {
|
|
54
|
+
let data = {
|
|
55
|
+
a: {
|
|
56
|
+
b: [
|
|
57
|
+
123
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
expect(deepValueGetter(data, 'a.b.0')).toEqual(123);
|
|
62
|
+
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('should get value of object inside an array-element', () => {
|
|
66
|
+
let data = {
|
|
67
|
+
a: {
|
|
68
|
+
b: [
|
|
69
|
+
{c: 123}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
expect(deepValueGetter(data, 'a.b.0.c')).toEqual(123);
|
|
74
|
+
});
|
|
75
|
+
it('should get value of object inside a double array-element', () => {
|
|
76
|
+
let data = {
|
|
77
|
+
a: {
|
|
78
|
+
b: [
|
|
79
|
+
[
|
|
80
|
+
123
|
|
81
|
+
]
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
expect(deepValueGetter(data, 'a.b.0.0')).toEqual(123);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
it('should check for root-level fields with square brackets in name', () => {
|
|
90
|
+
let data = {
|
|
91
|
+
'a.b.1.value': 5
|
|
92
|
+
};
|
|
93
|
+
expect(deepValueGetter(data, 'a.b.1.value')).toEqual(5);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
|
|
53
97
|
});
|
package/src/utils/column.ts
CHANGED
|
@@ -76,15 +76,3 @@ export function columnsByPinArr(val: any) {
|
|
|
76
76
|
|
|
77
77
|
return colsByPinArr;
|
|
78
78
|
}
|
|
79
|
-
|
|
80
|
-
export function allColumnsByPinArr(val: any) {
|
|
81
|
-
const colsByPinArr = [];
|
|
82
|
-
const colsByPin = columnsByPin(val);
|
|
83
|
-
const colsTest = [];
|
|
84
|
-
|
|
85
|
-
colsByPinArr.push({ type: 'left', columns: colsByPin['left'] });
|
|
86
|
-
colsByPinArr.push({ type: 'center', columns: colsByPin['center'] });
|
|
87
|
-
colsByPinArr.push({ type: 'right', columns: colsByPin['right'] });
|
|
88
|
-
|
|
89
|
-
return colsByPinArr;
|
|
90
|
-
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*tslint:disable */
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google Inc. All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* JS version of browser APIs. This library can only run in the browser.
|
|
12
|
+
*/
|
|
13
|
+
var win = (typeof window !== 'undefined' && window) || <any>{};
|
|
14
|
+
|
|
15
|
+
export { win as window };
|
|
16
|
+
export var document = win.document;
|
|
17
|
+
export var location = win.location;
|
|
18
|
+
export var gc = win['gc'] ? () => win['gc']() : (): any => null;
|
|
19
|
+
export var performance = win['performance'] ? win['performance'] : null;
|
|
20
|
+
export const Event = win['Event'];
|
|
21
|
+
export const MouseEvent = win['MouseEvent'];
|
|
22
|
+
export const KeyboardEvent = win['KeyboardEvent'];
|
|
23
|
+
export const EventTarget = win['EventTarget'];
|
|
24
|
+
export const History = win['History'];
|
|
25
|
+
export const Location = win['Location'];
|
|
26
|
+
export const EventListener = win['EventListener'];
|
package/src/utils/math.ts
CHANGED
|
@@ -36,7 +36,7 @@ function scaleColumns(colsByGroup: any, maxWidth: any, totalFlexGrow: any) {
|
|
|
36
36
|
for(const column of colsByGroup[attr]) {
|
|
37
37
|
if (!column.canAutoResize) {
|
|
38
38
|
maxWidth -= column.width;
|
|
39
|
-
totalFlexGrow -= column.flexGrow;
|
|
39
|
+
totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
|
|
40
40
|
} else {
|
|
41
41
|
column.width = 0;
|
|
42
42
|
}
|
package/src/utils/sort.ts
CHANGED
|
@@ -51,18 +51,20 @@ export function orderByComparator(a: any, b: any): number {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* creates a shallow copy of the `rows` input and returns the sorted copy. this function
|
|
55
|
+
* does not sort the `rows` argument in place
|
|
55
56
|
*/
|
|
56
57
|
export function sortRows(rows: any[], columns: any[], dirs: SortPropDir[]): any[] {
|
|
57
58
|
if(!rows) return [];
|
|
58
59
|
if(!dirs || !dirs.length || !columns) return [...rows];
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
|
-
*
|
|
62
|
+
* record the row ordering of results from prior sort operations (if applicable)
|
|
63
|
+
* this is necessary to guarantee stable sorting behavior
|
|
62
64
|
*/
|
|
63
65
|
const rowToIndexMap = new Map<any, number>();
|
|
64
66
|
rows.forEach((row, index) => rowToIndexMap.set(row, index));
|
|
65
|
-
|
|
67
|
+
|
|
66
68
|
const temp = [...rows];
|
|
67
69
|
const cols = columns.reduce((obj, col) => {
|
|
68
70
|
if(col.comparator && typeof col.comparator === 'function') {
|
|
@@ -107,6 +109,8 @@ export function sortRows(rows: any[], columns: any[], dirs: SortPropDir[]): any[
|
|
|
107
109
|
if (comparison !== 0) return comparison;
|
|
108
110
|
}
|
|
109
111
|
|
|
112
|
+
if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB))) return 0;
|
|
113
|
+
|
|
110
114
|
/**
|
|
111
115
|
* all else being equal, preserve original order of the rows (stable sort)
|
|
112
116
|
*/
|
package/test/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './jasmine-matchers';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare namespace jasmine {
|
|
2
|
+
interface Matchers<T> {
|
|
3
|
+
toHaveText(actual: any, expectationFailOutput?: any): jasmine.CustomMatcher;
|
|
4
|
+
toHaveCssClass(expected: any): boolean;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
Copyright 2017-2018 Google Inc. All Rights Reserved.
|
|
10
|
+
Use of this source code is governed by an MIT-style license that
|
|
11
|
+
can be found in the LICENSE file at http://angular.io/license
|
|
12
|
+
*/
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/// <reference path="./jasmine-matchers.d.ts" />
|
|
2
|
+
|
|
3
|
+
export const addMatchers = () => jasmine.addMatchers({
|
|
4
|
+
toHaveText, toHaveCssClass
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `toHaveText()` adapted from https://angular.io/guide/testing
|
|
9
|
+
*/
|
|
10
|
+
function toHaveText(): jasmine.CustomMatcher {
|
|
11
|
+
return {
|
|
12
|
+
compare(
|
|
13
|
+
actual: any,
|
|
14
|
+
expectedText: string,
|
|
15
|
+
expectationFailOutput?: any
|
|
16
|
+
): jasmine.CustomMatcherResult {
|
|
17
|
+
const actualText = elementText(actual);
|
|
18
|
+
const pass = actualText.indexOf(expectedText) > -1;
|
|
19
|
+
const message = pass ? '' : composeMessage();
|
|
20
|
+
return { pass, message };
|
|
21
|
+
|
|
22
|
+
function composeMessage() {
|
|
23
|
+
const a =
|
|
24
|
+
actualText.length < 100
|
|
25
|
+
? actualText
|
|
26
|
+
: actualText.substr(0, 100) + '...';
|
|
27
|
+
const efo = expectationFailOutput ? ` '${expectationFailOutput}'` : '';
|
|
28
|
+
return `Expected element to have text content '${expectedText}' instead of '${a}'${efo}`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function elementText(n: any): string {
|
|
35
|
+
if (n instanceof Array) {
|
|
36
|
+
return n.map(elementText).join('');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (n.nodeType === Node.COMMENT_NODE) {
|
|
40
|
+
return '';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (n.nodeType === Node.ELEMENT_NODE && n.hasChildNodes()) {
|
|
44
|
+
return elementText(Array.prototype.slice.call(n.childNodes));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (n.nativeElement) {
|
|
48
|
+
n = n.nativeElement;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return n.textContent;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* adapted from https://github.com/ng-bootstrap/ng-bootstrap/blob/master/src/test/matchers.ts
|
|
56
|
+
*/
|
|
57
|
+
function toHaveCssClass(util, customEqualityTests) {
|
|
58
|
+
return { compare: buildError(false), negativeCompare: buildError(true) };
|
|
59
|
+
|
|
60
|
+
function buildError(isNot: boolean) {
|
|
61
|
+
return function(actual: HTMLElement, className: string) {
|
|
62
|
+
return {
|
|
63
|
+
pass: actual.classList.contains(className) === !isNot,
|
|
64
|
+
message: `Expected ${actual.outerHTML} ${
|
|
65
|
+
isNot ? 'not ' : ''
|
|
66
|
+
}to contain the CSS class "${className}"`
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|