1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-08 09:26:40 +02:00

Compare commits

...

252 commits

Author SHA1 Message Date
koalyptus 7afe45f1e6
Merge pull request #787 from koalyptus/dependabot/npm_and_yarn/codecov-3.7.1
Bump codecov from 3.7.0 to 3.7.1
2020-07-22 19:51:17 +10:00
koalyptus 6e01e45dfb prepare dist 2020-07-22 19:45:07 +10:00
dependabot[bot] 12c30629af
Bump codecov from 3.7.0 to 3.7.1
Bumps [codecov](https://github.com/codecov/codecov-node) from 3.7.0 to 3.7.1.
- [Release notes](https://github.com/codecov/codecov-node/releases)
- [Commits](https://github.com/codecov/codecov-node/compare/v3.7.0...v3.7.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-21 12:35:35 +00:00
koalyptus 3e763efac9
Merge pull request #784 from koalyptus/769-refine-empty-cell-logic
769 refine empty nonempty operators logic
2020-06-16 13:03:27 +10:00
koalyptus 825b915ae8 769 refine empty nonempty operators logic 2020-06-16 12:28:12 +10:00
koalyptus 8e48bf2943
Merge pull request #783 from koalyptus/greenkeeper/monorepo.babel7-20200526215451
Update babel7 to the latest version 🚀
2020-06-15 15:20:26 +10:00
koalyptus be7a5e585f prepare dist for 0.7.1 2020-06-15 15:19:11 +10:00
greenkeeper[bot] c44bef22a2
chore(package): update lockfile package-lock.json 2020-05-26 23:57:32 +00:00
greenkeeper[bot] 6dcebbf67e
chore(package): update @babel/preset-env to version 7.10.0 2020-05-26 23:57:28 +00:00
greenkeeper[bot] 44cb6f9124
chore(package): update @babel/core to version 7.10.0 2020-05-26 23:57:25 +00:00
koalyptus 571c31e8da
Merge pull request #780 from koalyptus/772-fix
Fix for #772: help instructions pop-up position with responsive behaviour
2020-05-14 12:58:23 +10:00
koalyptus 8633891fdb add unit tests - prepare dist 2020-05-14 12:40:44 +10:00
koalyptus 8eddc6f35c introduce adjust_container_left_position option in help_instructions configuration 2020-05-13 20:46:23 +10:00
koalyptus 577fb0b90a
Merge pull request #768 from koalyptus/greenkeeper/monorepo.babel7-20200228094136
Update babel7 to the latest version 🚀
2020-05-07 20:56:13 +10:00
Max Guglielmi 88a5bfe425 bump dep - prepare dist 2020-05-07 20:23:53 +10:00
Max Guglielmi cac2900444 prepare dist 2020-05-07 20:21:35 +10:00
greenkeeper[bot] 5dad4dae8e
chore(package): update lockfile package-lock.json 2020-02-28 11:43:33 +00:00
greenkeeper[bot] 134851525c
chore(package): update @babel/preset-env to version 7.8.6 2020-02-28 11:43:28 +00:00
greenkeeper[bot] 9a66748bb8
chore(package): update @babel/core to version 7.8.6 2020-02-28 11:43:25 +00:00
koalyptus c52004421f
Merge pull request #762 from koalyptus/greenkeeper/codecov-3.6.3
Update codecov to the latest version 🚀
2020-02-04 14:16:41 +11:00
koalyptus f53b392c59 prepare dist 2020-02-04 14:03:29 +11:00
koalyptus c496b0916d Merge branch 'master' into greenkeeper/codecov-3.6.3 2020-02-04 13:50:04 +11:00
koalyptus 25b89b19e7
Merge pull request #760 from koalyptus/greenkeeper/monorepo.babel7-20200112133918
Update babel7 to the latest version 🚀
2020-02-03 14:11:32 +11:00
koalyptus 8b4a05be02 prepare dist 2020-02-03 13:50:29 +11:00
koalyptus 1c4961a25b Merge branch 'master' into greenkeeper/monorepo.babel7-20200112133918 2020-02-03 13:35:30 +11:00
greenkeeper[bot] 40daf54768
chore(package): update lockfile package-lock.json 2020-01-31 14:09:11 +00:00
greenkeeper[bot] c43debc7ac
chore(package): update codecov to version 3.6.3 2020-01-31 14:09:07 +00:00
koalyptus 3ac2603e47
Merge pull request #759 from koalyptus/dependabot/npm_and_yarn/handlebars-4.5.3
Bump handlebars from 4.1.2 to 4.5.3
2020-01-14 14:53:40 +11:00
koalyptus 185c119342 prepare dist 2020-01-14 13:44:44 +11:00
koalyptus 80c9b3d734 Merge branch 'master' into dependabot/npm_and_yarn/handlebars-4.5.3 2020-01-14 13:26:01 +11:00
greenkeeper[bot] e8605e5e19
chore(package): update lockfile package-lock.json 2020-01-12 15:47:37 +00:00
greenkeeper[bot] bd95afb3eb
chore(package): update @babel/preset-env to version 7.8.0 2020-01-12 15:47:33 +00:00
greenkeeper[bot] c16f885951
chore(package): update @babel/core to version 7.8.0 2020-01-12 15:47:30 +00:00
koalyptus 6be9ad491f
Merge pull request #758 from koalyptus/greenkeeper/monorepo.babel7-20191219010209
Update babel7 to the latest version 🚀
2020-01-09 09:56:14 +11:00
koalyptus 447a3119aa Prepare dist 2020-01-09 09:44:26 +11:00
dependabot[bot] 2025aa4010
Bump handlebars from 4.1.2 to 4.5.3
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.5.3)

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-27 00:16:57 +00:00
greenkeeper[bot] bdc03755e8
chore(package): update lockfile package-lock.json 2019-12-19 02:28:44 +00:00
greenkeeper[bot] 2dceed888e
chore(package): update @babel/preset-env to version 7.7.7 2019-12-19 02:28:40 +00:00
greenkeeper[bot] 982769a020
chore(package): update @babel/core to version 7.7.7 2019-12-19 02:28:37 +00:00
koalyptus 4318826ead
Merge pull request #754 from koalyptus/greenkeeper/monorepo.babel7-20191106233658
Update babel7 to the latest version 🚀
2019-12-09 14:53:11 +11:00
koalyptus 66b8fa9d94 prepare dist: include missing file 2019-12-09 14:46:14 +11:00
koalyptus 79cea3e27f prepare dist + miscellaneous fixes 2019-12-09 14:44:37 +11:00
greenkeeper[bot] 7af493da27
chore(package): update lockfile package-lock.json 2019-11-07 01:41:18 +00:00
greenkeeper[bot] 90c3b7f937
chore(package): update @babel/preset-env to version 7.7.1 2019-11-07 01:41:14 +00:00
greenkeeper[bot] 85dce5847a
chore(package): update @babel/core to version 7.7.2 2019-11-07 01:41:11 +00:00
koalyptus 65863b635a
Merge pull request #753 from koalyptus/greenkeeper/monorepo.babel7-20191105110141
Update babel7 to the latest version 🚀
2019-11-06 14:08:51 +11:00
koalyptus 3c001f52e2 prepare dist 2019-11-06 13:56:55 +11:00
greenkeeper[bot] e3957977b6
chore(package): update lockfile package-lock.json 2019-11-05 14:06:38 +00:00
greenkeeper[bot] 8923c4db94
chore(package): update @babel/preset-env to version 7.7.0 2019-11-05 14:06:34 +00:00
greenkeeper[bot] c7d1a25467
chore(package): update @babel/core to version 7.7.0 2019-11-05 14:06:31 +00:00
koalyptus ebdd817199
Merge pull request #746 from koalyptus/greenkeeper/eslint-6.5.0
Update eslint to the latest version 🚀
2019-10-21 14:28:13 +11:00
koalyptus 27365e25d4 prepare dist 2019-10-21 14:20:42 +11:00
koalyptus 2e960867ab Merge branch 'master' into greenkeeper/eslint-6.5.0 2019-10-21 13:25:34 +11:00
koalyptus 3d35d53005
Merge pull request #745 from koalyptus/greenkeeper/monorepo.babel7-20190923213305
Update babel7 to the latest version 🚀
2019-10-20 17:59:00 +11:00
koalyptus 02bc5e3ae1 fix conflict - prepare dist 2019-10-20 17:32:55 +11:00
koalyptus 09c1f8ff52
Merge pull request #744 from koalyptus/greenkeeper/codecov-3.6.1
Update codecov to the latest version 🚀
2019-10-10 13:50:18 +11:00
koalyptus 6b339f7bd7 merge master in, resolve conflix 2019-10-10 13:38:17 +11:00
koalyptus a1efe26a85 prepare dist 2019-10-10 13:36:03 +11:00
koalyptus 64e6c6597f
Merge pull request #737 from koalyptus/greenkeeper/babel-eslint-10.0.3
Update babel-eslint to the latest version 🚀
2019-09-30 07:58:23 +10:00
koalyptus 9363a7a661 prepare dist 2019-09-30 07:09:32 +10:00
greenkeeper[bot] 41e220efa9
chore(package): update lockfile package-lock.json 2019-09-29 06:24:29 +00:00
greenkeeper[bot] 64d3808a2b
chore(package): update eslint to version 6.5.0 2019-09-29 06:24:25 +00:00
greenkeeper[bot] eb15788965
chore(package): update lockfile package-lock.json 2019-09-23 23:07:35 +00:00
greenkeeper[bot] fede2f6e86
chore(package): update @babel/preset-env to version 7.6.2 2019-09-23 23:07:26 +00:00
greenkeeper[bot] 9738c8ed91
chore(package): update @babel/core to version 7.6.2 2019-09-23 23:07:21 +00:00
greenkeeper[bot] b285d01b54
chore(package): update lockfile package-lock.json 2019-09-20 12:24:13 +00:00
greenkeeper[bot] 37eed72f2c
chore(package): update codecov to version 3.6.1 2019-09-20 12:24:01 +00:00
koalyptus 71103cd04b
Merge pull request #743 from koalyptus/greenkeeper/codecov-3.6.0
Update codecov to the latest version 🚀
2019-09-20 20:01:13 +10:00
koalyptus 42a347550b prepare dist 2019-09-20 19:54:27 +10:00
koalyptus bed04b5b9b Merge remote-tracking branch 'origin/greenkeeper/monorepo.babel7-20190906190906' into greenkeeper/codecov-3.6.0 2019-09-20 19:46:05 +10:00
koalyptus 43fc68df31 Merge remote-tracking branch 'origin/greenkeeper/eslint-6.4.0' into greenkeeper/codecov-3.6.0 2019-09-20 19:45:52 +10:00
greenkeeper[bot] d116525f73
chore(package): update lockfile package-lock.json 2019-09-20 02:31:28 +00:00
greenkeeper[bot] d7ff36514d
chore(package): update codecov to version 3.6.0 2019-09-20 02:31:18 +00:00
greenkeeper[bot] 0d0abf3206
chore(package): update lockfile package-lock.json 2019-09-14 02:14:37 +00:00
greenkeeper[bot] 4cd004e423
chore(package): update eslint to version 6.4.0 2019-09-14 02:14:29 +00:00
greenkeeper[bot] 459829a214
chore(package): update lockfile package-lock.json 2019-09-06 22:27:01 +00:00
greenkeeper[bot] b8c0c1bc3f
chore(package): update @babel/preset-env to version 7.6.0 2019-09-06 22:26:54 +00:00
greenkeeper[bot] 5686e8a470
chore(package): update @babel/core to version 7.6.0 2019-09-06 22:26:48 +00:00
koalyptus b04d4f55ed
Merge pull request #735 from koalyptus/greenkeeper/eslint-6.2.0
Update eslint to the latest version 🚀
2019-09-06 14:26:50 +10:00
koalyptus 3004963058 prepare dist 2019-09-06 14:15:54 +10:00
greenkeeper[bot] 3454187be6
chore(package): update lockfile package-lock.json 2019-08-25 21:33:46 +00:00
greenkeeper[bot] 1dac7736b1
chore(package): update babel-eslint to version 10.0.3 2019-08-25 21:33:28 +00:00
greenkeeper[bot] 2c7ad88346
chore(package): update lockfile package-lock.json 2019-08-18 22:53:24 +00:00
greenkeeper[bot] 6e41c4a8c6
chore(package): update eslint to version 6.2.0 2019-08-18 22:53:09 +00:00
koalyptus 859f6b1eeb
Merge pull request #734 from koalyptus/greenkeeper/uglifyjs-webpack-plugin-2.2.0
Update uglifyjs-webpack-plugin to the latest version 🚀
2019-08-09 14:21:29 +10:00
koalyptus 7204c4b546 prepare dist 2019-08-09 12:24:02 +10:00
greenkeeper[bot] f29b59fdbd chore(package): update lockfile package-lock.json 2019-07-31 12:27:29 +00:00
greenkeeper[bot] 6cc887e806 chore(package): update uglifyjs-webpack-plugin to version 2.2.0 2019-07-31 12:27:24 +00:00
koalyptus f7ad9741ca
Merge pull request #733 from koalyptus/731-upgrade-webpack
731 prepare dist
2019-07-30 13:07:16 +10:00
koalyptus 323a80d1d7 731 prepare dist 2019-07-30 12:59:37 +10:00
koalyptus fc46f0b4ae
Merge pull request #728 from koalyptus/greenkeeper/monorepo.babel7-20190704132520
Update babel7 to the latest version 🚀
2019-07-21 18:44:00 +10:00
koalyptus 0471570985 prepare dist 2019-07-21 18:12:46 +10:00
koalyptus 20243b641f Merge remote-tracking branch 'origin/greenkeeper/eslint-8.0.0' into greenkeeper/monorepo.babel7-20190704132520 2019-07-21 17:21:03 +10:00
koalyptus 99722cbdb0 resolve merge conflicts 2019-07-21 17:20:30 +10:00
koalyptus 64cc6825c5 bump tablefilter version 2019-07-21 17:17:47 +10:00
greenkeeper[bot] bcb541fcad chore(package): update lockfile package-lock.json 2019-07-04 18:45:43 +00:00
greenkeeper[bot] 1c3c1bbb0a chore(package): update @babel/preset-env to version 7.5.0 2019-07-04 18:45:38 +00:00
greenkeeper[bot] bba009c505 chore(package): update @babel/core to version 7.5.0 2019-07-04 18:45:35 +00:00
greenkeeper[bot] 48659ec1d5 chore(package): update lockfile package-lock.json 2019-06-22 04:01:53 +00:00
greenkeeper[bot] 1d32dcea7d chore(package): update eslint to version 6.0.0 2019-06-22 04:01:44 +00:00
greenkeeper[bot] 0e1c617b06 chore(package): update lockfile package-lock.json 2019-06-17 14:21:21 +00:00
greenkeeper[bot] 5c705fe591 chore(package): update babel-eslint to version 10.0.2 2019-06-17 14:21:13 +00:00
koalyptus 3c501e3aef
Merge pull request #722 from koalyptus/716-fix-sort-date-desc
Enhance filter options sorting based on column data type
2019-06-07 21:43:09 +10:00
koalyptus 78ae09c861 Enhance filter options sorting based on column data type 2019-06-07 18:26:33 +10:00
koalyptus 2e1af5efb3
Merge pull request #715 from koalyptus/greenkeeper/uglifyjs-webpack-plugin-2.1.3
Update uglifyjs-webpack-plugin to the latest version 🚀
2019-06-06 11:28:09 +10:00
koalyptus da270df5d6 fix CleanWebpackPlugin webpack plugin upgrade 2019-06-06 11:22:03 +10:00
koalyptus 8a8419bf02 Merge remote-tracking branch 'origin/greenkeeper/clean-webpack-plugin-3.0.0' into greenkeeper/uglifyjs-webpack-plugin-2.1.3 2019-06-06 10:35:09 +10:00
koalyptus a6c24c7885 fix uglifyjs webpack plugin upgrade 2019-06-06 10:33:43 +10:00
koalyptus ed2fef999a Merge branch 'master' into greenkeeper/uglifyjs-webpack-plugin-2.1.3 2019-06-06 10:19:35 +10:00
greenkeeper[bot] 47c66d71bb chore(package): update lockfile package-lock.json 2019-05-30 13:44:30 +00:00
greenkeeper[bot] f99f850c4d chore(package): update clean-webpack-plugin to version 3.0.0 2019-05-30 13:44:24 +00:00
koalyptus 10c06b5100
Merge pull request #720 from koalyptus/714-fix-clear-filter-text
address #714: clear_filter_text
2019-05-24 19:53:01 +10:00
koalyptus 1cc810c341 remove tmp file 2019-05-24 17:08:26 +10:00
koalyptus c707978e19 address #714: clear_filter_text 2019-05-24 17:03:09 +10:00
koalyptus 32b541239e
Merge pull request #719 from koalyptus/greenkeeper/monorepo.babel7-20190521175803
Update babel7 to the latest version 🚀
2019-05-22 16:41:55 +10:00
koalyptus 2963962250 prep dist 2019-05-22 16:30:51 +10:00
koalyptus bbec44cc15 Merge remote-tracking branch 'origin/greenkeeper/grunt-qunit-istanbul-1.1.0' into greenkeeper/monorepo.babel7-20190521175803 2019-05-22 16:25:16 +10:00
koalyptus 352a700fb2 Merge remote-tracking branch 'origin/greenkeeper/codecov-3.4.0' into greenkeeper/monorepo.babel7-20190521175803 2019-05-22 16:24:25 +10:00
koalyptus fae4ec9e07 bump TableFilter version 2019-05-22 16:24:18 +10:00
greenkeeper[bot] 226f18a6f6 chore(package): update lockfile package-lock.json 2019-05-21 21:28:45 +00:00
greenkeeper[bot] 1d58191127 chore(package): update @babel/preset-env to version 7.4.5 2019-05-21 21:28:41 +00:00
greenkeeper[bot] 1559c74fd9 chore(package): update @babel/core to version 7.4.5 2019-05-21 21:28:37 +00:00
greenkeeper[bot] 2cd30b1bfb chore(package): update lockfile package-lock.json 2019-05-15 11:23:47 +00:00
greenkeeper[bot] cd5e5589a4 chore(package): update uglifyjs-webpack-plugin to version 2.1.3 2019-05-15 11:23:43 +00:00
greenkeeper[bot] 5499093810 chore(package): update lockfile package-lock.json 2019-05-09 04:49:09 +00:00
greenkeeper[bot] df54ddda33 chore(package): update codecov to version 3.4.0 2019-05-09 04:49:04 +00:00
greenkeeper[bot] 80ebc0aa8c chore(package): update lockfile package-lock.json 2019-05-07 14:38:14 +00:00
greenkeeper[bot] a5fa336a08 chore(package): update grunt-qunit-istanbul to version 1.1.0 2019-05-07 14:38:06 +00:00
koalyptus 36d4f85f6c
Merge pull request #708 from koalyptus/greenkeeper/monorepo.babel7-20190426211543
Update babel7 to the latest version 🚀
2019-04-28 11:49:01 +10:00
koalyptus e886a6f1a8 prepare dist 2019-04-28 11:32:55 +10:00
koalyptus 7204746e5f Merge branch 'master' into greenkeeper/monorepo.babel6-20190426211543 2019-04-28 11:25:36 +10:00
koalyptus ecd33d0631 Add support template 2019-04-28 11:21:18 +10:00
greenkeeper[bot] f97394fc32 chore(package): update lockfile package-lock.json 2019-04-26 22:51:31 +00:00
greenkeeper[bot] eef0ab3bbd chore(package): update @babel/preset-env to version 7.4.4 2019-04-26 22:51:26 +00:00
greenkeeper[bot] c48b48f924 chore(package): update @babel/core to version 7.4.4 2019-04-26 22:51:23 +00:00
koalyptus d699d02914 Update feature request template 2019-04-26 22:53:03 +10:00
koalyptus 09b3f7875d
Merge pull request #706 from koalyptus/koalyptus-patch-1
Update issue templates
2019-04-26 22:34:54 +10:00
koalyptus 9c54974338 Update issue templates 2019-04-26 22:28:22 +10:00
koalyptus b89a52fb77
Merge pull request #698 from koalyptus/greenkeeper/codecov-3.3.0
Update codecov to the latest version 🚀
2019-04-20 22:47:26 +10:00
koalyptus ef46fd4295 bump tf version 2019-04-20 22:39:59 +10:00
koalyptus 8d8c8ae74c Merge branch 'master' into greenkeeper/codecov-4.3.0 2019-04-20 22:33:56 +10:00
koalyptus fafa983dac
Merge pull request #697 from koalyptus/greenkeeper/monorepo.babel7-20190402222217
Update babel7 to the latest version 🚀
2019-04-15 22:25:21 +10:00
koalyptus a19c5a106f prepare dist 2019-04-15 22:10:43 +10:00
koalyptus 1e391233dc Merge branch 'master' into greenkeeper/monorepo.babel-20190402222217 2019-04-15 21:12:35 +10:00
koalyptus aade342976
Merge pull request #696 from koalyptus/greenkeeper/eslint-5.16.0
Update eslint to the latest version 🚀
2019-04-08 16:22:18 +10:00
koalyptus 0443442916
Update package-lock.json 2019-04-05 09:41:27 +11:00
greenkeeper[bot] ed4979331c chore(package): update lockfile package-lock.json 2019-04-03 12:03:37 +00:00
greenkeeper[bot] 0e1a1ff3d1 chore(package): update codecov to version 3.3.0 2019-04-03 12:03:32 +00:00
greenkeeper[bot] e71b3a5c93 chore(package): update lockfile package-lock.json 2019-04-02 22:27:02 +00:00
greenkeeper[bot] a22b009c57 chore(package): update @babel/preset-env to version 7.4.3 2019-04-02 22:26:58 +00:00
greenkeeper[bot] f6a9a058c9 chore(package): update @babel/core to version 7.4.3 2019-04-02 22:26:54 +00:00
koalyptus f7c231b99f
Update package.json 2019-04-02 20:53:29 +11:00
greenkeeper[bot] 6f4e5a91ab chore(package): update eslint to version 5.16.0 2019-03-30 18:26:17 +00:00
koalyptus f405a45d79
Merge pull request #694 from koalyptus/greenkeeper/clean-webpack-plugin-2.0.1
Greenkeeper/clean webpack plugin 2.0.1
2019-03-27 13:59:39 +11:00
koalyptus fbe43b1db4 Fix clean-webpack-plugin usage as not backwards compatible 2019-03-27 13:49:35 +11:00
koalyptus e13201733d Merge branch 'master' into greenkeeper/clean-webpack-plugin-2.0.1 2019-03-27 13:12:25 +11:00
koalyptus 002c46297e
Merge pull request #693 from koalyptus/greenkeeper/monorepo.babel7-20190319230952
Update babel7 to the latest version 🚀
2019-03-27 11:45:50 +11:00
koalyptus 017337b2e2
Update package-lock.json 2019-03-26 22:17:50 +11:00
koalyptus 51679ad61b
Update package-lock.json 2019-03-26 22:17:07 +11:00
koalyptus bc34e8b187
Update package.json 2019-03-26 22:16:18 +11:00
greenkeeper[bot] 58e90cb766 chore(package): update lockfile package-lock.json 2019-03-19 23:14:46 +00:00
greenkeeper[bot] 3243fad4da chore(package): update @babel/preset-env to version 7.4.0 2019-03-19 23:14:42 +00:00
greenkeeper[bot] ea2a8be8b6 chore(package): update @babel/core to version 7.4.0 2019-03-19 23:14:39 +00:00
koalyptus 5e1fe901b7
Merge pull request #692 from koalyptus/greenkeeper/eslint-5.15.2
Update eslint to the latest version 🚀
2019-03-20 07:13:32 +11:00
koalyptus c001e90617 bump TableFilter version 2019-03-19 22:07:00 +11:00
greenkeeper[bot] a446c0afc0 chore(package): update lockfile package-lock.json 2019-03-16 00:10:05 +00:00
greenkeeper[bot] ff88f6c7d7 chore(package): update eslint to version 5.15.2 2019-03-16 00:10:00 +00:00
greenkeeper[bot] d46265eb57 chore(package): update lockfile package-lock.json 2019-03-14 18:54:50 +00:00
greenkeeper[bot] 3057b1949c chore(package): update clean-webpack-plugin to version 2.0.1
Closes #690
2019-03-14 18:54:47 +00:00
koalyptus bca2cee175
Merge pull request #689 from koalyptus/greenkeeper/eslint-5.15.0
Update eslint to the latest version 🚀
2019-03-06 14:01:58 +11:00
koalyptus 077eb3fe87
Update package.json 2019-03-06 13:56:56 +11:00
koalyptus 90e4367951
Update package-lock.json 2019-03-06 13:56:41 +11:00
greenkeeper[bot] 589b356bc6 chore(package): update lockfile package-lock.json 2019-03-02 06:35:38 +00:00
greenkeeper[bot] 7664e054e5 chore(package): update eslint to version 5.15.0 2019-03-02 06:35:34 +00:00
koalyptus 2dcad20d0c
Merge pull request #688 from koalyptus/greenkeeper/monorepo.babel7-20190225223535
Update babel7 to the latest version 🚀
2019-02-28 13:57:08 +11:00
koalyptus 86369ff116
Merge branch 'master' into greenkeeper/monorepo.babel7-20190225223535 2019-02-28 13:23:19 +11:00
koalyptus f1bdd8997f
Update package.json 2019-02-28 13:22:29 +11:00
koalyptus eefbf3fe41
Update package-lock.json 2019-02-28 13:22:17 +11:00
koalyptus 0b455e2ec4
Merge pull request #687 from koalyptus/greenkeeper/uglifyjs-webpack-plugin-2.1.2
Update uglifyjs-webpack-plugin to the latest version 🚀
2019-02-27 13:26:28 +11:00
koalyptus de6745821f
Update package.json 2019-02-26 21:18:40 +11:00
koalyptus f79234ea7e
Update package-lock.json 2019-02-26 21:18:07 +11:00
greenkeeper[bot] 8bcf731d3c chore(package): update lockfile package-lock.json 2019-02-25 22:37:50 +00:00
greenkeeper[bot] 5247493035 chore(package): update @babel/preset-env to version 7.3.4 2019-02-25 22:37:45 +00:00
greenkeeper[bot] 69a1fd3ee9 chore(package): update @babel/core to version 7.3.4 2019-02-25 22:37:41 +00:00
greenkeeper[bot] 9c80252935 chore(package): update lockfile package-lock.json 2019-02-25 13:34:31 +00:00
greenkeeper[bot] c22f9981e6 chore(package): update uglifyjs-webpack-plugin to version 2.1.2 2019-02-25 13:34:27 +00:00
koalyptus 04012e5a97
Merge pull request #686 from koalyptus/greenkeeper/eslint-5.14.1
Update eslint to the latest version 🚀
2019-02-19 22:20:33 +11:00
koalyptus 02997076d4
Merge branch 'master' into greenkeeper/eslint-5.14.1 2019-02-19 21:26:47 +11:00
koalyptus 9117097750
Update package.json 2019-02-19 21:26:06 +11:00
koalyptus e3f9851848
Update package-lock.json 2019-02-19 21:25:42 +11:00
koalyptus f1febe1688
Merge pull request #685 from koalyptus/679-uuid-generator-fix
fix TableFilter table id generation with more robust uuid generator
2019-02-19 21:14:50 +11:00
greenkeeper[bot] cf9a566e92 chore(package): update lockfile package-lock.json 2019-02-18 18:51:39 +00:00
greenkeeper[bot] 34e8b4099b chore(package): update eslint to version 5.14.1 2019-02-18 18:51:36 +00:00
koalyptus 495b64ecf0 fix TableFilter table id generation with more robust uuid generator 2019-02-18 22:50:04 +11:00
koalyptus 0a69a99dc5
Merge pull request #682 from koalyptus/feature-registering
Feature registering
2019-02-16 22:02:55 +11:00
koalyptus 2d9671e10d upgrade various packages 2019-02-16 21:52:06 +11:00
koalyptus 0f380c03da Merge remote-tracking branch 'origin/greenkeeper/monorepo.babel7-20190216020312' into feature-registering 2019-02-16 21:38:42 +11:00
koalyptus df85babf34 Merge remote-tracking branch 'origin/greenkeeper/codecov-3.2.0' into feature-registering 2019-02-16 21:32:51 +11:00
koalyptus 131280c1a3 merge eslint 2019-02-16 20:23:52 +11:00
greenkeeper[bot] 372473227c chore(package): update lockfile package-lock.json 2019-02-16 02:04:34 +00:00
greenkeeper[bot] cb7fc0d4fa chore(package): update @babel/core to version 7.3.3 2019-02-16 02:04:29 +00:00
greenkeeper[bot] c3b5ef529c chore(package): update lockfile package-lock.json 2019-02-15 22:06:24 +00:00
greenkeeper[bot] 89b1814c2d chore(package): update eslint to version 5.14.0 2019-02-15 22:06:18 +00:00
koalyptus 9a1202c0b5 merge master in, fix conflict 2019-02-15 21:41:56 +11:00
koalyptus 95475b022d prepare dist 2019-02-15 21:37:30 +11:00
koalyptus 8b1d3a6e23 fix extesion registering 2019-02-15 14:16:35 +11:00
greenkeeper[bot] 6b2fbd1eef chore(package): update lockfile package-lock.json 2019-02-13 02:15:43 +00:00
greenkeeper[bot] 8d1dc88f6a chore(package): update codecov to version 3.2.0 2019-02-13 02:15:38 +00:00
koalyptus 34c56e5765 Fix class name registering 2019-02-10 23:14:46 +11:00
koalyptus 87ee312fc5 undo Register class 2019-02-10 00:38:11 +11:00
koalyptus df0221d5e7 refactor feature istantiation helpers 2019-02-10 00:27:55 +11:00
koalyptus 528d587a80 continue messing around 2019-02-07 07:27:52 +11:00
koalyptus b8bdff83aa
Merge pull request #676 from koalyptus/greenkeeper/monorepo.babel7-20190205012427
Update babel7 to the latest version 🚀
2019-02-06 13:15:33 +11:00
koalyptus d40244b7e5
Update package.json 2019-02-06 12:59:41 +11:00
koalyptus ec7799b57b
Update package-lock.json 2019-02-06 12:59:29 +11:00
greenkeeper[bot] fa28abbee8 chore(package): update lockfile package-lock.json 2019-02-05 01:26:33 +00:00
greenkeeper[bot] e06dfbdc35 chore(package): update @babel/preset-env to version 7.3.1 2019-02-05 01:26:29 +00:00
koalyptus 64f56c22a4 include files in git 2019-01-22 22:23:36 +11:00
koalyptus ecfa6c64ad wip continue 2019-01-22 22:23:00 +11:00
koalyptus 37f6db7025 wip 2019-01-15 23:29:13 +11:00
koalyptus bfa440b265
Merge pull request #674 from koalyptus/webpack-dev-server-secutity-update
Webpack dev server secutity update
2019-01-06 20:51:20 +11:00
koalyptus bf9cbd0a69 prepare dist package 2019-01-06 20:43:34 +11:00
koalyptus 967ae801b4
Update package-lock.json 2019-01-06 20:30:22 +11:00
koalyptus 066c5fee56
Update package.json 2019-01-06 20:28:07 +11:00
koalyptus 807c191a01
Update package.json 2019-01-06 20:27:50 +11:00
koalyptus 9382a07c7b
Merge pull request #673 from koalyptus/greenkeeper/sugar-date-2.0.6
Greenkeeper/sugar date 2.0.6
2018-12-31 14:00:02 +11:00
koalyptus 8b09b6feab fix unit tests 2018-12-31 13:52:15 +11:00
koalyptus d733766621
Merge pull request #672 from koalyptus/greenkeeper/uglifyjs-webpack-plugin-2.1.1
Update uglifyjs-webpack-plugin to the latest version 🚀
2018-12-31 13:18:24 +11:00
koalyptus ceba24d727
Merge branch 'master' into greenkeeper/uglifyjs-webpack-plugin-2.1.1 2018-12-31 13:13:52 +11:00
koalyptus c25cae1679
Update package.json 2018-12-31 13:12:15 +11:00
koalyptus 04342ac316
Update package-lock.json 2018-12-31 13:12:02 +11:00
koalyptus 0ad57767f8
Merge pull request #671 from koalyptus/greenkeeper/grunt-shell-3.0.0
Update grunt-shell to the latest version 🚀
2018-12-28 13:52:55 +11:00
koalyptus fd56dabea8
Merge branch 'master' into greenkeeper/grunt-shell-3.0.0 2018-12-28 13:48:12 +11:00
koalyptus 0b11de4f90
Update package.json 2018-12-28 13:47:30 +11:00
koalyptus bbd0ce06ce
Update package-lock.json 2018-12-28 13:47:15 +11:00
greenkeeper[bot] 500344c64a chore(package): update lockfile package-lock.json 2018-12-27 12:49:53 +00:00
greenkeeper[bot] 5845f8c52d chore(package): update uglifyjs-webpack-plugin to version 2.1.1 2018-12-27 12:49:49 +00:00
koalyptus d232f64fa5
Merge pull request #670 from koalyptus/greenkeeper/uglifyjs-webpack-plugin-2.1.0
Update uglifyjs-webpack-plugin to the latest version 🚀
2018-12-27 21:16:04 +11:00
koalyptus 53a77d1b97
Merge branch 'master' into greenkeeper/uglifyjs-webpack-plugin-2.1.0 2018-12-27 21:12:10 +11:00
koalyptus 44ce01be4b
Update package.json 2018-12-27 21:10:15 +11:00
koalyptus 1f17364a00
Update package-lock.json 2018-12-27 21:09:48 +11:00
koalyptus a437dad841
Merge pull request #669 from koalyptus/greenkeeper/monorepo.babel7-20181220134640
Update babel7 to the latest version 🚀
2018-12-27 15:14:36 +11:00
koalyptus 99b34c07b4
Update package-lock.json 2018-12-27 14:38:21 +11:00
koalyptus ff977281c7
Update package.json 2018-12-27 14:38:05 +11:00
greenkeeper[bot] bf667cdd6f chore(package): update lockfile package-lock.json 2018-12-22 22:11:45 +00:00
greenkeeper[bot] 94d6d59593 chore(package): update grunt-shell to version 3.0.0 2018-12-22 22:11:42 +00:00
greenkeeper[bot] 1fc5fa5f8a chore(package): update lockfile package-lock.json 2018-12-22 16:31:56 +00:00
greenkeeper[bot] 34d35a3495 chore(package): update uglifyjs-webpack-plugin to version 2.1.0 2018-12-22 16:31:52 +00:00
greenkeeper[bot] 9750b07e06 chore(package): update lockfile package-lock.json 2018-12-20 13:52:14 +00:00
greenkeeper[bot] bfe6b6dc2c chore(package): update @babel/preset-env to version 7.2.3 2018-12-20 13:52:10 +00:00
greenkeeper[bot] 599717ae14 chore(package): update lockfile package-lock.json 2018-12-05 14:32:04 +00:00
greenkeeper[bot] e96273e95f chore(package): update sugar-date to version 2.0.6
Closes #666
2018-12-05 14:32:00 +00:00
56 changed files with 5988 additions and 6665 deletions

View file

@ -14,7 +14,7 @@
"keyword-spacing": ["error", { "after": true, "before": true }],
"max-depth": [2, 7],
"max-statements": [2, 133],
"complexity": [2, 41],
"complexity": [2, 45],
"no-unused-vars": 2,
"no-eval": 2,
"no-underscore-dangle": 0,

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Reproduction steps:**
Steps to reproduce the behavior:
1. [First Step]
2. [Second Step]
3. [Other Steps...]
**Expected behavior**
A clear and concise description of what you expected to happen.
**Observed behavior:**
A clear and concise description of observed behavior.
**Screenshots**
If applicable, add screenshots to help explain your problem.
![Screenshots and GIFs which follow reproduction steps to demonstrate the problem](url)
**TableFilter version:** [Enter TableFilter version here]
**Browser and version:** [Enter Browser name and version here]
**OS and version:** [Enter OS name and version here]
**Device:** [e.g. iPhone6]
**Additional information/context:**
Add any other context about the problem here.
* Problem started happening recently, didn't happen in an older version of TableFilter: [Yes/No] if yes [version here]
* Problem can be reliably reproduced, doesn't happen randomly: [Yes/No]

View file

@ -0,0 +1,36 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Enhancement/feature description**
[A clear and concise description of what the problem is. Ex. I'm always frustrated when ...]
**Steps which explain the enhancement/feature**
1. [First Step]
2. [Second Step]
3. [Other Steps...]
**Current and suggested behavior**
[Describe current and suggested behavior here]
**Why would the enhancement be useful to most users**
[Explain why the enhancement would be useful to most users]
**Screenshots and GIFs**
![Screenshots and GIFs which demonstrate the steps or part of TableFilter the enhancement suggestion is related to](url)
**Additional context**
[Add any other context or screenshots about the feature request here.]
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**TableFilter Version:** [Enter TableFilter version here]
**Browser and version:** [Enter Browser name and version here]
**OS and version:** [Enter OS name and version here]
**Device:** [e.g. iPhone6]

17
.github/ISSUE_TEMPLATE/support.md vendored Normal file
View file

@ -0,0 +1,17 @@
---
name: Support
about: I need support with TableFilter
title: ''
labels: ''
assignees: ''
---
For usage and support questions, please check out resources below, you might find an answer:
- https://www.tablefilter.com/
- https://www.tablefilter.com/docs/
- https://www.tablefilter.com/examples.html
- https://github.com/koalyptus/TableFilter/wiki/
- https://github.com/koalyptus/TableFilter/issues?q=is%3Aissue+is%3Aclosed
- https://codepen.io/koalyptus/pens/public/

View file

@ -13,7 +13,7 @@ module.exports = function (grunt) {
coverage: {
disposeCollector: true,
src: ['dist/tablefilter/*.js'],
instrumentedFiles: 'temp/',
instrumentedFiles: 'report/temp/',
htmlReport: 'report/coverage',
coberturaReport: 'report/',
lcovReport: 'report/',

View file

@ -24,7 +24,7 @@ users to filter and limit the data displayed within a long table. By default, th
* Attach to an existing HTML table
* Integration with any server-side technology as this is a pure client-side
solution
* Exhaustive documentation and poweful API
* Exhaustive documentation and powerful API
## Getting started
* Clone the repo using Git:

4
dist/starter.html vendored
View file

@ -1,10 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>tablefilter v0.6.65 - Starter</title>
<title>tablefilter v0.7.3 - Starter</title>
</head>
<body>
<h1>tablefilter v0.6.65</h1>
<h1>tablefilter v0.7.3</h1>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

11685
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{
"name": "tablefilter",
"version": "0.6.70",
"version": "0.7.3",
"description": "A Javascript library making HTML tables filterable and a bit more",
"license": "MIT",
"author": {
@ -40,17 +40,17 @@
"tag": "next"
},
"devDependencies": {
"@babel/core": "7.2.2",
"@babel/preset-env": "7.2.0",
"babel-eslint": "10.0.0",
"@babel/core": "7.10.0",
"@babel/preset-env": "7.10.0",
"babel-eslint": "10.1.0",
"babel-loader": "^8.0.2",
"babel-preset-env": "1.7.0",
"clean-webpack-plugin": "^1.0.0",
"codecov": "3.1.0",
"clean-webpack-plugin": "^3.0.0",
"codecov": "3.7.1",
"diacritics": "1.3.0",
"esdoc": "1.1.0",
"esdoc-standard-plugin": "1.0.0",
"eslint": "5.0.1",
"eslint": "6.5.0",
"format-number": "3.0.0",
"grunt": "^1.0.1",
"grunt-cli": "1.3.2",
@ -58,18 +58,18 @@
"grunt-contrib-connect": "^2.0.0",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-qunit-istanbul": "1.0.0",
"grunt-shell": "2.1.0",
"grunt-qunit-istanbul": "1.1.0",
"grunt-shell": "3.0.0",
"grunt-string-replace": "^1.3.1",
"isparta-loader": "2.0.0",
"script-loader": "^0.7.0",
"string-replace-webpack-plugin": "^0.1.3",
"stylus": "^0.54.5",
"sugar-date": "2.0.4",
"uglifyjs-webpack-plugin": "2.0.1",
"webpack": "^4.0.1",
"sugar-date": "2.0.6",
"uglifyjs-webpack-plugin": "2.2.0",
"webpack": "^4.38.0",
"webpack-cli": "^3.0.8",
"webpack-dev-server": "^3.0.0"
"webpack-dev-server": "^3.1.11"
},
"dependencies": {},
"bugs": {

View file

@ -1,19 +1,3 @@
import {DateType} from './modules/dateType';
import {Help} from './modules/help';
import {State} from './modules/state';
import {GridLayout} from './modules/gridLayout';
import {Loader} from './modules/loader';
import {HighlightKeyword} from './modules/highlightKeywords';
import {PopupFilter} from './modules/popupFilter';
import {MarkActiveColumns} from './modules/markActiveColumns';
import {RowsCounter} from './modules/rowsCounter';
import {StatusBar} from './modules/statusBar';
import {ClearButton} from './modules/clearButton';
import {AlternateRows} from './modules/alternateRows';
import {NoResults} from './modules/noResults';
import {Paging} from './modules/paging';
import {Toolbar} from './modules/toolbar';
/**
* Filter types
*/
@ -132,75 +116,3 @@ export const IP_ADDRESS = 'ipaddress';
* @type {Number}
*/
export const AUTO_FILTER_DELAY = 750;
/**
* TableFilter features definitions
* @type {Object}
*/
export const FEATURES = {
dateType: {
class: DateType,
name: 'dateType'
},
help: {
class: Help,
name: 'help',
enforce: true
},
state: {
class: State,
name: 'state'
},
markActiveColumns: {
class: MarkActiveColumns,
name: 'markActiveColumns'
},
gridLayout: {
class: GridLayout,
name: 'gridLayout'
},
loader: {
class: Loader,
name: 'loader'
},
highlightKeyword: {
class: HighlightKeyword,
name: 'highlightKeyword',
property: 'highlightKeywords'
},
popupFilter: {
class: PopupFilter,
name: 'popupFilter',
property: 'popupFilters'
},
rowsCounter: {
class: RowsCounter,
name: 'rowsCounter'
},
statusBar: {
class: StatusBar,
name: 'statusBar'
},
clearButton: {
class: ClearButton,
name: 'clearButton',
property: 'btnReset'
},
alternateRows: {
class: AlternateRows,
name: 'alternateRows'
},
noResults: {
class: NoResults,
name: 'noResults'
},
paging: {
class: Paging,
name: 'paging'
},
toolbar: {
class: Toolbar,
name: 'toolbar',
enforce: true
}
};

View file

@ -36,7 +36,7 @@ export const getFirstTextNode = (node) => {
/**
* Creates an html element with given collection of attributes
* @param {String} tag a string of the html tag to create
* @param {String} tag html tag name
* @param {Array} an undetermined number of arrays containing the with 2
* items, the attribute name and its value ['id','myId']
* @return {Object} created element

View file

@ -21,7 +21,7 @@ export default class AdapterEzEditTable extends Feature {
* @param {Object} cfg Configuration options for ezEditTable library
*/
constructor(tf, cfg) {
super(tf, cfg.name);
super(tf, AdapterEzEditTable);
/**
* Module description
@ -505,3 +505,5 @@ export default class AdapterEzEditTable extends Feature {
this.initialized = false;
}
}
AdapterEzEditTable.meta = {altName: 'advancedGrid'};

View file

@ -33,7 +33,7 @@ export default class ColOps extends Feature {
* @param {Object} opts Configuration object
*/
constructor(tf, opts) {
super(tf, opts.name);
super(tf, ColOps);
/**
* Callback fired before columns operations start

View file

@ -23,7 +23,7 @@ export default class ColsVisibility extends Feature {
* @param {Object} Configuration object
*/
constructor(tf, f) {
super(tf, f.name);
super(tf, ColsVisibility);
// Configuration object
let cfg = this.config;

View file

@ -18,7 +18,7 @@ export default class FiltersVisibility extends Feature {
* @param {Object} Configuration object
*/
constructor(tf, f) {
super(tf, f.name);
super(tf, FiltersVisibility);
/**
* Module name

View file

@ -20,7 +20,7 @@ export default class AdapterSortableTable extends Feature {
* @param {Object} opts Configuration object
*/
constructor(tf, opts) {
super(tf, opts.name);
super(tf, AdapterSortableTable);
/**
* Module name
@ -508,9 +508,12 @@ export default class AdapterSortableTable extends Feature {
}
AdapterSortableTable.meta = {altName: 'sort'};
//Converters
function ipAddress(value) {
let vals = value.split('.');
// eslint-disable-next-line no-unused-vars
for (let x in vals) {
let val = vals[x];
while (3 > val.length) {

View file

@ -1,3 +1,4 @@
import {toCamelCase} from './string';
const NOT_IMPLEMENTED = 'Not implemented.';
@ -8,9 +9,11 @@ export class Feature {
/**
* Creates an instance of Feature
* @param {Object} tf TableFilter instance
* @param {String} feature Feature name known by TableFilter
* @param {Class} feature Feature class for TableFilter registration
*/
constructor(tf, feature) {
constructor(tf, cls) {
cls.meta = cls.meta || {};
/**
* TableFilter instance
* @type {TableFilter}
@ -18,16 +21,18 @@ export class Feature {
this.tf = tf;
/**
* Feature name
* Feature name is the camelised class name as per TableFilter's
* convention
* @type {String}
*/
this.feature = feature;
this.feature = cls.meta.altName || cls.meta.name
|| toCamelCase(cls.name);
/**
* TableFilter feature setting
* @type {Boolean}
*/
this.enabled = tf[feature];
this.enabled = tf[this.feature];
/**
* TableFilter configuration

View file

@ -14,9 +14,10 @@ export class AlternateRows extends Feature {
* @param {Object} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'alternateRows');
super(tf, AlternateRows);
let config = this.config;
/**
* Css class for even rows (default: 'even')
* @type {String}

View file

@ -1,7 +1,7 @@
import {Feature} from '../feature';
import {
ignoreCase, numSortAsc, numSortDesc,
dateSortAsc, sortNumberStr, sortDateStr
dateSortAsc, dateSortDesc, sortNumberStr, sortDateStr
} from '../sort';
import {isArray, isObj, isEmpty} from '../types';
import {NUMBER, FORMATTED_NUMBER, DATE} from '../const';
@ -18,8 +18,8 @@ export class BaseDropdown extends Feature {
* Creates an instance of BaseDropdown
* @param {TableFilter} tf
*/
constructor(tf) {
super(tf, 'baseDropdown');
constructor(tf, cls) {
super(tf, cls);
let f = this.config;
@ -33,7 +33,7 @@ export class BaseDropdown extends Feature {
f.filter_options_sorter :
null;
// TODO: move here all properties shared by Dropdown CheckList
// TODO: move here all properties shared by Dropdown and CheckList
/**
* Has custom options
@ -72,14 +72,15 @@ export class BaseDropdown extends Feature {
* @private
*/
sortOptions(colIndex, options = []) {
let tf = this.tf;
let {tf} = this;
if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||
(isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {
return options;
}
let { caseSensitive, sortNumDesc } = tf;
let { caseSensitive, sortFilterOptionsDesc } = tf;
let isSortDesc = sortFilterOptionsDesc.indexOf(colIndex) !== -1;
let compareFn;
if (this.customSorter &&
@ -89,18 +90,18 @@ export class BaseDropdown extends Feature {
}
else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {
let decimal = tf.getDecimal(colIndex);
let comparer = numSortAsc;
if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {
comparer = numSortDesc;
}
let comparer = isSortDesc ? numSortDesc : numSortAsc;
compareFn = sortNumberStr(comparer, decimal);
}
else if (tf.hasType(colIndex, [DATE])) {
let locale = tf.feature('dateType').getLocale(colIndex);
let comparer = dateSortAsc;
let comparer = isSortDesc ? dateSortDesc : dateSortAsc;
compareFn = sortDateStr(comparer, locale);
} else { // string
compareFn = caseSensitive ? undefined : ignoreCase;
if (isSortDesc) {
return options.sort(compareFn).reverse();
}
}
return options.sort(compareFn);

View file

@ -22,7 +22,7 @@ export class CheckList extends BaseDropdown {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'checkList');
super(tf, CheckList);
let f = this.config;

View file

@ -15,7 +15,7 @@ export class ClearButton extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'btnReset');
super(tf, ClearButton);
let f = this.config.btn_reset || {};
@ -137,3 +137,6 @@ export class ClearButton extends Feature {
this.initialized = false;
}
}
// TODO: remove as soon as feature name is fixed
ClearButton.meta = {altName: 'btnReset'};

View file

@ -17,7 +17,7 @@ export class DateType extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'dateType');
super(tf, DateType);
/**
* Global locale

View file

@ -19,7 +19,7 @@ export class Dropdown extends BaseDropdown {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'dropdown');
super(tf, Dropdown);
// Configuration object
let f = this.config;

View file

@ -17,7 +17,7 @@ export class GridLayout extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'gridLayout');
super(tf, GridLayout);
let f = this.config.grid_layout || {};

View file

@ -86,7 +86,7 @@ export class Hash {
}
/**
* Converts a URL hash into a state JSON object
* Converts a URL hash into a JSON object
*
* @param {String} hash URL hash fragment
* @returns {Object} JSON object

View file

@ -4,7 +4,7 @@ import {addEvt, targetEvt, removeEvt} from '../event';
import {NONE} from '../const';
import {root} from '../root';
import {isEmpty, isNull} from '../types';
import {defaultsStr} from '../settings';
import {defaultsStr, defaultsNb} from '../settings';
import {RIGHT} from './toolbar';
const WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +
@ -21,7 +21,7 @@ export class Help extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'help');
super(tf, Help);
let f = this.config.help_instructions || {};
@ -92,6 +92,15 @@ export class Help extends Feature {
*/
this.cont = null;
/**
* Adjust container left position when table's horizontal scroll is
* on, typically when `responsive` option is enabled.
* @type {Number}
* @defaultValue 25
*/
this.contAdjustLeftPosition =
defaultsNb(f.container_adjust_left_position, 25);
/**
* Bound mouseup wrapper
* @private
@ -214,9 +223,21 @@ export class Help extends Feature {
let divDisplay = this.cont.style.display;
if (divDisplay === '' || divDisplay === NONE) {
this.cont.style.display = 'inline';
// if table element has an horizontal scrollbar adjust container
// left position accordingly
if (this.tf.dom().scrollLeft > 0) {
this.cont.style.left = `${
this.btn.offsetLeft
- this.tf.dom().scrollLeft
+ this.contAdjustLeftPosition
}px`;
}
addEvt(root, 'mouseup', this.boundMouseup);
} else {
this.cont.style.display = NONE;
this.cont.style.left = '';
}
}
@ -238,3 +259,6 @@ export class Help extends Feature {
}
}
// TODO: remove as soon as feature name is fixed
Help.meta = {alwaysInstantiate: true};

View file

@ -172,3 +172,9 @@ export class HighlightKeyword {
this.highlight(cell, term, this.highlightCssClass);
}
}
// TODO: remove as soon as feature name is fixed
HighlightKeyword.meta = {
name: 'highlightKeyword',
altName: 'highlightKeywords'
};

View file

@ -44,7 +44,7 @@ export class Loader extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'loader');
super(tf, Loader);
let f = this.config.loader || {};

View file

@ -16,7 +16,7 @@ export class MarkActiveColumns extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'markActiveColumns');
super(tf, MarkActiveColumns);
let config = this.config.mark_active_columns || {};

View file

@ -17,7 +17,7 @@ export class NoResults extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'noResults');
super(tf, NoResults);
//configuration object
let f = this.config.no_results_message || {};

View file

@ -21,7 +21,7 @@ export class Paging extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'paging');
super(tf, Paging);
// Configuration object
let f = this.config.paging || {};

View file

@ -19,7 +19,7 @@ export class PopupFilter extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'popupFilters');
super(tf, PopupFilter);
// Configuration object
let f = this.config.popup_filters || {};
@ -456,3 +456,6 @@ export class PopupFilter extends Feature {
}
}
// TODO: remove as soon as feature name is fixed
PopupFilter.meta = {altName: 'popupFilters'};

View file

@ -17,7 +17,7 @@ export class RowsCounter extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'rowsCounter');
super(tf, RowsCounter);
// TableFilter configuration
let f = this.config.rows_counter || {};

View file

@ -19,7 +19,7 @@ export class State extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'state');
super(tf, State);
let cfg = this.config.state || {};

View file

@ -30,7 +30,7 @@ export class StatusBar extends Feature {
* @param {TableFilter} tf TableFilter instance
*/
constructor(tf) {
super(tf, 'statusBar');
super(tf, StatusBar);
// Configuration object
let f = this.config.status_bar || {};

View file

@ -29,7 +29,7 @@ export class Toolbar extends Feature {
* @memberof Toolbar
*/
constructor(tf) {
super(tf, 'toolbar');
super(tf, Toolbar);
// Configuration object
let f = this.config.toolbar || {};
@ -219,3 +219,6 @@ export class Toolbar extends Feature {
this.initialized = false;
}
}
// TODO: remove as soon as feature name is fixed
Toolbar.meta = {alwaysInstantiate: true};

View file

@ -74,3 +74,39 @@ export const contains = (term, data, exactMatch = false, caseSensitive = false,
}
return regexp.test(data);
};
/**
* Camelize a string, cutting the string by multiple separators like
* hyphens, underscores and spaces.
* @param {String} text text to camelize
* @return {String} camelized text
*/
export const toCamelCase = (text = '') => {
return text.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => {
if (p2) {
return p2.toUpperCase();
}
return p1.toLowerCase();
});
};
/**
* Generate a string in the format of a UUID (Universally Unique IDentifier).
* NOTE: This format of 8 chars, followed by 3 groups of 4 chars, followed by 12
* chars is known as a UUID and is defined in RFC4122 and is a standard for
* generating unique IDs. This function DOES NOT implement this standard.
* It simply outputs a string that looks similar. The standard is found here:
* https://www.ietf.org/rfc/rfc4122.txt
* source: https://gist.github.com/gordonbrander/2230317
* @return {String}
*/
export const uuid = () => {
const chr4 = () => Math.random().toString(16).slice(-4);
return chr4() + chr4()
+ '-' + chr4()
+ '-' + chr4()
+ '-' + chr4()
+ '-' + chr4()
+ chr4() + chr4();
};

View file

@ -2,7 +2,7 @@ import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';
import {
addClass, createElm, elm, getText, getFirstTextNode, removeClass, tag
} from './dom';
import {contains, matchCase, rgxEsc, trim} from './string';
import {contains, matchCase, rgxEsc, trim, toCamelCase, uuid} from './string';
import {
isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,
isBoolean
@ -17,16 +17,36 @@ import {root} from './root';
import {Emitter} from './emitter';
import {Dropdown} from './modules/dropdown';
import {CheckList} from './modules/checkList';
import {DateType} from './modules/dateType';
import {Help} from './modules/help';
import {State} from './modules/state';
import {GridLayout} from './modules/gridLayout';
import {Loader} from './modules/loader';
import {HighlightKeyword} from './modules/highlightKeywords';
import {PopupFilter} from './modules/popupFilter';
import {MarkActiveColumns} from './modules/markActiveColumns';
import {RowsCounter} from './modules/rowsCounter';
import {StatusBar} from './modules/statusBar';
import {ClearButton} from './modules/clearButton';
import {AlternateRows} from './modules/alternateRows';
import {NoResults} from './modules/noResults';
import {Paging} from './modules/paging';
import {Toolbar} from './modules/toolbar';
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,
FEATURES
CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER
} from './const';
let doc = root.document;
const FEATURES = [
DateType, Help, State, MarkActiveColumns, GridLayout, Loader,
HighlightKeyword, PopupFilter, RowsCounter, StatusBar, ClearButton,
AlternateRows, NoResults, Paging, Toolbar
];
/**
* Makes HTML tables filterable and a bit more :)
*
@ -122,7 +142,7 @@ export class TableFilter {
args.forEach((arg) => {
if (typeof arg === 'object' && arg.nodeName === 'TABLE') {
this.tbl = arg;
this.id = arg.id || `tf_${new Date().getTime()}_`;
this.id = arg.id || `tf_${uuid()}`;
this.tbl.id = this.id;
} else if (isString(arg)) {
this.id = arg;
@ -317,7 +337,7 @@ export class TableFilter {
this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);
/**
* Enable/disable case sensitivity filtering
* Enable/disable case sensitivity for filtering, default false
* @type {Boolean}
*/
this.caseSensitive = Boolean(f.case_sensitive);
@ -399,8 +419,7 @@ export class TableFilter {
* Enable/disable single filter mode
* @type {Boolean|Object}
*/
this.singleFlt = isObj(f.single_filter) ||
Boolean(f.single_filter);
this.singleFlt = isObj(f.single_filter) || Boolean(f.single_filter);
/**
* Specify columns to be excluded from single filter search, by default
@ -474,7 +493,9 @@ export class TableFilter {
* Text for clear option in drop-down filter types (1st option)
* @type {String|Array}
*/
this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');
this.clearFilterText = isArray(f.clear_filter_text)
? f.clear_filter_text
: defaultsStr(f.clear_filter_text, 'Clear');
/**
* Indicate whether empty option is enabled in drop-down filter types
@ -513,38 +534,24 @@ export class TableFilter {
* by default globally or on a column basis
* @type {Boolean|Array}
*/
this.sortSlc = isUndef(f.sort_select) ? true :
isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);
this.sortSlc = isUndef(f.sort_select)
? true
: defaultsArr(f.sort_select, Boolean(f.sort_select));
/**
* Indicate whether options in drop-down filter types are sorted in a
* ascending numeric manner
* @type {Boolean}
* @private
*/
this.isSortNumAsc = Boolean(f.sort_num_asc);
/**
* List of columns implementing options sorting in a ascending numeric
* manner
* List of columns implementing filter options sorting in ascending
* manner based on column data type
* @type {Array}
*/
this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];
this.sortFilterOptionsAsc = defaultsArr(f.sort_filter_options_asc, []);
/**
* Indicate whether options in drop-down filter types are sorted in a
* descending numeric manner
* @type {Boolean}
* @private
*/
this.isSortNumDesc = Boolean(f.sort_num_desc);
/**
* List of columns implementing options sorting in a descending numeric
* manner
* List of columns implementing filter options sorting in descending
* manner based on column data type
* @type {Array}
*/
this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];
this.sortFilterOptionsDesc =
defaultsArr(f.sort_filter_options_desc, []);
/**
* Indicate whether drop-down filter types are populated on demand at
@ -926,10 +933,8 @@ export class TableFilter {
*/
this.ExtRegistry = {};
// conditionally instantiate required features
this.instantiateFeatures(
Object.keys(FEATURES).map((item) => FEATURES[item])
);
// instantiate features if needed
this.instantiateFeatures(FEATURES);
}
/**
@ -949,20 +954,16 @@ export class TableFilter {
//loads theme
this.loadThemes();
const { dateType, help, state, markActiveColumns, gridLayout, loader,
highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,
alternateRows, noResults, paging, toolbar } = FEATURES;
//explicitly initialise features in given order
this.initFeatures([
dateType,
help,
state,
markActiveColumns,
gridLayout,
loader,
highlightKeyword,
popupFilter
DateType,
Help,
State,
MarkActiveColumns,
GridLayout,
Loader,
HighlightKeyword,
PopupFilter
]);
//filters grid is not generated
@ -1035,13 +1036,13 @@ export class TableFilter {
}
this.initFeatures([
rowsCounter,
statusBar,
clearButton,
alternateRows,
noResults,
paging,
toolbar
RowsCounter,
StatusBar,
ClearButton,
AlternateRows,
NoResults,
Paging,
Toolbar
]);
this.setColWidths();
@ -1250,47 +1251,41 @@ export class TableFilter {
}
/**
* Istantiate the collection of features required by the
* configuration and add them to the features registry. A feature is
* described by a `class` and `name` fields and and optional `property`
* field:
* {
* class: AClass,
* name: 'aClass'
* }
* Conditionally istantiate each feature class in passed collection if
* required by configuration and add it to the features registry. A feature
* class meta information contains a `name` field and optional `altName` and
* `alwaysInstantiate` fields
* @param {Array} [features=[]]
* @private
*/
instantiateFeatures(features = []) {
features.forEach((feature) => {
// TODO: remove the property field.
// Due to naming convention inconsistencies, a `property`
// field is added to allow a conditional instanciation based
// on that property on TableFilter, if supplied.
feature.property = feature.property || feature.name;
if (!this.hasConfig || this[feature.property] === true ||
feature.enforce === true) {
let {class: Cls, name} = feature;
features.forEach(featureCls => {
let Cls = featureCls;
// assign meta info if not present
Cls.meta = Cls.meta || {name: null, altName: null};
Cls.meta.name = toCamelCase(Cls.name);
let {name, altName, alwaysInstantiate} = Cls.meta;
let prop = altName || name;
if (!this.hasConfig || this[prop] === true
|| Boolean(alwaysInstantiate)) {
this.Mod[name] = this.Mod[name] || new Cls(this);
}
});
}
/**
* Initialise the passed features collection. A feature is described by a
* `class` and `name` fields and and optional `property` field:
* {
* class: AClass,
* name: 'aClass'
* }
* Initialise each feature class in passed collection.
* @param {Array} [features=[]]
* @private
*/
initFeatures(features = []) {
features.forEach((feature) => {
let {property, name} = feature;
if (this[property] === true && this.Mod[name]) {
features.forEach(featureCls => {
let {name, altName} = featureCls.meta;
let prop = altName || name;
if (this[prop] === true && this.Mod[name]) {
this.Mod[name].init();
}
});
@ -1790,11 +1785,11 @@ export class TableFilter {
}
//empty
else if (hasEM) {
occurence = !cell.hasChildNodes();
occurence = !cell.hasChildNodes() || isEmpty(cellValue);
}
//non-empty
else if (hasNM) {
occurence = cell.hasChildNodes();
occurence = cell.hasChildNodes() && !isEmpty(cellValue);
} else {
occurence = contains(term, cellValue,
this.isExactMatch(colIdx), this.caseSensitive);
@ -1880,11 +1875,11 @@ export class TableFilter {
}
//empty
else if (hasEM) {
occurence = !cell.hasChildNodes();
occurence = !cell.hasChildNodes() || isEmpty(cellValue);
}
//non-empty
else if (hasNM) {
occurence = cell.hasChildNodes();
occurence = cell.hasChildNodes() && !isEmpty(cellValue);
} else {
// If numeric type data, perform a strict equality test and
// fallback to unformatted number string comparison

View file

@ -32,6 +32,7 @@ table.TF
&.resp
display block
overflow-x auto
overflow-y hidden
.sort-arrow
position initial

View file

@ -27,7 +27,6 @@
highlight_column: true
},
no_results_message: true,
responsive: true,
custom_options: {
cols:[3],
texts: [

View file

@ -40,6 +40,10 @@
page_length: true,
sort: true
},
responsive: true,
help_instructions: {
container_adjust_left_position: 30
},
alternate_rows: true,
btn_reset: true,
rows_counter: true,

View file

@ -100,19 +100,43 @@ test('Can sort options', function() {
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_0: 'checklist',
col_1: 'checklist',
col_2: 'checklist',
col_3: 'checklist',
col_4: 'checklist',
col_types: ['string', 'string', 'number', 'number', 'number'],
sort_num_asc: [2, 3],
sort_num_desc: [4]
sort_filter_options_asc: [0, 2, 3],
sort_filter_options_desc: [1, 4]
});
tf.init();
var flt0 = id(tf.fltIds[0]);
var flt1 = id(tf.fltIds[1]);
var flt2 = id(tf.fltIds[2]);
var flt3 = id(tf.fltIds[3]);
var flt4 = id(tf.fltIds[4]);
deepEqual(
flt0.getElementsByTagName('li')[1].firstChild.firstChild.value,
'Adelaide',
'First option value for column 0'
);
deepEqual(
flt0.getElementsByTagName('li')[2].firstChild.firstChild.value,
'Sydney',
'Last option value for column 0'
);
deepEqual(
flt1.getElementsByTagName('li')[1].firstChild.firstChild.value,
'Perth',
'First option value for column 1'
);
deepEqual(
flt1.getElementsByTagName('li')[6].firstChild.firstChild.value,
'Adelaide',
'Last option value for column 1'
);
deepEqual(
flt2.getElementsByTagName('li')[1].firstChild.firstChild.value,
'286',
@ -182,6 +206,55 @@ test('Can select empty and non-empty options', function() {
'Filter 3 options values attribute');
});
// issue 714, clear filter text
module('Clear filter text');
test('Can define clear filter text for each column', function() {
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_2: 'checklist',
col_3: 'checklist',
col_4: 'checklist',
clear_filter_text: [null, null, 'clear 2', 'clear 3', 'clear 4']
});
tf.init();
var flt2 = tf.getFilterElement(2).getElementsByTagName('li');
var flt3 = tf.getFilterElement(3).getElementsByTagName('li');
var flt4 = tf.getFilterElement(4).getElementsByTagName('li');
deepEqual(flt2[0].getElementsByTagName('label')[0].innerText,
'clear 2', 'clear text filter 2');
deepEqual(flt3[0].getElementsByTagName('label')[0].innerText,
'clear 3', 'clear text filter 3');
deepEqual(flt4[0].getElementsByTagName('label')[0].innerText,
'clear 4', 'clear text filter 4');
});
test('Can define clear filter text globally', function() {
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_2: 'checklist',
col_3: 'checklist',
col_4: 'checklist',
clear_filter_text: 'reset'
});
tf.init();
var flt2 = tf.getFilterElement(2).getElementsByTagName('li');
var flt3 = tf.getFilterElement(3).getElementsByTagName('li');
var flt4 = tf.getFilterElement(4).getElementsByTagName('li');
deepEqual(flt2[0].getElementsByTagName('label')[0].innerText,
'reset', 'clear text filter 2');
deepEqual(flt3[0].getElementsByTagName('label')[0].innerText,
'reset', 'clear text filter 3');
deepEqual(flt4[0].getElementsByTagName('label')[0].innerText,
'reset', 'clear text filter 4');
});
module('Tear down');
test('TableFilter removed', function() {
tf.destroy();

View file

@ -6,6 +6,7 @@ var tf = new TableFilter('demo', {
tf.init();
var clearButton = tf.feature('clearButton');
module('Sanity checks');
test('Clear button component', function() {
deepEqual(typeof clearButton, 'object', 'ClearButton instanciated');

View file

@ -1,4 +1,6 @@
(function(win, TableFilter){
(function(TableFilter) {
var id = function (id) { return document.getElementById(id); };
// TODO: add sort to test it with different column types
var tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
@ -17,7 +19,6 @@
]
});
tf.init();
window.tf = tf;
module('Sanity checks');
test('Data types', function() {
@ -279,7 +280,7 @@
tf.filter();
// assert
deepEqual(tf.getValidRows().length, 8, 'Expected rows');
deepEqual(tf.getValidRows().length, 7, 'Expected rows');
});
module('Locale helpers');
@ -300,10 +301,92 @@
deepEqual(result, '.', 'Decimal separator for given column');
});
module('Data types filters options sorting');
test('Can sort date types', function () {
// setup
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_6: 'checklist',
col_7: 'multiple',
col_8: 'checklist',
col_10: 'select',
col_types: [
null, null, null,
{type: 'formatted-number', decimal: ',', thousands: ','},
'formatted-number', null,
{type: 'date', locale: 'fr',},
{type: 'date', locale: 'en', format: '{dd}-{MM}-{yyyy|yy}'},
{
type: 'date', locale: 'en',
format: ['{dd}-{months}-{yyyy|yy}']
},
'IpAddress',
{
type: 'date', locale: 'en',
format: ['{yyyy|yy}-{MM}-{dd} {HH}:{mm}:{ss}']
}
],
sort_filter_options_asc: [6, 7],
sort_filter_options_desc: [8, 10]
});
// act
tf.init();
var flt6 = id(tf.fltIds[6]);
var flt7 = id(tf.fltIds[7]);
var flt8 = id(tf.fltIds[8]);
var flt10 = id(tf.fltIds[10]);
// assert
deepEqual(
flt6.getElementsByTagName('li')[1].firstChild.firstChild.value,
'19/1/1984',
'First option value for column 6'
);
deepEqual(
flt6.getElementsByTagName('li')[20].firstChild.firstChild.value,
'3/7/2002',
'Last option value for column 6'
);
deepEqual(
flt7.options[1].value,
'1/19/1984',
'First option value for column 7'
);
deepEqual(
flt7.options[20].value,
'7/3/2002',
'Last option value for column 7'
);
deepEqual(
flt8.getElementsByTagName('li')[1].firstChild.firstChild.value,
'3-Jul-2002',
'First option value for column 8'
);
deepEqual(
flt8.getElementsByTagName('li')[20].firstChild.firstChild.value,
'19-Jan-1984',
'Last option value for column 8'
);
deepEqual(
flt10.options[1].value,
'03-11-21 12:02:04',
'First option value for column 10'
);
deepEqual(
flt10.options[19].value,
'1899-11-27 02:02:04',
'Last option value for column 10'
);
});
module('Tear-down');
test('can destroy TableFilter DOM elements', function() {
tf.destroy();
deepEqual(tf.isInitialized(), false, 'Filters removed');
});
})(window, TableFilter);
})(TableFilter);

View file

@ -157,24 +157,31 @@ test('Can enable options sorting on a column basis', function() {
deepEqual(flt4.options[7].value, '40', 'Last option value for column 4');
});
test('Can sort numeric options in asc and desc manner', function() {
test('Can sort options in asc and desc manner', function() {
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_0: 'select',
col_2: 'multiple',
col_3: 'select',
col_4: 'multiple',
col_types: ['string', 'string', 'number', 'number', 'number'],
sort_num_asc: [2, 3],
sort_num_desc: [4]
case_sensitive: true,
sort_filter_options_asc: [2, 3],
sort_filter_options_desc: [0, 4]
});
tf.init();
var flt0 = id(tf.fltIds[0]);
var flt2 = id(tf.fltIds[2]);
var flt3 = id(tf.fltIds[3]);
var flt4 = id(tf.fltIds[4]);
deepEqual(flt0.options[1].value, 'Sydney',
'First option value for column 0');
deepEqual(flt0.options[2].value, 'Adelaide',
'Last option value for column 0');
deepEqual(flt2.options[1].value, '286', 'First option value for column 2');
deepEqual(flt2.options[7].value, '2781', 'Last option value for column 2');
deepEqual(flt3.options[1].value, '.6', 'First option value for column 3');
@ -183,6 +190,51 @@ test('Can sort numeric options in asc and desc manner', function() {
deepEqual(flt4.options[7].value, '4.3', 'Last option value for column 4');
});
// issue 714, clear filter text
module('Clear filter text');
test('Can define clear filter text for each column', function() {
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_2: 'multiple',
col_3: 'select',
col_4: 'multiple',
clear_filter_text: [null, null, 'clear 2', 'clear 3', 'clear 4']
});
tf.init();
var flt2 = tf.getFilterElement(2);
var flt3 = tf.getFilterElement(3);
var flt4 = tf.getFilterElement(4);
deepEqual(flt2.options[0].innerHTML, 'clear 2', 'clear text filter 2');
deepEqual(flt3.options[0].innerHTML, 'clear 3', 'clear text filter 3');
deepEqual(flt4.options[0].innerHTML, 'clear 4', 'clear text filter 4');
});
test('Can define clear filter text globally', function() {
tf.clearFilters();
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_2: 'multiple',
col_3: 'select',
col_4: 'multiple',
clear_filter_text: 'reset'
});
tf.init();
var flt2 = tf.getFilterElement(2);
var flt3 = tf.getFilterElement(3);
var flt4 = tf.getFilterElement(4);
deepEqual(flt2.options[0].innerHTML, 'reset', 'clear text filter 2');
deepEqual(flt3.options[0].innerHTML, 'reset', 'clear text filter 3');
deepEqual(flt4.options[0].innerHTML, 'reset', 'clear text filter 4');
});
module('Tear down');
test('TableFilter removed', function() {
tf.destroy();
deepEqual(id(tf.fltIds[3]), null, 'Filter is removed');

View file

@ -72,7 +72,14 @@
tf.clearFilters();
tf.setFilterValue(4, '[empty]');
tf.filter();
deepEqual(tf.getValidRows().length, 0, 'No matches expected');
var filteredData = tf.getFilteredData();
deepEqual(tf.getValidRows().length, 1, 'Expected match');
deepEqual(
filteredData[0],
[6, ['Adelaide', 'Perth', '2781', '3.1', '']],
'Expected row data'
);
});
test('Non-empty operator - [nonempty]', function() {
@ -96,7 +103,7 @@
tf.setFilterValue(4, '[nonempty]');
tf.filter();
deepEqual(tf.getValidRows().length, 7, 'Expected number of matches');
deepEqual(tf.getValidRows().length, 6, 'Expected number of matches');
});
test('Or operator - ||', function() {

View file

@ -0,0 +1,79 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TableFilter help pop-up with responsive behaviour</title>
<link rel="stylesheet" href="libs/qunit/qunit.css">
<script src="libs/qunit/qunit.js"></script>
<script src="libs/polyfill.js"></script>
</head>
<body>
<div style="float: right; width: 80%; border: 1px solid #f4f4f4;"></div>
<table id="demo" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th>From</th>
<th>Destination</th>
<th>Road Distance (km)</th>
<th>By Air (hrs)</th>
<th>By Rail (hrs)</th>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Adelaide</td>
<td>1412</td>
<td>1.4</td>
<td>25.3</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Brisbane</td>
<td>982</td>
<td>1.5</td>
<td>16</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Canberra</td>
<td>286</td>
<td>.6</td>
<td>4.3</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Melbourne</td>
<td>872</td>
<td>1.1</td>
<td>10.5</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Perth</td>
<td>2781</td>
<td>3.1</td>
<td>38</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Alice Springs</td>
<td>1533</td>
<td>2</td>
<td>20.25</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Brisbane</td>
<td>2045</td>
<td>2.15</td>
<td>40</td>
</tr>
</tbody>
</table>
<script src="../dist/tablefilter/tablefilter.js"></script>
<script src="test-help-responsive.js"></script>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

View file

@ -0,0 +1,70 @@
var tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
help_instructions: {
container_adjust_left_position: 20
},
responsive: true
});
tf.init();
var help = tf.feature('help');
module('Sanity checks');
test('Button element', function() {
deepEqual(typeof help, 'object', 'Help instanciated');
notEqual(help.btn, null, 'btn property');
});
module('Pop-up container position');
test('Help UI elements', function() {
var container = help.cont,
helpBtn = help.btn;
deepEqual(container.nodeName, 'DIV', 'Help container');
deepEqual(helpBtn.nodeName, 'SPAN', 'Help button');
});
// 772 issue: pop-up container position when table feature horizontal scroll
test('When table has horizontal scroll', function() {
// setup
tf.dom().scrollLeft = 10000;
// act
help.toggle();
// assert
deepEqual(
parseFloat(help.cont.style.left),
(help.btn.offsetLeft
- tf.dom().scrollLeft
+ help.contAdjustLeftPosition),
'Pop-up container position'
);
});
test('When table does not have horizontal scroll', function() {
tf.destroy();
tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
help_instructions: true,
responsive: false
});
tf.init();
var help = tf.feature('help');
// act
help.toggle();
// assert
deepEqual(help.cont.style.left, '', 'Pop-up container position');
});
module('Tear-down');
test('can destroy Help UI component', function() {
// act
tf.destroy();
var help = tf.feature('help');
// assert
deepEqual(help.btn, null, 'Help button removed');
deepEqual(help.cont, null, 'Help pop-up container removed');
});

View file

@ -1,6 +1,6 @@
const webpack = require('webpack');
const path = require('path');
const Clean = require('clean-webpack-plugin');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const StringReplacePlugin = require('string-replace-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const fs = require('fs');
@ -52,14 +52,14 @@ module.exports = {
}
]
},
devtool: 'source-map',
// devtool: 'source-map',
optimization: {
minimizer: [
new UglifyJsPlugin({
sourceMap: true,
// sourceMap: true,
uglifyOptions: {
beautify: false,
compress: {warnings: false},
warnings: false,
comments: false,
keep_fnames: true
}
@ -67,7 +67,9 @@ module.exports = {
]
},
plugins: [
new Clean(['dist']),
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [path.join(process.cwd(), 'dist')]
}),
new webpack.optimize.AggressiveMergingPlugin(),
new StringReplacePlugin(),
new webpack.optimize.MinChunkSizePlugin({

View file

@ -1,7 +1,7 @@
const webpack = require('webpack');
const webpackConfig = require('./webpack.config.js');
const path = require('path');
const Clean = require('clean-webpack-plugin');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
@ -23,7 +23,9 @@ module.exports = {
},
devtool: 'source-map',
plugins: [
new Clean(['dist']),
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [path.join(process.cwd(), 'dist')]
}),
new webpack.LoaderOptionsPlugin({
debug: true,
options: {