UNPKG

@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) 20.1 kB
!function(e){"function"==typeof define&&define.amd?define(["kendo.fx.min","kendo.data.min","kendo.draganddrop.min","kendo.icons.min"],e):e()}((function(){!function(e,t){var i=window.kendo,n=i.ui,a=i.effects.Transition,s=i.ui.Pane,r=i.keys,o=i.ui.PaneDimensions,h=n.DataBoundWidget,l=i.data.DataSource,c=Math,g=c.abs,p=c.ceil,d=c.round,u=c.max,f=c.min,v=c.floor,m="change",_="click",w="refresh",b="primary",P="scrollview-page",x="function",y="itemChange",S=".ScrollView",C="keydown",T="focus",k="focusout",R="k-focus",E="tabindex";function z(e){return"k-"+e}var V=i.Observable.extend({init:function(e){var t=this;this.dataSource=e,this.pendingRequestArray=[],this.initialFetch=!1,this.useRanges=e.options.serverPaging,i.Observable.fn.init.call(this),e.bind("change",(function(){t._change()}))},_change:function(){this.trigger("reset",{offset:this.offset})},page:function(e,t){var i=this;this.useRanges||(this.dataSource.page(e+1),t?t(i.dataSource.view()):i.trigger("page",{page:e})),this.useRanges&&this.dataSource.range(e*this.dataSource.pageSize(),this.dataSource.pageSize(),(function(){t?t(i.dataSource.view()):i.trigger("page",{page:e})}))},scrollTo:function(e){var t=Math.ceil(this.dataSource.total()/this.dataSource.pageSize()||1),i=e-1,n=i-1,a=e,s=t>0&&e+1>=t?-1:e+1,r=t>0&&s+1>=t?-1:s+1;s>=0&&this.pendingRequestArray.push(s),i>=0&&this.pendingRequestArray.push(i),n>=0&&this.pendingRequestArray.push(n),r>=0&&this.pendingRequestArray.push(r),this.page(a)},getViewData:function(){var e,t=this.dataSource.view();if(this.dataSource.options.pageSize>1){e=[];for(var i=0;i<t.length;i++)e.push(t[i])}else e=t[0];return e},destroy:function(){this.dataSource.unbind(),this.dataSource=null}});i.ui.ScrollViewDataReader=V;var A=i.Class.extend({init:function(t){var i=this,n=e("<div class='"+z("scrollview-nav")+"'/>"),a=e("<div class='"+z("scrollview-nav-wrap")+"'></div>");a.append(n),t._navigationContainer.append(a),this._changeProxy=i._change.bind(i),this._refreshProxy=i._refresh.bind(i),t.bind(m,this._changeProxy),t.bind(w,this._refreshProxy),n.on(_+S,".k-link",this._click.bind(t)),e.extend(i,{element:n,scrollView:t}),i._navigatable()},items:function(){return this.element.children()},_focus:function(){var e=this;e._focused=!0,e._setCurrent(e.element.find("."+z(b)))},_blur:function(){var e=this;e._focused=!1,e._current&&(e._current.removeClass(R),e._current.removeAttr("id"),e.element.removeAttr("aria-activedescendant"))},_keyDown:function(e){var t,i,n=this,a=n._current,s=e.keyCode;s==r.LEFT&&(t=!0,(i=a.prev(".k-link")).length&&n._setCurrent(i)),s==r.RIGHT&&(t=!0,(i=a.next(".k-link")).length&&n._setCurrent(i)),e.keyCode!=r.SPACEBAR&&e.keyCode!=r.ENTER||(t=!0,n._current.trigger("click")),t&&(e.preventDefault(),e.stopPropagation())},_setCurrent:function(t){if(this._focused){var n=this,a=i.guid(),s=e(t);n._current&&(e(n._current).removeClass(R).removeAttr("id"),n.element.removeAttr("aria-activedescendant")),s.attr("id",a).addClass(R),n.element.attr("aria-activedescendant",a),n._current=s}},_navigatable:function(){var e=this,t=e.scrollView.options.pageable||{};e.element.attr({tabindex:0,"aria-label":e.scrollView.options.messages.pagerLabel,role:"group"}),e.scrollView.itemsWrapper&&e.element.attr("aria-controls",e.scrollView.itemsWrapper.attr("id")),e._ariaTemplate=i.template(t.ARIATemplate||function(e){return"Item "+(e.index+1)}),e.scrollView.options.navigatable&&(e.element.on(C+S,e,e._keyDown.bind(e)),e.element.on(T+S,e._focus.bind(e)),e.element.on(k+S,e._blur.bind(e)))},_refresh:function(e){for(var t,i="",n=0;n<e.pageCount;n++)i+='<span class="k-link" role="button" aria-label="'+this._ariaTemplate({index:n})+'" aria-pressed="false"></span>';this.element.html(i),(t=this.items().eq(e.page)).addClass(z(b)),t.attr("aria-pressed",!0),this.scrollView._toggleNavigation({currentPage:e.page})},_change:function(e){if(!e.isDefaultPrevented()){var t,n=this.scrollView._navigationContainer.find(".k-scrollview-nav"),a=this.scrollView.element.width(),s=(a-n.width())/2,r=n.find(".k-link").eq(0).outerWidth(!0)/2,o=this.items();o.removeClass(z(b)),t=o.eq(e.nextPage).addClass(z(b)),o.attr("aria-pressed",!1),this._setCurrent(t),t.attr("aria-pressed",!0);var h=this.items().eq(e.nextPage).length>0?this.items().eq(e.nextPage).position().left:0;if(h>a/2||h<i.scrollLeft(n)+a/2){var l=0;l=h>a/2?i.scrollLeft(n)+h-a/2:i.scrollLeft(n)-(a/2-h),l+=s+r,n.animate({scrollLeft:l},300)}this.scrollView._toggleNavigation({currentPage:e.currentPage,nextPage:e.nextPage})}},_click:function(t){var i=e(t.currentTarget).index();this.scrollTo(i)},destroy:function(){this.scrollView.unbind(m,this._changeProxy),this.scrollView.unbind(w,this._refreshProxy),this.element.off(S),this.element.remove()}});i.ui.ScrollViewPager=A;var D="transitionEnd",O="dragStart",B="dragEnd",L=i.Observable.extend({init:function(t,n){var r,h,l,c,p,d,u=this;i.Observable.fn.init.call(this),this.element=t,this.container=t.parent(),r=new i.ui.Movable(u.element),h=new a({axis:"x",movable:r,onEnd:function(){u.trigger(D)}}),l=new i.UserEvents(t,{fastTap:!0,start:function(e){2*g(e.x.velocity)>=g(e.y.velocity)?l.capture():l.cancel(),u.trigger(O,e),h.cancel()},allowSelection:!0,end:function(e){u.trigger(B,e)}}),(p=(c=new o({element:u.element,container:u.container})).x).bind(m,(function(){u.trigger(m)})),d=new s({dimensions:c,userEvents:l,movable:r,elastic:!0}),e.extend(u,{duration:n&&n.duration||1,movable:r,transition:h,userEvents:l,dimensions:c,dimension:p,pane:d}),this.bind([D,O,B,m],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(),this.dimensions.y.enabled=!1},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})},destroy:function(){var e=this;e.userEvents.destroy(),e.unbind(),e.movable=e.tansition=e.dimensions=e.dimension=e.pane=null,e.element.remove()}});i.ui.ScrollViewElasticPane=L;var W=i.Observable.extend({init:function(e,t,n){var a=this;i.Observable.fn.init.call(this),a.element=e,a.pane=t,a._getPages(),this.page=0,this.pageSize=n.pageSize||1,this.contentHeight=n.contentHeight,this.enablePager=n.enablePager,this.pagerOverlay=n.pagerOverlay},scrollTo:function(e,i){var n=this;(e!=n.page||i)&&(n.trigger("resize",{currentPage:this.page,nextPage:e,data:t})||(n.page=e,n.pane.transitionTo(-e*n.pane.size().width,a.easeOutExpo,i)))},paneMoved:function(e,t,i,n){var s,r,o=this,h=o.pane,l=h.size().width*o.pageSize,c=d,g=t?a.easeOutBack:a.easeOutExpo;if(-1===e?c=p:1===e&&(c=v),(r=c(h.offset()/l))<0||r>=o.pageCount){var m=r<0?0:-this.page*this.pane.size().width;return this.pane.transitionTo(m,g,n)}s=u(o.minSnap,f(-r*l,o.maxSnap)),r!=o.page&&i&&i({currentPage:o.page,nextPage:r})&&(s=-o.page*h.size().width),h.transitionTo(s,g,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 a=this.element.parent().height();if(!0===this.enablePager){var s=this.element.parent().find("ul.k-scrollview-nav");!this.pagerOverlay&&s.length&&(a-=i._outerHeight(s,!0))}this.element.css("height",a),this.pageElements.css("height",a)}t.updateDimension(),this._paged||(this.page=v(t.offset()/n)),this.scrollTo(this.page,!0,!0),this.pageCount=v(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},destroy:function(){this.pane=null,this.element.remove()}});i.ui.ScrollViewContent=W;var q=i.Observable.extend({init:function(e,t,n){var a=this;i.Observable.fn.init.call(this),a.element=e,a.pane=t,a.options=n,a._templates(),a.page=n.page||0,a.pages=[],a._initPages(),a.resizeTo(a.pane.size()),a.pane.dimension.forceEnabled()},setDataSource:function(e){this.dataSource=l.create(e),this._dataReader(),this._pendingPageRefresh=!1,this._pendingWidgetRefresh=!1},_viewShow:function(){var e=this;e._pendingWidgetRefresh&&(setTimeout((function(){e._resetPages()}),0),e._pendingWidgetRefresh=!1)},_dataReader:function(){this.dataReader=new V(this.dataSource),this._pageProxy=this._onPage.bind(this),this._resetProxy=this._onReset.bind(this),this.dataReader.bind({page:this._pageProxy,reset:this._resetProxy})},_templates:function(){var e=this.options.template,t=this.options.emptyTemplate,n={},a={};typeof e===x&&(n.template=e,e=function(e){return n.template(e)}),this.template=i.template(e).bind(n),typeof t===x&&(a.emptyTemplate=t,t=function(e){return a.emptyTemplate(e)}),this.emptyTemplate=i.template(t).bind(a)},_initPages:function(){for(var e,t=this.pages,i=this.element,n=0;n<3;n++)e=new H(i),t.push(e);this.pane.updateDimension()},resizeTo:function(e){for(var t=this.pages,n=this.pane,a=0;a<t.length;a++)t[a].setWidth(e.width);if("auto"===this.options.contentHeight)this.element.css("height",this.pages[1].element.height());else if("100%"===this.options.contentHeight){var s=this.element.parent().height();if(!0===this.options.enablePager){var r=this.element.parent().find("ul.k-scrollview-nav");!this.options.pagerOverlay&&r.length&&(s-=i._outerHeight(r,!0))}this.element.css("height",s),t[0].element.css("height",s),t[1].element.css("height",s),t[2].element.css("height",s)}else this.options.contentHeight&&(t[0].element.css("height",this.options.contentHeight),t[1].element.css("height",this.options.contentHeight),t[2].element.css("height",this.options.contentHeight));n.updateDimension(),this._repositionPages(),this.width=e.width},scrollTo:function(e,t,i){var n=this,a=n.dataReader;(e!=n.page||t)&&a.page(e,(function(s){i?a.scrollTo(e):n.trigger("resize",{currentPage:n.page,nextPage:e,data:s})||(t?n.page=e:(a.pagerScroll=e>n.page?-1:1,n.page=e+a.pagerScroll),a.scrollTo(e))}))},paneMoved:function(e,n,a,s){var r,o,h,l=this,c=l.pane,g=c.size().width,p=c.offset(),d=Math.abs(p)>=g/3,u=n?i.effects.Transition.easeOutBack:i.effects.Transition.easeOutExpo,f=l.page+2>l.pageCount,v=0;1===e?0!==l.page&&(v=-1):-1!==e||f?p>0&&d&&!f?v=1:p<0&&d&&0!==l.page&&(v=-1):v=1,r=l.page,v&&(r=v>0?r+1:r-1,l instanceof i.ui.VirtualScrollViewContent?(l.dataReader.page(r),o=l.dataReader.getViewData()):o=t,o instanceof Array||(o=[o]),h=l.pages?l.pages[1].element:t),a&&l.page!=r&&a({currentPage:l.page,nextPage:r,element:h,data:o})&&(v=0),0===v?l._cancelMove(u,s):-1===v?l._moveBackward(s):1===v&&l._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.page+2<this.pageCount&&this.dataReader.pendingRequestArray.push(this.page+2),this.page+1<this.pageCount&&this.dataReader.page(this.page+1),this.page+1==this.pageCount&&this.setPageContent(this.pages[2],null)):(e.unshift(this.pages.pop()),this.page--,this.page-2>=0&&this.dataReader.pendingRequestArray.push(this.page-2),this.page-1>=0&&this.dataReader.page(this.page-1)),this._repositionPages(),this._resetMovable(),!0)},forcePageUpdate:function(){var e=this.pane.offset(),t=3*this.pane.size().width/4;return g(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._repositionPages(),this.trigger("reset")},_onPage:function(e){if(e.page>=this.pageCount&&this.setPageContent(this.pages[2],null),this.page==e.page?(!this.dataReader.pagerScroll||0===this.dataReader.pagerScroll&&this.dataReader.initialFetch||(this.dataReader.pagerScroll<0?this._moveForward():this._moveBackward(),this.dataReader.pagerScroll=0),this.setPageContent(this.pages[1],this.dataReader.getViewData())):this.page+1==e.page?this.setPageContent(this.pages[2],this.dataReader.getViewData()):this.page-1==e.page&&this.setPageContent(this.pages[0],this.dataReader.getViewData()),this.dataReader.pendingRequestArray.length>0&&this.dataReader.initialFetch){var t=this.dataReader.pendingRequestArray.shift();this.dataReader.page(t)}},_onReset:function(){this.pageCount=p(this.dataSource.total()/this.dataSource.pageSize())},_repositionPages:function(){var e=this.pages;e[0].position(-1),e[1].position(0),e[2].position(1)},setPageContent:function(e,i){var n=this.template,a=this.emptyTemplate;null!==i&&i!==t?e.content(n(i)):e.content(a({}))},destroy:function(){var e=this,t=e.pages;e.dataReader.unbind(),e.dataSource.unbind(),e.dataReader=e.dataSource=e.pane=null;for(var i=0;i<t.length;i++)t[i].destroy();e.element.remove()}});i.ui.VirtualScrollViewContent=q;var H=i.Class.extend({init:function(t){this.element=e("<li class='"+z(P)+"'></li>"),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)},destroy:function(){this.element.remove(),this.element=null}});i.ui.VirtualPage=H;var M=h.extend({init:function(e,t){var n=this;h.fn.init.call(n,e,t),t=n.options,e=n.element,i.stripWhitespace(e[0]),0===e.children().length?e.wrapInner("<ul class='k-scrollview-wrap'/>"):e.wrapInner("<div class='k-scrollview-wrap'/>"),n.itemsWrapper=e.find(".k-scrollview-wrap"),e.addClass("k-widget "+z("scrollview")),n._initNavigation(),this.options.pageable||this.options.enablePager?(this.pager=new A(this),this.options.pagerOverlay&&e.addClass(z("scrollview-overlay"))):(this._changeProxy=n._toggleNavigation.bind(n),this.bind(m,this._changeProxy)),n.inner=e.children().first(),n.page=0,n.inner.css("height",t.contentHeight),n.pane=new L(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 a=0===this.inner.children().length?new q(n.inner,n.pane,t):new W(n.inner,n.pane,t);a.page=n.page,a.bind("reset",(function(){this._pendingPageRefresh=!1,n.trigger(w,{pageCount:a.pageCount,page:a.page}),n._toggleNavigation({currentPage:a.page,nextPage:a.page})})),a.bind("resize",(function(e){a.page!=e.nextPage&&(e._defaultPrevented=n.trigger(m,{currentPage:a.page,nextPage:e.nextPage,data:e.data})),n._toggleNavigation({currentPage:a.page,nextPage:e.nextPage})})),a.bind(y,(function(e){n.trigger(y,e),n.angular("compile",(function(){return{elements:e.item,data:[{dataItem:e.data}]}}))})),a.bind("cleanup",(function(e){n.angular("cleanup",(function(){return{elements:e.item}}))})),n._content=a,n.setDataSource(t.dataSource),n.viewInit(),n.viewShow(),n._navigatable()},options:{name:"ScrollView",ARIATemplate:function(e){return"Item "+e.index+" of "+e.total},page:0,duration:400,velocityThreshold:.8,contentHeight:"auto",pageSize:1,bounceVelocityThreshold:1.6,enablePager:!0,enableNavigationButtons:!0,pagerOverlay:!0,navigatable:!1,autoBind:!0,pageable:!1,template:function(){return""},emptyTemplate:function(){return""},messages:{previousButtonLabel:"Previous",nextButtonLabel:"Next",pagerLabel:"ScrollView pager"}},events:["changing",m,w],destroy:function(){h.fn.destroy.call(this),this._content.destroy(),this.pane.destroy(),this.pager&&this.pager.destroy(),this._navigationContainer.off(S),this._navigationContainer=null,this.itemsWrapper.off(S),this.itemsWrapper=null,this.ariaLiveEl=this._current=null,this.inner=null,i.destroy(this.element)},viewInit:function(){this.options.autoBind&&this._content.scrollTo(this._content.page,!0,!0)},viewShow:function(){this.pane.refresh()},refresh:function(){var e=this._content,t=this.options;e.resizeTo(this.pane.size()),this.page=e.page,(e instanceof W||e.dataReader.initialFetch)&&(t.enablePager?this.trigger(w,{pageCount:e.pageCount,page:e.page}):this.trigger(m,{pageCount:e.pageCount,currentPage:e.page}))},content:function(e){this.element.children().first().html(e),this._content._getPages(),this.pane.refresh()},scrollTo:function(e,t,i){this._content.scrollTo(e,t,i)},prev:function(){var e=this,i=e._content.page-1;e._content instanceof q?e._content.paneMoved(1,t,(function(t){return e.trigger(m,t)})):i>-1&&e.scrollTo(i)},next:function(){var e=this,i=e._content.page+1;e._content instanceof q?e._content.paneMoved(-1,t,(function(t){return e.trigger(m,t)})):i<e._content.pageCount&&e.scrollTo(i)},setDataSource:function(e){var t=this;if(this._content instanceof q){var i=!e;e instanceof l?(e.options.pageSize=e.options.pageSize||1,this.dataSource=e=new l(e.options)):this.dataSource=l.create(e),this._content.setDataSource(this.dataSource),this.options.autoBind&&!i&&this.dataSource.fetch((function(){t._content.dataReader.initialFetch=!0,t.scrollTo(t._content.page,!0,!0),t._content.trigger("reset")}))}},items:function(){return this.element.find(".k-scrollview-page")},_updateAria:function(){var e=this._content;this.ariaLiveEl.html(this._ariaTemplate({index:e.page+1,total:e.pageCount}))},_setCurrent:function(t){if(this._focused){var n=this,a=n._content.page,s=(i.guid(),n.itemsWrapper.children()),r=e(t||s.eq(a));if(n._content.pages)return s.attr("aria-hidden",!0),void n._content.pages[1].element.removeAttr("aria-hidden");n._current&&(e(n._current).removeClass(R).removeAttr("id"),s.attr("aria-hidden",!0)),r.addClass(R),n._updateAria(),n._current=r}},_dragStart:function(){this._content.forcePageUpdate()},_dragEnd:function(e){var t=this,i=e.x.velocity,n=this.options.velocityThreshold,a=0,s=g(i)>this.options.bounceVelocityThreshold;i>n?a=1:i<-n&&(a=-1),this._content.paneMoved(a,s,(function(e){return t.trigger(m,e)}))},_transitionEnd:function(){this._content.updatePage(),this._setCurrent()},_initNavigation:function(){var t,n,a=this,s=a.options.messages,r=a._navigationContainer=e("<div class='k-scrollview-elements'></div>"),o=a.itemsWrapper,h=o.attr("id")||i.guid();o.attr("id",h),t=e('<a class="k-scrollview-prev" role="button" aria-label="'+s.previousButtonLabel+'" aria-controls="'+h+'">'+i.ui.icon("chevron-left")+"</a>"),n=e('<a class="k-scrollview-next" role="button" aria-label="'+s.nextButtonLabel+'" aria-controls="'+h+'">'+i.ui.icon("chevron-right")+"</a>"),t.hide(),n.hide(),r.append(t),r.append(n),a.element.append(r),a.ariaLiveEl=e("<div aria-live='polite' aria-atomic='true' class='k-sr-only'></div>"),a.element.append(a.ariaLiveEl),r.on(_+S,"a.k-scrollview-prev",a.prev.bind(a)),r.on(_+S,"a.k-scrollview-next",a.next.bind(a))},_navigatable:function(){var t=this,n=t._navigationContainer;t._ariaTemplate=i.template(t.options.ARIATemplate),n.on(C+S,t,(function(t){var i=e(t.target);t.keyCode!=r.SPACEBAR&&t.keyCode!=r.ENTER||(t.preventDefault(),i.click())})),t.element.attr({tabindex:0,role:"application","aria-roledescription":"carousel"}),t.itemsWrapper.attr("role","list").children().attr({role:"listitem","aria-roledescription":"slide"}),t.options.navigatable&&(n.find(">a.k-scrollview-prev").attr(E,0),n.find(">a.k-scrollview-next").attr(E,0),t.element.on(C+S,t,t._keyDown.bind(t)),t.element.on(T+S,t._focus.bind(t)),t.element.on(k+S,t._blur.bind(t)))},_focus:function(){this._focused=!0,this._setCurrent()},_blur:function(){this._current&&this._current.removeClass(R)},_keyDown:function(e){var t,i=e.keyCode;i==r.LEFT&&(t=!0,this.prev()),i==r.RIGHT&&(t=!0,this.next()),t&&(e.preventDefault(),e.stopPropagation())},_toggleNavigation:function(e){var t=e.nextPage||0===e.nextPage?e.nextPage:e.currentPage,i=this._navigationContainer,n=i.find(">a.k-scrollview-prev"),a=i.find(">a.k-scrollview-next");n.hide(),a.hide(),(t||0===t)&&(0!==t&&n.show(),t!=this._content.pageCount-1&&a.show())}});n.plugin(M)}(window.kendo.jQuery)})); //# sourceMappingURL=kendo.scrollview.min.js.map