/* Product Name: dhtmlxSuite Version: 4.0.3 Edition: Professional License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com Copyright UAB Dinamenta http://www.dhtmlx.com */ /* Limitation: a) Width of column in px b) Grid not autoresizable c) Initialize grid in visible state */ dhtmlXGridObject.prototype._init_point_bspl=dhtmlXGridObject.prototype._init_point; dhtmlXGridObject.prototype._init_point = function(){ if (this._split_later) this.splitAt(this._split_later); this._init_point=this._init_point_bspl; if (this._init_point) this._init_point(); } /** * @desc: split grid in two parts, with separate scrolling * @param: ind - index of column to split after * @edition: Professional * @type: public$ */ dhtmlXGridObject.prototype.splitAt=function(ind){ if (!this.obj.rows[0]) return this._split_later=ind; ind=parseInt(ind); var leftBox=document.createElement("DIV"); this.entBox.appendChild(leftBox); var rightBox=document.createElement("DIV"); this.entBox.appendChild(rightBox); for (var i=this.entBox.childNodes.length-3; i>=0; i--) rightBox.insertBefore(this.entBox.childNodes[i],rightBox.firstChild); this.entBox.style.position="relative"; this.globalBox=this.entBox; this.entBox=rightBox; rightBox.grid=this; leftBox.style.cssText+="border:0px solid red !important;"; rightBox.style.cssText+="border:0px solid red !important;"; rightBox.style.top="0px"; rightBox.style.position="absolute"; leftBox.style.position="absolute"; leftBox.style.top="0px"; leftBox.style.left="0px"; leftBox.style.zIndex=11; rightBox.style.height=leftBox.style.height=this.globalBox.clientHeight; this._fake=new dhtmlXGridObject(leftBox); this.globalBox=this._fake.globalBox=this.globalBox; this._fake._fake=this; this._fake._realfake=true; //copy properties this._treeC=this.cellType._dhx_find("tree"); this._fake.delim=this.delim; this._fake.customGroupFormat=this.customGroupFormat; this._fake.setImagesPath(this._imgURL); this._fake.iconURL = this.iconURL; this._fake._customSorts=this._customSorts; this._fake.noHeader=this.noHeader; this._fake._enbTts=this._enbTts; this._fake._htkebl = this._htkebl; this._fake.clists = this.clists; this._fake.fldSort=new Array(); this._fake.selMultiRows=this.selMultiRows; this._fake.multiLine=this.multiLine; if (this.multiLine || this._erspan){ this.attachEvent("onCellChanged",this._correctRowHeight); this.attachEvent("onRowAdded",this._correctRowHeight); var corrector=function(){ this.forEachRow(function(id){ this._correctRowHeight(id); }) }; this.attachEvent("onPageChanged",corrector); this.attachEvent("onXLE",corrector); this.attachEvent("onResizeEnd",corrector); if (!this._ads_count) //in case of distribute parsing - use special event instead this.attachEvent("onAfterSorting",corrector); if (this._srnd) this.attachEvent("onFilterEnd", corrector); this.attachEvent("onDistributedEnd",corrector); //this._fake.attachEvent("onCellChanged",this._correctRowHeight); } this.attachEvent("onGridReconstructed",function(){ this._fake.objBox.scrollTop = this.objBox.scrollTop; }) this._fake.loadedKidsHash=this.loadedKidsHash; if (this._h2) this._fake._h2=this._h2; this._fake._dInc=this._dInc; //collect grid configuraton var b_ha=[[],[],[],[],[],[],[]]; var b_ar=["hdrLabels","initCellWidth","cellType","cellAlign","cellVAlign","fldSort","columnColor"]; var b_fu=["setHeader","setInitWidths","setColTypes","setColAlign","setColVAlign","setColSorting","setColumnColor"]; this._fake.callEvent=function(){ var result = true; this._fake._split_event=true; var hidden = (arguments[0] == "onScroll"); if (arguments[0]=="onGridReconstructed" || hidden) this._fake.callEvent.apply(this,arguments); if (!hidden) result = this._fake.callEvent.apply(this._fake,arguments); this._fake._split_event=false; return result; } if (this._elmn) this._fake.enableLightMouseNavigation(true); if (this.__cssEven||this._cssUnEven) this._fake.attachEvent("onGridReconstructed",function(){ this._fixAlterCss(); }); this._fake._cssEven=this._cssEven; this._fake._cssUnEven=this._cssUnEven; this._fake._cssSP=this._cssSP; this._fake.isEditable=this.isEditable; this._fake._edtc=this._edtc; if (this._sst) this._fake.enableStableSorting(true); this._fake._sclE=this._sclE; this._fake._dclE=this._dclE; this._fake._f2kE=this._f2kE; this._fake._maskArr=this._maskArr; this._fake._dtmask=this._dtmask; this._fake.combos=this.combos; var width=0; var m_w=this.globalBox.offsetWidth; for (var i=0; i1){ temp_rspan[r._cellIndex]=r.rowSpan-1; frows[i-1].cells[frows[i-1]._childIndexes?frows[i-1]._childIndexes[k]:k].rowSpan=r.rowSpan; r.rowSpan=1; } } for (i; i= 1.9 ) || _isOpera) { var td=document.createElement("TD"); if (_isFF) td.style.display="none"; rows[i].insertBefore(td,rows[i].cells[0]) } r_cor++; continue; } var a=frows[i].cells[j-r_cor]; var b=rows[i].cells[j-(_isIE?0:r_cor)]; var t=b.rowSpan; change_td(a,b); if (t>1){ temp_rspan[j]=t-1; b.rowSpan=t; } if (frows[i].cells[j].colSpan>1){ rows[i].cells[j].colSpan=frows[i].cells[j].colSpan; max_ind-=frows[i].cells[j].colSpan-1; for (var k=1; k < frows[i].cells[j].colSpan; k++) frows[i].removeChild(frows[i].cells[j+1]); } } } } if (this.hdr.rows.length>2) proc_hf.call(this,2,this.hdr.rows,"_aHead",this._fake.hdr.rows); if (this.ftr){ proc_hf.call(this,1,this.ftr.childNodes[0].rows,"_aFoot"); this._fake.ftr.parentNode.style.bottom=(_isFF?2:1)+"px"; } if (this.saveSizeToCookie){ this.saveSizeToCookie=function(name,cookie_param){ if (this._realfake) return this._fake.saveSizeToCookie.apply(this._fake,arguments); if (!name) name=this.entBox.id; var z=new Array(); var n="cellWidthPX"; for (var i=0; ir_ind) x.removeChild(x.childNodes[x.childNodes.length-1]); var zm=r_ind; for (var i=0; i1) this._childIndexes=this._fake._childIndexes; } if (this._h2 && this._treeC < ind){ var trow=this._h2.get[arguments[0].idd]; x.imgTag=x.childNodes[this._treeC].childNodes[0].childNodes[trow.level]; x.valTag=x.childNodes[this._treeC].childNodes[0].childNodes[trow.level+2]; } x.idd=row.idd; x.grid=this._fake; return x; } var zname="_insertRowAt"; this._bfs_insertRowAt=this[zname]; this[zname]=function(){ var r=this["_bfs_insertRowAt"].apply(this,arguments); arguments[0]=this.copy_row(arguments[0]); var r2=this._fake["_insertRowAt"].apply(this._fake,arguments); if (r._fhd){ r2.parentNode.removeChild(r2); this._fake.rowsCol._dhx_removeAt(this._fake.rowsCol._dhx_find(r2)); r._fhd=false; } return r; } /* var quirks = (_isIE && document.compatMode=="BackCompat"); var isVScroll = this.parentGrid?false:(this.objBox.scrollHeight > this.objBox.offsetHeight); var isHScroll = this.parentGrid?false:(this.objBox.scrollWidth > this.objBox.offsetWidth); var scrfix = _isFF?20:18; var outerBorder=(this.entBox.offsetWidth-this.entBox.clientWidth)/2; var gridWidth=this.entBox.clientWidth; var gridHeight=this.entBox.clientHeight; */ this._bfs_setSizes=this.setSizes; this.setSizes=function(){ if (this._notresize) return; this._bfs_setSizes(this,arguments); this.sync_headers() if (this.sync_scroll() && this._ahgr) this.setSizes(); //if scrolls was removed - check once more to correct auto-height var height = this.dontSetSizes ? (this.entBox.offsetHeight+"px") : this.entBox.style.height; this._fake.entBox.style.height = height; this._fake.objBox.style.height=this.objBox.style.height; this._fake.hdrBox.style.height=this.hdrBox.style.height; this._fake.objBox.scrollTop=this.objBox.scrollTop; this._fake.setColumnSizes(this._fake.entBox.clientWidth); this.globalBox.style.width=parseInt(this.entBox.style.width)+parseInt(this._fake.entBox.style.width); if (!this.dontSetSizes) this.globalBox.style.height = height; } this.sync_scroll=this._fake.sync_scroll=function(end){ var old=this.objBox.style.overflowX; if (this.obj.offsetWidth<=this.objBox.offsetWidth) { if (!end) return this._fake.sync_scroll(true); this.objBox.style.overflowX="hidden"; this._fake.objBox.style.overflowX="hidden"; } else if (!dhtmlx.$customScroll){ this.objBox.style.overflowX="scroll"; this._fake.objBox.style.overflowX="scroll"; } return old!=this.objBox.style.overflowX; } this.sync_headers=this._fake.sync_headers=function(){ if (this.noHeader || (this._fake.hdr.scrollHeight==this.hdr.offsetHeight)) return; // if (this.hdr.rows.length!=2){ for (var i=1; i=ind); if (!arguments[0].parentNode.idd) return; if (!fl) arguments[0].className=arguments[0].className.replace(/cellselected/g,""); //item selected but it left part not rendered yet if (!this._fake.rowsAr[arguments[0].parentNode.idd]) this._fake.render_row(this.getRowIndex(arguments[0].parentNode.idd)); arguments[0]=this._fake.cells(arguments[0].parentNode.idd,(fl?0:arguments[0]._cellIndex)).cell; if (fl) this._fake.cell=null; this._fake["_bfs_doClick"].apply(this._fake,arguments); if (fl) this._fake.cell=this.cell; else this.cell=this._fake.cell; if (this._fake.onRowSelectTime) clearTimeout(this._fake.onRowSelectTime) if (fl) { arguments[0].className=arguments[0].className.replace(/cellselected/g,""); globalActiveDHTMLGridObject=this; this._fake.cell=this.cell; } else{ this.objBox.scrollTop=this._fake.objBox.scrollTop; } } } this._fake._bfs_doClick=this._fake[zname]; this._fake[zname]=function(){ this["_bfs_doClick"].apply(this,arguments); if (arguments[0].tagName=="TD"){ var fl=(arguments[0]._cellIndex0 )){ arguments[3]=(this._initalSplF||arguments[3]); z=this.doColResizeA.apply(this,arguments); } else z=this.doColResizeA.apply(this,arguments); } else{ if (this.obj.offsetWidth=ind) this._fake.setSortImgState(false) }); this._fake.sortField = function(a,b,c){ this._fake.sortField.call(this._fake,a,b,this._fake.hdr.rows[0].cells[a]); if (this.fldSort[a]!="na" && this._fake.fldSorted){ var mem = this._fake.getSortingState()[1]; this._fake.setSortImgState(false); this.setSortImgState(true,arguments[0],mem) } } this.sortTreeRowsA = this.sortTreeRows; this._fake.sortTreeRowsA = this._fake.sortTreeRows; this.sortTreeRows=this._fake.sortTreeRows=function(col,type,order,ar){ if (this._realfake) return this._fake.sortTreeRows(col,type,order,ar) this.sortTreeRowsA(col,type,order,ar); this._fake._h2syncModel(); this._fake.setSortImgStateA(false); this._fake.fldSorted=null; } /* SRND mode */ this._fake._fillers=[]; this._fake.rowsBuffer=this.rowsBuffer; this.attachEvent("onClearAll",function(){ this._fake.rowsBuffer=this.rowsBuffer; }) this._add_filler_s=this._add_filler; this._add_filler=function(a,b,c,e){ if (!this._fake._fillers) this._fake._fillers=[]; if (this._realfake || !e){ var d; if (c || !this._fake._fillers.length){ if (c && c.idd) d=this._fake.rowsAr[c.idd]; else if (c && c.nextSibling) { d = {}; d.nextSibling=this._fake.rowsAr[c.nextSibling.idd]; d.parentNode=d.nextSibling.parentNode; } this._fake._fillers.push(this._fake._add_filler(a,b,d)); } } return this._add_filler_s.apply(this,arguments); } this._add_from_buffer_s=this._add_from_buffer; this._add_from_buffer=function() { var res=this._add_from_buffer_s.apply(this,arguments); if (res!=-1){ this._fake._add_from_buffer.apply(this._fake,arguments); if (this.multiLine) this._correctRowHeight(this.rowsBuffer[arguments[0]].idd); } return res; } this._fake.render_row=function(ind){ var row=this._fake.render_row(ind); if (row == -1) return -1; if (row) { return this.rowsAr[row.idd]=this.rowsAr[row.idd]||this._fake.copy_row(row); } return null; } this._reset_view_s=this._reset_view; this._reset_view=function(){ this._fake._reset_view(true); this._fake._fillers=[]; this._reset_view_s(); } this.moveColumn_s=this.moveColumn; this.moveColumn=function(a,b){ if (b>=ind) return this.moveColumn_s(a,b); } this.attachEvent("onCellChanged",function(id,i,val){ if (this._split_event && i-1){ this.entBox.style.width=a+"px"; this.objBox.style.width=a+"px"; var outerBorder=(this.globalBox.offsetWidth-this.globalBox.clientWidth)/2; this._fake.entBox.style.left=a+"px"; this._fake.entBox.style.width=Math.max(0,this.globalBox.offsetWidth-a-(this.quirks?0:2)*outerBorder)+"px"; if (this._fake.ftr) this._fake.ftr.parentNode.style.width=this._fake.entBox.style.width; if (_isIE){ var quirks=_isIE && !window.xmlHttpRequest; var outerBorder=(this.globalBox.offsetWidth-this.globalBox.clientWidth); this._fake.hdrBox.style.width=this._fake.objBox.style.width=Math.max(0,this.globalBox.offsetWidth-(quirks?outerBorder:0)-a)+"px"; } } } dhtmlXGridObject.prototype._correctRowHeight=function(id,ind){ if (!this.rowsAr[id] || !this._fake.rowsAr[id]) return; var h=this.rowsAr[id].offsetHeight; var h2=this._fake.rowsAr[id].offsetHeight; var max = Math.max(h,h2); if (!max) return; this.rowsAr[id].style.height=this._fake.rowsAr[id].style.height=max+"px"; if (window._KHTMLrv) { var j = this._fake._cCount; var td; while (!td && j>=0){ td = this.rowsAr[id].childNodes[j]; j-=1; } var td2 = this._fake.rowsAr[id].firstChild; if (td && td2) td.style.height=td2.style.height=max+"px"; } } //(c)dhtmlx ltd. www.dhtmlx.com