diff --git a/dist/tablefilter/tablefilter.js b/dist/tablefilter/tablefilter.js index 7dfaa7ce..140cfe5a 100644 --- a/dist/tablefilter/tablefilter.js +++ b/dist/tablefilter/tablefilter.js @@ -126,9 +126,9 @@ return /******/ (function(modules) { // webpackBootstrap var _root = __webpack_require__(2); - var _emitter = __webpack_require__(8); + var _emitter = __webpack_require__(7); - var _gridLayout = __webpack_require__(9); + var _gridLayout = __webpack_require__(8); var _loader = __webpack_require__(11); @@ -158,7 +158,7 @@ return /******/ (function(modules) { // webpackBootstrap var _dateType = __webpack_require__(29); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -1948,8 +1948,8 @@ return /******/ (function(modules) { // webpackBootstrap // search args re-init var searchArgs = this.getFiltersValue(); - var numCellData = void 0; - var nbFormat = void 0; + var numData = void 0; + var nbFormat = this.decimalSeparator; var re_le = new RegExp(this.leOperator), re_ge = new RegExp(this.geOperator), re_l = new RegExp(this.lwOperator), @@ -2091,37 +2091,54 @@ return /******/ (function(modules) { // webpackBootstrap } } else { //first numbers need to be unformatted - if (this.hasType(colIdx, [_const.NUMBER])) { - numCellData = Number(cellData); - } else if (this.hasType(colIdx, [_const.FORMATTED_NUMBER, _const.FORMATTED_NUMBER_EU])) { - numCellData = (0, _number.unformat)(cellData, this.colTypes[colIdx]); - nbFormat = this.colTypes[colIdx]; - } else { - if (this.thousandsSeparator === ',' && this.decimalSeparator === '.') { - nbFormat = _const.FORMATTED_NUMBER; - } else { - nbFormat = _const.FORMATTED_NUMBER_EU; + // if (this.hasType(colIdx, [NUMBER])) { + // numData = Number(cellData); + // } + // else if (this.hasType(colIdx, + // [FORMATTED_NUMBER, FORMATTED_NUMBER_EU])) { + // numData =unformatNb(cellData, this.colTypes[colIdx]); + // nbFormat = this.colTypes[colIdx]; + // } else { + // if (this.thousandsSeparator === ',' && + // this.decimalSeparator === '.') { + // nbFormat = FORMATTED_NUMBER; + // } else { + // nbFormat = FORMATTED_NUMBER_EU; + // } + // numData = unformatNb(cellData, nbFormat); + // } + + if (this.hasType(colIdx, [_const.NUMBER + /*, FORMATTED_NUMBER, FORMATTED_NUMBER_EU*/])) { + var colType = this.colTypes[colIdx]; + if (colType.hasOwnProperty('decimal')) { + nbFormat = colType.decimal; } - numCellData = (0, _number.unformat)(cellData, nbFormat); + // numData = Number(cellData) ||parseNb(cellData, nbFormat); } + // else { + // numData = Number(cellData) || + // parseNb(cellData, tf.decimalSeparator); + // } + numData = Number(cellData) || (0, _number.parse)(cellData, nbFormat); // first checks if there is any operator (<,>,<=,>=,!,*,=,{,}, // rgx:) // lower equal if (hasLE) { - occurence = numCellData <= (0, _number.unformat)(sA.replace(re_le, ''), nbFormat); + occurence = numData <= (0, _number.parse)(sA.replace(re_le, ''), nbFormat); } //greater equal else if (hasGE) { - occurence = numCellData >= (0, _number.unformat)(sA.replace(re_ge, ''), nbFormat); + occurence = numData >= (0, _number.parse)(sA.replace(re_ge, ''), nbFormat); } //lower else if (hasLO) { - occurence = numCellData < (0, _number.unformat)(sA.replace(re_l, ''), nbFormat); + occurence = numData < (0, _number.parse)(sA.replace(re_l, ''), nbFormat); } //greater else if (hasGR) { - occurence = numCellData > (0, _number.unformat)(sA.replace(re_g, ''), nbFormat); + occurence = numData > (0, _number.parse)(sA.replace(re_g, ''), nbFormat); } //different else if (hasDF) { @@ -2166,12 +2183,12 @@ return /******/ (function(modules) { // webpackBootstrap } else { // If numeric type data, perform a strict equality test and // fallback to unformatted number string comparison - if (numCellData && this.hasType(colIdx, [_const.NUMBER, _const.FORMATTED_NUMBER, _const.FORMATTED_NUMBER_EU]) && !this.singleSearchFlt) { - // unformatNb can return 0 for strings which are not + if (numData && this.hasType(colIdx, [_const.NUMBER]) && !this.singleSearchFlt) { + // parseNb can return 0 for strings which are not // formatted numbers, in that case return the original - // string. TODO: handle this in unformatNb - sA = (0, _number.unformat)(sA, nbFormat) || sA; - occurence = numCellData === sA || (0, _string.contains)(sA.toString(), numCellData.toString(), this.isExactMatch(colIdx), this.caseSensitive); + // string. TODO: handle this in parseNb + sA = (0, _number.parse)(sA, nbFormat) || sA; + occurence = numData === sA || (0, _string.contains)(sA.toString(), numData.toString(), this.isExactMatch(colIdx), this.caseSensitive); } else { // Finally test search term is contained in cell data occurence = (0, _string.contains)(sA, cellData, this.isExactMatch(colIdx), this.caseSensitive); @@ -2329,8 +2346,17 @@ return /******/ (function(modules) { // webpackBootstrap continue; } var cellData = this.getCellData(cell[j]); - var nbFormat = this.hasType(colIndex, [_const.FORMATTED_NUMBER, _const.FORMATTED_NUMBER_EU]) ? this.colTypes[colIndex] : undefined; - var data = num ? (0, _number.unformat)(cellData, nbFormat) : cellData; + // let nbFormat = this.hasType(colIndex, + // [FORMATTED_NUMBER, FORMATTED_NUMBER_EU]) ? + // this.colTypes[colIndex] : undefined; + var decimal = this.decimalSeparator; + if (this.hasType(colIndex, [_const.NUMBER])) { + var colType = this.colTypes[colIndex]; + if (colType.hasOwnProperty('decimal')) { + decimal = colType.decimal; + } + } + var data = num ? (0, _number.parse)(cellData, decimal) : cellData; colValues.push(data); } } @@ -3746,11 +3772,11 @@ return /******/ (function(modules) { // webpackBootstrap Object.defineProperty(exports, "__esModule", { value: true }); - exports.unformat = undefined; + exports.parse = undefined; var _types = __webpack_require__(4); - var _const = __webpack_require__(7); + // import {FORMATTED_NUMBER} from './const'; /** * Returns a number for a formatted number @@ -3759,8 +3785,8 @@ return /******/ (function(modules) { // webpackBootstrap * 'formatted-number-eu' * @return {Number} Unformatted number */ - var unformat = exports.unformat = function unformat(value) { - var format = arguments.length <= 1 || arguments[1] === undefined ? _const.FORMATTED_NUMBER : arguments[1]; + var parse = exports.parse = function parse(value) { + var decimal = arguments.length <= 1 || arguments[1] === undefined ? '.' : arguments[1]; // Return the value as-is if it's already a number if ((0, _types.isNumber)(value)) { @@ -3769,7 +3795,7 @@ return /******/ (function(modules) { // webpackBootstrap // Build regex to strip out everything except digits, decimal point and // minus sign - var decimal = format !== _const.FORMATTED_NUMBER ? ',' : '.'; + // let decimal = format !== FORMATTED_NUMBER ? ',' : '.'; var regex = new RegExp('[^0-9-' + decimal + ']', ['g']); var unformatted = parseFloat(('' + value).replace(/\((.*)\)/, '-$1') // replace bracketed values with negatives .replace(regex, '') // strip out any cruft @@ -3782,140 +3808,6 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, /* 7 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - /** - * Filter types - */ - - /** - * Input filter type - * @type {String} - */ - var INPUT = exports.INPUT = 'input'; - /** - * Select filter type - * @type {String} - */ - var SELECT = exports.SELECT = 'select'; - /** - * Multiple select filter type - * @type {String} - */ - var MULTIPLE = exports.MULTIPLE = 'multiple'; - /** - * Checklist filter type - * @type {String} - */ - var CHECKLIST = exports.CHECKLIST = 'checklist'; - /** - * None filter type - * @type {String} - */ - var NONE = exports.NONE = 'none'; - - /** - * Key codes - */ - - /** - * Enter key code - * @type {Number} - */ - var ENTER_KEY = exports.ENTER_KEY = 13; - /** - * Tab key code - * @type {Number} - */ - var TAB_KEY = exports.TAB_KEY = 9; - /** - * Escape key code - * @type {Number} - */ - var ESC_KEY = exports.ESC_KEY = 27; - /** - * Up arrow key code - * @type {Number} - */ - var UP_ARROW_KEY = exports.UP_ARROW_KEY = 38; - /** - * Down arrow key code - * @type {Number} - */ - var DOWN_ARROW_KEY = exports.DOWN_ARROW_KEY = 40; - - /** - * HTML tags - */ - - /** - * Header cell tag - * @type {String} - */ - var HEADER_TAG = exports.HEADER_TAG = 'TH'; - /** - * Cell tag - * @type {String} - */ - var CELL_TAG = exports.CELL_TAG = 'TD'; - - /** - * Data types - */ - - /** - * String - * @type {String} - */ - var STRING = exports.STRING = 'string'; - - /** - * Number - * @type {String} - */ - var NUMBER = exports.NUMBER = 'number'; - - /** - * Formatted number - * @type {String} - */ - var FORMATTED_NUMBER = exports.FORMATTED_NUMBER = 'formatted-number'; - - /** - * Formatted number - * @type {String} - */ - var FORMATTED_NUMBER_EU = exports.FORMATTED_NUMBER_EU = 'formatted-number-eu'; - - /** - * Date - * @type {String} - */ - var DATE = exports.DATE = 'date'; - - /** - * IP address - * @type {String} - */ - var IP_ADDRESS = exports.IP_ADDRESS = 'ipaddress'; - - /** - * Default values - */ - - /** - * Auto filter delay in milliseconds - * @type {Number} - */ - var AUTO_FILTER_DELAY = exports.AUTO_FILTER_DELAY = 750; - -/***/ }, -/* 8 */ /***/ function(module, exports) { "use strict"; @@ -3995,7 +3887,7 @@ return /******/ (function(modules) { // webpackBootstrap }(); /***/ }, -/* 9 */ +/* 8 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -4005,7 +3897,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.GridLayout = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -4013,7 +3905,7 @@ return /******/ (function(modules) { // webpackBootstrap var _string = __webpack_require__(5); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -4568,7 +4460,7 @@ return /******/ (function(modules) { // webpackBootstrap }(_feature.Feature); /***/ }, -/* 10 */ +/* 9 */ /***/ function(module, exports) { 'use strict'; @@ -4690,6 +4582,140 @@ return /******/ (function(modules) { // webpackBootstrap return Feature; }(); +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + /** + * Filter types + */ + + /** + * Input filter type + * @type {String} + */ + var INPUT = exports.INPUT = 'input'; + /** + * Select filter type + * @type {String} + */ + var SELECT = exports.SELECT = 'select'; + /** + * Multiple select filter type + * @type {String} + */ + var MULTIPLE = exports.MULTIPLE = 'multiple'; + /** + * Checklist filter type + * @type {String} + */ + var CHECKLIST = exports.CHECKLIST = 'checklist'; + /** + * None filter type + * @type {String} + */ + var NONE = exports.NONE = 'none'; + + /** + * Key codes + */ + + /** + * Enter key code + * @type {Number} + */ + var ENTER_KEY = exports.ENTER_KEY = 13; + /** + * Tab key code + * @type {Number} + */ + var TAB_KEY = exports.TAB_KEY = 9; + /** + * Escape key code + * @type {Number} + */ + var ESC_KEY = exports.ESC_KEY = 27; + /** + * Up arrow key code + * @type {Number} + */ + var UP_ARROW_KEY = exports.UP_ARROW_KEY = 38; + /** + * Down arrow key code + * @type {Number} + */ + var DOWN_ARROW_KEY = exports.DOWN_ARROW_KEY = 40; + + /** + * HTML tags + */ + + /** + * Header cell tag + * @type {String} + */ + var HEADER_TAG = exports.HEADER_TAG = 'TH'; + /** + * Cell tag + * @type {String} + */ + var CELL_TAG = exports.CELL_TAG = 'TD'; + + /** + * Data types + */ + + /** + * String + * @type {String} + */ + var STRING = exports.STRING = 'string'; + + /** + * Number + * @type {String} + */ + var NUMBER = exports.NUMBER = 'number'; + + /** + * Formatted number + * @type {String} + */ + var FORMATTED_NUMBER = exports.FORMATTED_NUMBER = 'formatted-number'; + + /** + * Formatted number + * @type {String} + */ + var FORMATTED_NUMBER_EU = exports.FORMATTED_NUMBER_EU = 'formatted-number-eu'; + + /** + * Date + * @type {String} + */ + var DATE = exports.DATE = 'date'; + + /** + * IP address + * @type {String} + */ + var IP_ADDRESS = exports.IP_ADDRESS = 'ipaddress'; + + /** + * Default values + */ + + /** + * Auto filter delay in milliseconds + * @type {Number} + */ + var AUTO_FILTER_DELAY = exports.AUTO_FILTER_DELAY = 750; + /***/ }, /* 11 */ /***/ function(module, exports, __webpack_require__) { @@ -4701,7 +4727,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.Loader = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -4709,7 +4735,7 @@ return /******/ (function(modules) { // webpackBootstrap var _root = __webpack_require__(2); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -5093,7 +5119,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.PopupFilter = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _types = __webpack_require__(4); @@ -5101,7 +5127,7 @@ return /******/ (function(modules) { // webpackBootstrap var _event = __webpack_require__(1); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -5500,7 +5526,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.Dropdown = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -5512,7 +5538,7 @@ return /******/ (function(modules) { // webpackBootstrap var _event = __webpack_require__(1); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -6043,7 +6069,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.CheckList = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -6057,7 +6083,7 @@ return /******/ (function(modules) { // webpackBootstrap var _types = __webpack_require__(4); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -6645,7 +6671,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.RowsCounter = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -6902,7 +6928,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.StatusBar = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _root = __webpack_require__(2); @@ -7274,7 +7300,7 @@ return /******/ (function(modules) { // webpackBootstrap var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -7282,7 +7308,7 @@ return /******/ (function(modules) { // webpackBootstrap var _event = __webpack_require__(1); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -8243,7 +8269,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.ClearButton = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -8411,13 +8437,13 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.Help = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); var _event = __webpack_require__(1); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -8659,7 +8685,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.AlternateRows = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -8843,13 +8869,13 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.NoResults = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); var _types = __webpack_require__(4); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -9098,7 +9124,7 @@ return /******/ (function(modules) { // webpackBootstrap }); exports.State = undefined; - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _hash = __webpack_require__(26); diff --git a/dist/tablefilter/tf-1.js b/dist/tablefilter/tf-1.js index 5d6ec58e..77542c9e 100644 --- a/dist/tablefilter/tf-1.js +++ b/dist/tablefilter/tf-1.js @@ -6,16 +6,16 @@ webpackJsonp([1],{ var map = { "./array": 15, "./array.js": 15, - "./const": 7, - "./const.js": 7, + "./const": 10, + "./const.js": 10, "./cookie": 28, "./cookie.js": 28, "./date": 435, "./date.js": 435, "./dom": 3, "./dom.js": 3, - "./emitter": 8, - "./emitter.js": 8, + "./emitter": 7, + "./emitter.js": 7, "./event": 1, "./event.js": 1, "./extensions/advancedGrid/adapterEzEditTable": 436, @@ -32,8 +32,8 @@ webpackJsonp([1],{ "./extensions/sort/adapterSortabletable.js": 441, "./extensions/sort/sort": 442, "./extensions/sort/sort.js": 442, - "./feature": 10, - "./feature.js": 10, + "./feature": 9, + "./feature.js": 9, "./modules/alternateRows": 23, "./modules/alternateRows.js": 23, "./modules/checkList": 17, @@ -44,8 +44,8 @@ webpackJsonp([1],{ "./modules/dateType.js": 29, "./modules/dropdown": 14, "./modules/dropdown.js": 14, - "./modules/gridLayout": 9, - "./modules/gridLayout.js": 9, + "./modules/gridLayout": 8, + "./modules/gridLayout.js": 8, "./modules/hash": 26, "./modules/hash.js": 26, "./modules/help": 22, @@ -324,11 +324,11 @@ webpackJsonp([1],{ value: true }); - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); var _root = __webpack_require__(2); @@ -888,7 +888,7 @@ webpackJsonp([1],{ value: true }); - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -1272,7 +1272,7 @@ webpackJsonp([1],{ value: true }); - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -2054,7 +2054,7 @@ webpackJsonp([1],{ value: true }); - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _dom = __webpack_require__(3); @@ -2408,7 +2408,7 @@ webpackJsonp([1],{ value: true }); - var _feature = __webpack_require__(10); + var _feature = __webpack_require__(9); var _types = __webpack_require__(4); @@ -2418,7 +2418,7 @@ webpackJsonp([1],{ var _number = __webpack_require__(6); - var _const = __webpack_require__(7); + var _const = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2465,7 +2465,7 @@ webpackJsonp([1],{ * List of sort type per column basis * @type {Array} */ - _this.sortTypes = (0, _types.isArray)(opts.types) ? opts.types : []; + _this.sortTypes = (0, _types.isArray)(opts.types) ? opts.types : tf.colTypes; /** * Column to be sorted at initialization, ie: @@ -2571,10 +2571,14 @@ webpackJsonp([1],{ throw new Error('SortableTable class not found.'); } + // Add any date format if needed + var dateType = tf.feature('dateType'); + dateType.addConfigFormats(this.sortTypes); + this.overrideSortableTable(); this.setSortTypes(); - //Column sort at start + // Column sort at start var sortColAtStart = adpt.sortColAtStart; if (sortColAtStart) { this.stt.sort(sortColAtStart[0], sortColAtStart[1]); @@ -2828,34 +2832,52 @@ webpackJsonp([1],{ var tf = this.tf, sortTypes = this.sortTypes, - _sortTypes = [], - dateType = tf.feature('dateType'); - dateType.addConfigFormats(sortTypes); + _sortTypes = []; for (var i = 0; i < tf.getCellsNb(); i++) { var colType = void 0; - if (sortTypes[i]) { colType = sortTypes[i]; if ((0, _types.isObj)(colType)) { if (colType.type === _const.DATE) { colType = this._addDateType(i, sortTypes); + } else if (colType.type === _const.NUMBER) { + var decimal = colType.decimal || tf.decimalSeparator; + colType = this._addNumberType(i, decimal); + } + } else { + colType = colType.toLowerCase(); + if (colType === _const.NONE) { + colType = 'None'; } } - colType = colType.toLowerCase(); - if (colType === _const.NONE) { - colType = 'None'; - } } else { - // resolve column types - if (tf.hasType(i, [_const.NUMBER, _const.FORMATTED_NUMBER, _const.FORMATTED_NUMBER_EU, _const.IP_ADDRESS])) { - colType = tf.colTypes[i].toLowerCase(); - } else if (tf.hasType(i, [_const.DATE])) { - colType = this._addDateType(i); - } else { - colType = _const.STRING; - } + colType = _const.STRING; } + // if (sortTypes[i]) { + // colType = sortTypes[i]; + // if (isObj(colType)) { + // if (colType.type === DATE) { + // colType = this._addDateType(i, sortTypes); + // } + // else if (colType.type === NUMBER) { + + // } + // } + // colType = colType.toLowerCase(); + // if (colType === NONE) { + // colType = 'None'; + // } + // } else { // resolve column types + // if (tf.hasType(i, [NUMBER/*, FORMATTED_NUMBER, + // FORMATTED_NUMBER_EU, IP_ADDRESS*/])) { + // colType = tf.colTypes[i].toLowerCase(); + // } else if (tf.hasType(i, [DATE])) { + // colType = this._addDateType(i); + // } else { + // colType = STRING; + // } + // } _sortTypes.push(colType); } @@ -2865,10 +2887,10 @@ webpackJsonp([1],{ this.addSortType(_const.NUMBER, Number); this.addSortType('caseinsensitivestring', SortableTable.toUpperCase); this.addSortType(_const.STRING); - this.addSortType(_const.FORMATTED_NUMBER, usNumberConverter); - this.addSortType(_const.FORMATTED_NUMBER_EU, euNumberConverter); + // this.addSortType(FORMATTED_NUMBER, usNumberConverter); + // this.addSortType(FORMATTED_NUMBER_EU, euNumberConverter); this.addSortType(_const.IP_ADDRESS, ipAddress, sortIP); - + console.log(_sortTypes); this.stt = new SortableTable(tf.tbl, _sortTypes); /*** external table headers adapter ***/ @@ -2903,8 +2925,17 @@ webpackJsonp([1],{ var locale = dateType.getOptions(colIndex, types).locale || tf.locale; var colType = _const.DATE + '-' + locale; - this.addSortType(colType, function (dateStr) { - return dateType.parse(dateStr, locale); + this.addSortType(colType, function (value) { + return dateType.parse(value, locale); + }); + return colType; + }; + + AdapterSortableTable.prototype._addNumberType = function _addNumberType(colIndex, decimal) { + var colType = _const.NUMBER + '-format' + (decimal === '.' ? '' : '-custom'); + + this.addSortType(colType, function (value) { + return (0, _number.parse)(value, decimal); }); return colType; }; @@ -2944,16 +2975,14 @@ webpackJsonp([1],{ }(_feature.Feature); //Converters - + // function usNumberConverter(s) { + // return parseNb(s, FORMATTED_NUMBER); + // } + // function euNumberConverter(s) { + // return parseNb(s, FORMATTED_NUMBER_EU); + // } exports.default = AdapterSortableTable; - function usNumberConverter(s) { - return (0, _number.unformat)(s, _const.FORMATTED_NUMBER); - } - function euNumberConverter(s) { - return (0, _number.unformat)(s, _const.FORMATTED_NUMBER_EU); - } - function ipAddress(value) { var vals = value.split('.'); for (var x in vals) { diff --git a/src/extensions/sort/adapterSortabletable.js b/src/extensions/sort/adapterSortabletable.js index 357bbd4f..3b5825a6 100644 --- a/src/extensions/sort/adapterSortabletable.js +++ b/src/extensions/sort/adapterSortabletable.js @@ -2,10 +2,10 @@ import {Feature} from '../../feature'; import {isArray, isFn, isUndef, isObj} from '../../types'; import {createElm, elm, getText, tag} from '../../dom'; import {addEvt} from '../../event'; -import {unformat as unformatNb} from '../../number'; +import {parse as parseNb} from '../../number'; import { - NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER, - FORMATTED_NUMBER_EU, IP_ADDRESS + NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, /*FORMATTED_NUMBER, + FORMATTED_NUMBER_EU,*/ IP_ADDRESS } from '../../const'; /** @@ -44,7 +44,7 @@ export default class AdapterSortableTable extends Feature { * List of sort type per column basis * @type {Array} */ - this.sortTypes = isArray(opts.types) ? opts.types : []; + this.sortTypes = isArray(opts.types) ? opts.types : tf.colTypes; /** * Column to be sorted at initialization, ie: @@ -148,10 +148,14 @@ export default class AdapterSortableTable extends Feature { throw new Error('SortableTable class not found.'); } + // Add any date format if needed + let dateType = tf.feature('dateType'); + dateType.addConfigFormats(this.sortTypes); + this.overrideSortableTable(); this.setSortTypes(); - //Column sort at start + // Column sort at start let sortColAtStart = adpt.sortColAtStart; if (sortColAtStart) { this.stt.sort(sortColAtStart[0], sortColAtStart[1]); @@ -393,34 +397,53 @@ export default class AdapterSortableTable extends Feature { setSortTypes() { let tf = this.tf, sortTypes = this.sortTypes, - _sortTypes = [], - dateType = tf.feature('dateType'); - dateType.addConfigFormats(sortTypes); + _sortTypes = []; for (let i = 0; i < tf.getCellsNb(); i++) { let colType; - if (sortTypes[i]) { colType = sortTypes[i]; if (isObj(colType)) { if (colType.type === DATE) { colType = this._addDateType(i, sortTypes); } - } - colType = colType.toLowerCase(); - if (colType === NONE) { - colType = 'None'; - } - } else { // resolve column types - if (tf.hasType(i, [NUMBER, FORMATTED_NUMBER, - FORMATTED_NUMBER_EU, IP_ADDRESS])) { - colType = tf.colTypes[i].toLowerCase(); - } else if (tf.hasType(i, [DATE])) { - colType = this._addDateType(i); + else if (colType.type === NUMBER) { + let decimal = colType.decimal || tf.decimalSeparator; + colType = this._addNumberType(i, decimal); + } } else { - colType = STRING; + colType = colType.toLowerCase(); + if (colType === NONE) { + colType = 'None'; + } } + } else { + colType = STRING; } + // if (sortTypes[i]) { + // colType = sortTypes[i]; + // if (isObj(colType)) { + // if (colType.type === DATE) { + // colType = this._addDateType(i, sortTypes); + // } + // else if (colType.type === NUMBER) { + + // } + // } + // colType = colType.toLowerCase(); + // if (colType === NONE) { + // colType = 'None'; + // } + // } else { // resolve column types + // if (tf.hasType(i, [NUMBER/*, FORMATTED_NUMBER, + // FORMATTED_NUMBER_EU, IP_ADDRESS*/])) { + // colType = tf.colTypes[i].toLowerCase(); + // } else if (tf.hasType(i, [DATE])) { + // colType = this._addDateType(i); + // } else { + // colType = STRING; + // } + // } _sortTypes.push(colType); } @@ -430,10 +453,10 @@ export default class AdapterSortableTable extends Feature { this.addSortType(NUMBER, Number); this.addSortType('caseinsensitivestring', SortableTable.toUpperCase); this.addSortType(STRING); - this.addSortType(FORMATTED_NUMBER, usNumberConverter); - this.addSortType(FORMATTED_NUMBER_EU, euNumberConverter); + // this.addSortType(FORMATTED_NUMBER, usNumberConverter); + // this.addSortType(FORMATTED_NUMBER_EU, euNumberConverter); this.addSortType(IP_ADDRESS, ipAddress, sortIP); - + console.log(_sortTypes); this.stt = new SortableTable(tf.tbl, _sortTypes); /*** external table headers adapter ***/ @@ -466,8 +489,17 @@ export default class AdapterSortableTable extends Feature { let locale = dateType.getOptions(colIndex, types).locale || tf.locale; let colType = `${DATE}-${locale}`; - this.addSortType(colType, (dateStr) => { - return dateType.parse(dateStr, locale); + this.addSortType(colType, (value) => { + return dateType.parse(value, locale); + }); + return colType; + } + + _addNumberType(colIndex, decimal) { + let colType = `${NUMBER}-format${decimal === '.' ? '' : '-custom'}`; + + this.addSortType(colType, (value) => { + return parseNb(value, decimal); }); return colType; } @@ -501,12 +533,12 @@ export default class AdapterSortableTable extends Feature { } //Converters -function usNumberConverter(s) { - return unformatNb(s, FORMATTED_NUMBER); -} -function euNumberConverter(s) { - return unformatNb(s, FORMATTED_NUMBER_EU); -} +// function usNumberConverter(s) { +// return parseNb(s, FORMATTED_NUMBER); +// } +// function euNumberConverter(s) { +// return parseNb(s, FORMATTED_NUMBER_EU); +// } function ipAddress(value) { let vals = value.split('.'); diff --git a/src/number.js b/src/number.js index da49a356..4260ab08 100644 --- a/src/number.js +++ b/src/number.js @@ -1,5 +1,5 @@ import {isNumber} from './types'; -import {FORMATTED_NUMBER} from './const'; +// import {FORMATTED_NUMBER} from './const'; /** * Returns a number for a formatted number @@ -8,7 +8,7 @@ import {FORMATTED_NUMBER} from './const'; * 'formatted-number-eu' * @return {Number} Unformatted number */ -export const unformat = (value, format = FORMATTED_NUMBER) => { +export const parse = (value, decimal = '.') => { // Return the value as-is if it's already a number if (isNumber(value)) { return value; @@ -16,7 +16,7 @@ export const unformat = (value, format = FORMATTED_NUMBER) => { // Build regex to strip out everything except digits, decimal point and // minus sign - let decimal = format !== FORMATTED_NUMBER ? ',' : '.'; + // let decimal = format !== FORMATTED_NUMBER ? ',' : '.'; let regex = new RegExp('[^0-9-' + decimal + ']', ['g']); let unformatted = parseFloat( ('' + value) diff --git a/src/tablefilter.js b/src/tablefilter.js index 6534c421..e05e39b2 100644 --- a/src/tablefilter.js +++ b/src/tablefilter.js @@ -8,7 +8,7 @@ import {isEmpty as isEmptyString} from './string'; import { isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef } from './types'; -import {unformat as unformatNb} from './number' +import {parse as parseNb} from './number' import {root} from './root'; import {Emitter} from './emitter'; @@ -31,8 +31,8 @@ import {DateType} from './modules/dateType'; import { INPUT, SELECT, MULTIPLE, CHECKLIST, NONE, ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY, - CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER, - FORMATTED_NUMBER_EU + CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE/*, FORMATTED_NUMBER, + FORMATTED_NUMBER_EU*/ } from './const'; let doc = root.document; @@ -1752,8 +1752,8 @@ export class TableFilter { // search args re-init let searchArgs = this.getFiltersValue(); - let numCellData; - let nbFormat; + let numData; + let nbFormat = this.decimalSeparator; let re_le = new RegExp(this.leOperator), re_ge = new RegExp(this.geOperator), re_l = new RegExp(this.lwOperator), @@ -1903,49 +1903,62 @@ export class TableFilter { else { //first numbers need to be unformatted + // if (this.hasType(colIdx, [NUMBER])) { + // numData = Number(cellData); + // } + // else if (this.hasType(colIdx, + // [FORMATTED_NUMBER, FORMATTED_NUMBER_EU])) { + // numData =unformatNb(cellData, this.colTypes[colIdx]); + // nbFormat = this.colTypes[colIdx]; + // } else { + // if (this.thousandsSeparator === ',' && + // this.decimalSeparator === '.') { + // nbFormat = FORMATTED_NUMBER; + // } else { + // nbFormat = FORMATTED_NUMBER_EU; + // } + // numData = unformatNb(cellData, nbFormat); + // } + if (this.hasType(colIdx, [NUMBER])) { - numCellData = Number(cellData); - } - else if (this.hasType(colIdx, - [FORMATTED_NUMBER, FORMATTED_NUMBER_EU])) { - numCellData = unformatNb(cellData, this.colTypes[colIdx]); - nbFormat = this.colTypes[colIdx]; - } else { - if (this.thousandsSeparator === ',' && - this.decimalSeparator === '.') { - nbFormat = FORMATTED_NUMBER; - } else { - nbFormat = FORMATTED_NUMBER_EU; + let colType = this.colTypes[colIdx]; + if (colType.hasOwnProperty('decimal')) { + nbFormat = colType.decimal; } - numCellData = unformatNb(cellData, nbFormat); + // numData = Number(cellData) ||parseNb(cellData, nbFormat); } + // else { + // numData = Number(cellData) || + // parseNb(cellData, tf.decimalSeparator); + // } + numData = Number(cellData) || parseNb(cellData, nbFormat); // first checks if there is any operator (<,>,<=,>=,!,*,=,{,}, // rgx:) // lower equal if (hasLE) { - occurence = numCellData <= unformatNb( + occurence = numData <= parseNb( sA.replace(re_le, ''), nbFormat ); } //greater equal else if (hasGE) { - occurence = numCellData >= unformatNb( + occurence = numData >= parseNb( sA.replace(re_ge, ''), nbFormat ); } //lower else if (hasLO) { - occurence = numCellData < unformatNb( + occurence = numData < parseNb( sA.replace(re_l, ''), nbFormat ); } //greater else if (hasGR) { - occurence = numCellData > unformatNb( + occurence = numData > parseNb( sA.replace(re_g, ''), nbFormat ); @@ -2001,16 +2014,17 @@ export class TableFilter { } else { // If numeric type data, perform a strict equality test and // fallback to unformatted number string comparison - if (numCellData && + if (numData && this.hasType(colIdx, - [NUMBER, FORMATTED_NUMBER, FORMATTED_NUMBER_EU]) && + [NUMBER + /*, FORMATTED_NUMBER, FORMATTED_NUMBER_EU*/]) && !this.singleSearchFlt) { - // unformatNb can return 0 for strings which are not + // parseNb can return 0 for strings which are not // formatted numbers, in that case return the original - // string. TODO: handle this in unformatNb - sA = unformatNb(sA, nbFormat) || sA; - occurence = numCellData === sA || - contains(sA.toString(), numCellData.toString(), + // string. TODO: handle this in parseNb + sA = parseNb(sA, nbFormat) || sA; + occurence = numData === sA || + contains(sA.toString(), numData.toString(), this.isExactMatch(colIdx), this.caseSensitive); } else { // Finally test search term is contained in cell data @@ -2165,10 +2179,17 @@ export class TableFilter { continue; } let cellData = this.getCellData(cell[j]); - let nbFormat = this.hasType(colIndex, - [FORMATTED_NUMBER, FORMATTED_NUMBER_EU]) ? - this.colTypes[colIndex] : undefined; - let data = num ? unformatNb(cellData, nbFormat) : cellData; + // let nbFormat = this.hasType(colIndex, + // [FORMATTED_NUMBER, FORMATTED_NUMBER_EU]) ? + // this.colTypes[colIndex] : undefined; + let decimal = this.decimalSeparator; + if (this.hasType(colIndex, [NUMBER])) { + let colType = this.colTypes[colIndex]; + if (colType.hasOwnProperty('decimal')) { + decimal = colType.decimal; + } + } + let data = num ? parseNb(cellData, decimal) : cellData; colValues.push(data); } } diff --git a/static/templates/columns-visibility.html b/static/templates/columns-visibility.html index 0ef7b3f1..04484667 100644 --- a/static/templates/columns-visibility.html +++ b/static/templates/columns-visibility.html @@ -52,7 +52,9 @@ var tfConfig = { name: 'sort', types: [ 'number', 'string', 'string', - 'formatted-number', 'none', 'string' + { type: 'number', decimal: '.' }, + // 'number', + 'none', 'string' ] } ] diff --git a/static/templates/data-types.html b/static/templates/data-types.html index 60ed2fae..24eb08ee 100644 --- a/static/templates/data-types.html +++ b/static/templates/data-types.html @@ -78,7 +78,11 @@ var tfConfig = { 'string', 'string', 'string', { type: 'number', decimal: ',', thousands: '.' - }, 'formatted-number', 'string', + }, + { + type: 'number', decimal: '.', thousands: ',' + }, + 'string', { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}', '{dd}-{MM}-{yyyy|yy}']