tabulator-tables 5.1.7 → 5.2.1

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 (103) 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 +64 -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 +64 -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 +64 -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 +1580 -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 +64 -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 +64 -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 +64 -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 +64 -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 +64 -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 +64 -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 +64 -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 +2543 -1658
  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 +2746 -2069
  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/row/Row.js +127 -118
  66. package/src/js/core/tools/Alert.js +63 -0
  67. package/src/js/core/tools/ComponentFunctionBinder.js +3 -3
  68. package/src/js/core/tools/DataLoader.js +12 -84
  69. package/src/js/core/tools/InteractionMonitor.js +1 -1
  70. package/src/js/core/tools/ModuleBinder.js +30 -23
  71. package/src/js/core/tools/Popup.js +251 -0
  72. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +2 -2
  73. package/src/js/modules/Edit/Edit.js +6 -25
  74. package/src/js/modules/Edit/List.js +997 -0
  75. package/src/js/modules/Edit/defaults/editors/autocomplete.js +6 -446
  76. package/src/js/modules/Edit/defaults/editors/input.js +4 -0
  77. package/src/js/modules/Edit/defaults/editors/list.js +7 -0
  78. package/src/js/modules/Edit/defaults/editors/number.js +4 -0
  79. package/src/js/modules/Edit/defaults/editors/select.js +5 -584
  80. package/src/js/modules/Edit/defaults/editors/textarea.js +4 -0
  81. package/src/js/modules/Edit/defaults/editors/tickCross.js +17 -5
  82. package/src/js/modules/Edit/defaults/editors.js +2 -0
  83. package/src/js/modules/Filter/Filter.js +7 -4
  84. package/src/js/modules/Format/defaults/formatters/datetime.js +10 -4
  85. package/src/js/modules/Format/defaults/formatters/datetimediff.js +10 -3
  86. package/src/js/modules/Format/defaults/formatters/link.js +12 -1
  87. package/src/js/modules/Format/defaults/formatters/money.js +5 -3
  88. package/src/js/modules/Format/defaults/formatters/tickCross.js +2 -1
  89. package/src/js/modules/FrozenColumns/FrozenColumns.js +30 -8
  90. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +5 -1
  91. package/src/js/modules/Menu/Menu.js +59 -157
  92. package/src/js/modules/Mutator/Mutator.js +20 -0
  93. package/src/js/modules/Page/Page.js +7 -3
  94. package/src/js/modules/Persistence/Persistence.js +1 -1
  95. package/src/js/modules/Popup/Popup.js +194 -0
  96. package/src/js/modules/ResizeColumns/ResizeColumns.js +138 -81
  97. package/src/js/modules/Sort/defaults/sorters/datetime.js +15 -2
  98. package/src/js/modules/Tooltip/Tooltip.js +132 -0
  99. package/src/js/modules/Validate/Validate.js +107 -71
  100. package/src/scss/tabulator.scss +354 -349
  101. package/src/scss/themes/bootstrap/functions5.scss +302 -0
  102. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +546 -0
  103. 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,