diff --git a/Changelog.md b/Changelog.md
index 86d3731..9d3a088 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,10 @@
### Changelog
+- **v2.0.1** - 3.8.2024
+
+ - Fixed getter (gave out non-existent property)
+ - Multiple initialization of plugin doesn't now break it
+
- **v2.0.0** - 2.8.2024
- Refactored folder structure
@@ -17,7 +22,7 @@
- **v1.3.0** - 14.3.2016
- Plugin structure is rewritten to support state getter. Now you can create a method to save table state to localstorage or similar.
- - Once again had to increase target size from 6kB to 8kB :((
+ - Once again had to increase target size from 6kB to 8kB :(
- **v1.2.7** - 8.3.2016
diff --git a/README.md b/README.md
index 889d781..2815273 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
![Test](https://github.com/mcfizh/slimtable/actions/workflows/test-workflow.yml/badge.svg)
-SlimTable is a plugin for jQuery, which creates sortable and pageable tables from existing table data. Plugin is quite lightweight, as it only takes 8kB when minified (3kB gzipped).
+SlimTable is a plugin for jQuery, which creates sortable and pageable tables from existing table data. Plugin is quite lightweight, as it only takes 9kB when minified (3kB gzipped).
Official homepage of slimtable: [https://slimtable.mcfish.org](https://slimtable.mcfish.org)
diff --git a/dist/js/slimtable.min.js b/dist/js/slimtable.min.js
index a6a70c6..7ea0447 100644
--- a/dist/js/slimtable.min.js
+++ b/dist/js/slimtable.min.js
@@ -3,7 +3,7 @@
*
* Licensed under MIT license.
*
- * @version 2.0.0
+ * @version 2.0.1
* @author Pekka Harjamäki
*/
-!function(o){var s={init:function(t,s){t.data("slimTableObj",this),this.settings=o.extend({tableData:null,dataUrl:null,itemsPerPage:10,ippList:[5,10,20],pagingStart:0,keepAttrs:[],sortList:[],colSettings:[],text1:"items/page",text2:"Loading...",sortStartCB:null,sortEndCB:null},s),this.state={showLoader:!1,cleanerDiv:o("
"),colSettings:[],tblData:[],sortList:0this.state.tblData.length?this.state.tblData.length:r,e=this.state.pagingStart;e"),l=0;l").html(t.orig),l=0;l").attr("unselectable","on").addClass("slimtable-sprites"),"asc"===t.sortDir?s.addClass("slimtable-sortasc"):"desc"===t.sortDir?s.addClass("slimtable-sortdesc"):s.addClass("slimtable-sortboth"),o(this).prepend(s).css({cursor:"pointer"}).on("click",{self:a},a.handleHeaderClick)):o(this).addClass("slimtable-unsortable")})},addPaging:function(t){let s,a,e;e=o(" ").addClass("slimtable-paging-select").on("change",{self:this},this.handleIppChange);for(let t of this.settings.ippList)a=o(" ").val(t).text(t),t===this.settings.itemsPerPage&&a.attr("selected","selected"),o(e).append(a);a=o("
").addClass("slimtable-paging-btnsdiv"),this.state.btnContainer=a,s=o("
").addClass("slimtable-paging-div").append(a),a=o("
").addClass("slimtable-paging-seldiv").append(e).append(this.settings.text1),o(s).append(a),a=o("
").addClass("slimtable-container-div").append(s),t.before(a),t.insertBefore(s)},doSorting:function(){let o=this;0"),colSettings:[],tblData:[],sortList:0this.state.tblData.length?this.state.tblData.length:s,l=this.state.pagingStart;l"),r=0;r").html(e.orig),r=0;r").attr("unselectable","on").addClass("slimtable-sprites"),"asc"===t.sortDir?s.addClass("slimtable-sortasc"):"desc"===t.sortDir?s.addClass("slimtable-sortdesc"):s.addClass("slimtable-sortboth"),o(this).prepend(s).css({cursor:"pointer"}).on("click",{self:e},e.handleHeaderClick)):o(this).addClass("slimtable-unsortable")})},addPaging:function(t){let s,e,a;a=o(" ").addClass("slimtable-paging-select").on("change",{self:this},this.handleIppChange);for(let t of this.settings.ippList)e=o(" ").val(t).text(t),t===this.settings.itemsPerPage&&e.attr("selected","selected"),o(a).append(e);e=o("
").addClass("slimtable-paging-btnsdiv"),this.state.btnContainer=e,s=o("
").addClass("slimtable-paging-div").append(e),e=o("
").addClass("slimtable-paging-seldiv").append(a).append(this.settings.text1),o(s).append(e),e=o("
").addClass("slimtable-container-div").append(s),t.before(e),t.insertBefore(s)},doSorting:function(){let o=this;0",
"homepage": "https://slimtable.mcfish.org",
"license": "MIT",
diff --git a/src/slimtable.js b/src/slimtable.js
index 41dd5f3..0945754 100644
--- a/src/slimtable.js
+++ b/src/slimtable.js
@@ -3,7 +3,7 @@
*
* Licensed under MIT license.
*
- * @version 2.0.0
+ * @version 2.0.1
* @author Pekka Harjamäki
*/
// eslint-disable-next-line no-extra-semi
@@ -11,15 +11,12 @@
"use strict";
- var SlimTable = {
+ const SlimTable = {
/* ******************************************************************* *
* Class initializer
* ******************************************************************* */
init: function($el, options) {
-
- $el.data("slimTableObj",this);
-
this.settings = $.extend({
tableData: null,
dataUrl: null,
@@ -114,7 +111,7 @@
},
returnRowType: function(data) {
- var patt_01 = /[^0-9]/g,
+ const patt_01 = /[^0-9]/g,
patt_02 = /^[0-9]+([.,][0-9]+)?$/,
patt_03 = /^([0-9]+([.,][0-9]+)?)\s*[%$€£e]?$/,
patt_04 = /^[0-9]{1,2}[.-/][0-9]{1,2}[.-/][0-9]{4}$/;
@@ -148,7 +145,7 @@
* Read data from ajax url / array / table
* ******************************************************************* */
readTable: function() {
- var l1, l2, matchArr, tObj, tRow, tAttr;
+ let l1, l2, matchArr, tObj, tRow, tAttr;
// Get data either from table, pre defined array or ajax url
if( this.settings.dataUrl && this.settings.dataUrl.length > 2 )
@@ -260,7 +257,7 @@
},
processData: function(data) {
- var l1, l2, tRow;
+ let l1, l2, tRow;
this.state.tblData = [];
@@ -277,7 +274,7 @@
* Create table body / header
* ******************************************************************* */
createTableHead: function() {
- var l1, t_item1, t_item2;
+ let l1, t_item1, t_item2;
for(l1=0; l1").
- attr("unselectable","on").
- addClass("slimtable-sprites");
+ const tObj = $(" ").attr("unselectable","on").addClass("slimtable-sprites");
if( tCfg.sortDir === "asc" )
{
@@ -387,10 +380,7 @@
tObj.addClass("slimtable-sortboth");
}
- $(this).
- prepend(tObj).
- css({ cursor: "pointer" }).
- on("click",{ self: self},self.handleHeaderClick);
+ $(this).prepend(tObj).css({ cursor: "pointer" }).on("click",{ self: self},self.handleHeaderClick);
} else {
$(this).addClass("slimtable-unsortable");
}
@@ -448,15 +438,12 @@
//
if(this.state.sortList.length>0)
-
this.state.tblData.sort(function(a,b) {
- var t1, ta, tb, l1,
- slistLength=self.state.sortList.length,
- same_item;
+ let ta, tb, l1, same_item;
+ const slistLength=self.state.sortList.length;
- for(l1=0; l1=pages)
- return;
-
- self.state.pagingStart = num * self.state.itemsPerPage;
- self.createTableBody();
+ if(num>=0 && num 0 &&
- this.state.colSettings.length !== this.state.tblData[0].data.length
+ this.state.colSettings.length !== this.state.tblData[0].data.length
);
},
@@ -586,19 +569,13 @@
/* ******************************************************************* *
* Status getters
* ******************************************************************* */
- getState: function($el) {
- const slimObj = $el.data("slimTableObj");
-
- if(!slimObj || !slimObj.state)
- return {};
-
- const state = slimObj.state;
+ getState: function() {
+ const state = this.state;
return {
- colNumber: state.colNumber,
- itemsPerPage: state.itemsPerPage,
- pagingStart: state.pagingStart,
colSettings: state.colSettings,
- sortList: state.sortList
+ sortList: state.sortList,
+ pagingStart: state.pagingStart,
+ itemsPerPage: state.itemsPerPage
};
}
@@ -608,13 +585,20 @@
* Plugin main
* ******************************************************************* */
$.fn.slimtable = function(options) {
- if( typeof(options) !== "undefined" && options === "getState" )
- return SlimTable.getState( $(this[0]) );
-
- return this.each(function(){
- const tbl = Object.create(SlimTable);
- tbl.init( $(this) , options);
- });
+ const key = "plugin_slimtable";
+
+ if(options === undefined || typeof options === "object") {
+ return this.each( function() {
+ if(!$.data(this, key)) {
+ const tbl = Object.create(SlimTable);
+ tbl.init($(this), options);
+ $.data(this, key, tbl);
+ }
+ });
+ } else if(typeof options === "string" && options === "getState") {
+ const instance = $(this).data(key);
+ return instance ? instance.getState() : {};
+ }
};
}(jQuery));
diff --git a/tests/unitTest2.js b/tests/unitTest2.js
index d4b1238..ae6360c 100644
--- a/tests/unitTest2.js
+++ b/tests/unitTest2.js
@@ -5,31 +5,28 @@ QUnit.test("basic test", (assert) => {
//
$.ajax({ url: "test.json", dataType: "json" })
.done(function(data) {
-
- $("#testTable").slimtable({
- tableData: data
- });
-
+ $("#testTable").slimtable({ tableData: data });
assert.ok(true, "Test resumed after ajax call");
- // Table should have 5 TH elements with attributes 'unselectable'='on'
+ // Table should have 8 TH elements with attributes 'unselectable'='on'
$("#testTable").find("thead").each(function(){
$(this).find("th").each(function(){
if( $(this).attr("unselectable") === "on" )
thfound++;
});
});
-
assert.equal(thfound, 8, "Proper number of th's found");
- // Table should have 10 Tr elements
+ // Table should have 9 Tr elements
$("#testTable").find("tbody").each(function(){
- $(this).find("tr").each(function(){
- trfound++;
- });
+ $(this).find("tr").each(function(){ trfound++; });
});
assert.equal(trfound, 9, "Proper number of tr's found");
+ // GetState command should return sane values
+ const state = $("#testTable").slimtable("getState");
+ assert.propContains(state, { itemsPerPage: 10, pagingStart: 0 });
+
done1();
})
.fail(function(param1,param2) {