tidy-table 4.0.2 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [4.0.0] - 2023-03-04
7
+ ## [4.0.0] - 2023-05-04
8
8
 
9
9
  ### Changed
10
10
 
@@ -16,3 +16,16 @@ The following items are **breaking changes** and not supported in prior releases
16
16
  - Replaced GIF images with SVG equivalent (renamed) `arrow-up.svg`, `arrow-down.svg`
17
17
  - Replaced [QUnit](https://qunitjs.com) testing with [WebdriverIO](https://webdriver.io) framework.
18
18
  - Integrated [Babel](https://babeljs.io) transpilation build process.
19
+
20
+ ## [4.0.4] - 2023-05-12
21
+
22
+ ### Changed
23
+
24
+ ### Demo
25
+
26
+ - Fixed menu alignment in Chrome.
27
+ - Expand table to 100% width.
28
+
29
+ ### Documentation
30
+
31
+ - Added [React](https://github.com/nuxy/react-tidy-table)/[Vue](https://github.com/nuxy/vue-tidy-table) install examples.
package/README.md CHANGED
@@ -26,6 +26,18 @@ Install the package into your project using [NPM](https://npmjs.com), or downloa
26
26
 
27
27
  $ npm install tidy-table
28
28
 
29
+ ### Alternative
30
+
31
+ To add to an existing [React](https://reactjs.org) or [Vue](https://vuejs.org) project you can install this package using [YARN](https://yarnpkg.com).
32
+
33
+ #### React
34
+
35
+ $ yarn add react-tidy-table
36
+
37
+ #### Vue
38
+
39
+ $ yarn add vue-tidy-table
40
+
29
41
  ## Usage
30
42
 
31
43
  There are two ways you can use this package. One is by including the JavaScript/CSS sources directly. The other is by importing the module into your component.
@@ -39,7 +51,7 @@ After you [build the distribution sources](#cli-options) the set-up is fairly si
39
51
  <link rel="stylesheet" href="path/to/tidy-table.min.css" media="all" />
40
52
 
41
53
  <script type="text/javascript">
42
- var tidyTable = tidyTable(container, settings, options);
54
+ tidyTable(container, settings, options);
43
55
  </script>
44
56
  ```
45
57
 
@@ -54,7 +66,13 @@ import 'tidy-table/dist/tidy-table.css';
54
66
  const tidyTable = new TidyTable(container, settings, options);
55
67
  ```
56
68
 
57
- ## HTML markup
69
+ ### HTML markup
70
+
71
+ ```html
72
+ <div id="tidy-table"></div>
73
+ ```
74
+
75
+ ### Example
58
76
 
59
77
  ```javascript
60
78
  const options = {
@@ -95,6 +113,10 @@ const settings = {
95
113
  return val?.replace(/\$|%|#/g, '');
96
114
  }
97
115
  };
116
+
117
+ const container = document.getElementById('tidy-table');
118
+
119
+ const tidyTable = new TidyTable(container, settings, options);
98
120
  ```
99
121
 
100
122
  ## Table options
@@ -344,6 +344,7 @@ function TidyTable(container, settings, options) {
344
344
  function cmpInt(a, b) {
345
345
  return b - a;
346
346
  }
347
+ return self;
347
348
  }
348
349
 
349
350
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tidy-table.js","names":["TidyTable","container","settings","options","self","defaults","enableCheckbox","enableMenu","reverseSortDir","responsive","Object","assign","columnTitles","columnValues","length","renderTable","Error","_settings$postProcess","table","createTableElm","postProcess","block","querySelector","parentNode","replaceChild","appendChild","createMenuElm","classList","add","document","createElement","createTableHeaderElm","createTableBodyElm","rows","querySelectorAll","i","input","createCheckboxElm","col","addEventListener","toggleSelRows","index","bind","insertBefore","firstChild","tbody","vals","row","j","_settings$postProcess2","val","createTextNode","setAttribute","column","thead","titles","sortOrder","_loop","title","selected","className","sortByColumn","name","_settings$postProcess3","select","callback","menuOptions","value","getCheckedAsObj","option","text","menu","objs","cols","childNodes","checked","textContent","push","num","replace","order","sortByPattern","reverse","sort","a","b","str1","str2","isNaN","cmpAny","cmpInt","window","tidyTable","module","exports"],"sources":["../src/tidy-table.js"],"sourcesContent":["/**\n * tidy-table\n * Create a HTML table that can be sorted, selected and\n * post-processed using a simple callback.\n *\n * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n */\n\n'use strict';\n\n/**\n * @param {Element} container\n * Containing HTML element.\n *\n * @param {Object} settings\n * Table settings.\n *\n * @param {Object} options\n * Configuration overrides (optional).\n */\nfunction TidyTable(container, settings, options = {}) {\n const self = this;\n\n const defaults = {\n enableCheckbox: false,\n enableMenu: false,\n reverseSortDir: false,\n responsive: false\n };\n\n (function() {\n self.options = Object.assign(defaults, options);\n\n const {columnTitles, columnValues} = settings;\n\n if (columnTitles.length && columnValues.length) {\n renderTable();\n } else {\n throw new Error('Failed to initialize (missing settings)');\n }\n })();\n\n /**\n * Render a new table instance.\n */\n function renderTable() {\n const table = createTableElm();\n\n // Post-process table results HTML object.\n if (typeof settings.postProcess?.table === 'function') {\n settings.postProcess.table(table);\n }\n\n // Replace the element, if already exists.\n const block = container.querySelector('.tidy-table table');\n\n if (block) {\n block.parentNode.replaceChild(table, block);\n } else {\n\n // Generate select menu elements.\n if (self.options.enableMenu) {\n container.appendChild(createMenuElm('options'));\n }\n\n container.classList.add('tidy-table');\n container.appendChild(table);\n }\n\n // Enable/disable responsive layout support.\n if (defaults.responsive) {\n container.classList.add('responsive');\n }\n }\n\n /**\n * Create table elements.\n *\n * @return {Element}\n */\n function createTableElm() {\n const table = document.createElement('table');\n table.appendChild(createTableHeaderElm());\n table.appendChild(createTableBodyElm());\n\n // Append check boxes to beginning each row.\n if (self.options.enableCheckbox) {\n const rows = table.querySelectorAll('tr');\n\n for (let i = 0; i < rows.length; i++) {\n const input = createCheckboxElm();\n\n let col;\n\n // First row is always the header.\n if (i === 0) {\n col = document.createElement('th');\n\n // Attach event to check all boxes.\n input.addEventListener('click', function() {\n toggleSelRows(rows);\n });\n }\n else {\n col = document.createElement('td');\n\n // Attach events to each checkbox.\n input.addEventListener('click', function(index) {\n toggleSelRows(rows, index);\n }.bind(null, i), false);\n }\n\n col.appendChild(input);\n\n // Insert before first cell.\n rows[i].insertBefore(col, rows[i].firstChild);\n }\n }\n\n return table;\n }\n\n /**\n * Create table body elements.\n *\n * @return {Element}\n */\n function createTableBodyElm() {\n const tbody = document.createElement('tbody');\n\n const vals = settings.columnValues;\n\n for (let i = 0; i < vals.length; i++) {\n const row = document.createElement('tr');\n\n for (let j = 0; j < vals[i].length; j++) {\n const val = vals[i][j];\n\n const col = document.createElement('td');\n col.appendChild(document.createTextNode(val));\n col.setAttribute('title', val);\n row.appendChild(col);\n\n // Post-process table column HTML object.\n if (typeof settings.postProcess?.column === 'function') {\n settings.postProcess.column(col);\n }\n }\n\n tbody.appendChild(row);\n }\n\n return tbody;\n }\n\n /**\n * Create table header elements.\n *\n * @return {Element}\n */\n function createTableHeaderElm() {\n const thead = document.createElement('thead');\n const row = document.createElement('tr');\n\n const titles = settings.columnTitles;\n\n let sortOrder = self.sortOrder;\n\n for (let i = 0; i < titles.length; i++) {\n const title = titles[i];\n\n const col = document.createElement('th');\n col.appendChild(document.createTextNode(title));\n col.setAttribute('title', title);\n\n row.appendChild(col);\n\n if (self.selected === i) {\n let className;\n\n // Determine column result order.\n if (!self.options.reverseSortDir) {\n if (sortOrder === 'asc' || !sortOrder) {\n className = 'arrow-up';\n sortOrder = 'desc';\n }\n else {\n className = 'arrow-up';\n sortOrder = 'asc';\n }\n }\n else {\n if (sortOrder === 'desc' || !sortOrder) {\n className = 'arrow-down';\n sortOrder = 'asc';\n }\n else {\n className = 'arrow-up';\n sortOrder = 'desc';\n }\n }\n\n // Highlight selected column.\n col.classList.add(className);\n }\n\n // Attach column sorting events.\n col.addEventListener('click', function(index) {\n self.sortOrder = (self.selected === i) ? sortOrder : 'asc';\n\n sortByColumn(index, sortOrder);\n\n self.selected = index;\n\n renderTable();\n }.bind(null, i), false);\n }\n\n thead.appendChild(row);\n\n return thead;\n }\n\n /**\n * Create checkbox element.\n *\n * @returns {Element}\n */\n function createCheckboxElm() {\n const input = document.createElement('input');\n input.setAttribute('type', 'checkbox');\n\n return input;\n }\n\n /**\n * Create select menu element.\n *\n * @returns {Element}\n */\n function createMenuElm(name) {\n\n // Create reusable elements.\n const select = document.createElement('select');\n select.classList.add(name);\n\n // Listen for select menu events.\n select.addEventListener('change', function() {\n\n // Execute callback.\n const callback = settings.menuOptions[this.value][1].callback;\n\n if (typeof callback === 'function') {\n callback(getCheckedAsObj());\n }\n\n this.value = 0;\n });\n\n // .. Options\n for (let i = 0; i < settings.menuOptions.length; i++) {\n const option = document.createElement('option');\n option.text = settings.menuOptions[i][0];\n option.value = i;\n\n select.appendChild(option);\n }\n\n // Post-process select menu HTML object.\n if (typeof settings.postProcess?.menu === 'function') {\n settings.postProcess.menu(select);\n }\n\n return select;\n }\n\n /**\n * Return selected row values as array of objects.\n *\n * @returns {Array<Object>}\n */\n function getCheckedAsObj() {\n const rows = container.querySelectorAll('tbody > tr');\n const objs = [];\n\n for (let i = 0; i < rows.length; i++) {\n const cols = rows[i].childNodes;\n\n // If the row checkbox is selected.\n if (cols[0].firstChild.checked) {\n const row = [];\n\n // Simulate an associative array.\n for (let j = 1; j < cols.length; j++) {\n row[j - 1] = cols[j].textContent;\n }\n\n objs.push(row);\n }\n }\n\n return objs;\n }\n\n /**\n * Select/Deselect (input checkbox and row highlight).\n */\n function toggleSelRows(rows, num) {\n let checked;\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n const input = row.querySelector('input[type=checkbox]');\n\n // Update all rows.\n if (!num) {\n if (i === 0) {\n checked = input.checked;\n continue;\n }\n\n if (checked) {\n row.classList.replace('check-off', 'check-on') || row.classList.add('check-on');\n input.checked = true;\n }\n else {\n row.classList.replace('check-on', 'check-off');\n input.checked = false;\n }\n }\n\n // Update selected row.\n else {\n if (i === 0) {\n continue;\n }\n\n if (input.checked === true) {\n row.classList.replace('check-off', 'check-on') || row.classList.add('check-on');\n input.checked = true;\n }\n else {\n row.classList.replace('check-on', 'check-off');\n input.checked = false;\n }\n }\n }\n }\n\n /**\n * Display results ordered by selected column.\n */\n function sortByColumn(num, order) {\n let sortByPattern = settings.sortByPattern;\n\n if (typeof sortByPattern !== 'function') {\n sortByPattern = function(val) {\n return val?.replace(/\\$|%|#/g, '');\n };\n }\n\n const reverse = (order === 'desc') ? -1 : 1;\n\n // Sort object by array index.\n settings.columnValues.sort(function(a, b) {\n const str1 = sortByPattern(a[num]);\n const str2 = sortByPattern(b[num]);\n\n if (isNaN(str1)) {\n return [reverse * cmpAny(str1, str2)] >\n [reverse * cmpAny(str2, str1)] ? -1 : 1;\n }\n\n return [reverse * cmpInt(str1, str2)];\n });\n }\n\n /**\n * Generic string comparison functions.\n */\n function cmpAny(a, b) {\n return (a > b) ? 1 : (a < b) ? -1 : 0;\n }\n\n function cmpInt(a, b) {\n return b - a;\n }\n}\n\n/**\n * Set global/exportable instance, where supported.\n */\nwindow.tidyTable = function(container, settings, options) {\n return new TidyTable(container, settings, options);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = TidyTable;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tidy-table.js","names":["TidyTable","container","settings","options","self","defaults","enableCheckbox","enableMenu","reverseSortDir","responsive","Object","assign","columnTitles","columnValues","length","renderTable","Error","_settings$postProcess","table","createTableElm","postProcess","block","querySelector","parentNode","replaceChild","appendChild","createMenuElm","classList","add","document","createElement","createTableHeaderElm","createTableBodyElm","rows","querySelectorAll","i","input","createCheckboxElm","col","addEventListener","toggleSelRows","index","bind","insertBefore","firstChild","tbody","vals","row","j","_settings$postProcess2","val","createTextNode","setAttribute","column","thead","titles","sortOrder","_loop","title","selected","className","sortByColumn","name","_settings$postProcess3","select","callback","menuOptions","value","getCheckedAsObj","option","text","menu","objs","cols","childNodes","checked","textContent","push","num","replace","order","sortByPattern","reverse","sort","a","b","str1","str2","isNaN","cmpAny","cmpInt","window","tidyTable","module","exports"],"sources":["../src/tidy-table.js"],"sourcesContent":["/**\n * tidy-table\n * Create a HTML table that can be sorted, selected and\n * post-processed using a simple callback.\n *\n * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n */\n\n'use strict';\n\n/**\n * @param {Element} container\n * Containing HTML element.\n *\n * @param {Object} settings\n * Table settings.\n *\n * @param {Object} options\n * Configuration overrides (optional).\n */\nfunction TidyTable(container, settings, options = {}) {\n const self = this;\n\n const defaults = {\n enableCheckbox: false,\n enableMenu: false,\n reverseSortDir: false,\n responsive: false\n };\n\n (function() {\n self.options = Object.assign(defaults, options);\n\n const {columnTitles, columnValues} = settings;\n\n if (columnTitles.length && columnValues.length) {\n renderTable();\n } else {\n throw new Error('Failed to initialize (missing settings)');\n }\n })();\n\n /**\n * Render a new table instance.\n */\n function renderTable() {\n const table = createTableElm();\n\n // Post-process table results HTML object.\n if (typeof settings.postProcess?.table === 'function') {\n settings.postProcess.table(table);\n }\n\n // Replace the element, if already exists.\n const block = container.querySelector('.tidy-table table');\n\n if (block) {\n block.parentNode.replaceChild(table, block);\n } else {\n\n // Generate select menu elements.\n if (self.options.enableMenu) {\n container.appendChild(createMenuElm('options'));\n }\n\n container.classList.add('tidy-table');\n container.appendChild(table);\n }\n\n // Enable/disable responsive layout support.\n if (defaults.responsive) {\n container.classList.add('responsive');\n }\n }\n\n /**\n * Create table elements.\n *\n * @return {Element}\n */\n function createTableElm() {\n const table = document.createElement('table');\n table.appendChild(createTableHeaderElm());\n table.appendChild(createTableBodyElm());\n\n // Append check boxes to beginning each row.\n if (self.options.enableCheckbox) {\n const rows = table.querySelectorAll('tr');\n\n for (let i = 0; i < rows.length; i++) {\n const input = createCheckboxElm();\n\n let col;\n\n // First row is always the header.\n if (i === 0) {\n col = document.createElement('th');\n\n // Attach event to check all boxes.\n input.addEventListener('click', function() {\n toggleSelRows(rows);\n });\n }\n else {\n col = document.createElement('td');\n\n // Attach events to each checkbox.\n input.addEventListener('click', function(index) {\n toggleSelRows(rows, index);\n }.bind(null, i), false);\n }\n\n col.appendChild(input);\n\n // Insert before first cell.\n rows[i].insertBefore(col, rows[i].firstChild);\n }\n }\n\n return table;\n }\n\n /**\n * Create table body elements.\n *\n * @return {Element}\n */\n function createTableBodyElm() {\n const tbody = document.createElement('tbody');\n\n const vals = settings.columnValues;\n\n for (let i = 0; i < vals.length; i++) {\n const row = document.createElement('tr');\n\n for (let j = 0; j < vals[i].length; j++) {\n const val = vals[i][j];\n\n const col = document.createElement('td');\n col.appendChild(document.createTextNode(val));\n col.setAttribute('title', val);\n row.appendChild(col);\n\n // Post-process table column HTML object.\n if (typeof settings.postProcess?.column === 'function') {\n settings.postProcess.column(col);\n }\n }\n\n tbody.appendChild(row);\n }\n\n return tbody;\n }\n\n /**\n * Create table header elements.\n *\n * @return {Element}\n */\n function createTableHeaderElm() {\n const thead = document.createElement('thead');\n const row = document.createElement('tr');\n\n const titles = settings.columnTitles;\n\n let sortOrder = self.sortOrder;\n\n for (let i = 0; i < titles.length; i++) {\n const title = titles[i];\n\n const col = document.createElement('th');\n col.appendChild(document.createTextNode(title));\n col.setAttribute('title', title);\n\n row.appendChild(col);\n\n if (self.selected === i) {\n let className;\n\n // Determine column result order.\n if (!self.options.reverseSortDir) {\n if (sortOrder === 'asc' || !sortOrder) {\n className = 'arrow-up';\n sortOrder = 'desc';\n }\n else {\n className = 'arrow-up';\n sortOrder = 'asc';\n }\n }\n else {\n if (sortOrder === 'desc' || !sortOrder) {\n className = 'arrow-down';\n sortOrder = 'asc';\n }\n else {\n className = 'arrow-up';\n sortOrder = 'desc';\n }\n }\n\n // Highlight selected column.\n col.classList.add(className);\n }\n\n // Attach column sorting events.\n col.addEventListener('click', function(index) {\n self.sortOrder = (self.selected === i) ? sortOrder : 'asc';\n\n sortByColumn(index, sortOrder);\n\n self.selected = index;\n\n renderTable();\n }.bind(null, i), false);\n }\n\n thead.appendChild(row);\n\n return thead;\n }\n\n /**\n * Create checkbox element.\n *\n * @returns {Element}\n */\n function createCheckboxElm() {\n const input = document.createElement('input');\n input.setAttribute('type', 'checkbox');\n\n return input;\n }\n\n /**\n * Create select menu element.\n *\n * @returns {Element}\n */\n function createMenuElm(name) {\n\n // Create reusable elements.\n const select = document.createElement('select');\n select.classList.add(name);\n\n // Listen for select menu events.\n select.addEventListener('change', function() {\n\n // Execute callback.\n const callback = settings.menuOptions[this.value][1].callback;\n\n if (typeof callback === 'function') {\n callback(getCheckedAsObj());\n }\n\n this.value = 0;\n });\n\n // .. Options\n for (let i = 0; i < settings.menuOptions.length; i++) {\n const option = document.createElement('option');\n option.text = settings.menuOptions[i][0];\n option.value = i;\n\n select.appendChild(option);\n }\n\n // Post-process select menu HTML object.\n if (typeof settings.postProcess?.menu === 'function') {\n settings.postProcess.menu(select);\n }\n\n return select;\n }\n\n /**\n * Return selected row values as array of objects.\n *\n * @returns {Array<Object>}\n */\n function getCheckedAsObj() {\n const rows = container.querySelectorAll('tbody > tr');\n const objs = [];\n\n for (let i = 0; i < rows.length; i++) {\n const cols = rows[i].childNodes;\n\n // If the row checkbox is selected.\n if (cols[0].firstChild.checked) {\n const row = [];\n\n // Simulate an associative array.\n for (let j = 1; j < cols.length; j++) {\n row[j - 1] = cols[j].textContent;\n }\n\n objs.push(row);\n }\n }\n\n return objs;\n }\n\n /**\n * Select/Deselect (input checkbox and row highlight).\n */\n function toggleSelRows(rows, num) {\n let checked;\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n const input = row.querySelector('input[type=checkbox]');\n\n // Update all rows.\n if (!num) {\n if (i === 0) {\n checked = input.checked;\n continue;\n }\n\n if (checked) {\n row.classList.replace('check-off', 'check-on') || row.classList.add('check-on');\n input.checked = true;\n }\n else {\n row.classList.replace('check-on', 'check-off');\n input.checked = false;\n }\n }\n\n // Update selected row.\n else {\n if (i === 0) {\n continue;\n }\n\n if (input.checked === true) {\n row.classList.replace('check-off', 'check-on') || row.classList.add('check-on');\n input.checked = true;\n }\n else {\n row.classList.replace('check-on', 'check-off');\n input.checked = false;\n }\n }\n }\n }\n\n /**\n * Display results ordered by selected column.\n */\n function sortByColumn(num, order) {\n let sortByPattern = settings.sortByPattern;\n\n if (typeof sortByPattern !== 'function') {\n sortByPattern = function(val) {\n return val?.replace(/\\$|%|#/g, '');\n };\n }\n\n const reverse = (order === 'desc') ? -1 : 1;\n\n // Sort object by array index.\n settings.columnValues.sort(function(a, b) {\n const str1 = sortByPattern(a[num]);\n const str2 = sortByPattern(b[num]);\n\n if (isNaN(str1)) {\n return [reverse * cmpAny(str1, str2)] >\n [reverse * cmpAny(str2, str1)] ? -1 : 1;\n }\n\n return [reverse * cmpInt(str1, str2)];\n });\n }\n\n /**\n * Generic string comparison functions.\n */\n function cmpAny(a, b) {\n return (a > b) ? 1 : (a < b) ? -1 : 0;\n }\n\n function cmpInt(a, b) {\n return b - a;\n }\n\n return self;\n}\n\n/**\n * Set global/exportable instance, where supported.\n */\nwindow.tidyTable = function(container, settings, options) {\n return new TidyTable(container, settings, options);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = TidyTable;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";function TidyTable(i,a,n){void 0===n&&(n={});var l=this,c={enableCheckbox:!1,enableMenu:!1,reverseSortDir:!1,responsive:!1};function s(){var e,t=function(){var e=document.createElement("table");if(e.appendChild(function(){for(var e=document.createElement("thead"),o=document.createElement("tr"),r=a.columnTitles,i=l.sortOrder,t=function(t){var e,n=r[t],c=document.createElement("th");c.appendChild(document.createTextNode(n)),c.setAttribute("title",n),o.appendChild(c),l.selected===t&&(i=l.options.reverseSortDir?"desc"!==i&&i?(e="arrow-up","desc"):(e="arrow-down","asc"):"asc"!==i&&i?(e="arrow-up","asc"):(e="arrow-up","desc"),c.classList.add(e));c.addEventListener("click",function(e){l.sortOrder=l.selected===t?i:"asc",function(o,e){var r=a.sortByPattern;"function"!=typeof r&&(r=function(e){return null==e?void 0:e.replace(/\$|%|#/g,"")});var i="desc"===e?-1:1;a.columnValues.sort(function(e,t){var n=r(e[o]),c=r(t[o]);return isNaN(n)?[i*u(n,c)]>[i*u(c,n)]?-1:1:[i*function(e,t){return t-e}(n,c)]})}(e,i),l.selected=e,s()}.bind(null,t),!1)},n=0;n<r.length;n++)t(n);return e.appendChild(o),e}()),e.appendChild(function(){for(var e=document.createElement("tbody"),t=a.columnValues,n=0;n<t.length;n++){for(var c=document.createElement("tr"),o=0;o<t[n].length;o++){var r,i=t[n][o],l=document.createElement("td");l.appendChild(document.createTextNode(i)),l.setAttribute("title",i),c.appendChild(l),"function"==typeof(null==(r=a.postProcess)?void 0:r.column)&&a.postProcess.column(l)}e.appendChild(c)}return e}()),l.options.enableCheckbox)for(var t=e.querySelectorAll("tr"),n=0;n<t.length;n++){var c=r(),o=void 0;0===n?(o=document.createElement("th"),c.addEventListener("click",function(){d(t)})):(o=document.createElement("td"),c.addEventListener("click",function(e){d(t,e)}.bind(null,n),!1)),o.appendChild(c),t[n].insertBefore(o,t[n].firstChild)}return e}();"function"==typeof(null==(e=a.postProcess)?void 0:e.table)&&a.postProcess.table(t);var n=i.querySelector(".tidy-table table");n?n.parentNode.replaceChild(t,n):(l.options.enableMenu&&i.appendChild(function(e){var t,n=document.createElement("select");n.classList.add(e),n.addEventListener("change",function(){var e=a.menuOptions[this.value][1].callback;"function"==typeof e&&e(function(){for(var e=i.querySelectorAll("tbody > tr"),t=[],n=0;n<e.length;n++){var c=e[n].childNodes;if(c[0].firstChild.checked){for(var o=[],r=1;r<c.length;r++)o[r-1]=c[r].textContent;t.push(o)}}return t}()),this.value=0});for(var c=0;c<a.menuOptions.length;c++){var o=document.createElement("option");o.text=a.menuOptions[c][0],o.value=c,n.appendChild(o)}"function"==typeof(null==(t=a.postProcess)?void 0:t.menu)&&a.postProcess.menu(n);return n}("options")),i.classList.add("tidy-table"),i.appendChild(t)),c.responsive&&i.classList.add("responsive")}function r(){var e=document.createElement("input");return e.setAttribute("type","checkbox"),e}function d(e,t){for(var n,c=0;c<e.length;c++){var o=e[c],r=o.querySelector("input[type=checkbox]");if(t){if(0===c)continue;!0===r.checked?(o.classList.replace("check-off","check-on")||o.classList.add("check-on"),r.checked=!0):(o.classList.replace("check-on","check-off"),r.checked=!1)}else{if(0===c){n=r.checked;continue}n?(o.classList.replace("check-off","check-on")||o.classList.add("check-on"),r.checked=!0):(o.classList.replace("check-on","check-off"),r.checked=!1)}}}function u(e,t){return t<e?1:e<t?-1:0}!function(){l.options=Object.assign(c,n);var e=a.columnTitles,t=a.columnValues;if(!e.length||!t.length)throw new Error("Failed to initialize (missing settings)");s()}()}window.tidyTable=function(e,t,n){return new TidyTable(e,t,n)},"undefined"!=typeof module&&module.exports&&(module.exports=TidyTable);
1
+ "use strict";function TidyTable(i,a,n){void 0===n&&(n={});var l=this,c={enableCheckbox:!1,enableMenu:!1,reverseSortDir:!1,responsive:!1};function s(){var e,t=function(){var e=document.createElement("table");if(e.appendChild(function(){for(var e=document.createElement("thead"),o=document.createElement("tr"),r=a.columnTitles,i=l.sortOrder,t=function(t){var e,n=r[t],c=document.createElement("th");c.appendChild(document.createTextNode(n)),c.setAttribute("title",n),o.appendChild(c),l.selected===t&&(i=l.options.reverseSortDir?"desc"!==i&&i?(e="arrow-up","desc"):(e="arrow-down","asc"):"asc"!==i&&i?(e="arrow-up","asc"):(e="arrow-up","desc"),c.classList.add(e));c.addEventListener("click",function(e){l.sortOrder=l.selected===t?i:"asc",function(o,e){var r=a.sortByPattern;"function"!=typeof r&&(r=function(e){return null==e?void 0:e.replace(/\$|%|#/g,"")});var i="desc"===e?-1:1;a.columnValues.sort(function(e,t){var n=r(e[o]),c=r(t[o]);return isNaN(n)?[i*u(n,c)]>[i*u(c,n)]?-1:1:[i*function(e,t){return t-e}(n,c)]})}(e,i),l.selected=e,s()}.bind(null,t),!1)},n=0;n<r.length;n++)t(n);return e.appendChild(o),e}()),e.appendChild(function(){for(var e=document.createElement("tbody"),t=a.columnValues,n=0;n<t.length;n++){for(var c=document.createElement("tr"),o=0;o<t[n].length;o++){var r,i=t[n][o],l=document.createElement("td");l.appendChild(document.createTextNode(i)),l.setAttribute("title",i),c.appendChild(l),"function"==typeof(null==(r=a.postProcess)?void 0:r.column)&&a.postProcess.column(l)}e.appendChild(c)}return e}()),l.options.enableCheckbox)for(var t=e.querySelectorAll("tr"),n=0;n<t.length;n++){var c=r(),o=void 0;0===n?(o=document.createElement("th"),c.addEventListener("click",function(){d(t)})):(o=document.createElement("td"),c.addEventListener("click",function(e){d(t,e)}.bind(null,n),!1)),o.appendChild(c),t[n].insertBefore(o,t[n].firstChild)}return e}();"function"==typeof(null==(e=a.postProcess)?void 0:e.table)&&a.postProcess.table(t);var n=i.querySelector(".tidy-table table");n?n.parentNode.replaceChild(t,n):(l.options.enableMenu&&i.appendChild(function(e){var t,n=document.createElement("select");n.classList.add(e),n.addEventListener("change",function(){var e=a.menuOptions[this.value][1].callback;"function"==typeof e&&e(function(){for(var e=i.querySelectorAll("tbody > tr"),t=[],n=0;n<e.length;n++){var c=e[n].childNodes;if(c[0].firstChild.checked){for(var o=[],r=1;r<c.length;r++)o[r-1]=c[r].textContent;t.push(o)}}return t}()),this.value=0});for(var c=0;c<a.menuOptions.length;c++){var o=document.createElement("option");o.text=a.menuOptions[c][0],o.value=c,n.appendChild(o)}"function"==typeof(null==(t=a.postProcess)?void 0:t.menu)&&a.postProcess.menu(n);return n}("options")),i.classList.add("tidy-table"),i.appendChild(t)),c.responsive&&i.classList.add("responsive")}function r(){var e=document.createElement("input");return e.setAttribute("type","checkbox"),e}function d(e,t){for(var n,c=0;c<e.length;c++){var o=e[c],r=o.querySelector("input[type=checkbox]");if(t){if(0===c)continue;!0===r.checked?(o.classList.replace("check-off","check-on")||o.classList.add("check-on"),r.checked=!0):(o.classList.replace("check-on","check-off"),r.checked=!1)}else{if(0===c){n=r.checked;continue}n?(o.classList.replace("check-off","check-on")||o.classList.add("check-on"),r.checked=!0):(o.classList.replace("check-on","check-off"),r.checked=!1)}}}function u(e,t){return t<e?1:e<t?-1:0}return function(){l.options=Object.assign(c,n);var e=a.columnTitles,t=a.columnValues;if(!e.length||!t.length)throw new Error("Failed to initialize (missing settings)");s()}(),l}window.tidyTable=function(e,t,n){return new TidyTable(e,t,n)},"undefined"!=typeof module&&module.exports&&(module.exports=TidyTable);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tidy-table",
3
- "version": "4.0.2",
3
+ "version": "4.0.4",
4
4
  "description": "Create a HTML table that can be sorted, selected, and post-processed using a simple callback.",
5
5
  "main": "src/tidy-table.js",
6
6
  "scripts": {
@@ -9,6 +9,7 @@
9
9
  "sass": "sass src/tidy-table.scss dist/tidy-table.css",
10
10
  "minify-css": "node-minify --compressor clean-css --input 'dist/tidy-table.css' --output 'dist/tidy-table.min.css'",
11
11
  "minify-js": "node-minify --compressor uglify-js --input 'dist/tidy-table.js' --output 'dist/tidy-table.min.js'",
12
+ "prepack": "npm run build",
12
13
  "test": "wdio wdio.conf.js"
13
14
  },
14
15
  "repository": {
package/src/tidy-table.js CHANGED
@@ -388,6 +388,8 @@ function TidyTable(container, settings, options = {}) {
388
388
  function cmpInt(a, b) {
389
389
  return b - a;
390
390
  }
391
+
392
+ return self;
391
393
  }
392
394
 
393
395
  /**