📄 list1.1.js
字号:
function SigmaListRow(list,id){
this.value = list.getRowDataObjById(id);
this.cells = new Object();
this.grid = list;
this.id = id;
var oThis = this;
var columns = list.columns;
for(var i=0;i<columns.length;i++){
var column = columns[i];
var cell = new SigmaListCell(oThis,column);
this.cells[column.name] = cell;
}
this.getElement = function(){
var rows = list.getElement().all("dataTable").rows;
for(var i=0;i<rows.length;i++){
var row = rows[i];
if(row.l_r_id == oThis.id){
return row;
}
}
return null;
}
this.setSelected = function(s){
var e = oThis.getElement();
if(e!=null){
if(s==true){
e.className = "selected";
}else{
e.className = "";
}
}
var selected = oThis.grid.selectedIds;
if(s==true){
var element = oThis.getElement();
if(element!=null){
var input = element.all("auto_radio");
if(input==null){
input = element.all("auto_check");
}
if(input!=null){
input.checked = true;
}
}
if(selected.contains(oThis.id)){
}else{
selected[selected.length] = oThis.id;
}
}else{
selected.remove(oThis.id);
}
oThis.grid.onSelect();
}
}
function SigmaListCell(row,column){
this.grid = row.grid;
this.column = column;
this.row = row;
var oThis = this;
this.getValue = function(){
return oThis.grid.getPropertyOfObj(oThis.row.value,oThis.column.name);
}
}
function SigmaList (){
this.columns = null;
this.data = [];
this.dataIndexer = null;
this.context = null;
this.element = document.createElement("div");
this.element.className = "SigmaList";
this.element.style.height = "100%";
this.element.style.overflow = "auto";
this.columnHeaders = new Object();
this.rowHeight = 20;
this.headerHeight = 20;
this.selectedIds = new Array();
this.from = 0;
SigmaObject.call(this);
var idSequence = this.getId()*60000;
this.getNextRowId = function(){
idSequence ++;
return idSequence;
}
this.destroy = function(){
delete oThis.data;
oThis.data.removeAll();
}
this.rows = new Object();
this.getRowDataObjById = function(id){
if(oThis.dataIndexer == null){
oThis.dataIndexer = new Object();
for(var i=0;i<oThis.data.length;i++){
var rowData = oThis.data[i];
oThis.dataIndexer[rowData.l_r_id] = rowData;
}
}
return oThis.dataIndexer[id];
}
this.getSelectedRows = function(){
var r = new Array();
for(var i=0;i<oThis.selectedIds.length;i++){
var row = oThis.getRow(oThis.selectedIds[i]);
r[r.length] = row;
}
return r;
}
this.getValueOfSelectedRows = function(){
var rows = oThis.getSelectedRows();
var array = new Array();
for(var i=0;i<rows.length;i++){
array[i] = rows[i].value;
}
return array;
}
var sb = [];
sb[sb.length] = '<div id="headerArea" style="border:0;overflow:hidden;position:relative;height:20;width:100%;"> ';
sb[sb.length] = '<table id="headTable" cellspacing=0 cellpadding=0 border=0 style="z-index:-1;table-layout:fixed;position:relative;"></table>';
sb[sb.length] = '</div>';
sb[sb.length] = '</div>';
sb[sb.length] = '<div id="listBox" class="listBox" style="width:99%;overflow:auto;">';
sb[sb.length] = '<div id="listArea" style="z-index:1;height:2;">';
sb[sb.length] = '</div>';
sb[sb.length] = '</div>';
this.element.innerHTML = sb.join("");
this.headTable = this.element.all("headTable");
this.sTop = 0;
this.element.all("listBox").onscroll = function(){
if(this.scrollTop==oThis.sTop){
oThis.headTable.style.left = - this.scrollLeft;
}else{
oThis.sTop = this.scrollTop;
var from = this.scrollTop/oThis.rowHeight;
var y = this.scrollTop % oThis.rowHeight
if(y>0){
from++;
}
var s = (""+from).split(".");
from = parseInt(s[0]);
oThis.paintCurrentRows(from);
oThis.element.all("dataTable").style.top = this.scrollTop;
}
}
this.getElement = function(){
return this.element;
}
var oThis = this;
this.setContext = function(context){
oThis.context = context;
}
this.resize = function(){
var hArea = oThis.element.all("headerArea");
oThis.headerHeight = oThis.getHeadDepth() * oThis.rowHeight;
hArea.style.height = oThis.headerHeight;
var box = oThis.element.all("listBox");
box.style.height = oThis.element.offsetHeight - oThis.headerHeight-2;
box.style.width = oThis.element.offsetWidth -2;
var area = oThis.element.all("listArea");
area.style.width = oThis.element.all("headTable").offsetWidth -2;
}
this.resizeArea = function(){
var area = oThis.element.all("listArea");
var h = 0;
h = oThis.data.length * oThis.rowHeight;
if(h==0)
h=1;
if(oThis.context.sum!=null && oThis.context.sum.length>0){
area.style.height = h + oThis.rowHeight;
}else{
area.style.height = h;
}
}
this.headDepth = 0;
this.getHeadDepth = function(){
if(oThis.headDepth == 0 ){
var max = 0;
for(var i=0;i<oThis.columns.length;i++){
var column = oThis.columns[i];
var cDepth = oThis.calcColDepth(column,1);
if(cDepth>max){
max = cDepth;
}
}
oThis.headDepth = max;
}
return oThis.headDepth;
}
this.calcColDepth = function(column,currentDepth){
if(column.children!=null && column.children.length>0){
var max = currentDepth;
for(var i=0;i<column.children.length;i++){
var child = column.children[i];
var cDepth = oThis.calcColDepth(child,currentDepth+1);
if(cDepth>max){
max = cDepth;
}
}
column.colSpan = column.children.length;
column.depth = currentDepth;
return max;
}else{
column.colSpan = 1;
column.depth = currentDepth;
return currentDepth;
}
}
this.getOrderedColumns = function(){
return oThis.columns;
}
this.bindHeader = function(columns){
this.headDepth = 0;
oThis.columnHeaders = new Array();
oThis.element.style.width = oThis.element.offsetWidth;
this.columns = columns;
var rows = [];
var depth = oThis.getHeadDepth();
var colGroup = document.createElement("colgroup");
colGroup.id = "colgroup_"+oThis.getId();
for(var i=0;i<depth;i++){
var row = this.headTable.insertRow();
rows[i] = row;
}
var start = 0;
if(oThis.context.checkBox){
var cell = rows[0].insertCell(start);
cell.innerText = " ";
cell.className = "header";
cell.rowSpan = rows.length;
start++;
var col = document.createElement("col");
col.width = 40;
colGroup.appendChild(col);
}else if(oThis.context.radioBox){
var cell = rows[0].insertCell(start);
start++;
cell.className = "header";
cell.rowSpan = rows.length;
cell.innerText = " ";
var col = document.createElement("col");
col.width = 40;
colGroup.appendChild(col);
}
if(oThis.context.sequence){
var cell = rows[0].insertCell(start);
cell.innerText = "序号";
cell.className = "header";
cell.rowSpan = rows.length;
start++;
var col = document.createElement("col");
col.width = 40;
colGroup.appendChild(col);
}
var list_id = oThis.getId() ;
for(var i=0;i<oThis.columns.length;i++){
var column = oThis.columns[i];
var cell = rows[0].insertCell(start+i);
cell.column = column;
cell.className = "header";
if(column.children==null || column.children.length<1){
cell.rowSpan = rows.length;
var width =getColumnWidth(column);
oThis.columnHeaders[column.name] = cell;
var s = [];
s[s.length] = '<div id="title_'+ column.name+'" style="padding-top:3px;float:left;cursor:hand;height:100%;width:'+(width-4)+'px;" onclick="list_onSortByColumn('+list_id+',\''+column.name+'\');">'+column.caption+'</div>';
s[s.length] = '<div id="col_' + column.name + '" style="float:right;cursor:E-RESIZE;height:100%;width:3px;" onmousedown="list_startResize('+list_id+',\''+column.name+'\')"></div>';
cell.innerHTML = s.join("");
var col = document.createElement("col");
col.width = width;
col.id = "col_"+column.name;
colGroup.appendChild(col);
}else{
cell.rowSpan = 1;
cell.colSpan = column.children.length;
cell.column = column;
cell.innerHTML = column.caption;
oThis.columnHeaders[column.name] = cell;
var width =getColumnWidth(column);
for(var j=0;j<column.children.length;j++){
var cColumn = column.children[j];
cColumn.parent = column;
var cCell = rows[1].insertCell();
oThis.columnHeaders[cColumn.name] = cCell;
cCell.rowSpan = 1;
cCell.className = "header";
var width =getColumnWidth(cColumn);
cCell.column = cColumn;
var s = [];
s[s.length] = '<div id="title_'+ cColumn.name+'" style="float:left;padding:3px;cursor:hand;height:100%;width:'+(width-4)+'px;" onclick="list_onSortByColumn('+list_id+',\''+cColumn.name+'\');">'+cColumn.caption+'</div>';
s[s.length] = '<div id="col_' + cColumn.name + '" style="float:right;cursor:e-resize;width:3px;height:100%;" onmousedown="list_startResize('+list_id+',\''+cColumn.name+'\')"></div>';
cCell.innerHTML = s.join("");
var col = document.createElement("col");
col.width = width;
col.id = "col_"+cColumn.name;
colGroup.appendChild(col);
}
}
}
oThis.headTable.appendChild(colGroup);
oThis.resize();
}
this.getValue = function(){
return oThis.data;
}
this.sortByColumn = function(column){
var v= this.data;
if(column.order=="asc"){
column.order = "desc";
}else{
column.order = "asc";
}
v.sort(
function comp(r1,r2){
return oThis.compRowByColumn(r1,r2,column);
}
);
oThis.bindData(v);
oThis.element.all("listBox").scrollTop = 0;
}
this.compRowByColumn = function(row1,row2,column){
var v1 = oThis.getValueOfCell(row1,column);
var v2 = oThis.getValueOfCell(row2,column);
var r = 0;
if(column.mode=="number" || column.mode=="money"){
r = v1-v2;
}else if(column.mode=="check"){
if(v1==null) v1=false;
if(v2==null) v2=false;
if(v1==v2){
r = 0;
}else{
r = v1>v2?1:-1;
}
}else{
if(typeof(v1)=="number"){
r = v1 - v2;
}else
r = v1.localeCompare(v2);
}
if(column.order=="desc"){
return -r;
}
return r;
}
this.bindData = function(data){
sumData = null;
_list_sumrow_str = null;
oThis.data = data;
oThis.rows = new Object();
oThis.dataIndexer = null;
oThis.selectedIds = [];
for(var i=0;i<data.length;i++){
data[i].l_r_id = oThis.getNextRowId();
}
oThis.resizeArea();
var columnsNum = oThis.columns.length+1;
if(oThis.context.checkBox){
columnsNum++;
}else if(oThis.context.radioBox){
columnsNum++;
}
if(oThis.context.sequence){
columnsNum++;
}
oThis.resetScroll();
oThis.paintCurrentRows(0);
}
this.getContext = function(){
return oThis.context;
}
this.resetScroll = function(){
oThis.element.all("listBox").scrollLeft = 0;
oThis.element.all("listBox").scrollTop = 0;
}
var visibleHeight = null;
var visibleRowsAmount = null;
this.getVisibleRowsAmount = function(){
if(visibleRowsAmount==null){
var h = oThis.getVisibleHeight();
visibleRowsAmount = oThis.divide(h,oThis.rowHeight);
if(oThis.context.sum!=null && oThis.context.sum.length>0){
visibleRowsAmount-=1;
}
}
return visibleRowsAmount;
}
this.getVisibleHeight = function(){
if(visibleHeight==null){
visibleHeight = oThis.element.all("listBox").offsetHeight;
}
return visibleHeight;
}
this.divide = function(a,b){
var r = ""+a/b;
var s = r.split(".");
return parseInt(s[0]);
}
var _list_colsStr = null;
this.clearColsStr = function(){
_list_colsStr = null;
}
this.getColsStr = function(){
if(_list_colsStr==null){
var sb = [];
sb[sb.length] = '<colgroup id="data_cols_'+oThis.getId()+'">';
if(oThis.context.checkBox==true){
sb[sb.length] = '<col width="40"/>';
}else if(oThis.context.radioBox==true){
sb[sb.length] = '<col width="40" />';
}
if(oThis.context.sequence==true){
sb[sb.length] = '<col width="40"/>';
}
var cols = oThis.getLeafColumns();
for(var i=0;i<cols.length;i++){
sb[sb.length] = '<col width="' + getColumnWidth(cols[i]) + '" id="' + 'col_'+cols[i].name + '"/>';
}
sb[sb.length] = '</colgroup>';
_list_colsStr = sb.join("");
}
return _list_colsStr;
}
this.paintCurrentRows = function(from){
var listArea = oThis.element.all("listArea");
var sb = new Array();
sb[sb.length] = '<table id="dataTable" cellspacing=0 cellpadding=0 border=0 style="table-layout:fixed;position:relative;">';
sb[sb.length] = oThis.getColsStr();
var rowsAmount = oThis.getVisibleRowsAmount();
var end = from + rowsAmount;
if(end>oThis.data.length){
end = oThis.data.length;
}
this.from = from;
for(var i=from;i<end;i++){
var rowData = oThis.data[i];
rowData._index = i;
sb[sb.length] = oThis.paintRow(rowData);
}
if(oThis.data!=null && oThis.data.length>0 && oThis.context.sum!=null && oThis.context.sum.length>0){
sb[sb.length] = oThis.paintSumRow();
}
sb[sb.length] = '</table>';
listArea.innerHTML = sb.join("");
oThis.refreshStateOfSelectedRow();
}
var sumData = null;
this.getSumData = function(){
if(sumData==null){
var data = oThis.data;
var sumColumns = oThis.context.sum;
for(var i=0;i<data.length;i++){
var rowData = data[i];
for(var j=0;j<sumColumns.length;j++){
var sumCol = sumColumns[j];
if(sumCol.sumValue==null||i==0)
sumCol.sumValue = 0;
if(sumCol.exp==null)
sumCol.sumValue = sumCol.sumValue + parseFloat(oThis.getPropertyOfObj(rowData,sumCol.colName));
}
}
for(var j=0;j<sumColumns.length;j++){
var sumCol = sumColumns[j];
if(sumCol.sumValue==null||i==0)
sumCol.sumValue = 0;
if(sumCol.exp!=null){
sumCol.sumValue = eval(sumCol.exp);
}
}
sumData = sumColumns;
}
return sumData;
}
this.getColSum = function(sumRowData,colName){
var sumValue = 0;
for(var j=0;j<sumRowData.length;j++){
var sumCol = sumRowData[j];
if(sumCol.colName == colName){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -