/** * This class defines a series of static methods that are used on a * {@link Ext.data.Field} for performing sorting. The methods cast the * underlying values into a data type that is appropriate for sorting on * that particular field. If a {@link Ext.data.Field#type} is specified, * the sortType will be set to a sane default if the sortType is not * explicitly defined on the field. The sortType will make any necessary * modifications to the value and return it. * * - **`asText`** - Removes any tags and converts the value to a string * - **`asUCText`** - Removes any tags and converts the value to an uppercase string * - **`asUCString`** - Converts the value to an uppercase string * - **`asDate`** - Converts the value into Unix epoch time * - **`asFloat`** - Converts the value to a floating point number * - **`asInt`** - Converts the value to an integer number * * It is also possible to create a custom sortType that can be used throughout * an application. * * Ext.apply(Ext.data.SortTypes, { * asPerson: function(person){ * // expects an object with a first and last name property * return person.lastName.toUpperCase() + person.firstName.toLowerCase(); * } * }); * * Ext.define('Employee', { * extend: 'Ext.data.Model', * fields: [{ * name: 'person', * sortType: 'asPerson' * }, { * name: 'salary', * type: 'float' // sortType set to asFloat * }] * }); * * @singleton */Ext.define('Ext.data.SortTypes', function() { var me; return { singleton: true, constructor: function() { me = this; }, /** * Default sort that does nothing * @param {Object} s The value being converted * @return {Object} The comparison value */ none: Ext.identityFn, /** * The regular expression used to strip commas * @type {RegExp} * @property */ stripCommasRe: /,/g, /** * The regular expression used to strip tags * @type {RegExp} * @property */ stripTagsRE: /<\/?[^>]+>/gi, /** * Strips all HTML tags to sort on text only * @param {Object} s The value being converted * @return {String} The comparison value */ asText: function(s) { // If allowNull, return the Unicode null character. return (s != null) ? String(s).replace(me.stripTagsRE, '') : '\u0000'; }, /** * Strips all HTML tags to sort on text only - Case insensitive * @param {Object} s The value being converted * @return {String} The comparison value */ asUCText: function(s) { // If allowNull, return the Unicode null character. /* eslint-disable-next-line newline-per-chained-call */ return (s != null) ? String(s).toUpperCase().replace(me.stripTagsRE, '') : '\u0000'; }, /** * Case insensitive string * @param {Object} s The value being converted * @return {String} The comparison value */ asUCString: function(s) { // If allowNull, return the Unicode null character. return (s != null) ? String(s).toUpperCase() : '\u0000'; }, /** * Date sorting * @param {Object} s The value being converted * @return {Number} The comparison value */ asDate: function(s) { if (!s) { return 0; } if (Ext.isDate(s)) { return s.getTime(); } return Date.parse(String(s)); }, /** * Float sorting * @param {Object} s The value being converted * @return {Number} The comparison value */ asFloat: function(s) { var val = parseFloat(String(s).replace(me.stripCommasRe, '')); return isNaN(val) ? 0 : val; }, /** * Integer sorting * @param {Object} s The value being converted * @return {Number} The comparison value */ asInt: function(s) { var val = parseInt(String(s).replace(me.stripCommasRe, ''), 10); return isNaN(val) ? 0 : val; } };});