-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathjquery.tableSelect.min.js
9 lines (8 loc) · 4.13 KB
/
jquery.tableSelect.min.js
1
2
3
4
5
6
7
8
9
/*!
* jQuery tableSelect plugin 1.4.0
*
* Copyright (c) 2018 Kjel Delaey
* Released under the MIT license
* https://raw.github.com/trimentor/jquery-tableSelect/master/LICENSE
*/
!function(i){i.extend(i.fn,{tableSelect:function(e){return new i.tableSelector(e,this)}}),i.extend(i.fn,{tableSelectOne:function(e){var t=i.extend({multiSelect:!1},e);return new i.tableSelector(t,this)}}),i.extend(i.fn,{tableSelectMany:function(e){var t=i.extend({multiSelect:!0},e);return new i.tableSelector(t,this)}}),i.tableSelector=function(e,t){this.options=i.extend({},i.tableSelector.defaults,e),this.currentTable=t,this.init()},i.extend(i.tableSelector,{defaults:{tableClass:"tableselect",rowSelectClass:"selected",multiSelect:!1},prototype:{init:function(){this.selections=[],this.listeners=this.options.listeners||{},this.collectRows(),this.initRowEvents(),i(this.currentTable).addClass(this.options.tableClass)},allSelected:function(){return this.selections.length===this.rows.length-this.getDisabled()},getDisabled:function(){var s=0;return i(this.rows).each(function(e,t){this.parentThis.isDisabled(t)&&s++}),s},getSelections:function(){return this.selections},getFocusedRow:function(){return this.rows[this.lastActiveRow]},isSelected:function(e){for(var t=!1,s=0;s<this.selections.length;s++)if(this.selections[s]==e){t=!0;break}return t},collectRows:function(){var e=this;this.rows=this.currentTable[0].tBodies[0].rows,i(this.rows).each(function(){this.parentThis=e})},isDisabled:function(e){var t=i(e).children()[0];return i(t).children()[0].disabled},initRowEvents:function(){var e=this;i(this.rows).each(function(){i(this).bind("click",e.handleMouseDown),i(this).bind("rowselect",e.rowSelectClass),i(this).bind("rowdeselect",e.rowSelectClass),e.initListeners(e,this)})},initListeners:function(e,t){if(e.listeners){var s=e.listeners;s.beforerowselect&&i(t).bind("beforerowselect",s.beforerowselect),s.afterrowselect&&i(t).bind("afterrowselect",s.afterrowselect),s.beforerowdeselect&&i(t).bind("beforerowdeselect",s.beforerowdeselect),s.afterrowdeselect&&i(t).bind("afterrowdeselect",s.afterrowdeselect)}},handleMouseDown:function(e){var t=this.parentThis;t.storeEventTarget(e,this),t.options.multiSelect?t.handleKeyDown(e,this):t.handleSingleSelect(this),t.resetEventTarget(this)},handleKeyDown:function(e,t){var s=t.sectionRowIndex;e.shiftKey?(void 0===this.lastActiveRow&&this.focusRow(s),this.lockedRow=this.lastActiveRow,e.ctrlKey?this.selectRange(this.lastActiveRow,s,!0):(this.selectRange(this.lockedRow,s,!1),this.focusRow(this.lockedRow))):this.handleSingleSelect(t)},storeEventTarget:function(e,t){var s=e.target&&e.target.nodeName;t.target=s?s.toLowerCase():null},resetEventTarget:function(e){e.target=void 0},handleSingleSelect:function(e){var t=e.sectionRowIndex;this.isSelected(e)?this.deselectRow(t):this.selectRow(t,this.options.multiSelect)},selectRow:function(e,t){var s=this.rows[e];!1===t&&this.clearSelections(),s&&!1===this.isSelected(s)&&!1!==i(s).trigger("beforerowselect")&&(!0!==s.preventChange&&!0!==this.isDisabled(s)&&(this.selections.push(s),this.focusRow(e),i(s).trigger("rowselect"),i(s).trigger("afterrowselect"),i(document).trigger("rowchange",this)),s.preventChange=void 0)},deselectRow:function(e){var t=this.rows[e];if(t&&this.isSelected(t)&&!1!==i(t).trigger("beforerowdeselect")){if(!0!==t.preventChange){var s=i.inArray(t,this.selections);-1!=s&&(this.selections.splice(s,1),this.focusRow(e),i(t).trigger("rowdeselect"),i(t).trigger("afterrowdeselect"),i(document).trigger("rowchange",this))}t.preventChange=void 0}},focusRow:function(e){this.lastActiveRow=e},rowSelectClass:function(e){switch(e.type){case"rowselect":i(this).addClass(this.parentThis.options.rowSelectClass);break;case"rowdeselect":i(this).removeClass(this.parentThis.options.rowSelectClass)}},selectAll:function(){this.options.multiSelect&&(this.clearSelections(),i(this.rows).each(function(){this.parentThis.selectRow(this.sectionRowIndex,!0)}))},clearSelections:function(){i(this.rows).each(function(){this.parentThis.deselectRow(this.sectionRowIndex)})},selectRange:function(e,t,s){var i;if(!1===s&&this.clearSelections(),e<=t)for(i=e;i<=t;i++)this.selectRow(i,!0);else for(i=e;t<=i;i--)this.selectRow(i,!0)}}})}(jQuery);