File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/* Tabulator v4.9.3 (c) Oliver Folkerd */
var Edit = function Edit(table) {
this.table = table; //hold Tabulator object
this.currentCell = false; //hold currently editing cell
this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening
this.recursionBlock = false; //prevent focus recursion
this.invalidEdit = false;
this.editedCells = [];
};
//initialize column editor
Edit.prototype.initializeColumn = function (column) {
var self = this,
config = {
editor: false,
blocked: false,
check: column.definition.editable,
params: column.definition.editorParams || {}
};
//set column editor
switch (_typeof(column.definition.editor)) {
case "string":
if (column.definition.editor === "tick") {
column.definition.editor = "tickCross";
console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
}
if (self.editors[column.definition.editor]) {
config.editor = self.editors[column.definition.editor];
} else {
console.warn("Editor Error - No such editor found: ", column.definition.editor);
}
break;
case "function":
config.editor = column.definition.editor;
break;
case "boolean":
if (column.definition.editor === true) {
if (typeof column.definition.formatter !== "function") {
if (column.definition.formatter === "tick") {
column.definition.formatter = "tickCross";
console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor");
}
if (self.editors[column.definition.formatter]) {
config.editor = self.editors[column.definition.formatter];
} else {
config.editor = self.editors["input"];
}
} else {
console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter);
}
}
break;
}
if (config.editor) {
column.modules.edit = config;
}
};
Edit.prototype.getCurrentCell = function () {
return this.currentCell ? this.currentCell.getComponent() : false;
};
Edit.prototype.clearEditor = function (cancel) {
var cell = this.currentCell,
cellEl;
this.invalidEdit = false;
if (cell) {
this.currentCell = false;
cellEl = cell.getElement();
if (cancel) {
cell.validate();
} else {
cellEl.classList.remove("tabulator-validation-fail");
}
cellEl.classList.remove("tabulator-editing");
while (cellEl.firstChild) {
cellEl.removeChild(cellEl.firstChild);
}cell.row.getElement().classList.remove("tabulator-row-editing");
}
};
Edit.prototype.cancelEdit = function () {
if (this.currentCell) {
var cell = this.currentCell;
var component = this.currentCell.getComponent();
this.clearEditor(true);
cell.setValueActual(cell.getValue());
cell.cellRendered();
if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) {
cell.row.normalizeHeight(true);
}
if (cell.column.cellEvents.cellEditCancelled) {
cell.column.cellEvents.cellEditCancelled.call(this.table, component);
}
this.table.options.cellEditCancelled.call(this.table, component);
}
};
//return a formatted value for a cell
Edit.prototype.bindEditor = function (cell) {
var self = this,
element = cell.getElement(true);
element.setAttribute("tabindex", 0);
element.addEventListener("click", function (e) {
if (!element.classList.contains("tabulator-editing")) {
element.focus({ preventScroll: true });
}
});
element.addEventListener("mousedown", function (e) {
if (e.button === 2) {
e.preventDefault();
} else {
self.mouseClick = true;
}
});
element.addEventListener("focus", function (e) {
if (!self.recursionBlock) {
self.edit(cell, e, false);
}
});
};
Edit.prototype.focusCellNoEvent = function (cell, block) {
this.recursionBlock = true;
if (!(block && this.table.browser === "ie")) {
cell.getElement().focus({ preventScroll: true });
}
this.recursionBlock = false;
};
Edit.prototype.editCell = function (cell, forceEdit) {
this.focusCellNoEvent(cell);
this.edit(cell, false, forceEdit);
};
Edit.prototype.focusScrollAdjust = function (cell) {
if (this.table.rowManager.getRenderMode() == "virtual") {
var topEdge = this.table.rowManager.element.scrollTop,
bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,
rowEl = cell.row.getElement(),
offset = rowEl.offsetTop;
if (rowEl.offsetTop < topEdge) {
this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;
} else {
if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {
this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;
}
}
var leftEdge = this.table.rowManager.element.scrollLeft,
rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,
cellEl = cell.getElement(),
offset = cellEl.offsetLeft;
if (this.table.modExists("frozenColumns")) {
leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);
rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
}
if (this.table.options.virtualDomHoz) {
leftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
rightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
}
if (cellEl.offsetLeft < leftEdge) {
this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
} else {
if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;
}
}
}
};
Edit.prototype.edit = function (cell, e, forceEdit) {
var self = this,
allowEdit = true,
rendered = function rendered() {},
element = cell.getElement(),
cellEditor,
component,
params;
//prevent editing if another cell is refusing to leave focus (eg. validation fail)
if (this.currentCell) {
if (!this.invalidEdit) {
this.cancelEdit();
}
return;
}
//handle successfull value change
function success(value) {
if (self.currentCell === cell) {
var valid = true;
if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") {
valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);
}
if (valid === true || self.table.options.validationMode === "highlight") {
self.clearEditor();
if (!cell.modules.edit) {
cell.modules.edit = {};
}
cell.modules.edit.edited = true;
if (self.editedCells.indexOf(cell) == -1) {
self.editedCells.push(cell);
}
cell.setValue(value, true);
if (self.table.options.dataTree && self.table.modExists("dataTree")) {
self.table.modules.dataTree.checkForRestyle(cell);
}
if (valid !== true) {
element.classList.add("tabulator-validation-fail");
self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
return false;
}
return true;
} else {
self.invalidEdit = true;
element.classList.add("tabulator-validation-fail");
self.focusCellNoEvent(cell, true);
rendered();
self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);
return false;
}
} else {
// console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited");
}
}
//handle aborted edit
function cancel() {
if (self.currentCell === cell) {
self.cancelEdit();
if (self.table.options.dataTree && self.table.modExists("dataTree")) {
self.table.modules.dataTree.checkForRestyle(cell);
}
} else {
// console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited");
}
}
function onRendered(callback) {
rendered = callback;
}
if (!cell.column.modules.edit.blocked) {
if (e) {
e.stopPropagation();
}
switch (_typeof(cell.column.modules.edit.check)) {
case "function":
allowEdit = cell.column.modules.edit.check(cell.getComponent());
break;
case "boolean":
allowEdit = cell.column.modules.edit.check;
break;
}
if (allowEdit || forceEdit) {
self.cancelEdit();
self.currentCell = cell;
this.focusScrollAdjust(cell);
component = cell.getComponent();
if (this.mouseClick) {
this.mouseClick = false;
if (cell.column.cellEvents.cellClick) {
cell.column.cellEvents.cellClick.call(this.table, e, component);
}
}
if (cell.column.cellEvents.cellEditing) {
cell.column.cellEvents.cellEditing.call(this.table, component);
}
self.table.options.cellEditing.call(this.table, component);
params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;
cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);
//if editor returned, add to DOM, if false, abort edit
if (cellEditor !== false) {
if (cellEditor instanceof Node) {
element.classList.add("tabulator-editing");
cell.row.getElement().classList.add("tabulator-row-editing");
while (element.firstChild) {
element.removeChild(element.firstChild);
}element.appendChild(cellEditor);
//trigger onRendered Callback
rendered();
//prevent editing from triggering rowClick event
var children = element.children;
for (var i = 0; i < children.length; i++) {
children[i].addEventListener("click", function (e) {
e.stopPropagation();
});
}
} else {
console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor);
element.blur();
return false;
}
} else {
element.blur();
return false;
}
return true;
} else {
this.mouseClick = false;
element.blur();
return false;
}
} else {
this.mouseClick = false;
element.blur();
return false;
}
};
Edit.prototype.maskInput = function (el, options) {
var mask = options.mask,
maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A",
maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9",
maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*",
success = false;
function fillSymbols(index) {
var symbol = mask[index];
if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {
el.value = el.value + "" + symbol;
fillSymbols(index + 1);
}
}
el.addEventListener("keydown", function (e) {
var index = el.value.length,
char = e.key;
if (e.keyCode > 46) {
if (index >= mask.length) {
e.preventDefault();
e.stopPropagation();
success = false;
return false;
} else {
switch (mask[index]) {
case maskLetter:
if (char.toUpperCase() == char.toLowerCase()) {
e.preventDefault();
e.stopPropagation();
success = false;
return false;
}
break;
case maskNumber:
if (isNaN(char)) {
e.preventDefault();
e.stopPropagation();
success = false;
return false;
}
break;
case maskWildcard:
break;
default:
if (char !== mask[index]) {
e.preventDefault();
e.stopPropagation();
success = false;
return false;
}
}
}
success = true;
}
return;
});
el.addEventListener("keyup", function (e) {
if (e.keyCode > 46) {
if (options.maskAutoFill) {
fillSymbols(el.value.length);
}
}
});
if (!el.placeholder) {
el.placeholder = mask;
}
if (options.maskAutoFill) {
fillSymbols(el.value.length);
}
};
Edit.prototype.getEditedCells = function () {
var output = [];
this.editedCells.forEach(function (cell) {
output.push(cell.getComponent());
});
return output;
};
Edit.prototype.clearEdited = function (cell) {
var editIndex;
if (cell.modules.edit && cell.modules.edit.edited) {
cell.modules.edit.edited = false;
if (cell.modules.validate) {
cell.modules.validate.invalid = false;
}
}
editIndex = this.editedCells.indexOf(cell);
if (editIndex > -1) {
this.editedCells.splice(editIndex, 1);
}
};
//default data editors
Edit.prototype.editors = {
//input element
input: function input(cell, onRendered, success, cancel, editorParams) {
//create and style input
var cellValue = cell.getValue(),
input = document.createElement("input");
input.setAttribute("type", editorParams.search ? "search" : "text");
input.style.padding = "4px";
input.style.width = "100%";
input.style.boxSizing = "border-box";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = typeof cellValue !== "undefined" ? cellValue : "";
onRendered(function () {
input.focus({ preventScroll: true });
input.style.height = "100%";
});
function onChange(e) {
if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
if (success(input.value)) {
cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
}
} else {
cancel();
}
}
//submit new value on blur or change
input.addEventListener("change", onChange);
input.addEventListener("blur", onChange);
//submit new value on enter
input.addEventListener("keydown", function (e) {
switch (e.keyCode) {
// case 9:
case 13:
onChange(e);
break;
case 27:
cancel();
break;
case 35:
case 36:
e.stopPropagation();
break;
}
});
if (editorParams.mask) {
this.table.modules.edit.maskInput(input, editorParams);
}
return input;
},
//resizable text area element
textarea: function textarea(cell, onRendered, success, cancel, editorParams) {
var self = this,
cellValue = cell.getValue(),
vertNav = editorParams.verticalNavigation || "hybrid",
value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""),
count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1,
input = document.createElement("textarea"),
scrollHeight = 0;
//create and style input
input.style.display = "block";
input.style.padding = "2px";
input.style.height = "100%";
input.style.width = "100%";
input.style.boxSizing = "border-box";
input.style.whiteSpace = "pre-wrap";
input.style.resize = "none";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = value;
onRendered(function () {
input.focus({ preventScroll: true });
input.style.height = "100%";
input.scrollHeight;
input.style.height = input.scrollHeight + "px";
cell.getRow().normalizeHeight();
});
function onChange(e) {
if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) {
if (success(input.value)) {
cellValue = input.value; //persist value if successfully validated incase editor is used as header filter
}
setTimeout(function () {
cell.getRow().normalizeHeight();
}, 300);
} else {
cancel();
}
}
//submit new value on blur or change
input.addEventListener("change", onChange);
input.addEventListener("blur", onChange);
input.addEventListener("keyup", function () {
input.style.height = "";
var heightNow = input.scrollHeight;
input.style.height = heightNow + "px";
if (heightNow != scrollHeight) {
scrollHeight = heightNow;
cell.getRow().normalizeHeight();
}
});
input.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 27:
cancel();
break;
case 38:
//up arrow
if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) {
e.stopImmediatePropagation();
e.stopPropagation();
}
break;
case 40:
//down arrow
if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) {
e.stopImmediatePropagation();
e.stopPropagation();
}
break;
case 35:
case 36:
e.stopPropagation();
break;
}
});
if (editorParams.mask) {
this.table.modules.edit.maskInput(input, editorParams);
}
return input;
},
//input element with type of number
number: function number(cell, onRendered, success, cancel, editorParams) {
var cellValue = cell.getValue(),
vertNav = editorParams.verticalNavigation || "editor",
input = document.createElement("input");
input.setAttribute("type", "number");
if (typeof editorParams.max != "undefined") {
input.setAttribute("max", editorParams.max);
}
if (typeof editorParams.min != "undefined") {
input.setAttribute("min", editorParams.min);
}
if (typeof editorParams.step != "undefined") {
input.setAttribute("step", editorParams.step);
}
//create and style input
input.style.padding = "4px";
input.style.width = "100%";
input.style.boxSizing = "border-box";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = cellValue;
var blurFunc = function blurFunc(e) {
onChange();
};
onRendered(function () {
//submit new value on blur
input.removeEventListener("blur", blurFunc);
input.focus({ preventScroll: true });
input.style.height = "100%";
//submit new value on blur
input.addEventListener("blur", blurFunc);
});
function onChange() {
var value = input.value;
if (!isNaN(value) && value !== "") {
value = Number(value);
}
if (value !== cellValue) {
if (success(value)) {
cellValue = value; //persist value if successfully validated incase editor is used as header filter
}
} else {
cancel();
}
}
//submit new value on enter
input.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 13:
// case 9:
onChange();
break;
case 27:
cancel();
break;
case 38: //up arrow
case 40:
//down arrow
if (vertNav == "editor") {
e.stopImmediatePropagation();
e.stopPropagation();
}
break;
case 35:
case 36:
e.stopPropagation();
break;
}
});
if (editorParams.mask) {
this.table.modules.edit.maskInput(input, editorParams);
}
return input;
},
//input element with type of number
range: function range(cell, onRendered, success, cancel, editorParams) {
var cellValue = cell.getValue(),
input = document.createElement("input");
input.setAttribute("type", "range");
if (typeof editorParams.max != "undefined") {
input.setAttribute("max", editorParams.max);
}
if (typeof editorParams.min != "undefined") {
input.setAttribute("min", editorParams.min);
}
if (typeof editorParams.step != "undefined") {
input.setAttribute("step", editorParams.step);
}
//create and style input
input.style.padding = "4px";
input.style.width = "100%";
input.style.boxSizing = "border-box";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = cellValue;
onRendered(function () {
input.focus({ preventScroll: true });
input.style.height = "100%";
});
function onChange() {
var value = input.value;
if (!isNaN(value) && value !== "") {
value = Number(value);
}
if (value != cellValue) {
if (success(value)) {
cellValue = value; //persist value if successfully validated incase editor is used as header filter
}
} else {
cancel();
}
}
//submit new value on blur
input.addEventListener("blur", function (e) {
onChange();
});
//submit new value on enter
input.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 13:
// case 9:
onChange();
break;
case 27:
cancel();
break;
}
});
return input;
},
//select
select: function select(cell, onRendered, success, cancel, editorParams) {
var _this = this;
var self = this,
cellEl = cell.getElement(),
initialValue = cell.getValue(),
vertNav = editorParams.verticalNavigation || "editor",
initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [],
input = document.createElement("input"),
listEl = document.createElement("div"),
multiselect = editorParams.multiselect,
dataItems = [],
currentItem = {},
displayItems = [],
currentItems = [],
blurable = true,
blockListShow = false,
searchWord = "",
searchWordTimeout = null;
if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === "undefined" ? "undefined" : _typeof(editorParams)) === "object" && !editorParams.values) {
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");
editorParams = { values: editorParams };
}
function getUniqueColumnValues(field) {
var output = {},
data = self.table.getData(),
column;
if (field) {
column = self.table.columnManager.getColumnByField(field);
} else {
column = cell.getColumn()._getSelf();
}
if (column) {
data.forEach(function (row) {
var val = column.getFieldValue(row);
if (val !== null && typeof val !== "undefined" && val !== "") {
output[val] = true;
}
});
} else {
console.warn("unable to find matching column to create select lookup list:", field);
}
return Object.keys(output);
}
function parseItems(inputValues, curentValues) {
var dataList = [];
var displayList = [];
function processComplexListItem(item) {
var item = {
label: item.label,
value: item.value,
itemParams: item.itemParams,
elementAttributes: item.elementAttributes,
element: false
};
// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
// setCurrentItem(item);
// }
if (curentValues.indexOf(item.value) > -1) {
setItem(item);
}
dataList.push(item);
displayList.push(item);
return item;
}
if (typeof inputValues == "function") {
inputValues = inputValues(cell);
}
if (Array.isArray(inputValues)) {
inputValues.forEach(function (value) {
var item;
if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
if (value.options) {
item = {
label: value.label,
group: true,
itemParams: value.itemParams,
elementAttributes: value.elementAttributes,
element: false
};
displayList.push(item);
value.options.forEach(function (item) {
processComplexListItem(item);
});
} else {
processComplexListItem(value);
}
} else {
item = {
label: value,
value: value,
element: false
};
// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
// setCurrentItem(item);
// }
if (curentValues.indexOf(item.value) > -1) {
setItem(item);
}
dataList.push(item);
displayList.push(item);
}
});
} else {
for (var key in inputValues) {
var item = {
label: inputValues[key],
value: key,
element: false
};
// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){
// setCurrentItem(item);
// }
if (curentValues.indexOf(item.value) > -1) {
setItem(item);
}
dataList.push(item);
displayList.push(item);
}
}
if (editorParams.sortValuesList) {
dataList.sort(function (a, b) {
return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
});
displayList.sort(function (a, b) {
return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
});
if (editorParams.sortValuesList !== "asc") {
dataList.reverse();
displayList.reverse();
}
}
dataItems = dataList;
displayItems = displayList;
fillList();
}
function fillList() {
while (listEl.firstChild) {
listEl.removeChild(listEl.firstChild);
}displayItems.forEach(function (item) {
var el = item.element;
if (!el) {
el = document.createElement("div");
item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;
if (item.group) {
el.classList.add("tabulator-edit-select-list-group");
el.tabIndex = 0;
el.innerHTML = item.label === "" ? " " : item.label;
} else {
el.classList.add("tabulator-edit-select-list-item");
el.tabIndex = 0;
el.innerHTML = item.label === "" ? " " : item.label;
el.addEventListener("click", function () {
blockListShow = true;
setTimeout(function () {
blockListShow = false;
}, 10);
// setCurrentItem(item);
// chooseItem();
if (multiselect) {
toggleItem(item);
input.focus();
} else {
chooseItem(item);
}
});
// if(item === currentItem){
// el.classList.add("active");
// }
if (currentItems.indexOf(item) > -1) {
el.classList.add("active");
}
}
if (item.elementAttributes && _typeof(item.elementAttributes) == "object") {
for (var key in item.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]);
} else {
el.setAttribute(key, item.elementAttributes[key]);
}
}
}
el.addEventListener("mousedown", function () {
blurable = false;
setTimeout(function () {
blurable = true;
}, 10);
});
item.element = el;
}
listEl.appendChild(el);
});
}
function setCurrentItem(item, active) {
if (!multiselect && currentItem && currentItem.element) {
currentItem.element.classList.remove("active");
}
if (currentItem && currentItem.element) {
currentItem.element.classList.remove("focused");
}
currentItem = item;
if (item.element) {
item.element.classList.add("focused");
if (active) {
item.element.classList.add("active");
}
}
if (item && item.element && item.element.scrollIntoView) {
item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
}
}
// function chooseItem(){
// hideList();
// if(initialValue !== currentItem.value){
// initialValue = currentItem.value;
// success(currentItem.value);
// }else{
// cancel();
// }
// }
function setItem(item) {
var index = currentItems.indexOf(item);
if (index == -1) {
currentItems.push(item);
setCurrentItem(item, true);
}
fillInput();
}
function unsetItem(index) {
var item = currentItems[index];
if (index > -1) {
currentItems.splice(index, 1);
if (item.element) {
item.element.classList.remove("active");
}
}
}
function toggleItem(item) {
if (!item) {
item = currentItem;
}
var index = currentItems.indexOf(item);
if (index > -1) {
unsetItem(index);
} else {
if (multiselect !== true && currentItems.length >= multiselect) {
unsetItem(0);
}
setItem(item);
}
fillInput();
}
function chooseItem(item) {
hideList();
if (!item) {
item = currentItem;
}
if (item) {
input.value = item.label;
success(item.value);
}
initialDisplayValue = [item.value];
}
function chooseItems(silent) {
if (!silent) {
hideList();
}
var output = [];
currentItems.forEach(function (item) {
output.push(item.value);
});
initialDisplayValue = output;
success(output);
}
function fillInput() {
var output = [];
currentItems.forEach(function (item) {
output.push(item.label);
});
input.value = output.join(", ");
if (self.currentCell === false) {
chooseItems(true);
}
}
function unsetItems() {
var len = currentItems.length;
for (var i = 0; i < len; i++) {
unsetItem(0);
}
}
function cancelItem() {
hideList();
cancel();
}
function showList() {
currentItems = [];
if (!listEl.parentNode) {
if (editorParams.values === true) {
parseItems(getUniqueColumnValues(), initialDisplayValue);
} else if (typeof editorParams.values === "string") {
parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);
} else {
parseItems(editorParams.values || [], initialDisplayValue);
}
var offset = Tabulator.prototype.helpers.elOffset(cellEl);
listEl.style.minWidth = cellEl.offsetWidth + "px";
listEl.style.top = offset.top + cellEl.offsetHeight + "px";
listEl.style.left = offset.left + "px";
listEl.addEventListener("mousedown", function (e) {
blurable = false;
setTimeout(function () {
blurable = true;
}, 10);
});
document.body.appendChild(listEl);
}
}
function hideList() {
if (listEl.parentNode) {
listEl.parentNode.removeChild(listEl);
}
removeScrollListener();
}
function removeScrollListener() {
self.table.rowManager.element.removeEventListener("scroll", cancelItem);
}
function scrollTovalue(char) {
clearTimeout(searchWordTimeout);
var character = String.fromCharCode(event.keyCode).toLowerCase();
searchWord += character.toLowerCase();
var match = dataItems.find(function (item) {
return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(searchWord);
});
if (match) {
setCurrentItem(match, !multiselect);
}
searchWordTimeout = setTimeout(function () {
searchWord = "";
}, 800);
}
//style input
input.setAttribute("type", "text");
input.style.padding = "4px";
input.style.width = "100%";
input.style.boxSizing = "border-box";
input.style.cursor = "default";
input.readOnly = this.currentCell != false;
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : "";
// if(editorParams.values === true){
// parseItems(getUniqueColumnValues(), initialValue);
// }else if(typeof editorParams.values === "string"){
// parseItems(getUniqueColumnValues(editorParams.values), initialValue);
// }else{
// parseItems(editorParams.values || [], initialValue);
// }
input.addEventListener("search", function (e) {
if (!input.value) {
unsetItems();
chooseItems();
}
});
//allow key based navigation
input.addEventListener("keydown", function (e) {
var index;
switch (e.keyCode) {
case 38:
//up arrow
index = dataItems.indexOf(currentItem);
if (vertNav == "editor" || vertNav == "hybrid" && index) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
if (index > 0) {
setCurrentItem(dataItems[index - 1], !multiselect);
}
}
break;
case 40:
//down arrow
index = dataItems.indexOf(currentItem);
if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
if (index < dataItems.length - 1) {
if (index == -1) {
setCurrentItem(dataItems[0], !multiselect);
} else {
setCurrentItem(dataItems[index + 1], !multiselect);
}
}
}
break;
case 37: //left arrow
case 39:
//right arrow
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
break;
case 13:
//enter
// chooseItem();
if (multiselect) {
toggleItem();
} else {
chooseItem();
}
break;
case 27:
//escape
cancelItem();
break;
case 9:
//tab
break;
default:
if (self.currentCell === false) {
e.preventDefault();
}
if (e.keyCode >= 38 && e.keyCode <= 90) {
scrollTovalue(e.keyCode);
}
}
});
input.addEventListener("blur", function (e) {
if (blurable) {
if (multiselect) {
chooseItems();
} else {
cancelItem();
}
}
});
input.addEventListener("focus", function (e) {
if (!blockListShow) {
showList();
}
});
//style list element
listEl = document.createElement("div");
listEl.classList.add("tabulator-edit-select-list");
onRendered(function () {
input.style.height = "100%";
input.focus({ preventScroll: true });
});
setTimeout(function () {
_this.table.rowManager.element.addEventListener("scroll", cancelItem);
}, 10);
return input;
},
//autocomplete
autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {
var _this2 = this;
var self = this,
cellEl = cell.getElement(),
initialValue = cell.getValue(),
vertNav = editorParams.verticalNavigation || "editor",
initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "",
input = document.createElement("input"),
listEl = document.createElement("div"),
allItems = [],
displayItems = [],
values = [],
currentItem = false,
blurable = true,
uniqueColumnValues = false;
//style input
input.setAttribute("type", "search");
input.style.padding = "4px";
input.style.width = "100%";
input.style.boxSizing = "border-box";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
//style list element
listEl.classList.add("tabulator-edit-select-list");
listEl.addEventListener("mousedown", function (e) {
blurable = false;
setTimeout(function () {
blurable = true;
}, 10);
});
function genUniqueColumnValues() {
if (editorParams.values === true) {
uniqueColumnValues = getUniqueColumnValues();
} else if (typeof editorParams.values === "string") {
uniqueColumnValues = getUniqueColumnValues(editorParams.values);
}
}
function getUniqueColumnValues(field) {
var output = {},
data = self.table.getData(),
column;
if (field) {
column = self.table.columnManager.getColumnByField(field);
} else {
column = cell.getColumn()._getSelf();
}
if (column) {
data.forEach(function (row) {
var val = column.getFieldValue(row);
if (val !== null && typeof val !== "undefined" && val !== "") {
output[val] = true;
}
});
if (editorParams.sortValuesList) {
if (editorParams.sortValuesList == "asc") {
output = Object.keys(output).sort();
} else {
output = Object.keys(output).sort().reverse();
}
} else {
output = Object.keys(output);
}
} else {
console.warn("unable to find matching column to create autocomplete lookup list:", field);
}
return output;
}
function filterList(term, intialLoad) {
var matches = [],
values,
items,
searchEl;
//lookup base values list
if (uniqueColumnValues) {
values = uniqueColumnValues;
} else {
values = editorParams.values || [];
}
if (editorParams.searchFunc) {
matches = editorParams.searchFunc(term, values);
if (matches instanceof Promise) {
addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching...");
matches.then(function (result) {
fillListIfNotEmpty(parseItems(result), intialLoad);
}).catch(function (err) {
console.err("error in autocomplete search promise:", err);
});
} else {
fillListIfNotEmpty(parseItems(matches), intialLoad);
}
} else {
items = parseItems(values);
if (term === "") {
if (editorParams.showListOnEmpty) {
matches = items;
}
} else {
items.forEach(function (item) {
if (item.value !== null || typeof item.value !== "undefined") {
if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {
matches.push(item);
}
}
});
}
fillListIfNotEmpty(matches, intialLoad);
}
}
function addNotice(notice) {
var searchEl = document.createElement("div");
clearList();
if (notice !== false) {
searchEl.classList.add("tabulator-edit-select-list-notice");
searchEl.tabIndex = 0;
if (notice instanceof Node) {
searchEl.appendChild(notice);
} else {
searchEl.innerHTML = notice;
}
listEl.appendChild(searchEl);
}
}
function parseItems(inputValues) {
var itemList = [];
if (Array.isArray(inputValues)) {
inputValues.forEach(function (value) {
var item = {};
if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") {
item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;
item.value = value.value;
} else {
item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;
item.value = value;
}
itemList.push(item);
});
} else {
for (var key in inputValues) {
var item = {
title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],
value: key
};
itemList.push(item);
}
}
return itemList;
}
function clearList() {
while (listEl.firstChild) {
listEl.removeChild(listEl.firstChild);
}
}
function fillListIfNotEmpty(items, intialLoad) {
if (items.length) {
fillList(items, intialLoad);
} else {
if (editorParams.emptyPlaceholder) {
addNotice(editorParams.emptyPlaceholder);
}
}
}
function fillList(items, intialLoad) {
var current = false;
clearList();
displayItems = items;
displayItems.forEach(function (item) {
var el = item.element;
if (!el) {
el = document.createElement("div");
el.classList.add("tabulator-edit-select-list-item");
el.tabIndex = 0;
el.innerHTML = item.title;
el.addEventListener("click", function (e) {
setCurrentItem(item);
chooseItem();
});
el.addEventListener("mousedown", function (e) {
blurable = false;
setTimeout(function () {
blurable = true;
}, 10);
});
item.element = el;
if (intialLoad && item.value == initialValue) {
input.value = item.title;
item.element.classList.add("active");
current = true;
}
if (item === currentItem) {
item.element.classList.add("active");
current = true;
}
}
listEl.appendChild(el);
});
if (!current) {
setCurrentItem(false);
}
}
function chooseItem() {
hideList();
if (currentItem) {
if (initialValue !== currentItem.value) {
initialValue = currentItem.value;
input.value = currentItem.title;
success(currentItem.value);
} else {
cancel();
}
} else {
if (editorParams.freetext) {
initialValue = input.value;
success(input.value);
} else {
if (editorParams.allowEmpty && input.value === "") {
initialValue = input.value;
success(input.value);
} else {
cancel();
}
}
}
}
function showList() {
if (!listEl.parentNode) {
console.log("show", initialDisplayValue);
while (listEl.firstChild) {
listEl.removeChild(listEl.firstChild);
}var offset = Tabulator.prototype.helpers.elOffset(cellEl);
listEl.style.minWidth = cellEl.offsetWidth + "px";
listEl.style.top = offset.top + cellEl.offsetHeight + "px";
listEl.style.left = offset.left + "px";
document.body.appendChild(listEl);
}
}
function setCurrentItem(item, showInputValue) {
if (currentItem && currentItem.element) {
currentItem.element.classList.remove("active");
}
currentItem = item;
if (item && item.element) {
item.element.classList.add("active");
}
if (item && item.element && item.element.scrollIntoView) {
item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
}
}
function hideList() {
if (listEl.parentNode) {
listEl.parentNode.removeChild(listEl);
}
removeScrollListener();
}
function cancelItem() {
hideList();
cancel();
}
function removeScrollListener() {
self.table.rowManager.element.removeEventListener("scroll", cancelItem);
}
//allow key based navigation
input.addEventListener("keydown", function (e) {
var index;
switch (e.keyCode) {
case 38:
//up arrow
index = displayItems.indexOf(currentItem);
if (vertNav == "editor" || vertNav == "hybrid" && index) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
if (index > 0) {
setCurrentItem(displayItems[index - 1]);
} else {
setCurrentItem(false);
}
}
break;
case 40:
//down arrow
index = displayItems.indexOf(currentItem);
if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
if (index < displayItems.length - 1) {
if (index == -1) {
setCurrentItem(displayItems[0]);
} else {
setCurrentItem(displayItems[index + 1]);
}
}
}
break;
case 37: //left arrow
case 39:
//right arrow
e.stopImmediatePropagation();
e.stopPropagation();
// e.preventDefault();
break;
case 13:
//enter
chooseItem();
break;
case 27:
//escape
cancelItem();
break;
case 36: //home
case 35:
//end
//prevent table navigation while using input element
e.stopImmediatePropagation();
break;
}
});
input.addEventListener("keyup", function (e) {
switch (e.keyCode) {
case 38: //up arrow
case 37: //left arrow
case 39: //up arrow
case 40: //right arrow
case 13: //enter
case 27:
//escape
break;
default:
filterList(input.value);
}
});
input.addEventListener("search", function (e) {
filterList(input.value);
});
input.addEventListener("blur", function (e) {
if (blurable) {
chooseItem();
}
});
input.addEventListener("focus", function (e) {
var value = initialDisplayValue;
genUniqueColumnValues();
showList();
input.value = value;
filterList(value, true);
});
onRendered(function () {
input.style.height = "100%";
input.focus({ preventScroll: true });
});
if (editorParams.mask) {
this.table.modules.edit.maskInput(input, editorParams);
}
setTimeout(function () {
_this2.table.rowManager.element.addEventListener("scroll", cancelItem);
}, 10);
genUniqueColumnValues();
input.value = initialDisplayValue;
filterList(initialDisplayValue, true);
return input;
},
//star rating
star: function star(cell, onRendered, success, cancel, editorParams) {
var self = this,
element = cell.getElement(),
value = cell.getValue(),
maxStars = element.getElementsByTagName("svg").length || 5,
size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14,
stars = [],
starsHolder = document.createElement("div"),
star = document.createElementNS('http://www.w3.org/2000/svg', "svg");
//change star type
function starChange(val) {
stars.forEach(function (star, i) {
if (i < val) {
if (self.table.browser == "ie") {
star.setAttribute("class", "tabulator-star-active");
} else {
star.classList.replace("tabulator-star-inactive", "tabulator-star-active");
}
star.innerHTML = '<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
} else {
if (self.table.browser == "ie") {
star.setAttribute("class", "tabulator-star-inactive");
} else {
star.classList.replace("tabulator-star-active", "tabulator-star-inactive");
}
star.innerHTML = '<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>';
}
});
}
//build stars
function buildStar(i) {
var starHolder = document.createElement("span");
var nextStar = star.cloneNode(true);
stars.push(nextStar);
starHolder.addEventListener("mouseenter", function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
starChange(i);
});
starHolder.addEventListener("mousemove", function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
});
starHolder.addEventListener("click", function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
success(i);
element.blur();
});
starHolder.appendChild(nextStar);
starsHolder.appendChild(starHolder);
}
//handle keyboard navigation value change
function changeValue(val) {
value = val;
starChange(val);
}
//style cell
element.style.whiteSpace = "nowrap";
element.style.overflow = "hidden";
element.style.textOverflow = "ellipsis";
//style holding element
starsHolder.style.verticalAlign = "middle";
starsHolder.style.display = "inline-block";
starsHolder.style.padding = "4px";
//style star
star.setAttribute("width", size);
star.setAttribute("height", size);
star.setAttribute("viewBox", "0 0 512 512");
star.setAttribute("xml:space", "preserve");
star.style.padding = "0 1px";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
starsHolder.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
//create correct number of stars
for (var i = 1; i <= maxStars; i++) {
buildStar(i);
}
//ensure value does not exceed number of stars
value = Math.min(parseInt(value), maxStars);
// set initial styling of stars
starChange(value);
starsHolder.addEventListener("mousemove", function (e) {
starChange(0);
});
starsHolder.addEventListener("click", function (e) {
success(0);
});
element.addEventListener("blur", function (e) {
cancel();
});
//allow key based navigation
element.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 39:
//right arrow
changeValue(value + 1);
break;
case 37:
//left arrow
changeValue(value - 1);
break;
case 13:
//enter
success(value);
break;
case 27:
//escape
cancel();
break;
}
});
return starsHolder;
},
//draggable progress bar
progress: function progress(cell, onRendered, success, cancel, editorParams) {
var element = cell.getElement(),
max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max,
min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min,
percent = (max - min) / 100,
value = cell.getValue() || 0,
handle = document.createElement("div"),
bar = document.createElement("div"),
mouseDrag,
mouseDragWidth;
//set new value
function updateValue() {
var style = window.getComputedStyle(element, null);
var calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right"))) / 100)) + min;
success(calcVal);
element.setAttribute("aria-valuenow", calcVal);
element.setAttribute("aria-label", value);
}
//style handle
handle.style.position = "absolute";
handle.style.right = "0";
handle.style.top = "0";
handle.style.bottom = "0";
handle.style.width = "5px";
handle.classList.add("tabulator-progress-handle");
//style bar
bar.style.display = "inline-block";
bar.style.position = "relative";
// bar.style.top = "8px";
// bar.style.bottom = "8px";
// bar.style.left = "4px";
// bar.style.marginRight = "4px";
bar.style.height = "100%";
bar.style.backgroundColor = "#488CE9";
bar.style.maxWidth = "100%";
bar.style.minWidth = "0%";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
bar.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
//style cell
element.style.padding = "4px 4px";
//make sure value is in range
value = Math.min(parseFloat(value), max);
value = Math.max(parseFloat(value), min);
//workout percentage
value = Math.round((value - min) / percent);
// bar.style.right = value + "%";
bar.style.width = value + "%";
element.setAttribute("aria-valuemin", min);
element.setAttribute("aria-valuemax", max);
bar.appendChild(handle);
handle.addEventListener("mousedown", function (e) {
mouseDrag = e.screenX;
mouseDragWidth = bar.offsetWidth;
});
handle.addEventListener("mouseover", function () {
handle.style.cursor = "ew-resize";
});
element.addEventListener("mousemove", function (e) {
if (mouseDrag) {
bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px";
}
});
element.addEventListener("mouseup", function (e) {
if (mouseDrag) {
e.stopPropagation();
e.stopImmediatePropagation();
mouseDrag = false;
mouseDragWidth = false;
updateValue();
}
});
//allow key based navigation
element.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 39:
//right arrow
e.preventDefault();
bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px";
break;
case 37:
//left arrow
e.preventDefault();
bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px";
break;
case 9: //tab
case 13:
//enter
updateValue();
break;
case 27:
//escape
cancel();
break;
}
});
element.addEventListener("blur", function () {
cancel();
});
return bar;
},
//checkbox
tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {
var value = cell.getValue(),
input = document.createElement("input"),
tristate = editorParams.tristate,
indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue,
indetermState = false;
input.setAttribute("type", "checkbox");
input.style.marginTop = "5px";
input.style.boxSizing = "border-box";
if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") {
for (var key in editorParams.elementAttributes) {
if (key.charAt(0) == "+") {
key = key.slice(1);
input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]);
} else {
input.setAttribute(key, editorParams.elementAttributes[key]);
}
}
}
input.value = value;
if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) {
indetermState = true;
input.indeterminate = true;
}
if (this.table.browser != "firefox") {
//prevent blur issue on mac firefox
onRendered(function () {
input.focus({ preventScroll: true });
});
}
input.checked = value === true || value === "true" || value === "True" || value === 1;
onRendered(function () {
input.focus();
});
function setValue(blur) {
if (tristate) {
if (!blur) {
if (input.checked && !indetermState) {
input.checked = false;
input.indeterminate = true;
indetermState = true;
return indetermValue;
} else {
indetermState = false;
return input.checked;
}
} else {
if (indetermState) {
return indetermValue;
} else {
return input.checked;
}
}
} else {
return input.checked;
}
}
//submit new value on blur
input.addEventListener("change", function (e) {
success(setValue());
});
input.addEventListener("blur", function (e) {
success(setValue(true));
});
//submit new value on enter
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
success(setValue());
}
if (e.keyCode == 27) {
cancel();
}
});
return input;
}
};
Tabulator.prototype.registerModule("edit", Edit);