1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-03 15:13:15 +02:00

Re-refactored number type

This commit is contained in:
Max Guglielmi 2016-09-19 17:37:45 +10:00
parent a0707554bb
commit 7ecb53a701
7 changed files with 419 additions and 305 deletions

View file

@ -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);

View file

@ -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) {

View file

@ -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('.');

View file

@ -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)

View file

@ -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);
}
}

View file

@ -52,7 +52,9 @@ var tfConfig = {
name: 'sort',
types: [
'number', 'string', 'string',
'formatted-number', 'none', 'string'
{ type: 'number', decimal: '.' },
// 'number',
'none', 'string'
]
}
]

View file

@ -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}']