Merge fixes from HEAD
authorMichael M Slusarz <slusarz@curecanti.org>
Thu, 4 Dec 2008 21:18:41 +0000 (14:18 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Thu, 4 Dec 2008 21:29:06 +0000 (14:29 -0700)
1.235     +3 -2      dimp/imp.php
1.297     +1 -1      dimp/js/ViewPort.js
1.275     +18 -15    dimp/js/src/ViewPort.js
1.88      +3 -4      dimp/lib/Views/ListMessages.php
1.298     +1 -1      dimp/js/ViewPort.js
1.276     +2 -2      dimp/js/src/ViewPort.js

imp/imp-dimp.php
imp/js/ViewPort.js
imp/js/src/ViewPort.js
imp/lib/Views/ListMessages.php

index 51ce218..241e902 100644 (file)
@@ -82,8 +82,9 @@ function _getListMessages($folder, $change)
         $search = Horde_Serialize::unserialize($search, SERIALIZE_JSON);
         $args += array(
             'search_uid' => $search->imapuid,
+            'search_view' => $search->view,
             'search_before' => intval(Util::getPost('search_before')),
-            'search_after' => intval(Util::getPost('search_size'))
+            'search_after' => intval(Util::getPost('search_after'))
         );
     } else {
         $args += array(
index b5f449f..a53dd44 100644 (file)
@@ -1 +1 @@
-var ViewPort=Class.create({initialize:function(A){A.content=$(A.content_container);A.empty=A.empty_container?$(A.empty_container):null;A.error=A.error_container?$(A.error_container):null;this.opts=A;this.scroller=new ViewPort_Scroller(this);this.template=new Template(A.template);this.current_req_lookup=$H();this.current_req=$H();this.fetch_hash=$H();this.slice_hash=$H();this.views=$H();this.showSplitPane(A.show_split_pane);this.isbusy=this.line_height=this.page_size=this.splitbar=this.splitbar_loc=this.uc_run=this.view=this.viewport_init=null;this.request_num=1},loadView:function(F,D,I,C){var E,H,G,B={},A;this._clearWait();if(this.page_size===null){A=this.getPageSize(this.show_split_pane?"default":"max");if(isNaN(A)){this.loadView.bind(this,F,D,I,C).defer();return}this.page_size=A}E=this._getBuffer();if(E){if(!C&&this.view){this.views.set(this.view,{buffer:E,offset:this.currentOffset()})}H=this.views.get(F)}else{G=true}if(C){B={background:true,view:F}}else{this.view=F;if(!this.viewport_init){this.viewport_init=1;this._renderViewport()}}if(H){this.setMetaData("additional_params",$H(D),F);this._updateContent(H.offset,B);if(!C){if(this.opts.onComplete){this.opts.onComplete()}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams({checkcache:1,rownum:this.currentOffset()+1}))}return true}else{if(!G){if(this.opts.onClearRows){this.opts.onClearRows(this.opts.content.childElements())}this.opts.content.update();this.scroller.clear()}}E=this._getBuffer(null,true);this.views.set(F,{buffer:E,offset:0});this.setMetaData({additional_params:$H(D)},F);if(I){B.search=I}else{B.offset=0}this._fetchBuffer(B);return false},deleteView:function(A){this.views.unset(A)},scrollTo:function(A,C){var B=this.scroller;B.noupdate=C;switch(this.isVisible(A)){case-1:B.moveScroll(A-1);break;case 1:B.moveScroll(Math.min(A,this.getMetaData("total_rows")-this.getPageSize()+1));break}B.noupdate=false},isVisible:function(A){var B=this.currentOffset();return(A<B+1)?-1:((A>(B+this.getPageSize("current")))?1:0)},reload:function(A){if(this.isFiltering()){this.filter.filter(null,A)}else{this._fetchBuffer({offset:this.currentOffset(),purge:true,params:A})}},remove:function(F,C){if(this.isbusy){this.remove.bind(this,F,cacheid,view).defer();return}if(!F.size()){return}C=C||{};this.isbusy=true;var A,B=0,E=F.get("div"),D=E.size();this.deselect(F);if(C.cacheid){this.setMetaData({cacheid:C.cacheid},C.view)}if(D){A={duration:0.3,to:0.01};E.each(function(G){if(++B==D){A.afterFinish=this._removeids.bind(this,F,C)}Effect.Fade(G,A)},this)}else{this._removeids(F,C)}},_removeids:function(B,A){this.setMetaData({total_rows:this.getMetaData("total_rows",A.view)-B.size()},A.view);if(this.opts.onRemoveRows){this.opts.onRemoveRows(B)}this._getBuffer().remove(B.get("rownum"));if(!A.noupdate){this.requestContentRefresh(this.currentOffset())}this.isbusy=false},addFilter:function(A,B){this.filter=new ViewPort_Filter(this,A,B)},runFilter:function(B,A){if(this.filter){this.filter.filter(Object.isUndefined(B)?null:B,A)}},isFiltering:function(){return this.filter?this.filter.isFiltering():false},stopFilter:function(A){if(this.filter){this.filter.clear(A)}},onResize:function(B,A){if(!this.uc_run||!this.opts.content.visible()){return}if(this.resizefunc){clearTimeout(this.resizefunc)}if(A){this._onResize(B)}else{this.resizefunc=this._onResize.bind(this,B).delay(0.1)}},_onResize:function(A){if(this.opts.onBeforeResize){this.opts.onBeforeResize()}this._renderViewport(A);if(this.opts.onAfterResize){this.opts.onAfterResize()}},requestContentRefresh:function(B){if(this._updateContent(B)){var A=this._getBuffer().isNearingLimit(B);if(A){this._fetchBuffer({offset:B,background:true,nearing:A})}return true}return false},_fetchBuffer:function(A){if(this.isbusy){this._fetchBuffer.bind(this,A).defer();return}this.isbusy=true;if(this.opts.onFetch&&!A.background){this.opts.onFetch()}var L=(A.view||this.view),G=this.opts.fetch_action,E,M=this._getBuffer(L),I,C,F=$H(A.params),D,P,Q,O,K,B,J,N,H;if(A.purge){F.set("purge",true)}if(A.search){J="search";N=A.search;C=this._lookbehind(L);F.update({search_before:C,search_after:M.bufferSize()-C})}else{J="rownum";N=A.offset+1;E=M.getAllRows();B=this._getSliceBounds(N,A.nearing,L);K=$A($R(B.start,B.end)).diff(E);if(!A.purge&&!K.size()){this.isbusy=false;return}F.update({slice_start:B.start,slice_end:B.end})}F.set(J,Object.toJSON(N));O=[L,J,N];if(this.isFiltering()){G=this.filter.getAction();F=this.filter.addFilterParams(F);O.push(F)}P=O.toJSON();D=this.fetch_hash.get(P);I=this.current_req.get(L);if(I){if(D&&I.get(D)){if(++I.get(D).count==4){this._displayFetchError();this._removeRequest(L,D);this.isbusy=false;return}}else{if(J=="rownum"){H=$A($R(N,N+this.getPageSize())).diff(E);if(!H.size()){this.isbusy=false;return}Q=I.keys().numericSort().find(function(R){var S=I.get(R).rlist;H=H.diff(S);if(!H.size()){return true}K=K.diff(S)});if(Q){if(!A.background){this._addRequest(L,Q,{background:false,offset:N-1})}this.isbusy=false;return}else{if(!A.background){I.keys().each(function(R){this._addRequest(L,R,{background:true})},this)}}}}}if(!this.opts.norows&&K){F.set("rows",K.toJSON())}if(!D){D=this.fetch_hash.set(P,this.request_num++)}F.set("request_id",D);this._addRequest(L,D,{background:A.background,offset:N-1,rlist:K});this.opts.ajaxRequest(G,this.addRequestParams(F,{noslice:true,view:L}));this._handleWait();this.isbusy=false},_getSliceBounds:function(C,D,A){var E=this._getBuffer(A).bufferSize(),B={};switch(D){case"bottom":B.start=C+this.getPageSize();B.end=B.start+E;break;case"top":B.start=Math.max(C-E,1);B.end=C;break;default:B.start=Math.max(C-this._lookbehind(A),1);B.end=B.start+E;break}return B},_lookbehind:function(A){return parseInt(0.4*this._getBuffer(A).bufferSize(),10)},addRequestParams:function(A,B){B=B||{};var E=this.getMetaData("cacheid",B.view),C=this.getMetaData("additional_params",B.view),D;if(E){C.update({cacheid:E})}if(!B.noslice){D=this._getSliceBounds(this.currentOffset(),null,B.view);C.update({slice_start:D.start,slice_end:D.end})}return C.merge(A)},ajaxResponse:function(E){if(this.isbusy){this.ajaxResponse.bind(this,E).defer();return}this.isbusy=true;this._clearWait();var A,D,B,F,C,H,G={};if(E.type=="slice"){F=E.data;C=Object.keys(F);C.each(function(I){F[I].view=E.id;G[I]=F[I].rownum});A=this._getBuffer(E.id);A.update(F,G,{slice:true});if(this.opts.onEndFetch){this.opts.onEndFetch()}D=this.slice_hash.get(E.request_id);if(D){D(new ViewPort_Selection(A,"uid",C));this.slice_hash.unset(E.request_id)}this.isbusy=false;return}H=(E.request_id)?this.current_req_lookup.get(E.request_id):E.id;D=this.current_req.get(H);if(D&&E.request_id){B=D.get(E.request_id)}if(this.viewport_init){this.viewport_init=2}A=this._getBuffer(H);A.update(E.data,E.rowlist,{update:E.update});A.setMetaData($H(E.other).merge({cacheid:E.cacheid,label:E.label,total_rows:E.totalrows}));if(E.request_id){this._removeRequest(H,E.request_id)}this.isbusy=false;if(!(this.view==H||E.search)||(B&&B.background)||!this._updateContent((B&&B.offset)?B.offset:(E.rownum?parseInt(E.rownum)-1:this.currentOffset()))){return}if(this.opts.onComplete){this.opts.onComplete()}if(this.opts.onEndFetch){this.opts.onEndFetch()}},_addRequest:function(A,B,E){var D=this.current_req.get(A),C;if(!D){D=this.current_req.set(A,$H())}C=D.get(B);if(!C){C=D.set(B,{count:1})}["background","offset","rlist"].each(function(F){if(!Object.isUndefined(E[F])){C[F]=E[F]}});this.current_req_lookup.set(B,A)},_removeRequest:function(A,B){var C=this.current_req.get(A);if(C){C.unset(B);if(!C.size()){this.current_req.unset(A)}}this.current_req_lookup.unset(B)},_updateContent:function(F,C){C=C||{};if(!this._getBuffer(C.view).sliceLoaded(F)){this._fetchBuffer($H(C).merge({offset:F}).toObject());return false}if(!this.uc_run){this.uc_run=true;if(this.opts.onFirstContent){this.opts.onFirstContent()}}var G=this.opts.content,A=[],B=this.getPageSize(),E,D=this.getSelected();if(this.opts.onClearRows){this.opts.onClearRows(G.childElements())}this.scroller.updateSize();this.scrollTo(F+1,true);F=this.currentOffset();E=this.createSelection("rownum",$A($R(F+1,F+B)));if(E.size()){E.get("dataob").each(function(I){var H=Object.clone(I);if(H.bg){H.bg=I.bg.clone();if(D.contains("uid",H.vp_id)){H.bg.push(this.opts.selected_class)}H.bg_string=H.bg.join(" ")}A.push(this.template.evaluate(H))},this);G.update(A.join(""))}else{G.update((this.opts.empty&&this.viewport_init!=1)?this.opts.empty.innerHTML:"")}if(this.opts.onContent){this.opts.onContent(E)}return true},_displayFetchError:function(){if(this.opts.onFail){this.opts.onFail()}if(this.opts.error){this.opts.content.update(this.opts.error.innerHTML)}},_getSlice:function(B,E){var D={rangeslice:1,start:B.min(),length:B.size()},A,C;C=this.createSelection("rownum",B);if(B.size()==C.size()){return C}if(this.opts.onFetch){this.opts.onFetch()}if(E){A=this.request_num++;D.request_id=A;this.slice_hash.set(A,E)}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams(D,{noslice:true}));return false},_handleWait:function(A){this._clearWait();if(A&&this.opts.onWait){this.opts.onWait()}if(this.opts.viewport_wait){this.waitHandler=this._handleWait.bind(this,true).delay(this.opts.viewport_wait)}},_clearWait:function(){if(this.waitHandler){clearTimeout(this.waitHandler);this.waitHandler=null}},visibleRows:function(){return this.opts.content.childElements()},getMetaData:function(B,A){return this._getBuffer(A).getMetaData(B)},setMetaData:function(B,A){this._getBuffer(A).setMetaData(B)},_getBuffer:function(B,C){if(!C){var A=this.views.get(B||this.view);if(A){return A.buffer}}return new ViewPort_Buffer(this,this.opts.buffer_pages,this.opts.limit_factor)},currentOffset:function(){return this.scroller.currentOffset()},updateFlag:function(C,A,B){this._updateFlag(C,A,B,this.isFiltering());this._updateClass(C,A,B)},_updateFlag:function(D,A,C,B){D.get("dataob").each(function(E){if(C){E.bg.push(A)}else{E.bg.splice(E.bg.indexOf(A),1)}if(B){this._updateFlag(this.createSelection("uid",E.vp_id,E.view),A,C)}},this)},_updateClass:function(C,A,B){C.get("div").each(function(D){if(B){D.addClassName(A)}else{D.removeClassName(A)}})},_getLineHeight:function(){if(this.line_height){return this.line_height}var A=new Element("DIV",{className:this.opts.content_class}).insert(new Element("DIV",{className:this.opts.row_class})).hide();$(document.body).insert(A);this.line_height=A.getHeight();A.remove();return this.line_height},getPageSize:function(A){switch(A){case"current":return Math.min(this.page_size,this.getMetaData("total_rows"));case"default":return Math.max(parseInt(this.getPageSize("max")*0.45),5);case"max":return parseInt(this._getMaxHeight()/this._getLineHeight());default:return this.page_size}},_getMaxHeight:function(){return document.viewport.getHeight()-this.opts.content.viewportOffset()[1]},showSplitPane:function(A){this.show_split_pane=A;this.onResize(false,true)},_renderViewport:function(D){if(!this.viewport_init){return}if(!this.opts.content.offsetHeight){return this._renderViewport.bind(this,D).defer()}var E,B,H,C,G=$(this.opts.content),F=document.documentElement,A=this._getLineHeight();if(this.opts.split_pane){H=$(this.opts.split_pane);if(this.show_split_pane){if(!H.visible()){this._initSplitBar();this.page_size=(this.splitbar_loc)?this.splitbar_loc:this.getPageSize("default")}C=true}else{if(H.visible()){this.splitbar_loc=this.page_size;$(H,this.splitbar).invoke("hide")}}}if(!C){this.page_size=this.getPageSize("max")}B=A*this.page_size;G.setStyle({height:B+"px"});if(C){H.setStyle({height:(this._getMaxHeight()-B-A)+"px"}).show();this.splitbar.show()}else{if(E=F.scrollHeight-F.clientHeight){G.setStyle({height:(A*(this.page_size-1))+"px"})}}if(!D){this.scroller.onResize()}},_initSplitBar:function(){if(this.splitbar){return}this.splitbar=$(this.opts.splitbar);new Drag(this.splitbar,{constraint:"vertical",ghosting:true,onStart:function(){var A=this._getLineHeight();this.sp={lh:A,pos:$(this.opts.content).positionedOffset()[1],max:parseInt((this._getMaxHeight()-100)/A),lines:this.page_size}}.bind(this),snap:function(A,D,C){var B=parseInt((D-this.sp.pos)/this.sp.lh);if(B<1){B=1}else{if(B>this.sp.max){B=this.sp.max}}this.sp.lines=B;return[A,this.sp.pos+(B*this.sp.lh)]}.bind(this),onEnd:function(){this.page_size=this.sp.lines;this._renderViewport()}.bind(this)});this.splitbar.observe("dblclick",function(){this.page_size=this.getPageSize("default");this._renderViewport()}.bind(this))},createSelection:function(D,C,B){var A=this._getBuffer(B);return A?new ViewPort_Selection(A,D,C):new ViewPort_Selection(this._getBuffer(this.view))},getViewportSelection:function(B){var A=this._getBuffer(B);return this.createSelection("uid",A?A.getAllUIDs():[],B)},select:function(D,B){B=B||{};if(B.range){D=this._getSlice(D,this.select.bind(this));if(D===false){return}}var A=this._getBuffer(),C;if(!B.add){C=this.getSelected();A.deselect(C,true);this._updateClass(C,this.opts.selected_class,false)}A.select(D);this._updateClass(D,this.opts.selected_class,true);if(this.opts.selectCallback){this.opts.selectCallback(D,B)}},deselect:function(B,A){A=A||{};if(!B.size()){return}if(this._getBuffer().deselect(B,A&&A.clearall)){this._updateClass(B,this.opts.selected_class,false);if(this.opts.deselectCallback){this.opts.deselectCallback(B,A)}}},getSelected:function(){return Object.clone(this._getBuffer().getSelected())}}),ViewPort_Scroller=Class.create({initialize:function(A){this.vp=A},_createScrollBar:function(){if(this.scrollDiv){return false}var A=this.vp.opts.content;this.scrollDiv=new Element("DIV",{className:"sbdiv",style:"height:"+A.getHeight()+"px;"}).hide();A.insert({after:this.scrollDiv}).setStyle({marginRight:"-"+this.scrollDiv.getWidth()+"px"});this.scrollbar=new DimpSlider(this.scrollDiv,{buttonclass:{up:"sbup",down:"sbdown"},cursorclass:"sbcursor",onChange:this._onScroll.bind(this),onSlide:this.vp.opts.onSlide?this.vp.opts.onSlide:null,pagesize:this.vp.getPageSize(),totalsize:this.vp.getMetaData("total_rows")});A.observe(Prototype.Browser.Gecko?"DOMMouseScroll":"mousewheel",function(C){if(Prototype.Browser.Gecko&&C.eventPhase==2){return}var B=this.vp.getPageSize();B=(B>3)?3:B;this.moveScroll(this.currentOffset()+((C.wheelDelta>=0||C.detail<0)?(-1*B):B))}.bindAsEventListener(this));return true},onResize:function(){if(!this.scrollDiv){return}this.scrollsize=this.vp.opts.content.getHeight();this.scrollDiv.setStyle({height:this.scrollsize+"px"});this.updateSize();this.vp.requestContentRefresh(this.currentOffset())},updateSize:function(){if(!this._createScrollBar()){this.scrollbar.updateHandleLength(this.vp.getPageSize(),this.vp.getMetaData("total_rows"))}},clear:function(){if(this.scrollDiv){this.scrollbar.updateHandleLength(0,0)}},moveScroll:function(A){this._createScrollBar();this.scrollbar.setScrollPosition(A)},_onScroll:function(){if(!this.noupdate){if(this.vp.opts.onScroll){this.vp.opts.onScroll()}this.vp.requestContentRefresh(this.currentOffset());if(this.vp.opts.onScrollIdle){this.vp.opts.onScrollIdle()}}},currentOffset:function(){return this.scrollbar?this.scrollbar.getValue():0}}),ViewPort_Buffer=Class.create({initialize:function(B,C,A){this.bufferPages=C;this.limitFactor=A;this.vp=B;this.clear()},_limitTolerance:function(){return Math.round(this.bufferSize()*(this.limitFactor/100))},bufferSize:function(){return Math.round(Math.max(this.vp.getPageSize("max")+1,this.bufferPages*this.vp.getPageSize()))},update:function(C,A,B){C=$H(C);A=$H(A);B=B||{};if(B.slice){C.each(function(D){if(!this.data.get(D.key)){this.data.set(D.key,D.value);this.inc.set(D.key,true)}},this)}else{if(this.data.size()){this.data.update(C);if(this.inc.size()){C.keys().each(function(D){this.inc.unset(D)},this)}}else{this.data=C}}this.uidlist=(B.update)?A:(this.uidlist.size()?this.uidlist.merge(A):A);if(B.update){this.rowlist=$H()}A.each(function(D){this.rowlist.set(D.value,D.key)},this)},sliceLoaded:function(A){return!this._rangeCheck($A($R(A+1,Math.min(A+this.vp.getPageSize()-1,this.getMetaData("total_rows")))))},isNearingLimit:function(A){if(this.uidlist.size()!=this.getMetaData("total_rows")){if(A!=0&&this._rangeCheck($A($R(Math.max(A+1-this._limitTolerance(),1),A)))){return"top"}else{if(this._rangeCheck($A($R(A+1,Math.min(A+this._limitTolerance()+this.vp.getPageSize()-1,this.getMetaData("total_rows")))).reverse())){return"bottom"}}}return false},_rangeCheck:function(A){var B=this.inc.size();return A.any(function(D){var C=this.rowlist.get(D);return(Object.isUndefined(C)||(B&&this.inc.get(C)))},this)},getData:function(A){return A.collect(function(B){var C=this.data.get(B);if(!Object.isUndefined(C)){C.domid="vp_row"+B;C.rownum=this.uidlist.get(B);C.vp_id=B;return C}},this).compact()},getAllUIDs:function(){return this.uidlist.keys()},getAllRows:function(){return this.rowlist.keys()},rowsToUIDs:function(A){return A.collect(function(B){return this.rowlist.get(B)},this).compact()},select:function(A){this.selected.add("uid",A.get("uid"))},deselect:function(C,B){var A=this.selected.size();if(B){this.selected.clear()}else{this.selected.remove("uid",C.get("uid"))}return A!=this.selected.size()},getSelected:function(){return this.selected},remove:function(B){var C,D=this.rowlist.size(),A=0;C=D-B.size();return $A($R(B.min(),D)).each(function(G){var F=this.rowlist.get(G),E;if(B.include(G)){this.data.unset(F);this.uidlist.unset(F);A++}else{E=G-A;this.rowlist.set(E,F);this.uidlist.set(F,E)}if(G>C){this.rowlist.unset(G)}},this)},clear:function(){this.data=$H();this.inc=$H();this.mdata=$H({total_rows:0});this.rowlist=$H();this.selected=new ViewPort_Selection(this);this.uidlist=$H()},getMetaData:function(A){return this.mdata.get(A)},setMetaData:function(A){this.mdata.update(A)}}),ViewPort_Filter=Class.create({initialize:function(A,B,C){this.vp=A;this.action=B;this.callback=C;this.filterid=0;this.filtering=this.last_filter=this.last_folder=this.last_folder_params=null},filter:function(C,B){B=B||{};if(C===null){C=this.last_filter}else{C=C.toLowerCase();if(C==this.last_filter){return}}if(!C){this.clear();return}this.last_filter=C;if(this.filtering){this.vp._fetchBuffer({offset:0,params:B});return}this.filtering=++this.filterid+"%search%";this.last_folder=this.vp.view;this.last_folder_params=this.vp.getMetaData("additional_params").merge(B);var D=this.vp.opts.content,A;A=D.childElements().findAll(function(E){return E.collectTextNodes().toLowerCase().indexOf(C)==-1});if(this.vp.opts.onClearRows){this.vp.opts.onClearRows(A)}A.invoke("remove");this.vp.scroller.clear();if(this.vp.opts.empty&&!D.childElements().size()){D.update(this.vp.opts.empty.innerHTML)}this.vp.loadView(this.filtering,this.last_folder_params)},isFiltering:function(){return this.filtering},getAction:function(){return this.action},addFilterParams:function(A){if(!this.filtering){return A}A.update({filter:this.last_filter});if(this.callback){A.update(this.callback())}return A},clear:function(A){if(this.filtering){this.filtering=null;if(!A){this.vp.loadView(this.last_folder,this.last_folder_params)}this.vp.deleteView(this.filtering);this.last_filter=this.last_folder=null}}}),ViewPort_Selection=Class.create({initialize:function(A,C,B){this.buffer=A;this.clear();if(!Object.isUndefined(C)){this.add(C,B)}this.viewport_selection=true},add:function(A,B){var C=this._convert(A,B);this.data=(this.data.size())?this.data.concat(C).uniq():C},remove:function(A,B){this.data=this.data.diff(this._convert(A,B))},_convert:function(A,B){B=Object.isArray(B)?B:[B];switch(A){case"dataob":return B.pluck("vp_id");case"div":return B.pluck("id").invoke("substring",6);case"domid":return B.invoke("substring",6);case"rownum":return this.buffer.rowsToUIDs(B);case"uid":return B}},clear:function(){this.data=[]},get:function(A){A=Object.isUndefined(A)?"uid":A;if(A=="uid"){return this.data}var B=this.buffer.getData(this.data);switch(A){case"dataob":return B;case"div":return B.pluck("domid").collect(function(C){return $(C)}).compact();case"domid":return B.pluck("domid");case"rownum":return B.pluck("rownum")}},contains:function(A,B){return this.data.include(this._convert(A,B).first())},search:function(A){return new ViewPort_Selection(this.buffer,"uid",this.get("dataob").findAll(function(B){return $H(A).all(function(C){return $H(C.value).all(function(D){switch(D.key){case"equal":case"not":var E=B[C.key]&&D.value.include(B[C.key]);return(D.key=="equal")?E:!E;case"regex":return B[C.key].match(D.value)}})})}).pluck("vp_id"))},size:function(){return this.data.size()},set:function(A){this.get("dataob").each(function(B){$H(A).each(function(C){B[C.key]=C.value})})}});Object.extend(Array.prototype,{diff:function(A){return this.select(function(B){return!A.include(B)})},numericSort:function(){return this.sort(function(B,A){return(B>A)?1:((B<A)?-1:0)})}});
\ No newline at end of file
+var ViewPort=Class.create({initialize:function(A){A.content=$(A.content_container);A.empty=A.empty_container?$(A.empty_container):null;A.error=A.error_container?$(A.error_container):null;this.opts=A;this.scroller=new ViewPort_Scroller(this);this.template=new Template(A.template);this.current_req_lookup=$H();this.current_req=$H();this.fetch_hash=$H();this.slice_hash=$H();this.views=$H();this.showSplitPane(A.show_split_pane);this.isbusy=this.line_height=this.page_size=this.splitbar=this.splitbar_loc=this.uc_run=this.view=this.viewport_init=null;this.request_num=1},loadView:function(F,D,I,C){var E,H,G,B={},A;this._clearWait();if(this.page_size===null){A=this.getPageSize(this.show_split_pane?"default":"max");if(isNaN(A)){this.loadView.bind(this,F,D,I,C).defer();return}this.page_size=A}E=this._getBuffer();if(E){if(!C&&this.view){this.views.set(this.view,{buffer:E,offset:this.currentOffset()})}H=this.views.get(F)}else{G=true}if(C){B={background:true,view:F}}else{this.view=F;if(!this.viewport_init){this.viewport_init=1;this._renderViewport()}}if(H){this.setMetaData("additional_params",$H(D),F);this._updateContent(H.offset,B);if(!C){if(this.opts.onComplete){this.opts.onComplete()}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams({checkcache:1,rownum:this.currentOffset()+1}))}return true}else{if(!G){if(this.opts.onClearRows){this.opts.onClearRows(this.opts.content.childElements())}this.opts.content.update();this.scroller.clear()}}E=this._getBuffer(null,true);this.views.set(F,{buffer:E,offset:0});this.setMetaData({additional_params:$H(D)},F);if(I){B.search=I}else{B.offset=0}this._fetchBuffer(B);return false},deleteView:function(A){this.views.unset(A)},scrollTo:function(A,C){var B=this.scroller;B.noupdate=C;switch(this.isVisible(A)){case-1:B.moveScroll(A-1);break;case 1:B.moveScroll(Math.min(A,this.getMetaData("total_rows")-this.getPageSize()+1));break}B.noupdate=false},isVisible:function(A){var B=this.currentOffset();return(A<B+1)?-1:((A>(B+this.getPageSize("current")))?1:0)},reload:function(A){if(this.isFiltering()){this.filter.filter(null,A)}else{this._fetchBuffer({offset:this.currentOffset(),purge:true,params:A})}},remove:function(F,C){if(this.isbusy){this.remove.bind(this,F,cacheid,view).defer();return}if(!F.size()){return}C=C||{};this.isbusy=true;var A,B=0,E=F.get("div"),D=E.size();this.deselect(F);if(C.cacheid){this.setMetaData({cacheid:C.cacheid},C.view)}if(D){A={duration:0.3,to:0.01};E.each(function(G){if(++B==D){A.afterFinish=this._removeids.bind(this,F,C)}Effect.Fade(G,A)},this)}else{this._removeids(F,C)}},_removeids:function(B,A){this.setMetaData({total_rows:this.getMetaData("total_rows",A.view)-B.size()},A.view);if(this.opts.onRemoveRows){this.opts.onRemoveRows(B)}this._getBuffer().remove(B.get("rownum"));if(!A.noupdate){this.requestContentRefresh(this.currentOffset())}this.isbusy=false},addFilter:function(A,B){this.filter=new ViewPort_Filter(this,A,B)},runFilter:function(B,A){if(this.filter){this.filter.filter(Object.isUndefined(B)?null:B,A)}},isFiltering:function(){return this.filter?this.filter.isFiltering():false},stopFilter:function(A){if(this.filter){this.filter.clear(A)}},onResize:function(B,A){if(!this.uc_run||!this.opts.content.visible()){return}if(this.resizefunc){clearTimeout(this.resizefunc)}if(A){this._onResize(B)}else{this.resizefunc=this._onResize.bind(this,B).delay(0.1)}},_onResize:function(A){if(this.opts.onBeforeResize){this.opts.onBeforeResize()}this._renderViewport(A);if(this.opts.onAfterResize){this.opts.onAfterResize()}},requestContentRefresh:function(B){if(this._updateContent(B)){var A=this._getBuffer().isNearingLimit(B);if(A){this._fetchBuffer({offset:B,background:true,nearing:A})}return true}return false},_fetchBuffer:function(A){if(this.isbusy){this._fetchBuffer.bind(this,A).defer();return}this.isbusy=true;if(this.opts.onFetch&&!A.background){this.opts.onFetch()}var L=(A.view||this.view),G=this.opts.fetch_action,E,M=this._getBuffer(L),I,C,F=$H(A.params),D,P,Q,O,K,B,J,N,H;if(A.purge){F.set("purge",true)}if(A.search){J="search";N=A.search;C=this._lookbehind(L);F.update({search_before:C,search_after:M.bufferSize()-C})}else{J="rownum";N=A.offset+1;E=M.getAllRows();B=this._getSliceBounds(N,A.nearing,L);K=$A($R(B.start,B.end)).diff(E);if(!A.purge&&!K.size()){this.isbusy=false;return}F.update({slice_start:B.start,slice_end:B.end})}F.set(J,Object.toJSON(N));O=[L,J,N];if(this.isFiltering()){G=this.filter.getAction();F=this.filter.addFilterParams(F);O.push(F)}P=O.toJSON();D=this.fetch_hash.get(P);I=this.current_req.get(L);if(I){if(D&&I.get(D)){if(++I.get(D).count==4){this._displayFetchError();this._removeRequest(L,D);this.isbusy=false;return}}else{if(J=="rownum"){H=$A($R(N,N+this.getPageSize())).diff(E);if(!H.size()){this.isbusy=false;return}Q=I.keys().numericSort().find(function(R){var S=I.get(R).rlist;H=H.diff(S);if(!H.size()){return true}K=K.diff(S)});if(Q){if(!A.background){this._addRequest(L,Q,{background:false,offset:N-1})}this.isbusy=false;return}else{if(!A.background){I.keys().each(function(R){this._addRequest(L,R,{background:true})},this)}}}}}if(!this.opts.norows&&K){F.set("rows",K.toJSON())}if(!D){D=this.fetch_hash.set(P,this.request_num++)}F.set("request_id",D);this._addRequest(L,D,{background:A.background,offset:N-1,rlist:K});this.opts.ajaxRequest(G,this.addRequestParams(F,{noslice:true,view:L}));this._handleWait();this.isbusy=false},_getSliceBounds:function(C,D,A){var E=this._getBuffer(A).bufferSize(),B={};switch(D){case"bottom":B.start=C+this.getPageSize();B.end=B.start+E;break;case"top":B.start=Math.max(C-E,1);B.end=C;break;default:B.start=Math.max(C-this._lookbehind(A),1);B.end=B.start+E;break}return B},_lookbehind:function(A){return parseInt(0.4*this._getBuffer(A).bufferSize(),10)},addRequestParams:function(A,B){B=B||{};var E=this.getMetaData("cacheid",B.view),C=this.getMetaData("additional_params",B.view),D;if(E){C.update({cacheid:E})}if(!B.noslice){D=this._getSliceBounds(this.currentOffset(),null,B.view);C.update({slice_start:D.start,slice_end:D.end})}return C.merge(A)},ajaxResponse:function(E){if(this.isbusy){this.ajaxResponse.bind(this,E).defer();return}this.isbusy=true;this._clearWait();var A,D,B,F,C,H,G={};if(E.type=="slice"){F=E.data;C=Object.keys(F);C.each(function(I){F[I].view=E.id;G[I]=F[I].rownum});A=this._getBuffer(E.id);A.update(F,G,{slice:true});if(this.opts.onEndFetch){this.opts.onEndFetch()}D=this.slice_hash.get(E.request_id);if(D){D(new ViewPort_Selection(A,"uid",C));this.slice_hash.unset(E.request_id)}this.isbusy=false;return}H=(E.request_id)?this.current_req_lookup.get(E.request_id):E.id;D=this.current_req.get(H);if(D&&E.request_id){B=D.get(E.request_id)}if(this.viewport_init){this.viewport_init=2}A=this._getBuffer(H);A.update(E.data,E.rowlist,{update:E.update});A.setMetaData($H(E.other).merge({cacheid:E.cacheid,label:E.label,total_rows:E.totalrows}));if(E.request_id){this._removeRequest(H,E.request_id)}this.isbusy=false;if(!(this.view==H||E.search)||(B&&B.background)||!this._updateContent((B&&B.offset)?B.offset:(E.rownum?parseInt(E.rownum)-1:this.currentOffset()))){return}if(this.opts.onComplete){this.opts.onComplete()}if(this.opts.onEndFetch){this.opts.onEndFetch()}},_addRequest:function(A,B,E){var D=this.current_req.get(A),C;if(!D){D=this.current_req.set(A,$H())}C=D.get(B);if(!C){C=D.set(B,{count:1})}["background","offset","rlist"].each(function(F){if(!Object.isUndefined(E[F])){C[F]=E[F]}});this.current_req_lookup.set(B,A)},_removeRequest:function(A,B){var C=this.current_req.get(A);if(C){C.unset(B);if(!C.size()){this.current_req.unset(A)}}this.current_req_lookup.unset(B)},_updateContent:function(F,C){C=C||{};if(!this._getBuffer(C.view).sliceLoaded(F)){this._fetchBuffer($H(C).merge({offset:F}).toObject());return false}if(!this.uc_run){this.uc_run=true;if(this.opts.onFirstContent){this.opts.onFirstContent()}}var G=this.opts.content,A=[],B=this.getPageSize(),E,D=this.getSelected();if(this.opts.onClearRows){this.opts.onClearRows(G.childElements())}this.scroller.updateSize();this.scrollTo(F+1,true);F=this.currentOffset();E=this.createSelection("rownum",$A($R(F+1,F+B)));if(E.size()){E.get("dataob").each(function(I){var H=Object.clone(I);if(H.bg){H.bg=I.bg.clone();if(D.contains("uid",H.vp_id)){H.bg.push(this.opts.selected_class)}H.bg_string=H.bg.join(" ")}A.push(this.template.evaluate(H))},this);G.update(A.join(""))}else{G.update((this.opts.empty&&this.viewport_init!=1)?this.opts.empty.innerHTML:"")}if(this.opts.onContent){this.opts.onContent(E)}return true},_displayFetchError:function(){if(this.opts.onFail){this.opts.onFail()}if(this.opts.error){this.opts.content.update(this.opts.error.innerHTML)}},_getSlice:function(B,E){var D={rangeslice:1,start:B.min(),length:B.size()},A,C;C=this.createSelection("rownum",B);if(B.size()==C.size()){return C}if(this.opts.onFetch){this.opts.onFetch()}if(E){A=this.request_num++;D.request_id=A;this.slice_hash.set(A,E)}this.opts.ajaxRequest(this.opts.fetch_action,this.addRequestParams(D,{noslice:true}));return false},_handleWait:function(A){this._clearWait();if(A&&this.opts.onWait){this.opts.onWait()}if(this.opts.viewport_wait){this.waitHandler=this._handleWait.bind(this,true).delay(this.opts.viewport_wait)}},_clearWait:function(){if(this.waitHandler){clearTimeout(this.waitHandler);this.waitHandler=null}},visibleRows:function(){return this.opts.content.childElements()},getMetaData:function(B,A){return this._getBuffer(A).getMetaData(B)},setMetaData:function(B,A){this._getBuffer(A).setMetaData(B)},_getBuffer:function(B,C){if(!C){var A=this.views.get(B||this.view);if(A){return A.buffer}}return new ViewPort_Buffer(this,this.opts.buffer_pages,this.opts.limit_factor)},currentOffset:function(){return this.scroller.currentOffset()},updateFlag:function(C,A,B){this._updateFlag(C,A,B,this.isFiltering());this._updateClass(C,A,B)},_updateFlag:function(D,A,C,B){D.get("dataob").each(function(E){if(C){E.bg.push(A)}else{E.bg.splice(E.bg.indexOf(A),1)}if(B){this._updateFlag(this.createSelection("uid",E.vp_id,E.view),A,C)}},this)},_updateClass:function(C,A,B){C.get("div").each(function(D){if(B){D.addClassName(A)}else{D.removeClassName(A)}})},_getLineHeight:function(){if(this.line_height){return this.line_height}var A=new Element("DIV",{className:this.opts.content_class}).insert(new Element("DIV",{className:this.opts.row_class})).hide();$(document.body).insert(A);this.line_height=A.getHeight();A.remove();return this.line_height},getPageSize:function(A){switch(A){case"current":return Math.min(this.page_size,this.getMetaData("total_rows"));case"default":return Math.max(parseInt(this.getPageSize("max")*0.45),5);case"max":return parseInt(this._getMaxHeight()/this._getLineHeight());default:return this.page_size}},_getMaxHeight:function(){return document.viewport.getHeight()-this.opts.content.viewportOffset()[1]},showSplitPane:function(A){this.show_split_pane=A;this.onResize(false,true)},_renderViewport:function(D){if(!this.viewport_init){return}if(!this.opts.content.offsetHeight){return this._renderViewport.bind(this,D).defer()}var E,B,H,C,G=$(this.opts.content),F=document.documentElement,A=this._getLineHeight();if(this.opts.split_pane){H=$(this.opts.split_pane);if(this.show_split_pane){if(!H.visible()){this._initSplitBar();this.page_size=(this.splitbar_loc)?this.splitbar_loc:this.getPageSize("default")}C=true}else{if(H.visible()){this.splitbar_loc=this.page_size;$(H,this.splitbar).invoke("hide")}}}if(!C){this.page_size=this.getPageSize("max")}B=A*this.page_size;G.setStyle({height:B+"px"});if(C){H.setStyle({height:(this._getMaxHeight()-B-A)+"px"}).show();this.splitbar.show()}else{if(E=F.scrollHeight-F.clientHeight){G.setStyle({height:(A*(this.page_size-1))+"px"})}}if(!D){this.scroller.onResize()}},_initSplitBar:function(){if(this.splitbar){return}this.splitbar=$(this.opts.splitbar);new Drag(this.splitbar,{constraint:"vertical",ghosting:true,onStart:function(){var A=this._getLineHeight();this.sp={lh:A,pos:$(this.opts.content).positionedOffset()[1],max:parseInt((this._getMaxHeight()-100)/A),lines:this.page_size}}.bind(this),snap:function(A,D,C){var B=parseInt((D-this.sp.pos)/this.sp.lh);if(B<1){B=1}else{if(B>this.sp.max){B=this.sp.max}}this.sp.lines=B;return[A,this.sp.pos+(B*this.sp.lh)]}.bind(this),onEnd:function(){this.page_size=this.sp.lines;this._renderViewport()}.bind(this)});this.splitbar.observe("dblclick",function(){this.page_size=this.getPageSize("default");this._renderViewport()}.bind(this))},createSelection:function(D,C,B){var A=this._getBuffer(B);return A?new ViewPort_Selection(A,D,C):new ViewPort_Selection(this._getBuffer(this.view))},getViewportSelection:function(B){var A=this._getBuffer(B);return this.createSelection("uid",A?A.getAllUIDs():[],B)},select:function(D,B){B=B||{};if(B.range){D=this._getSlice(D,this.select.bind(this));if(D===false){return}}var A=this._getBuffer(),C;if(!B.add){C=this.getSelected();A.deselect(C,true);this._updateClass(C,this.opts.selected_class,false)}A.select(D);this._updateClass(D,this.opts.selected_class,true);if(this.opts.selectCallback){this.opts.selectCallback(D,B)}},deselect:function(B,A){A=A||{};if(!B.size()){return}if(this._getBuffer().deselect(B,A&&A.clearall)){this._updateClass(B,this.opts.selected_class,false);if(this.opts.deselectCallback){this.opts.deselectCallback(B,A)}}},getSelected:function(){return Object.clone(this._getBuffer().getSelected())}}),ViewPort_Scroller=Class.create({initialize:function(A){this.vp=A},_createScrollBar:function(){if(this.scrollDiv){return false}var A=this.vp.opts.content;this.scrollDiv=new Element("DIV",{className:"sbdiv",style:"height:"+A.getHeight()+"px;"}).hide();A.insert({after:this.scrollDiv}).setStyle({marginRight:"-"+this.scrollDiv.getWidth()+"px"});this.scrollbar=new DimpSlider(this.scrollDiv,{buttonclass:{up:"sbup",down:"sbdown"},cursorclass:"sbcursor",onChange:this._onScroll.bind(this),onSlide:this.vp.opts.onSlide?this.vp.opts.onSlide:null,pagesize:this.vp.getPageSize(),totalsize:this.vp.getMetaData("total_rows")});A.observe(Prototype.Browser.Gecko?"DOMMouseScroll":"mousewheel",function(C){if(Prototype.Browser.Gecko&&C.eventPhase==2){return}var B=this.vp.getPageSize();B=(B>3)?3:B;this.moveScroll(this.currentOffset()+((C.wheelDelta>=0||C.detail<0)?(-1*B):B))}.bindAsEventListener(this));return true},onResize:function(){if(!this.scrollDiv){return}this.scrollsize=this.vp.opts.content.getHeight();this.scrollDiv.setStyle({height:this.scrollsize+"px"});this.updateSize();this.vp.requestContentRefresh(this.currentOffset())},updateSize:function(){if(!this._createScrollBar()){this.scrollbar.updateHandleLength(this.vp.getPageSize(),this.vp.getMetaData("total_rows"))}},clear:function(){if(this.scrollDiv){this.scrollbar.updateHandleLength(0,0)}},moveScroll:function(A){this._createScrollBar();this.scrollbar.setScrollPosition(A)},_onScroll:function(){if(!this.noupdate){if(this.vp.opts.onScroll){this.vp.opts.onScroll()}this.vp.requestContentRefresh(this.currentOffset());if(this.vp.opts.onScrollIdle){this.vp.opts.onScrollIdle()}}},currentOffset:function(){return this.scrollbar?this.scrollbar.getValue():0}}),ViewPort_Buffer=Class.create({initialize:function(B,C,A){this.bufferPages=C;this.limitFactor=A;this.vp=B;this.clear()},_limitTolerance:function(){return Math.round(this.bufferSize()*(this.limitFactor/100))},bufferSize:function(){return Math.round(Math.max(this.vp.getPageSize("max")+1,this.bufferPages*this.vp.getPageSize()))},update:function(C,A,B){C=$H(C);A=$H(A);B=B||{};if(B.slice){C.each(function(D){if(!this.data.get(D.key)){this.data.set(D.key,D.value);this.inc.set(D.key,true)}},this)}else{if(this.data.size()){this.data.update(C);if(this.inc.size()){C.keys().each(function(D){this.inc.unset(D)},this)}}else{this.data=C}}this.uidlist=(B.update)?A:(this.uidlist.size()?this.uidlist.merge(A):A);if(B.update){this.rowlist=$H()}A.each(function(D){this.rowlist.set(D.value,D.key)},this)},sliceLoaded:function(A){return!this._rangeCheck($A($R(A+1,Math.min(A+this.vp.getPageSize()-1,this.getMetaData("total_rows")))))},isNearingLimit:function(A){if(this.uidlist.size()!=this.getMetaData("total_rows")){if(A!=0&&this._rangeCheck($A($R(Math.max(A+1-this._limitTolerance(),1),A)))){return"top"}else{if(this._rangeCheck($A($R(A+1,Math.min(A+this._limitTolerance()+this.vp.getPageSize()-1,this.getMetaData("total_rows")))).reverse())){return"bottom"}}}return false},_rangeCheck:function(A){var B=this.inc.size();return A.any(function(D){var C=this.rowlist.get(D);return(Object.isUndefined(C)||(B&&this.inc.get(C)))},this)},getData:function(A){return A.collect(function(B){var C=this.data.get(B);if(!Object.isUndefined(C)){C.domid="vp_row"+B;C.rownum=this.uidlist.get(B);C.vp_id=B;return C}},this).compact()},getAllUIDs:function(){return this.uidlist.keys()},getAllRows:function(){return this.rowlist.keys()},rowsToUIDs:function(A){return A.collect(function(B){return this.rowlist.get(B)},this).compact()},select:function(A){this.selected.add("uid",A.get("uid"))},deselect:function(C,B){var A=this.selected.size();if(B){this.selected.clear()}else{this.selected.remove("uid",C.get("uid"))}return A!=this.selected.size()},getSelected:function(){return this.selected},remove:function(B){var C,D=this.rowlist.size(),A=0;C=D-B.size();return this.rowlist.keys().each(function(F){if(B.include(F)){this.data.unset(id);this.uidlist.unset(id);A++}else{var E=F-A;this.rowlist.set(E,id);this.uidlist.set(id,E)}if(F>C){this.rowlist.unset(F)}},this)},clear:function(){this.data=$H();this.inc=$H();this.mdata=$H({total_rows:0});this.rowlist=$H();this.selected=new ViewPort_Selection(this);this.uidlist=$H()},getMetaData:function(A){return this.mdata.get(A)},setMetaData:function(A){this.mdata.update(A)}}),ViewPort_Filter=Class.create({initialize:function(A,B,C){this.vp=A;this.action=B;this.callback=C;this.filterid=0;this.filtering=this.last_filter=this.last_folder=this.last_folder_params=null},filter:function(C,B){B=B||{};if(C===null){C=this.last_filter}else{C=C.toLowerCase();if(C==this.last_filter){return}}if(!C){this.clear();return}this.last_filter=C;if(this.filtering){this.vp._fetchBuffer({offset:0,params:B});return}this.filtering=++this.filterid+"%search%";this.last_folder=this.vp.view;this.last_folder_params=this.vp.getMetaData("additional_params").merge(B);var D=this.vp.opts.content,A;A=D.childElements().findAll(function(E){return E.collectTextNodes().toLowerCase().indexOf(C)==-1});if(this.vp.opts.onClearRows){this.vp.opts.onClearRows(A)}A.invoke("remove");this.vp.scroller.clear();if(this.vp.opts.empty&&!D.childElements().size()){D.update(this.vp.opts.empty.innerHTML)}this.vp.loadView(this.filtering,this.last_folder_params)},isFiltering:function(){return this.filtering},getAction:function(){return this.action},addFilterParams:function(A){if(!this.filtering){return A}A.update({filter:this.last_filter});if(this.callback){A.update(this.callback())}return A},clear:function(A){if(this.filtering){this.filtering=null;if(!A){this.vp.loadView(this.last_folder,this.last_folder_params)}this.vp.deleteView(this.filtering);this.last_filter=this.last_folder=null}}}),ViewPort_Selection=Class.create({initialize:function(A,C,B){this.buffer=A;this.clear();if(!Object.isUndefined(C)){this.add(C,B)}this.viewport_selection=true},add:function(A,B){var C=this._convert(A,B);this.data=(this.data.size())?this.data.concat(C).uniq():C},remove:function(A,B){this.data=this.data.diff(this._convert(A,B))},_convert:function(A,B){B=Object.isArray(B)?B:[B];switch(A){case"dataob":return B.pluck("vp_id");case"div":return B.pluck("id").invoke("substring",6);case"domid":return B.invoke("substring",6);case"rownum":return this.buffer.rowsToUIDs(B);case"uid":return B}},clear:function(){this.data=[]},get:function(A){A=Object.isUndefined(A)?"uid":A;if(A=="uid"){return this.data}var B=this.buffer.getData(this.data);switch(A){case"dataob":return B;case"div":return B.pluck("domid").collect(function(C){return $(C)}).compact();case"domid":return B.pluck("domid");case"rownum":return B.pluck("rownum")}},contains:function(A,B){return this.data.include(this._convert(A,B).first())},search:function(A){return new ViewPort_Selection(this.buffer,"uid",this.get("dataob").findAll(function(B){return $H(A).all(function(C){return $H(C.value).all(function(D){switch(D.key){case"equal":case"not":var E=B[C.key]&&D.value.include(B[C.key]);return(D.key=="equal")?E:!E;case"regex":return B[C.key].match(D.value)}})})}).pluck("vp_id"))},size:function(){return this.data.size()},set:function(A){this.get("dataob").each(function(B){$H(A).each(function(C){B[C.key]=C.value})})}});Object.extend(Array.prototype,{diff:function(A){return this.select(function(B){return!A.include(B)})},numericSort:function(){return this.sort(function(B,A){return(B>A)?1:((B<A)?-1:0)})}});
\ No newline at end of file
index ad4c977..034df3c 100644 (file)
@@ -1311,24 +1311,26 @@ ViewPort_Buffer = Class.create({
     // rownums = (array) Array of row numbers to remove.
     remove: function(rownums)
     {
-        var newsize,
+        var minrow = rownums.min(),
+            newsize,
             rowsize = this.rowlist.size(),
             rowsubtract = 0;
         newsize = rowsize - rownums.size();
 
-        return $A($R(rownums.min(), rowsize)).each(function(n) {
-            var id = this.rowlist.get(n), r;
-            if (rownums.include(n)) {
-                this.data.unset(id);
-                this.uidlist.unset(id);
-                rowsubtract++;
-            } else {
-                r = n - rowsubtract;
-                this.rowlist.set(r, id);
-                this.uidlist.set(id, r);
-            }
-            if (n > newsize) {
-                this.rowlist.unset(n);
+        return this.rowlist.keys().each(function(n) {
+            if (n >= minrow) {
+                if (rownums.include(n)) {
+                    this.data.unset(id);
+                    this.uidlist.unset(id);
+                    rowsubtract++;
+                } else if (rowsubtract) {
+                    var r = n - rowsubtract;
+                    this.rowlist.set(r, id);
+                    this.uidlist.set(id, r);
+                }
+                if (n > newsize) {
+                    this.rowlist.unset(n);
+                }
             }
         }, this);
     },
index 298bee7..9a55dc9 100644 (file)
@@ -103,11 +103,10 @@ class IMP_Views_ListMessages
             $slice_start = $args['slice_start'];
             $slice_end = $args['slice_end'];
         } else {
-            list($u_uid, $u_mbox) = explode(IMP_IDX_SEP, $args['search_uid']);
             $result->rownum = $rownum = 1;
-            foreach (array_keys($sorted_list['s'], $u_uid) as $val) {
+            foreach (array_keys($sorted_list['s'], $args['search_uid']) as $val) {
                 if (empty($sorted_list['m'][$val]) ||
-                    ($sorted_list['m'][$val] == $u_mbox)) {
+                    ($sorted_list['m'][$val] == $args['search_mbox'])) {
                     $rownum = $val;
                     break;
                 }