?? sortabletable.js
字號:
this.data.push(o); // add it to the selections if selected="true" is present. if(dojo.html.getAttribute(rows[i],"selected")=="true"){ this.selected.push(o); } } }, showSelections:function(){ var body=this.domNode.getElementsByTagName("tbody")[0]; var rows=body.getElementsByTagName("tr"); var idx=0; for(var i=0; i<rows.length; i++){ if(rows[i].parentNode==body){ if(dojo.html.getAttribute(rows[i],"selected")=="true"){ rows[i].className=this.rowSelectedClass; } else { if(this.enableAlternateRows&&idx%2==1){ rows[i].className=this.rowAlternateClass; }else{ rows[i].className=""; } } idx++; } } }, render:function(bDontPreserve){ // summary // renders the table to the browser var data=[]; var body=this.domNode.getElementsByTagName("tbody")[0]; if(!bDontPreserve){ // rebuild data and selection this.parseDataFromTable(body); } // clone this.data for sorting purposes. for(var i=0; i<this.data.length; i++){ data.push(this.data[i]); } var col=this.columns[this.sortIndex]; if(!col.noSort){ var field=col.getField(); if(col.sortFunction){ var sort=col.sortFunction; }else{ var sort=function(a,b){ if (a[field]>b[field]) return 1; if (a[field]<b[field]) return -1; return 0; } } data.sort(sort); if(this.sortDirection!=0) data.reverse(); } // build the table and pop it in. while(body.childNodes.length>0) body.removeChild(body.childNodes[0]); for(var i=0; i<data.length;i++){ var row=document.createElement("tr"); dojo.html.disableSelection(row); if (data[i][this.valueField]){ row.setAttribute("value",data[i][this.valueField]); } if(this.isSelected(data[i])){ row.className=this.rowSelectedClass; row.setAttribute("selected","true"); } else { if(this.enableAlternateRows&&i%2==1){ row.className=this.rowAlternateClass; } } 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); if(this.sortIndex==j){ cell.className=this.columnSelected; } if(this.columns[j].sortType=="__markup__"){ cell.innerHTML=data[i][this.columns[j].getField()]; for(var k=0; k<cell.childNodes.length; k++){ var node=cell.childNodes[k]; if(node&&node.nodeType==dojo.html.ELEMENT_NODE){ dojo.html.disableSelection(node); } } }else{ if(this.columns[j].getType()==Date){ var format=this.defaultDateFormat; if(this.columns[j].format) format=this.columns[j].format; cell.appendChild(document.createTextNode(dojo.date.format(data[i][this.columns[j].getField()], format))); }else{ cell.appendChild(document.createTextNode(data[i][this.columns[j].getField()])); } } row.appendChild(cell); } body.appendChild(row); dojo.event.connect(row, "onclick", this, "onUISelect"); } // if minRows exist. var minRows=parseInt(this.minRows); if (!isNaN(minRows) && minRows>0 && data.length<minRows){ var mod=0; if(data.length%2==0) mod=1; var nRows=minRows-data.length; for(var i=0; i<nRows; i++){ var row=document.createElement("tr"); row.setAttribute("ignoreIfParsed","true"); if(this.enableAlternateRows&&i%2==mod){ row.className=this.rowAlternateClass; } for(var j=0;j<this.columns.length;j++){ var cell=document.createElement("td"); cell.appendChild(document.createTextNode("\u00A0")); row.appendChild(cell); } body.appendChild(row); } } }, // the following the user can override. onSelect:function(/* DomEvent */ e){ // summary // empty function for the user to attach code to, fired by onUISelect }, onUISelect:function(/* DomEvent */ e){ // summary // fired when a user selects a row var row=dojo.html.getParentByType(e.target,"tr"); var body=dojo.html.getParentByType(row,"tbody"); if(this.enableMultipleSelect){ if(e.metaKey||e.ctrlKey){ if(this.isSelected(this.getObjectFromRow(row))){ this.removeFromSelected(this.getObjectFromRow(row)); row.removeAttribute("selected"); }else{ // push onto the selection stack. this.setSelectionByRow(row); row.setAttribute("selected","true"); } }else if(e.shiftKey){ // the tricky one. We need to figure out the *last* selected row above, // and select all the rows in between. var startRow; var rows=body.getElementsByTagName("tr"); // if there's a selection above, we go with that first. for(var i=0;i<rows.length;i++){ if(rows[i].parentNode==body){ if(rows[i]==row) break; if(dojo.html.getAttribute(rows[i],"selected")=="true"){ startRow=rows[i]; } } } // if there isn't a selection above, we continue with a selection below. if(!startRow){ startRow=row; for(;i<rows.length;i++){ if(dojo.html.getAttribute(rows[i],"selected")=="true"){ row=rows[i]; break; } } } this.resetSelections(body); if(startRow==row){ // this is the only selection row.setAttribute("selected","true"); this.setSelectionByRow(row); }else{ var doSelect=false; for(var i=0; i<rows.length; i++){ if(rows[i].parentNode==body){ rows[i].removeAttribute("selected"); if(rows[i]==startRow){ doSelect=true; } if(doSelect){ this.setSelectionByRow(rows[i]); rows[i].setAttribute("selected","true"); } if(rows[i]==row){ doSelect=false; } } } } }else{ // reset the selection this.resetSelections(body); row.setAttribute("selected","true"); this.setSelectionByRow(row); } }else{ // reset the data selection and go. this.resetSelections(body); row.setAttribute("selected","true"); this.setSelectionByRow(row); } this.showSelections(); this.onSelect(e); e.stopPropagation(); e.preventDefault(); }, onHeaderClick:function(/* DomEvent */ e){ // summary // Main handler function for each header column click. 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++){ if(headers[i]==header){ if(i!=oldIndex){ // new col. this.sortIndex=i; this.sortDirection=0; headers[i].className=this.headerSortDownClass }else{ this.sortDirection=(oldDirection==0)?1:0; if(this.sortDirection==0){ headers[i].className=this.headerSortDownClass; }else{ headers[i].className=this.headerSortUpClass; } } }else{ // reset the header class. headers[i].className=this.headerClass; } } this.render(); }, postCreate:function(){ // summary // overridden from HtmlWidget, initializes and renders the widget. var thead=this.domNode.getElementsByTagName("thead")[0]; if(this.headClass.length>0){ thead.className=this.headClass; } // disable selections dojo.html.disableSelection(this.domNode); // parse the columns. this.parseColumns(thead); // attach header handlers. var header="td"; if(thead.getElementsByTagName(header).length==0) header="th"; var headers=thead.getElementsByTagName(header); for(var i=0; i<headers.length; i++){ if(!this.columns[i].noSort){ dojo.event.connect(headers[i], "onclick", this, "onHeaderClick"); } if(this.sortIndex==i){ if(this.sortDirection==0){ headers[i].className=this.headerSortDownClass; }else{ headers[i].className=this.headerSortUpClass; } } } // parse the tbody element and re-render it. var tbody=this.domNode.getElementsByTagName("tbody")[0]; if (this.tbodyClass.length>0) { tbody.className=this.tbodyClass; } this.parseDataFromTable(tbody); this.render(true); }});
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -