www-thermferm/jqwidgets/jqximport.js

Mon, 08 Aug 2022 10:54:27 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 08 Aug 2022 10:54:27 +0200
changeset 617
b216f9d4b917
permissions
-rw-r--r--

Upgraded jqwidgets

617
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 /* tslint:disable */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 /* eslint-disable */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 (function ($) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 class DataAdapter {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 constructor ( config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 if ( !config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 config = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 const that = Object.assign( this, config );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 const generateKey = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 const S4 = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 return ( ( ( 1 + Math.random() ) * 0x10000 ) | 0 ).toString( 16 ).substring( 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 return S4();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 that.key = generateKey();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 that.boundSource = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 that.dataItemById = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 if ( that.allowAdd === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 that.allowAdd = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29 if ( that.allowRemove === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30 that.allowRemove = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33 if ( that.allowUpdate === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 that.allowUpdate = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37 if ( config.observable === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38 that.observable = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 if ( !config.dataSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 that.dataSource = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 if ( !config.dataFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 that.dataFields = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 /* if (config.dataSource && config.dataSource.length > 0) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 const keys = Object.keys(config.dataSource[0]);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53 // that.dataFields = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 for (let i = 0; i < keys.length; i++) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 if ( !config.dataSourceType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 that.dataSourceType = 'array';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 if ( !config.id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 that.id = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70 if ( !config.autoFetch ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 that.autoFetch = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 if ( config.dataFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 that.dataFields = config.dataFields;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 Object.defineProperty( that, 'groupBy', {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 configurable: false,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 enumerable: true,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 get() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 if ( !that._groupBy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 return [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 return that._groupBy;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 set( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 const updateGrouping = () => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90 that.boundHierarchy = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 if ( that.onGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94 that.onGroup();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 that._groupBy = [].concat(value);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 if ( that.isInitialized ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 updateGrouping();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 if ( !config.groupBy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 that.groupBy = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 if ( config.groupBy.toArray ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 that.groupBy = config.groupBy.toArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 that.groupBy = config.groupBy;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 if ( config && config.autoBind !== false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 that.dataBind();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 that.isInitialized = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 get dataFields() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 return that._dataFields;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 set dataFields( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 that._dataFields = that._getDataFieldObjects( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 return that._dataFields;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 _getDataFieldObjects( dataFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 //const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 let dataFieldObjects = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 if ( typeof dataFields === 'number' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 const charCode = 'A'.charCodeAt( 0 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 let prefix = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 let index = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 for ( let i = 0; i < dataFields; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 const letter = String.fromCharCode( charCode + index );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 index++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 const label = prefix + letter;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156 dataFieldObjects.push( { name: label, dataType: 'string' } )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 if ( index >= 26 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 index = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 prefix += 'A';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 else if ( dataFields.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 for ( let i = 0; i < dataFields.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 const dataField = dataFields[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 if ( typeof dataField === 'string' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 const dataFieldParts = dataField.split( ':' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 const name = dataFieldParts[ 0 ].trim();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 const dataType = dataFieldParts.length > 1 ? dataFieldParts[ 1 ].trim() : 'string';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173 dataFieldObjects.push( { name: name, dataType: dataType } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 dataFieldObjects.push( dataField );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 return dataFieldObjects;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 get dataSource() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 if ( !that._dataSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 that._dataSource = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 return that._dataSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 set dataSource( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 that._dataSource = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 if ( that.isInitialized ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 that.boundSource = false === that.observable ? [] : new JQX.ObservableArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 that.dataItemById = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 that.bindingCompleted = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 that.dataBind();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 get canNotify() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 if ( that._canNotify === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 that._canNotify = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 return that._canNotify;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 set canNotify( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 that._canNotify = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 _notify( changeArgs ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 if ( !that.canNotify ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 if ( that.notifyFn ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 that.notifyFn( changeArgs );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 notify( notifyFn ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 if ( notifyFn ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 that.notifyFn = notifyFn;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 toArray() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 return that.boundSource.toArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 dataBind() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 that.clear();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 const completed = () => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 that._onBindingComplete();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 if ( typeof that.dataSource === 'string' && ( that.dataSource.indexOf( '.json' ) >= 0 ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 that.url = that.dataSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 that.dataSourceType = 'json';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 new Ajax( that, ( data/*, status*/ ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 that.dataSource = data;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 that._bindToJSON();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 else if ( typeof that.dataSource === 'string' && ( that.dataSource.indexOf( '.xlsx' ) >= 0 ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 that.url = that.dataSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 that.dataSourceType = 'xlsx';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 new Ajax( that, ( data/*, status*/ ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 if ( !data[ 0 ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 data = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 that._bindToArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 completed();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 const keys = Object.keys( data[ 0 ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 const dataFieldMap = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 const dataRows = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286 if ( that.exportHeader !== false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 let index = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 for ( let key in keys ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 const name = keys[ key ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 dataFieldMap[ name ] = that.dataFields[ index++ ].name;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295 for ( let i = 1; i < data.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 const row = data[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 const dataRow = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 for ( let key in keys ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 const name = keys[ key ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302 dataRow[ dataFieldMap[ name ] ] = row[ name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305 dataRows.push( dataRow );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
307
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308 that.dataSource = dataRows;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
309 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 that._bindToArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312 completed();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315 else if ( typeof that.dataSource === 'string' && ( that.dataSource.indexOf( '.csv' ) >= 0 ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316 that.dataSourceType = 'csv';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 new Ajax( that, (/*data, status*/ ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319 that._bindToArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322 else if ( typeof that.dataSource === 'string' && ( that.dataSource.indexOf( '.tsv' ) >= 0 ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 that.dataSourceType = 'tsv';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325 new Ajax( that, (/*data, status*/ ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328 else if ( that.dataSourceType === 'array' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 that._bindToArray();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330 completed();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 else if ( that.dataSourceType === 'json' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333 that._bindToJSON();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334 completed();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
338 _onBindingComplete() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
339 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
340
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
341 that._buildHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
342
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
343 if ( that.onBindingComplete ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
344 that.onBindingComplete( { data: that.boundSource } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
345 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
346
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
347 if ( that._notify ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
348 that._notify( { action: 'bindingComplete', data: that.boundSource } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
349 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
350
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
351 that.bindingCompleted = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
352 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
353
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
354 refreshHierarchy() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
355 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
356
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
357 that._buildHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
358 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
359
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
360 find() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
361 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
362
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
363 return that.boundSource.find.apply( that.boundSource, arguments );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
364 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
365
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
366 onVirtualDataSourceRequested( requestCallback, details ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
367 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
368
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
369 let first = details ? details.first : Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
370 let last = details ? details.last : Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
371 let row = details ? details.row : null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
372
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
373 if ( undefined === first ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
374 first = Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
375 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
376
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
377 if ( undefined === last ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
378 last = Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
379 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
380
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
381 that.virtualFirstIndex = first;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
382 that.virtualLastIndex = last;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
383
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
384 if ( that.virtualDataSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
385 const getDataSource = function ( ExcelAdapterSettings ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
386 if ( ExcelAdapterSettings.virtualDataSourceLength !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
387 that.virtualDataSourceLength = ExcelAdapterSettings.virtualDataSourceLength;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
388 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
389
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
390 new JQX.ExcelAdapter(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
391 {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
392 dataSource: ExcelAdapterSettings.dataSource,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
393 dataFields: ExcelAdapterSettings.dataFields || that.dataFields,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
394 data: details,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
395 onBindingComplete( event ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
396
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
397 if ( that.virtualDataSourceOnExpand && row ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
398 if ( event.data && event.data.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
399 that.add( event.data, row.$.id );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
400 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
401 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
402 row.leaf = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
403 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
404
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
405 if ( that.onFilter ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
406 that.onFilter()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
407 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
408
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
409 requestCallback();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
410
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
411 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
412 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
413
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
414 if ( first === Infinity ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
415 that.add( event.data );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
416 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
417 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
418 let items = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
419 let indexes = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
420
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
421 for ( let i = 0; i < event.data.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
422 const item = event.data[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
423
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
424 if ( first + i <= last ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
425 items.push( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
426 indexes.push( first + i );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
427 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
428 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
429
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
430 that.update( indexes, items );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
431 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
432
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
433
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
434 if ( that.onFilter ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
435 that.onFilter()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
436 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
437
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
438 requestCallback();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
439 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
440 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
441 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
442
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
443 let hasCache = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
444
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
445 const isEmpty = ( obj ) => Object.entries( obj ).length === 0 && ( obj.constructor === Object || obj.constructor === Array );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446 const canCache = isEmpty( details.sorting ) && isEmpty( details.filtering ) && isEmpty( details.grouping ) && !details.row && ( details.action !== 'filter' && details.action !== 'sort' && details.action !== 'group' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
447
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
448 if ( that.virtualDataSourceCache && first !== Infinity && canCache ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
449 let cachedCount = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
450
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
451 for ( let i = first; i < last; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
452 if ( !that[ i ].$.isEmpty ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
453 cachedCount++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
454 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
455 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
456
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
457 if ( cachedCount === last - first ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
458 hasCache = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
459 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
461
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462 if ( hasCache ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
463 requestCallback();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 if ( details.action === 'expand' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 that.virtualDataSourceOnExpand( getDataSource, {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 first: first,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469 last: last,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470 row: details.row,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
471 sorting: details.sorting,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
472 filtering: details.filtering,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 grouping: details.grouping,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
474 action: details.action
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
476 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
477 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
478 that.virtualDataSource( getDataSource, {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
479 first: first,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
480 last: last,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 sorting: details.sorting,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
482 filtering: details.filtering,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
483 filterOperator: details.filterOperator || 'and',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
484 grouping: details.grouping,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
485 action: details.action
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
486 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
487 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
488 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
489 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
490 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
491 requestCallback();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
492 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
493 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
494
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
495 add( item, parentId ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
496 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
497
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
498 if ( !item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
499 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
500 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
501
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
502 let result = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
503
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
504 const addItem = function ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
505 const itemObject = that._getDataItem( item, that.boundSource.length );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
506
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
507 that[ that.boundSource.length ] = itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
508 that.dataItemById[ itemObject.$.id ] = itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
509
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
510 const pushResult = that.boundSource.push( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
511
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
512 if ( parentId !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
513 itemObject.$.parentId = parentId;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
514 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
515
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
516 if ( !pushResult ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
517 result = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
518 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
519
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
520 return itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
521 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
522
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
523 if ( item.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
524 let itemObjects = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
525
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
526 for ( let i = 0; i < item.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
527 const itemObject = addItem( item[ i ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
528
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
529 itemObjects.push( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
530 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
531
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
532 that._notify( { action: 'add', data: itemObjects } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
533 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
534 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
535 const itemObject = addItem( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
536
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
537 that._notify( { action: 'add', data: itemObject } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
538 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
539
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
540 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
541
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
542 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
543 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
544
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
545 refreshIndexes() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
546 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
547
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
548 for (let i = 0; i < that.boundSource.length; i++) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
549 that[i] = that.boundSource[i];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
550 that[i].$.index = i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
551 that.dataItemById[that[i].$.id] = that[i];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
552 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
553
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
554 let i = that.boundSource.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
555
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
556 while (that[i]) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
557 delete that[i];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
558 i++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
559 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
560 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
561
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
562 removeLast() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
563 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
564
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
565 delete that[that.boundSource.length - 1];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
566 const result = that.boundSource.pop();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
567 delete that.dataItemById[result.$.id];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
568
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
569 that._notify({ action: 'removeLast', data: result });
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
570
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
571 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
572
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
573 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
574 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
575
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
576 removeAt(index) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
577 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
578
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
579 const item = that.boundSource[index];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
580
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
581 if (!item) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
582 throw new Error('Invalid Item Index');
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
583 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
584
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
585 that.boundSource.splice(index, 1);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
586 delete that.dataItemById[item.$.id];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
587 that.refreshIndexes();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
588
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
589 that._notify({ action: 'remove', index: index, data: item });
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
590
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
591 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
592 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
593
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
594 update( index, dataSourceItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
595 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
596
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
597 if ( JQX.Utilities.Types.isArray( index ) && JQX.Utilities.Types.isArray( dataSourceItem ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
598 if ( index.length === 0 && dataSourceItem.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
599 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
600 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
601 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
602 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
603
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
604 if ( dataSourceItem.length && index.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
605 let itemObjects = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
606
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
607 for ( let i = 0; i < index.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
608 const itemObject = that._getDataItem( dataSourceItem[ i ], index[ i ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
609 const currentIndex = index[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
610
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
611 itemObjects.push( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
612
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
613 that.boundSource[ currentIndex ] = itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
614 that[ currentIndex ] = that.boundSource[ currentIndex ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
615 that.dataItemById[ itemObject.$.id ] = that[ currentIndex ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
616 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
617
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
618 that._notify( { action: 'update', index: index, data: itemObjects } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
619
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
620 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
621
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
622 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
623 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
624
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
625 const itemObject = that._getDataItem( dataSourceItem, index );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
626
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
627 that.boundSource[ index ] = itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
628 that[ index ] = that.boundSource[ index ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
629 that.dataItemById[ itemObject.$.id ] = that[ index ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
630
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
631 that._notify( { action: 'update', index: index, data: itemObject } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
632
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
633 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
634
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
635 return itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
636 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
637
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
638 insert( index, item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
639 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
640
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
641 item = that._getDataItem( item, index );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
642
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
643 const result = that.boundSource.splice( index, 0, item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
644
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
645 that.refreshIndexes();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
646
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
647 that._notify( { action: 'insert', index: index, data: item } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
648
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
649 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
650
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
651 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
652 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
653
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
654 move( from, to ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
655 if ( to > from && to - from === 1 || from === to ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
656 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
657 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
658
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
659 const that = this,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
660 recordToMove = that.boundSource.splice( from, 1 )[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
661
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
662 if ( to > from ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
663 to--;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
664 that.boundSource.splice( to, 0, recordToMove );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
665 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
666 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
667 that.boundSource.splice( to, 0, recordToMove );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
668 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
669
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
670 that.refreshIndexes();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
671
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
672 that._notify( { action: 'move', index: to, data: that.boundSource[ to ] } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
673
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
674 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
675 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
676
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
677 indexOf( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
678 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
679 const index = that.boundSource.indexOf( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
680
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
681 return index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
682 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
683
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
684 get length() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
685 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
686
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
687 if ( that.virtualDataSourceLength !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
688 return that.virtualDataSourceLength;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
689 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
690
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
691 if ( that.dataSourceLength ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
692 return that.dataSourceLength;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
693 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
694
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
695 if ( typeof ( that.dataSource ) === 'number' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
696 return that.dataSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
697 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
698
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
699 if ( that.bindingCompleted ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
700 return that.boundSource.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
701 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
702
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
703 if ( that.dataSource && typeof that.dataSource !== 'string' && that.dataSource.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
704 return that.dataSource.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
705 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
706
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
707 return that.boundSource.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
708 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
709
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
710 clear() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
711 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
712
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
713 if ( !that.isInitialized ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
714 that._cachedValues = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
715 that.dataItemById = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
716 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
717 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
718
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
719 for ( let i = 0; i < that.boundSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
720 delete that[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
721 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
722
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
723 that._cachedValues = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
724 that.boundSource = that.observable ? new JQX.ObservableArray() : [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
725 that.dataItemById = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
726 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
727 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
728
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
729 _getId( id, item, index ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
730 if ( id !== null && id.name !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
731 if ( id.name && item.getAttribute ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
732 let result = item.getAttribute( id.name );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
733 if ( result !== null && result.toString().length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
734 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
735 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
736 else if ( id.map ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
737 try {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
738 let result = item.getAttribute( id.map );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
739 if ( result !== null && result.toString().length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
740 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
741 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
742 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
743 catch ( error ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
744 return index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
745 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
746 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
747 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
748 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
749 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
750
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
751 if ( id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
752 if ( id.toString().length > 0 && item.getAttribute ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
753 let result = item.getAttribute( id );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
754 if ( result !== null && result.toString().length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
755 return result.trim().split( ' ' ).join( '' ).replace( /([ #;?%&,.+*~\':'!^$[\]()=>|\/@])/g, '' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
756 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
757 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
758 let splitMap = id.split( this.mapChar );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
759 if ( splitMap.length > 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
760 let d = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
761 for ( let p = 0; p < splitMap.length; p++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
762 if ( d !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
763 d = d[ splitMap[ p ] ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
764 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
765 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
766 if ( d !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
767 return d;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
768 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
769 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
770 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
771 if ( item[ id ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
772 return item[ id ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
773 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
774 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
775 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
776 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
777 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
778
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
779 return index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
780 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
781
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
782 _buildHierarchy() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
783 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
784
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
785 if ( !that.reservedNames ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
786 that.reservedNames = {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
787 leaf: 'leaf',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
788 parent: 'parent',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
789 expanded: 'expanded',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
790 checked: 'checked',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
791 selected: 'selected',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
792 level: 'level',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
793 icon: 'icon',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
794 data: 'data'
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
795 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
796 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
797 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
798 const names = that.reservedNames;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
799
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
800 if ( !names.leaf ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
801 names.leaf = 'leaf';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
802 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
803 if ( !names.parent ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
804 names.parent = 'parent';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
805 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
806 if ( !names.expanded ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
807 names.expanded = 'expanded';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
808 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
809 if ( !names.checked ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
810 names.checked = 'checked';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
811 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
812 if ( !names.selected ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
813 names.selected = 'selected';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
814 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
815 if ( !names.level ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
816 names.level = 'level';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
817 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
818 if ( !names.data ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
819 names.data = 'data';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
820 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
821
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
822 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
823
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
824 const names = that.reservedNames;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
825
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
826 if ( that.childrenDataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
827 const hierarchy = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
828
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
829 for ( let i = 0; i < that.boundSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
830 const item = Object.assign( {}, that.boundSource[ i ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
831
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
832 if ( !item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
833 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
834 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
835
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
836 hierarchy.push( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
837
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
838 const addItems = function ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
839 const splitMap = that.childrenDataField.split( that.mapChar );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
840 let children = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
841
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
842 if ( splitMap.length > 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
843 let data = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
844
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
845 for ( let p = 0; p < splitMap.length; p++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
846 if ( data !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
847 data = data[ splitMap[ p ] ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
848 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
849 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
850
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
851 children = data;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
852 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
853 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
854 children = item[ 'children' ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
855 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
856
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
857 item[ 'children' ] = children;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
858
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
859 if ( item[ 'children' ] === null || item[ 'children' ] === undefined || ( item[ 'children' ] && item[ 'children' ].length === 0 ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
860 item[ names.leaf ] = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
861 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
862 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
863
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
864 addItems( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
865 item[ names.level ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
866
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
867 if ( !item.$ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
868 item.$ = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
869 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
870
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
871 item[ names.parent ] = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
872 item[ names.data ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
873
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
874 if ( item[ names.expanded ] === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
875 item[ names.expanded ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
876 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
877
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
878 const drillThrough = function ( parent, children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
879 if ( !children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
880 parent[ 'children' ] = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
881 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
882 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
883
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
884 for ( let i = 0; i < children.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
885 let item = that._getDataItem( children[ i ], i );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
886
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
887 if ( !item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
888 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
889 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
890
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
891 addItems( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
892 item[ names.level ] = parent[ names.level ] + 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
893 item[ names.parent ] = parent;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
894 item[ names.data ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
895
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
896 if ( parent ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
897 parent[ 'children' ][ i ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
898 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
899
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
900
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
901 if ( item[ names.expanded ] === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
902 item[ names.expanded ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
903 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
904
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
905 drillThrough( item, item[ 'children' ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
906 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
907 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
908
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
909 drillThrough( item, item[ 'children' ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
910 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
911
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
912
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
913 that.boundHierarchy = hierarchy;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
914
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
915 if ( !that._boundSourceUpdate ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
916 for ( let i = 0; i < that.boundHierarchy.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
917 const item = that.boundHierarchy[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
918
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
919 if ( item.children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
920 const drillThrough = function ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
921 if ( !that.dataItemById[ item.$.id ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
922 that.boundSource.canNotify = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
923 that.dataItemById[ item.$.id ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
924 that[ that.boundSource.length ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
925 that.boundSource.push( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
926 that.boundSource.canNotify = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
927 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
928
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
929 if ( item.children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
930 for ( let i = 0; i < item.children.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
931 const child = item.children[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
932
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
933 if ( child.children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
934 drillThrough( child );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
935 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
936 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
937 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
938 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
939
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
940 drillThrough( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
941 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
942 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
943
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
944 that._boundSourceUpdate = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
945 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
946 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
947
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
948 if ( that.xmlRoot && that.dataSourceType === 'xml' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
949 that.boundHierarchy = this._getHierarchy( 'uid', '_parentuid', 'children', null, that.boundSource );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
950 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
951
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
952 if ( that.keyDataField && that.parentDataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
953 that.boundHierarchy = this._getHierarchy( that.keyDataField, that.parentDataField, 'children', null, that.boundSource );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
954 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
955
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
956 if ( that.groupBy && that.groupBy.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
957 that.boundHierarchy = this._getGroupHierarchy( that.groupBy, 'children', 'label', null, 'data', null, 'parent', that.boundSource );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
958 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
959
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
960 if ( that.virtualDataSourceOnExpand ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
961 that.boundHierarchy = this._getHierarchy( 'id', 'parentId', 'children', null, that.boundSource );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
962 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
963 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
964
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
965
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
966 _getGroupHierarchy( groups, collectionName, groupName, mappingFields, itemName, valueName, parentName, data, startIndex ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
967 let that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
968
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
969 if ( !startIndex ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
970 startIndex = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
971 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
972
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
973 let names = that.reservedNames;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
974
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
975 const guid = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
976 function s4() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
977 return Math.floor( ( 1 + Math.random() ) * 0x10000 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
978 .toString( 16 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
979 .substring( 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
980 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
981
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
982 return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
983 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
984
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
985 let groupHashCodes = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
986 for ( let iGroupColumn = 0; iGroupColumn < groups.length; iGroupColumn++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
987 groupHashCodes[ iGroupColumn ] = guid();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
988 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
989
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
990 if ( !collectionName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
991 collectionName = 'children';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
992 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
993
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
994 if ( !groupName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
995 groupName = 'group';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
996 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
997
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
998 if ( !itemName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
999 itemName = 'item';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1000 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1001
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1002 if ( !parentName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1003 parentName = 'parent';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1004 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1005
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1006 if ( undefined === valueName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1007 valueName = 'value';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1008 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1009
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1010 const groupboundSource = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1011 const hashItemGroups = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1012
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1013 let groupboundSourceIndex = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1014
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1015 const getItem = function ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1016 let itemObj = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1017 if ( mappingFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1018 for ( let mappingField in mappingFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1019 const mappingObject = mappingFields[ mappingField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1020
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1021 if ( mappingObject.name && mappingObject.map ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1022 itemObj[ mappingObject.map ] = itemObj[ mappingObject.name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1023 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1024 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1025 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1026
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1027 return itemObj;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1028 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1029
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1030 for ( let obj = 0; obj < data.length; obj++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1031 let item = Object.assign( {}, getItem( data[ obj ] ) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1032
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1033 item[ names.leaf ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1034
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1035 let itemKeysHierarchy = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1036 let keys = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1037
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1038 for ( let iGroupColumn = 0; iGroupColumn < groups.length; iGroupColumn++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1039 const group = groups[ iGroupColumn ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1040 const value = item[ group ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1041
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1042 if ( null === value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1043 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1044 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1045
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1046 itemKeysHierarchy[ keys++ ] = { value: value, group: group, hash: groupHashCodes[ iGroupColumn ] };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1047 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1048
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1049 if ( itemKeysHierarchy.length !== groups.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1050 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1051 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1052
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1053 let parentItem = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1054 let lookupKey = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1055
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1056 for ( let q = 0; q < itemKeysHierarchy.length; q++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1057 const itemKey = itemKeysHierarchy[ q ].value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1058 const groupDataField = itemKeysHierarchy[ q ].group;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1059 const columnHash = itemKeysHierarchy[ q ].hash;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1060
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1061 lookupKey = lookupKey + '_' + columnHash + '_' + itemKey;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1062
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1063 if ( hashItemGroups[ lookupKey ] !== undefined && hashItemGroups[ lookupKey ] !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1064 parentItem = hashItemGroups[ lookupKey ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1065 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1066 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1067
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1068 if ( parentItem === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1069 parentItem = { $: {} };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1070
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1071 parentItem[ names.level ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1072 parentItem[ names.leaf ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1073 parentItem[ parentName ] = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1074 parentItem[ groupName ] = itemKey;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1075 parentItem[ itemName ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1076 parentItem[ 'groupDataField' ] = groupDataField;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1077
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1078 if ( !parentItem[ groupDataField ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1079 parentItem[ groupDataField ] = parentItem.data[ groupDataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1080 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1081
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1082 if ( item[ names.expanded ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1083 parentItem[ names.expanded ] = item[ names.expanded ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1084 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1085 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1086 parentItem[ names.expanded ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1087 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1088
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1089 if ( valueName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1090 parentItem[ valueName ] = item[ valueName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1091 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1092
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1093 parentItem[ collectionName ] = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1094
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1095 let uid = groupboundSource.length + startIndex;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1096
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1097 if ( !this.id || typeof item.$.id === 'number' || isFinite( item.$.id ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1098 uid = 'Item' + uid;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1099 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1100 if ( parentItem.$.id === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1101 parentItem.$.id = uid;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1102 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1103
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1104 groupboundSource[ groupboundSourceIndex++ ] = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1105 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1106 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1107 const subItem = { $: {} };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1108
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1109 subItem[ names.level ] = parentItem[ names.level ] + 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1110 subItem[ parentName ] = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1111 subItem[ groupName ] = itemKey;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1112 subItem[ collectionName ] = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1113 subItem[ itemName ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1114 subItem[ 'groupDataField' ] = groupDataField;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1115 subItem[ names.leaf ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1116
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1117 if ( !subItem[ groupDataField ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1118 subItem[ groupDataField ] = subItem.data[ groupDataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1119 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1120
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1121 if ( item[ names.expanded ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1122 subItem[ names.expanded ] = item[ names.expanded ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1123 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1124 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1125 subItem[ names.expanded ] = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1126 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1127
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1128 if ( valueName ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1129 subItem[ valueName ] = item[ valueName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1130 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1131
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1132 if ( subItem.$.id === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1133 subItem.$.id = parentItem.$.id + '_' + parentItem[ collectionName ].length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1134 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1135
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1136 parentItem[ collectionName ][ parentItem[ collectionName ].length ] = subItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1137 parentItem = subItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1138 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1139
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1140 hashItemGroups[ lookupKey ] = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1141 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1142
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1143 if ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1144 item[ names.leaf ] = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1145 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1146
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1147 if ( parentItem !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1148 if ( this.id === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1149 if ( undefined === item.$.id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1150 item.$.id = parentItem.$.id + '_' + parentItem[ collectionName ].length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1151 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1152 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1153 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1154 if ( undefined === item.$.id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1155 if ( item.$.id.toString().indexOf( parentItem.$.id ) === -1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1156 item.$.id = parentItem.$.id + '_' + item.$.id;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1157 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1158 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1159 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1160
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1161 item[ parentName ] = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1162 item[ names.level ] = parentItem[ names.level ] + 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1163 parentItem[ collectionName ][ parentItem[ collectionName ].length ] = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1164 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1165 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1166 if ( undefined === item.$.id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1167 item.$.id = guid();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1168 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1169 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1170 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1171
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1172 return groupboundSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1173 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1174
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1175 _getHierarchy( fieldName, parentFieldName, collectionName, mappingFields, boundSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1176 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1177
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1178 const databoundHierarchy = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1179 let flatData = this.boundSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1180
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1181 if ( boundSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1182 flatData = boundSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1183 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1184
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1185 if ( this.boundSource.length === 0 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1186 return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1187
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1188 const childrenName = collectionName !== null ? collectionName : 'children';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1189 let items = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1190 let data = flatData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1191 let dataLength = data.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1192 let names = that.reservedNames;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1193
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1194 const getItem = function ( item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1195 let itemObj = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1196 if ( mappingFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1197 for ( let mappingField in mappingFields ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1198 const mappingObject = mappingFields[ mappingField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1199
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1200 if ( mappingObject.name && mappingObject.map ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1201 itemObj[ mappingObject.map ] = itemObj[ mappingObject.name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1202 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1203 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1204 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1205
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1206 return itemObj;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1207 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1208
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1209 // build hierarchical source.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1210 for ( let i = 0; i < dataLength; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1211 let item = data[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1212 let parentId = item[ parentFieldName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1213 let id = item[ fieldName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1214
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1215 if ( parentFieldName === 'parentId' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1216 parentId = item.$.parentId;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1217 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1218
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1219 if ( fieldName === 'id' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1220 id = item.$.id;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1221 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1222
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1223 item[ childrenName ] = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1224
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1225 items[ id ] = { parentId: parentId, item: item };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1226 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1227
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1228 for ( let i = 0; i < dataLength; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1229 const item = data[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1230 let parentId = item[ parentFieldName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1231 let id = item[ fieldName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1232
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1233 if ( parentFieldName === 'parentId' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1234 parentId = item.$.parentId;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1235 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1236
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1237 if ( fieldName === 'id' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1238 id = item.$.id;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1239 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1240
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1241 if ( items[ parentId ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1242 let item = { parentId: parentId, item: items[ id ].item };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1243 let parentItem = items[ parentId ].item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1244 if ( !parentItem[ childrenName ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1245 parentItem[ childrenName ] = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1246 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1247 let length = parentItem[ childrenName ].length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1248 item = item.item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1249
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1250 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1251 if ( item.parent === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1252 item.parent = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1253 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1254 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1255 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1256 if ( item[ names.parent ] === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1257 item[ names.parent ] = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1258 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1259 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1260
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1261 const itemObj = getItem( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1262
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1263 parentItem[ childrenName ][ length ] = itemObj;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1264 items[ parentId ].item = parentItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1265 items[ id ].item = item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1266
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1267 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1268 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1269 let item = items[ id ].item;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1270 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1271 if ( item.parent === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1272 item.parent = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1273 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1274 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1275 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1276 if ( item[ names.parent ] === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1277 item[ names.parent ] = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1278 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1279 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1280
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1281 const itemObj = getItem( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1282
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1283 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1284 itemObj.level = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1285 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1286 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1287 itemObj[ names.level ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1288 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1289
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1290 databoundHierarchy[ databoundHierarchy.length ] = itemObj;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1291 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1292 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1293 if ( databoundHierarchy.length !== 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1294 let updateLevels = function ( level, children ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1295 for ( let i = 0; i < children.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1296 const child = children[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1297
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1298 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1299 child.level = level;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1300 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1301 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1302 child[ names.level ] = level;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1303 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1304
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1305 const childChildren = child[ childrenName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1306
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1307 if ( childChildren ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1308 if ( childChildren.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1309 updateLevels( level + 1, childChildren );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1310 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1311 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1312 if ( that.virtualDataSourceOnExpand ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1313 if ( child.leaf === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1314 child.leaf = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1315 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1316 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1317 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1318 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1319 child.leaf = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1320 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1321 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1322 child[ names.leaf ] = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1323 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1324 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1325 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1326 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1327 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1328 if ( that.virtualDataSourceOnExpand ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1329 if ( child.leaf === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1330 child.leaf = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1331 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1332 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1333 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1334 if ( !names ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1335 child.leaf = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1336 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1337 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1338 child[ names.leaf ] = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1339 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1340 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1341 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1342 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1343 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1344 updateLevels( 0, databoundHierarchy );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1345 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1346 return databoundHierarchy;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1347 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1348
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1349 summarize( summaryItems, boundSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1350 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1351
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1352 if ( !Array.isArray( summaryItems ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1353 summaryItems = [ summaryItems ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1354 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1355
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1356 let tempSummaryItems = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1357
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1358 for ( let i = 0; i < summaryItems.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1359 const summaryItem = summaryItems[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1360
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1361 for ( let name in summaryItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1362 const functions = summaryItem[ name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1363
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1364 tempSummaryItems.push( { dataField: name, functions: functions } )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1365 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1366 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1367
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1368 summaryItems = tempSummaryItems;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1369
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1370 let data = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1371 let summaryByDataField = new Array();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1372
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1373 if ( !boundSource ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1374 boundSource = that.boundSource;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1375 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1376
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1377 let length = boundSource.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1378
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1379 if ( length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1380 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1381 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1382
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1383 if ( length === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1384 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1385 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1386
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1387 for ( let i = 0; i < length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1388 let dataItem = boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1389
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1390 for ( let j = 0; j < summaryItems.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1391 const summaryItem = summaryItems[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1392 let value = dataItem[ summaryItem.dataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1393
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1394 if ( summaryItem.functions ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1395 data[ summaryItem.dataField ] = data[ summaryItem.dataField ] || {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1396 summaryByDataField[ summaryItem.dataField ] = summaryByDataField[ summaryItem.dataField ] || 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1397 summaryByDataField[ summaryItem.dataField ]++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1398
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1399 const _summaryItemFunction = function ( summaryItemObject ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1400 for ( let name in summaryItemObject ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1401 let oldValue = data[ summaryItem.dataField ][ name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1402
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1403 if ( oldValue === null || oldValue === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1404 data[ summaryItem.dataField ][ name ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1405 oldValue = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1406 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1407
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1408 if ( typeof summaryItemObject[ name ] === 'function' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1409 oldValue = summaryItemObject[ name ]( oldValue, value, summaryItem.dataField, dataItem );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1410 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1411 data[ summaryItem.dataField ][ name ] = oldValue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1412 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1413 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1414
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1415 let canParse = parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1416
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1417 if ( isNaN( canParse ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1418 canParse = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1419 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1420 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1421 canParse = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1422 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1423
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1424 if ( canParse ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1425 value = parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1426 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1427
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1428 if ( typeof value === 'number' && isFinite( value ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1429 summaryItem.functions.forEach( function ( summaryItemFunction ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1430 let oldValue = data[ summaryItem.dataField ][ summaryItemFunction ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1431
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1432 if ( oldValue === null || oldValue === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1433 oldValue = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1434
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1435 if ( summaryItemFunction === 'min' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1436 oldValue = 9999999999999;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1437 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1438
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1439 if ( summaryItemFunction === 'max' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1440 oldValue = -9999999999999;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1441 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1442
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1443 if (summaryItemFunction === 'median') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1444 oldValue = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1445 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1446 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1447
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1448 if ( summaryItemFunction === 'sum' || summaryItemFunction === 'avg' || summaryItemFunction === 'stdev'
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1449 || summaryItemFunction === 'stdevp' || summaryItemFunction === 'var' || summaryItemFunction === 'varp' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1450 oldValue += parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1451 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1452 else if ( summaryItemFunction === 'product' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1453 if ( i === 0 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1454 oldValue = parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1455 else
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1456 oldValue *= parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1457 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1458 else if ( summaryItemFunction === 'min' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1459 oldValue = Math.min( oldValue, parseFloat( value ) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1460 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1461 else if ( summaryItemFunction === 'max' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1462 oldValue = Math.max( oldValue, parseFloat( value ) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1463 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1464 else if ( summaryItemFunction === 'count' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1465 oldValue++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1466 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1467 else if (summaryItemFunction === 'median') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1468 oldValue.push(parseFloat(value));
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1469 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1470 else if ( typeof ( summaryItemFunction ) === 'object' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1471 _summaryItemFunction( summaryItemFunction );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1472 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1473 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1474
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1475 data[ summaryItem.dataField ][ summaryItemFunction ] = oldValue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1476 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1477 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1478 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1479 summaryItem.functions.forEach( function ( summaryItemFunction ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1480 if ( summaryItemFunction === 'min' || summaryItemFunction === 'max' || summaryItemFunction === 'count' || summaryItemFunction === 'product' || summaryItemFunction === 'sum'
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1481 || summaryItemFunction === 'avg' || summaryItemFunction === 'stdev'
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1482 || summaryItemFunction === 'stdevp' || summaryItemFunction === 'var' || summaryItemFunction === 'varp' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1483 if ( value === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1484 return true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1485 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1486
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1487 let oldValue = data[ summaryItem.dataField ][ summaryItemFunction ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1488
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1489 if ( oldValue === null || oldValue === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1490 oldValue = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1491 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1492
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1493 data[ summaryItem.dataField ][ summaryItemFunction ] = oldValue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1494
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1495 return true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1496 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1497
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1498 if ( typeof ( summaryItemFunction ) === 'object' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1499 _summaryItemFunction( summaryItemFunction );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1500 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1501 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1502 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1503 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1504 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1505 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1506
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1507 for ( let j = 0; j < summaryItems.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1508 const summaryItem = summaryItems[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1509
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1510 if ( !summaryItem.functions ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1511 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1512 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1513 if ( !data[ summaryItem.dataField ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1514 data[ summaryItem.dataField ] = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1515
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1516 summaryItem.functions.forEach( function ( summaryItemFunction ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1517 data[ summaryItem.dataField ][ summaryItemFunction ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1518 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1519 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1520
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1521 if ( data[ summaryItem.dataField ][ 'avg' ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1522 const value = data[ summaryItem.dataField ][ 'avg' ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1523 const dataValues = summaryByDataField[ summaryItem.dataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1524
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1525 if ( dataValues === 0 || dataValues === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1526 data[ summaryItem.dataField ][ 'avg' ] = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1527 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1528 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1529 data[ summaryItem.dataField ][ 'avg' ] = value / dataValues;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1530 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1531 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1532 else if ( data[ summaryItem.dataField ][ 'count' ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1533 data[ summaryItem.dataField ][ 'count' ] = length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1534 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1535 else if (data[summaryItem.dataField]['median'] !== undefined) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1536 let population = data[summaryItem.dataField]['median'];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1537
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1538 population.sort(function (a, b) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1539 return a - b;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1540 });
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1541
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1542 data[summaryItem.dataField]['median'] =
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1543 0.5 * (population[Math.floor((population.length + 1) / 2) - 1] + population[Math.ceil((population.length + 1) / 2) - 1]);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1544 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1545
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1546 // stdev, stdevp, var, varp.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1547 // stdev - Standard deviation on a sample.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1548 // varp - Variance on an entire population.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1549 // let - Variance on a sample.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1550 if ( data[ summaryItem.dataField ][ 'stdev' ] || data[ summaryItem.dataField ][ 'stdevp' ]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1551 || data[ summaryItem.dataField ][ 'var' ] || data[ summaryItem.dataField ][ 'varp' ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1552 summaryItem.functions.forEach( function ( summaryItemFunction ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1553 if ( summaryItemFunction === 'stdev' || summaryItemFunction === 'var' || summaryItemFunction === 'varp' || summaryItemFunction === 'stdevp' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1554 const value = data[ summaryItem.dataField ][ summaryItemFunction ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1555 const count = length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1556 const average = ( value / length );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1557 let sumSq = 0.0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1558
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1559 for ( let i = 0; i < length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1560 let dataItem = boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1561 let value = dataItem[ summaryItem.dataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1562
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1563 sumSq += ( value - average ) * ( value - average );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1564 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1565
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1566 let denominator = ( summaryItemFunction === 'stdevp' || summaryItemFunction === 'varp' ) ? count : count - 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1567
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1568 if ( denominator === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1569 denominator = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1570 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1571
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1572 if ( summaryItemFunction === 'var' || summaryItemFunction === 'varp' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1573 data[ summaryItem.dataField ][ summaryItemFunction ] = sumSq / denominator;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1574 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1575 else if ( summaryItemFunction === 'stdevp' || summaryItemFunction === 'stdev' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1576 data[ summaryItem.dataField ][ summaryItemFunction ] = Math.sqrt( sumSq / denominator );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1577 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1578 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1579 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1580 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1581 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1582 return data;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1583 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1584
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1585 deserialize(stringValue, type, nullable) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1586 const nullValue = stringValue === 'null';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1587
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1588 if (stringValue === undefined || (nullValue && !nullable)) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1589 return undefined;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1590 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1591
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1592 if (nullValue && nullable) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1593 return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1594 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1595
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1596 if (type === 'boolean' || type === 'bool') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1597 if (stringValue === null) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1598 return false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1599 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1600
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1601 // Boolean properties are set based on the presence of the attribute: if the attribute exists at all, the value is true.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1602 return true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1603 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1604 else if (type === 'number' || type === 'float') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1605 if (stringValue === 'NaN') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1606 return NaN;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1607 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1608
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1609 if (stringValue === 'Infinity') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1610 return Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1611 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1612
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1613 if (stringValue === '-Infinity') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1614 return -Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1615 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1616
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1617 return parseFloat(stringValue);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1618 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1619 else if (type === 'int' || type === 'integer') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1620 if (stringValue === 'NaN') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1621 return NaN;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1622 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1623
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1624 if (stringValue === 'Infinity') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1625 return Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1626 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1627
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1628 if (stringValue === '-Infinity') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1629 return -Infinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1630 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1631
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1632 return parseInt(stringValue);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1633 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1634 else if (type === 'string') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1635 return stringValue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1636 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1637 else if (type === 'any') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1638 return stringValue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1639 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1640 else if (type === 'date') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1641 return new Date(stringValue);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1642 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1643 else if (type === 'function') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1644 if (typeof window[stringValue] === 'function') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1645 return window[stringValue];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1646 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1647 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1648 else if (type === 'array' || type === 'object') {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1649 try {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1650 const jsonObject = JSON.parse(stringValue);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1651
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1652 if (jsonObject) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1653 return jsonObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1654 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1655 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1656 catch (er) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1657 if (window[stringValue] && (typeof window[stringValue] === 'object')) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1658 return window[stringValue];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1659 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1660 else if (type === 'array' && stringValue.indexOf('[') >= 0) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1661 if (stringValue.indexOf('{') >= 0) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1662 let array = stringValue.replace(/{/ig, '').replace('[', '').replace(']', '').replace(/'/ig, '').replace(/"/ig, '').trim();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1663
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1664 array = array.split('},');
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1665
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1666 for (let i = 0; i < array.length; i++) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1667 let parsedObject = {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1668 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1669
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1670 let parts = array[i].trim().split(',');
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1671
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1672 for (let j = 0; j < parts.length; j++) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1673 const key = parts[j].split(':')[0].trim();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1674 const value = parts[j].split(':')[1].trim();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1675
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1676 parsedObject[key] = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1677 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1678
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1679 array[i] = parsedObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1680 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1681
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1682 return array;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1683 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1684
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1685 const array = stringValue.replace('[', '').replace(']', '').replace(/'/ig, '').replace(/"/ig, '').trim().split(',');
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1686
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1687 return array;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1688 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1689 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1690 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1691
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1692 return undefined;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1693 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1694
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1695 _getDataItem( dataSourceItem, index ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1696 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1697 const itemObject = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1698 const unboundMode = typeof ( that.dataSource ) === 'number' || that.dataSourceLength;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1699
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1700 if ( !dataSourceItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1701 return { $: { id: index, isEmpty: true, index: index } }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1702 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1703
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1704 if ( typeof dataSourceItem === 'string' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1705 dataSourceItem = { '': dataSourceItem };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1706 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1707
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1708 if ( unboundMode ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1709 for ( let j = 0; j < that.dataFields.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1710 const dataField = that.dataFields ? that.dataFields[ j ] : {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1711
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1712 itemObject[ dataField.name ] = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1713 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1714
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1715 itemObject.$ = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1716 itemObject.$.id = index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1717 itemObject.$.index = index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1718
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1719 return itemObject;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1720 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1721
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1722 const dataItem = dataSourceItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1723
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1724 if ( dataItem.expanded !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1725 itemObject.expanded = dataItem.expanded;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1726
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1727 if ( dataItem.expanded === 'true' || dataItem.expanded === true || dataItem.expanded === 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1728 itemObject.expanded = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1729 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1730 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1731 itemObject.expanded = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1732 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1733 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1734
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1735 if ( that.childrenDataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1736 if ( dataItem[ that.childrenDataField ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1737 itemObject.children = dataItem[ that.childrenDataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1738 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1739 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1740 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1741 if ( dataItem.children !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1742 itemObject.children = dataItem.children;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1743 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1744 else if ( dataItem.items !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1745 itemObject.children = dataItem.items;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1746 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1747 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1748 if ( dataItem.leaf !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1749 itemObject.leaf = dataItem.leaf;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1750 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1751
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1752 if ( dataItem.level !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1753 itemObject.level = dataItem.level;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1754 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1755
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1756 if ( that.keyDataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1757 if ( dataItem[ that.keyDataField ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1758 itemObject[ that.keyDataField ] = dataItem[ that.keyDataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1759 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1760 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1761
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1762 if ( that.parentDataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1763 if ( dataItem[ that.parentDataField ] !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1764 itemObject[ that.parentDataField ] = dataItem[ that.parentDataField ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1765 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1766 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1767
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1768 if ( that.dataFields.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1769 const names = Object.getOwnPropertyNames( dataSourceItem );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1770
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1771 for ( let i = 0; i < names.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1772 if ( names[ i ] === '$' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1773 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1774 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1775
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1776 that.dataFields.push( { name: names[ i ], dataType: 'string' } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1777 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1778 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1779
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1780 for ( let j = 0; j < that.dataFields.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1781 const dataField = that.dataFields ? that.dataFields[ j ] : {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1782 let value = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1783
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1784 dataField.dataType = dataField.type;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1785
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1786 if ( undefined === dataField || dataField === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1787 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1788 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1789
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1790 if ( dataSourceItem.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1791 value = dataSourceItem[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1792 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1793
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1794 if ( dataField.map ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1795 let splitMap = dataField.map.split( that.mapChar );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1796
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1797 if ( splitMap.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1798 let dataMappedItem = dataItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1799
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1800 for ( let p = 0; p < splitMap.length; p++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1801 if ( !dataItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1802 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1803 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1804
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1805 dataMappedItem = dataMappedItem[ splitMap[ p ] ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1806 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1807
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1808 value = dataMappedItem;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1809 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1810 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1811 value = dataItem[ dataField.map ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1812 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1813 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1814
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1815 if ( value !== undefined && value !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1816 value = value.toString();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1817 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1818 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1819 if ( value === undefined && value !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1820 value = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1821 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1822 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1823
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1824
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1825 let isEmptyString = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1826 // searches by both selectors when necessary.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1827 if ( value === '' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1828 isEmptyString = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1829 value = dataSourceItem[ dataField.name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1830
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1831 if ( value !== undefined && value !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1832 if ( dataField.dataType !== 'array' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1833 if ( dataField.dataType !== 'date' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1834 value = value.toString();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1835 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1836 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1837 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1838 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1839 value = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1840 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1841 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1842
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1843 if ( value === '[object Object]' && dataField.map && isEmptyString ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1844 value = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1845 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1846
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1847 if ( that._cachedValues[ '' + value + '_' + dataField.dataType ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1848 value = that._cachedValues[ '' + value + '_' + dataField.dataType ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1849 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1850 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1851 if ( dataField.dataType === 'bool' || dataField.dataType === 'boolean' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1852 if ( value === 'true' || value === '1' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1853 value = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1854 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1855 else if ( value === 'false' || value === '0' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1856 value = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1857 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1858 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1859 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1860 value = that.deserialize( '' + value, dataField.dataType, true );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1861 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1862
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1863 that._cachedValues[ value + '_' + dataField.dataType ] = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1864 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1865
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1866 if ( dataField.dataType !== 'string' && dataField.dataType !== 'boolean' && dataField.dataType !== 'bool' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1867 if ( isNaN( value ) || value === -Infinity || value === Infinity ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1868 value = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1869 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1870 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1871
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1872 itemObject[ dataField.name ] = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1873 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1874
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1875 let itemObjectId = index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1876
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1877 if ( that.id ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1878 itemObjectId = dataItem[ that.id ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1879 if ( typeof ( itemObjectId ) === 'object' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1880 itemObjectId = index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1881 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1882 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1883 else if ( !that.virtualDataSource && that.dataItemById && that.dataItemById[ itemObjectId ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1884 itemObjectId = that.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1885 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1886
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1887 if ( !itemObject.$ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1888 itemObject.$ = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1889 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1890
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1891 itemObject.$.id = itemObjectId;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1892 itemObject.$.index = index;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1893
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1894 return new Object( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1895 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1896
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1897 _bindToArray() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1898 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1899
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1900 const unboundMode = typeof ( that.dataSource ) === 'number' || that.dataSourceLength;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1901 const dataArray = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1902
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1903 that.boundSource.canNotify = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1904
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1905 for ( let i = 0; i < that.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1906 const dataSourceItem = unboundMode ? {} : that.dataSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1907 const itemObject = that._getDataItem( dataSourceItem, i );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1908
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1909 dataArray.push( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1910 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1911
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1912 if ( unboundMode && that.dataSourceLength && that.dataSource.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1913 for ( let i = 0; i < that.dataSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1914 const cell = that.dataSource[ i ].cell;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1915 const value = that.dataSource[ i ].value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1916
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1917 const row = cell.replace( /[^0-9]/g, '' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1918 const dataField = cell.replace( /[0-9]/g, '' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1919
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1920 dataArray[ row - 1 ][ dataField ] = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1921 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1922 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1923
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1924 that.boundSource = dataArray;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1925
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1926 for ( let i = 0; i < that.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1927 that[ i ] = that.boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1928 that.dataItemById[ that[ i ].$.id ] = that[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1929 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1930
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1931 that.boundSource.canNotify = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1932 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1933
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1934 _bindToJSON() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1935 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1936
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1937 const dataArray = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1938
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1939 const dataEntries = Object.entries( that.dataSource );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1940
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1941 that.boundSource.canNotify = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1942
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1943 for ( let i = 0; i < dataEntries.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1944 const dataSourceItem = dataEntries[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1945 const itemObject = that._getDataItem( dataSourceItem, i );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1946
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1947 dataArray.push( itemObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1948 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1949
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1950 that.boundSource = false === that.observable ? dataArray : new JQX.ObservableArray( dataArray );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1951
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1952 for ( let i = 0; i < that.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1953 that[ i ] = that.boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1954 that.dataItemById[ that[ i ].$.id ] = that[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1955 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1956
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1957 that.boundSource.canNotify = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1958 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1959
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1960 sortBy( dataField, dataType, orderBy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1961 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1962
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1963 if ( !dataType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1964 for ( let i = 0; i < that.dataFields.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1965 const field = that.dataFields[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1966
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1967 if ( field.name === dataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1968 dataType = field.dataType;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1969 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1970 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1971 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1972 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1973
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1974 if ( that.boundHierarchy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1975 if ( ( !dataField || dataField.length === 0 ) && that.groupBy.length > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1976 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1977 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1978 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1979
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1980 const sortBy = function ( hierarchy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1981 that._sort( hierarchy, dataField, orderBy, dataType );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1982
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1983 for ( let i = 0; i < hierarchy.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1984 const item = hierarchy[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1985
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1986 if ( item[ 'children' ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1987 sortBy( item[ 'children' ], dataField, orderBy, dataType );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1988 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1989 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1990 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1991
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1992 sortBy( that.boundHierarchy );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1993 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1994 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1995 that._sort( that.boundSource, dataField, orderBy, dataType );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1996 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1997 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1998
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1999 _createFilter( dataType, filterExpressions ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2000 const filterOperators = {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2001 '=': 'EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2002 '<>': 'NOT_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2003 '<': 'LESS_THAN',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2004 '>': 'GREATER_THAN',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2005 '<=': 'LESS_THAN_OR_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2006 '>=': 'GREATER_THAN_OR_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2007 'equal': 'EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2008 'not equal': 'NOT_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2009 'less than': 'LESS_THAN',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2010 'greater than': 'GREATER_THAN',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2011 'greater than or equal': 'GREATER_THAN_OR_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2012 'less than or equal': 'LESS_THAN_OR_EQUAL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2013 'starts with': 'STARTS_WITH',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2014 'ends with': 'ENDS_WITH',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2015 'null': 'null',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2016 '': 'EMPTY',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2017 'isblank': 'EMPTY',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2018 'isnotblank': 'NOT_EMPTY',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2019 'contains': 'CONTAINS',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2020 'notcontains': 'DOES_NOT_CONTAIN',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2021 'startswith': 'STARTS_WITH',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2022 'endswith': 'ENDS_WITH',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2023 'NULL': 'NULL',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2024 'NOT_NULL': 'NOT_NULL'
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2025 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2026
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2027 let filterExpressionsArray = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2028
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2029 for ( let i = 0; i < filterExpressions.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2030 const filterExpression = filterExpressions[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2031
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2032 const filterExpressionParts = filterExpression.indexOf( '"' ) === -1 ? filterExpression.split( ' ' ) : filterExpression.split( '"' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2033 let filter = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2034
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2035 for ( let j = 0; j < filterExpressionParts.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2036 const part = filterExpressionParts[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2037
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2038 if ( part !== '' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2039 filter.push( part.trim() );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2040 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2041 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2042
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2043 filterExpressionsArray.push( filter );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2044 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2045
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2046 const filterGroup = new JQX.FilterGroup();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2047 const filterGroupOperators = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2048 const filterSubGroups = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2049
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2050 for ( let i = 0; i < filterExpressionsArray.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2051 const filterExpression = filterExpressionsArray[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2052
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2053
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2054 if ( filterExpression.length > 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2055 const filterSubGroup = new JQX.FilterGroup();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2056
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2057 let operator = 'and';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2058 let filterExpressionPartsCounter = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2059
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2060 for ( let j = 0; j < filterExpression.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2061 const value = filterExpression[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2062
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2063 if ( value === 'and' || value === 'or' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2064 operator = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2065 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2066 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2067
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2068 filterExpressionPartsCounter++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2069
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2070 if ( filterExpressionPartsCounter === 2 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2071 const filter = filterSubGroup.createFilter( dataType, value, filterOperators[ filterExpression[ j - 1 ] ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2072
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2073 filterExpressionPartsCounter = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2074
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2075 if ( operator ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2076 filterSubGroup.addFilter( operator, filter );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2077 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2078 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2079 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2080
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2081 filterSubGroups.push( filterSubGroup );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2082 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2083 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2084 const filterGroupOperator = filterExpression[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2085
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2086 if ( filterGroupOperator !== 'and' && filterGroupOperator !== 'or' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2087 throw new Error( 'Filter Exprresion expects "AND" or "OR", but the token is: ' + filterGroupOperator );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2088 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2089
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2090 filterGroupOperators.push( filterGroupOperator );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2091 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2092 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2093
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2094 let operatorsCounter = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2095
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2096 if ( filterSubGroups.length === 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2097 return filterSubGroups[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2098 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2099
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2100 for ( let i = 0; i < filterSubGroups.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2101 let operator = filterGroupOperators[ operatorsCounter ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2102
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2103 if ( ( i + 1 ) % 2 === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2104 operatorsCounter++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2105 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2106
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2107 if ( !operator ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2108 operator = 'and';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2109 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2110
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2111 filterGroup.addFilter( operator, filterSubGroups[ i ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2112 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2113
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2114 return filterGroup;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2115 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2116
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2117 filterBy( dataField, ...filterExpressions ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2118 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2119
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2120
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2121 const dataType = ( () => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2122 for ( let i = 0; i < that.dataFields.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2123 const field = that.dataFields[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2124
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2125 if ( field.name === dataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2126 return field.dataType;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2127 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2128 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2129 } )();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2130
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2131
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2132 const filterGroup = that._createFilter( dataType, filterExpressions );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2133
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2134 let filteredData = that.boundSource.filter( ( value ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2135 const evaluation = filterGroup.evaluate( value[ dataField ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2136
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2137 return evaluation;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2138 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2139
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2140 return filteredData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2141 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2142
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2143 _filter( filters, operator = 'and' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2144 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2145 const filterGroups = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2146 const dataFields = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2147
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2148 if ( filters.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2149 that.clearFilter();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2150 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2151 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2152
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2153 const dataType = ( dataField ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2154 for ( let i = 0; i < that.dataFields.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2155 const field = that.dataFields[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2156
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2157 if ( field.name === dataField ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2158 return field.dataType;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2159 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2160 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2161 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2162 let defaultResult, operatorSpecificEval;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2163
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2164 if ( operator === 'and' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2165 defaultResult = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2166 operatorSpecificEval = function ( result, filterGroup, row ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2167 return result && filterGroup.evaluate( row[ filterGroup.dataField ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2168 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2169 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2170 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2171 defaultResult = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2172 operatorSpecificEval = function ( result, filterGroup, row ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2173 return result || filterGroup.evaluate( row[ filterGroup.dataField ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2174 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2175 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2176
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2177 for ( let i = 0; i < filters.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2178 const filter = filters[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2179 const dataField = filter[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2180 let filterGroup = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2181
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2182 if ( filter[ 1 ] instanceof JQX.FilterGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2183 filterGroup = filter[ 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2184 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2185 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2186 filterGroup = that._createFilter( dataType( dataField ), filter.splice( 1 ) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2187 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2188
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2189 if ( filterGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2190 dataFields.push( dataField );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2191 filterGroup.dataField = dataField;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2192 filterGroups.push( filterGroup );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2193 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2194 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2195
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2196 if ( that.boundHierarchy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2197 const filter = function ( row ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2198 let result = defaultResult;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2199
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2200 for ( let j = 0; j < filterGroups.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2201 const filterGroup = filterGroups[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2202
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2203 result = operatorSpecificEval( result, filterGroup, row );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2204 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2205
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2206 row.$.filtered = result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2207
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2208 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2209 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2210
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2211 const filterBy = function ( hierarchy, parentItem, root ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2212 let filteredCount = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2213
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2214 for ( let i = 0; i < hierarchy.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2215 const item = hierarchy[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2216
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2217 filter( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2218
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2219 if ( item.$.filtered ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2220 filteredCount++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2221 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2222
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2223 if ( item[ 'children' ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2224 filterBy( item[ 'children' ], item, parentItem );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2225 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2226 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2227
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2228 if ( filteredCount > 0 && that.groupBy.length > 0 && parentItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2229 parentItem.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2230
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2231 if ( root && !root.$.filtered ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2232 root.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2233 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2234 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2235 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2236 if ( filteredCount > 0 && filteredCount !== hierarchy.length && parentItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2237 parentItem.$.filtered = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2238
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2239 if ( root && !root.$.filtered ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2240 root.$.filtered = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2241 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2242 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2243 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2244 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2245
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2246 filterBy( that.boundHierarchy, null, null );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2247 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2248 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2249 for ( let i = 0; i < that.boundSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2250 const row = that.boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2251
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2252 let result = defaultResult;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2253
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2254 for ( let j = 0; j < filterGroups.length; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2255 const filterGroup = filterGroups[ j ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2256
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2257 result = operatorSpecificEval( result, filterGroup, row );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2258 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2259
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2260 row.$.filtered = result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2261 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2262 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2263
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2264 if ( that.onFilter ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2265 that.onFilter()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2266 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2267 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2268
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2269 clearGroup() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2270 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2271
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2272 that.groupBy = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2273 that.boundHierarchy = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2274 that.refreshHierarchy();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2275
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2276 if ( that.onGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2277 that.onGroup()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2278 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2279 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2280
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2281 clearFilter() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2282 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2283
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2284 for ( let i = 0; i < that.boundSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2285 const row = that.boundSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2286
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2287 row.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2288 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2289
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2290 if ( that.boundHierarchy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2291 const filterBy = function ( hierarchy, parentItem, root ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2292 //let filteredCount = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2293
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2294 for ( let i = 0; i < hierarchy.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2295 const item = hierarchy[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2296
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2297 item.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2298
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2299 if ( item.$.filtered ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2300 //filteredCount++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2301 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2302
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2303 if ( item[ 'children' ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2304 filterBy( item[ 'children' ], item, parentItem );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2305 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2306 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2307
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2308 if ( parentItem ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2309 parentItem.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2310
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2311 if ( root && !root.$.filtered ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2312 root.$.filtered = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2313 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2314 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2315 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2316
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2317 filterBy( that.boundHierarchy, null, null );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2318 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2319
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2320 if ( that.onFilter ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2321 that.onFilter()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2322 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2323 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2324
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2325 clearSort() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2326 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2327
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2328 that._sort( that.boundSource, [], [], [] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2329 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2330
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2331 _sort( dataSource, sortColumns, directions, dataTypes, customSortingCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2332 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2333
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2334 let isObservableArray = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2335
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2336 if ( dataSource.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2337 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2338 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2339
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2340 if ( dataSource && dataSource.constructor && dataSource instanceof JQX.ObservableArray ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2341 isObservableArray = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2342 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2343
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2344 if ( !dataSource || !( Array.isArray( dataSource ) ) || dataSource.length === 0 ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2345 !sortColumns || Array.isArray( sortColumns ) && sortColumns.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2346 if ( !isObservableArray && !that.boundHierarchy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2347 throw new Error( 'sort: Missing or Invalid arguments!' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2348 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2349 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2350
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2351 if ( typeof sortColumns === 'string' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2352 sortColumns = [ sortColumns ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2353 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2354
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2355 const directionCoefficients = [],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2356 compareFunctions = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2357
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2358 if ( directions === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2359 directions = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2360 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2361
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2362 const getCompareFunction = function ( a, knownDataType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2363 // gets data type of column (not necessary if the Grid provides this information)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2364 const dataType = knownDataType || typeof a;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2365 let compareFunction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2366
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2367 switch ( dataType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2368 case 'string':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2369 compareFunction = new Intl.Collator().compare;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2370 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2371 case 'number':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2372 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2373 return a - b;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2374 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2375 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2376 case 'boolean':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2377 case 'bool':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2378 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2379 if ( a === b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2380 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2381 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2382 else if ( a === false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2383 return -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2384 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2385 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2386 return 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2387 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2388 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2389 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2390 case 'date':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2391 case 'time':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2392 case 'dateTime':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2393 if ( a instanceof Date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2394 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2395 return a.getTime() - b.getTime();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2396 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2397 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2398 else if ( a instanceof JQX.Utilities.DateTime ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2399 a instanceof JQX.Utilities.BigNumber ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2400 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2401 return a.compare( b );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2402 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2403 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2404 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2405 case 'object':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2406 if ( a instanceof Date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2407 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2408 return a.getTime() - b.getTime();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2409 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2410 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2411 else if ( a instanceof JQX.Utilities.DateTime ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2412 a instanceof JQX.Utilities.BigNumber ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2413 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2414 return a.compare( b );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2415 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2416 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2417 else if ( a instanceof JQX.Utilities.Complex || ( window.NIComplex && a instanceof window.NIComplex ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2418 const complexNumericProcessor = new JQX.Utilities.ComplexNumericProcessor();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2419
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2420 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2421 return complexNumericProcessor.compareComplexNumbers( a, b );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2422 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2423 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2424
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2425 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2426 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2427
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2428 return compareFunction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2429 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2430
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2431 for ( let i = 0; i < sortColumns.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2432 if ( directions[ i ] === undefined || directions[ i ] === 'asc' || directions[ i ] === 'ascending' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2433 directionCoefficients[ i ] = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2434 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2435 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2436 directionCoefficients[ i ] = -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2437 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2438
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2439 const value = dataSource[ 0 ][ sortColumns[ i ] ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2440
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2441 compareFunctions[ i ] = getCompareFunction( value, dataTypes[ i ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2442 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2443
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2444 if ( customSortingCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2445 customSortingCallback( dataSource, sortColumns, directions, compareFunctions );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2446 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2447 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2448
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2449 dataSource.sort( function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2450 for ( let i = 0; i < sortColumns.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2451 const result = compareFunctions[ i ]( a[ sortColumns[ i ] ], b[ sortColumns[ i ] ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2452
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2453 if ( result === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2454 if ( sortColumns[ i + 1 ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2455 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2456 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2457 else if ( a._index !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2458 // makes sorting stable
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2459 return ( a._index - b._index ) * directionCoefficients[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2460 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2461
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2462 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2463 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2464
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2465 return result * directionCoefficients[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2466 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2467
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2468 if ( sortColumns.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2469 if ( a.$.index < b.$.index ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2470 return -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2471 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2472
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2473 if ( a.$.index > b.$.index ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2474 return 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2475 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2476
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2477 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2478
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2479 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2480 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2481
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2482 for ( let i = 0; i < dataSource.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2483 that[ i ] = dataSource[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2484 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2485 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2486
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2487 static Filter( dataSource, filterColumns, filterGroups, customFilteringCallback, operator = 'and' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2488 let defaultResult, operatorSpecificEval;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2489
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2490 if ( operator === 'and' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2491 defaultResult = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2492 operatorSpecificEval = function ( result, dataItem, filterColumn, filterGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2493 if ( customFilteringCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2494 return result && customFilteringCallback( dataItem, filterColumn, filterGroup );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2495 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2496
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2497 return result && filterGroup.evaluate( dataItem[ filterColumn ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2498 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2499 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2500 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2501 defaultResult = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2502 operatorSpecificEval = function ( result, dataItem, filterColumn, filterGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2503 if ( customFilteringCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2504 return result || customFilteringCallback( dataItem, filterColumn, filterGroup );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2505 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2506
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2507 return result || filterGroup.evaluate( dataItem[ filterColumn ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2508 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2509 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2510
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2511 const filteredData = dataSource.filter( ( dataItem ) => {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2512 let result = defaultResult;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2513
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2514 for ( let i = 0; i < filterGroups.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2515 const filterGroup = filterGroups[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2516 const filterColumn = filterColumns[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2517
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2518 result = operatorSpecificEval( result, dataItem, filterColumn, filterGroup );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2519 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2520
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2521 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2522 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2523
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2524 return filteredData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2525 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2526
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2527 filter( filterColumns, filterGroups, customFilteringCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2528 JQX.ExcelAdapter.Filter( this.boundSource, filterColumns, filterGroups, customFilteringCallback );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2529 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2530
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2531 sort( sortColumns, directions, customSortingCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2532 JQX.ExcelAdapter.Sort( this.boundSource, sortColumns, directions, customSortingCallback );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2533 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2534
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2535 static Sort( dataSource, sortColumns, directions, customSortingCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2536 const getCompareFunction = function ( a ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2537 // gets data type of column (not necessary if the Grid provides this information)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2538 const dataType = typeof a;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2539 let compareFunction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2540
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2541 switch ( dataType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2542 case 'string':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2543 compareFunction = new Intl.Collator().compare;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2544 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2545 case 'number':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2546 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2547 return a - b;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2548 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2549 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2550 case 'boolean':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2551 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2552 if ( a === b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2553 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2554 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2555 else if ( a === false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2556 return -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2557 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2558 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2559 return 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2560 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2561 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2562 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2563 case 'object':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2564 if ( a instanceof Date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2565 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2566 return a.getTime() - b.getTime();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2567 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2568 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2569 else if ( a instanceof JQX.Utilities.DateTime ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2570 a instanceof BigNumberNG ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2571 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2572 return a.compare( b );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2573 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2574 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2575 else if ( a instanceof JQX.Utilities.Complex || ( window.NIComplex && a instanceof window.NIComplex ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2576 const complexNumericProcessor = new JQX.Utilities.ComplexNumericProcessor();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2577
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2578 compareFunction = function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2579 return complexNumericProcessor.compareComplexNumbers( a, b );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2580 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2581 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2582
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2583 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2584 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2585
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2586 return compareFunction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2587 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2588
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2589 if ( !dataSource || !( Array.isArray( dataSource ) ) || dataSource.length === 0 ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2590 !sortColumns || Array.isArray( sortColumns ) && sortColumns.length === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2591 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2592 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2593
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2594 if ( typeof sortColumns === 'string' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2595 sortColumns = [ sortColumns ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2596 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2597
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2598 const directionCoefficients = [],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2599 compareFunctions = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2600
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2601 if ( directions === undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2602 directions = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2603 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2604
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2605 for ( let i = 0; i < sortColumns.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2606 if ( directions[ i ] === undefined || directions[ i ] === 'asc' || directions[ i ] === 'ascending' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2607 directionCoefficients[ i ] = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2608 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2609 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2610 directionCoefficients[ i ] = -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2611 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2612
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2613 compareFunctions[ i ] = getCompareFunction( dataSource[ 0 ][ sortColumns[ i ] ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2614 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2615
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2616 if ( customSortingCallback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2617 customSortingCallback( dataSource, sortColumns, directions, compareFunctions );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2618 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2619 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2620
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2621 const sortedData = dataSource.slice( 0 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2622
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2623 sortedData.sort( function ( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2624 for ( let i = 0; i < sortColumns.length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2625 const result = compareFunctions[ i ]( a[ sortColumns[ i ] ], b[ sortColumns[ i ] ] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2626
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2627 if ( result === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2628 if ( sortColumns[ i + 1 ] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2629 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2630 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2631 else if ( a._index !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2632 // makes sorting stable
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2633 return ( a._index - b._index ) * directionCoefficients[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2634 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2635
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2636 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2637 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2638
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2639 return result * directionCoefficients[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2640 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2641 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2642
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2643 return sortedData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2644 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2645 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2646
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2647 window.jqxDataSource = DataAdapter;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2648
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2649 class Ajax {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2650 constructor ( config, callback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2651 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2652
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2653 that.config = config;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2654 that.callback = callback;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2655
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2656 if ( config.autoFetch === false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2657 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2658 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2659
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2660 that.call( config );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2661 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2662
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2663 call( config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2664 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2665
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2666 if ( !config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2667 config = that.config;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2668 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2669
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2670 let method = 'GET',
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2671 url = config.url,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2672 body = null,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2673 async = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2674
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2675 if ( config.type ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2676 method = config.type;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2677 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2678
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2679 if ( config.data ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2680 if ( method === 'GET' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2681 url += '?';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2682
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2683 for ( let prop in config.data ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2684 if ( config.data.hasOwnProperty( prop ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2685 url += encodeURI( prop + '=' + config.data[ prop ] + '&' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2686 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2687 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2688
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2689 if ( url.charAt( url.length - 1 ) === '&' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2690 url = url.slice( 0, url.length - 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2691 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2692 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2693 else if ( method === 'POST' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2694 body = JSON.stringify( config.data );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2695 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2696 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2697
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2698 if ( config && config.async === false && config.dataSourceType !== 'xlsx' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2699 async = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2700 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2701
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2702 if ( window.fetch !== undefined && async ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2703 that.ajaxFetch( config, method, url, body );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2704 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2705 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2706 that.ajaxXMLHttpRequest( config, method, url, body, async );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2707 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2708 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2709
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2710 ajaxFetch( config, method, url, body ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2711 // prepare fetch config
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2712 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2713 const fetchInit = { method: method };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2714 let parseMethod;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2715
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2716 switch ( config.dataSourceType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2717 case 'json':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2718 parseMethod = 'json';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2719 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2720 case 'xlsx':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2721 parseMethod = 'arrayBuffer';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2722 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2723 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2724 parseMethod = 'text';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2725 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2726
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2727 if ( config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2728 if ( config.contentType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2729 fetchInit.headers = new Headers( {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2730 'Content-Type': config.contentType
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2731 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2732 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2733 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2734
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2735 if ( body !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2736 fetchInit.body = body;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2737 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2738
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2739 let status, fetchTimeout, timeouted;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2740
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2741 if ( config.timeout ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2742 fetchTimeout = setTimeout( function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2743 timeouted = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2744 }, config.timeout );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2745 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2746
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2747 if ( config.beforeSend ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2748 const beforeSendResult = config.beforeSend( fetchInit, config );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2749
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2750 if ( beforeSendResult === false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2751 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2752 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2753 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2754
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2755 // fetch resource
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2756 fetch( url, fetchInit )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2757 .then( function ( response ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2758 if ( timeouted ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2759 status = 408;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2760 throw new Error( 'timeout' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2761 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2762
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2763 if ( fetchTimeout ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2764 clearTimeout( fetchTimeout );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2765 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2766
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2767 status = response.status;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2768
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2769 if ( !response.ok ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2770 throw new Error( response.statusText );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2771 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2772
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2773 return response[ parseMethod ]();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2774 } )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2775 .then( function ( data ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2776 if ( parseMethod === 'arrayBuffer' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2777 return JSZip.loadAsync( data ).then( function ( zipData ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2778 // "data" represents the whole XLSX/ZIP file
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2779 return zipData.files[ 'xl/worksheets/sheet1.xml' ].async( 'text' ).then( function ( sheet1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2780 return zipData.files[ 'xl/sharedStrings.xml' ].async( 'text' ).then( function ( sharedStrings ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2781 const parsedData = that.parseXLSXData( sheet1, sharedStrings );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2782
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2783 that.ajaxComplete( config, parsedData, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2784 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2785 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2786 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2787 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2788 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2789 that.ajaxComplete( config, data, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2790 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2791 } )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2792 .catch( function ( error ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2793 if ( error.message === 'JSZip is not defined' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2794 error.message = 'JSZip is not defined. Please include a reference to JSZip to be able to load data from XLSX files.';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2795 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2796
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2797 if ( config && config.loadError ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2798 config.loadError( status, error );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2799 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2800
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2801 if ( that.callback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2802 that.callback( error, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2803 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2804 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2805 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2806
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2807 ajaxXMLHttpRequest( config, method, url, body, async ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2808 const request = new XMLHttpRequest();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2809 const that = this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2810
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2811 request.open( method, url, async );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2812
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2813 request.ontimeout = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2814 if ( config && config.loadError ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2815 config.loadError( 408, 'timeout' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2816 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2817 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2818
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2819 request.onload = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2820 if ( request.readyState === 4 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2821 const status = request.status;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2822 let data = request.response;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2823
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2824 if ( status >= 200 && status <= 299 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2825 if ( config.dataSourceType === 'json' ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2826 data = JSON.parse( data );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2827 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2828
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2829 that.ajaxComplete( config, data, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2830 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2831 else if ( config && config.loadError ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2832 config.loadError( status, data );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2833 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2834 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2835 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2836
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2837 request.onerror = function () {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2838 if ( config && config.loadError ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2839 config.loadError( request.status, request.response );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2840 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2841 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2842
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2843 if ( config && config.contentType ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2844 request.setRequestHeader( 'Content-Type', config.contentType );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2845 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2846
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2847 if ( async && config.timeout ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2848 request.timeout = config.timeout;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2849 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2850
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2851 if ( config.beforeSend ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2852 const beforeSendResult = config.beforeSend( request, config );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2853
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2854 if ( beforeSendResult === false ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2855 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2856 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2857 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2858
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2859 request.send( body );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2860 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2861
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2862 ajaxComplete( config, data, status ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2863 if ( !config ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2864 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2865 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2866
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2867 if ( config.beforeLoadComplete ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2868 const processedData = config.beforeLoadComplete( data );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2869
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2870 if ( processedData ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2871 data = processedData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2872 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2873 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2874
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2875 if ( config.loadComplete ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2876 config.loadComplete( data, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2877 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2878
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2879 if ( this.callback ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2880 this.callback( data, status );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2881 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2882 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2883
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2884 parseXLSXData( sheet1, sharedStrings ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2885 const parser = new DOMParser(),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2886 sharedStringsDocument = parser.parseFromString( sharedStrings, 'text/xml' ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2887 sharedStringsContainers = Array.from( sharedStringsDocument.getElementsByTagName( 'si' ) ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2888 sharedStringsCollection = [],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2889 sheet1Document = parser.parseFromString( sheet1, 'text/xml' ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2890 rows = Array.from( sheet1Document.getElementsByTagName( 'row' ) ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2891 parsedData = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2892
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2893 sharedStringsContainers.forEach( function ( si ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2894 let texts = si.getElementsByTagName( 't' );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2895
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2896 if ( texts.length === 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2897 sharedStringsCollection.push( texts[ 0 ].innerHTML );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2898 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2899 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2900 let text = '';
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2901
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2902 texts = Array.from( texts );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2903 texts.forEach( function ( t ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2904 text += t.innerHTML;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2905 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2906 sharedStringsCollection.push( text );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2907 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2908 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2909
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2910 rows.forEach( function ( row ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2911 const rowObject = {},
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2912 cells = Array.from( row.getElementsByTagName( 'c' ) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2913
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2914 cells.forEach( function ( cell/*, index*/ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2915 const column = cell.getAttribute( 'r' ).match( /\D+/ )[ 0 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2916 type = cell.getAttribute( 't' ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2917 xmlValue = cell.getElementsByTagName( 'v' )[ 0 ].innerHTML;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2918 let value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2919
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2920 switch ( type ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2921 case 's':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2922 // string
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2923 value = sharedStringsCollection[ parseFloat( xmlValue ) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2924 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2925 case 'b':
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2926 // boolean
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2927 value = parseFloat( xmlValue ) === 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2928 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2929 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2930 // number or date
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2931 value = parseFloat( xmlValue );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2932 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2933
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2934 rowObject[ column ] = value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2935 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2936
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2937 parsedData.push( rowObject );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2938 } );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2939
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2940 return parsedData;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2941 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2942 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2943 if ($.jqx && $.jqx.dataAdapter) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2944 $.jqx.dataAdapter.Importer = DataAdapter;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2945 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2946 })(jqxBaseFramework);

mercurial