tabulator-tables 5.1.6 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +3 -2
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +1 -1
  3. package/bower.json +1 -1
  4. package/dist/css/tabulator.css +59 -51
  5. package/dist/css/tabulator.css.map +1 -1
  6. package/dist/css/tabulator.min.css +1 -1
  7. package/dist/css/tabulator.min.css.map +1 -1
  8. package/dist/css/tabulator_bootstrap3.css +59 -51
  9. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  10. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  11. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  12. package/dist/css/tabulator_bootstrap4.css +59 -51
  13. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  14. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  15. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  16. package/dist/css/tabulator_bootstrap5.css +1575 -0
  17. package/dist/css/tabulator_bootstrap5.css.map +1 -0
  18. package/dist/css/tabulator_bootstrap5.min.css +2 -0
  19. package/dist/css/tabulator_bootstrap5.min.css.map +1 -0
  20. package/dist/css/tabulator_bulma.css +59 -51
  21. package/dist/css/tabulator_bulma.css.map +1 -1
  22. package/dist/css/tabulator_bulma.min.css +1 -1
  23. package/dist/css/tabulator_bulma.min.css.map +1 -1
  24. package/dist/css/tabulator_materialize.css +59 -51
  25. package/dist/css/tabulator_materialize.css.map +1 -1
  26. package/dist/css/tabulator_materialize.min.css +1 -1
  27. package/dist/css/tabulator_materialize.min.css.map +1 -1
  28. package/dist/css/tabulator_midnight.css +59 -51
  29. package/dist/css/tabulator_midnight.css.map +1 -1
  30. package/dist/css/tabulator_midnight.min.css +1 -1
  31. package/dist/css/tabulator_midnight.min.css.map +1 -1
  32. package/dist/css/tabulator_modern.css +59 -51
  33. package/dist/css/tabulator_modern.css.map +1 -1
  34. package/dist/css/tabulator_modern.min.css +1 -1
  35. package/dist/css/tabulator_modern.min.css.map +1 -1
  36. package/dist/css/tabulator_semanticui.css +59 -51
  37. package/dist/css/tabulator_semanticui.css.map +1 -1
  38. package/dist/css/tabulator_semanticui.min.css +1 -1
  39. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  40. package/dist/css/tabulator_simple.css +59 -51
  41. package/dist/css/tabulator_simple.css.map +1 -1
  42. package/dist/css/tabulator_simple.min.css +1 -1
  43. package/dist/css/tabulator_simple.min.css.map +1 -1
  44. package/dist/css/tabulator_site.css +59 -51
  45. package/dist/css/tabulator_site.css.map +1 -1
  46. package/dist/css/tabulator_site.min.css +1 -1
  47. package/dist/css/tabulator_site.min.css.map +1 -1
  48. package/dist/js/tabulator.js +2550 -1663
  49. package/dist/js/tabulator.js.map +1 -1
  50. package/dist/js/tabulator.min.js +2 -2
  51. package/dist/js/tabulator.min.js.map +1 -1
  52. package/dist/js/tabulator_esm.js +2827 -2147
  53. package/dist/js/tabulator_esm.js.map +1 -1
  54. package/dist/js/tabulator_esm.min.js +2 -2
  55. package/dist/js/tabulator_esm.min.js.map +1 -1
  56. package/package.json +1 -1
  57. package/src/js/core/FooterManager.js +6 -13
  58. package/src/js/core/Module.js +44 -2
  59. package/src/js/core/Tabulator.js +341 -289
  60. package/src/js/core/cell/Cell.js +9 -38
  61. package/src/js/core/column/Column.js +8 -44
  62. package/src/js/core/column/defaults/options.js +0 -2
  63. package/src/js/core/defaults/options.js +5 -2
  64. package/src/js/core/modules/optional.js +2 -0
  65. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +6 -3
  66. package/src/js/core/row/Row.js +127 -118
  67. package/src/js/core/tools/Alert.js +63 -0
  68. package/src/js/core/tools/ComponentFunctionBinder.js +3 -3
  69. package/src/js/core/tools/DataLoader.js +12 -84
  70. package/src/js/core/tools/InteractionMonitor.js +1 -1
  71. package/src/js/core/tools/ModuleBinder.js +30 -23
  72. package/src/js/core/tools/Popup.js +251 -0
  73. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +2 -2
  74. package/src/js/modules/Edit/Edit.js +6 -25
  75. package/src/js/modules/Edit/List.js +997 -0
  76. package/src/js/modules/Edit/defaults/editors/autocomplete.js +6 -446
  77. package/src/js/modules/Edit/defaults/editors/input.js +4 -0
  78. package/src/js/modules/Edit/defaults/editors/list.js +7 -0
  79. package/src/js/modules/Edit/defaults/editors/number.js +4 -0
  80. package/src/js/modules/Edit/defaults/editors/select.js +5 -584
  81. package/src/js/modules/Edit/defaults/editors/textarea.js +4 -0
  82. package/src/js/modules/Edit/defaults/editors/tickCross.js +17 -5
  83. package/src/js/modules/Edit/defaults/editors.js +2 -0
  84. package/src/js/modules/Filter/Filter.js +7 -4
  85. package/src/js/modules/Format/defaults/formatters/datetime.js +10 -4
  86. package/src/js/modules/Format/defaults/formatters/datetimediff.js +10 -3
  87. package/src/js/modules/Format/defaults/formatters/link.js +12 -1
  88. package/src/js/modules/Format/defaults/formatters/money.js +5 -3
  89. package/src/js/modules/Format/defaults/formatters/tickCross.js +2 -1
  90. package/src/js/modules/FrozenColumns/FrozenColumns.js +30 -8
  91. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +5 -1
  92. package/src/js/modules/Menu/Menu.js +59 -157
  93. package/src/js/modules/Mutator/Mutator.js +20 -0
  94. package/src/js/modules/Page/Page.js +7 -3
  95. package/src/js/modules/Persistence/Persistence.js +1 -1
  96. package/src/js/modules/Popup/Popup.js +194 -0
  97. package/src/js/modules/ResizeColumns/ResizeColumns.js +138 -81
  98. package/src/js/modules/Sort/defaults/sorters/datetime.js +15 -2
  99. package/src/js/modules/Tooltip/Tooltip.js +132 -0
  100. package/src/js/modules/Validate/Validate.js +107 -71
  101. package/src/scss/tabulator.scss +349 -349
  102. package/src/scss/themes/bootstrap/functions5.scss +302 -0
  103. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +546 -0
  104. package/src/scss/themes/bootstrap/variables5.scss +1641 -0
