@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) • 3.35 kB
JavaScript
!function(e){"function"==typeof define&&define.amd?define(["kendo.core.min","kendo.icons.min"],e):e()}((function(){var e,t,n,i,r,o,s,a,l,d,c,f,k,p,h;e=window.kendo.jQuery,n=window.kendo,i=n.ui,r=i.Widget,o="dir",s="asc",a="single",l="mixed",d="field",c="desc",f=".kendoColumnSorter",k=".k-link",p="aria-sort",h=r.extend({init:function(e,t){var n,i=this;r.fn.init.call(i,e,t),i._refreshHandler=i.refresh.bind(i),i.dataSource=i.options.dataSource.bind("change",i._refreshHandler),i.directions=i.options.initialDirection===s?[s,c]:[c,s],(n=i.element.find(k))[0]||(n=i.element.wrapInner('<a class="k-link" href="#"/>').find(k)),i.link=n,i.element.on("click"+f,i._click.bind(i))},options:{name:"ColumnSorter",mode:a,allowUnsort:!0,compare:null,filter:"",initialDirection:s,showIndexes:!1},events:["change"],destroy:function(){var e=this;r.fn.destroy.call(e),e.element.off(f),e.dataSource.unbind("change",e._refreshHandler),e._refreshHandler=e.element=e.link=e.dataSource=null},refresh:function(i){if(!i||"itemchange"!==i.action&&"sync"!==i.action){var r,a,l,f,k,h,m,u,g=this,v=g.dataSource.sort()||[],S=g.element,b=S.attr(n.attr(d)),w=(g.dataSource._sortFields||{})[b];S.removeAttr(n.attr(o)),S.removeAttr(p),w&&(r=w.dir,S.attr(n.attr(o),r),f=w.index),S.is("th")&&w&&(a=function(e){var t=null;return e.is("th")&&((t=e.closest("table")).parent().hasClass("k-grid-header-wrap")?t=t.closest(".k-grid").find(".k-grid-content > table"):t.parent().hasClass("k-grid-header-locked")&&(t=t.closest(".k-grid").find(".k-grid-content-locked > table"))),t}(S),a&&(S.attr(n.attr("index"))?(k=S.closest("table"),h=k.find("tr:not(.k-filter-row)"),m=n.attr("index"),(u=h.find("th["+m+"]:visible")).sort((function(n,i){n=e(n),i=e(i);var r=n.attr(m),o=i.attr(m);return r===t&&(r=e(n).index()),o===t&&(o=e(i).index()),(r=parseInt(r,10))>(o=parseInt(o,10))?1:r<o?-1:0})),l=u.index(S)):l=S.parent().children(":visible").index(S),a.find("col:not(.k-group-col):not(.k-hierarchy-col)").eq(l).toggleClass("k-sorted",r!==t))),S.toggleClass("k-sorted",r!==t),S.find(".k-i-sort-asc-small,.k-i-sort-desc-small,.k-svg-i-sort-asc-small,.k-svg-i-sort-desc-small,.k-sort-order,.k-sort-icon").remove(),r===s?(e('<span class="k-sort-icon">'+n.ui.icon("sort-asc-small")+"</span>").appendTo(g.link),S.attr(p,"ascending")):r===c&&(e('<span class="k-sort-icon">'+n.ui.icon("sort-desc-small")+"</span>").appendTo(g.link),S.attr(p,"descending")),g.options.showIndexes&&v.length>1&&f&&e('<span class="k-sort-order" />').html(f).appendTo(g.link)}},_toggleSortDirection:function(e){var n=this.directions;return e===n[n.length-1]&&this.options.allowUnsort?t:n[0]===e?n[1]:n[0]},_click:function(e){var i,r,s=this,c=s.element,f=c.attr(n.attr(d)),k=c.attr(n.attr(o)),p=s.options,h=null===s.options.compare?t:s.options.compare,m=s.dataSource.sort()||[],u=e.ctrlKey||e.metaKey;if(e.preventDefault(),(!p.filter||c.is(p.filter))&&(k=this._toggleSortDirection(k),!this.trigger("change",{sort:{field:f,dir:k,compare:h}}))){if(p.mode===a||p.mode===l&&!u)m=[{field:f,dir:k,compare:h}];else if("multiple"===p.mode||p.mode===l&&u){for(i=0,r=m.length;i<r;i++)if(m[i].field===f){m.splice(i,1);break}m.push({field:f,dir:k,compare:h})}this.dataSource.options.endless&&c.closest(".k-grid").getKendoGrid()._resetEndless(),this.dataSource.sort(m)}}}),i.plugin(h)}));
//# sourceMappingURL=kendo.columnsorter.min.js.map