mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-02-09 14:18:40 +00:00
expand forms
This commit is contained in:
parent
cb42c44618
commit
dd573b501f
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,4 +1,5 @@
|
||||||
tests/jasmin*
|
tests/jasmin*
|
||||||
vendor
|
vendor
|
||||||
.vscode
|
.vscode
|
||||||
*.cache
|
*.cache
|
||||||
|
.directory
|
||||||
|
|
@ -163,6 +163,30 @@ export class Form
|
||||||
self.submit(self.forms[id], submits[i]);
|
self.submit(self.forms[id], submits[i]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if true submit form on change
|
||||||
|
if (this.forms[id].isOnChange()) {
|
||||||
|
const hasUiContainer = this.forms[id].getFormElement().getAttribute('data-ui-content');
|
||||||
|
const onChangeContainer = hasUiContainer !== null
|
||||||
|
? this.forms[id].getFormElement().querySelector(hasUiContainer)
|
||||||
|
: this.forms[id].getFormElement();
|
||||||
|
|
||||||
|
onChangeContainer.addEventListener('change', function (event)
|
||||||
|
{
|
||||||
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
|
const target = event.target.tagName.toLowerCase();
|
||||||
|
|
||||||
|
if (target === 'input' || target === 'textarea') {
|
||||||
|
let dataParent = null;
|
||||||
|
if (self.forms[id].getFormElement().tagName.toLowerCase() === 'table') {
|
||||||
|
dataParent = event.srcElement.closest(self.forms[id].getFormElement().getAttribute('data-ui-element'));
|
||||||
|
}
|
||||||
|
|
||||||
|
self.submit(self.forms[id], null, dataParent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bindButtons (id, e = null)
|
bindButtons (id, e = null)
|
||||||
|
|
@ -256,7 +280,7 @@ export class Form
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
submit (form, button)
|
submit (form, button = null, container = null)
|
||||||
{
|
{
|
||||||
/* Handle injects */
|
/* Handle injects */
|
||||||
const self = this,
|
const self = this,
|
||||||
|
|
@ -273,7 +297,7 @@ export class Form
|
||||||
if (!this.app.eventManager.isAttached(form.getId())) {
|
if (!this.app.eventManager.isAttached(form.getId())) {
|
||||||
this.app.eventManager.attach(form.getId(), function ()
|
this.app.eventManager.attach(form.getId(), function ()
|
||||||
{
|
{
|
||||||
self.submitForm(form, action);
|
self.submitForm(form, action, container);
|
||||||
}, true);
|
}, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -313,9 +337,9 @@ export class Form
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
submitForm (form, action = null)
|
submitForm (form, action = null, container = null)
|
||||||
{
|
{
|
||||||
const data = form.getData();
|
const data = form.getData(container);
|
||||||
|
|
||||||
if (!form.isValid(data)) {
|
if (!form.isValid(data)) {
|
||||||
this.app.notifyManager.send(
|
this.app.notifyManager.send(
|
||||||
|
|
@ -468,7 +492,7 @@ export class Form
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formElement = document.getElementById(id);
|
const formElement = self.forms[id].getFormElement();
|
||||||
const parents = [];
|
const parents = [];
|
||||||
const selectors = formElement.getAttribute('data-add-element').split(','),
|
const selectors = formElement.getAttribute('data-add-element').split(','),
|
||||||
selectorLength = selectors.length;
|
selectorLength = selectors.length;
|
||||||
|
|
@ -657,7 +681,7 @@ export class Form
|
||||||
{
|
{
|
||||||
const length = data.length;
|
const length = data.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
const matches = document.getElementById(formId).querySelectorAll('[data-tpl-' + type + '="' + data[i].getAttribute('data-tpl-' + type) + '"');
|
const matches = self.forms[formId].getFormElement().querySelectorAll('[data-tpl-' + type + '="' + data[i].getAttribute('data-tpl-' + type) + '"');
|
||||||
const path = data[i].hasAttribute('data-tpl-' + type + '-path') ? data[i].getAttribute('data-tpl-' + type + '-path') : null;
|
const path = data[i].hasAttribute('data-tpl-' + type + '-path') ? data[i].getAttribute('data-tpl-' + type + '-path') : null;
|
||||||
|
|
||||||
const matchLength = matches.length;
|
const matchLength = matches.length;
|
||||||
|
|
@ -709,7 +733,7 @@ export class Form
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
createForm.addEventListener('click', function () {
|
createForm.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = self.forms[id].getFormElement();
|
||||||
const subMain = formElement.getAttribute('data-add-content').charAt(0) === '#'
|
const subMain = formElement.getAttribute('data-add-content').charAt(0) === '#'
|
||||||
? document.querySelector(formElement.getAttribute('data-add-content'))
|
? document.querySelector(formElement.getAttribute('data-add-content'))
|
||||||
: formElement.querySelector(formElement.getAttribute('data-add-content'));
|
: formElement.querySelector(formElement.getAttribute('data-add-content'));
|
||||||
|
|
@ -746,7 +770,7 @@ export class Form
|
||||||
* The container element for inline adding isn't always tbody
|
* The container element for inline adding isn't always tbody
|
||||||
*/
|
*/
|
||||||
self.app.uiManager.getFormManager().get(eleId + '-form').injectSubmit(function () {
|
self.app.uiManager.getFormManager().get(eleId + '-form').injectSubmit(function () {
|
||||||
document.getElementById(id).getElementsByTagName('tbody')[0].removeChild(
|
self.forms[id].getFormElement().getElementsByTagName('tbody')[0].removeChild(
|
||||||
document.getElementById(eleId)
|
document.getElementById(eleId)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
@ -831,7 +855,7 @@ export class Form
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
update.addEventListener('click', function () {
|
update.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = self.forms[id].getFormElement();
|
||||||
const parents = [];
|
const parents = [];
|
||||||
const selectors = formElement.getAttribute('data-update-element').split(','),
|
const selectors = formElement.getAttribute('data-update-element').split(','),
|
||||||
selectorLength = selectors.length;
|
selectorLength = selectors.length;
|
||||||
|
|
@ -1042,7 +1066,7 @@ export class Form
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
save.addEventListener('click', function () {
|
save.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = self.forms[id].getFormElement();
|
||||||
const parentsTpl = {};
|
const parentsTpl = {};
|
||||||
const parentsContent = {};
|
const parentsContent = {};
|
||||||
const selectors = formElement.getAttribute('data-update-element').split(','),
|
const selectors = formElement.getAttribute('data-update-element').split(','),
|
||||||
|
|
@ -1284,13 +1308,13 @@ export class Form
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
update.addEventListener('click', function () {
|
update.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = self.forms[id].getFormElement();
|
||||||
const parent = this.closest(formElement.getAttribute('data-update-element'));
|
const parent = this.closest(formElement.getAttribute('data-update-element'));
|
||||||
const formId = formElement.getAttribute('data-update-form');
|
const formId = formElement.getAttribute('data-update-form');
|
||||||
const values = parent.querySelectorAll('[data-tpl-value]');
|
const values = parent.querySelectorAll('[data-tpl-value]');
|
||||||
const text = parent.querySelectorAll('[data-tpl-text]');
|
const text = parent.querySelectorAll('[data-tpl-text]');
|
||||||
|
|
||||||
const fields = document.getElementById(formId).querySelectorAll('[data-form="' + id + '"]');
|
const fields = self.forms[formId].getFormElement().querySelectorAll('[data-form="' + id + '"]');
|
||||||
let length = 0;
|
let length = 0;
|
||||||
|
|
||||||
// clear form values to prevent old values getting mixed with update values
|
// clear form values to prevent old values getting mixed with update values
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,14 @@ export class FormView
|
||||||
{
|
{
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
|
||||||
this.initializeMembers();
|
|
||||||
this.bind();
|
|
||||||
|
|
||||||
this.success = null;
|
this.success = null;
|
||||||
this.finally = null;
|
this.finally = null;
|
||||||
this.lastSubmit = 0;
|
this.lastSubmit = 0;
|
||||||
|
|
||||||
|
this.form = null;
|
||||||
|
|
||||||
|
this.initializeMembers();
|
||||||
|
this.bind();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -106,6 +108,13 @@ export class FormView
|
||||||
this.lastSubmit = Math.floor(Date.now());
|
this.lastSubmit = Math.floor(Date.now());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
isOnChange ()
|
||||||
|
{
|
||||||
|
const isOnChange = this.getFormElement().getAttribute('data-on-change');
|
||||||
|
|
||||||
|
return (isOnChange === 'true' || isOnChange === '1');
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get submit elements
|
* Get submit elements
|
||||||
*
|
*
|
||||||
|
|
@ -305,13 +314,15 @@ export class FormView
|
||||||
/**
|
/**
|
||||||
* Get form elements
|
* Get form elements
|
||||||
*
|
*
|
||||||
|
* @param {object} container Data container, null = entire form or element e.g. table row
|
||||||
|
*
|
||||||
* @return {Array}
|
* @return {Array}
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
getFormElements ()
|
getFormElements (container = null)
|
||||||
{
|
{
|
||||||
const form = document.getElementById(this.id);
|
const form = container === null ? this.getFormElement() : container;
|
||||||
|
|
||||||
if (!form) {
|
if (!form) {
|
||||||
return [];
|
return [];
|
||||||
|
|
@ -412,15 +423,17 @@ export class FormView
|
||||||
/**
|
/**
|
||||||
* Get form data
|
* Get form data
|
||||||
*
|
*
|
||||||
|
* @param {container} Data container. Null = entire form, container e.g. single row in a table
|
||||||
|
*
|
||||||
* @return {FormData}
|
* @return {FormData}
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
getData ()
|
getData (container = null)
|
||||||
{
|
{
|
||||||
const data = {},
|
const data = {},
|
||||||
formData = new FormData(),
|
formData = new FormData(),
|
||||||
elements = this.getFormElements(),
|
elements = this.getFormElements(container),
|
||||||
length = elements.length;
|
length = elements.length;
|
||||||
|
|
||||||
let value = null;
|
let value = null;
|
||||||
|
|
@ -499,7 +512,7 @@ export class FormView
|
||||||
const elements = this.getFormElements(),
|
const elements = this.getFormElements(),
|
||||||
length = elements.length;
|
length = elements.length;
|
||||||
|
|
||||||
const form = document.getElementById(this.id);
|
const form = this.getFormElement();
|
||||||
form.reset();
|
form.reset();
|
||||||
|
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
|
|
@ -530,6 +543,11 @@ export class FormView
|
||||||
return this.id;
|
return this.id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getFormElement ()
|
||||||
|
{
|
||||||
|
return this.form === null ? (this.form = document.getElementById(this.id)) : this.form;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate form
|
* Validate form
|
||||||
*
|
*
|
||||||
|
|
@ -591,18 +609,6 @@ export class FormView
|
||||||
return invalid;
|
return invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get form element
|
|
||||||
*
|
|
||||||
* @return {Object}
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
getElement ()
|
|
||||||
{
|
|
||||||
return document.getElementById(this.getId());
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get form element id
|
* Get form element id
|
||||||
*
|
*
|
||||||
|
|
@ -648,7 +654,7 @@ export class FormView
|
||||||
{
|
{
|
||||||
this.clean();
|
this.clean();
|
||||||
|
|
||||||
const e = document.getElementById(this.id);
|
const e = this.getFormElement();
|
||||||
|
|
||||||
if (!e) {
|
if (!e) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user