📄 filteringtable.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.FilteringTable");dojo.require("dojo.date.format");dojo.require("dojo.math");dojo.require("dojo.collections.Store");dojo.require("dojo.html.*");dojo.require("dojo.html.util");dojo.require("dojo.html.style");dojo.require("dojo.html.selection");dojo.require("dojo.event.*");dojo.require("dojo.widget.*");dojo.require("dojo.widget.HtmlWidget");dojo.widget.defineWidget("dojo.widget.FilteringTable", dojo.widget.HtmlWidget, function () { this.store = new dojo.collections.Store(); this.valueField = "Id"; this.multiple = false; this.maxSelect = 0; this.maxSortable = 1; this.minRows = 0; this.defaultDateFormat = "%D"; this.isInitialized = false; this.alternateRows = false; this.columns = []; this.sortInformation = [{index:0, direction:0}]; this.headClass = ""; this.tbodyClass = ""; this.headerClass = ""; this.headerUpClass = "selectedUp"; this.headerDownClass = "selectedDown"; this.rowClass = ""; this.rowAlternateClass = "alt"; this.rowSelectedClass = "selected"; this.columnSelected = "sorted-column";}, {isContainer:false, templatePath:null, templateCssPath:null, getTypeFromString:function (s) { var parts = s.split("."), i = 0, obj = dj_global; do { obj = obj[parts[i++]]; } while (i < parts.length && obj); return (obj != dj_global) ? obj : null;}, getByRow:function (row) { return this.store.getByKey(dojo.html.getAttribute(row, "value"));}, getDataByRow:function (row) { return this.store.getDataByKey(dojo.html.getAttribute(row, "value"));}, getRow:function (obj) { var rows = this.domNode.tBodies[0].rows; for (var i = 0; i < rows.length; i++) { if (this.store.getDataByKey(dojo.html.getAttribute(rows[i], "value")) == obj) { return rows[i]; } } return null;}, getColumnIndex:function (fieldPath) { for (var i = 0; i < this.columns.length; i++) { if (this.columns[i].getField() == fieldPath) { return i; } } return -1;}, getSelectedData:function () { var data = this.store.get(); var a = []; for (var i = 0; i < data.length; i++) { if (data[i].isSelected) { a.push(data[i].src); } } if (this.multiple) { return a; } else { return a[0]; }}, isSelected:function (obj) { var data = this.store.get(); for (var i = 0; i < data.length; i++) { if (data[i].src == obj) { return true; } } return false;}, isValueSelected:function (val) { var v = this.store.getByKey(val); if (v) { return v.isSelected; } return false;}, isIndexSelected:function (idx) { var v = this.store.getByIndex(idx); if (v) { return v.isSelected; } return false;}, isRowSelected:function (row) { var v = this.getByRow(row); if (v) { return v.isSelected; } return false;}, reset:function () { this.store.clearData(); this.columns = []; this.sortInformation = [{index:0, direction:0}]; this.resetSelections(); this.isInitialized = false; this.onReset();}, resetSelections:function () { this.store.forEach(function (element) { element.isSelected = false; });}, onReset:function () {}, select:function (obj) { var data = this.store.get(); for (var i = 0; i < data.length; i++) { if (data[i].src == obj) { data[i].isSelected = true; break; } } this.onDataSelect(obj);}, selectByValue:function (val) { this.select(this.store.getDataByKey(val));}, selectByIndex:function (idx) { this.select(this.store.getDataByIndex(idx));}, selectByRow:function (row) { this.select(this.getDataByRow(row));}, selectAll:function () { this.store.forEach(function (element) { element.isSelected = true; });}, onDataSelect:function (obj) {}, toggleSelection:function (obj) { var data = this.store.get(); for (var i = 0; i < data.length; i++) { if (data[i].src == obj) { data[i].isSelected = !data[i].isSelected; break; } } this.onDataToggle(obj);}, toggleSelectionByValue:function (val) { this.toggleSelection(this.store.getDataByKey(val));}, toggleSelectionByIndex:function (idx) { this.toggleSelection(this.store.getDataByIndex(idx));}, toggleSelectionByRow:function (row) { this.toggleSelection(this.getDataByRow(row));}, toggleAll:function () { this.store.forEach(function (element) { element.isSelected = !element.isSelected; });}, onDataToggle:function (obj) {}, _meta:{field:null, format:null, filterer:null, noSort:false, sortType:"String", dataType:String, sortFunction:null, filterFunction:null, label:null, align:"left", valign:"middle", getField:function () { return this.field || this.label;}, getType:function () { return this.dataType;}}, createMetaData:function (obj) { for (var p in this._meta) { if (!obj[p]) { obj[p] = this._meta[p]; } } if (!obj.label) { obj.label = obj.field; } if (!obj.filterFunction) { obj.filterFunction = this._defaultFilter; } return obj;}, parseMetadata:function (head) { this.columns = []; this.sortInformation = []; var row = head.getElementsByTagName("tr")[0]; var cells = row.getElementsByTagName("td"); if (cells.length == 0) { cells = row.getElementsByTagName("th"); } for (var i = 0; i < cells.length; i++) { var o = this.createMetaData({}); if (dojo.html.hasAttribute(cells[i], "align")) { o.align = dojo.html.getAttribute(cells[i], "align"); } if (dojo.html.hasAttribute(cells[i], "valign")) { o.valign = dojo.html.getAttribute(cells[i], "valign"); } if (dojo.html.hasAttribute(cells[i], "nosort")) { o.noSort = (dojo.html.getAttribute(cells[i], "nosort") == "true"); } if (dojo.html.hasAttribute(cells[i], "sortusing")) { var trans = dojo.html.getAttribute(cells[i], "sortusing"); var f = this.getTypeFromString(trans); if (f != null && f != window && typeof (f) == "function") { o.sortFunction = f; } } o.label = dojo.html.renderedTextContent(cells[i]); if (dojo.html.hasAttribute(cells[i], "field")) { o.field = dojo.html.getAttribute(cells[i], "field"); } else { if (o.label.length > 0) { o.field = o.label; } else { o.field = "field" + i; } } if (dojo.html.hasAttribute(cells[i], "format")) { o.format = dojo.html.getAttribute(cells[i], "format"); } if (dojo.html.hasAttribute(cells[i], "dataType")) { var sortType = dojo.html.getAttribute(cells[i], "dataType"); if (sortType.toLowerCase() == "html" || sortType.toLowerCase() == "markup") { o.sortType = "__markup__"; } else { var type = this.getTypeFromString(sortType); if (type) { o.sortType = sortType; o.dataType = type; } } } if (dojo.html.hasAttribute(cells[i], "filterusing")) { var trans = dojo.html.getAttribute(cells[i], "filterusing"); var f = this.getTypeFromString(trans); if (f != null && f != window && typeof (f) == "function") { o.filterFunction = f; } } this.columns.push(o); if (dojo.html.hasAttribute(cells[i], "sort")) { var info = {index:i, direction:0}; var dir = dojo.html.getAttribute(cells[i], "sort"); if (!isNaN(parseInt(dir))) { dir = parseInt(dir); info.direction = (dir != 0) ? 1 : 0; } else { info.direction = (dir.toLowerCase() == "desc") ? 1 : 0; } this.sortInformation.push(info); } } if (this.sortInformation.length == 0) { this.sortInformation.push({index:0, direction:0}); } else { if (this.sortInformation.length > this.maxSortable) { this.sortInformation.length = this.maxSortable; } }}, parseData:function (body) { if (body.rows.length == 0 && this.columns.length == 0) { return; } var self = this; this["__selected__"] = []; var arr = this.store.getFromHtml(this.columns, body, function (obj, row) { if (typeof (obj[self.valueField]) == "undefined" || obj[self.valueField] == null) { obj[self.valueField] = dojo.html.getAttribute(row, "value"); } if (dojo.html.getAttribute(row, "selected") == "true") { self["__selected__"].push(obj); } }); this.store.setData(arr, true); this.render(); for (var i = 0; i < this["__selected__"].length; i++) { this.select(this["__selected__"][i]); } this.renderSelections(); delete this["__selected__"]; this.isInitialized = true;}, onSelect:function (e) { var row = dojo.html.getParentByType(e.target, "tr"); if (dojo.html.hasAttribute(row, "emptyRow")) { return; } var body = dojo.html.getParentByType(row, "tbody"); if (this.multiple) { if (e.shiftKey) { var startRow; var rows = body.rows; for (var i = 0; i < rows.length; i++) { if (rows[i] == row) { break; } if (this.isRowSelected(rows[i])) { startRow = rows[i]; } } if (!startRow) { startRow = row; for (; i < rows.length; i++) { if (this.isRowSelected(rows[i])) { row = rows[i]; break; } } } this.resetSelections(); if (startRow == row) { this.toggleSelectionByRow(row); } else { var doSelect = false; for (var i = 0; i < rows.length; i++) { if (rows[i] == startRow) { doSelect = true; } if (doSelect) { this.selectByRow(rows[i]); } if (rows[i] == row) { doSelect = false; } } } } else { this.toggleSelectionByRow(row); } } else { this.resetSelections(); this.toggleSelectionByRow(row); } this.renderSelections();}, onSort:function (e) { var oldIndex = this.sortIndex; var oldDirection = this.sortDirection; var source = e.target; var row = dojo.html.getParentByType(source, "tr"); var cellTag = "td"; if (row.getElementsByTagName(cellTag).length == 0) { cellTag = "th"; } var headers = row.getElementsByTagName(cellTag); var header = dojo.html.getParentByType(source, cellTag); for (var i = 0; i < headers.length; i++) { dojo.html.setClass(headers[i], this.headerClass); if (headers[i] == header) { if (this.sortInformation[0].index != i) { this.sortInformation.unshift({index:i, direction:0}); } else { this.sortInformation[0] = {index:i, direction:(~this.sortInformation[0].direction) & 1}; } } } this.sortInformation.length = Math.min(this.sortInformation.length, this.maxSortable); 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); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -