mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-02-14 08:28:40 +00:00
Implement better upload
This commit is contained in:
parent
de82e81d03
commit
8ebd749437
|
|
@ -143,7 +143,7 @@
|
||||||
document.getElementById(id).addEventListener(listener.listener, function (event)
|
document.getElementById(id).addEventListener(listener.listener, function (event)
|
||||||
{
|
{
|
||||||
if (listener.preventDefault) {
|
if (listener.preventDefault) {
|
||||||
event.preventDefault();
|
jsOMS.preventAll(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.runAction(this.id, listener, listener.action[0], event);
|
self.runAction(this.id, listener, listener.action[0], event);
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
*
|
*
|
||||||
|
* @param {object} e Element to bind
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
constructor (e)
|
constructor (e)
|
||||||
|
|
@ -37,6 +39,10 @@
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
this.inputField.addEventListener('focusout', function(e) {
|
this.inputField.addEventListener('focusout', function(e) {
|
||||||
|
// todo: this also means that clicking on any other part of the result list that it disappears befor
|
||||||
|
// the click is registered in the result list since focusout has highest priority (e.g. sort button in table).
|
||||||
|
// so far i don't know a way to check if *any* element in the result div is clicked, if I could check this
|
||||||
|
// first then I could simply say, don't make the result div inactive!
|
||||||
if (e.relatedTarget === null ||
|
if (e.relatedTarget === null ||
|
||||||
e.relatedTarget.parentElement === null ||
|
e.relatedTarget.parentElement === null ||
|
||||||
e.relatedTarget.parentElement.parentElement === null ||
|
e.relatedTarget.parentElement.parentElement === null ||
|
||||||
|
|
@ -52,6 +58,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.keyCode === 40) {
|
if (e.keyCode === 40) {
|
||||||
|
// down-key
|
||||||
self.selectOption(self.dataListBody.firstElementChild);
|
self.selectOption(self.dataListBody.firstElementChild);
|
||||||
jsOMS.preventAll(e);
|
jsOMS.preventAll(e);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -92,7 +99,7 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.dropdownElement.addEventListener('focusout', function(e){
|
this.dropdownElement.addEventListener('focusout', function(e) {
|
||||||
self.clearDataListSelection(self);
|
self.clearDataListSelection(self);
|
||||||
jsOMS.removeClass(self.dropdownElement, 'active');
|
jsOMS.removeClass(self.dropdownElement, 'active');
|
||||||
});
|
});
|
||||||
|
|
@ -108,6 +115,16 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle remote data response result
|
||||||
|
*
|
||||||
|
* This method adds remote results to the dropdown list for selecting
|
||||||
|
*
|
||||||
|
* @param {object} self This reference
|
||||||
|
* @param {object} data Response data
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
remoteCallback(self, data)
|
remoteCallback(self, data)
|
||||||
{
|
{
|
||||||
data = JSON.parse(data.response);
|
data = JSON.parse(data.response);
|
||||||
|
|
@ -148,6 +165,10 @@
|
||||||
|
|
||||||
self.dataListBody.appendChild(newRow);
|
self.dataListBody.appendChild(newRow);
|
||||||
self.dataListBody.lastElementChild.addEventListener('focusout', function(e) {
|
self.dataListBody.lastElementChild.addEventListener('focusout', function(e) {
|
||||||
|
if (e.relatedTarget === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let sibling = e.relatedTarget.parentNode.firstElementChild;
|
let sibling = e.relatedTarget.parentNode.firstElementChild;
|
||||||
do {
|
do {
|
||||||
if (sibling === e.relatedTarget) {
|
if (sibling === e.relatedTarget) {
|
||||||
|
|
@ -160,6 +181,13 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback for input field content change
|
||||||
|
*
|
||||||
|
* @param {object} self This reference
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
changeCallback(self)
|
changeCallback(self)
|
||||||
{
|
{
|
||||||
// if remote data
|
// if remote data
|
||||||
|
|
@ -170,6 +198,13 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select element in dropdown (only mark it as selected)
|
||||||
|
*
|
||||||
|
* @param {object} e Element to select in dropdown
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
selectOption(e)
|
selectOption(e)
|
||||||
{
|
{
|
||||||
e.focus();
|
e.focus();
|
||||||
|
|
@ -178,6 +213,13 @@
|
||||||
jsOMS.addClass(e, 'active');
|
jsOMS.addClass(e, 'active');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear all selected/marked options in dropdown
|
||||||
|
*
|
||||||
|
* @param {object} self This reference
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
clearDataListSelection(self)
|
clearDataListSelection(self)
|
||||||
{
|
{
|
||||||
const list = self.dataListBody.getElementsByTagName('tr'),
|
const list = self.dataListBody.getElementsByTagName('tr'),
|
||||||
|
|
@ -190,6 +232,15 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add selected dropdown elements to some final result list
|
||||||
|
*
|
||||||
|
* This can add the selected dropdown elements to a table, badge list etc. depending on the template structure.
|
||||||
|
*
|
||||||
|
* @param {object} self This reference
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
addToResultList(self) {
|
addToResultList(self) {
|
||||||
if (self.inputField.getAttribute('data-autocomplete') === 'true') {
|
if (self.inputField.getAttribute('data-autocomplete') === 'true') {
|
||||||
self.inputField.value = document.activeElement.querySelectorAll('[data-tpl-value="' + self.inputField.getAttribute('data-value') + '"]')[0].getAttribute('data-value');
|
self.inputField.value = document.activeElement.querySelectorAll('[data-tpl-value="' + self.inputField.getAttribute('data-value') + '"]')[0].getAttribute('data-value');
|
||||||
|
|
@ -240,8 +291,26 @@
|
||||||
|
|
||||||
self.tagElement.appendChild(newTag);
|
self.tagElement.appendChild(newTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self.inputField.getAttribute('data-emptyAfter') === 'true') {
|
||||||
|
self.inputField.value = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
self.inputField.focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay handler (e.g. delay after finishing typing)
|
||||||
|
*
|
||||||
|
* After waiting for a delay a callback can be triggered.
|
||||||
|
*
|
||||||
|
* @param {object} action Action type
|
||||||
|
* @param {function} callback Callback to be triggered
|
||||||
|
* @param {object} self This reference (passed to callback)
|
||||||
|
* @param {object} data Data (passed to callback)
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
inputTimeDelay(action, callback, self, data)
|
inputTimeDelay(action, callback, self, data)
|
||||||
{
|
{
|
||||||
if (jsOMS.UI.Component.AdvancedInput.timerDelay[action.id]) {
|
if (jsOMS.UI.Component.AdvancedInput.timerDelay[action.id]) {
|
||||||
|
|
|
||||||
|
|
@ -176,12 +176,12 @@
|
||||||
this.app.eventManager.attach(form.getId(), function ()
|
this.app.eventManager.attach(form.getId(), function ()
|
||||||
{
|
{
|
||||||
self.submitForm(form);
|
self.submitForm(form);
|
||||||
});
|
}, true);
|
||||||
|
|
||||||
// Run all injects first
|
// Run all injects first
|
||||||
for (let property in injects) {
|
for (let property in injects) {
|
||||||
if (injects.hasOwnProperty(property)) {
|
if (injects.hasOwnProperty(property)) {
|
||||||
counter++;
|
++counter;
|
||||||
//this.app.eventManager.addGroup(form.getId(), counter);
|
//this.app.eventManager.addGroup(form.getId(), counter);
|
||||||
const result = injects[property](form, form.getId());
|
const result = injects[property](form, form.getId());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@
|
||||||
// handle array data (e.g. table rows with same name)
|
// handle array data (e.g. table rows with same name)
|
||||||
const id = jsOMS.Views.FormView.getElementId(elements[i]);
|
const id = jsOMS.Views.FormView.getElementId(elements[i]);
|
||||||
if (data.hasOwnProperty(id)) {
|
if (data.hasOwnProperty(id)) {
|
||||||
if (!data[id].isArray()) {
|
if (data[id].constructor !== Array) {
|
||||||
data[id] = [data[id]];
|
data[id] = [data[id]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -325,15 +325,17 @@
|
||||||
*/
|
*/
|
||||||
static getElementId (e)
|
static getElementId (e)
|
||||||
{
|
{
|
||||||
if (typeof e.getAttribute('name') !== 'undefined') {
|
if (e.getAttribute('name') !== null) {
|
||||||
return e.getAttribute('name');
|
return e.getAttribute('name');
|
||||||
} else if (typeof e.getAttribute('id') !== 'undefined') {
|
} else if (e.getAttribute('id') !== null) {
|
||||||
return e.getAttribute('id');
|
return e.getAttribute('id');
|
||||||
} else if (typeof e.getAttribute('data-name') !== 'undefined') {
|
} else if (e.getAttribute('data-name') !== null) {
|
||||||
return e.getAttribute('data-name');
|
return e.getAttribute('data-name');
|
||||||
} else if (typeof e.getAttribute('type') !== 'undefined') {
|
} else if (e.getAttribute('type') !== null) {
|
||||||
return e.getAttribute('type');
|
return e.getAttribute('type');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw Error("Invalid id");
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user