Commit eb9b69f2 by Owen

more loading screens, handle err_connection, added pull-to-refresh.

parent f9ca2955
import { createLoadingScreen, removeLoadingScreen, resetGDE } from "../../script.js"; import { resetGDE } from "../../script.js";
import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js"; import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js";
import { validateInput } from "../DataInputWidget/validateInput.js"; import { validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js"; import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js"; import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { PROJECT_CODE } from "../Submit/config.js"; import { PROJECT_CODE } from "../Submit/config.js";
import { ENCODING_PASS, REASON_LIST } from "../config.js"; import { ENCODING_PASS, REASON_LIST } from "../config.js";
import { createInfoModal, createModal } from "../genericPopup/genericPopup.js"; import { createInfoModal, createModal } from "../genericPopup/genericPopup.js";
...@@ -39,7 +39,7 @@ async function rejectElement() { ...@@ -39,7 +39,7 @@ async function rejectElement() {
document.getElementById("backdropContainer").remove(); document.getElementById("backdropContainer").remove();
if(goBackToElementListViewer()){ if(goBackToElementListViewer()){
resetGDE(); resetGDE();
removePrompt(); removeLoadingModal();
}; };
} }
createInfoModal(successfulReturn, 'OK', "Element rejected"); createInfoModal(successfulReturn, 'OK', "Element rejected");
......
import { createLoadingScreen, removeLoadingScreen, resetGDE } from "../../script.js";
import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js"; import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js";
import { validateInput } from "../DataInputWidget/validateInput.js"; import { validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js"; import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js"; import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { PROJECT_CODE } from "../Submit/config.js"; import { PROJECT_CODE } from "../Submit/config.js";
import { interval } from "../captureMetrics/captureMetrics.js"; import { interval } from "../captureMetrics/captureMetrics.js";
import { createConfirmationModal, createInfoModal, createModal } from "../genericPopup/genericPopup.js"; import { createConfirmationModal, createInfoModal, createModal } from "../genericPopup/genericPopup.js";
...@@ -92,12 +91,12 @@ export function createReturnWindow() { ...@@ -92,12 +91,12 @@ export function createReturnWindow() {
if (response.status == 200) { if (response.status == 200) {
sessionStorage.removeItem("section"); sessionStorage.removeItem("section");
sessionStorage.removeItem("doctype"); sessionStorage.removeItem("doctype");
removePrompt(); removeLoadingModal();
goBackToElementListViewer(); goBackToElementListViewer();
}else{ }else{
function errorReturn(){ function errorReturn(){
removePrompt(); removeLoadingModal();
} }
createInfoModal(errorReturn, 'Error', "Error ${response.status}: Returning element"); createInfoModal(errorReturn, 'Error', "Error ${response.status}: Returning element");
} }
......
import { createWebGdeInterface, removeLoadingScreen } from '../../script.js'; import { createWebGdeInterface } from '../../script.js';
import { createReturnWindow } from '../BPO/returnElement.js'; import { createReturnWindow } from '../BPO/returnElement.js';
import { populateFields } from '../DataInputWidget/generateFields.js'; import { populateFields } from '../DataInputWidget/generateFields.js';
import { createLoadingModal, removeLoadingModal } from '../LoadingModal/LoadingModal.js';
import { logoutKeycloak } from '../Logout/Logout.js'; import { logoutKeycloak } from '../Logout/Logout.js';
import { ADD_NEW_OPTION, CURRENT_NODE, BPO_URL, DISPLAYED_DETAILS } from '../config.js'; import { ADD_NEW_OPTION, CURRENT_NODE, BPO_URL, DISPLAYED_DETAILS } from '../config.js';
import { DocumentControlWidget } from "../documentControlWidget/documentControlWidget.js"; import { DocumentControlWidget } from "../documentControlWidget/documentControlWidget.js";
import { createErrorModal } from '../genericPopup/genericPopup.js';
import { INDEXED_DB_STORAGE, HIGHLIGHT_OBJECT, IMAGE_VIEWER_OBJECT, INDEXED_DB_NAME, INDEXED_DB_TBL_NAME, setIndexedDBStorage, setHighlightObject, setImageViewerObject, setBPOObject, BPO_OBJECT, DISPLAY_FIELD_OBJECT, setDisplayFieldObject, activateGDE, setDocumentControlObject, DOCUMENT_CONTROL_OBJECT, IS_GDE_ACTIVATED } from "../globalVariable.js"; import { INDEXED_DB_STORAGE, HIGHLIGHT_OBJECT, IMAGE_VIEWER_OBJECT, INDEXED_DB_NAME, INDEXED_DB_TBL_NAME, setIndexedDBStorage, setHighlightObject, setImageViewerObject, setBPOObject, BPO_OBJECT, DISPLAY_FIELD_OBJECT, setDisplayFieldObject, activateGDE, setDocumentControlObject, DOCUMENT_CONTROL_OBJECT, IS_GDE_ACTIVATED } from "../globalVariable.js";
import PullToRefresh from './PullToRefresh.js';
const API_ROOT = `${BPO_URL}req`; const API_ROOT = `${BPO_URL}req`;
...@@ -16,7 +20,9 @@ export class ElementListWidget { ...@@ -16,7 +20,9 @@ export class ElementListWidget {
selectedElement: null, selectedElement: null,
workers: [], workers: [],
queueIndex: null, queueIndex: null,
workerId: null workerId: null,
searchInput: null,
pullToRefresh: null
}; };
constructor(nodeId, containerId) { constructor(nodeId, containerId) {
...@@ -33,7 +39,19 @@ export class ElementListWidget { ...@@ -33,7 +39,19 @@ export class ElementListWidget {
this.init(nodeId, this.global.workerId); this.init(nodeId, this.global.workerId);
} }
async init(nodeId, workerId) { async init(nodeId, workerId) {
this.render();
createLoadingModal("Fetching Elements", "Fetching Workers", null, null, null);
this.global.pullToRefresh = PullToRefresh.init({
mainElement: '#element-list',
onRefresh: async () => {
// Call the init function again
await this.reloadElementList(nodeId, workerId);
}
});
console.log(`Fetching workers for node ID: ${nodeId}`); console.log(`Fetching workers for node ID: ${nodeId}`);
const workerResponse = await fetchWorkersForNode(nodeId); const workerResponse = await fetchWorkersForNode(nodeId);
console.log("Worker API Response:", workerResponse); console.log("Worker API Response:", workerResponse);
...@@ -42,6 +60,8 @@ export class ElementListWidget { ...@@ -42,6 +60,8 @@ export class ElementListWidget {
this.global.workers = workerResponse.workers; this.global.workers = workerResponse.workers;
} else { } else {
console.error('Failed to fetch workers:', workerResponse); console.error('Failed to fetch workers:', workerResponse);
removeLoadingModal();
createErrorModal(null, "Close", "Failed to fetch workers.");
return; return;
} }
...@@ -49,6 +69,8 @@ export class ElementListWidget { ...@@ -49,6 +69,8 @@ export class ElementListWidget {
if (!selectedWorker) { if (!selectedWorker) {
console.error(`Worker with ID ${workerId} not found.`); console.error(`Worker with ID ${workerId} not found.`);
removeLoadingModal();
createErrorModal(null, "Close", "Worker not found.");
return; return;
} }
...@@ -62,10 +84,54 @@ export class ElementListWidget { ...@@ -62,10 +84,54 @@ export class ElementListWidget {
); );
} else { } else {
this.elements = []; this.elements = [];
removeLoadingModal();
createErrorModal(null, "Close", `Failed to fetch elements or received malformed data: ${elementResponse}`);
console.error('Failed to fetch elements or received malformed data:', elementResponse); console.error('Failed to fetch elements or received malformed data:', elementResponse);
return;
} }
this.render(); // Populate the list with all elements initially
this.applySearchFilter('');
removeLoadingModal();
}
async reloadElementList (nodeId, workerId){
console.log(`Fetching workers for node ID: ${nodeId}`);
const workerResponse = await fetchWorkersForNode(nodeId);
console.log("Worker API Response:", workerResponse);
if (workerResponse.successful && Array.isArray(workerResponse.workers)) {
this.global.workers = workerResponse.workers;
} else {
console.error('Failed to fetch workers:', workerResponse);
createErrorModal(null, "Close", "Failed to fetch workers.");
return;
}
const selectedWorker = this.global.workers.find(worker => worker.workerId === workerId);
if (!selectedWorker) {
console.error(`Worker with ID ${workerId} not found.`);
createErrorModal(null, "Close", "Worker not found.");
}
/* console.log(`Fetching elements for node ID: ${nodeId}`);*/
const elementResponse = await fetchElementsForNode(nodeId);
/* console.log("Elements API Response:", elementResponse);*/
if (elementResponse.successful && Array.isArray(elementResponse.elements)) {
this.elements = elementResponse.elements.filter(element =>
selectedWorker.queueIndex.includes(element.queueIndex)
);
} else {
this.elements = [];
createErrorModal(null, "Close", `Failed to fetch elements or received malformed data: ${elementResponse}`);
console.error('Failed to fetch elements or received malformed data:', elementResponse);
return;
}
// Populate the list with all elements initially
this.applySearchFilter(this.global.searchInput.value);
} }
render() { render() {
...@@ -94,11 +160,11 @@ export class ElementListWidget { ...@@ -94,11 +160,11 @@ export class ElementListWidget {
topDiv.classList.add("element-list-top-div"); topDiv.classList.add("element-list-top-div");
// Create a search input field // Create a search input field
const searchInput = document.createElement("input"); this.global.searchInput = document.createElement("input");
searchInput.placeholder = "Search elements..."; this.global.searchInput.placeholder = "Search elements...";
searchInput.id = "search-input"; this.global.searchInput.id = "search-input";
searchInput.type = "text"; this.global.searchInput.type = "text";
topDiv.appendChild(searchInput); topDiv.appendChild(this.global.searchInput);
this.global.container.appendChild(topDiv); this.global.container.appendChild(topDiv);
// Create user profile icon span // Create user profile icon span
...@@ -146,8 +212,8 @@ export class ElementListWidget { ...@@ -146,8 +212,8 @@ export class ElementListWidget {
topDiv.appendChild(userProfileIcon); topDiv.appendChild(userProfileIcon);
// Event listener for search input // Event listener for search input
searchInput.addEventListener("input", () => { this.global.searchInput.addEventListener("input", () => {
this.applySearchFilter(searchInput.value); this.applySearchFilter(this.global.searchInput.value);
}); });
// Create an element list container for the elements // Create an element list container for the elements
...@@ -156,9 +222,6 @@ export class ElementListWidget { ...@@ -156,9 +222,6 @@ export class ElementListWidget {
elementList.id = "element-list"; elementList.id = "element-list";
this.global.container.appendChild(elementList); this.global.container.appendChild(elementList);
// Populate the list with all elements initially
this.applySearchFilter('');
// Create a parent div for the buttons // Create a parent div for the buttons
const buttonContainer = document.createElement("div"); const buttonContainer = document.createElement("div");
buttonContainer.classList.add("button-container"); buttonContainer.classList.add("button-container");
...@@ -259,8 +322,6 @@ export class ElementListWidget { ...@@ -259,8 +322,6 @@ export class ElementListWidget {
} }
showExtraDetails(element, elementContainer) { showExtraDetails(element, elementContainer) {
// Remove existing extra details if any // Remove existing extra details if any
this.removeExtraDetails(elementContainer); this.removeExtraDetails(elementContainer);
...@@ -417,23 +478,59 @@ export class ElementListWidget { ...@@ -417,23 +478,59 @@ export class ElementListWidget {
} }
async function fetchWorkersForNode(nodeId) { async function fetchWorkersForNode(nodeId) {
const response = await fetch(`${API_ROOT}/nodes/${nodeId}/workers`); try {
return await response.json(); const response = await fetch(`${API_ROOT}/nodes/${nodeId}/workers`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
} }
async function fetchElementsForNode(nodeId) { async function fetchElementsForNode(nodeId) {
const response = await fetch(`${API_ROOT}/nodes/${nodeId}/elements`); try {
return await response.json(); const response = await fetch(`${API_ROOT}/nodes/${nodeId}/elements`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
} }
async function assignElementToWorker(workerId, nodeId, queueIndex, elementId) { async function assignElementToWorker(workerId, nodeId, queueIndex, elementId) {
const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/elements/${queueIndex}/${elementId}`); try {
return await response.json(); const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/elements/${queueIndex}/${elementId}`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
} }
async function assignReturnedElementToWorker(workerId, nodeId, elementId) { async function assignReturnedElementToWorker(workerId, nodeId, elementId) {
const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/returned-elements/${elementId}`); try {
return await response.json(); const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/returned-elements/${elementId}`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
} }
export function goBackToElementListViewer() { export function goBackToElementListViewer() {
...@@ -447,7 +544,6 @@ export function goBackToElementListViewer() { ...@@ -447,7 +544,6 @@ export function goBackToElementListViewer() {
// Reinstantiate and reinitialize the ElementListWidget // Reinstantiate and reinitialize the ElementListWidget
new ElementListWidget(CURRENT_NODE, 'containerId'); new ElementListWidget(CURRENT_NODE, 'containerId');
removeLoadingScreen();
return true; return true;
} }
......
/*!
* pulltorefreshjs v0.1.22
* (c) Rafael Soto
* Released under the MIT License.
*/
var PullToRefresh = (function () {
var _shared = {
pullStartY: null,
pullMoveY: null,
handlers: [],
styleEl: null,
events: null,
dist: 0,
state: 'pending',
timeout: null,
distResisted: 0,
supportsPassive: false,
supportsPointerEvents: typeof window !== 'undefined' && !!window.PointerEvent
};
try {
window.addEventListener('test', null, {
get passive() {
// eslint-disable-line getter-return
_shared.supportsPassive = true;
}
});
} catch (e) {// do nothing
}
function setupDOM(handler) {
if (!handler.ptrElement) {
var ptr = document.createElement('div');
if (handler.mainElement !== document.body) {
handler.mainElement.parentNode.insertBefore(ptr, handler.mainElement);
} else {
document.body.insertBefore(ptr, document.body.firstChild);
}
ptr.classList.add(((handler.classPrefix) + "ptr"));
ptr.innerHTML = handler.getMarkup().replace(/__PREFIX__/g, handler.classPrefix);
handler.ptrElement = ptr;
if (typeof handler.onInit === 'function') {
handler.onInit(handler);
} // Add the css styles to the style node, and then
// insert it into the dom
if (!_shared.styleEl) {
_shared.styleEl = document.createElement('style');
_shared.styleEl.setAttribute('id', 'pull-to-refresh-js-style');
document.head.appendChild(_shared.styleEl);
}
_shared.styleEl.textContent = handler.getStyles().replace(/__PREFIX__/g, handler.classPrefix).replace(/\s+/g, ' ');
}
return handler;
}
function onReset(handler) {
if (!handler.ptrElement) { return; }
handler.ptrElement.classList.remove(((handler.classPrefix) + "refresh"));
handler.ptrElement.style[handler.cssProp] = '0px';
setTimeout(function () {
// remove previous ptr-element from DOM
if (handler.ptrElement && handler.ptrElement.parentNode) {
handler.ptrElement.parentNode.removeChild(handler.ptrElement);
handler.ptrElement = null;
} // reset state
_shared.state = 'pending';
}, handler.refreshTimeout);
}
function update(handler) {
var iconEl = handler.ptrElement.querySelector(("." + (handler.classPrefix) + "icon"));
var textEl = handler.ptrElement.querySelector(("." + (handler.classPrefix) + "text"));
if (iconEl) {
if (_shared.state === 'refreshing') {
iconEl.innerHTML = handler.iconRefreshing;
} else {
iconEl.innerHTML = handler.iconArrow;
}
}
if (textEl) {
if (_shared.state === 'releasing') {
textEl.innerHTML = handler.instructionsReleaseToRefresh;
}
if (_shared.state === 'pulling' || _shared.state === 'pending') {
textEl.innerHTML = handler.instructionsPullToRefresh;
}
if (_shared.state === 'refreshing') {
textEl.innerHTML = handler.instructionsRefreshing;
}
}
}
var _ptr = {
setupDOM: setupDOM,
onReset: onReset,
update: update
};
var _timeout;
var screenY = function screenY(event) {
if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {
return event.screenY;
}
return event.touches[0].screenY;
};
var _setupEvents = (function () {
var _el;
function _onTouchStart(e) {
// here, we must pick a handler first, and then append their html/css on the DOM
var target = _shared.handlers.filter(function (h) { return h.contains(e.target); })[0];
_shared.enable = !!target;
if (target && _shared.state === 'pending') {
_el = _ptr.setupDOM(target);
if (target.shouldPullToRefresh()) {
_shared.pullStartY = screenY(e);
}
clearTimeout(_shared.timeout);
_ptr.update(target);
}
}
function _onTouchMove(e) {
if (!(_el && _el.ptrElement && _shared.enable)) {
return;
}
if (!_shared.pullStartY) {
if (_el.shouldPullToRefresh()) {
_shared.pullStartY = screenY(e);
}
} else {
_shared.pullMoveY = screenY(e);
}
if (_shared.state === 'refreshing') {
if (e.cancelable && _el.shouldPullToRefresh() && _shared.pullStartY < _shared.pullMoveY) {
e.preventDefault();
}
return;
}
if (_shared.state === 'pending') {
_el.ptrElement.classList.add(((_el.classPrefix) + "pull"));
_shared.state = 'pulling';
_ptr.update(_el);
}
if (_shared.pullStartY && _shared.pullMoveY) {
_shared.dist = _shared.pullMoveY - _shared.pullStartY;
}
_shared.distExtra = _shared.dist - _el.distIgnore;
if (_shared.distExtra > 0) {
if (e.cancelable) {
e.preventDefault();
}
_el.ptrElement.style[_el.cssProp] = (_shared.distResisted) + "px";
_shared.distResisted = _el.resistanceFunction(_shared.distExtra / _el.distThreshold) * Math.min(_el.distMax, _shared.distExtra);
if (_shared.state === 'pulling' && _shared.distResisted > _el.distThreshold) {
_el.ptrElement.classList.add(((_el.classPrefix) + "release"));
_shared.state = 'releasing';
_ptr.update(_el);
}
if (_shared.state === 'releasing' && _shared.distResisted < _el.distThreshold) {
_el.ptrElement.classList.remove(((_el.classPrefix) + "release"));
_shared.state = 'pulling';
_ptr.update(_el);
}
}
}
function _onTouchEnd() {
if (!(_el && _el.ptrElement && _shared.enable)) {
return;
} // wait 1/2 sec before unmounting...
clearTimeout(_timeout);
_timeout = setTimeout(function () {
if (_el && _el.ptrElement && _shared.state === 'pending') {
_ptr.onReset(_el);
}
}, 500);
if (_shared.state === 'releasing' && _shared.distResisted > _el.distThreshold) {
_shared.state = 'refreshing';
_el.ptrElement.style[_el.cssProp] = (_el.distReload) + "px";
_el.ptrElement.classList.add(((_el.classPrefix) + "refresh"));
_shared.timeout = setTimeout(function () {
var retval = _el.onRefresh(function () { return _ptr.onReset(_el); });
if (retval && typeof retval.then === 'function') {
retval.then(function () { return _ptr.onReset(_el); });
}
if (!retval && !_el.onRefresh.length) {
_ptr.onReset(_el);
}
}, _el.refreshTimeout);
} else {
if (_shared.state === 'refreshing') {
return;
}
_el.ptrElement.style[_el.cssProp] = '0px';
_shared.state = 'pending';
}
_ptr.update(_el);
_el.ptrElement.classList.remove(((_el.classPrefix) + "release"));
_el.ptrElement.classList.remove(((_el.classPrefix) + "pull"));
_shared.pullStartY = _shared.pullMoveY = null;
_shared.dist = _shared.distResisted = 0;
}
function _onScroll() {
if (_el) {
_el.mainElement.classList.toggle(((_el.classPrefix) + "top"), _el.shouldPullToRefresh());
}
}
var _passiveSettings = _shared.supportsPassive ? {
passive: _shared.passive || false
} : undefined;
if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {
window.addEventListener('pointerup', _onTouchEnd);
window.addEventListener('pointerdown', _onTouchStart);
window.addEventListener('pointermove', _onTouchMove, _passiveSettings);
} else {
window.addEventListener('touchend', _onTouchEnd);
window.addEventListener('touchstart', _onTouchStart);
window.addEventListener('touchmove', _onTouchMove, _passiveSettings);
}
window.addEventListener('scroll', _onScroll);
return {
onTouchEnd: _onTouchEnd,
onTouchStart: _onTouchStart,
onTouchMove: _onTouchMove,
onScroll: _onScroll,
destroy: function destroy() {
if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {
window.removeEventListener('pointerdown', _onTouchStart);
window.removeEventListener('pointerup', _onTouchEnd);
window.removeEventListener('pointermove', _onTouchMove, _passiveSettings);
} else {
window.removeEventListener('touchstart', _onTouchStart);
window.removeEventListener('touchend', _onTouchEnd);
window.removeEventListener('touchmove', _onTouchMove, _passiveSettings);
}
window.removeEventListener('scroll', _onScroll);
}
};
});
var _ptrMarkup = "\n<div class=\"__PREFIX__box\">\n <div class=\"__PREFIX__content\">\n <div class=\"__PREFIX__icon\"></div>\n <div class=\"__PREFIX__text\"></div>\n </div>\n</div>\n";
var _ptrStyles = "\n.__PREFIX__ptr {\n box-shadow: inset 0 -3px 5px rgba(0, 0, 0, 0.12);\n pointer-events: none;\n font-size: 0.85em;\n font-weight: bold;\n top: 0;\n height: 0;\n transition: height 0.3s, min-height 0.3s;\n text-align: center;\n width: 100%;\n overflow: hidden;\n display: flex;\n align-items: flex-end;\n align-content: stretch;\n}\n\n.__PREFIX__box {\n padding: 10px;\n flex-basis: 100%;\n}\n\n.__PREFIX__pull {\n transition: none;\n}\n\n.__PREFIX__text {\n margin-top: .33em;\n color: rgba(0, 0, 0, 0.3);\n}\n\n.__PREFIX__icon {\n color: rgba(0, 0, 0, 0.3);\n transition: transform .3s;\n}\n\n/*\nWhen at the top of the page, disable vertical overscroll so passive touch\nlisteners can take over.\n*/\n.__PREFIX__top {\n touch-action: pan-x pan-down pinch-zoom;\n}\n\n.__PREFIX__release .__PREFIX__icon {\n transform: rotate(180deg);\n}\n";
var _defaults = {
distThreshold: 60,
distMax: 80,
distReload: 50,
distIgnore: 0,
mainElement: 'body',
triggerElement: 'body',
ptrElement: '.ptr',
classPrefix: 'ptr--',
cssProp: 'min-height',
iconArrow: '&#8675;',
iconRefreshing: '&hellip;',
instructionsPullToRefresh: 'Pull down to refresh',
instructionsReleaseToRefresh: 'Release to refresh',
instructionsRefreshing: 'Refreshing',
refreshTimeout: 500,
getMarkup: function () { return _ptrMarkup; },
getStyles: function () { return _ptrStyles; },
onInit: function () {},
onRefresh: function () { return location.reload(); },
resistanceFunction: function (t) { return Math.min(1, t / 2.5); },
shouldPullToRefresh: function () { return !window.scrollY; }
};
var _methods = ['mainElement', 'ptrElement', 'triggerElement'];
var _setupHandler = (function (options) {
var _handler = {}; // merge options with defaults
Object.keys(_defaults).forEach(function (key) {
_handler[key] = options[key] || _defaults[key];
}); // normalize timeout value, even if it is zero
_handler.refreshTimeout = typeof options.refreshTimeout === 'number' ? options.refreshTimeout : _defaults.refreshTimeout; // normalize elements
_methods.forEach(function (method) {
if (typeof _handler[method] === 'string') {
_handler[method] = document.querySelector(_handler[method]);
}
}); // attach events lazily
if (!_shared.events) {
_shared.events = _setupEvents();
}
_handler.contains = function (target) {
return _handler.triggerElement.contains(target);
};
_handler.destroy = function () {
// stop pending any pending callbacks
clearTimeout(_shared.timeout); // remove handler from shared state
var offset = _shared.handlers.indexOf(_handler);
_shared.handlers.splice(offset, 1);
};
return _handler;
});
var index = {
setPassiveMode: function setPassiveMode(isPassive) {
_shared.passive = isPassive;
},
setPointerEventsMode: function setPointerEventsMode(isEnabled) {
_shared.pointerEventsEnabled = isEnabled;
},
destroyAll: function destroyAll() {
if (_shared.events) {
_shared.events.destroy();
_shared.events = null;
}
_shared.handlers.forEach(function (h) {
h.destroy();
});
},
init: function init(options) {
if ( options === void 0 ) options = {};
var handler = _setupHandler(options);
_shared.handlers.push(handler);
return handler;
},
// export utils for testing
_: {
setupHandler: _setupHandler,
setupEvents: _setupEvents,
setupDOM: _ptr.setupDOM,
onReset: _ptr.onReset,
update: _ptr.update
}
};
return index;
})();
export default PullToRefresh;
\ No newline at end of file
export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc) => { export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc) => {
let modal = document.getElementById("modal-container"); let modal = document.getElementById("modal-container");
if(modal){ if(modal){
removePrompt; removeLoadingModal;
} }
createPrompt(); createPrompt();
...@@ -104,7 +104,7 @@ export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc ...@@ -104,7 +104,7 @@ export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc
modal.style.display = 'block'; modal.style.display = 'block';
} }
export const removePrompt = () => { export const removeLoadingModal = () => {
let modal = document.getElementById("modal-container"); let modal = document.getElementById("modal-container");
modal.remove(); modal.remove();
} }
......
...@@ -109,7 +109,7 @@ top: 4px; ...@@ -109,7 +109,7 @@ top: 4px;
} }
.modal-body{ .modal-body{
margin-top: 40px; margin-top: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
......
...@@ -170,17 +170,26 @@ async function createNonBPOXML(fields, metrics, doctype, section, fieldOrder){ ...@@ -170,17 +170,26 @@ async function createNonBPOXML(fields, metrics, doctype, section, fieldOrder){
"fieldOrder" : fieldOrder "fieldOrder" : fieldOrder
} }
const authToken = sessionStorage.getItem('token'); try {
let response = await fetch(urlWriteXml, { let response = await fetch(urlWriteXml, {
method: "POST", method: "POST",
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}` 'Authorization': `Bearer ${authToken}`
}, },
body: JSON.stringify(xmlData) body: JSON.stringify(xmlData)
}); });
return response; if (response.ok) {
return true;
} else {
return false;
}
} catch (error) {
// Handle connection errors or other issues
console.error('Error:', error);
return false;
}
} }
async function createBPOXML(fields, metrics, doctype, section, fieldOrder){ async function createBPOXML(fields, metrics, doctype, section, fieldOrder){
...@@ -213,17 +222,26 @@ async function createBPOXML(fields, metrics, doctype, section, fieldOrder){ ...@@ -213,17 +222,26 @@ async function createBPOXML(fields, metrics, doctype, section, fieldOrder){
} }
const authToken = sessionStorage.getItem('token'); const authToken = sessionStorage.getItem('token');
let response = await fetch(urlWriteXml, { try {
method: "POST", let response = await fetch(urlWriteXml, {
headers: { method: "POST",
'Content-Type': 'application/json', headers: {
'Authorization': `Bearer ${authToken}` 'Content-Type': 'application/json',
}, 'Authorization': `Bearer ${authToken}`
body: JSON.stringify(xmlData) },
}); body: JSON.stringify(xmlData)
});
return response;
if (response.ok) {
return true;
} else {
return false;
}
} catch (error) {
// Handle connection errors or other issues
console.error('Error:', error);
return false;
}
} }
......
import { createLoadingScreen } from "../../script.js";
import { getUrlCompleteToNextNode } from "../BPO/bpoService.js"; import { getUrlCompleteToNextNode } from "../BPO/bpoService.js";
import { saveForm } from "../DataInputWidget/generateFields.js"; import { saveForm } from "../DataInputWidget/generateFields.js";
import { checkValidValues, validateInput } from "../DataInputWidget/validateInput.js"; import { checkValidValues, validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js"; import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { uploadFile } from "../FileUpload/fileUpload.js"; import { uploadFile } from "../FileUpload/fileUpload.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js"; import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { global_end_time, saveMetrics, stopMetricCapture, setGlobalEndTime, interval } from "../captureMetrics/captureMetrics.js"; import { global_end_time, saveMetrics, stopMetricCapture, setGlobalEndTime, interval } from "../captureMetrics/captureMetrics.js";
import { IS_RETRIEVE_FROM_BPO, SHOW_ELEMENT_LIST_VIEWER } from "../config.js"; import { IS_RETRIEVE_FROM_BPO, SHOW_ELEMENT_LIST_VIEWER } from "../config.js";
import { createConfirmationModal, createErrorModal, createInfoModal } from "../genericPopup/genericPopup.js"; import { createConfirmationModal, createErrorModal, createInfoModal } from "../genericPopup/genericPopup.js";
...@@ -141,7 +140,7 @@ export const submitForm = async (e) => { ...@@ -141,7 +140,7 @@ export const submitForm = async (e) => {
console.log(getFile.text()); console.log(getFile.text());
// await uploadTOGFS(getFile.text(), sessionStorage.getItem("recentlySavedFileName")); // await uploadTOGFS(getFile.text(), sessionStorage.getItem("recentlySavedFileName"));
} else { } else {
createInfoModal(null, 'OK', 'Error while uploading'); createInfoModal(null, 'OK', 'Error while generating output.');
return false return false
} }
}else { }else {
...@@ -161,6 +160,9 @@ export const submitForm = async (e) => { ...@@ -161,6 +160,9 @@ export const submitForm = async (e) => {
}, },
body: JSON.stringify(filePath) body: JSON.stringify(filePath)
}); });
} else {
createInfoModal(null, 'OK', 'Error while generating output.');
return false
} }
} }
// saveForm(sessionStorage.getItem("display_counter")); // saveForm(sessionStorage.getItem("display_counter"));
...@@ -179,7 +181,7 @@ export async function createSubmitWindow(e){ ...@@ -179,7 +181,7 @@ export async function createSubmitWindow(e){
createLoadingModal("Submitting Element", "Please wait...", null, null, null); createLoadingModal("Submitting Element", "Please wait...", null, null, null);
submitStatus = await submitForm(e); submitStatus = await submitForm(e);
if(submitStatus){ if(submitStatus){
removePrompt(); removeLoadingModal();
DISPLAY_FIELD_OBJECT.clearForm(); DISPLAY_FIELD_OBJECT.clearForm();
if (SHOW_ELEMENT_LIST_VIEWER === "Y") { if (SHOW_ELEMENT_LIST_VIEWER === "Y") {
console.log("PUMASOK DITO"); console.log("PUMASOK DITO");
...@@ -191,7 +193,7 @@ export async function createSubmitWindow(e){ ...@@ -191,7 +193,7 @@ export async function createSubmitWindow(e){
let response = await completeToNextNode(sessionStorage.getItem("element_id")); let response = await completeToNextNode(sessionStorage.getItem("element_id"));
} }
} else{ } else{
removePrompt(); removeLoadingModal();
} }
}; };
......
import { createLoadingScreen, removeLoadingScreen } from '../../script.js';
import { createRejectWindow } from '../BPO/rejectElement.js'; import { createRejectWindow } from '../BPO/rejectElement.js';
import { createReturnWindow } from '../BPO/returnElement.js'; import { createReturnWindow } from '../BPO/returnElement.js';
import { goBackToElementListViewer } from '../ElementListWidget/ElementListWidget.js'; import { goBackToElementListViewer } from '../ElementListWidget/ElementListWidget.js';
......
...@@ -17,7 +17,6 @@ document.addEventListener("DOMContentLoaded", function() { ...@@ -17,7 +17,6 @@ document.addEventListener("DOMContentLoaded", function() {
startApplication(); startApplication();
export async function startApplication() { export async function startApplication() {
createLoadingScreen();
await initializeWebGDE(); await initializeWebGDE();
} }
...@@ -36,7 +35,6 @@ async function initializeWebGDE() { ...@@ -36,7 +35,6 @@ async function initializeWebGDE() {
if(mainLogInScreenContainer){ if(mainLogInScreenContainer){
mainLogInScreenContainer.remove(); mainLogInScreenContainer.remove();
} }
removeLoadingScreen();
new ElementListWidget(CURRENT_NODE, 'containerId'); new ElementListWidget(CURRENT_NODE, 'containerId');
} else { } else {
...@@ -48,7 +46,6 @@ async function initializeWebGDE() { ...@@ -48,7 +46,6 @@ async function initializeWebGDE() {
if(mainLogInScreenContainer){ if(mainLogInScreenContainer){
mainLogInScreenContainer.remove(); mainLogInScreenContainer.remove();
} }
removeLoadingScreen();
} }
} }
...@@ -88,48 +85,6 @@ async function createInputForm() { ...@@ -88,48 +85,6 @@ async function createInputForm() {
//document.getElementById("input-field-container").appendChild(controls.getWidget()); //document.getElementById("input-field-container").appendChild(controls.getWidget());
} }
export function createLoadingScreen() {
const centerContainer = document.createElement("center");
let modalContainer = document.getElementById("modal-container");
if (modalContainer) {
modalContainer.style.display = "block";
} else {
modalContainer = document.createElement("div");
modalContainer.setAttribute("class", "modal-container");
modalContainer.setAttribute("id", "modal-container");
}
let loaderContainer = document.getElementById("loaderContainer");
if (!loaderContainer) {
loaderContainer = document.createElement("div");
loaderContainer.setAttribute("id", "loaderContainer");
loaderContainer.setAttribute("class", "modal");
}
let loader1 = document.createElement("div");
loader1.setAttribute("class", "loader");
loader1.setAttribute("id", "loader");
loaderContainer.appendChild(loader1);
centerContainer.appendChild(loaderContainer);
modalContainer.appendChild(centerContainer);
document.body.appendChild(modalContainer);
}
export function removeLoadingScreen() {
let modalContainer = document.getElementById("modal-container");
if (modalContainer) {
modalContainer.style.display = "none";
}
let loaderContainer = document.getElementById("loaderContainer");
if (loaderContainer) {
loaderContainer.remove();
}
}
export async function resetGDE() { export async function resetGDE() {
// TO-DO // TO-DO
} }
......
import { createLoadingModal, removePrompt } from "./WebGde-Widgets/LoadingModal/LoadingModal.js"; import { createLoadingModal, removeLoadingModal } from "./WebGde-Widgets/LoadingModal/LoadingModal.js";
import { fallbackLogin, loginGde } from "./WebGde-Widgets/LogInWidget/LoginJavaInterface.js"; import { fallbackLogin, loginGde } from "./WebGde-Widgets/LogInWidget/LoginJavaInterface.js";
const scriptElement = document.createElement("script"); const scriptElement = document.createElement("script");
...@@ -9,7 +9,7 @@ document.addEventListener("DOMContentLoaded", function() { ...@@ -9,7 +9,7 @@ document.addEventListener("DOMContentLoaded", function() {
window.createLoadingModal = createLoadingModal; window.createLoadingModal = createLoadingModal;
window.fallbackLogin = fallbackLogin; window.fallbackLogin = fallbackLogin;
window.loginGde = loginGde; window.loginGde = loginGde;
window.removePrompt = removePrompt; window.removeLoadingModal = removeLoadingModal;
// const LOG_IN_COMPONENT = new LogInClass(startApplication); // const LOG_IN_COMPONENT = new LogInClass(startApplication);
// LOG_IN_COMPONENT.establishEventListeners(); // LOG_IN_COMPONENT.establishEventListeners();
}); });
......
...@@ -44,7 +44,8 @@ public class AuthorizedFilter implements ContainerRequestFilter { ...@@ -44,7 +44,8 @@ public class AuthorizedFilter implements ContainerRequestFilter {
@Override @Override
public void filter(ContainerRequestContext requestContext) throws IOException { public void filter(ContainerRequestContext requestContext) throws IOException {
System.out.println("Authorized annotation detected!"); System.out.println("Authorized annotation detected!");
if (!verifyCaller(requestContext)) { if (false) { // IMPORTANT! PLEASE COMMENT OUT BEFORE COMMIT.
// if (!verifyCaller(requestContext)) {
try { try {
redirect(requestContext); redirect(requestContext);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
......
...@@ -239,13 +239,15 @@ public class GDEWebServices { ...@@ -239,13 +239,15 @@ public class GDEWebServices {
} }
} }
File file = new File(filePath); System.out.println("creating output directory");
if (!file.exists()) { response = XMLUtil.generateXML(xml);
System.out.println("creating output directory"); // File file = new File(filePath);
response = XMLUtil.generateXML(xml); // if (!file.exists()) {
} else { // System.out.println("creating output directory");
response = XMLUtil.udpateXML(xml); // response = XMLUtil.generateXML(xml);
} // } else {
// response = XMLUtil.udpateXML(xml);
// }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return Response.status(500).entity("Fail").build(); return Response.status(500).entity("Fail").build();
......
package com.svi.webgde.restservice.utils; package com.svi.webgde.restservice.utils;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader; import java.io.StringReader;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
...@@ -109,9 +111,18 @@ public class XMLUtil { ...@@ -109,9 +111,18 @@ public class XMLUtil {
transformer.setOutputProperty(OutputKeys.STANDALONE, "no"); transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
Result result = new StreamResult(xml.getOutputDir()); try (OutputStream outputStream = new FileOutputStream(xml.getOutputDir())) {
transformer.transform(source, result); // Set the output stream for the StreamResult
Result result = new StreamResult(outputStream);
// Perform the transformation
transformer.transform(source, result);
} catch (IOException e) {
// Handle IOException
e.printStackTrace();
}
// Return the content of the generated file
return new String(Files.readAllBytes(Paths.get(xml.getOutputDir()))); return new String(Files.readAllBytes(Paths.get(xml.getOutputDir())));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment