mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-02-17 17:58:39 +00:00
improve git form update/delete
This commit is contained in:
parent
bd6c58ddff
commit
0adf8dbf94
|
|
@ -193,16 +193,16 @@ export class Form
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
formActions (self, event, id) {
|
formActionRemove(self, event, id, elementIndex)
|
||||||
let elementIndex = 0;
|
{
|
||||||
|
|
||||||
if ((elementIndex = Array.from(self.forms[id].getRemove()).indexOf(event.target)) !== -1) {
|
|
||||||
// handle remove
|
|
||||||
|
|
||||||
jsOMS.preventAll(event);
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
const remove = self.forms[id].getRemove()[elementIndex];
|
const remove = self.forms[id].getRemove()[elementIndex];
|
||||||
const callback = function () {
|
const callback = function (response, xhr) {
|
||||||
|
if (xhr.status !== 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var {Element} elementContainer Container which holds all the data for a specific element
|
* @var {Element} elementContainer Container which holds all the data for a specific element
|
||||||
* (e.g. table row (tr), div, ...)
|
* (e.g. table row (tr), div, ...)
|
||||||
|
|
@ -235,9 +235,10 @@ export class Form
|
||||||
} else {
|
} else {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
} else if ((elementIndex = Array.from(self.forms[id].getAdd()).indexOf(event.target)) !== -1) {
|
}
|
||||||
// handle add
|
|
||||||
|
|
||||||
|
formActionAdd(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
jsOMS.preventAll(event);
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
if (!self.forms[id].isValid()) {
|
if (!self.forms[id].isValid()) {
|
||||||
|
|
@ -245,9 +246,15 @@ export class Form
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.getElementById(id).getAttribute('data-add-form') === null) {
|
if (document.getElementById(id).getAttribute('data-add-form') === null) {
|
||||||
// handle inline add
|
this.formActionAddInline(self, event, id, elementIndex);
|
||||||
// Since the add is inline no form exists which the user can use, hence it must be created
|
} else {
|
||||||
|
this.formActionAddExternal(self, event, id, elementIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
formActionAddInline(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
|
// Since the add is inline no form exists which the user can use, hence it must be created
|
||||||
/** @var {HTMLElement} formElement */
|
/** @var {HTMLElement} formElement */
|
||||||
const formElement = self.forms[id].getFormElement();
|
const formElement = self.forms[id].getFormElement();
|
||||||
|
|
||||||
|
|
@ -268,9 +275,10 @@ export class Form
|
||||||
const newElement = uiContainer.querySelector(formElement.getAttribute('data-add-tpl')).content.cloneNode(true);
|
const newElement = uiContainer.querySelector(formElement.getAttribute('data-add-tpl')).content.cloneNode(true);
|
||||||
uiContainer.appendChild(newElement.firstElementChild);
|
uiContainer.appendChild(newElement.firstElementChild);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
// handle external add
|
|
||||||
|
|
||||||
|
formActionAddExternal(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
/** @var {HTMLElement} formElement External form */
|
/** @var {HTMLElement} formElement External form */
|
||||||
const formElement = self.forms[id].getFormElement();
|
const formElement = self.forms[id].getFormElement();
|
||||||
|
|
||||||
|
|
@ -333,6 +341,12 @@ export class Form
|
||||||
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
||||||
const remoteUrls = {};
|
const remoteUrls = {};
|
||||||
|
|
||||||
|
// define remote response behavior
|
||||||
|
self.forms[id].setSuccess(function (response, xhr) {
|
||||||
|
if (xhr.status !== 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// insert values into form (populate values)
|
// insert values into form (populate values)
|
||||||
Form.setDataInElement('value', newElements, values, remoteUrls);
|
Form.setDataInElement('value', newElements, values, remoteUrls);
|
||||||
|
|
||||||
|
|
@ -344,14 +358,6 @@ export class Form
|
||||||
uiContainer.appendChild(newElements[i].firstElementChild);
|
uiContainer.appendChild(newElements[i].firstElementChild);
|
||||||
}
|
}
|
||||||
|
|
||||||
// define remote response behavior
|
|
||||||
self.forms[id].setSuccess(function (response) {
|
|
||||||
if (response.get('status') !== 'undefined' && response.get('status') !== NotificationLevel.HIDDEN) {
|
|
||||||
self.app.notifyManager.send(
|
|
||||||
new NotificationMessage(response.get('status'), response.get('title'), response.get('message')), NotificationType.APP_NOTIFICATION
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.omsApp.logger.log(remoteUrls);
|
window.omsApp.logger.log(remoteUrls);
|
||||||
|
|
||||||
UriFactory.setQuery('$id', response.get('response').id);
|
UriFactory.setQuery('$id', response.get('response').id);
|
||||||
|
|
@ -367,15 +373,20 @@ export class Form
|
||||||
// reset the form after adding an element
|
// reset the form after adding an element
|
||||||
self.forms[id].resetValues();
|
self.forms[id].resetValues();
|
||||||
}
|
}
|
||||||
} else if ((elementIndex = Array.from(self.forms[id].getSave()).indexOf(event.target)) !== -1) {
|
|
||||||
// handle save button
|
|
||||||
|
|
||||||
|
formActionSave(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
jsOMS.preventAll(event);
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
const mainForm = document.querySelector('[data-update-form="' + id + '"');
|
if (document.querySelector('[data-update-form="' + id + '"') === null) {
|
||||||
if (mainForm === null) {
|
this.formActionSaveInline(self, event, id, elementIndex)
|
||||||
// handle inline save
|
} else {
|
||||||
|
this.formActionSaveExternal(self, event, id, elementIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
formActionSaveInline(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
if (!self.forms[id].isValid()) {
|
if (!self.forms[id].isValid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -464,6 +475,12 @@ export class Form
|
||||||
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
||||||
const remoteUrls = {};
|
const remoteUrls = {};
|
||||||
|
|
||||||
|
// define remote response behavior
|
||||||
|
self.forms[id].setSuccess(function (response, xhr) {
|
||||||
|
if (xhr.status !== 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// insert values into form (populate values)
|
// insert values into form (populate values)
|
||||||
Form.setDataInElement('value', newElements, values, remoteUrls);
|
Form.setDataInElement('value', newElements, values, remoteUrls);
|
||||||
|
|
||||||
|
|
@ -477,14 +494,6 @@ export class Form
|
||||||
|
|
||||||
elementContainer.parentNode.removeChild(elementContainer);
|
elementContainer.parentNode.removeChild(elementContainer);
|
||||||
|
|
||||||
// define remote response behavior
|
|
||||||
self.forms[id].setSuccess(function (response) {
|
|
||||||
if (response.get('status') !== 'undefined' && response.get('status') !== NotificationLevel.HIDDEN) {
|
|
||||||
self.app.notifyManager.send(
|
|
||||||
new NotificationMessage(response.get('status'), response.get('title'), response.get('message')), NotificationType.APP_NOTIFICATION
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.omsApp.logger.log(remoteUrls);
|
window.omsApp.logger.log(remoteUrls);
|
||||||
|
|
||||||
UriFactory.setQuery('$id', response.get('response').id);
|
UriFactory.setQuery('$id', response.get('response').id);
|
||||||
|
|
@ -534,25 +543,31 @@ export class Form
|
||||||
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
||||||
const remoteUrls = {};
|
const remoteUrls = {};
|
||||||
|
|
||||||
|
jsOMS.removeClass(element, 'hidden');
|
||||||
|
|
||||||
|
// todo bind failure here, if failure do cancel, if success to remove edit template
|
||||||
|
self.forms[id].setSuccess(function (response, xhr) {
|
||||||
|
if (xhr.status !== 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// update values in form (overwrite values)
|
// update values in form (overwrite values)
|
||||||
Form.setDataInElement('value', [element], values, remoteUrls);
|
Form.setDataInElement('value', [element], values, remoteUrls);
|
||||||
|
|
||||||
// update text data in form (overwrite text)
|
// update text data in form (overwrite text)
|
||||||
Form.setDataInElement('text', [element], texts, remoteUrls);
|
Form.setDataInElement('text', [element], texts, remoteUrls);
|
||||||
|
|
||||||
jsOMS.removeClass(element, 'hidden');
|
|
||||||
|
|
||||||
elementContainer.parentNode.removeChild(elementContainer);
|
elementContainer.parentNode.removeChild(elementContainer);
|
||||||
|
|
||||||
// todo bind failure here, if failure do cancel, if success to remove edit template
|
|
||||||
self.forms[id].setSuccess(function () {
|
|
||||||
// overwrite old values from remote response
|
// overwrite old values from remote response
|
||||||
Form.setDataFromRemoteUrls(remoteUrls);
|
Form.setDataFromRemoteUrls(remoteUrls);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
// handle external save
|
|
||||||
|
|
||||||
|
formActionSaveExternal(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
|
const mainForm = document.querySelector('[data-update-form="' + id + '"');
|
||||||
const externalFormId = id;
|
const externalFormId = id;
|
||||||
id = mainForm.getAttribute('id');
|
id = mainForm.getAttribute('id');
|
||||||
|
|
||||||
|
|
@ -621,16 +636,25 @@ export class Form
|
||||||
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
/** @var {object} remoteUrls Texts and values which come from remote sources */
|
||||||
const remoteUrls = {};
|
const remoteUrls = {};
|
||||||
|
|
||||||
|
self.forms[externalFormId].setSuccess(function (response, xhr) {
|
||||||
|
if (xhr.status !== 200) {
|
||||||
|
// reset form values to default values after performing the update
|
||||||
|
self.forms[externalFormId].resetValues();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// update values in form (overwrite values)
|
// update values in form (overwrite values)
|
||||||
Form.setDataInElement('value', updateElements, values, remoteUrls);
|
Form.setDataInElement('value', updateElements, values, remoteUrls);
|
||||||
|
|
||||||
// update text data in form (overwrite text)
|
// update text data in form (overwrite text)
|
||||||
Form.setDataInElement('text', updateElements, texts, remoteUrls);
|
Form.setDataInElement('text', updateElements, texts, remoteUrls);
|
||||||
|
|
||||||
// @todo: bind failure here, if failure do cancel, if success to remove edit template
|
|
||||||
self.forms[externalFormId].setSuccess(function () {
|
|
||||||
// overwrite old values from remote response
|
// overwrite old values from remote response
|
||||||
Form.setDataFromRemoteUrls(remoteUrls);
|
Form.setDataFromRemoteUrls(remoteUrls);
|
||||||
|
|
||||||
|
// reset form values to default values after performing the update
|
||||||
|
self.forms[externalFormId].resetValues();
|
||||||
});
|
});
|
||||||
|
|
||||||
// clear element id after saving
|
// clear element id after saving
|
||||||
|
|
@ -639,9 +663,6 @@ export class Form
|
||||||
// submit to api
|
// submit to api
|
||||||
self.submit(self.forms[externalFormId], self.forms[externalFormId].getSave()[elementIndex]);
|
self.submit(self.forms[externalFormId], self.forms[externalFormId].getSave()[elementIndex]);
|
||||||
|
|
||||||
// reset form values to default values after performing the update
|
|
||||||
self.forms[externalFormId].resetValues();
|
|
||||||
|
|
||||||
// show add button + hide update button + hide cancel button
|
// show add button + hide update button + hide cancel button
|
||||||
const addButtons = self.forms[externalFormId].getAdd();
|
const addButtons = self.forms[externalFormId].getAdd();
|
||||||
let buttonLength = addButtons.length;
|
let buttonLength = addButtons.length;
|
||||||
|
|
@ -662,16 +683,21 @@ export class Form
|
||||||
jsOMS.addClass(cancelButtons[i], 'hidden');
|
jsOMS.addClass(cancelButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ((elementIndex = Array.from(self.forms[id].getCancel()).indexOf(event.target)) !== -1) {
|
|
||||||
// handle cancel
|
|
||||||
// @todo currently only handling update cancel, what about add cancel?
|
|
||||||
|
|
||||||
|
formActionCancel(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
jsOMS.preventAll(event);
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
const ele = document.getElementById(id);
|
const ele = document.getElementById(id);
|
||||||
if (ele.getAttribute('data-update-form') === null && ele.tagName.toLowerCase() !== 'form') {
|
if (ele.getAttribute('data-update-form') === null && ele.tagName.toLowerCase() !== 'form') {
|
||||||
// handle inline cancel
|
this.formActionCancelInline(self, event, id, elementIndex);
|
||||||
|
} else {
|
||||||
|
this.formActionCancelExternal(self, event, id, elementIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
formActionCancelInline(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
/** @var {HTMLElement} formElement Form */
|
/** @var {HTMLElement} formElement Form */
|
||||||
const formElement = self.forms[id].getFormElement();
|
const formElement = self.forms[id].getFormElement();
|
||||||
|
|
||||||
|
|
@ -692,9 +718,10 @@ export class Form
|
||||||
jsOMS.removeClass(element, 'hidden');
|
jsOMS.removeClass(element, 'hidden');
|
||||||
|
|
||||||
elementContainer.parentNode.removeChild(elementContainer);
|
elementContainer.parentNode.removeChild(elementContainer);
|
||||||
} else {
|
}
|
||||||
// handle external cancel
|
|
||||||
|
|
||||||
|
formActionCancelExternal(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
// reset form values to default values
|
// reset form values to default values
|
||||||
self.forms[id].resetValues();
|
self.forms[id].resetValues();
|
||||||
|
|
||||||
|
|
@ -721,17 +748,22 @@ export class Form
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.addClass(cancelButtons[i], 'hidden');
|
jsOMS.addClass(cancelButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
jsOMS.preventAll(event);
|
|
||||||
}
|
}
|
||||||
} else if ((elementIndex = Array.from(self.forms[id].getUpdate()).indexOf(event.target)) !== -1) {
|
|
||||||
// handle update
|
formActionUpdate(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
// this doesn't handle setting new values but populating the update form
|
// this doesn't handle setting new values but populating the update form
|
||||||
jsOMS.preventAll(event);
|
jsOMS.preventAll(event);
|
||||||
|
|
||||||
if (document.getElementById(id).getAttribute('data-update-form') === null) {
|
if (document.getElementById(id).getAttribute('data-update-form') === null) {
|
||||||
// handle inline update
|
this.formActionUpdateInline(self, event, id, elementIndex);
|
||||||
|
} else {
|
||||||
|
this.formActionUpdateExternal(self, event, id, elementIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
formActionUpdateInline(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
/** @var {HTMLElement} formElement Form */
|
/** @var {HTMLElement} formElement Form */
|
||||||
const formElement = self.forms[id].getFormElement();
|
const formElement = self.forms[id].getFormElement();
|
||||||
|
|
||||||
|
|
@ -798,9 +830,10 @@ export class Form
|
||||||
for (let i = 0; i < buttonLength; ++i) {
|
for (let i = 0; i < buttonLength; ++i) {
|
||||||
jsOMS.removeClass(cancelButtons[i], 'hidden');
|
jsOMS.removeClass(cancelButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
// handle external update
|
|
||||||
|
|
||||||
|
formActionUpdateExternal(self, event, id, elementIndex)
|
||||||
|
{
|
||||||
/** @var {HTMLElement} formElement */
|
/** @var {HTMLElement} formElement */
|
||||||
const formElement = self.forms[id].getFormElement();
|
const formElement = self.forms[id].getFormElement();
|
||||||
|
|
||||||
|
|
@ -870,6 +903,24 @@ export class Form
|
||||||
Form.setDataFromRemoteUrls(remoteUrls);
|
Form.setDataFromRemoteUrls(remoteUrls);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
formActions (self, event, id)
|
||||||
|
{
|
||||||
|
let elementIndex = 0;
|
||||||
|
|
||||||
|
if ((elementIndex = Array.from(self.forms[id].getRemove()).indexOf(event.target)) !== -1) {
|
||||||
|
this.formActionRemove(self, event, id, elementIndex);
|
||||||
|
} else if ((elementIndex = Array.from(self.forms[id].getAdd()).indexOf(event.target)) !== -1) {
|
||||||
|
this.formActionAdd(self, event, id, elementIndex);
|
||||||
|
} else if ((elementIndex = Array.from(self.forms[id].getSave()).indexOf(event.target)) !== -1) {
|
||||||
|
this.formActionSave(self, event, id, elementIndex);
|
||||||
|
} else if ((elementIndex = Array.from(self.forms[id].getCancel()).indexOf(event.target)) !== -1) {
|
||||||
|
// @todo currently only handling update cancel, what about add cancel?
|
||||||
|
this.formActionCancel(self, event, id, elementIndex);
|
||||||
|
} else if ((elementIndex = Array.from(self.forms[id].getUpdate()).indexOf(event.target)) !== -1) {
|
||||||
|
// handle update
|
||||||
|
// this doesn't handle setting new values but populating the update form
|
||||||
|
this.formActionUpdate(self, event, id, elementIndex);
|
||||||
} else if ((elementIndex = Array.from(self.forms[id].getSubmit()).indexOf(event.target)) !== -1
|
} else if ((elementIndex = Array.from(self.forms[id].getSubmit()).indexOf(event.target)) !== -1
|
||||||
|| (elementIndex = Array.from(self.forms[id].getSubmit()).indexOf(event.target.parentNode)) !== -1
|
|| (elementIndex = Array.from(self.forms[id].getSubmit()).indexOf(event.target.parentNode)) !== -1
|
||||||
) {
|
) {
|
||||||
|
|
@ -1027,7 +1078,7 @@ export class Form
|
||||||
request.setType(RequestType.FORM_DATA); // @todo: consider to allow different request type
|
request.setType(RequestType.FORM_DATA); // @todo: consider to allow different request type
|
||||||
request.setUri(action !== null ? action : form.getAction());
|
request.setUri(action !== null ? action : form.getAction());
|
||||||
request.setMethod(method !== null ? method : form.getMethod());
|
request.setMethod(method !== null ? method : form.getMethod());
|
||||||
request.setSuccess(function (xhr)
|
request.setResultCallback(0, function (xhr)
|
||||||
{
|
{
|
||||||
window.omsApp.logger.log(xhr.response);
|
window.omsApp.logger.log(xhr.response);
|
||||||
|
|
||||||
|
|
@ -1073,7 +1124,7 @@ export class Form
|
||||||
let successInject = null;
|
let successInject = null;
|
||||||
|
|
||||||
if ((successInject = form.getSuccess()) !== null) {
|
if ((successInject = form.getSuccess()) !== null) {
|
||||||
successInject(response);
|
successInject(response, xhr);
|
||||||
} else if (redirect !== null) {
|
} else if (redirect !== null) {
|
||||||
fetch(UriFactory.build(redirect))
|
fetch(UriFactory.build(redirect))
|
||||||
.then((response) => response.text())
|
.then((response) => response.text())
|
||||||
|
|
@ -1096,7 +1147,9 @@ export class Form
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.warn(error);
|
console.warn(error);
|
||||||
});
|
});
|
||||||
} else if (response.get('type') !== null) {
|
}
|
||||||
|
|
||||||
|
if (response.get('type') !== null) {
|
||||||
self.app.responseManager.run(response.get('type'), response.get(), null);
|
self.app.responseManager.run(response.get('type'), response.get(), null);
|
||||||
} else if (typeof o.status !== 'undefined' && o.status !== NotificationLevel.HIDDEN) {
|
} else if (typeof o.status !== 'undefined' && o.status !== NotificationLevel.HIDDEN) {
|
||||||
self.app.notifyManager.send(
|
self.app.notifyManager.send(
|
||||||
|
|
@ -1111,24 +1164,7 @@ export class Form
|
||||||
+ 'Request: ' + JSON.stringify(form.getData()) + '\n'
|
+ 'Request: ' + JSON.stringify(form.getData()) + '\n'
|
||||||
+ 'Response: ' + xhr.response
|
+ 'Response: ' + xhr.response
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
request.setResultCallback(0, function (xhr)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
const o = JSON.parse(xhr.response)[0];
|
|
||||||
const response = new Response(o);
|
|
||||||
|
|
||||||
if (response.get('type') !== null) {
|
|
||||||
console.log(response.get('type'));
|
|
||||||
} else if (typeof o.status !== 'undefined' && o.status !== NotificationLevel.HIDDEN) {
|
|
||||||
self.app.notifyManager.send(
|
|
||||||
new NotificationMessage(o.status, o.title, o.message), NotificationType.APP_NOTIFICATION
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
self.app.notifyManager.send(
|
self.app.notifyManager.send(
|
||||||
new NotificationMessage(
|
new NotificationMessage(
|
||||||
NotificationLevel.ERROR,
|
NotificationLevel.ERROR,
|
||||||
|
|
@ -1137,6 +1173,7 @@ export class Form
|
||||||
), NotificationType.APP_NOTIFICATION
|
), NotificationType.APP_NOTIFICATION
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (window.omsApp.state) {
|
if (window.omsApp.state) {
|
||||||
|
|
@ -1263,7 +1300,10 @@ export class Form
|
||||||
} else {
|
} else {
|
||||||
if (type === 'value') {
|
if (type === 'value') {
|
||||||
GeneralUI.setValueOfElement(matches[c], GeneralUI.getValueFromDataSource(data[i]));
|
GeneralUI.setValueOfElement(matches[c], GeneralUI.getValueFromDataSource(data[i]));
|
||||||
} else {
|
} else if (type === 'text'
|
||||||
|
&& (data[i].getAttribute('data-tpl-text') !== data[i].getAttribute('data-tpl-value')
|
||||||
|
|| data[i].getAttribute('data-value') !== null)
|
||||||
|
) {
|
||||||
GeneralUI.setTextOfElement(matches[c], GeneralUI.getTextFromDataSource(data[i]));
|
GeneralUI.setTextOfElement(matches[c], GeneralUI.getTextFromDataSource(data[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1290,7 +1330,11 @@ export class Form
|
||||||
} else {
|
} else {
|
||||||
if (type === 'value') {
|
if (type === 'value') {
|
||||||
GeneralUI.setValueOfElement(matches[c], GeneralUI.getValueFromDataSource(data[i]));
|
GeneralUI.setValueOfElement(matches[c], GeneralUI.getValueFromDataSource(data[i]));
|
||||||
} else {
|
} else if (type === 'text'
|
||||||
|
&& (data[i].getAttribute('data-tpl-text') !== data[i].getAttribute('data-tpl-value')
|
||||||
|
|| (data[i].getAttribute('data-value') !== null)
|
||||||
|
)
|
||||||
|
) {
|
||||||
GeneralUI.setTextOfElement(matches[c], GeneralUI.getTextFromDataSource(data[i]));
|
GeneralUI.setTextOfElement(matches[c], GeneralUI.getTextFromDataSource(data[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
102
UI/GeneralUI.js
102
UI/GeneralUI.js
|
|
@ -107,7 +107,7 @@ export class GeneralUI
|
||||||
if (this.getAttribute('target') === '_blank'
|
if (this.getAttribute('target') === '_blank'
|
||||||
|| this.getAttribute('data-target') === '_blank'
|
|| this.getAttribute('data-target') === '_blank'
|
||||||
|| event.button === 1
|
|| event.button === 1
|
||||||
|| uri.startsWith('https://')
|
|| uri.indexOf('://') > 0
|
||||||
) {
|
) {
|
||||||
window.open(UriFactory.build(uri), '_blank');
|
window.open(UriFactory.build(uri), '_blank');
|
||||||
} else if (this.getAttribute('data-redirect') !== null) {
|
} else if (this.getAttribute('data-redirect') !== null) {
|
||||||
|
|
@ -294,34 +294,12 @@ export class GeneralUI
|
||||||
{
|
{
|
||||||
if (src.hasAttribute('data-value')) {
|
if (src.hasAttribute('data-value')) {
|
||||||
src.setAttribute('data-value', value);
|
src.setAttribute('data-value', value);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (src.tagName.toLowerCase()) {
|
const tagName = src.tagName.toLowerCase();
|
||||||
case 'div':
|
if (tagName === 'input') {
|
||||||
case 'span':
|
|
||||||
case 'pre':
|
|
||||||
case 'article':
|
|
||||||
case 'section':
|
|
||||||
case 'h1':
|
|
||||||
if (src.hasAttribute('data-tpl-text')) {
|
|
||||||
break; // prevent overwriting setTextOfElement
|
|
||||||
}
|
|
||||||
|
|
||||||
src.innerHTML = jsOMS.htmlspecialchars_encode(value);
|
|
||||||
break;
|
|
||||||
case 'select': {
|
|
||||||
const optionLength = src.options.length;
|
|
||||||
for (let i = 0; i < optionLength; ++i) {
|
|
||||||
if (src.options[i].value === value) {
|
|
||||||
src.options[i].selected = true;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'input':
|
|
||||||
if (src.type === 'radio') {
|
if (src.type === 'radio') {
|
||||||
src.checked = false;
|
src.checked = false;
|
||||||
if (src.value === value) {
|
if (src.value === value) {
|
||||||
|
|
@ -333,11 +311,22 @@ export class GeneralUI
|
||||||
if (values.includes(src.value)) {
|
if (values.includes(src.value)) {
|
||||||
src.checked = true;
|
src.checked = true;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
src.value = value;
|
||||||
}
|
}
|
||||||
|
} else if (tagName === 'select') {
|
||||||
|
const optionLength = src.options.length;
|
||||||
|
for (let i = 0; i < optionLength; ++i) {
|
||||||
|
if (src.options[i].value === value) {
|
||||||
|
src.options[i].selected = true;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
}
|
||||||
|
}
|
||||||
|
} else if (src.getAttribute('value') !== null) {
|
||||||
src.value = jsOMS.htmlspecialchars_decode(value);
|
src.value = jsOMS.htmlspecialchars_decode(value);
|
||||||
|
} else {
|
||||||
|
src.innerHTML = value;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -353,24 +342,17 @@ export class GeneralUI
|
||||||
*/
|
*/
|
||||||
static setTextOfElement (src, value)
|
static setTextOfElement (src, value)
|
||||||
{
|
{
|
||||||
switch (src.tagName.toLowerCase()) {
|
const tagName = src.tagName.toLowerCase();
|
||||||
case 'select':
|
if (tagName === 'h1') {
|
||||||
break;
|
|
||||||
case 'div':
|
|
||||||
case 'td':
|
|
||||||
case 'span':
|
|
||||||
case 'pre':
|
|
||||||
case 'article':
|
|
||||||
case 'section':
|
|
||||||
src.innerHTML = value;
|
|
||||||
break;
|
|
||||||
case 'h1':
|
|
||||||
src.innerHTML = jsOMS.htmlspecialchars_encode(value);
|
src.innerHTML = jsOMS.htmlspecialchars_encode(value);
|
||||||
break;
|
} else if (tagName === 'select') {
|
||||||
default:
|
return;
|
||||||
|
} else if (src.getAttribute('value') !== null) {
|
||||||
if (src.value === '') {
|
if (src.value === '') {
|
||||||
src.value = jsOMS.htmlspecialchars_decode(value);
|
src.value = jsOMS.htmlspecialchars_decode(value);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
src.innerHTML = value;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -389,16 +371,8 @@ export class GeneralUI
|
||||||
return src.getAttribute('data-value');
|
return src.getAttribute('data-value');
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (src.tagName.toLowerCase()) {
|
const tagName = src.tagName.toLowerCase();
|
||||||
case 'td':
|
if (tagName === 'input' || src.getAttribute('value') !== null) {
|
||||||
case 'div':
|
|
||||||
case 'span':
|
|
||||||
case 'pre':
|
|
||||||
case 'article':
|
|
||||||
case 'section':
|
|
||||||
case 'h1':
|
|
||||||
return src.innerText.trim(' ');
|
|
||||||
default:
|
|
||||||
if (src.getAttribute('type') === 'radio') {
|
if (src.getAttribute('type') === 'radio') {
|
||||||
const checked = document.querySelector('input[type=radio][name="' + src.name + '"]:checked');
|
const checked = document.querySelector('input[type=radio][name="' + src.name + '"]:checked');
|
||||||
|
|
||||||
|
|
@ -414,6 +388,10 @@ export class GeneralUI
|
||||||
}
|
}
|
||||||
|
|
||||||
return src.value;
|
return src.value;
|
||||||
|
} else if (tagName === 'select') {
|
||||||
|
return src.options[src.selectedIndex].value;
|
||||||
|
} else {
|
||||||
|
return src.innerText.trim(' ');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -428,18 +406,8 @@ export class GeneralUI
|
||||||
*/
|
*/
|
||||||
static getTextFromDataSource (src)
|
static getTextFromDataSource (src)
|
||||||
{
|
{
|
||||||
switch (src.tagName.toLowerCase()) {
|
const tagName = src.tagName.toLowerCase();
|
||||||
case 'td':
|
if (tagName === 'input') {
|
||||||
case 'div':
|
|
||||||
case 'span':
|
|
||||||
case 'pre':
|
|
||||||
case 'article':
|
|
||||||
case 'section':
|
|
||||||
case 'h1':
|
|
||||||
return src.innerHTML.trim(' ');
|
|
||||||
case 'select':
|
|
||||||
return src.options[src.selectedIndex].text;
|
|
||||||
case 'input':
|
|
||||||
if (src.getAttribute('type') === 'radio') {
|
if (src.getAttribute('type') === 'radio') {
|
||||||
const checked = document.querySelector('input[type=radio][name="' + src.name + '"]:checked');
|
const checked = document.querySelector('input[type=radio][name="' + src.name + '"]:checked');
|
||||||
|
|
||||||
|
|
@ -457,8 +425,12 @@ export class GeneralUI
|
||||||
}
|
}
|
||||||
|
|
||||||
return src.value;
|
return src.value;
|
||||||
default:
|
} else if (tagName === 'select') {
|
||||||
|
return src.options[src.selectedIndex].text;
|
||||||
|
} else if (src.getAttribute('value') !== null) {
|
||||||
return src.value;
|
return src.value;
|
||||||
|
} else {
|
||||||
|
return src.innerHTML.trim(' ');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -533,8 +533,10 @@ export class FormView
|
||||||
} else {
|
} else {
|
||||||
if (typeof elements[i].value !== 'undefined') {
|
if (typeof elements[i].value !== 'undefined') {
|
||||||
value = elements[i].value;
|
value = elements[i].value;
|
||||||
} else if (typeof elements[i].getAttribute('data-value') !== 'undefined') {
|
} else if (elements[i].getAttribute('data-value') !== null) {
|
||||||
value = elements[i].getAttribute('data-value');
|
value = elements[i].getAttribute('data-value');
|
||||||
|
} else {
|
||||||
|
value = elements[i].innerHTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -587,6 +589,10 @@ export class FormView
|
||||||
if (elements[i].getAttribute('data-value') !== null) {
|
if (elements[i].getAttribute('data-value') !== null) {
|
||||||
elements[i].setAttribute('data-value', '');
|
elements[i].setAttribute('data-value', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (elements[i].getAttribute('data-name') !== null) {
|
||||||
|
elements[i].innerHTML = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -632,9 +638,7 @@ export class FormView
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
if (!elements[i].required && elements[i].value === '') {
|
if (!elements[i].required && elements[i].value === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}else if ((elements[i].required && elements[i].value === '')
|
||||||
|
|
||||||
if ((elements[i].required && elements[i].value === '')
|
|
||||||
|| (typeof elements[i].pattern !== 'undefined'
|
|| (typeof elements[i].pattern !== 'undefined'
|
||||||
&& elements[i].pattern !== ''
|
&& elements[i].pattern !== ''
|
||||||
&& !(new RegExp(elements[i].pattern)).test(elements[i].value))
|
&& !(new RegExp(elements[i].pattern)).test(elements[i].value))
|
||||||
|
|
@ -705,10 +709,10 @@ export class FormView
|
||||||
{
|
{
|
||||||
if (e.getAttribute('name') !== null) {
|
if (e.getAttribute('name') !== null) {
|
||||||
return e.getAttribute('name');
|
return e.getAttribute('name');
|
||||||
} else if (e.getAttribute('id') !== null) {
|
|
||||||
return e.getAttribute('id');
|
|
||||||
} else if (e.getAttribute('data-name') !== null) {
|
} else if (e.getAttribute('data-name') !== null) {
|
||||||
return e.getAttribute('data-name');
|
return e.getAttribute('data-name');
|
||||||
|
} else if (e.getAttribute('id') !== null) {
|
||||||
|
return e.getAttribute('id');
|
||||||
} else if (e.getAttribute('type') !== null) {
|
} else if (e.getAttribute('type') !== null) {
|
||||||
return e.getAttribute('type');
|
return e.getAttribute('type');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user