Files
DzzOffice/dzz/system/scripts/_select.js
2022-11-02 23:21:46 +08:00

429 lines
12 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @copyright Leyun internet Technology(Shanghai)Co.,Ltd
* @license http://www.dzzoffice.com/licenses/license.txt
* @package DzzOffice
* @link http://www.dzzoffice.com
* @author zyx(zyx@dzz.cc)
*/
function _select(container)
{
this.id=this.name=container;
this.string="_select.icos."+this.id;
this.board=document.getElementById(container);
_select.icos[this.id]=this;
};
_select.delay=500;
_select.width=120;
_select.height=120;
_select.icos={};
_select.onmousemove=null;
_select.onmouseup=null;
_select.tach=null;
_select.onselectstart=1;
_select.init=function(container){
var obj= new _select(container);
jQuery(obj.board).on('mousedown',function(e){
e=e?e:window.event;
var tag = e.srcElement ? e.srcElement :e.target;
if(/input|textarea/i.test(tag.tagName)){
return true;
}
if(e.button==2) return true;
dfire('mousedown');//dfire('touchstart');
obj.Mousedown(e?e:window.event);
return true;
});
jQuery(obj.board).on('mouseup',function(e){
e=e?e:window.event;
var tag = e.srcElement ? e.srcElement :e.target;
if(/input|textarea/i.test(tag.tagName)){
return true;
}
dfire('mouseup');
//dfire('touchend');
obj.Mouseup(e?e:window.event);
return true;
});
return obj;
};
_select.prototype.DetachEvent=function(e)
{
if(!_select.tach) return;
//document.body.style.cursor="url('dzz/images/cur/aero_arrow.cur'),auto";
document.onmousemove=_select.onmousemove;
document.onmouseup=_select.onmouseup;
document.onselectstart=_select.onselectstart;
try{
if(this.board.releaseCapture) this.board.releaseCapture();
}catch(e){};
_select.tach=0;
_select.finishblank=0;
};
_select.prototype.AttachEvent=function(e)
{
if(_select.tach) return
_select.onmousemove=document.onmousemove;
_select.onmouseup=document.onmouseup;
_select.onselectstart=document.onselectstart;
try{
document.onselectstart=function(){return false;}
if(e.preventDefault) e.preventDefault();
else{
if(this.board.setCapture) this.board.setCapture();
}
}catch(e){};
_select.tach=1;
};
_select.prototype.Duplicate=function()
{
this.copy=document.createElement('div');
document.body.appendChild(this.copy);
this.copy.style.cssText="position:absolute;left:0px;top:0px;width:0px;height:0px;filter:Alpha(opacity=50);opacity:0.5;z-index:10002;overflow:hidden;background:#000;border:1px solid #000;";
//jQuery(this.copy).find('#text'+this.id).html(' ');
};
_select.prototype.Mousedown=function(e)
{
// console.log(_explorer.type);
this.mousedowndoing=false;
if(e.type=='touchstart'){
var XX=e.touches[0].clientX;
var YY=e.touches[0].clientY;
}else{
var XX=e.clientX;
var YY=e.clientY;
}
_select.oldxx=XX;
_select.oldyy=YY;
this.tl=XX;
this.tt=YY;
this.oldx=XX;
this.oldy=YY;
//alert('down');
var self=this;
if(!_select.tach) this.AttachEvent(e);
if(e.type=='touchstart'){
jQuery(this.board).on('touchmove',function(e){self.Move(e);return false});
}else{
document.onmousemove=function(e){self.Move(e?e:window.event);return false};
}
//this.mousedownTimer=setTimeout(function(){self.PreMove(XX,YY);},200);
};
_select.prototype.Mouseup=function(e)
{
if(_select.tach) this.DetachEvent(e);
if(!this.mousedowndoing) {
}else this.Moved(e);
};
_select.prototype.PreMove=function(e)
{
jQuery('#_blank').empty().show();
if (this.move=="no") return;
this.Duplicate();
var self=this;
this.mousedowndoing=true;
var p=jQuery(this.board).offset();
this.copy.style.left=this.tl+'px';
this.copy.style.top=this.tt+'px';
//清空数据
if(_hotkey.ctrl>0 && _selectfile.selectall.container==this.id){
}else{
if(_selectfile.selectall.container) jQuery('#'+_selectfile.selectall.container).find('.Icoblock').removeClass('Icoselected');
_selectfile.selectall.container=this.id;
_selectfile.selectall.icos=[];
_selectfile.selectall.position={};
}
//计算此容器内的所有ico的绝对位置并且存入_selectfile.selectall.position中
jQuery(this.board).find('.Icoblock').each(function(){
var el=jQuery(this);
var p=el.offset();
var icoid=el.attr('rid');
if(icoid){
_selectfile.selectall.position[icoid]={icoid:icoid,left:p.left,top:p.top,width:el.width(),height:el.height()};
}
});
if(e.type=='touchmove'){
jQuery(this.board).on('touchend',function(e){self.Moved(e);return true});
}else{
document.onmouseup=function(e){self.Moved(e?e:window.event);return false;};
}
};
_select.prototype.Move=function(e)
{
if(e.type==='touchmove'){
var XX=e.touches[0].clientX;
var YY=e.touches[0].clientY;
}else{
var XX=e.clientX;
var YY=e.clientY;
}
if(!this.mousedowndoing && (Math.abs(this.oldx-XX)>5 || Math.abs(this.oldy-YY)>5)){
this.PreMove(e);
}
if(!this.mousedowndoing) return;
var flag=0;
if(XX-this.oldx>0){
this.copy.style.width=(XX-this.oldx)+"px";
}else{
this.copy.style.width=Math.abs(XX-this.oldx)+"px";
this.copy.style.left=this.tl+(XX-this.oldx)+"px";
}
if(YY-this.oldy>0){
this.copy.style.height=(YY-this.oldy)+"px";
}else{
this.copy.style.height=Math.abs(YY-this.oldy)+"px";
this.copy.style.top=this.tt+(YY-this.oldy)+"px";
}
if(!BROWSER.ie){
//if(Math.abs(_select.oldxx-XX)>20 || Math.abs(_select.oldyy-YY)>20){
if(XX>this.oldx && YY > this.oldy){
if(Math.abs(XX-_select.oldxx)>20 || Math.abs(YY-_select.oldyy)>20){
_select.oldxx=XX;
_select.oldyy=YY;
this.setSelected(true);
}
}else{
if(Math.abs(XX-_select.oldxx)>20 || Math.abs(YY-_select.oldyy)>20){
_select.oldxx=XX;
_select.oldyy=YY;
this.setSelected();
}
}
}
};
_select.prototype.Moved=function(e)
{
var self=this;
jQuery('#_blank').hide();
if(_select.tach) this.DetachEvent(e);
if(e.type=='touchend'){
var XX=e.changedTouches[0].clientX;
var YY=e.changedTouches[0].clientY;
}else{
var XX=e.clientX;
var YY=e.clientY;
}
if(BROWSER.ie){
if(XX>this.oldx && YY > this.oldy){
this.setSelected(true);
}else{
this.setSelected();
}
}
jQuery(this.copy).remove();
};
_select.prototype.setSelected=function(flag){
_select.sum++;
var p=jQuery(this.copy).offset();
var icos=[];
var copydata={left:p.left,top:p.top,width:jQuery(this.copy).width(),height:jQuery(this.copy).height()};
for(var icoid in _selectfile.selectall.position){
var data=_selectfile.selectall.position[icoid];
if(_select.checkInArea(copydata,data,flag)){
_select.SelectedStyle(this.id,icoid,true,true);
}else if(_hotkey.ctrl<1){
_select.SelectedStyle(this.id,icoid,false,true);
}
}
};
_select.checkInArea=function(copydata,data,flag){
var rect={minx:0,miny:0,maxx:0,maxy:0}
rect.minx=Math.max(data.left,copydata.left);
rect.miny =Math.max(data.top,copydata.top) ;
rect.maxx =Math.min(data.left+data.width,copydata.left+copydata.width) ;
rect.maxy =Math.min(data.top+data.height,copydata.top+copydata.height) ;
if(!flag){
if(rect.minx>rect.maxx || rect.miny>rect.maxy){
return false;
}else{
return true
}
}else{
if(rect.minx>rect.maxx || rect.miny>rect.maxy){
return false;
}else{
return true;
var area=(rect.maxx-rect.minx)*(rect.maxy-rect.miny);
var dataarea=data.width*data.height;
if(dataarea==area) return true;
else return false;
}
}
};
_select.SelectedStyle=function(container,rid,flag,multi){
var icos=_selectfile.selectall.icos||[];
var fidarr=container.split('-');
var fid=parseInt(fidarr[2]);
var filemanageid=container.replace('filemanage-','');//'f-'+fidarr[2];
if(flag){
}
var el=jQuery('#'+container).find('.Icoblock[rid='+rid+']');
if(flag){
if(_selectfile.selectall.container=='') _selectfile.selectall.container=container;
if(multi && _selectfile.selectall.container==container){
if(jQuery.inArray(rid,_selectfile.selectall.icos)<0){
_selectfile.selectall.icos.push(rid);
}
}else{
jQuery('#'+_selectfile.selectall.container).find('.Icoblock').removeClass('Icoselected');
_selectfile.selectall.container=container;
_selectfile.selectall.icos=[rid];
_selectfile.selectall.position={};
}
el.addClass('Icoselected');
}else{
var arr=[];
if(_selectfile.selectall.container==container){
for(var i in icos){
if(icos[i]!=rid) arr.push(icos[i]);
}
}
_selectfile.selectall.icos=arr;
el.removeClass('Icoselected');
}
if(_selectfile.cons[filemanageid]) _selectfile.cons[filemanageid].selectInfo();
if(_explorer.type){
_selectfile.changefileName(rid);
}
};
_select.Cut=function(icoid){
//处理原对象 去除样式
if(_config.cut.iscut>0 && _config.cut.icos.length>0){
for(var i in _config.cut.icos){
jQuery('.Icoblock[icoid='+_config.cut.icos[i]+']').removeClass('iscut');
}
}
//添加新对象到剪切板,并且设置剪切样式
_config.cut.iscut=1;
if(jQuery.inArray(icoid,_config.selectall.icos)>-1){
_config.cut.icos=_config.selectall.icos;
}else{
_config.cut.icos=[icoid];
}
for(var i in _config.cut.icos){
jQuery('.Icoblock[rid='+_config.cut.icos[i]+']').addClass('iscut');
}
}
_select.Copy=function(icoid){
//处理原对象 去除样式
if(_config.cut.iscut>0 && _config.cut.icos.length>0){
for(var i in _config.cut.icos){
jQuery('.Icoblock[icoid='+_config.cut.icos[i]+']').removeClass('iscut');
}
}
//添加新对象到剪切板,并且设置剪切样式
_config.cut.iscut=0;
if(jQuery.inArray(icoid,_config.selectall.icos)>-1){
_config.cut.icos=_config.selectall.icos;
}else{
_config.cut.icos=[icoid];
}
}
_select.Paste=function(pfid,XX,YY){
if(_config.cut.icos.length<1) return ;//剪贴板无数据,返回;
//判断默认应用不能更换容器
/*for(var i=0;i<_config.cut.icos.length;i++){
if(_config.cut.iscut>0 && !_config.Permission('delete',_config.sourcedata.icos[_config.cut.icos[i]])){
_config.cut.icos.splice(i,1);
jQuery('.Icoblock[icoid='+_config.cut.icos[i]+']').removeClass('iscut');
//showPrompt(null,'',_lang.default_app_not_move,1000);
}
}*/
//判断容器是否接受此类图标;
/*if(!_config.Permission_Container(_config.sourcedata.icos[_config.cut.icos[0]].type,pfid)){
showPrompt(null,'',_lang.paste.paste_in_here_forbidden,1000);
return ;
}*/
//获得目标路径的tbz
var tbz=_config.sourcedata.folder[pfid].bz||'';
if(tbz){
var path=encodeURIComponent(_config.sourcedata.folder[pfid].path);
}else{
var path=pfid;
}
//组织data
if(_config.sourcedata.icos[_config.cut.icos[0]].bz && _config.sourcedata.icos[_config.cut.icos[0]].bz!=''){
var paths=[];
for(var i=0;i<_config.cut.icos.length;i++){
paths.push((_config.sourcedata.icos[_config.cut.icos[i]].dpath));
}
var data={"obz":_config.sourcedata.icos[_config.cut.icos[0]].bz,"tbz":tbz,"sourcetype":"icoid","icoid":paths.join(','),"ticoid":0,"container":'icosContainer_folder_'+path,iscut:_config.cut.iscut>0?1:2};
}else{
var paths=[];
for(var i=0;i<_config.cut.icos.length;i++){
paths.push((_config.sourcedata.icos[_config.cut.icos[i]].dpath));
}
var data={"obz":'',"tbz":tbz,"sourcetype":"icoid","icoid":paths.join(','),"ticoid":0,"container":'icosContainer_folder_'+path,iscut:_config.cut.iscut>0?1:2};
}
var container=_config.getContainerByFid(pfid);
var progress='<div class="progress progress-striped active" style="margin:0"><div class="bar" style="width:100%;"></div></div>'
//alert(_config.saveurl+'&do=move&gid='+_config.gid+'&'+jQuery.param(data));
showmessage('<p>'+__lang.file_drag_processing+'</p>'+progress,'success',0,1,'right-bottom');
jQuery.getJSON(_config.saveurl+'&do=move&'+jQuery.param(data),function(json){
if(json.msg=='success'){
_config.cut.icos=[];
_config.cut.successicos=[];
_config.cut.osuccessicos=[];
for(var ico in json.successicos){
_config.cut.successicos.push(json.successicos[ico]);
_config.cut.osuccessicos.push(ico);
}
if(json.iscopy>0){
showmessage(__lang.file_copy_success,'success',3000,1,'right-bottom')
}else{
showmessage(__lang.crop_files_success,'success',3000,1,'right-bottom')
_select.remove(_config.cut.osuccessicos);
}
for(var i in json.icoarr){
_config.sourcedata.icos[json.icoarr[i].icoid]=json.icoarr[i];
}
for(var i in json.folderarr){
_config.sourcedata.folder[json.folderarr[i].fid]=json.folderarr[i];
}
_ico.appendIcoids(_config.cut.successicos);
if(json.error){
showmessage(__lang.operate_files_error,'error',3000,1,'right-bottom');
}
}else{
showmessage(__lang.operate_files_error,'error',3000,1,'right-bottom');
}
});
};
_select.remove=function(icos){//移除原来的icoid
for(var i=0;i<icos.length;i++){
_ico.removeIcoid(icos[i]);
}
}