datatable-sort-min.js revision 856e5aed23a13ec43a28b51e4e6b8f2954e92a2e
YUI.add("datatable-sort",function(b){var h=b.Lang,e=h.isBoolean,c=h.isString,g=h.isArray,j=h.isObject,f=b.Array,a=h.sub,i={asc:1,desc:-1,"1":1,"-1":-1};function d(){}d.ATTRS={sortable:{value:"auto",validator:"_validateSortable"},sortBy:{validator:"_validateSortBy",getter:"_getSortBy"},strings:{}};b.mix(d.prototype,{sort:function(k,l){return this.fire("sort",b.merge((l||{}),{sortBy:k||this.get("sortBy")}));},SORTABLE_HEADER_TEMPLATE:'<a class="{className}" title="{title}" role="button"><span role="presentation" class="{indicatorClass}"></span></a>',toggleSort:function(l,r){var q=this._sortBy,s=[],n,p,m,k,o;for(n=0,p=q.length;n<p;++n){k={};k[q[n]._id]=q[n].sortDir;s.push(k);}if(l){l=f(l);for(n=0,p=l.length;n<p;++n){k=l[n];o=-1;for(m=s.length-1;n>=0;--n){if(s[m][k]){s[m][k]*=-1;break;}}}}else{for(n=0,p=s.length;n<p;++n){for(k in s[n]){if(s[n].hasOwnProperty(k)){s[n][k]*=-1;break;}}}}return this.fire("sort",b.merge((r||{}),{sortBy:s}));},_afterSortByChange:function(k){this._setSortBy();if(this._sortBy.length){if(!this.data.comparator){this.data.comparator=this._sortComparator;}this.data.sort();}},_afterSortDataChange:function(k){if(k.prevVal!==k.newVal||k.newVal.hasOwnProperty("_compare")){this._initSortFn();}},_afterSortRecordChange:function(m){var l,k;for(l=0,k=this._sortBy.length;l<k;++l){if(m.changed[this._sortBy[l].key]){this.data.sort();break;}}},_bindSortUI:function(){this.after(["sortableChange","sortByChange","columnsChange"],b.bind("_uiSetSortable",this));if(this._theadNode){this._sortHandle=this.delegate("click",b.rbind("_onUITriggerSort",this),"."+this.getClassName("sortable","column"));}},_defSortFn:function(k){this.set.apply(this,["sortBy",k.sortBy].concat(k.details));},destructor:function(){if(this._sortHandle){this._sortHandle.detach();}},_getSortBy:function(p,n){var o,m,k,l;n=n.slice(7);if(n==="state"){o=[];for(m=0,k=this._sortBy.length;m<k;++m){l=this._sortBy[m];o.push({column:l._id,dir:l.sortDir});}return{state:(o.length===1)?o[0]:o};}else{return p;}},initializer:function(){var k=b.bind("_parseSortable",this);this._parseSortable();this._setSortBy();this._initSortFn();this._initSortStrings();this.after({renderHeader:b.bind("_renderSortable",this),dataChange:b.bind("_afterSortDataChange",this),sortByChange:b.bind("_afterSortByChange",this),sortableChange:k,columnsChange:k,"*:change":b.bind("_afterSortRecordChange",this)});this.publish("sort",{defaultFn:b.bind("_defSortFn",this)});},_initSortFn:function(){var k=this;this.data._compare=function(t,s){var r=0,o,p,m,n,l,q;for(o=0,p=k._sortBy.length;!r&&o<p;++o){m=k._sortBy[o];n=m.sortDir;if(m.sortFn){r=m.sortFn(t,s)*n;}else{l=t.get(m.key);q=s.get(m.key);r=(l>q)?n:((l<q)?-n:0);}}return r;};if(this._sortBy.length){this.data.comparator=this._sortComparator;this.data.sort();}else{delete this.data.comparator;}},_initSortStrings:function(){this.set("strings",b.mix((this.get("strings")||{}),b.Intl.get("datatable-sort")));},_onUITriggerSort:function(n){var o=n.currentTarget.getAttribute("data-yui3-col-id"),l={},k=1,m=o&&this.getColumn(o);n.preventDefault();if(m){l[o]=-(m.sortDir|0)||1;this.fire("sort",{originEvent:n,sortBy:[l]});}},_parseSortable:function(){var o=this.get("sortable"),n=[],m,k,l;if(g(o)){for(m=0,k=o.length;m<k;++m){l=o[m];if(!j(l,true)||g(l)){l=this.getColumn(l);}if(l){n.push(l);}}}else{if(o){n=this._displayColumns.slice();if(o==="auto"){for(m=n.length-1;m>=0;--m){if(!n[m].sortable){n.splice(m,1);}}}}}this._sortable=n;},_renderSortable:function(){this._uiSetSortable();this._bindSortUI();},_setSortBy:function(){var n=this._displayColumns,s=this.get("sortBy")||[],p=" "+this.getClassName("sorted"),o,q,k,l,r,m;this._sortBy=[];for(o=0,q=n.length;o<q;++o){m=n[o];delete m.sortDir;if(m.className){m.className=m.className.replace(p,"");}}s=f(s);for(o=0,q=s.length;o<q;++o){k=s[o];l=1;if(j(k)){r=k;for(k in r){if(r.hasOwnProperty(k)){l=i[r[k]];break;}}}if(k){m=this.getColumn(k)||{_id:k,key:k};if(m){m.sortDir=l;if(!m.className){m.className="";}m.className+=p;this._sortBy.push(m);}}}},_sortComparator:function(k){return k;},_uiSetSortable:function(){var m=this._sortable||[],t=this.getClassName("sortable","column"),n=this.getClassName("sorted"),u=this.getClassName("sorted","desc"),v=this.getClassName("sort","liner"),r=this.getClassName("sort","indicator"),o,p,k,l,q,s;this.get("boundingBox").toggleClass(this.getClassName("sortable"),m.length);this._theadNode.all("."+r).remove().destroy(true);this._theadNode.all("."+t).removeClass(t).removeClass(n).removeClass(u).each(function(x){var w=x.one("."+v);if(w){w.replace(w.get("childNodes").toFrag());}});for(o=0,p=m.length;o<p;++o){k=m[o];l=this._theadNode.one("#"+k._yuid);if(l){l.addClass(t);if(k.sortDir){l.addClass(n);if(k.sortDir===-1){l.addClass(u);}}s=a(this.getString((k.sortDir===1)?"reverseSortBy":"sortBy"),{column:k.abbr||k.label||k.key||("column "+o)});b.Node.create(b.Lang.sub(this.SORTABLE_HEADER_TEMPLATE,{className:v,indicatorClass:r,title:s})).prepend(l.get("childNodes").toFrag()).appendTo(l);}}},_validateSortable:function(k){return k==="auto"||e(k)||g(k);},_validateSortBy:function(k){return k===null||c(k)||j(k,true)||(g(k)&&(c(k[0])||j(k,true)));}},true);b.DataTable.Sortable=d;b.Base.mix(b.DataTable,[d]);},"@VERSION@",{requires:["datatable-base"],lang:["en"]});