12345678 |
- /*
- Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.widget.Pager"]){dojo._hasResource["dojox.widget.Pager"]=true;dojo.provide("dojox.widget.Pager");dojo.experimental("dojox.widget.Pager");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.require("dojo.fx");dojo.declare("dojox.widget.Pager",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.widget","Pager/Pager.html","<div dojoAttachPoint=\"pagerContainer\" tabIndex=\"0\" dojoAttachEvent=\"onkeypress: _handleKey, onfocus: _a11yStyle, onblur:_a11yStyle\" class=\"${orientation}PagerContainer\">\n <div class=\"pagerContainer\">\n\t\t<div dojoAttachPoint=\"pagerContainerStatus\" class=\"${orientation}PagerStatus\"></div>\n\t\t<div dojoAttachPoint=\"pagerContainerView\" class=\"${orientation}PagerView\">\n\t\t <div dojoAttachPoint=\"pagerItemContainer\"><ul dojoAttachPoint=\"pagerItems\" class=\"pagerItems\"></ul></div>\n\t\t</div>\n\t\t<div dojoAttachPoint=\"pagerContainerPager\" class=\"${orientation}PagerPager\">\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerNext\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerNext\"><img dojoAttachPoint=\"pagerIconNext\" src=\"${iconNext}\" alt=\"Next\" /></div>\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerPrevious\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerPrevious\"><img dojoAttachPoint=\"pagerIconPrevious\" src=\"${iconPrevious}\" alt=\"Previous\" /></div>\n\t\t</div>\n </div>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none\"></div>\n</div>\n"),iconPage:dojo.moduleUrl("dojox.widget","Pager/images/pageInactive.png"),iconPageActive:dojo.moduleUrl("dojox.widget","Pager/images/pageActive.png"),store:null,orientation:"horizontal",statusPos:"leading",pagerPos:"center",duration:500,itemSpace:2,resizeChildren:true,itemClass:"dojox.widget._PagerItem",itemsPage:3,postMixInProperties:function(){var h=(this.orientation=="horizontal");dojo.mixin(this,{_totalPages:0,_currentPage:1,dirClass:"pager"+(h?"Horizontal":"Vertical"),iconNext:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Next.png"),iconPrevious:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Previous.png")});},postCreate:function(){this.inherited(arguments);this.store.fetch({onComplete:dojo.hitch(this,"_init")});},_a11yStyle:function(e){dojo[(e.type=="focus"?"addClass":"removeClass")](e.target,"pagerFocus");},_handleKey:function(e){var dk=dojo.keys;var _1=(e.charCode==dk.SPACE?dk.SPACE:e.keyCode);switch(_1){case dk.UP_ARROW:case dk.RIGHT_ARROW:case 110:case 78:e.preventDefault();this._pagerNext();break;case dk.DOWN_ARROW:case dk.LEFT_ARROW:case 112:case 80:e.preventDefault();this._pagerPrevious();break;case dk.ENTER:switch(e.target){case this.pagerNext:this._pagerNext();break;case this.pagerPrevious:this._pagerPrevious();break;}break;}},_init:function(_2){this.items=_2;this._renderPages();this._renderStatus();this._renderPager();},_renderPages:function(){var _3=this.pagerContainerView;var _4=(this.orientation=="horizontal");var _5=dojo.style;if(_4){var _6=dojo.marginBox(this.pagerContainerPager).h;var _7=dojo.marginBox(this.pagerContainerStatus).h;if(this.pagerPos!="center"){var _8=_6+_7;}else{var _8=_7;var _9=this.pagerIconNext.width;var _a=_5(_3,"width");var _b=_a-(2*_9);_5(_3,{width:_b+"px",marginLeft:this.pagerIconNext.width+"px",marginRight:this.pagerIconNext.width+"px"});}var _c=_5(this.pagerContainer,"height")-_8;_5(this.pagerContainerView,"height",_c+"px");var _d=Math.floor(_5(_3,"width")/this.itemsPage);if(this.statusPos=="trailing"){if(this.pagerPos!="center"){_5(_3,"marginTop",_6+"px");}_5(_3,"marginBottom",_7+"px");}else{_5(_3,"marginTop",_7+"px");if(this.pagerPos!="center"){_5(_3,"marginTop",_6+"px");}}}else{var _e=dojo.marginBox(this.pagerContainerPager).w;var _f=dojo.marginBox(this.pagerContainerStatus).w;var _10=_5(this.pagerContainer,"width");if(this.pagerPos!="center"){var _11=_e+_f;}else{var _11=_f;var _12=this.pagerIconNext.height;var _13=_5(_3,"height");var _14=_13-(2*_12);_5(_3,{height:_14+"px",marginTop:this.pagerIconNext.height+"px",marginBottom:this.pagerIconNext.height+"px"});}var _15=_5(this.pagerContainer,"width")-_11;_5(_3,"width",_15+"px");var _d=Math.floor(_5(_3,"height")/this.itemsPage);if(this.statusPos=="trailing"){if(this.pagerPos!="center"){_5(_3,"marginLeft",_e+"px");}_5(_3,"marginRight",_f+"px");}else{_5(_3,"marginLeft",_f+"px");if(this.pagerPos!="center"){_5(_3,"marginRight",_e+"px");}}}var _16=dojo.getObject(this.itemClass);var _17="padding"+(_4?"Left":"Top");var _18="padding"+(_4?"Right":"Bottom");dojo.forEach(this.items,function(_19,cnt){var _1a=dojo.create("div",{innerHTML:_19.content});var _1b=new _16({id:this.id+"-item-"+(cnt+1)},_1a);this.pagerItems.appendChild(_1b.domNode);var _1c={};_1c[(_4?"width":"height")]=(_d-this.itemSpace)+"px";var p=(_4?"height":"width");_1c[p]=_5(_3,p)+"px";_5(_1b.containerNode,_1c);if(this.resizeChildren){_1b.resizeChildren();}_1b.parseChildren();_5(_1b.domNode,"position","absolute");if(cnt<this.itemsPage){var pos=(cnt)*_d;var _1d=(_4?"left":"top");var dir=(_4?"top":"left");_5(_1b.domNode,dir,"0px");_5(_1b.domNode,_1d,pos+"px");}else{_5(_1b.domNode,"top","-1000px");_5(_1b.domNode,"left","-1000px");}_5(_1b.domNode,_18,(this.itemSpace/2)+"px");_5(_1b.domNode,_17,(this.itemSpace/2)+"px");},this);},_renderPager:function(){var tcp=this.pagerContainerPager;var _1e="0px";var _1f=(this.orientation=="horizontal");if(_1f){if(this.statusPos=="center"){}else{if(this.statusPos=="trailing"){dojo.style(tcp,"top",_1e);}else{dojo.style(tcp,"bottom",_1e);}}dojo.style(this.pagerNext,"right",_1e);dojo.style(this.pagerPrevious,"left",_1e);}else{if(this.statusPos=="trailing"){dojo.style(tcp,"left",_1e);}else{dojo.style(tcp,"right",_1e);}dojo.style(this.pagerNext,"bottom",_1e);dojo.style(this.pagerPrevious,"top",_1e);}},_renderStatus:function(){this._totalPages=Math.ceil(this.items.length/this.itemsPage);this.iconWidth=0;this.iconHeight=0;this.iconsLoaded=0;this._iconConnects=[];for(var i=1;i<=this._totalPages;i++){var _20=new Image();var _21=i;dojo.connect(_20,"onclick",dojo.hitch(this,function(_22){this._pagerSkip(_22);},_21));this._iconConnects[_21]=dojo.connect(_20,"onload",dojo.hitch(this,function(_23){this.iconWidth+=_20.width;this.iconHeight+=_20.height;this.iconsLoaded++;if(this._totalPages==this.iconsLoaded){if(this.orientation=="horizontal"){if(this.statusPos=="trailing"){if(this.pagerPos=="center"){var _24=dojo.style(this.pagerContainer,"height");var _25=dojo.style(this.pagerContainerStatus,"height");dojo.style(this.pagerContainerPager,"top",((_24/2)-(_25/2))+"px");}dojo.style(this.pagerContainerStatus,"bottom","0px");}else{if(this.pagerPos=="center"){var _24=dojo.style(this.pagerContainer,"height");var _25=dojo.style(this.pagerContainerStatus,"height");dojo.style(this.pagerContainerPager,"bottom",((_24/2)-(_25/2))+"px");}dojo.style(this.pagerContainerStatus,"top","0px");}var _26=(dojo.style(this.pagerContainer,"width")/2)-(this.iconWidth/2);dojo.style(this.pagerContainerStatus,"paddingLeft",_26+"px");}else{if(this.statusPos=="trailing"){if(this.pagerPos=="center"){var _27=dojo.style(this.pagerContainer,"width");var _28=dojo.style(this.pagerContainerStatus,"width");dojo.style(this.pagerContainerPager,"left",((_27/2)-(_28/2))+"px");}dojo.style(this.pagerContainerStatus,"right","0px");}else{if(this.pagerPos=="center"){var _27=dojo.style(this.pagerContainer,"width");var _28=dojo.style(this.pagerContainerStatus,"width");dojo.style(this.pagerContainerPager,"right",((_27/2)-(_28/2))+"px");}dojo.style(this.pagerContainerStatus,"left","0px");}var _26=(dojo.style(this.pagerContainer,"height")/2)-(this.iconHeight/2);dojo.style(this.pagerContainerStatus,"paddingTop",_26+"px");}}dojo.disconnect(this._iconConnects[_23]);},_21));if(i==this._currentPage){_20.src=this.iconPageActive;}else{_20.src=this.iconPage;}var _21=i;dojo.addClass(_20,this.orientation+"PagerIcon");dojo.attr(_20,"id",this.id+"-status-"+i);this.pagerContainerStatus.appendChild(_20);if(this.orientation=="vertical"){dojo.style(_20,"display","block");}}},_pagerSkip:function(_29){if(this._currentPage==_29){return;}else{var _2a;var _2b;if(_29<this._currentPage){_2a=this._currentPage-_29;_2b=(this._totalPages+_29)-this._currentPage;}else{_2a=(this._totalPages+this._currentPage)-_29;_2b=_29-this._currentPage;}var b=(_2b>_2a);this._toScroll=(b?_2a:_2b);var cmd=(b?"_pagerPrevious":"_pagerNext");var _2c=this.connect(this,"onScrollEnd",function(){this._toScroll--;if(this._toScroll<1){this.disconnect(_2c);}else{this[cmd]();}});this[cmd]();}},_pagerNext:function(){if(this._anim){return;}var _2d=[];for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){if(!dojo.byId(this.id+"-item-"+i)){continue;}var _2e=dojo.byId(this.id+"-item-"+i);var _2f=dojo.marginBox(_2e);if(this.orientation=="horizontal"){var _30=_2f.l-(this.itemsPage*_2f.w);_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));}else{var _30=_2f.t-(this.itemsPage*_2f.h);_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));}}var _31=this._currentPage;if(this._currentPage==this._totalPages){this._currentPage=1;}else{this._currentPage++;}var cnt=this.itemsPage;for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){if(dojo.byId(this.id+"-item-"+i)){var _2e=dojo.byId(this.id+"-item-"+i);var _2f=dojo.marginBox(_2e);if(this.orientation=="horizontal"){var _32=(dojo.style(this.pagerContainerView,"width")+((cnt-1)*_2f.w))-1;dojo.style(_2e,"left",_32+"px");dojo.style(_2e,"top","0px");var _30=_32-(this.itemsPage*_2f.w);_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));}else{_32=(dojo.style(this.pagerContainerView,"height")+((cnt-1)*_2f.h))-1;dojo.style(_2e,"top",_32+"px");dojo.style(_2e,"left","0px");var _30=_32-(this.itemsPage*_2f.h);_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));}}cnt--;}this._anim=dojo.fx.combine(_2d);var _33=this.connect(this._anim,"onEnd",function(){delete this._anim;this.onScrollEnd();this.disconnect(_33);});this._anim.play();dojo.byId(this.id+"-status-"+_31).src=this.iconPage;dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;},_pagerPrevious:function(){if(this._anim){return;}var _34=[];for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){if(!dojo.byId(this.id+"-item-"+i)){continue;}var _35=dojo.byId(this.id+"-item-"+i);var _36=dojo.marginBox(_35);if(this.orientation=="horizontal"){var _37=dojo.style(_35,"left")+(this.itemsPage*_36.w);_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));}else{var _37=dojo.style(_35,"top")+(this.itemsPage*_36.h);_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));}}var _38=this._currentPage;if(this._currentPage==1){this._currentPage=this._totalPages;}else{this._currentPage--;}var cnt=this.itemsPage;var j=1;for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){if(dojo.byId(this.id+"-item-"+i)){var _35=dojo.byId(this.id+"-item-"+i);var _36=dojo.marginBox(_35);if(this.orientation=="horizontal"){var _39=-(j*_36.w)+1;dojo.style(_35,"left",_39+"px");dojo.style(_35,"top","0px");var _37=((cnt-1)*_36.w);_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));var _37=_39+(this.itemsPage*_36.w);_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));}else{_39=-((j*_36.h)+1);dojo.style(_35,"top",_39+"px");dojo.style(_35,"left","0px");var _37=((cnt-1)*_36.h);_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));}}cnt--;j++;}this._anim=dojo.fx.combine(_34);var _3a=dojo.connect(this._anim,"onEnd",dojo.hitch(this,function(){delete this._anim;this.onScrollEnd();dojo.disconnect(_3a);}));this._anim.play();dojo.byId(this.id+"-status-"+_38).src=this.iconPage;dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;},onScrollEnd:function(){}});dojo.declare("dojox.widget._PagerItem",[dijit._Widget,dijit._Templated],{templateString:"<li class=\"pagerItem\" dojoAttachPoint=\"containerNode\"></li>",resizeChildren:function(){var box=dojo.marginBox(this.containerNode);dojo.style(this.containerNode.firstChild,{width:box.w+"px",height:box.h+"px"});},parseChildren:function(){dojo.parser.parse(this.containerNode);}});}
|