d74529387f5689a1c3426c92ddc9c23781ad49dfLuke SmithYUI.add('datatable-sort-deprecated', function(Y) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Plugs DataTable with sorting functionality.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @module datatable
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @submodule datatable-sort
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Adds column sorting to DataTable.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @class DataTableSort
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @extends Plugin.Base
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smithvar YgetClassName = Y.ClassNameManager.getClassName,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith DATATABLE = "datatable",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith COLUMN = "column",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith ASC = "asc",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith DESC = "desc",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //TODO: Don't use hrefs - use tab/arrow/enter
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith TEMPLATE = '<a class="{link_class}" title="{link_title}" href="{link_href}">{value}</a>';
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smithfunction DataTableSort() {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith DataTableSort.superclass.constructor.apply(this, arguments);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith}
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith// STATIC PROPERTIES
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke SmithY.mix(DataTableSort, {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * The namespace for the plugin. This will be the property on the host which
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * references the plugin instance.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @property NS
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type String
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @static
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @final
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @value "sort"
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith NS: "sort",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Class name.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @property NAME
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type String
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @static
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @final
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @value "dataTableSort"
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith NAME: "dataTableSort",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith// ATTRIBUTES
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith ATTRS: {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @attribute trigger
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @description Defines the trigger that causes a column to be sorted:
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * {event, selector}, where "event" is an event type and "selector" is
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * is a node query selector.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type Object
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @default {event:"click", selector:"th"}
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @writeOnce "initOnly"
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith trigger: {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith value: {event:"click", selector:"th"},
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith writeOnce: "initOnly"
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @attribute lastSortedBy
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @description Describes last known sort state: {key,dir}, where
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * "key" is column key and "dir" is either "asc" or "desc".
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type Object
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith lastSortedBy: {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith setter: "_setLastSortedBy",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith lazyAdd: false
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @attribute template
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @description Tokenized markup template for TH sort element.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type String
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @default '<a class="{link_class}" title="{link_title}" href="{link_href}">{value}</a>'
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith template: {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith value: TEMPLATE
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Strings used in the UI elements.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * The strings used are defaulted from the datatable-sort language pack
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * for the language identified in the YUI "lang" configuration (which
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * defaults to "en").
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Configurable strings are "sortBy" and "reverseSortBy", which are
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * assigned to the sort link's title attribute.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @attribute strings
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @type {Object}
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith strings: {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith valueFn: function () { return Y.Intl.get('datatable-sort-deprecated'); }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith});
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith// PROTOTYPE
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith//
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith/////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke SmithY.extend(DataTableSort, Y.Plugin.Base, {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // METHODS
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /////////////////////////////////////////////////////////////////////////////
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Initializer.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method initializer
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param config {Object} Config object.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @private
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith initializer: function(config) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var dt = this.get("host"),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith trigger = this.get("trigger");
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dt.get("recordset").plug(Y.Plugin.RecordsetSort, {dt: dt});
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dt.get("recordset").sort.addTarget(dt);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Wrap link around TH value
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this.doBefore("_createTheadThNode", this._beforeCreateTheadThNode);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Add class
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this.doBefore("_attachTheadThNode", this._beforeAttachTheadThNode);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this.doBefore("_attachTbodyTdNode", this._beforeAttachTbodyTdNode);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Attach trigger handlers
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dt.delegate(trigger.event, Y.bind(this._onEventSortColumn,this), trigger.selector);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Attach UI hooks
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dt.after("recordsetSort:sort", function() {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this._uiSetRecordset(this.get("recordset"));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith });
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this.on("lastSortedByChange", function(e) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this._uiSetLastSortedBy(e.prevVal, e.newVal, dt);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith });
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //TODO
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //dt.after("recordset:mutation", function() {//reset lastSortedBy});
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //TODO
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //add Column sortFn ATTR
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Update UI after the fact (render-then-plug case)
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if(dt.get("rendered")) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dt._uiSetColumnset(dt.get("columnset"));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this._uiSetLastSortedBy(null, this.get("lastSortedBy"), dt);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _setLastSortedBy
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @description Normalizes lastSortedBy
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param val {String | Object} {key, dir} or "key"
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @return {key, dir, notdir}
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @private
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _setLastSortedBy: function(val) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (Y.Lang.isString(val)) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith val = { key: val, dir: "desc" };
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (val) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith return (val.dir === "desc") ?
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith { key: val.key, dir: "desc", notdir: "asc" } :
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith { key: val.key, dir: "asc", notdir:"desc" };
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith } else {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith return null;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Updates sort UI.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _uiSetLastSortedBy
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param val {Object} New lastSortedBy object {key,dir}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param dt {Y.DataTable.Base} Host.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @protected
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _uiSetLastSortedBy: function(prevVal, newVal, dt) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var strings = this.get('strings'),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith columnset = dt.get("columnset"),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith prevKey = prevVal && prevVal.key,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith newKey = newVal && newVal.key,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith prevClass = prevVal && dt.getClassName(prevVal.dir),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith newClass = newVal && dt.getClassName(newVal.dir),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith prevColumn = columnset.keyHash[prevKey],
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith newColumn = columnset.keyHash[newKey],
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith tbodyNode = dt._tbodyNode,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith fromTemplate = Y.Lang.sub,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith th, sortArrow, sortLabel;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Clear previous UI
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (prevColumn && prevClass) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith th = prevColumn.thNode;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortArrow = th.one('a');
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (sortArrow) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortArrow.set('title', fromTemplate(strings.sortBy, {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith column: prevColumn.get('label')
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith th.removeClass(prevClass);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith tbodyNode.all("." + YgetClassName(COLUMN, prevColumn.get("id")))
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith .removeClass(prevClass);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // Add new sort UI
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (newColumn && newClass) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith th = newColumn.thNode;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortArrow = th.one('a');
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (sortArrow) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortLabel = (newVal.dir === ASC) ? "reverseSortBy" : "sortBy";
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortArrow.set('title', fromTemplate(strings[sortLabel], {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith column: newColumn.get('label')
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith th.addClass(newClass);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith tbodyNode.all("." + YgetClassName(COLUMN, newColumn.get("id")))
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith .addClass(newClass);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Before header cell element is created, inserts link markup around {value}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _beforeCreateTheadThNode
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param o {Object} {value, column, tr}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @protected
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _beforeCreateTheadThNode: function(o) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var sortedBy, sortLabel;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (o.column.get("sortable")) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortedBy = this.get('lastSortedBy');
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortLabel = (sortedBy && sortedBy.dir === ASC &&
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sortedBy.key === o.column.get('key')) ?
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith "reverseSortBy" : "sortBy";
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith o.value = Y.Lang.sub(this.get("template"), {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith link_class: o.link_class || "",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith link_title: Y.Lang.sub(this.get('strings.' + sortLabel), {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith column: o.column.get('label')
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith link_href: "#",
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith value: o.value
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith });
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Before header cell element is attached, sets applicable class names.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _beforeAttachTheadThNode
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param o {Object} {value, column, tr}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @protected
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _beforeAttachTheadThNode: function(o) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var lastSortedBy = this.get("lastSortedBy"),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith key = lastSortedBy && lastSortedBy.key,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dir = lastSortedBy && lastSortedBy.dir,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith notdir = lastSortedBy && lastSortedBy.notdir;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // This Column is sortable
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if(o.column.get("sortable")) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith o.th.addClass(YgetClassName(DATATABLE, "sortable"));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // This Column is currently sorted
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if(key && (key === o.column.get("key"))) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith o.th.replaceClass(YgetClassName(DATATABLE, notdir), YgetClassName(DATATABLE, dir));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * Before header cell element is attached, sets applicable class names.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _beforeAttachTbodyTdNode
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param o {Object} {record, column, tr, headers, classnames, value}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @protected
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _beforeAttachTbodyTdNode: function(o) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var lastSortedBy = this.get("lastSortedBy"),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith key = lastSortedBy && lastSortedBy.key,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dir = lastSortedBy && lastSortedBy.dir,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith notdir = lastSortedBy && lastSortedBy.notdir;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // This Column is sortable
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if(o.column.get("sortable")) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith o.td.addClass(YgetClassName(DATATABLE, "sortable"));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith // This Column is currently sorted
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if(key && (key === o.column.get("key"))) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith o.td.replaceClass(YgetClassName(DATATABLE, notdir), YgetClassName(DATATABLE, dir));
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith },
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith /**
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * In response to the "trigger" event, sorts the underlying Recordset and
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * updates the lastSortedBy attribute.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith *
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @method _onEventSortColumn
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @param o {Object} {value, column, tr}.
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith * @protected
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith */
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith _onEventSortColumn: function(e) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith e.halt();
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith //TODO: normalize e.currentTarget to TH
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith var table = this.get("host"),
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith column = table.get("columnset").idHash[e.currentTarget.get("id")],
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith key, field, lastSort, desc, sorter;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith if (column.get("sortable")) {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith key = column.get("key");
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith field = column.get("field");
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith lastSort = this.get("lastSortedBy") || {};
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith desc = (lastSort.key === key && lastSort.dir === ASC);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith sorter = column.get("sortFn");
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith table.get("recordset").sort.sort(field, desc, sorter);
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith this.set("lastSortedBy", {
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith key: key,
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith dir: (desc) ? DESC : ASC
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith });
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith }
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith});
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke SmithY.namespace("Plugin").DataTableSort = DataTableSort;
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith
d74529387f5689a1c3426c92ddc9c23781ad49dfLuke Smith}, '@VERSION@' ,{requires:['datatable-base-deprecated','plugin','recordset-sort'], lang:['en']});