datatable-sort-min.js revision 9088c9ec1ac8b3d8edc0c76da3e3ee34a5b859b1
YUI.add("datatable-sort",function(a){var g=a.Lang,d=g.isBoolean,b=g.isString,f=g.isArray,i=g.isObject,e=a.Array,h={asc:1,desc:-1,"1":1,"-1":-1};function c(){}c.ATTRS={sortable:{value:"auto",validator:"_validateSortable"},sortBy:{validator:"_validateSortBy",getter:"_getSortBy"},strings:{valueFn:function(){return a.Intl.get("datatable-sort");}}};a.mix(c.prototype,{sort:function(j,k){this.fire("sort",a.merge((k||{}),{sortBy:j||this.get("sortBy")}));},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=e(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;}}}}this.fire("sort",a.merge((r||{}),{sortBy:s}));},_afterDataChange:function(j){if(j.prevVal!==j.newVal||j.newVal.hasOwnProperty("_compare")){this._initSortFn();}},_afterSortByChange:function(j){this._setSortBy();if(this._sortBy.length){if(!this.data.comparator){this.data.comparator=this._sortComparator;}this.data.sort();}},_bindSortUI:function(){this.after(["sortableChange","sortByChange","columnsChange"],this._uiSetSortable);if(this._theadNode){this._sortHandle=this._theadNode.delegate("click",a.rbind("_onUITriggerSort",this),"."+this.getClassName("sortable","column"));}},_defSortFn:function(j){this.set.apply(this,["sortBy",j.sortBy].concat(j.details));},destructor:function(){if(this._sortHandle){this._sortHandle.detach();}},_getSortBy:function(o,m){var n,l,j,k;m=m.slice(7);if(m==="state"){n=[];for(l=0,j=this._sortBy.length;l<j;++l){k=this._sortBy[l];n.push({column:k._id,dir:k.sortDir});}return{state:(n.length===1)?n[0]:n};}else{return o;}},initializer:function(){var j=a.bind("_parseSortable",this);this._parseSortable();this._setSortBy();this._initSortFn();this.after({renderHeader:a.bind("_renderSortable",this),dataChange:a.bind("_afterDataChange",this),sortByChange:a.bind("_afterSortByChange",this),sortableChange:j,columnsChange:j});this.publish("sort",{defaultFn:a.bind("_defSortFn",this)});},_initSortFn:function(){var j=this;this.data._compare=function(s,r){var q=0,n,o,l,m,k,p;for(n=0,o=j._sortBy.length;!q&&n<o;++n){l=j._sortBy[n];m=l.sortDir;if(l.sortFn){q=l.sortFn(s,r)*m;}else{k=s.get(l.key);p=r.get(l.key);q=(k>p)?m:((k<p)?-m:0);}}return q;};if(this.get("sortable")&&this._sortBy.length){this.data.comparator=this._sortComparator;this.data.sort();}else{delete this.data.comparator;}},_onUITriggerSort:function(m){var n=m.currentTarget.get("id"),k={},j=1,l;m.preventDefault();if(n){a.Array.each(this._displayColumns,function(o){if(n===o._yuid){l=o._id;j=-(o.sortDir|0)||1;}});if(l){k[l]=j;this.fire("sort",{originEvent:m,sortBy:[k]});}}},_parseSortable:function(){var n=this.get("sortable"),m=[],l,j,k;if(f(n)){for(l=0,j=n.length;l<j;++l){k=n[l];if(!i(k,true)||f(k)){k=this.getColumn(k);}if(k){m.push(k._yuid);}}}else{if(n){m=this._displayColumns.slice();if(n==="auto"){for(l=m.length-1;l>=0;--l){if(!m[l].sortable){m.splice(l,1);}}}}}this._sortable=m;},_renderSortable:function(){this._uiSetSortable();this._bindSortUI();},_setSortBy:function(){var m=this._displayColumns,r=this.get("sortBy")||[],o=" "+this.getClassName("sorted"),n,p,j,k,q,l;this._sortBy=[];for(n=0,p=m.length;n<p;++n){l=m[n];delete l.sortDir;if(l.className){l.className=l.className.replace(o,"");}}r=e(r);for(n=0,p=r.length;n<p;++n){j=r[n];k=1;if(i(j)){q=j;for(j in q){if(q.hasOwnProperty(j)){k=h[q[j]];break;}}}if(j){l=this.getColumn(j)||{_id:j,key:j};if(l){l.sortDir=k;if(!l.className){l.className="";}l.className+=o;this._sortBy.push(l);}}}},_sortComparator:function(j){return j;},_validateSortable:function(j){return j==="auto"||d(j)||f(j);},_uiSetSortable:function(){var n=this._sortable||[],o=this.getClassName("sortable","column"),q=this.getClassName("sorted"),k=this.getClassName("sorted","desc"),m,j,l,p;this.get("boundingBox").toggleClass(this.getClassName("sortable"),n.length);this._theadNode.all("."+o).removeClass(o).removeClass(q).removeClass(k);for(m=0,j=n.length;m<j;++m){l=n[m];p=this._theadNode.one("#"+l._yuid);if(p){p.addClass(o);if(l.sortDir){p.addClass(q);if(l.sortDir===-1){p.addClass(k);}}}}},_validateSortBy:function(j){return j===null||b(j)||i(j,true)||(f(j)&&(b(j[0])||i(j,true)));}},true);a.DataTable.Sortable=c;a.Base.mix(a.DataTable,[c]);},"@VERSION@",{requires:["datatable-base"],lang:["en"]});