filteringtable.js
来自「Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是」· JavaScript 代码 · 共 711 行 · 第 1/2 页
JS
711 行
this.render();
}, onFilter:function () {
}, _defaultFilter:function (obj) {
return true;
}, setFilter:function (field, fn) {
for (var i = 0; i < this.columns.length; i++) {
if (this.columns[i].getField() == field) {
this.columns[i].filterFunction = fn;
break;
}
}
this.applyFilters();
}, setFilterByIndex:function (idx, fn) {
this.columns[idx].filterFunction = fn;
this.applyFilters();
}, clearFilter:function (field) {
for (var i = 0; i < this.columns.length; i++) {
if (this.columns[i].getField() == field) {
this.columns[i].filterFunction = this._defaultFilter;
break;
}
}
this.applyFilters();
}, clearFilterByIndex:function (idx) {
this.columns[idx].filterFunction = this._defaultFilter;
this.applyFilters();
}, clearFilters:function () {
for (var i = 0; i < this.columns.length; i++) {
this.columns[i].filterFunction = this._defaultFilter;
}
var rows = this.domNode.tBodies[0].rows;
for (var i = 0; i < rows.length; i++) {
rows[i].style.display = "";
if (this.alternateRows) {
dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](rows[i], this.rowAlternateClass);
}
}
this.onFilter();
}, applyFilters:function () {
var alt = 0;
var rows = this.domNode.tBodies[0].rows;
for (var i = 0; i < rows.length; i++) {
var b = true;
var row = rows[i];
for (var j = 0; j < this.columns.length; j++) {
var value = this.store.getField(this.getDataByRow(row), this.columns[j].getField());
if (this.columns[j].getType() == Date && value != null && !value.getYear) {
value = new Date(value);
}
if (!this.columns[j].filterFunction(value)) {
b = false;
break;
}
}
row.style.display = (b ? "" : "none");
if (b && this.alternateRows) {
dojo.html[((alt++ % 2 == 1) ? "addClass" : "removeClass")](row, this.rowAlternateClass);
}
}
this.onFilter();
}, createSorter:function (info) {
var self = this;
var sortFunctions = [];
function createSortFunction(fieldIndex, dir) {
var meta = self.columns[fieldIndex];
var field = meta.getField();
return function (rowA, rowB) {
if (dojo.html.hasAttribute(rowA, "emptyRow")) {
return 1;
}
if (dojo.html.hasAttribute(rowB, "emptyRow")) {
return -1;
}
var a = self.store.getField(self.getDataByRow(rowA), field);
var b = self.store.getField(self.getDataByRow(rowB), field);
var ret = 0;
if (a > b) {
ret = 1;
}
if (a < b) {
ret = -1;
}
return dir * ret;
};
}
var current = 0;
var max = Math.min(info.length, this.maxSortable, this.columns.length);
while (current < max) {
var direction = (info[current].direction == 0) ? 1 : -1;
sortFunctions.push(createSortFunction(info[current].index, direction));
current++;
}
return function (rowA, rowB) {
var idx = 0;
while (idx < sortFunctions.length) {
var ret = sortFunctions[idx++](rowA, rowB);
if (ret != 0) {
return ret;
}
}
return 0;
};
}, createRow:function (obj) {
var row = document.createElement("tr");
dojo.html.disableSelection(row);
if (obj.key != null) {
row.setAttribute("value", obj.key);
}
for (var j = 0; j < this.columns.length; j++) {
var cell = document.createElement("td");
cell.setAttribute("align", this.columns[j].align);
cell.setAttribute("valign", this.columns[j].valign);
dojo.html.disableSelection(cell);
var val = this.store.getField(obj.src, this.columns[j].getField());
if (typeof (val) == "undefined") {
val = "";
}
this.fillCell(cell, this.columns[j], val);
row.appendChild(cell);
}
return row;
}, fillCell:function (cell, meta, val) {
if (meta.sortType == "__markup__") {
cell.innerHTML = val;
} else {
if (meta.getType() == Date) {
val = new Date(val);
if (!isNaN(val)) {
var format = this.defaultDateFormat;
if (meta.format) {
format = meta.format;
}
cell.innerHTML = dojo.date.strftime(val, format);
} else {
cell.innerHTML = val;
}
} else {
if ("Number number int Integer float Float".indexOf(meta.getType()) > -1) {
if (val.length == 0) {
val = "0";
}
var n = parseFloat(val, 10) + "";
if (n.indexOf(".") > -1) {
n = dojo.math.round(parseFloat(val, 10), 2);
}
cell.innerHTML = n;
} else {
cell.innerHTML = val;
}
}
}
}, prefill:function () {
this.isInitialized = false;
var body = this.domNode.tBodies[0];
while (body.childNodes.length > 0) {
body.removeChild(body.childNodes[0]);
}
if (this.minRows > 0) {
for (var i = 0; i < this.minRows; i++) {
var row = document.createElement("tr");
if (this.alternateRows) {
dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](row, this.rowAlternateClass);
}
row.setAttribute("emptyRow", "true");
for (var j = 0; j < this.columns.length; j++) {
var cell = document.createElement("td");
cell.innerHTML = " ";
row.appendChild(cell);
}
body.appendChild(row);
}
}
}, init:function () {
this.isInitialized = false;
var head = this.domNode.getElementsByTagName("thead")[0];
if (head.getElementsByTagName("tr").length == 0) {
var row = document.createElement("tr");
for (var i = 0; i < this.columns.length; i++) {
var cell = document.createElement("td");
cell.setAttribute("align", this.columns[i].align);
cell.setAttribute("valign", this.columns[i].valign);
dojo.html.disableSelection(cell);
cell.innerHTML = this.columns[i].label;
row.appendChild(cell);
if (!this.columns[i].noSort) {
dojo.event.connect(cell, "onclick", this, "onSort");
}
}
dojo.html.prependChild(row, head);
}
if (this.store.get().length == 0) {
return false;
}
var idx = this.domNode.tBodies[0].rows.length;
if (!idx || idx == 0 || this.domNode.tBodies[0].rows[0].getAttribute("emptyRow") == "true") {
idx = 0;
var body = this.domNode.tBodies[0];
while (body.childNodes.length > 0) {
body.removeChild(body.childNodes[0]);
}
var data = this.store.get();
for (var i = 0; i < data.length; i++) {
var row = this.createRow(data[i]);
body.appendChild(row);
idx++;
}
}
if (this.minRows > 0 && idx < this.minRows) {
idx = this.minRows - idx;
for (var i = 0; i < idx; i++) {
row = document.createElement("tr");
row.setAttribute("emptyRow", "true");
for (var j = 0; j < this.columns.length; j++) {
cell = document.createElement("td");
cell.innerHTML = " ";
row.appendChild(cell);
}
body.appendChild(row);
}
}
var row = this.domNode.getElementsByTagName("thead")[0].rows[0];
var cellTag = "td";
if (row.getElementsByTagName(cellTag).length == 0) {
cellTag = "th";
}
var headers = row.getElementsByTagName(cellTag);
for (var i = 0; i < headers.length; i++) {
dojo.html.setClass(headers[i], this.headerClass);
}
for (var i = 0; i < this.sortInformation.length; i++) {
var idx = this.sortInformation[i].index;
var dir = (~this.sortInformation[i].direction) & 1;
dojo.html.setClass(headers[idx], dir == 0 ? this.headerDownClass : this.headerUpClass);
}
this.isInitialized = true;
return this.isInitialized;
}, render:function () {
if (!this.isInitialized) {
var b = this.init();
if (!b) {
this.prefill();
return;
}
}
var rows = [];
var body = this.domNode.tBodies[0];
var emptyRowIdx = -1;
for (var i = 0; i < body.rows.length; i++) {
rows.push(body.rows[i]);
}
var sortFunction = this.createSorter(this.sortInformation);
if (sortFunction) {
rows.sort(sortFunction);
}
for (var i = 0; i < rows.length; i++) {
if (this.alternateRows) {
dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](rows[i], this.rowAlternateClass);
}
dojo.html[(this.isRowSelected(body.rows[i]) ? "addClass" : "removeClass")](body.rows[i], this.rowSelectedClass);
body.appendChild(rows[i]);
}
}, renderSelections:function () {
var body = this.domNode.tBodies[0];
for (var i = 0; i < body.rows.length; i++) {
dojo.html[(this.isRowSelected(body.rows[i]) ? "addClass" : "removeClass")](body.rows[i], this.rowSelectedClass);
}
}, initialize:function () {
var self = this;
dojo.event.connect(this.store, "onSetData", function () {
self.store.forEach(function (element) {
element.isSelected = false;
});
self.isInitialized = false;
var body = self.domNode.tBodies[0];
if (body) {
while (body.childNodes.length > 0) {
body.removeChild(body.childNodes[0]);
}
}
self.render();
});
dojo.event.connect(this.store, "onClearData", function () {
self.isInitialized = false;
self.render();
});
dojo.event.connect(this.store, "onAddData", function (addedObject) {
var row = self.createRow(addedObject);
self.domNode.tBodies[0].appendChild(row);
self.render();
});
dojo.event.connect(this.store, "onAddDataRange", function (arr) {
for (var i = 0; i < arr.length; i++) {
arr[i].isSelected = false;
var row = self.createRow(arr[i]);
self.domNode.tBodies[0].appendChild(row);
}
self.render();
});
dojo.event.connect(this.store, "onRemoveData", function (removedObject) {
var rows = self.domNode.tBodies[0].rows;
for (var i = 0; i < rows.length; i++) {
if (self.getDataByRow(rows[i]) == removedObject.src) {
rows[i].parentNode.removeChild(rows[i]);
break;
}
}
self.render();
});
dojo.event.connect(this.store, "onUpdateField", function (obj, fieldPath, val) {
var row = self.getRow(obj);
var idx = self.getColumnIndex(fieldPath);
if (row && row.cells[idx] && self.columns[idx]) {
self.fillCell(row.cells[idx], self.columns[idx], val);
}
});
}, postCreate:function () {
this.store.keyField = this.valueField;
if (this.domNode) {
if (this.domNode.nodeName.toLowerCase() != "table") {
}
if (this.domNode.getElementsByTagName("thead")[0]) {
var head = this.domNode.getElementsByTagName("thead")[0];
if (this.headClass.length > 0) {
head.className = this.headClass;
}
dojo.html.disableSelection(this.domNode);
this.parseMetadata(head);
var header = "td";
if (head.getElementsByTagName(header).length == 0) {
header = "th";
}
var headers = head.getElementsByTagName(header);
for (var i = 0; i < headers.length; i++) {
if (!this.columns[i].noSort) {
dojo.event.connect(headers[i], "onclick", this, "onSort");
}
}
} else {
this.domNode.appendChild(document.createElement("thead"));
}
if (this.domNode.tBodies.length < 1) {
var body = document.createElement("tbody");
this.domNode.appendChild(body);
} else {
var body = this.domNode.tBodies[0];
}
if (this.tbodyClass.length > 0) {
body.className = this.tbodyClass;
}
dojo.event.connect(body, "onclick", this, "onSelect");
this.parseData(body);
}
}});
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?