📄 dhtmlxgrid_drag.js
字号:
if (c.sobj.dpcpy) c.set("mode","copy");
c.tobj._clearMove();
c.tobj.dragContext=c;
if (!c.tobj.callEvent("onDrag",[c.slist(),c.tid,c.sobj,c.tobj,c.sExtra,c.tExtra])) return;
//all ready, start mantras
var result=new Array();
if (typeof(c.sid)=="object"){
var nc=c.copy();
for (var i=0; i<c.sid.length; i++){
if (!nc.set("alfa",(!i)).set("sid",c.sid[i][(c.source=="tree"?"id":"idd")]).valid()) continue;
nc.tobj._dragRoutine(nc);
result[result.length]=nc.nid;
nc.set("dropmode","sibling").set("tid",nc.nid);
}
nc.close();
}
else
c.tobj._dragRoutine(c);
//finish math if any awaiting
if (c.tobj.laterLink) c.tobj.laterLink();
//destroy context
c.tobj.callEvent("onDrop",[c.slist(),c.tid,result.join(","),c.sobj,c.tobj,c.sExtra,c.tExtra]);
c.tobj.dragContext=null;
c.close();
}
/**
* @desc: context drag routine
* @type: private
*/
dhtmlXGridObject.prototype._dragRoutine=function(c){
if ((c.sobj==c.tobj)&&(c.source=="grid")&&(c.mode=="move")){
//special case for moving rows in same grid
if (c.sobj._dndProblematic) return;
var fr=c.sobj.rowsAr[c.sid];
var bind=c.sobj.rowsCol._dhx_find(fr);
c.sobj.rowsCol._dhx_removeAt(c.sobj.rowsCol._dhx_find(fr));
c.sobj.rowsBuffer._dhx_removeAt(c.sobj.rowsBuffer._dhx_find(fr));
if (c.tobj._fake){
c.tobj._fake.rowsCol._dhx_removeAt(bind);
var tr=c.tobj._fake.rowsAr[c.sid];
tr.parentNode.removeChild(tr);
}
c.sobj._insertRowAt(fr,c.ind());
c.sobj.rowsBuffer._dhx_insertAt(c.ind(),fr)
c.nid=c.sid;
return;
}
var new_row=c.uid().tobj.addRow(c.nid,c.data(),c.ind(),c.pid(),c.img(),c.childs());
if (c.source=="tree"){
this.callEvent("onRowAdded",[c.nid]);
var sn=c.sobj._globalIdStorageFind(c.sid);
if (sn.childsCount){
var nc=c.copy().set("tid",c.nid).set("dropmode",c.target=="grid"?"sibling":"child");
for(var j=0;j<sn.childsCount;j++){
c.tobj._dragRoutine(nc.set("sid",sn.childNodes[j].id));
if (c.mode=="move") j--;
}
nc.close();
}
}
else{
c.tobj._copyUserData(c);
this.callEvent("onRowAdded",[c.nid]);
if ((c.source=="treeGrid")){
if (c.sobj==c.tobj) new_row._xml=c.sobj.rowsAr[c.sid]._xml;
var snc=c.sobj._h2.get[c.sid];
if ((snc)&&(snc.childs.length)){
var nc=c.copy().set("tid",c.nid);
if(c.target=="grid")
nc.set("dropmode","sibling");
else {
nc.tobj.openItem(c.tid);
nc.set("dropmode","child");
}
var l=snc.childs.length;
for(var j=0;j<l;j++){
c.sobj.render_row_tree(null,snc.childs[j].id);
c.tobj._dragRoutine(nc.set("sid",snc.childs[j].id));
if (l!=snc.childs.length) { j--; l=snc.childs.length; }
}
nc.close();
}
}
}
if (c.mode=="move"){
c.sobj[(c.source=="tree")?"deleteItem":"deleteRow"](c.sid);
if ((c.sobj==c.tobj)&&(!c.tobj.rowsAr[c.sid])) {
c.tobj.changeRowId(c.nid,c.sid);
c.nid=c.sid;
}
}
}
/**
* @desc: redefine this method in your code to define how grid row values should be used in another grid
* @param: rowId - id of draged row
* @param: sgrid - source grid object
* @param: tgrid - target grid object
* @returns: array of values for cells in target grid row
* @type: public
* @topic: 7
*/
dhtmlXGridObject.prototype.gridToGrid = function(rowId,sgrid,tgrid){
var z=new Array();
for (var i=0; i<sgrid.hdr.rows[0].cells.length; i++)
z[i]=sgrid.cells(rowId,i).getValue();
return z;
}
/**
* @desc: check if d-n-d is in allowed rules
* @type: private
*/
dhtmlXGridObject.prototype.checkParentLine=function(node,id){
if ((!this._h2)||(!id)||(!node)) return false;
if (node.id==id) return true;
else return this.checkParentLine(node.parent,id);
}
/**
* @desc: called when drag moved over landing
* @type: private
*/
dhtmlXGridObject.prototype._dragIn=function(htmlObject,shtmlObject,x,y){
if (!this.dADTempOff) return 0;
var tree=this.isTreeGrid();
if(htmlObject.parentNode==shtmlObject.parentNode)
return 0;
/* if ((!tree)&&((htmlObject.parentNode.nextSibling) &&(htmlObject.parentNode.nextSibling==shtmlObject.parentNode)))
return 0;
*/
if ((tree)&&((this.checkParentLine(this._h2.get[htmlObject.parentNode.idd],shtmlObject.parentNode.idd))))
return 0;
var obj=shtmlObject.parentNode.idd?shtmlObject.parentNode:shtmlObject.parentObject;
if (!this.callEvent("onDragIn",[obj.idd||obj.id,htmlObject.parentNode.idd,obj.grid||obj.treeNod,htmlObject.parentNode.grid]))
return this._setMove(htmlObject,x,y,true);
this._setMove(htmlObject,x,y);
if ((tree)&&(htmlObject.parentNode.expand!="")){
this._autoOpenTimer=window.setTimeout(new callerFunction(this._autoOpenItem,this),1000);
this._autoOpenId=htmlObject.parentNode.idd;
}
else
if (this._autoOpenTimer) window.clearTimeout(this._autoOpenTimer);
return htmlObject;
}
/**
* @desc: open item on timeout
* @type: private
*/
dhtmlXGridObject.prototype._autoOpenItem=function(e,gridObject){
gridObject.openItem(gridObject._autoOpenId);
}
/**
* @desc: called on onmouseout event , when drag out landing zone
* @type: private
*/
dhtmlXGridObject.prototype._dragOut=function(htmlObject){
this._clearMove();
var obj=htmlObject.parentNode.parentObject?htmlObject.parentObject.id:htmlObject.parentNode.idd;
this.callEvent("onDragOut",[obj]);
if (this._autoOpenTimer) window.clearTimeout(this._autoOpenTimer);
}
/**
* @desc: set visual effect for moving row over landing
* @type: private
*/
dhtmlXGridObject.prototype._setMove=function(htmlObject,x,y,skip){
var a1=getAbsoluteTop(htmlObject);
var a2=getAbsoluteTop(this.objBox);
//scroll down
if ( (a1-a2-parseInt(this.objBox.scrollTop))>(parseInt(this.objBox.offsetHeight)-50) )
this.objBox.scrollTop=parseInt(this.objBox.scrollTop)+20;
//scroll top
if ( (a1-a2)<(parseInt(this.objBox.scrollTop)+30) )
this.objBox.scrollTop=parseInt(this.objBox.scrollTop)-20;
if (skip) return 0;
if (this.dadmode==2)
{
var z=y-a1+this.objBox.scrollTop+(document.body.scrollTop||document.documentElement.scrollTop)-2-htmlObject.offsetHeight/2;
if ((Math.abs(z)-htmlObject.offsetHeight/6)>0)
{
this.dadmodec=1;
//sibbling zone
if (z<0) this.dadmodefix=-1; else this.dadmodefix=1;
}
else this.dadmodec=0;
}
else
this.dadmodec=this.dadmode;
if (this.dadmodec){
if (!this._sdrgc) this._createSdrgc();
this._sdrgc.style.display="block";
this._sdrgc.style.top=a1-a2+((this.dadmodefix>=0)?htmlObject.offsetHeight:0)+"px";
}
else{
this._llSelD=htmlObject;
if (htmlObject.parentNode.tagName=="TR")
for (var i=0; i<htmlObject.parentNode.childNodes.length; i++)
{
var z= htmlObject.parentNode.childNodes[i];
z._bgCol=z.style.backgroundColor;
z.style.backgroundColor="#FFCCCC";
}
}
}
/**
* @desc: remove all visual effects
* @type: private
*/
dhtmlXGridObject.prototype._clearMove=function(){
if (this._sdrgc) this._sdrgc.style.display="none";
if ((this._llSelD)&&(this._llSelD.parentNode.tagName=="TR"))
for (var i=0; i<this._llSelD.parentNode.childNodes.length; i++)
this._llSelD.parentNode.childNodes[i].style.backgroundColor=this._llSelD._bgCol;
this._llSelD=null;
}
/**
* @desc: redefine this method in your code to define how grid row values should be displaied while draging
* @param: gridRowId - id of grid row
* @returns: html string representing dragging row
* @type: public
* @topic: 7
*/
dhtmlXGridObject.prototype.rowToDragElement=function(gridRowId){
var out=this.cells(gridRowId,0).getValue();
return out;
}
/**
* @desc: copy user data for row
* @type: private
*/
dhtmlXGridObject.prototype._copyUserData = function(c){
if(!c.tobj.UserData[c.nid])
c.tobj.UserData[c.nid] = new Hashtable();
var z1 = c.sobj.UserData[c.sid];
var z2 = c.tobj.UserData[c.nid];
if (z1) {
z2.keys = z2.keys.concat(z1.keys);
z2.values = z2.values.concat(z1.values);
}
}
/**
* @desc: move row
* @type: public
* @param: rowId - source row Id
* @param: mode - moving mode (up,down,row_sibling)
* @param: targetId - target row in row_sibling mode
* @param: targetGrid - used for moving between grids (optional)
* @edition: Professional
* @topic: 2
*/
dhtmlXGridObject.prototype.moveRow=function(rowId,mode,targetId,targetGrid){
switch(mode){
case "row_sibling":
this.moveRowTo(rowId,targetId,"move","sibling",this,targetGrid);
break;
case "up":
this.moveRowUp(rowId);
break;
case "down":
this.moveRowDown(rowId);
break;
}
}
//(c)dhtmlx ltd. www.dhtmlx.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -