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 SelectRow = function SelectRow(table) {
this.table = table; //hold Tabulator object
this.selecting = false; //flag selecting in progress
this.lastClickedRow = false; //last clicked row
this.selectPrev = []; //hold previously selected element for drag drop selection
this.selectedRows = []; //hold selected rows
this.headerCheckboxElement = null; // hold header select element
};
SelectRow.prototype.clearSelectionData = function (silent) {
this.selecting = false;
this.lastClickedRow = false;
this.selectPrev = [];
this.selectedRows = [];
if (!silent) {
this._rowSelectionChanged();
}
};
SelectRow.prototype.initializeRow = function (row) {
var self = this,
element = row.getElement();
// trigger end of row selection
var endSelect = function endSelect() {
setTimeout(function () {
self.selecting = false;
}, 50);
document.body.removeEventListener("mouseup", endSelect);
};
row.modules.select = { selected: false };
//set row selection class
if (self.table.options.selectableCheck.call(this.table, row.getComponent())) {
element.classList.add("tabulator-selectable");
element.classList.remove("tabulator-unselectable");
if (self.table.options.selectable && self.table.options.selectable != "highlight") {
if (self.table.options.selectableRangeMode === "click") {
element.addEventListener("click", function (e) {
if (e.shiftKey) {
self.table._clearSelection();
self.lastClickedRow = self.lastClickedRow || row;
var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);
var rowIdx = self.table.rowManager.getDisplayRowIndex(row);
var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;
var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;
var rows = self.table.rowManager.getDisplayRows().slice(0);
var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);
if (e.ctrlKey || e.metaKey) {
toggledRows.forEach(function (toggledRow) {
if (toggledRow !== self.lastClickedRow) {
if (self.table.options.selectable !== true && !self.isRowSelected(row)) {
if (self.selectedRows.length < self.table.options.selectable) {
self.toggleRow(toggledRow);
}
} else {
self.toggleRow(toggledRow);
}
}
});
self.lastClickedRow = row;
} else {
self.deselectRows(undefined, true);
if (self.table.options.selectable !== true) {
if (toggledRows.length > self.table.options.selectable) {
toggledRows = toggledRows.slice(0, self.table.options.selectable);
}
}
self.selectRows(toggledRows);
}
self.table._clearSelection();
} else if (e.ctrlKey || e.metaKey) {
self.toggleRow(row);
self.lastClickedRow = row;
} else {
self.deselectRows(undefined, true);
self.selectRows(row);
self.lastClickedRow = row;
}
});
} else {
element.addEventListener("click", function (e) {
if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) {
self.table._clearSelection();
}
if (!self.selecting) {
self.toggleRow(row);
}
});
element.addEventListener("mousedown", function (e) {
if (e.shiftKey) {
self.table._clearSelection();
self.selecting = true;
self.selectPrev = [];
document.body.addEventListener("mouseup", endSelect);
document.body.addEventListener("keyup", endSelect);
self.toggleRow(row);
return false;
}
});
element.addEventListener("mouseenter", function (e) {
if (self.selecting) {
self.table._clearSelection();
self.toggleRow(row);
if (self.selectPrev[1] == row) {
self.toggleRow(self.selectPrev[0]);
}
}
});
element.addEventListener("mouseout", function (e) {
if (self.selecting) {
self.table._clearSelection();
self.selectPrev.unshift(row);
}
});
}
}
} else {
element.classList.add("tabulator-unselectable");
element.classList.remove("tabulator-selectable");
}
};
//toggle row selection
SelectRow.prototype.toggleRow = function (row) {
if (this.table.options.selectableCheck.call(this.table, row.getComponent())) {
if (row.modules.select && row.modules.select.selected) {
this._deselectRow(row);
} else {
this._selectRow(row);
}
}
};
//select a number of rows
SelectRow.prototype.selectRows = function (rows) {
var _this = this;
var rowMatch;
switch (typeof rows === "undefined" ? "undefined" : _typeof(rows)) {
case "undefined":
this.table.rowManager.rows.forEach(function (row) {
_this._selectRow(row, true, true);
});
this._rowSelectionChanged();
break;
case "string":
rowMatch = this.table.rowManager.findRow(rows);
if (rowMatch) {
this._selectRow(rowMatch, true, true);
} else {
this.table.rowManager.getRows(rows).forEach(function (row) {
_this._selectRow(row, true, true);
});
}
this._rowSelectionChanged();
break;
default:
if (Array.isArray(rows)) {
rows.forEach(function (row) {
_this._selectRow(row, true, true);
});
this._rowSelectionChanged();
} else {
this._selectRow(rows, false, true);
}
break;
}
};
//select an individual row
SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
var index;
//handle max row count
if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {
if (this.selectedRows.length >= this.table.options.selectable) {
if (this.table.options.selectableRollingSelection) {
this._deselectRow(this.selectedRows[0]);
} else {
return false;
}
}
}
var row = this.table.rowManager.findRow(rowInfo);
if (row) {
if (this.selectedRows.indexOf(row) == -1) {
row.getElement().classList.add("tabulator-selected");
if (!row.modules.select) {
row.modules.select = {};
}
row.modules.select.selected = true;
if (row.modules.select.checkboxEl) {
row.modules.select.checkboxEl.checked = true;
}
this.selectedRows.push(row);
if (this.table.options.dataTreeSelectPropagate) {
this.childRowSelection(row, true);
}
if (!silent) {
this.table.options.rowSelected.call(this.table, row.getComponent());
}
this._rowSelectionChanged(silent);
}
} else {
if (!silent) {
console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo);
}
}
};
SelectRow.prototype.isRowSelected = function (row) {
return this.selectedRows.indexOf(row) !== -1;
};
//deselect a number of rows
SelectRow.prototype.deselectRows = function (rows, silent) {
var self = this,
rowCount;
if (typeof rows == "undefined") {
rowCount = self.selectedRows.length;
for (var i = 0; i < rowCount; i++) {
self._deselectRow(self.selectedRows[0], true);
}
self._rowSelectionChanged(silent);
} else {
if (Array.isArray(rows)) {
rows.forEach(function (row) {
self._deselectRow(row, true);
});
self._rowSelectionChanged(silent);
} else {
self._deselectRow(rows, silent);
}
}
};
//deselect an individual row
SelectRow.prototype._deselectRow = function (rowInfo, silent) {
var self = this,
row = self.table.rowManager.findRow(rowInfo),
index;
if (row) {
index = self.selectedRows.findIndex(function (selectedRow) {
return selectedRow == row;
});
if (index > -1) {
row.getElement().classList.remove("tabulator-selected");
if (!row.modules.select) {
row.modules.select = {};
}
row.modules.select.selected = false;
if (row.modules.select.checkboxEl) {
row.modules.select.checkboxEl.checked = false;
}
self.selectedRows.splice(index, 1);
if (this.table.options.dataTreeSelectPropagate) {
this.childRowSelection(row, false);
}
if (!silent) {
self.table.options.rowDeselected.call(this.table, row.getComponent());
}
self._rowSelectionChanged(silent);
}
} else {
if (!silent) {
console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo);
}
}
};
SelectRow.prototype.getSelectedData = function () {
var data = [];
this.selectedRows.forEach(function (row) {
data.push(row.getData());
});
return data;
};
SelectRow.prototype.getSelectedRows = function () {
var rows = [];
this.selectedRows.forEach(function (row) {
rows.push(row.getComponent());
});
return rows;
};
SelectRow.prototype._rowSelectionChanged = function (silent) {
if (this.headerCheckboxElement) {
if (this.selectedRows.length === 0) {
this.headerCheckboxElement.checked = false;
this.headerCheckboxElement.indeterminate = false;
} else if (this.table.rowManager.rows.length === this.selectedRows.length) {
this.headerCheckboxElement.checked = true;
this.headerCheckboxElement.indeterminate = false;
} else {
this.headerCheckboxElement.indeterminate = true;
this.headerCheckboxElement.checked = false;
}
}
if (!silent) {
this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());
}
};
SelectRow.prototype.registerRowSelectCheckbox = function (row, element) {
if (!row._row.modules.select) {
row._row.modules.select = {};
}
row._row.modules.select.checkboxEl = element;
};
SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
this.headerCheckboxElement = element;
};
SelectRow.prototype.childRowSelection = function (row, select) {
var children = this.table.modules.dataTree.getChildren(row, true);
if (select) {
for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var child = _ref;
this._selectRow(child, true);
}
} else {
for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var _child = _ref2;
this._deselectRow(_child, true);
}
}
};
Tabulator.prototype.registerModule("selectRow", SelectRow);