@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines • 3.96 kB
JavaScript
/* @license */
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`kendo.core.min.js`),require(`kendo.icons.min.js`)):typeof define==`function`&&define.amd?define([`exports`,`kendo.core.min`,`kendo.icons.min`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Columnsorter={}),e.kendo._globals.Core,e.kendo._globals.Icons))})(this,function(e,t,n){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let r={id:`columnsorter`,name:`Column Sorter`,category:`framework`,depends:[`core`,`icons`],advanced:!0};(function(e,t){var n=window.kendo,r=n.ui,i=r.Widget,a=`dir`,o=`asc`,s=`single`,c=`multiple`,l=`mixed`,u=`field`,d=`desc`,f=`.kendoColumnSorter`,p=`.k-link`,m=`aria-sort`,h=i.extend({init:function(e,t){var n=this,r;i.fn.init.call(n,e,t),n._refreshHandler=n.refresh.bind(n),n.dataSource=n.options.dataSource.bind(`change`,n._refreshHandler),n.directions=n.options.initialDirection===o?[o,d]:[d,o],r=n.element.find(p),r[0]||(r=n.element.wrapInner(`<a class="k-link" href="#"/>`).find(p)),n.link=r,n.element.on(`click`+f,n._click.bind(n))},options:{name:`ColumnSorter`,mode:s,allowUnsort:!0,compare:null,filter:``,initialDirection:o,showIndexes:!1},events:[`change`],destroy:function(){var e=this;i.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(r){if(!(r&&(r.action===`itemchange`||r.action===`sync`))){var i=this,s=i.dataSource.sort()||[],c,l,f,p=i.element,h=p.attr(n.attr(u)),v=(i.dataSource._sortFields||{})[h],y,b;p.removeAttr(n.attr(a)),p.removeAttr(m),v&&(c=v.dir,p.attr(n.attr(a),c),b=v.index),p.is(`th`)&&v&&(l=_(p),l&&(p.attr(n.attr(`index`))?(f=g(p.closest(`table`)),y=f.index(p)):y=p.parent().children(`:visible`).index(p),y>-1&&l.find(`col:not(.k-group-col):not(.k-hierarchy-col)`).eq(y).toggleClass(`k-sorted`,c!==t))),p.toggleClass(`k-sorted`,c!==t),p.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(),c===o?(e(`<span class="k-sort-icon">`+n.ui.icon(`sort-asc-small`)+`</span>`).appendTo(i.link),p.attr(m,`ascending`)):c===d?(e(`<span class="k-sort-icon">`+n.ui.icon(`sort-desc-small`)+`</span>`).appendTo(i.link),p.attr(m,`descending`)):p.attr(m,`none`),i.options.showIndexes&&s.length>1&&b&&e(`<span class="k-sort-order" />`).html(b).appendTo(i.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 r=this,i=r.element,o=i.attr(n.attr(u)),d=i.attr(n.attr(a)),f=r.options,p=r.options.compare===null?t:r.options.compare,m=r.dataSource.sort()||[],h=e.ctrlKey||e.metaKey,g,_;if(e.preventDefault(),!(f.filter&&!i.is(f.filter))&&(d=this._toggleSortDirection(d),!this.trigger(`change`,{sort:{field:o,dir:d,compare:p}}))){if(f.mode===s||f.mode===l&&!h)m=[{field:o,dir:d,compare:p}];else if(f.mode===c||f.mode===l&&h){for(g=0,_=m.length;g<_;g++)if(m[g].field===o){m.splice(g,1);break}m.push({field:o,dir:d,compare:p})}this.dataSource.options.endless&&i.closest(`.k-grid`).getKendoGrid()._resetEndless(),this.dataSource.sort(m)}}});function g(r){var i=r.find(`tr:not(.k-filter-row)`),a=n.attr(`index`),o=i.find(`th[`+a+`]:visible`);return[].sort.call(o,function(n,r){n=e(n),r=e(r);var i=n.attr(a),o=r.attr(a);return i===t&&(i=e(n).index()),o===t&&(o=e(r).index()),i=parseInt(i,10),o=parseInt(o,10),i>o?1:i<o?-1:0})}function _(e){var t=null;return e.is(`th`)&&(t=e.closest(`table`),t.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}r.plugin(h)})(window.kendo.jQuery);var i=kendo;e.__meta__=r,e.default=i});
//# sourceMappingURL=kendo.columnsorter.min.js.map