initial work on check-all-checkbox

This commit is contained in:
Felix Hamann 2019-02-20 22:06:30 +01:00
parent d9b11bc9a4
commit 278c2c2a82
4 changed files with 74 additions and 2 deletions

View File

@ -1020,6 +1020,7 @@ siteLayout' headingOverride widget = do
addScript $ StaticR js_utils_alerts_js
addScript $ StaticR js_utils_asidenav_js
addScript $ StaticR js_utils_asyncTable_js
addScript $ StaticR js_utils_checkAll_js
addScript $ StaticR js_utils_form_js
addScript $ StaticR js_utils_inputs_js
addScript $ StaticR js_utils_setup_js

View File

@ -18,7 +18,7 @@
var scrollTable;
function init() {
var table = wrapper.querySelector('#' + tableIdent);
var table = wrapper.querySelector('#' + tableIdent);
if (!table) {
return;

View File

@ -0,0 +1,70 @@
(function collonadeClosure() {
'use strict';
window.utils = window.utils || {};
var JS_INITIALIZED_CLASS = 'js-initialized';
var CHECKBOX_SELECTOR = '.checkbox';
window.utils.checkAll = function(wrapper, options) {
if (!wrapper || wrapper.classList.contains(JS_INITIALIZED_CLASS)) {
return false;
}
options = options || {};
var columns = [];
function init() {
columns = gatherColumns(wrapper);
var checkboxColumn = findCheckboxColumn(columns);
if (checkboxColumn) {
setup(checkboxColumn);
}
}
function gatherColumns(table) {
var rows = Array.from(table.querySelectorAll('tr'));
var cols = [];
rows.forEach(function(tr) {
var cells = Array.from(tr.querySelectorAll('td'));
cells.forEach(function(cell, iCell) {
if (!cols[iCell]) {
cols[iCell] = [];
}
cols[iCell].push(cell);
});
});
return cols;
}
function findCheckboxColumn(cols) {
var checkboxColumn = null;
cols.forEach(function(col, i) {
if (isCheckboxColumn(col)) {
checkboxColumn = i;
}
});
return checkboxColumn;
}
function isCheckboxColumn(col) {
var onlyCheckboxes = true;
col.forEach(function(cell) {
console.log('checking', cell);
if (onlyCheckboxes && !cell.querySelector(CHECKBOX_SELECTOR)) {
onlyCheckboxes = false;
}
});
return onlyCheckboxes;
}
function setup(column) {
console.log('setting up column', column);
}
init();
};
})();

View File

@ -1,10 +1,11 @@
document.addEventListener('DOMContentLoaded', function() {
var dbtIdent = #{String $ dbtIdent};
var headerDBTableShortcircuit = #{String (toPathPiece HeaderDBTableShortcircuit)};
var selector = '#' + dbtIdent + '-table-wrapper:not(.js-initialized)';
var selector = '#' + dbtIdent + '-table-wrapper';
var wrapper = document.querySelector(selector);
if (wrapper) {
window.utils.setup('asyncTable', wrapper, { headerDBTableShortcircuit, dbtIdent });
window.utils.setup('checkAll', wrapper);
}
});