@@ -1,589 +1,10 @@
1
- import Helpers from '../../../../core/tools/Helpers.js';
1
+ import List from '../../List.js';
2
2
 
3
- //dropdown select editor
4
3
  export default function(cell, onRendered, success, cancel, editorParams){
5
- var self = this,
6
- cellEl = cell.getElement(),
7
- initialValue = cell.getValue(),
8
- vertNav = editorParams.verticalNavigation || "editor",
9
- initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : []),
10
- input = document.createElement("input"),
11
- listEl = document.createElement("div"),
12
- multiselect = editorParams.multiselect,
13
- dataItems = [],
14
- currentItem = {},
15
- displayItems = [],
16
- currentItems = [],
17
- blurable = true,
18
- blockListShow = false,
19
- searchWord = "",
20
- searchWordTimeout = null;
21
4
 
22
- if(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === "object" && !editorParams.values)){
23
- console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
24
- editorParams = {values:editorParams};
25
- }
5
+ console.warn("The select editor has been deprecated, please use the new list editor");
26
6
 
27
- function getUniqueColumnValues(field){
28
- var output = {},
29
- data = self.table.getData(),
30
- column;
7
+ var list = new List(this, cell, onRendered, success, cancel, editorParams);
31
8
 
32
- if(field){
33
- column = self.table.columnManager.getColumnByField(field);
34
- }else{
35
- column = cell.getColumn()._getSelf();
36
- }
37
-
38
- if(column){
39
- data.forEach(function(row){
40
- var val = column.getFieldValue(row);
41
-
42
- if(val !== null && typeof val !== "undefined" && val !== ""){
43
- output[val] = true;
44
- }
45
- });
46
- }else{
47
- console.warn("unable to find matching column to create select lookup list:", field);
48
- }
49
-
50
- return Object.keys(output);
51
- }
52
-
53
- function parseItems(inputValues, curentValues){
54
- var dataList = [];
55
- var displayList = [];
56
-
57
- function processComplexListItem(item){
58
- var item = {
59
- label:item.label,
60
- value:item.value,
61
- itemParams:item.itemParams,
62
- elementAttributes: item.elementAttributes,
63
- element:false,
64
- };
65
-
66
- // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
67
- // setCurrentItem(item);
68
- // }
69
-
70
- if(curentValues.indexOf(item.value) > -1){
71
- setItem(item);
72
- }
73
-
74
- dataList.push(item);
75
- displayList.push(item);
76
-
77
- return item;
78
- }
79
-
80
- if(typeof inputValues == "function"){
81
- inputValues = inputValues(cell);
82
- }
83
-
84
- if(Array.isArray(inputValues)){
85
- inputValues.forEach(function(value){
86
- var item;
87
-
88
- if(typeof value === "object"){
89
-
90
- if(value.options){
91
- item = {
92
- label:value.label,
93
- group:true,
94
- itemParams:value.itemParams,
95
- elementAttributes:value.elementAttributes,
96
- element:false,
97
- };
98
-
99
- displayList.push(item);
100
-
101
- value.options.forEach(function(item){
102
- processComplexListItem(item);
103
- });
104
- }else{
105
- processComplexListItem(value);
106
- }
107
-
108
- }else{
109
-
110
- item = {
111
- label:value,
112
- value:value,
113
- element:false,
114
- };
115
-
116
- // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
117
- // setCurrentItem(item);
118
- // }
119
-
120
- if(curentValues.indexOf(item.value) > -1){
121
- setItem(item);
122
- }
123
-
124
- dataList.push(item);
125
- displayList.push(item);
126
- }
127
- });
128
- }else{
129
- for(var key in inputValues){
130
- var item = {
131
- label:inputValues[key],
132
- value:key,
133
- element:false,
134
- };
135
-
136
- // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
137
- // setCurrentItem(item);
138
- // }
139
-
140
- if(curentValues.indexOf(item.value) > -1){
141
- setItem(item);
142
- }
143
-
144
- dataList.push(item);
145
- displayList.push(item);
146
- }
147
- }
148
-
149
- if(editorParams.sortValuesList){
150
- dataList.sort((a, b) => {
151
- return a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);
152
- });
153
-
154
- displayList.sort((a, b) => {
155
- return a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);
156
- });
157
-
158
- if(editorParams.sortValuesList !== "asc"){
159
- dataList.reverse();
160
- displayList.reverse();
161
- }
162
- }
163
-
164
- dataItems = dataList;
165
- displayItems = displayList;
166
-
167
- fillList();
168
- }
169
-
170
- function fillList(){
171
- while(listEl.firstChild) listEl.removeChild(listEl.firstChild);
172
-
173
- displayItems.forEach(function(item){
174
-
175
- var el = item.element;
176
-
177
- if(!el){
178
- el = document.createElement("div");
179
- item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
180
- if(item.group){
181
- el.classList.add("tabulator-edit-select-list-group");
182
- el.tabIndex = 0;
183
- el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
184
- }else{
185
- el.classList.add("tabulator-edit-select-list-item");
186
- el.tabIndex = 0;
187
- el.innerHTML = item.label === "" ? "&nbsp;" : item.label;
188
-
189
- el.addEventListener("click", function(){
190
- blockListShow = true;
191
-
192
- setTimeout(() => {
193
- blockListShow = false;
194
- }, 10);
195
-
196
- // setCurrentItem(item);
197
- // chooseItem();
198
- if(multiselect){
199
- toggleItem(item);
200
- input.focus();
201
- }else{
202
- chooseItem(item);
203
- }
204
-
205
- });
206
-
207
- // if(item === currentItem){
208
- // el.classList.add("active");
209
- // }
210
-
211
- if(currentItems.indexOf(item) > -1){
212
- el.classList.add("active");
213
- }
214
- }
215
-
216
- if(item.elementAttributes && typeof item.elementAttributes == "object"){
217
- for (let key in item.elementAttributes){
218
- if(key.charAt(0) == "+"){
219
- key = key.slice(1);
220
- el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
221
- }else{
222
- el.setAttribute(key, item.elementAttributes[key]);
223
- }
224
- }
225
- }
226
- el.addEventListener("mousedown", function(){
227
- blurable = false;
228
-
229
- setTimeout(function(){
230
- blurable = true;
231
- }, 10);
232
- });
233
-
234
- item.element = el;
235
-
236
-
237
- }
238
-
239
- listEl.appendChild(el);
240
- });
241
- }
242
-
243
-
244
- function setCurrentItem(item, active){
245
-
246
- if(!multiselect && currentItem && currentItem.element){
247
- currentItem.element.classList.remove("active");
248
- }
249
-
250
- if(currentItem && currentItem.element){
251
- currentItem.element.classList.remove("focused");
252
- }
253
-
254
- currentItem = item;
255
-
256
- if(item.element){
257
- item.element.classList.add("focused");
258
- if(active){
259
- item.element.classList.add("active");
260
- }
261
- }
262
-
263
- if(item && item.element && item.element.scrollIntoView){
264
- item.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});
265
- }
266
- }
267
-
268
-
269
- // function chooseItem(){
270
- // hideList();
271
-
272
- // if(initialValue !== currentItem.value){
273
- // initialValue = currentItem.value;
274
- // success(currentItem.value);
275
- // }else{
276
- // cancel();
277
- // }
278
- // }
279
-
280
- function setItem(item) {
281
- var index = currentItems.indexOf(item);
282
-
283
- if(index == -1){
284
- currentItems.push(item);
285
- setCurrentItem(item, true);
286
- }
287
-
288
- fillInput();
289
- }
290
-
291
- function unsetItem(index) {
292
- var item = currentItems[index];
293
-
294
- if(index > -1){
295
- currentItems.splice(index, 1);
296
- if(item.element){
297
- item.element.classList.remove("active");
298
- }
299
- }
300
- }
301
-
302
- function toggleItem(item) {
303
- if(!item){
304
- item = currentItem;
305
- }
306
-
307
- var index = currentItems.indexOf(item);
308
-
309
- if(index > -1){
310
- unsetItem(index);
311
- }else{
312
- if(multiselect !== true && currentItems.length >= multiselect){
313
- unsetItem(0);
314
- }
315
-
316
- setItem(item);
317
- }
318
-
319
- fillInput();
320
-
321
- }
322
-
323
- function chooseItem(item){
324
- hideList();
325
-
326
- if(!item){
327
- item = currentItem;
328
- }
329
-
330
- if(item){
331
- input.value = item.label;
332
- success(item.value);
333
- }
334
-
335
- initialDisplayValue = [item.value];
336
- }
337
-
338
-
339
- function chooseItems(silent){
340
- if(!silent){
341
- hideList();
342
- }
343
-
344
- var output = [];
345
-
346
- currentItems.forEach((item) => {
347
- output.push(item.value);
348
- });
349
-
350
- initialDisplayValue = output;
351
-
352
- success(output);
353
- }
354
-
355
- function fillInput(){
356
- var output = [];
357
-
358
- currentItems.forEach((item) => {
359
- output.push(item.label);
360
- });
361
-
362
- input.value = output.join(", ");
363
-
364
- if(self.currentCell === false){
365
- chooseItems(true);
366
- }
367
- }
368
-
369
-
370
- function unsetItems() {
371
-
372
- var len = currentItems.length;
373
-
374
- for(let i = 0; i < len; i++){
375
- unsetItem(0);
376
- }
377
- }
378
-
379
- function cancelItem(){
380
- hideList();
381
- cancel();
382
- }
383
-
384
- function showList(){
385
- currentItems = [];
386
-
387
- if(!listEl.parentNode){
388
- if(editorParams.values === true){
389
- parseItems(getUniqueColumnValues(), initialDisplayValue);
390
- }else if(typeof editorParams.values === "string"){
391
- parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
392
- }else{
393
- parseItems(editorParams.values || [], initialDisplayValue);
394
- }
395
-
396
-
397
- var offset = Helpers.elOffset(cellEl);
398
-
399
- listEl.style.minWidth = cellEl.offsetWidth + "px";
400
-
401
- listEl.style.top = (offset.top + cellEl.offsetHeight) + "px";
402
- listEl.style.left = offset.left + "px";
403
-
404
-
405
- listEl.addEventListener("mousedown", function(e){
406
- blurable = false;
407
-
408
- setTimeout(function(){
409
- blurable = true;
410
- }, 10);
411
- });
412
-
413
- document.body.appendChild(listEl);
414
- }
415
- }
416
-
417
- function hideList(){
418
- if(listEl.parentNode){
419
- listEl.parentNode.removeChild(listEl);
420
- }
421
-
422
- removeScrollListener();
423
- }
424
-
425
- function removeScrollListener() {
426
- self.table.rowManager.element.removeEventListener("scroll", cancelItem);
427
- }
428
-
429
- function scrollTovalue(char){
430
-
431
- clearTimeout(searchWordTimeout);
432
-
433
- var character = String.fromCharCode(event.keyCode).toLowerCase();
434
- searchWord += character.toLowerCase();
435
-
436
- var match = dataItems.find((item) => {
437
- return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(searchWord);
438
- });
439
-
440
- if(match){
441
- setCurrentItem(match, !multiselect);
442
- }
443
-
444
- searchWordTimeout = setTimeout(() => {
445
- searchWord = "";
446
- }, 800)
447
- }
448
-
449
- //style input
450
- input.setAttribute("type", "text");
451
-
452
- input.style.padding = "4px";
453
- input.style.width = "100%";
454
- input.style.boxSizing = "border-box";
455
- input.style.cursor = "default";
456
- input.readOnly = (this.currentCell != false);
457
-
458
- if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){
459
- for (let key in editorParams.elementAttributes){
460
- if(key.charAt(0) == "+"){
461
- key = key.slice(1);
462
- input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
463
- }else{
464
- input.setAttribute(key, editorParams.elementAttributes[key]);
465
- }
466
- }
467
- }
468
-
469
- input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
470
-
471
- // if(editorParams.values === true){
472
- // parseItems(getUniqueColumnValues(), initialValue);
473
- // }else if(typeof editorParams.values === "string"){
474
- // parseItems(getUniqueColumnValues(editorParams.values), initialValue);
475
- // }else{
476
- // parseItems(editorParams.values || [], initialValue);
477
- // }
478
-
479
- input.addEventListener("search", function(e){
480
- if(!input.value){
481
- unsetItems();
482
- chooseItems();
483
- }
484
- });
485
-
486
- //allow key based navigation
487
- input.addEventListener("keydown", function(e){
488
- var index;
489
-
490
- switch(e.keyCode){
491
- case 38: //up arrow
492
- index = dataItems.indexOf(currentItem);
493
-
494
- if(vertNav == "editor" || (vertNav == "hybrid" && index)){
495
- e.stopImmediatePropagation();
496
- e.stopPropagation();
497
- e.preventDefault();
498
-
499
- if(index > 0){
500
- setCurrentItem(dataItems[index - 1], !multiselect);
501
- }
502
- }
503
- break;
504
-
505
- case 40: //down arrow
506
- index = dataItems.indexOf(currentItem);
507
-
508
- if(vertNav == "editor" || (vertNav == "hybrid" && index < dataItems.length - 1)){
509
- e.stopImmediatePropagation();
510
- e.stopPropagation();
511
- e.preventDefault();
512
-
513
- if(index < dataItems.length - 1){
514
- if(index == -1){
515
- setCurrentItem(dataItems[0], !multiselect);
516
- }else{
517
- setCurrentItem(dataItems[index + 1], !multiselect);
518
- }
519
- }
520
- }
521
- break;
522
-
523
- case 37: //left arrow
524
- case 39: //right arrow
525
- e.stopImmediatePropagation();
526
- e.stopPropagation();
527
- e.preventDefault();
528
- break;
529
-
530
- case 13: //enter
531
- // chooseItem();
532
-
533
- if(multiselect){
534
- toggleItem();
535
- }else{
536
- chooseItem();
537
- }
538
-
539
- break;
540
-
541
- case 27: //escape
542
- cancelItem();
543
- break;
544
-
545
- case 9: //tab
546
- break;
547
-
548
- default:
549
- if(self.currentCell === false){
550
- e.preventDefault();
551
- }
552
-
553
- if(e.keyCode >= 38 && e.keyCode <= 90){
554
- scrollTovalue(e.keyCode);
555
- }
556
- }
557
- });
558
-
559
- input.addEventListener("blur", function(e){
560
- if(blurable){
561
- if(multiselect){
562
- chooseItems();
563
- }else{
564
- cancelItem();
565
- }
566
- }
567
- });
568
-
569
- input.addEventListener("focus", function(e){
570
- if(!blockListShow){
571
- showList();
572
- }
573
- });
574
-
575
- //style list element
576
- listEl = document.createElement("div");
577
- listEl.classList.add("tabulator-edit-select-list");
578
-
579
- onRendered(function(){
580
- input.style.height = "100%";
581
- input.focus({preventScroll: true});
582
- });
583
-
584
- setTimeout(() => {
585
- this.table.rowManager.element.addEventListener("scroll", cancelItem);
586
- }, 10);
587
-
588
- return input;
589
- };
9
+ return list.input;
10
+ }
@@ -39,6 +39,10 @@ export default function(cell, onRendered, success, cancel, editorParams){
39
39
  input.scrollHeight;
40
40
  input.style.height = input.scrollHeight + "px";
41
41
  cell.getRow().normalizeHeight();
42
+
43
+ if(editorParams.selectContents){
44
+ input.select();
45
+ }
42
46
  });
