datatables.net-select 1.7.1 → 2.0.1
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/js/dataTables.select.js +293 -94
- package/js/dataTables.select.min.js +2 -2
- package/js/dataTables.select.min.mjs +2 -2
- package/js/dataTables.select.mjs +292 -93
- package/package.json +2 -2
- package/types/types.d.ts +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables
|
|
1
|
+
/*! Select for DataTables 2.0.1
|
|
2
2
|
* © SpryMedia Ltd - datatables.net/license/mit
|
|
3
3
|
*/
|
|
4
|
-
import jQuery from"jquery";import DataTable from"datatables.net";let $=jQuery;function cellRange(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function disableMouseSelection(e){var t=e.settings()[0]._select.selector;$(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),$("body").off("click.dtSelect"+_safeId(e.table().node()))}function enableMouseSelection(a){var o,t=$(a.table().container()),l=a.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),window.getSelection&&(o=window.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=a.select.items();if(o){var s=window.getSelection();if((!s.anchorNode||$(s.anchorNode).closest("table")[0]===a.table().node())&&s!==o)return}var c,s=a.settings()[0],n=a.settings()[0].oClasses.sWrapper.trim().replace(/ +/g,".");$(e.target).closest("div."+n)[0]==a.table().container()&&(n=a.cell($(e.target).closest("td, th"))).any()&&(c=$.Event("user-select.dt"),eventTrigger(a,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,typeSelect(e,a,s,"row",t)):"column"===l?(t=n.index().column,typeSelect(e,a,s,"column",t)):"cell"===l&&(t=n.index(),typeSelect(e,a,s,"cell",t)),s._select_lastCell=c))}),$("body").on("click.dtSelect"+_safeId(a.table().node()),function(e){var t;!l._select.blurable||$(e.target).parents().filter(a.table().container()).length||0===$(e.target).parents("html").length||$(e.target).parents("div.DTE").length||(t=$.Event("select-blur.dt"),eventTrigger(a,t,[e.target,e]),t.isDefaultPrevented()||clear(l,!0))})}function eventTrigger(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),$(e.table().node()).trigger(t,l))}function info(s){var c,n,a,o,e=s.settings()[0];e._select.info&&e.aanFeatures.i&&"api"!==s.select.style()&&(c=s.rows({selected:!0}).flatten().length,n=s.columns({selected:!0}).flatten().length,a=s.cells({selected:!0}).flatten().length,o=function(e,t,l){e.append($('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},$.each(e.aanFeatures.i,function(e,t){t=$(t);var l=$('<span class="select-info"/>'),s=(o(l,"row",c),o(l,"column",n),o(l,"cell",a),t.children("span.select-info"));s.length&&s.remove(),""!==l.text()&&t.append(l)}))}function init(a){var c=new DataTable.Api(a);a._select_init=!0,a.aoRowCreatedCallback.push({fn:function(e,t,l){var s,c,n=a.aoData[l];for(n._select_selected&&$(e).addClass(a._select.className),s=0,c=a.aoColumns.length;s<c;s++)(a.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&$(n.anCells[s]).addClass(a._select.className)},sName:"select-deferRender"}),c.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===c.settings()[0]&&(l=c.rows({selected:!0}).ids(!0).filter(function(e){return void 0!==e}),s=c.cells({selected:!0}).eq(0).map(function(e){var t=c.row(e.row).id(!0);return t?{row:t,column:e.column}:void 0}).filter(function(e){return void 0!==e}),c.one("draw.dt.dtSelect",function(){c.rows(l).select(),s.any()&&s.each(function(e){c.cells(e.row,e.column).select()})}))}),c.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",function(){info(c),c.state.save()}),c.on("destroy.dtSelect",function(){$(c.rows({selected:!0}).nodes()).removeClass(c.settings()[0]._select.className),disableMouseSelection(c),c.off(".dtSelect"),$("body").off(".dtSelect"+_safeId(c.table().node()))})}function rowColumnRange(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=$.inArray(s,n),a=$.inArray(l,n);e[t+"s"]({selected:!0}).any()||-1!==s?(a<s&&(c=a,a=s,s=c),n.splice(a+1,n.length),n.splice(0,s)):n.splice($.inArray(l,n)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice($.inArray(l,n),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function clear(e,t){!t&&"single"!==e._select.style||((t=new DataTable.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function typeSelect(e,t,l,s,c){var n=t.select.style(),a=t.select.toggleable(),o=t[s](c,{selected:!0}).any();o&&!a||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!o):e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(a=t[s+"s"]({selected:!0}),o&&1===a.flatten().length?t[s](c).deselect():(a.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!o))}function _safeId(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}DataTable.select={},DataTable.select.version="1.7.0-dev",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,u,d,f=c.settings()[0];f._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(c.rows({selected:!0}).any()&&c.rows().deselect(),void 0!==l.select.rows&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),void 0!==l.select.columns&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=f.oInit.select,l=DataTable.defaults.select,l=void 0===s?l:s,s="row",i=o=!(a=!(n="api")),r="td, th",d=!(u="selected"),f._select={},!0===l?(n="os",d=!0):"string"==typeof l?(n=l,d=!0):$.isPlainObject(l)&&(void 0!==l.blurable&&(a=l.blurable),void 0!==l.toggleable&&(o=l.toggleable),void 0!==l.info&&(i=l.info),void 0!==l.items&&(s=l.items),d=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(r=l.selector),void 0!==l.className&&(u=l.className)),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(a),c.select.toggleable(o),c.select.info(i),f._select.className=u,$.fn.dataTable.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?$(e).parent().hasClass(t._select.className):"cell"===t._select.items&&$(e).hasClass(t._select.className)})},!d&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"))},$.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){DataTable.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var a=0,o=l.length;a<o;a++)s=e[i.prop][l[a]],(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[a]);return n})}),DataTable.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(void 0===c)return l;for(var a=0,o=l.length;a<o;a++)s=e.aoData[l[a].row],(!0!==c||!s._selected_cells||!0!==s._selected_cells[l[a].column])&&(!1!==c||s._selected_cells&&s._selected_cells[l[a].column])||n.push(l[a]);return n});var apiRegister=DataTable.Api.register,apiRegisterPlural=DataTable.Api.registerPlural;function i18n(t,l){return function(e){return e.i18n("buttons."+t,l)}}function namespacedEvents(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}function enabled(e,t){return!(-1===$.inArray("rows",t.limitTo)||!e.rows({selected:!0}).any())||(!(-1===$.inArray("columns",t.limitTo)||!e.columns({selected:!0}).any())||!(-1===$.inArray("cells",t.limitTo)||!e.cells({selected:!0}).any()))}apiRegister("select()",function(){return this.iterator("table",function(e){DataTable.select.init(new DataTable.Api(e))})}),apiRegister("select.blurable()",function(t){return void 0===t?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),apiRegister("select.toggleable()",function(t){return void 0===t?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),apiRegister("select.info()",function(t){return void 0===t?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),apiRegister("select.items()",function(t){return void 0===t?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,eventTrigger(new DataTable.Api(e),"selectItems",[t])})}),apiRegister("select.style()",function(l){return void 0===l?this.context[0]._select.style:this.iterator("table",function(e){e._select||DataTable.select.init(new DataTable.Api(e)),e._select_init||init(e),e._select.style=l;var t=new DataTable.Api(e);disableMouseSelection(t),"api"!==l&&enableMouseSelection(t),eventTrigger(new DataTable.Api(e),"selectStyle",[l])})}),apiRegister("select.selector()",function(t){return void 0===t?this.context[0]._select.selector:this.iterator("table",function(e){disableMouseSelection(new DataTable.Api(e)),e._select.selector=t,"api"!==e._select.style&&enableMouseSelection(new DataTable.Api(e))})}),apiRegisterPlural("rows().select()","row().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){clear(e),e.aoData[t]._select_selected=!0,$(e.aoData[t].nTr).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["row",l[t]],!0)}),this)}),apiRegister("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),apiRegisterPlural("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){clear(e),e.aoColumns[t]._select_selected=!0;t=new DataTable.Api(e).column(t);$(t.header()).addClass(e._select.className),$(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["column",l[t]],!0)}),this)}),apiRegister("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),apiRegisterPlural("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){clear(e);t=e.aoData[t];void 0===t._selected_cells&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&$(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),apiRegister("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),apiRegisterPlural("rows().deselect()","row().deselect()",function(){var l=this;return this.iterator("row",function(e,t){e.aoData[t]._select_selected=!1,e._select_lastCell=null,$(e.aoData[t].nTr).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["row",l[t]],!0)}),this}),apiRegisterPlural("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new DataTable.Api(s),l=t.column(e);$(l.header()).removeClass(s._select.className),$(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||$(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["column",l[t]],!0)}),this}),apiRegisterPlural("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];void 0!==t._selected_cells&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&$(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["cell",l[t]],!0)}),this});var _buttonNamespace=0;$.extend(DataTable.ext.buttons,{selected:{text:i18n("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(e,t,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,e.on(namespacedEvents(l),function(){s.enable(enabled(e,l))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:i18n("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:i18n("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:i18n("selectNone","Deselect all"),className:"buttons-select-none",action:function(){clear(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:i18n("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,s,t,l){var c;l._filter?(-1!==(c=DataTable.ext.search.indexOf(l._filter))&&(DataTable.ext.search.splice(c,1),l._filter=null),this.active(!1)):(l._filter=c=function(e,t,l){return e!==s.settings()[0]||e.aoData[l]._select_selected},DataTable.ext.search.push(c),this.active(!0)),s.draw()}}}),$.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();DataTable.ext.buttons["select"+t+"s"]={text:i18n("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),$.fn.DataTable.select=DataTable.select,$(document).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&DataTable.select.init(new DataTable.Api(t))});export default DataTable;
|
|
4
|
+
import jQuery from"jquery";import DataTable from"datatables.net";let $=jQuery;function cellRange(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function disableMouseSelection(e){var t=e.settings()[0]._select.selector;$(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),$("body").off("click.dtSelect"+_safeId(e.table().node()))}function enableMouseSelection(a){var o,t=$(a.table().container()),l=a.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),window.getSelection&&(o=window.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=a.select.items();if(o){var s=window.getSelection();if((!s.anchorNode||$(s.anchorNode).closest("table")[0]===a.table().node())&&s!==o)return}var c,s=a.settings()[0],n=a.table().container();$(e.target).closest("div.dt-container")[0]==n&&(n=a.cell($(e.target).closest("td, th"))).any()&&(c=$.Event("user-select.dt"),eventTrigger(a,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,typeSelect(e,a,s,"row",t)):"column"===l?(t=n.index().column,typeSelect(e,a,s,"column",t)):"cell"===l&&(t=n.index(),typeSelect(e,a,s,"cell",t)),s._select_lastCell=c))}),$("body").on("click.dtSelect"+_safeId(a.table().node()),function(e){var t;!l._select.blurable||$(e.target).parents().filter(a.table().container()).length||0===$(e.target).parents("html").length||$(e.target).parents("div.DTE").length||(t=$.Event("select-blur.dt"),eventTrigger(a,t,[e.target,e]),t.isDefaultPrevented())||clear(l,!0)})}function eventTrigger(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),$(e.table().node()).trigger(t,l))}function info(s,e){var t,l,c,n,a;"api"!==s.select.style()&&!1!==s.select.info()&&(a=s.rows({selected:!0}).flatten().length,t=s.columns({selected:!0}).flatten().length,l=s.cells({selected:!0}).flatten().length,c=function(e,t,l){e.append($('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},e=$(e),c(n=$('<span class="select-info"/>'),"row",a),c(n,"column",t),c(n,"cell",l),(a=e.children("span.select-info")).length&&a.remove(),""!==n.text())&&e.append(n)}function initCheckboxHeader(a){a.columns(".dt-select").every(function(){var n,e=this.header();$("input",e).length||(n=$("<input>").attr({class:"dt-select-checkbox",type:"checkbox","aria-label":a.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(e).on("change",function(){this.checked?a.rows({search:"applied"}).select():a.rows({selected:!0}).deselect()}).on("click",function(e){e.stopPropagation()}),a.on("draw select deselect",function(e,t,l){var s,c;"row"!==l&&l||(l=a.rows({selected:!0}).count(),s=a.rows({search:"applied",selected:!0}).count(),c=a.rows({search:"applied"}).count(),s&&s<=l&&s===c?n.prop("checked",!0).prop("indeterminate",!1):0===s&&0===l?n.prop("checked",!1).prop("indeterminate",!1):n.prop("checked",!1).prop("indeterminate",!0))}))})}function init(a){var c=new DataTable.Api(a);a._select_init=!0,a.aoRowCreatedCallback.push(function(e,t,l){var s,c,n=a.aoData[l];for(n._select_selected&&$(e).addClass(a._select.className).find("input.dt-select-checkbox").prop("checked",!0),s=0,c=a.aoColumns.length;s<c;s++)(a.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&$(n.anCells[s]).addClass(a._select.className)}),c.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===c.settings()[0]&&(l=c.rows({selected:!0}).ids(!0).filter(function(e){return void 0!==e}),s=c.cells({selected:!0}).eq(0).map(function(e){var t=c.row(e.row).id(!0);return t?{row:t,column:e.column}:void 0}).filter(function(e){return void 0!==e}),c.one("draw.dt.dtSelect",function(){c.rows(l).select(),s.any()&&s.each(function(e){c.cells(e.row,e.column).select()})}))}),c.on("info.dt",function(e,t,l){t._select.infoEls.includes(l)||t._select.infoEls.push(l),info(c,l)}),c.on("select.dtSelect.dt deselect.dtSelect.dt",function(){a._select.infoEls.forEach(function(e){info(c,e)}),c.state.save()}),c.on("destroy.dtSelect",function(){$(c.rows({selected:!0}).nodes()).removeClass(c.settings()[0]._select.className),disableMouseSelection(c),c.off(".dtSelect"),$("body").off(".dtSelect"+_safeId(c.table().node()))})}function rowColumnRange(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=n.indexOf(s),a=n.indexOf(l);e[t+"s"]({selected:!0}).any()||-1!==s?(a<s&&(c=a,a=s,s=c),n.splice(a+1,n.length),n.splice(0,s)):n.splice(n.indexOf(l)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice(n.indexOf(l),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function clear(e,t){!t&&"single"!==e._select.style||((t=new DataTable.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function typeSelect(e,t,l,s,c){var n=t.select.style(),a=t.select.toggleable(),o=t[s](c,{selected:!0}).any();o&&!a||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!o):e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(a=t[s+"s"]({selected:!0}),o&&1===a.flatten().length?t[s](c).deselect():(a.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!o))}function _safeId(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}DataTable.select={},DataTable.select.version="2.0.1",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,d,u,f,h=c.settings()[0];if(!DataTable.versionCheck("2"))throw"Warning: Select requires DataTables 2 or newer";h._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(c.rows({selected:!0}).any()&&c.rows().deselect(),void 0!==l.select.rows&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),void 0!==l.select.columns&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=h.oInit.select,l=DataTable.defaults.select,l=void 0===s?l:s,s="row",r="td, th",d="selected",f=!(u=i=o=!(a=!(n="api"))),h._select={infoEls:[]},!0===l?(n="os",f=!0):"string"==typeof l?(n=l,f=!0):$.isPlainObject(l)&&(void 0!==l.blurable&&(a=l.blurable),void 0!==l.toggleable&&(o=l.toggleable),void 0!==l.info&&(i=l.info),void 0!==l.items&&(s=l.items),f=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(r=l.selector),void 0!==l.className&&(d=l.className),void 0!==l.headerCheckbox)&&(u=l.headerCheckbox),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(a),c.select.toggleable(o),c.select.info(i),h._select.className=d,!f&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"),u&&(initCheckboxHeader(c),c.on("init",function(){initCheckboxHeader(c)})))},$.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){DataTable.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var a=0,o=l.length;a<o;a++)(s=e[i.prop][l[a]])&&(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[a]);return n})}),DataTable.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(void 0===c)return l;for(var a=0,o=l.length;a<o;a++)(s=e.aoData[l[a].row])&&(!0===c&&s._selected_cells&&!0===s._selected_cells[l[a].column]||!1===c&&(!s._selected_cells||!s._selected_cells[l[a].column]))&&n.push(l[a]);return n});var apiRegister=DataTable.Api.register,apiRegisterPlural=DataTable.Api.registerPlural;function i18n(t,l){return function(e){return e.i18n("buttons."+t,l)}}function namespacedEvents(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}function enabled(e,t){return!(-1===t.limitTo.indexOf("rows")||!e.rows({selected:!0}).any())||!(-1===t.limitTo.indexOf("columns")||!e.columns({selected:!0}).any())||!(-1===t.limitTo.indexOf("cells")||!e.cells({selected:!0}).any())}apiRegister("select()",function(){return this.iterator("table",function(e){DataTable.select.init(new DataTable.Api(e))})}),apiRegister("select.blurable()",function(t){return void 0===t?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),apiRegister("select.toggleable()",function(t){return void 0===t?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),apiRegister("select.info()",function(t){return void 0===t?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),apiRegister("select.items()",function(t){return void 0===t?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,eventTrigger(new DataTable.Api(e),"selectItems",[t])})}),apiRegister("select.style()",function(l){return void 0===l?this.context[0]._select.style:this.iterator("table",function(e){e._select||DataTable.select.init(new DataTable.Api(e)),e._select_init||init(e),e._select.style=l;var t=new DataTable.Api(e);disableMouseSelection(t),"api"!==l&&enableMouseSelection(t),eventTrigger(new DataTable.Api(e),"selectStyle",[l])})}),apiRegister("select.selector()",function(t){return void 0===t?this.context[0]._select.selector:this.iterator("table",function(e){disableMouseSelection(new DataTable.Api(e)),e._select.selector=t,"api"!==e._select.style&&enableMouseSelection(new DataTable.Api(e))})}),apiRegister("select.last()",function(e){var t=this.context[0];return e?(t._select_lastCell=e,this):t._select_lastCell}),apiRegisterPlural("rows().select()","row().select()",function(e){var a=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){clear(e);var l=e.aoData[t],s=e.aoColumns;$(l.nTr).addClass(e._select.className),l._select_selected=!0;for(var c=0;c<s.length;c++){var n=s[c];null===n.sType&&a.columns().types(),"select-checkbox"===n.sType&&((n=l.anCells)&&n[c]&&$("input.dt-select-checkbox",n[c]).prop("checked",!0),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){eventTrigger(a,"select",["row",a[t]],!0)}),this)}),apiRegister("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),apiRegisterPlural("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){clear(e),e.aoColumns[t]._select_selected=!0;t=new DataTable.Api(e).column(t);$(t.header()).addClass(e._select.className),$(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["column",l[t]],!0)}),this)}),apiRegister("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),apiRegisterPlural("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){clear(e);t=e.aoData[t];void 0===t._selected_cells&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&$(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),apiRegister("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),apiRegisterPlural("rows().deselect()","row().deselect()",function(){var a=this;return this.iterator("row",function(e,t){var l=e.aoData[t],s=e.aoColumns;$(l.nTr).removeClass(e._select.className),l._select_selected=!1,e._select_lastCell=null;for(var c=0;c<s.length;c++){var n=s[c];null===n.sType&&a.columns().types(),"select-checkbox"===n.sType&&((n=l.anCells)&&n[c]&&$("input.dt-select-checkbox",l.anCells[c]).prop("checked",!1),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){eventTrigger(a,"deselect",["row",a[t]],!0)}),this}),apiRegisterPlural("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new DataTable.Api(s),l=t.column(e);$(l.header()).removeClass(s._select.className),$(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||$(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["column",l[t]],!0)}),this}),apiRegisterPlural("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];void 0!==t._selected_cells&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&$(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["cell",l[t]],!0)}),this});var _buttonNamespace=0;$.extend(DataTable.ext.buttons,{selected:{text:i18n("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(e,t,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,e.on(namespacedEvents(l),function(){s.enable(enabled(e,l))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:i18n("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:i18n("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:i18n("selectNone","Deselect all"),className:"buttons-select-none",action:function(){clear(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:i18n("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,t){var s;t.search.fixed("dt-select")?(t.search.fixed("dt-select",null),this.active(!1)):(s=t.settings()[0].aoData,t.search.fixed("dt-select",function(e,t,l){return s[l]._select_selected}),this.active(!0)),t.draw()}}}),$.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();DataTable.ext.buttons["select"+t+"s"]={text:i18n("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),DataTable.type("select-checkbox",{className:"dt-select",detect:function(e){return"select-checkbox"===e&&e},order:{pre:function(e){return"X"===e?-1:0}}}),$.extend(!0,DataTable.defaults.oLanguage,{select:{aria:{rowCheckbox:"Select row"}}}),DataTable.render.select=function(e,t){var n=e?DataTable.util.get(e):null,a=t?DataTable.util.get(t):null;return function(e,t,l,s){var c=s.settings.aoData[s.row]._select_selected,s=s.settings.oLanguage.select.aria.rowCheckbox;return"display"===t?$("<input>").attr({"aria-label":s,class:"dt-select-checkbox",name:a?a(l):null,type:"checkbox",value:n?n(l):null,checked:c})[0]:"type"===t?"select-checkbox":"filter"!==t&&c?"X":""}},DataTable.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?$(e).parent().hasClass(t._select.className):"cell"===t._select.items&&$(e).hasClass(t._select.className)})},$.fn.DataTable.select=DataTable.select,$(document).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&DataTable.select.init(new DataTable.Api(t))});export default DataTable;
|
package/js/dataTables.select.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables
|
|
1
|
+
/*! Select for DataTables 2.0.1
|
|
2
2
|
* © SpryMedia Ltd - datatables.net/license/mit
|
|
3
3
|
*/
|
|
4
4
|
|
|
@@ -12,11 +12,15 @@ let $ = jQuery;
|
|
|
12
12
|
// Version information for debugger
|
|
13
13
|
DataTable.select = {};
|
|
14
14
|
|
|
15
|
-
DataTable.select.version = '
|
|
15
|
+
DataTable.select.version = '2.0.1';
|
|
16
16
|
|
|
17
17
|
DataTable.select.init = function (dt) {
|
|
18
18
|
var ctx = dt.settings()[0];
|
|
19
19
|
|
|
20
|
+
if (!DataTable.versionCheck('2')) {
|
|
21
|
+
throw 'Warning: Select requires DataTables 2 or newer';
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
if (ctx._select) {
|
|
21
25
|
return;
|
|
22
26
|
}
|
|
@@ -81,9 +85,12 @@ DataTable.select.init = function (dt) {
|
|
|
81
85
|
var info = true;
|
|
82
86
|
var selector = 'td, th';
|
|
83
87
|
var className = 'selected';
|
|
88
|
+
var headerCheckbox = true;
|
|
84
89
|
var setStyle = false;
|
|
85
90
|
|
|
86
|
-
ctx._select = {
|
|
91
|
+
ctx._select = {
|
|
92
|
+
infoEls: []
|
|
93
|
+
};
|
|
87
94
|
|
|
88
95
|
// Initialisation customisations
|
|
89
96
|
if (opts === true) {
|
|
@@ -127,6 +134,10 @@ DataTable.select.init = function (dt) {
|
|
|
127
134
|
if (opts.className !== undefined) {
|
|
128
135
|
className = opts.className;
|
|
129
136
|
}
|
|
137
|
+
|
|
138
|
+
if (opts.headerCheckbox !== undefined) {
|
|
139
|
+
headerCheckbox = opts.headerCheckbox;
|
|
140
|
+
}
|
|
130
141
|
}
|
|
131
142
|
|
|
132
143
|
dt.select.selector(selector);
|
|
@@ -137,27 +148,21 @@ DataTable.select.init = function (dt) {
|
|
|
137
148
|
dt.select.info(info);
|
|
138
149
|
ctx._select.className = className;
|
|
139
150
|
|
|
140
|
-
// Sort table based on selected rows. Requires Select Datatables extension
|
|
141
|
-
$.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {
|
|
142
|
-
return this.api()
|
|
143
|
-
.column(col, { order: 'index' })
|
|
144
|
-
.nodes()
|
|
145
|
-
.map(function (td) {
|
|
146
|
-
if (settings._select.items === 'row') {
|
|
147
|
-
return $(td).parent().hasClass(settings._select.className);
|
|
148
|
-
}
|
|
149
|
-
else if (settings._select.items === 'cell') {
|
|
150
|
-
return $(td).hasClass(settings._select.className);
|
|
151
|
-
}
|
|
152
|
-
return false;
|
|
153
|
-
});
|
|
154
|
-
};
|
|
155
|
-
|
|
156
151
|
// If the init options haven't enabled select, but there is a selectable
|
|
157
152
|
// class name, then enable
|
|
158
153
|
if (!setStyle && $(dt.table().node()).hasClass('selectable')) {
|
|
159
154
|
dt.select.style('os');
|
|
160
155
|
}
|
|
156
|
+
|
|
157
|
+
// Insert a checkbox into the header if needed - might need to wait
|
|
158
|
+
// for init complete, or it might already be done
|
|
159
|
+
if (headerCheckbox) {
|
|
160
|
+
initCheckboxHeader(dt);
|
|
161
|
+
|
|
162
|
+
dt.on('init', function () {
|
|
163
|
+
initCheckboxHeader(dt);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
161
166
|
};
|
|
162
167
|
|
|
163
168
|
/*
|
|
@@ -209,6 +214,7 @@ The `_select` object contains the following properties:
|
|
|
209
214
|
on the row
|
|
210
215
|
info:boolean - If the selection summary should be shown in the table
|
|
211
216
|
information elements
|
|
217
|
+
infoEls:element[] - List of HTML elements with info elements for a table
|
|
212
218
|
}
|
|
213
219
|
```
|
|
214
220
|
|
|
@@ -393,10 +399,10 @@ function enableMouseSelection(dt) {
|
|
|
393
399
|
}
|
|
394
400
|
|
|
395
401
|
var ctx = dt.settings()[0];
|
|
396
|
-
var
|
|
402
|
+
var container = dt.table().container();
|
|
397
403
|
|
|
398
404
|
// Ignore clicks inside a sub-table
|
|
399
|
-
if ($(e.target).closest('div.'
|
|
405
|
+
if ($(e.target).closest('div.dt-container')[0] != container) {
|
|
400
406
|
return;
|
|
401
407
|
}
|
|
402
408
|
|
|
@@ -494,14 +500,8 @@ function eventTrigger(api, type, args, any) {
|
|
|
494
500
|
* @param {DataTable.Api} api DataTable to update
|
|
495
501
|
* @private
|
|
496
502
|
*/
|
|
497
|
-
function info(api) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
if (!ctx._select.info || !ctx.aanFeatures.i) {
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
if (api.select.style() === 'api') {
|
|
503
|
+
function info(api, node) {
|
|
504
|
+
if (api.select.style() === 'api' || api.select.info() === false) {
|
|
505
505
|
return;
|
|
506
506
|
}
|
|
507
507
|
|
|
@@ -521,22 +521,81 @@ function info(api) {
|
|
|
521
521
|
);
|
|
522
522
|
};
|
|
523
523
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
el = $(el);
|
|
524
|
+
var el = $(node);
|
|
525
|
+
var output = $('<span class="select-info"/>');
|
|
527
526
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
add(output, 'cell', cells);
|
|
527
|
+
add(output, 'row', rows);
|
|
528
|
+
add(output, 'column', columns);
|
|
529
|
+
add(output, 'cell', cells);
|
|
532
530
|
|
|
533
|
-
|
|
534
|
-
if (exisiting.length) {
|
|
535
|
-
exisiting.remove();
|
|
536
|
-
}
|
|
531
|
+
var existing = el.children('span.select-info');
|
|
537
532
|
|
|
538
|
-
|
|
539
|
-
|
|
533
|
+
if (existing.length) {
|
|
534
|
+
existing.remove();
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
if (output.text() !== '') {
|
|
538
|
+
el.append(output);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Add a checkbox to the header for checkbox columns, allowing all rows to
|
|
544
|
+
* be selected, deselected or just to show the state.
|
|
545
|
+
*
|
|
546
|
+
* @param {*} dt API
|
|
547
|
+
*/
|
|
548
|
+
function initCheckboxHeader( dt ) {
|
|
549
|
+
// Find any checkbox column(s)
|
|
550
|
+
dt.columns('.dt-select').every(function () {
|
|
551
|
+
var header = this.header();
|
|
552
|
+
|
|
553
|
+
if (! $('input', header).length) {
|
|
554
|
+
// If no checkbox yet, insert one
|
|
555
|
+
var input = $('<input>')
|
|
556
|
+
.attr({
|
|
557
|
+
class: 'dt-select-checkbox',
|
|
558
|
+
type: 'checkbox',
|
|
559
|
+
'aria-label': dt.i18n('select.aria.headerCheckbox') || 'Select all rows'
|
|
560
|
+
})
|
|
561
|
+
.appendTo(header)
|
|
562
|
+
.on('change', function () {
|
|
563
|
+
if (this.checked) {
|
|
564
|
+
dt.rows({search: 'applied'}).select();
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
dt.rows({selected: true}).deselect();
|
|
568
|
+
}
|
|
569
|
+
})
|
|
570
|
+
.on('click', function (e) {
|
|
571
|
+
e.stopPropagation();
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
// Update the header checkbox's state when the selection in the
|
|
575
|
+
// table changes
|
|
576
|
+
dt.on('draw select deselect', function (e, pass, type) {
|
|
577
|
+
if (type === 'row' || ! type) {
|
|
578
|
+
var count = dt.rows({selected: true}).count();
|
|
579
|
+
var search = dt.rows({search: 'applied', selected: true}).count();
|
|
580
|
+
var available = dt.rows({search: 'applied'}).count();
|
|
581
|
+
|
|
582
|
+
if (search && search <= count && search === available) {
|
|
583
|
+
input
|
|
584
|
+
.prop('checked', true)
|
|
585
|
+
.prop('indeterminate', false);
|
|
586
|
+
}
|
|
587
|
+
else if (search === 0 && count === 0) {
|
|
588
|
+
input
|
|
589
|
+
.prop('checked', false)
|
|
590
|
+
.prop('indeterminate', false);
|
|
591
|
+
}
|
|
592
|
+
else {
|
|
593
|
+
input
|
|
594
|
+
.prop('checked', false)
|
|
595
|
+
.prop('indeterminate', true);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
});
|
|
540
599
|
}
|
|
541
600
|
});
|
|
542
601
|
}
|
|
@@ -562,14 +621,15 @@ function init(ctx) {
|
|
|
562
621
|
// This method of attaching to `aoRowCreatedCallback` is a hack until
|
|
563
622
|
// DataTables has proper events for row manipulation If you are reviewing
|
|
564
623
|
// this code to create your own plug-ins, please do not do this!
|
|
565
|
-
ctx.aoRowCreatedCallback.push({
|
|
566
|
-
fn: function (row, data, index) {
|
|
624
|
+
ctx.aoRowCreatedCallback.push(function (row, data, index) {
|
|
567
625
|
var i, ien;
|
|
568
626
|
var d = ctx.aoData[index];
|
|
569
627
|
|
|
570
628
|
// Row
|
|
571
629
|
if (d._select_selected) {
|
|
572
|
-
$(row)
|
|
630
|
+
$(row)
|
|
631
|
+
.addClass(ctx._select.className)
|
|
632
|
+
.find('input.dt-select-checkbox').prop('checked', true);
|
|
573
633
|
}
|
|
574
634
|
|
|
575
635
|
// Cells and columns - if separated out, we would need to do two
|
|
@@ -579,12 +639,11 @@ function init(ctx) {
|
|
|
579
639
|
ctx.aoColumns[i]._select_selected ||
|
|
580
640
|
(d._selected_cells && d._selected_cells[i])
|
|
581
641
|
) {
|
|
582
|
-
$(d.anCells[i]).addClass(ctx._select.className)
|
|
642
|
+
$(d.anCells[i]).addClass(ctx._select.className)
|
|
583
643
|
}
|
|
584
644
|
}
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
});
|
|
645
|
+
}
|
|
646
|
+
);
|
|
588
647
|
|
|
589
648
|
// On Ajax reload we want to reselect all rows which are currently selected,
|
|
590
649
|
// if there is an rowId (i.e. a unique value to identify each row with)
|
|
@@ -628,8 +687,20 @@ function init(ctx) {
|
|
|
628
687
|
});
|
|
629
688
|
|
|
630
689
|
// Update the table information element with selected item summary
|
|
631
|
-
api.on('
|
|
632
|
-
info
|
|
690
|
+
api.on('info.dt', function (e, ctx, node) {
|
|
691
|
+
// Store the info node for updating on select / deselect
|
|
692
|
+
if (!ctx._select.infoEls.includes(node)) {
|
|
693
|
+
ctx._select.infoEls.push(node);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
info(api, node);
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
api.on('select.dtSelect.dt deselect.dtSelect.dt', function () {
|
|
700
|
+
ctx._select.infoEls.forEach(function (el) {
|
|
701
|
+
info(api, el);
|
|
702
|
+
});
|
|
703
|
+
|
|
633
704
|
api.state.save();
|
|
634
705
|
});
|
|
635
706
|
|
|
@@ -657,13 +728,13 @@ function init(ctx) {
|
|
|
657
728
|
function rowColumnRange(dt, type, idx, last) {
|
|
658
729
|
// Add a range of rows from the last selected row to this one
|
|
659
730
|
var indexes = dt[type + 's']({ search: 'applied' }).indexes();
|
|
660
|
-
var idx1 =
|
|
661
|
-
var idx2 =
|
|
731
|
+
var idx1 = indexes.indexOf(last);
|
|
732
|
+
var idx2 = indexes.indexOf(idx);
|
|
662
733
|
|
|
663
734
|
if (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {
|
|
664
735
|
// select from top to here - slightly odd, but both Windows and Mac OS
|
|
665
736
|
// do this
|
|
666
|
-
indexes.splice(
|
|
737
|
+
indexes.splice(indexes.indexOf(idx) + 1, indexes.length);
|
|
667
738
|
}
|
|
668
739
|
else {
|
|
669
740
|
// reverse so we can shift click 'up' as well as down
|
|
@@ -683,7 +754,7 @@ function rowColumnRange(dt, type, idx, last) {
|
|
|
683
754
|
}
|
|
684
755
|
else {
|
|
685
756
|
// Deselect range - need to keep the clicked on row selected
|
|
686
|
-
indexes.splice(
|
|
757
|
+
indexes.splice(indexes.indexOf(idx), 1);
|
|
687
758
|
dt[type + 's'](indexes).deselect();
|
|
688
759
|
}
|
|
689
760
|
}
|
|
@@ -810,8 +881,10 @@ $.each(
|
|
|
810
881
|
data = settings[o.prop][indexes[i]];
|
|
811
882
|
|
|
812
883
|
if (
|
|
813
|
-
|
|
814
|
-
|
|
884
|
+
data && (
|
|
885
|
+
(selected === true && data._select_selected === true) ||
|
|
886
|
+
(selected === false && !data._select_selected)
|
|
887
|
+
)
|
|
815
888
|
) {
|
|
816
889
|
out.push(indexes[i]);
|
|
817
890
|
}
|
|
@@ -835,11 +908,13 @@ DataTable.ext.selector.cell.push(function (settings, opts, cells) {
|
|
|
835
908
|
rowData = settings.aoData[cells[i].row];
|
|
836
909
|
|
|
837
910
|
if (
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
(
|
|
911
|
+
rowData && (
|
|
912
|
+
(selected === true &&
|
|
913
|
+
rowData._selected_cells &&
|
|
914
|
+
rowData._selected_cells[cells[i].column] === true) ||
|
|
915
|
+
(selected === false &&
|
|
916
|
+
(!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))
|
|
917
|
+
)
|
|
843
918
|
) {
|
|
844
919
|
out.push(cells[i]);
|
|
845
920
|
}
|
|
@@ -954,6 +1029,17 @@ apiRegister('select.selector()', function (selector) {
|
|
|
954
1029
|
});
|
|
955
1030
|
});
|
|
956
1031
|
|
|
1032
|
+
apiRegister('select.last()', function (set) {
|
|
1033
|
+
let ctx = this.context[0];
|
|
1034
|
+
|
|
1035
|
+
if (set) {
|
|
1036
|
+
ctx._select_lastCell = set;
|
|
1037
|
+
return this;
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
return ctx._select_lastCell;
|
|
1041
|
+
});
|
|
1042
|
+
|
|
957
1043
|
apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
958
1044
|
var api = this;
|
|
959
1045
|
|
|
@@ -964,8 +1050,37 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
|
964
1050
|
this.iterator('row', function (ctx, idx) {
|
|
965
1051
|
clear(ctx);
|
|
966
1052
|
|
|
967
|
-
|
|
968
|
-
|
|
1053
|
+
// There is a good amount of knowledge of DataTables internals in
|
|
1054
|
+
// this function. It _could_ be done without that, but it would hurt
|
|
1055
|
+
// performance (or DT would need new APIs for this work)
|
|
1056
|
+
var dtData = ctx.aoData[idx];
|
|
1057
|
+
var dtColumns = ctx.aoColumns;
|
|
1058
|
+
|
|
1059
|
+
$(dtData.nTr).addClass(ctx._select.className);
|
|
1060
|
+
dtData._select_selected = true;
|
|
1061
|
+
|
|
1062
|
+
for (var i=0 ; i<dtColumns.length ; i++) {
|
|
1063
|
+
var col = dtColumns[i];
|
|
1064
|
+
|
|
1065
|
+
// Regenerate the column type if not present
|
|
1066
|
+
if (col.sType === null) {
|
|
1067
|
+
api.columns().types()
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
if (col.sType === 'select-checkbox') {
|
|
1071
|
+
var cells = dtData.anCells;
|
|
1072
|
+
|
|
1073
|
+
// Make sure the checkbox shows the right state
|
|
1074
|
+
if (cells && cells[i]) {
|
|
1075
|
+
$('input.dt-select-checkbox', cells[i]).prop('checked', true);
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
// Invalidate the sort data for this column, if not already done
|
|
1079
|
+
if (dtData._aSortData !== null) {
|
|
1080
|
+
dtData._aSortData[i] = null;
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
969
1084
|
});
|
|
970
1085
|
|
|
971
1086
|
this.iterator('table', function (ctx, i) {
|
|
@@ -1070,9 +1185,36 @@ apiRegisterPlural('rows().deselect()', 'row().deselect()', function () {
|
|
|
1070
1185
|
var api = this;
|
|
1071
1186
|
|
|
1072
1187
|
this.iterator('row', function (ctx, idx) {
|
|
1073
|
-
|
|
1188
|
+
// Like the select action, this has a lot of knowledge about DT internally
|
|
1189
|
+
var dtData = ctx.aoData[idx];
|
|
1190
|
+
var dtColumns = ctx.aoColumns;
|
|
1191
|
+
|
|
1192
|
+
$(dtData.nTr).removeClass(ctx._select.className);
|
|
1193
|
+
dtData._select_selected = false;
|
|
1074
1194
|
ctx._select_lastCell = null;
|
|
1075
|
-
|
|
1195
|
+
|
|
1196
|
+
for (var i=0 ; i<dtColumns.length ; i++) {
|
|
1197
|
+
var col = dtColumns[i];
|
|
1198
|
+
|
|
1199
|
+
// Regenerate the column type if not present
|
|
1200
|
+
if (col.sType === null) {
|
|
1201
|
+
api.columns().types()
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
if (col.sType === 'select-checkbox') {
|
|
1205
|
+
var cells = dtData.anCells;
|
|
1206
|
+
|
|
1207
|
+
// Make sure the checkbox shows the right state
|
|
1208
|
+
if (cells && cells[i]) {
|
|
1209
|
+
$('input.dt-select-checkbox', dtData.anCells[i]).prop('checked', false);
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
// Invalidate the sort data for this column, if not already done
|
|
1213
|
+
if (dtData._aSortData !== null) {
|
|
1214
|
+
dtData._aSortData[i] = null;
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1076
1218
|
});
|
|
1077
1219
|
|
|
1078
1220
|
this.iterator('table', function (ctx, i) {
|
|
@@ -1158,15 +1300,15 @@ function namespacedEvents(config) {
|
|
|
1158
1300
|
}
|
|
1159
1301
|
|
|
1160
1302
|
function enabled(dt, config) {
|
|
1161
|
-
if (
|
|
1303
|
+
if (config.limitTo.indexOf('rows') !== -1 && dt.rows({ selected: true }).any()) {
|
|
1162
1304
|
return true;
|
|
1163
1305
|
}
|
|
1164
1306
|
|
|
1165
|
-
if (
|
|
1307
|
+
if (config.limitTo.indexOf('columns') !== -1 && dt.columns({ selected: true }).any()) {
|
|
1166
1308
|
return true;
|
|
1167
1309
|
}
|
|
1168
1310
|
|
|
1169
|
-
if (
|
|
1311
|
+
if (config.limitTo.indexOf('cells') !== -1 && dt.cells({ selected: true }).any()) {
|
|
1170
1312
|
return true;
|
|
1171
1313
|
}
|
|
1172
1314
|
|
|
@@ -1266,34 +1408,23 @@ $.extend(DataTable.ext.buttons, {
|
|
|
1266
1408
|
showSelected: {
|
|
1267
1409
|
text: i18n('showSelected', 'Show only selected'),
|
|
1268
1410
|
className: 'buttons-show-selected',
|
|
1269
|
-
action: function (e, dt
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
if (conf._filter) {
|
|
1274
|
-
var idx = DataTable.ext.search.indexOf(conf._filter);
|
|
1275
|
-
|
|
1276
|
-
if (idx !== -1) {
|
|
1277
|
-
DataTable.ext.search.splice(idx, 1);
|
|
1278
|
-
conf._filter = null;
|
|
1279
|
-
}
|
|
1411
|
+
action: function (e, dt) {
|
|
1412
|
+
if (dt.search.fixed('dt-select')) {
|
|
1413
|
+
// Remove existing function
|
|
1414
|
+
dt.search.fixed('dt-select', null);
|
|
1280
1415
|
|
|
1281
1416
|
this.active(false);
|
|
1282
1417
|
}
|
|
1283
1418
|
else {
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
};
|
|
1294
|
-
|
|
1295
|
-
conf._filter = fn;
|
|
1296
|
-
DataTable.ext.search.push(fn);
|
|
1419
|
+
// Use a fixed filtering function to match on selected rows
|
|
1420
|
+
// This needs to reference the internal aoData since that is
|
|
1421
|
+
// where Select stores its reference for the selected state
|
|
1422
|
+
var dataSrc = dt.settings()[0].aoData;
|
|
1423
|
+
|
|
1424
|
+
dt.search.fixed('dt-select', function (text, data, idx) {
|
|
1425
|
+
// _select_selected is set by Select on the data object for the row
|
|
1426
|
+
return dataSrc[idx]._select_selected;
|
|
1427
|
+
});
|
|
1297
1428
|
|
|
1298
1429
|
this.active(true);
|
|
1299
1430
|
}
|
|
@@ -1322,6 +1453,74 @@ $.each(['Row', 'Column', 'Cell'], function (i, item) {
|
|
|
1322
1453
|
};
|
|
1323
1454
|
});
|
|
1324
1455
|
|
|
1456
|
+
DataTable.type('select-checkbox', {
|
|
1457
|
+
className: 'dt-select',
|
|
1458
|
+
detect: function (data) {
|
|
1459
|
+
// Rendering function will tell us if it is a checkbox type
|
|
1460
|
+
return data === 'select-checkbox' ? data : false;
|
|
1461
|
+
},
|
|
1462
|
+
order: {
|
|
1463
|
+
pre: function (d) {
|
|
1464
|
+
return d === 'X' ? -1 : 0;
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
});
|
|
1468
|
+
|
|
1469
|
+
$.extend(true, DataTable.defaults.oLanguage, {
|
|
1470
|
+
select: {
|
|
1471
|
+
aria: {
|
|
1472
|
+
rowCheckbox: 'Select row'
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
});
|
|
1476
|
+
|
|
1477
|
+
DataTable.render.select = function (valueProp, nameProp) {
|
|
1478
|
+
var valueFn = valueProp ? DataTable.util.get(valueProp) : null;
|
|
1479
|
+
var nameFn = nameProp ? DataTable.util.get(nameProp) : null;
|
|
1480
|
+
|
|
1481
|
+
return function (data, type, row, meta) {
|
|
1482
|
+
var dtRow = meta.settings.aoData[meta.row];
|
|
1483
|
+
var selected = dtRow._select_selected;
|
|
1484
|
+
var ariaLabel = meta.settings.oLanguage.select.aria.rowCheckbox;
|
|
1485
|
+
|
|
1486
|
+
if (type === 'display') {
|
|
1487
|
+
return $('<input>')
|
|
1488
|
+
.attr({
|
|
1489
|
+
'aria-label': ariaLabel,
|
|
1490
|
+
class: 'dt-select-checkbox',
|
|
1491
|
+
name: nameFn ? nameFn(row) : null,
|
|
1492
|
+
type: 'checkbox',
|
|
1493
|
+
value: valueFn ? valueFn(row) : null,
|
|
1494
|
+
checked: selected
|
|
1495
|
+
})[0];
|
|
1496
|
+
}
|
|
1497
|
+
else if (type === 'type') {
|
|
1498
|
+
return 'select-checkbox';
|
|
1499
|
+
}
|
|
1500
|
+
else if (type === 'filter') {
|
|
1501
|
+
return '';
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
return selected ? 'X' : '';
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
// Legacy checkbox ordering
|
|
1509
|
+
DataTable.ext.order['select-checkbox'] = function (settings, col) {
|
|
1510
|
+
return this.api()
|
|
1511
|
+
.column(col, { order: 'index' })
|
|
1512
|
+
.nodes()
|
|
1513
|
+
.map(function (td) {
|
|
1514
|
+
if (settings._select.items === 'row') {
|
|
1515
|
+
return $(td).parent().hasClass(settings._select.className);
|
|
1516
|
+
}
|
|
1517
|
+
else if (settings._select.items === 'cell') {
|
|
1518
|
+
return $(td).hasClass(settings._select.className);
|
|
1519
|
+
}
|
|
1520
|
+
return false;
|
|
1521
|
+
});
|
|
1522
|
+
};
|
|
1523
|
+
|
|
1325
1524
|
$.fn.DataTable.select = DataTable.select;
|
|
1326
1525
|
|
|
1327
1526
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"main": "js/dataTables.select.js",
|
|
5
5
|
"module": "js/dataTables.select.mjs",
|
|
6
6
|
"types": "./types/types.d.ts",
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "2.0.1",
|
|
8
8
|
"files": [
|
|
9
9
|
"js/**/*.js",
|
|
10
10
|
"js/**/*.mjs",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"sort"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"datatables.net": "^
|
|
23
|
+
"datatables.net": "^2",
|
|
24
24
|
"jquery": ">=1.7"
|
|
25
25
|
},
|
|
26
26
|
"moduleType": [
|