@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 12.1 kB
JavaScript
!function(e){"function"==typeof define&&define.amd?define(["kendo.fx.min","kendo.data.min","kendo.draganddrop.min"],e):e()}((function(){!function(e,t){var i=window.kendo,n=i.mobile.ui,s=i.effects.Transition,a=i.ui.Pane,o=i.ui.PaneDimensions,r=n.DataBoundWidget,h=i.data.DataSource,c=i.data.Buffer,g=i.data.BatchBuffer,p=Math,l=p.abs,u=p.ceil,d=p.round,f=p.max,m=p.min,v=p.floor,_="change",b="changing",P="refresh",w="current-page",y="virtual-page",x="function",S="itemChange",T="cleanup";function C(e){return"k-"+e+" km-"+e}var z=i.Class.extend({init:function(t){var i=this,n=e("<ol class='"+C("pages")+"'/>");t.element.append(n),this._changeProxy=i._change.bind(i),this._refreshProxy=i._refresh.bind(i),t.bind(_,this._changeProxy),t.bind(P,this._refreshProxy),e.extend(i,{element:n,scrollView:t})},items:function(){return this.element.children()},_refresh:function(e){for(var t="",i=0;i<e.pageCount;i++)t+="<li></li>";this.element.html(t),this.items().eq(e.page).addClass(C(w))},_change:function(e){this.items().removeClass(C(w)).eq(e.page).addClass(C(w))},destroy:function(){this.scrollView.unbind(_,this._changeProxy),this.scrollView.unbind(P,this._refreshProxy),this.element.remove()}});i.mobile.ui.ScrollViewPager=z;var E="transitionEnd",O="dragStart",R="dragEnd",k=i.Observable.extend({init:function(t,n){var r,h,c,g,p,u,d=this;i.Observable.fn.init.call(this),this.element=t,this.container=t.parent(),r=new i.ui.Movable(d.element),h=new s({axis:"x",movable:r,onEnd:function(){d.trigger(E)}}),c=new i.UserEvents(t,{fastTap:!0,start:function(e){2*l(e.x.velocity)>=l(e.y.velocity)?c.capture():c.cancel(),d.trigger(O,e),h.cancel()},allowSelection:!0,end:function(e){d.trigger(R,e)}}),(p=(g=new o({element:d.element,container:d.container})).x).bind(_,(function(){d.trigger(_)})),u=new a({dimensions:g,userEvents:c,movable:r,elastic:!0}),e.extend(d,{duration:n&&n.duration||1,movable:r,transition:h,userEvents:c,dimensions:g,dimension:p,pane:u}),this.bind([E,O,R,_],n)},size:function(){return{width:this.dimensions.x.getSize(),height:this.dimensions.y.getSize()}},total:function(){return this.dimension.getTotal()},offset:function(){return-this.movable.x},updateDimension:function(){this.dimension.update(!0)},refresh:function(){this.dimensions.refresh()},moveTo:function(e){this.movable.moveAxis("x",-e)},transitionTo:function(e,t,i){i?this.moveTo(-e):this.transition.moveTo({location:e,duration:this.duration,ease:t})}});i.mobile.ui.ScrollViewElasticPane=k;var D=i.Observable.extend({init:function(e,t,n){var s=this;i.Observable.fn.init.call(this),s.element=e,s.pane=t,s._getPages(),this.page=0,this.pageSize=n.pageSize||1,this.contentHeight=n.contentHeight,this.enablePager=n.enablePager,this.pagerOverlay=n.pagerOverlay},scrollTo:function(e,t){this.page=e,this.pane.transitionTo(-e*this.pane.size().width,s.easeOutExpo,t)},paneMoved:function(e,t,i,n){var a,o,r=this,h=r.pane,c=h.size().width*r.pageSize,g=d,p=t?s.easeOutBack:s.easeOutExpo;-1===e?g=u:1===e&&(g=v),o=g(h.offset()/c),a=f(r.minSnap,m(-o*c,r.maxSnap)),o!=r.page&&i&&i({currentPage:r.page,nextPage:o})&&(a=-r.page*h.size().width),h.transitionTo(a,p,n)},updatePage:function(){var e=this.pane,t=d(e.offset()/e.size().width);return t!=this.page&&(this.page=t,!0)},forcePageUpdate:function(){return this.updatePage()},resizeTo:function(e){var t=this.pane,n=e.width;if(this.pageElements.width(n),"100%"===this.contentHeight){var s=this.element.parent().height();if(!0===this.enablePager){var a=this.element.parent().find("ol.km-pages");!this.pagerOverlay&&a.length&&(s-=i._outerHeight(a,!0))}this.element.css("height",s),this.pageElements.css("height",s)}t.updateDimension(),this._paged||(this.page=v(t.offset()/n)),this.scrollTo(this.page,!0),this.pageCount=u(t.total()/n),this.minSnap=-(this.pageCount-1)*n,this.maxSnap=0},_getPages:function(){this.pageElements=this.element.find(i.roleSelector("page")),this._paged=this.pageElements.length>0}});i.mobile.ui.ScrollViewContent=D;var M=i.Observable.extend({init:function(e,t,n){var s=this;i.Observable.fn.init.call(this),s.element=e,s.pane=t,s.options=n,s._templates(),s.page=n.page||0,s.pages=[],s._initPages(),s.resizeTo(s.pane.size()),s.pane.dimension.forceEnabled()},setDataSource:function(e){this.dataSource=h.create(e),this._buffer(),this._pendingPageRefresh=!1,this._pendingWidgetRefresh=!1},_viewShow:function(){var e=this;e._pendingWidgetRefresh&&(setTimeout((function(){e._resetPages()}),0),e._pendingWidgetRefresh=!1)},_buffer:function(){var e=this.options.itemsPerPage;this.buffer&&this.buffer.destroy(),this.buffer=e>1?new g(this.dataSource,e):new c(this.dataSource,3*e),this._resizeProxy=this._onResize.bind(this),this._resetProxy=this._onReset.bind(this),this._endReachedProxy=this._onEndReached.bind(this),this.buffer.bind({resize:this._resizeProxy,reset:this._resetProxy,endreached:this._endReachedProxy})},_templates:function(){var e=this,t=this.options.template,n=this.options.emptyTemplate,s={},a={};typeof t===x&&(s.template=t,t=function(t){return e.template(t)}),this.template=i.template(t).bind(s),typeof n===x&&(a.emptyTemplate=n,n=function(t){return e.emptyTemplate(t)}),this.emptyTemplate=i.template(n).bind(a)},_initPages:function(){for(var e,t=this.pages,i=this.element,n=0;n<3;n++)e=new V(i),t.push(e);this.pane.updateDimension()},resizeTo:function(e){for(var t=this.pages,n=this.pane,s=0;s<t.length;s++)t[s].setWidth(e.width);if("auto"===this.options.contentHeight)this.element.css("height",this.pages[1].element.height());else if("100%"===this.options.contentHeight){var a=this.element.parent().height();if(!0===this.options.enablePager){var o=this.element.parent().find("ol.km-pages");!this.options.pagerOverlay&&o.length&&(a-=i._outerHeight(o,!0))}this.element.css("height",a),t[0].element.css("height",a),t[1].element.css("height",a),t[2].element.css("height",a)}n.updateDimension(),this._repositionPages(),this.width=e.width},scrollTo:function(e){var t=this.buffer;t.syncDataSource(),t.at(e)&&(this._updatePagesContent(e),this.page=e)},paneMoved:function(e,t,n,s){var a,o=this,r=o.pane,h=r.size().width,c=r.offset(),g=Math.abs(c)>=h/3,p=t?i.effects.Transition.easeOutBack:i.effects.Transition.easeOutExpo,l=o.page+2>o.buffer.total(),u=0;1===e?0!==o.page&&(u=-1):-1!==e||l?c>0&&g&&!l?u=1:c<0&&g&&0!==o.page&&(u=-1):u=1,a=o.page,u&&(a=u>0?a+1:a-1),n&&n({currentPage:o.page,nextPage:a})&&(u=0),0===u?o._cancelMove(p,s):-1===u?o._moveBackward(s):1===u&&o._moveForward(s)},updatePage:function(){var e=this.pages;return 0!==this.pane.offset()&&(this.pane.offset()>0?(e.push(this.pages.shift()),this.page++,this.setPageContent(e[2],this.page+1)):(e.unshift(this.pages.pop()),this.page--,this.setPageContent(e[0],this.page-1)),this._repositionPages(),this._resetMovable(),!0)},forcePageUpdate:function(){var e=this.pane.offset(),t=3*this.pane.size().width/4;return l(e)>t&&this.updatePage()},_resetMovable:function(){this.pane.moveTo(0)},_moveForward:function(e){this.pane.transitionTo(-this.width,i.effects.Transition.easeOutExpo,e)},_moveBackward:function(e){this.pane.transitionTo(this.width,i.effects.Transition.easeOutExpo,e)},_cancelMove:function(e,t){this.pane.transitionTo(0,e,t)},_resetPages:function(){this.page=this.options.page||0,this._updatePagesContent(this.page),this._repositionPages(),this.trigger("reset")},_onResize:function(){this.pageCount=u(this.dataSource.total()/this.options.itemsPerPage),this._pendingPageRefresh&&(this._updatePagesContent(this.page),this._pendingPageRefresh=!1),this.trigger("resize")},_onReset:function(){this.pageCount=u(this.dataSource.total()/this.options.itemsPerPage),this._resetPages()},_onEndReached:function(){this._pendingPageRefresh=!0},_repositionPages:function(){var e=this.pages;e[0].position(-1),e[1].position(0),e[2].position(1)},_updatePagesContent:function(e){var t=this.pages,i=e||0;this.setPageContent(t[0],i-1),this.setPageContent(t[1],i),this.setPageContent(t[2],i+1)},setPageContent:function(e,t){var n=this.buffer,s=this.template,a=this.emptyTemplate,o=null;t>=0&&(o=n.at(t),Array.isArray(o)&&!o.length&&(o=null)),this.trigger(T,{item:e.element}),null!==o?e.content(s(o)):e.content(a({})),i.mobile.init(e.element),this.trigger(S,{item:e.element,data:o,ns:i.mobile.ui})}});i.mobile.ui.VirtualScrollViewContent=M;var V=i.Class.extend({init:function(t){this.element=e("<div class='"+C(y)+"'></div>"),this.width=t.width(),this.element.width(this.width),t.append(this.element)},content:function(e){this.element.html(e)},position:function(e){this.element.css("transform","translate3d("+this.width*e+"px, 0, 0)")},setWidth:function(e){this.width=e,this.element.width(e)}});i.mobile.ui.VirtualPage=V;var W=r.extend({init:function(e,t){var n=this;r.fn.init.call(n,e,t),t=n.options,e=n.element,i.stripWhitespace(e[0]),e.wrapInner("<div/>").addClass("k-widget "+C("scrollview")),this.options.enablePager&&(this.pager=new z(this),this.options.pagerOverlay&&e.addClass(C("scrollview-overlay"))),n.inner=e.children().first(),n.page=0,n.inner.css("height",t.contentHeight),n.pane=new k(n.inner,{duration:this.options.duration,transitionEnd:this._transitionEnd.bind(this),dragStart:this._dragStart.bind(this),dragEnd:this._dragEnd.bind(this),change:this.refresh.bind(this)}),n.bind("resize",(function(){n.pane.refresh()})),n.page=t.page;var s=0===this.inner.children().length?new M(n.inner,n.pane,t):new D(n.inner,n.pane,t);s.page=n.page,s.bind("reset",(function(){this._pendingPageRefresh=!1,n._syncWithContent(),n.trigger(P,{pageCount:s.pageCount,page:s.page})})),s.bind("resize",(function(){n.trigger(P,{pageCount:s.pageCount,page:s.page})})),s.bind(S,(function(e){n.trigger(S,e),n.angular("compile",(function(){return{elements:e.item,data:[{dataItem:e.data}]}}))})),s.bind(T,(function(e){n.angular("cleanup",(function(){return{elements:e.item}}))})),n._content=s,n.setDataSource(t.dataSource);var a=n.container();a.nullObject?(n.viewInit(),n.viewShow()):a.bind("show",this.viewShow.bind(this)).bind("init",this.viewInit.bind(this))},options:{name:"ScrollView",page:0,duration:400,velocityThreshold:.8,contentHeight:"auto",pageSize:1,itemsPerPage:1,bounceVelocityThreshold:1.6,enablePager:!0,pagerOverlay:!1,autoBind:!0,template:function(){return""},emptyTemplate:function(){return""}},events:[b,_,P],destroy:function(){r.fn.destroy.call(this),i.destroy(this.element)},viewInit:function(){this.options.autoBind&&this._content.scrollTo(this._content.page,!0)},viewShow:function(){this.pane.refresh()},refresh:function(){var e=this._content;e.resizeTo(this.pane.size()),this.page=e.page,this.trigger(P,{pageCount:e.pageCount,page:e.page})},content:function(e){this.element.children().first().html(e),this._content._getPages(),this.pane.refresh()},value:function(e){var t=this.dataSource;if(!e)return t.at(this.page);this.scrollTo(t.indexOf(e),!0)},scrollTo:function(e,t){this._content.scrollTo(e,t),this._syncWithContent()},prev:function(){var e=this,i=e.page-1;e._content instanceof M?e._content.paneMoved(1,t,(function(t){return e.trigger(b,t)})):i>-1&&e.scrollTo(i)},next:function(){var e=this,i=e.page+1;e._content instanceof M?e._content.paneMoved(-1,t,(function(t){return e.trigger(b,t)})):i<e._content.pageCount&&e.scrollTo(i)},setDataSource:function(e){if(this._content instanceof M){var t=!e;this.dataSource=h.create(e),this._content.setDataSource(this.dataSource),this.options.autoBind&&!t&&this.dataSource.fetch()}},items:function(){return this.element.find(".km-virtual-page")},_syncWithContent:function(){var e,i,n=this._content.pages,s=this._content.buffer;this.page=this._content.page,(e=s?s.at(this.page):t)instanceof Array||(e=[e]),i=n?n[1].element:t,this.trigger(_,{page:this.page,element:i,data:e})},_dragStart:function(){this._content.forcePageUpdate()&&this._syncWithContent()},_dragEnd:function(e){var t=this,i=e.x.velocity,n=this.options.velocityThreshold,s=0,a=l(i)>this.options.bounceVelocityThreshold;i>n?s=1:i<-n&&(s=-1),this._content.paneMoved(s,a,(function(e){return t.trigger(b,e)}))},_transitionEnd:function(){this._content.updatePage()&&this._syncWithContent()}});n.plugin(W)}(window.kendo.jQuery)}));
//# sourceMappingURL=kendo.mobile.scrollview.min.js.map