43
47
 
44
48
  function onChange(e){
@@ -4,7 +4,9 @@ export default function(cell, onRendered, success, cancel, editorParams){
4
4
  input = document.createElement("input"),
5
5
  tristate = editorParams.tristate,
6
6
  indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
7
- indetermState = false;
7
+ indetermState = false,
8
+ trueValueSet = Object.keys(editorParams).includes("trueValue"),
9
+ falseValueSet = Object.keys(editorParams).includes("falseValue");
8
10
 
9
11
  input.setAttribute("type", "checkbox");
10
12
  input.style.marginTop = "5px";
@@ -34,13 +36,23 @@ export default function(cell, onRendered, success, cancel, editorParams){
34
36
  });
35
37
  }
36
38
 
37
- input.checked = value === true || value === "true" || value === "True" || value === 1;
39
+ input.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === "true" || value === "True" || value === 1);
38
40
 
39
41
  onRendered(function(){
40
42
  input.focus();
41
43
  });
42
44
 
43
45
  function setValue(blur){
46
+ var checkedValue = input.checked;
47
+
48
+ if(trueValueSet && checkedValue){
49
+ checkedValue = editorParams.trueValue;
50
+ }else if(falseValueSet && !checkedValue){
51
+ checkedValue = editorParams.falseValue;
52
+ }else{
53
+ checkedValue = checkedValue;
54
+ }
55
+
44
56
  if(tristate){
45
57
  if(!blur){
46
58
  if(input.checked && !indetermState){
@@ -50,17 +62,17 @@ export default function(cell, onRendered, success, cancel, editorParams){
50
62
  return indetermValue;
51
63
  }else{
52
64
  indetermState = false;
53
- return input.checked;
65
+ return checkedValue;
54
66
  }
55
67
  }else{
56
68
  if(indetermState){
57
69
  return indetermValue;
58
70
  }else{
59
- return input.checked;
71
+ return checkedValue;
60
72
  }
61
73
  }
62
74
  }else{
63
- return input.checked;
75
+ return checkedValue;
64
76
  }
65
77
  }
66
78
 
@@ -3,6 +3,7 @@ import textarea from './editors/textarea.js';
3
3
  import number from './editors/number.js';
4
4
  import range from './editors/range.js';
5
5
  import select from './editors/select.js';
6
+ import list from './editors/list.js';
6
7
  import autocomplete from './editors/autocomplete.js';
7
8
  import star from './editors/star.js';
8
9
  import progress from './editors/progress.js';
@@ -14,6 +15,7 @@ export default {
14
15
  number:number,
15
16
  range:range,
16
17
  select:select,
18
+ list:list,
17
19
  autocomplete:autocomplete,
18
20
  star:star,
19
21
  progress:progress,