📄 filteringtable.js
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -