-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathselectable.table.min.js
1 lines (1 loc) · 2.08 KB
/
selectable.table.min.js
1
(()=>{function initSelectableTable(Selectable){Selectable.prototype.table=function(table){const v=this.version.split(".").map(s=>parseInt(s,10));if(v[0]<1&&v[1]<14)return console.warn("The table plugin requires Selectable v0.14.0 and above.");if(void 0===table&&(table=this.get(0).node.closest("table")),table){const columns=table.tHead.rows[0].cells,rows=Array.from(table.tBodies[0].rows),update=e=>{const td=e.target.closest("td"),th=e.target.closest("th");let counter=0;if(th&&"column"===th.dataset.selectable){for(let i=0;i<rows.length;i++)this.get(rows[i].cells[th.cellIndex]).selected&&counter++;th.selected=counter===rows.length}else if(td&&"row"===td.dataset.selectable){for(let i=1;i<columns.length;i++)this.get(td.parentNode.cells[i]).selected&&counter++;td.selected=counter===columns.length-1}else if(th&&"all"===th.dataset.selectable){const equal=this.getItems().length===this.getSelectedItems().length;th.selected=equal,table.querySelectorAll("[data-selectable='row']").forEach(el=>el.selected=equal),table.querySelectorAll("[data-selectable='column']").forEach(el=>el.selected=equal)}};table.addEventListener("click",e=>{const node=e.target;if("TH"===node.nodeName||"TD"===node.nodeName){let cells;if(e.preventDefault(),table){const data=node.dataset;if("selectable"in data){if("all"===node.dataset.selectable)cells=this.getItems();else if("TD"===node.nodeName&&"row"===data.selectable){const row=node.closest("tr");row&&(cells=Array.from(row.cells))}else"TH"===node.nodeName&&"column"===data.selectable&&(cells=Array.from(table.tBodies[0].rows).map(row=>row.cells[node.cellIndex]));node.selected?(this.deselect(cells),node.selected=!1):(this.select(cells),node.selected=!0),update(e)}}}}),this.on("end",update)}}}window.Selectable&&"function"==typeof window.Selectable?initSelectableTable(window.Selectable):function(root,factory){var plugin="initSelectableTable";"object"==typeof exports?module.exports=factory(plugin):"function"==typeof define&&define.amd?define([],factory):root[plugin]=factory(plugin)}("undefined"!=typeof global?global:this.window||this.global,function(){return initSelectableTable})})();