tidy-table 4.0.4 → 4.0.6

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
@@ -26,6 +26,16 @@ The following items are **breaking changes** and not supported in prior releases
26
26
  - Fixed menu alignment in Chrome.
27
27
  - Expand table to 100% width.
28
28
 
29
+ ## [4.0.5] - 2023-08-07
30
+
31
+ NPM dependency security updates.
32
+
29
33
  ### Documentation
30
34
 
31
35
  - Added [React](https://github.com/nuxy/react-tidy-table)/[Vue](https://github.com/nuxy/vue-tidy-table) install examples.
36
+
37
+ ## [4.0.6] - 2023-10-06
38
+
39
+ ### Changed
40
+
41
+ - Replaced/removed deprecated dependencies
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # tidy-table [![npm version](https://badge.fury.io/js/tidy-table.svg)](https://badge.fury.io/js/tidy-table) [![](https://img.shields.io/npm/dm/tidy-table)](https://www.npmjs.com/package/tidy-table)
1
+ # Tidy Table [![npm version](https://badge.fury.io/js/tidy-table.svg)](https://badge.fury.io/js/tidy-table) [![](https://img.shields.io/npm/dm/tidy-table)](https://www.npmjs.com/package/tidy-table) [![Build Status](https://api.travis-ci.com/nuxy/tidy-table.svg?branch=master)](https://app.travis-ci.com/github/nuxy/tidy-table) [![Install size](https://packagephobia.com/badge?p=tidy-table)](https://packagephobia.com/result?p=tidy-table)
2
2
 
3
- Create a HTML table that can be sorted, selected, and post-processed using a simple callback.
3
+ Create a HTML table that can be sorted, selected, and post-processed.
4
4
 
5
5
  ![Preview](https://raw.githubusercontent.com/nuxy/tidy-table/master/package.gif)
6
6
 
@@ -14,7 +14,6 @@ Checkout the [demo](https://nuxy.github.io/tidy-table) for examples of use.
14
14
  - Easy to set-up and customize.
15
15
  - Customizable callback functions for post-processing selected results.
16
16
  - Post-process options for manipulating table/column/menu elements.
17
- - Fast and lightweight (JavaScript plug-in *only 4 kB)
18
17
 
19
18
  ## Dependencies
20
19
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * tidy-table
3
3
  * Create a HTML table that can be sorted, selected and
4
- * post-processed using a simple callback.
4
+ * post-processed.
5
5
  *
6
6
  * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)
7
7
  * Licensed under the MIT license:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * tidy-table
3
3
  * Create a HTML table that can be sorted, selected and
4
- * post-processed using a simple callback.
4
+ * post-processed.
5
5
  *
6
6
  * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)
7
7
  * Licensed under the MIT license:
@@ -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 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
+ {"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.\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,7 +1,7 @@
1
1
  /**
2
2
  * tidy-table
3
3
  * Create a HTML table that can be sorted, selected and
4
- * post-processed using a simple callback.
4
+ * post-processed.
5
5
  *
6
6
  * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)
7
7
  * Licensed under the MIT license:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tidy-table",
3
- "version": "4.0.4",
4
- "description": "Create a HTML table that can be sorted, selected, and post-processed using a simple callback.",
3
+ "version": "4.0.6",
4
+ "description": "Create a HTML table that can be sorted, selected, and post-processed.",
5
5
  "main": "src/tidy-table.js",
6
6
  "scripts": {
7
7
  "build": "babel src -s -D -d dist && npm run sass && npm run minify-css && npm run minify-js",
@@ -33,9 +33,9 @@
33
33
  "@babel/cli": "^7.18.6",
34
34
  "@babel/core": "^7.18.0",
35
35
  "@babel/eslint-parser": "^7.17.0",
36
- "@babel/plugin-proposal-class-properties": "^7.17.12",
37
36
  "@babel/plugin-proposal-decorators": "^7.18.6",
38
37
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
38
+ "@babel/plugin-transform-class-properties": "^7.22.5",
39
39
  "@babel/preset-env": "^7.18.0",
40
40
  "@babel/register": "^7.17.7",
41
41
  "@node-minify/clean-css": "^4.0.5",
@@ -44,7 +44,6 @@
44
44
  "@wdio/cli": "^8.8.8",
45
45
  "@wdio/local-runner": "^8.8.8",
46
46
  "@wdio/mocha-framework": "^8.8.7",
47
- "@wdio/selenium-standalone-service": "^8.8.7",
48
47
  "@wdio/spec-reporter": "^8.8.7",
49
48
  "eslint": "^8.18.0",
50
49
  "sass": "^1.53.0"
package/src/tidy-table.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * tidy-table
3
3
  * Create a HTML table that can be sorted, selected and
4
- * post-processed using a simple callback.
4
+ * post-processed.
5
5
  *
6
6
  * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)
7
7
  * Licensed under the MIT license:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * tidy-table
3
3
  * Create a HTML table that can be sorted, selected and
4
- * post-processed using a simple callback.
4
+ * post-processed.
5
5
  *
6
6
  * Copyright 2012-2023, Marc S. Brooks (https://mbrooks.info)
7
7
  * Licensed under the MIT license: