X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=program%2Fjs%2Flist.js;h=5116df78b21ad40da321c2e59c88935530df1406;hb=76507f7c63a660742e76889ad6e3919f3dde3bb0;hp=e58616e0b366d42878680fa30af72487d5eb669b;hpb=3adad46e27086084a8b28a32fc4fbc953dbfef6c;p=roundcube.git diff --git a/program/js/list.js b/program/js/list.js index e58616e..5116df7 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -1,557 +1,39 @@ -function rcube_list_widget(_1,p){ -this.ENTER_KEY=13; -this.DELETE_KEY=46; -this.BACKSPACE_KEY=8; -this.list=_1?_1:null; -this.frame=null; -this.rows=[]; -this.selection=[]; -this.rowcount=0; -this.subject_col=-1; -this.shiftkey=false; -this.multiselect=false; -this.multi_selecting=false; -this.draggable=false; -this.keyboard=false; -this.toggleselect=false; -this.dont_select=false; -this.drag_active=false; -this.last_selected=0; -this.shift_start=0; -this.in_selection_before=false; -this.focused=false; -this.drag_mouse_start=null; -this.dblclick_time=600; -this.row_init=function(){ -}; -this.events={click:[],dblclick:[],select:[],keypress:[],dragstart:[],dragmove:[],dragend:[]}; -if(p&&typeof (p)=="object"){ -for(var n in p){ -this[n]=p[n]; -} -} -}; -rcube_list_widget.prototype={init:function(){ -if(this.list&&this.list.tBodies[0]){ -this.rows=new Array(); -this.rowcount=0; -var _4; -for(var r=0;r=0;i--){ -if(_2a[i].id&&String(_2a[i].id).match(/rcmrow([a-z0-9\-_=]+)/i)&&this.rows[RegExp.$1]!=null){ -return RegExp.$1; -} -} -} -return null; -},select_row:function(id,_2d,_2e){ -var _2f=this.selection.join(","); -if(!this.multiselect){ -_2d=0; -} -if(!this.shift_start){ -this.shift_start=id; -} -if(!_2d){ -this.shift_start=id; -this.highlight_row(id,false); -this.multi_selecting=false; -}else{ -switch(_2d){ -case SHIFT_KEY: -this.shift_select(id,false); -break; -case CONTROL_KEY: -if(!_2e){ -this.highlight_row(id,true); -} -break; -case CONTROL_SHIFT_KEY: -this.shift_select(id,true); -break; -default: -this.highlight_row(id,false); -break; -} -this.multi_selecting=true; -} -if(this.selection.join(",")!=_2f){ -this.trigger_event("select"); -} -if(this.last_selected!=0&&this.rows[this.last_selected]){ -this.set_classname(this.rows[this.last_selected].obj,"focused",false); -} -if(this.toggleselect&&this.last_selected==id){ -this.clear_selection(); -id=null; -}else{ -this.set_classname(this.rows[id].obj,"focused",true); -} -if(!this.selection.length){ -this.shift_start=null; -} -this.last_selected=id; -},select:function(id){ -this.select_row(id,false); -this.scrollto(id); -},select_next:function(){ -var _31=this.get_next_row(); -var _32=this.get_prev_row(); -var _33=(_31)?_31:_32; -if(_33){ -this.select_row(_33.uid,false,false); -} -},shift_select:function(id,_35){ -if(!this.rows[this.shift_start]||!this.selection.length){ -this.shift_start=id; -} -var _36=this.rows[this.shift_start].obj.rowIndex; -var _37=this.rows[id].obj.rowIndex; -var i=((_36<_37)?_36:_37); -var j=((_36>_37)?_36:_37); -for(var n in this.rows){ -if((this.rows[n].obj.rowIndex>=i)&&(this.rows[n].obj.rowIndex<=j)){ -if(!this.in_selection(n)){ -this.highlight_row(n,true); -} -}else{ -if(this.in_selection(n)&&!_35){ -this.highlight_row(n,true); -} -} -} -},in_selection:function(id){ -for(var n in this.selection){ -if(this.selection[n]==id){ -return true; -} -} -return false; -},select_all:function(_3d){ -if(!this.rows||!this.rows.length){ -return false; -} -var _3e=this.selection.join(","); -this.clear_selection(); -for(var n in this.rows){ -if(!_3d||this.rows[n][_3d]==true){ -this.last_selected=n; -this.highlight_row(n,true); -} -} -if(this.selection.join(",")!=_3e){ -this.trigger_event("select"); -} -this.focus(); -return true; -},clear_selection:function(id){ -var _41=this.selection.length; -if(id){ -for(var n=0;n1||!this.in_selection(id)){ -this.clear_selection(); -this.selection[0]=id; -this.set_classname(this.rows[id].obj,"selected",true); -} -}else{ -if(this.rows[id]){ -if(!this.in_selection(id)){ -this.selection[this.selection.length]=id; -this.set_classname(this.rows[id].obj,"selected",true); -}else{ -var p=find_in_array(id,this.selection); -var _46=this.selection.slice(0,p); -var _47=this.selection.slice(p+1,this.selection.length); -this.selection=_46.concat(_47); -this.set_classname(this.rows[id].obj,"selected",false); -this.set_classname(this.rows[id].obj,"unfocused",false); -} -} -} -},key_press:function(e){ -if(this.focused!=true){ -return true; -} -var _49=rcube_event.get_keycode(e); -var _4a=rcube_event.get_modifier(e); -switch(_49){ -case 40: -case 38: -case 63233: -case 63232: -rcube_event.cancel(e); -return this.use_arrow_key(_49,_4a); -default: -this.shiftkey=e.shiftKey; -this.key_pressed=_49; -this.trigger_event("keypress"); -if(this.key_pressed==this.BACKSPACE_KEY){ -return rcube_event.cancel(e); -} -} -return true; -},key_down:function(e){ -switch(rcube_event.get_keycode(e)){ -case 40: -case 38: -case 63233: -case 63232: -if(!rcube_event.get_modifier(e)&&this.focused){ -return rcube_event.cancel(e); -} -default: -} -return true; -},use_arrow_key:function(_4c,_4d){ -var _4e; -if(_4c==40||_4c==63233){ -_4e=this.get_next_row(); -}else{ -if(_4c==38||_4c==63232){ -_4e=this.get_prev_row(); -} -} -if(_4e){ -this.select_row(_4e.uid,_4d,true); -this.scrollto(_4e.uid); -} -return false; -},scrollto:function(id){ -var row=this.rows[id].obj; -if(row&&this.frame){ -var _51=Number(row.offsetTop); -if(_51Number(this.frame.scrollTop)+Number(this.frame.offsetHeight)){ -this.frame.scrollTop=(_51+Number(row.offsetHeight))-Number(this.frame.offsetHeight); -} -} -} -},drag_mouse_move:function(e){ -if(this.drag_start){ -var m=rcube_event.get_mouse_pos(e); -if(!this.drag_mouse_start||(Math.abs(m.x-this.drag_mouse_start.x)<3&&Math.abs(m.y-this.drag_mouse_start.y)<3)){ -return false; -} -if(!this.draglayer){ -this.draglayer=new rcube_layer("rcmdraglayer",{x:0,y:0,vis:0,zindex:2000}); -} -var _54=""; -var c,i,_57,_58,obj; -for(var n=0;n12){ -_54+="..."; -break; -} -if(this.rows[this.selection[n]].obj){ -obj=this.rows[this.selection[n]].obj; -_58=""; -for(c=0,i=0;i=0&&this.subject_col==c))){ -_58=_57.nodeType==3?_57.data:_57.innerHTML; -_54+=(_58.length>50?_58.substring(0,50)+"...":_58)+"
"; -break; -} -c++; -} -} -} -} -this.draglayer.write(_54); -this.draglayer.show(1); -this.drag_active=true; -this.trigger_event("dragstart"); -} -if(this.drag_active&&this.draglayer){ -var pos=rcube_event.get_mouse_pos(e); -this.draglayer.move(pos.x+20,pos.y-5); -this.trigger_event("dragmove",e); -} -this.drag_start=false; -return false; -},drag_mouse_up:function(e){ -document.onmousemove=null; -if(this.draglayer&&this.draglayer.visible){ -this.draglayer.show(0); -} -this.drag_active=false; -this.trigger_event("dragend"); -rcube_event.remove_listener({element:document,event:"mousemove",object:this,method:"drag_mouse_move"}); -rcube_event.remove_listener({element:document,event:"mouseup",object:this,method:"drag_mouse_up"}); -var _5d=document.getElementsByTagName("IFRAME"); -for(var n in _5d){ -var _5f; -if(_5d[n].contentDocument){ -_5f=_5d[n].contentDocument; -}else{ -if(_5d[n].contentWindow){ -_5f=_5d[n].contentWindow.document; -}else{ -if(_5d[n].document){ -_5f=_5d[n].document; -} -} -} -if(_5f){ -if(this.iframe_events[n]){ -if(_5f.removeEventListener){ -_5f.removeEventListener("mousemove",this.iframe_events[n],false); -}else{ -if(_5f.detachEvent){ -_5f.detachEvent("onmousemove",this.iframe_events[n]); -}else{ -_5f["onmousemove"]=null; -} -} -} -rcube_event.remove_listener({element:_5f,event:"mouseup",object:this,method:"drag_mouse_up"}); -} -} -this.focus(); -return rcube_event.cancel(e); -},set_classname:function(obj,_61,set){ -var reg=new RegExp("s*"+_61,"i"); -if(!set&&obj.className.match(reg)){ -obj.className=obj.className.replace(reg,""); -}else{ -if(set&&!obj.className.match(reg)){ -obj.className+=" "+_61; -} -} -},addEventListener:function(evt,_65){ -if(this.events[evt]){ -var _66=this.events[evt].length; -this.events[evt][_66]=_65; -return _66; -}else{ -return false; -} -},removeEventListener:function(evt,_68){ -if(this.events[evt]&&this.events[evt][_68]){ -this.events[evt][_68]=null; -} -},trigger_event:function(evt,p){ -if(this.events[evt]&&this.events[evt].length){ -for(var i=0;i=c.depth-1)f=c.depth,$(e).css("display",""),b.expanded=!0,this.triggerEvent("expandcollapse",{uid:b.uid,expanded:b.expanded})}else if(a&&(!c||c.depth<=d))break}e=e.nextSibling}return!1},collapse_all:function(a){var b,c,d;if(a){if(a.expanded= +!1,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded}),b&&this.multiexpand)return!1}else c=this.list.tBodies[0].firstChild,b=0;for(;c;){if(1==c.nodeType&&(d=this.rows[c.uid])){if(a&&(!d.depth||d.depth<=b))break;(a||d.depth)&&$(c).css("display","none");if(d.has_children&&d.expanded)d.expanded=!1,this.update_expando(d.uid,!1),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1},expand_all:function(a){var b, +c,d;a?(a.expanded=!0,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid,!0),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})):(c=this.list.tBodies[0].firstChild,b=0);for(;c;){if(1==c.nodeType&&(d=this.rows[c.uid])){if(a&&d.depth<=b)break;$(c).css("display","");if(d.has_children&&!d.expanded)d.expanded=!0,this.update_expando(d.uid,!0),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1},update_expando:function(a,b){var c=document.getElementById("rcmexpando"+ +a);if(c)c.className=b?"expanded":"collapsed"},get_next_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.nextSibling:null;a&&(1!=a.nodeType||"none"==a.style.display);)a=a.nextSibling;return a},get_prev_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.previousSibling:null;a&&(1!=a.nodeType||"none"==a.style.display);)a=a.previousSibling;return a},get_first_row:function(){if(this.rowcount){var a,b,c=this.list.tBodies[0].rows; +for(a=0,b=c.length-1;ae?d:e;for(c in this.rows)this.rows[c].obj.rowIndex>= +f&&this.rows[c].obj.rowIndex<=d?this.in_selection(c)||this.highlight_row(c,!0):this.in_selection(c)&&!b&&this.highlight_row(c,!0)},in_selection:function(a){for(var b in this.selection)if(this.selection[b]==a)return!0;return!1},select_all:function(a){if(!this.rows||!this.rows.length)return!1;var b,c=this.selection.join(",");this.selection=[];for(b in this.rows)!a||!0==this.rows[b][a]?(this.last_selected=b,this.highlight_row(b,!0)):$(this.rows[b].obj).removeClass("selected").removeClass("unfocused"); +this.selection.join(",")!=c&&this.triggerEvent("select");this.focus();return!0},invert_selection:function(){if(!this.rows||!this.rows.length)return!1;var a,b=this.selection.join(",");for(a in this.rows)this.highlight_row(a,!0);this.selection.join(",")!=b&&this.triggerEvent("select");this.focus();return!0},clear_selection:function(a){var b,c=this.selection.length;if(a)for(b in this.selection){if(this.selection[b]==a){this.selection.splice(b,1);break}}else{for(b in this.selection)this.rows[this.selection[b]]&& +$(this.rows[this.selection[b]].obj).removeClass("selected").removeClass("unfocused");this.selection=[]}c&&!this.selection.length&&this.triggerEvent("select")},get_selection:function(){return this.selection},get_single_selection:function(){return 1==this.selection.length?this.selection[0]:null},highlight_row:function(a,b){if(this.rows[a]&&!b){if(1Number(this.frame.scrollTop)+Number(this.frame.offsetHeight))this.frame.scrollTop=c+Number(b.offsetHeight)-Number(this.frame.offsetHeight)}},drag_mouse_move:function(a){if("touchmove"==a.type)if(1==a.changedTouches.length)a=rcube_event.touchevent(a.changedTouches[0]);else return rcube_event.cancel(a); +if(this.drag_start){var b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||3>Math.abs(b.x-this.drag_mouse_start.x)&&3>Math.abs(b.y-this.drag_mouse_start.y))return!1;if(!this.draglayer)this.draglayer=$("
").attr("id","rcmdraglayer").css({position:"absolute",display:"none","z-index":2E3}).appendTo(document.body);var c,d,e=$.merge([],this.selection);for(c in e)d=e[c],this.rows[d].has_children&&!this.rows[d].expanded&&this.select_childs(d);this.draglayer.html("");for(c=0;cthis.subject_col||0<=this.subject_col&&this.subject_col==b){for(var f,g,h=e.childNodes[d].childNodes,b=0;b").text(d)); +break}b++}}this.draglayer.show();this.drag_active=!0;this.triggerEvent("dragstart")}this.drag_active&&this.draglayer&&(c=rcube_event.get_mouse_pos(a),this.draglayer.css({left:c.x+20+"px",top:c.y-5+(bw.ie?document.documentElement.scrollTop:0)+"px"}),this.triggerEvent("dragmove",a?a:window.event));return this.drag_start=!1},drag_mouse_up:function(a){document.onmousemove=null;if("touchend"==a.type&&1!=a.changedTouches.length)return rcube_event.cancel(a);this.draglayer&&this.draglayer.is(":visible")&& +(this.drag_start_pos?this.draglayer.animate(this.drag_start_pos,300,"swing").hide(20):this.draglayer.hide());this.drag_active&&this.focus();this.drag_active=!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"drag_mouse_up"});if(bw.iphone||bw.ipad)rcube_event.remove_listener({event:"touchmove",object:this,method:"drag_mouse_move"}),rcube_event.remove_listener({event:"touchend",object:this,method:"drag_mouse_up"}); +this.del_dragfix();this.triggerEvent("dragend");return rcube_event.cancel(a)},column_drag_mouse_move:function(a){if(this.drag_start){var b;b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||3>Math.abs(b.x-this.drag_mouse_start.x)&&3>Math.abs(b.y-this.drag_mouse_start.y))return!1;if(!this.col_draglayer){b=$(this.list).offset();var c=this.list.tHead.rows[0].cells;this.col_draglayer=$("
").attr("id","rcmcoldraglayer").css(b).css({position:"absolute","z-index":2001,"background-color":"white", +opacity:0.75,height:this.frame.offsetHeight-2+"px",width:this.frame.offsetWidth-2+"px"}).appendTo(document.body).append($("
").attr("id","rcmcolumnindicator").css({position:"absolute","border-right":"2px dotted #555","z-index":2002,height:this.frame.offsetHeight-2+"px"}));this.cols=[];this.list_pos=this.list_min_pos=b.left;for(b=0;b=this.cols[b]/2+this.list_pos+c)c+=this.cols[b];else break;0==b&&this.list_min_pos>d.x?c=this.list_min_pos-this.list_pos:!this.list.rowcount&&b==this.cols.length&&(c-=2);$("#rcmcolumnindicator").css({width:c+"px"});this.triggerEvent("column_dragmove",a?a:window.event)}return this.drag_start=!1},column_drag_mouse_up:function(a){document.onmousemove= +null;if(this.col_draglayer)this.col_draglayer.remove(),this.col_draglayer=null;this.col_drag_active&&this.focus();this.col_drag_active=!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"});this.del_dragfix();if(null!==this.selected_column&&this.cols&&this.cols.length){var b,c=0,d=rcube_event.get_mouse_pos(a);for(b=0;b=this.cols[b]/2+this.list_pos+ +c)c+=this.cols[b];else break;b!=this.selected_column&&b!=this.selected_column+1&&this.column_replace(this.selected_column,b)}this.triggerEvent("column_dragend");return rcube_event.cancel(a)},add_dragfix:function(){$("iframe").each(function(){$('
').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo(document.body)})},del_dragfix:function(){$("div.iframe-dragdrop-fix").each(function(){this.parentNode.removeChild(this)})}, +column_replace:function(a,b){var c;c=this.list.tHead.rows[0].cells;var d=c[a],e=c[b],f=document.createElement("td");e?c[0].parentNode.insertBefore(f,e):c[0].parentNode.appendChild(f);c[0].parentNode.replaceChild(d,f);for(r=0,c=this.list.tBodies[0].rows.length;ra?b-1:b:this.subject_cola&&b>=this.subject_col&&this.subject_col--;this.triggerEvent("column_replace")}};rcube_list_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;rcube_list_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_list_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;