From 3d25ad7de4fdbb3eba2cde2a62422e6be5d79a0a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 25 Aug 2026 22:57:22 +0000
Subject: [PATCH] =It's been a minute. I went through the Routes and associated Managers and ensured they played together well. Reworked the Cache.php, and I think I caught all the references. Moving away from JVBase() root class, to individuall classes that are Instanced. Double checked for the ABSPATH check in every file, and added index.php to every directory that didn't already have it. Also still working on the MenuBlock to work with WooCommerce for now for Northeh
---
assets/js/concise/CRUD.js | 82 +++++++++++++++++++---------------------
1 files changed, 39 insertions(+), 43 deletions(-)
diff --git a/assets/js/concise/CRUD.js b/assets/js/concise/CRUD.js
index 599047b..03ebd98 100644
--- a/assets/js/concise/CRUD.js
+++ b/assets/js/concise/CRUD.js
@@ -131,17 +131,17 @@
setup({ el, refs, manyRefs, data }) {
baseSetup(el, refs, data);
- manyRefs?.inputs?.forEach(el => {
- let wrapper = el.closest('[data-field]');
- window.prefixInput(el, `${data.id}-`, wrapper);
- });
+ data.prefix = `${data.id}-`;
- manyRefs?.status?.forEach(el => {
- if (el.value === data.status) {
- el.checked = true;
- }
- });
+ window.jvbPopulate.populate(el, data);
+ //
+ // manyRefs?.status?.forEach(el => {
+ // if (el.value === data.status) {
+ // el.checked = true;
+ // }
+ // });
+ //
if (crud.isTimeline) {
if (refs.sharedRow) {
refs.sharedRow.querySelectorAll('input,select,textarea').forEach(input => {
@@ -287,18 +287,20 @@
month: 'dialog.date-range .month-select',
}
},
+ wrap: '#item-wrap',
grid: `.${this.content}.item-grid`,
table: {
nav: '#vertical',
form: 'form.table',
table: 'form.table table',
- body: 'form.table body',
+ body: 'form.table tbody',
head: 'form.table thead',
foot: 'form.table tfoot',
selectedColumns: '.all-filters .multi-select',
columns: 'thead th',
},
bulk: {
+ hasEdit: '.bulk-action-select [value="edit"]',
action: '.bulk-action-select',
count: '.bulk-controls .selected-count',
control: '.bulk-controls .bulk-actions',
@@ -479,12 +481,12 @@
span: '.bulk-select label span'
},
wrapper: {
- wrapper: '.wrap'
+ wrapper: this.selectors.wrap,
},
item: {
idAttribute: 'itemId'
}
- });
+ }, this.ui.views.table !== null);
this.selectionHandler.subscribe((event, data) => {
this.selected = new Set([...data.selectedItems].map(id => parseInt(id)));
this.ui.bulk.control.hidden = this.selected.size === 0;
@@ -619,6 +621,10 @@
//current view (defaults to grid)
let defaultView = this.container.dataset.view??'grid'
this.view = this.cache.get('view')??defaultView;
+
+ if (!this.view) {
+ this.view = defaultView;
+ }
if (this.view !== defaultView) {
this.ui.views[this.view].checked = true;
}
@@ -655,6 +661,7 @@
if (this.ui.table.nav && tabDirection === 'vertical') {
this.ui.table.nav.checked = true;
}
+ this.tabNav = tabDirection !== 'horizontal';
@@ -772,6 +779,9 @@
const isBulkAction = e.target.matches('.bulk-action-select');
const isView = e.target.matches('[data-view]');
+ if (this.view === 'table') {
+ this.handleTableChange(e);
+ }
if (!inItem && !isFilter && !isBulkAction && !isView) return;
if (!this.isPopulating && inItem && !e.target.closest('[data-ignore], .select-item')) {
@@ -795,19 +805,21 @@
return;
}
- // Table-specific handlers
- if (this.view === 'table') {
- if (e.target.matches('details.multi-select')) {
- this.toggleColumn(e.target.id, e.target.checked);
- return;
- }
+ }
+ handleTableChange(e) {
+ // Table-specific handlers
+ if (this.view === 'table') {
+ if (e.target.matches('details.multi-select')) {
+ this.toggleColumn(e.target.id, e.target.checked);
+ return;
+ }
- if (e.target.matches(this.selectors.table.nav)) {
- this.tabNav = e.target.checked;
- this.cache.set('tabNav', e.target.checked ? 'vertical' : 'horizontal');
+ if (e.target.matches(this.selectors.table.nav)) {
+ this.tabNav = e.target.checked;
+ this.cache.set('tabNav', e.target.checked ? 'vertical' : 'horizontal');
+ }
}
}
- }
handleBulkAction(bulkAction) {
if (bulkAction.value.startsWith('tax-')) {
const selectedOption = bulkAction.options[bulkAction.selectedIndex];
@@ -1218,7 +1230,7 @@
// For regular tables, use all rows in tbody
if (!this.ui.table.body) return null;
- const rows = Array.from(this.ui.table.body.querySelectorAll('tr'))
+ const rows = Array.from(this.ui.table.body.children)
.filter(row => this.isEditableRow(row));
return goBackward ? rows[rows.length - 1] : rows[0];
@@ -1526,7 +1538,7 @@
if (on && !this.ui.table.form) {
let table = window.jvbTemplates.create('contentTable');
- this.container.append(table);
+ this.ui.wrap.append(table);
this.ui.table = window.uiFromSelectors(this.selectors.table);
this.ui.table.columns = this.container.querySelectorAll(this.selectors.table.columns);
}
@@ -1580,15 +1592,12 @@
this.toggleTable();
window.removeChildren(this.ui.grid);
+
await window.chunkIt(
items,
(item) => this.renderTableItem(item),
(fragment) => {
- if (this.ui.table.body) {
- this.ui.table.body.append(fragment);
- } else {
- this.ui.table.table.insertBefore(fragment, this.ui.table.foot);
- }
+ this.ui.table.body.append(fragment);
},
5
);
@@ -1826,20 +1835,7 @@
CLEANUP
***************************************************************/
resetForm(form) {
- // Clear text inputs, textareas
- form.querySelectorAll('input[type="hidden"], input[type="text"], input[type="number"], input[type="email"], input[type="url"], textarea').forEach(input => {
- input.value = '';
- });
-
- // Uncheck checkboxes and radios
- form.querySelectorAll('input[type="checkbox"], input[type="radio"]').forEach(input => {
- input.checked = false;
- });
-
- // Reset selects to first option
- form.querySelectorAll('select').forEach(select => {
- select.selectedIndex = 0;
- });
+ form.reset();
// Clear any selected items displays
form.querySelectorAll('.selected-items').forEach(container => {
--
Gitblit v1.10.0