Source: app-wrapper/js/appState.js
/**
* @fileOverview AppState app wrapper file
* @author Dino Ivankov <dinoivankov@gmail.com>
* @version 1.3.1
*/
/**
* WindowState Object that contains current window state variables
* @typedef {Object} WindowState
*
* @property {string} title Window title
* @property {string} position Window position ('center')
* @property {Integer} x Window x coordinate
* @property {Integer} y Window y coordinate
* @property {Integer} width Window width
* @property {Integer} height Window height
* @property {Boolean} maximized Flag to indicate whether window is maximized
* @property {Boolean} devTools Flag to indicate whether window has devTools opened
* @property {Boolean} showInTaskbar Flag to indicate whether window should be shown in taskbar
* @property {Boolean} resizable Flag to indicate whether window is resizable
* @property {Boolean} menu Flag to indicate whether window has menu
* @property {Boolean} icon Flag to indicate whether window has icon
* @property {Boolean} transparent Flag to indicate whether window is transparent
* @property {Boolean} show Flag to indicate whether window is displayed by default
* @property {Boolean} kiosk Flag to indicate whether window is in kiosk mode
* @property {Boolean} frame Flag to indicate whether window has frame
* @property {Boolean} fullscreen Flag to indicate whether window is in fullscreen
*/
/**
* StatusData Object that contains current app status variables
* @typedef {Object} StatusData
*
* @property {Boolean} appLoaded Flag to indicate whether app has been loaded
* @property {Boolean} appReady Flag to indicate whether app is ready
* @property {Boolean} appInitialized Flag to indicate whether app has been initialized
* @property {Boolean} appShuttingDown Flag to indicate whether app is shutting down
* @property {Boolean} appBusy Flag to indicate whether app is busy
* @property {string} appStatus Current app indicator status (idle, busy, success, working, offline, error)
* @property {Boolean} appStatusChanging Flag to indicate whether app status is changing
* @property {Boolean} languageInitialized Flag to indicate whether languages and translation system has been initialized
* @property {Boolean} feAppInitialized Flag to indicate whether frontend app is initalized
* @property {Boolean} windowMaximized Flag to indicate whether window is maximized
* @property {Boolean} devToolsOpened Flag to indicate whether dev tools are opened
* @property {Boolean} movingWindow Flag to indicate whether window is being moved
* @property {Boolean} ctrlPressed Flag to indicate whether ctrl/cmd button is pressed
* @property {Boolean} shiftPressed Flag to indicate whether shift button is pressed
* @property {Boolean} altPressed Flag to indicate whether alt button is pressed
* @property {Boolean} noHandlingKeys Flag to indicate whether to listen to key events for app shortcuts
* @property {Boolean} windowFocused Flag to indicate whether window is focused
*/
/**
* ErrorData Object that contains app error data
* @typedef {Object} ErrorData
*
* @property {Boolean} error Flag to indicate whether app has error
* @property {Boolean} userMessages Flag to indicate whether app-error component should display user messages
* @property {string} defaultTitle Default app-error component title
* @property {string} defaultText Default app-error component text
* @property {string} title Current app-error component title
* @property {string} text Current app-error component text
* @property {string} component Custom app-error component name
*/
/**
* OperationData Object that contains app operation data
* @typedef {Object} OperationData
*
* @property {Boolean} cancelable Flag to indicate whether operation is cancelable
* @property {Boolean} cancelling Flag to indicate whether operation is being cancelled
* @property {Boolean} cancelled Flag to indicate whether operation is cancelled
* @property {Boolean} operationActive Flag to indicate whether operation is active
* @property {Boolean} operationVisible Flag to indicate whether operation is visible
* @property {Boolean} appBusy Flag to indicate whether app status should be set to busy
* @property {Boolean} useProgress Flag to indicate whether to use progress bar for operation
* @property {Integer} operationStartedTimestamp Operation start timestamp
* @property {string} operationText Operation text
* @property {string} progressText Progress bar text
* @property {string} operationId Unique operation ID
* @property {Boolean} notify Flag to indicate whether user should be notified when operation finishes
* @property {Boolean} hideLiveInfo Flag that controls live-info component display
* @property {Boolean} hideProgressBar Flag that controls progress-bar component display
*/
/**
* LanguageData Object that contains languages data
* @typedef {Object} LanguageData
*
* @property {string} currentLanguage Code of current language
* @property {string} currentLocale Current locale
* @property {array} availableLanguages An array containing available language objects
* @property {Object} translations Object containing translations by language code
*/
/**
* ProgressData Object that contains app error data
* @typedef {Object} ProgressData
*
* @property {Boolean} animated Flag to indicate whether progress bar is animated
* @property {Boolean} inProgress Flag to indicate whether progress has started
* @property {string} percentComplete Current progress text displayed in progress-bar component
* @property {Float} percentNumber Current progress in percents
* @property {Integer} currentStep Current operation step
* @property {Integer} totalSteps Total operation steps
* @property {string} operationText Operation text displayed in progress-bar component
* @property {string} progressBarClass Additional progress-bar component CSS class
* @property {Object} styleObject Style object for progress-bar component (has only 'width' property, representing CSS width for progress bar)
*/
/**
* AppState Object that contains appState (store) for current app instance
* @typedef {Object} AppState
*
* @property {Object} platformData Object for storing platform data variables
* @property {Object} appData Object for storing app data variables
* @property {Object} userData Object for storing user data variables
* @property {Object} config Object for storing config variables
* @property {Object} userConfig Object for storing user config variables
* @property {Object} componentCssFiles Object with css data on files added by Vue components
* @property {WindowState} windowState Object holding current window state variables
* @property {StatusData} status Object holding current app status variables
* @property {ErrorData} appError Object holding current app error variables
* @property {OperationData} appOperation Object holding current app operation variables
* @property {string} mainLoaderTitle App main loader title
* @property {Boolean} preventClose Flag to indicate whether closing app window is permitted
* @property {Boolean} preventReload Flag to indicate whether reloading app window is permitted
* @property {Boolean} hasUserConfig Flag to indicate whether app has saved user config
* @property {array} allDebugMessages An array holding all debug messages
* @property {array} debugMessages An array holding displayed debug messages
* @property {Boolean} hasDebugWindow Flag to indicate whether current window has debug window
* @property {Boolean} isDebugWindow Flag to indicate whether current window is debug window
* @property {Boolean} debugToFileStarted Flag to indicate whether debugging to file has already started
* @property {array} allUserMessages An array holding all user messages
* @property {array} userMessages An array holding displayed user messages
* @property {array} userMessageQueue An array holding pending user messages
* @property {Boolean} userMessagesToFileStarted Flag to indicate whether
* @property {LanguageData} languageData Object containing language data and translations
* @property {array} availableThemes An array holding available theme names
* @property {Object} appInfo Object containing app info variables
* @property {ProgressData} progressData Object containing progress bar data
* @property {Object} headerData Object for app-header component data
* @property {Object} debugData Object for app-debug component data
* @property {Object} footerData Object for app-footer component data
* @property {Object} mainData Object for app-main component data
* @property {Object} userMessagesData Object for user-messages component data
* @property {Object} appNotificationsData Object for app-notifications component data
* @property {Object} modalStatus Object for storing modal status data
* @property {Object} modalData Object for modal-dialog component data
* @property {Object} appModals Object containing modal dialog definitions
*/
/**
* @type {AppState}
* @memberOf appWrapper
* @name appState-wrapper
*
* @todo Complete typedefs
*/
exports.appState = {
platformData: {},
appData: {},
userData: {},
config: {},
userConfig: {},
componentCssFiles: [],
appBodyClasses: [],
windowState: {
title: '',
position: '',
x: 0,
y: 0,
maximized: false,
devTools: false,
showInTaskbar: false,
resizable: true,
menu: false,
icon: false,
transparent: false,
show: true,
kiosk: false,
frame: false,
fullscreen: false,
width: 0,
height: 0
},
status: {
appLoaded: false,
appReady: false,
appInitialized: false,
appShuttingDown: false,
appBusy: true,
appStatus: 'idle',
appStatusChanging: false,
languageInitialized: false,
feAppInitialized: false, // ?
windowMaximized: false, // ?
devToolsOpened: false,
movingWindow: false,
ctrlPressed: false,
shiftPressed: false,
altPressed: false,
noHandlingKeys: false,
windowFocused: false,
},
appError: {
error: false,
defaultTitle: 'Application error',
defaultText: 'An unknown error occured.',
title: '',
text: '',
debugText: '',
component: '',
icon: true,
messages: 'user'
},
mainLoaderTitle: '',
preventReload: false,
preventClose: false,
initializationTime: null,
initializationTimeRaw: null,
appOperation: {
cancelable: false,
cancelling: false,
cancelled: false,
operationText: null,
useProgress: null,
progressText: null,
appBusy: null,
operationActive: false,
operationVisible: false,
operationStartedTimestamp: false,
operationId: null,
notify: false,
hideLiveInfo: false,
hideProgressBar: false,
},
hasUserConfig: false,
allDebugMessages: [],
debugMessages: [],
hasDebugWindow: false,
isDebugWindow: false,
debugToFileStarted: false,
allUserMessages: [],
userMessages: [],
userMessageQueue: [],
userMessagesToFileStarted: false,
languageData: {
currentLanguage: null,
currentLocale: null,
availableLanguages: [],
translations: {}
},
availableThemes: [],
appInfo: {},
progressData: {
animated: true,
inProgress: false,
percentComplete: 0,
percentNumber: 0,
currentStep: 0,
totalSteps: 0,
operationText: '',
progressBarClass: '',
styleObject: {
width: '0%'
}
},
headerData: {},
debugData: {},
footerData: {},
mainData: {},
usageData: {
current: {},
change: {},
previous: [],
maxCpu: 100,
minCpu: -1,
minMemory: -1,
maxMemory: 1,
},
userMessagesData: {
selectFocused: false
},
appNotificationsData: {
notificationExpired: true,
timeouts: {},
newNotifications: [],
currentNotification: null,
oldNotifications: []
},
modalStatus: {
animating: false,
timeouts: {
setBodyComponentTimeout: null,
updateResize: null,
updateUnsetSize: null
},
timeoutDurations: {
setBodyComponentTimeout: 300,
updateResize: 100,
updateUnsetSize: 100
}
},
modalData: {
modalVisible: false,
modalContentVisible: false,
modalElement: null,
fadeModal: 'fade-slow',
currentModal: false
},
appModals: {
defaultModal: {
name: 'default-modal',
bodyComponent: 'modal-body',
defaultBodyComponent: 'modal-body',
title: '',
body: '',
ready: false,
busyText: 'Please wait...',
busy: false,
opening: false,
closing: false,
messages: [],
currentMessageIndex: -1,
showContentImmediately: false,
noHandlingKeys: false,
autoClosing: false,
autoCloseTime: 0,
autoCloseTimeIntervalDuration: 1000,
autoCloseTimeNotify: 6000,
autoCloseTimeExpireNotify: 3000,
autoCloseTimeText: '',
modalClassName: '',
preventEscClose: false,
showCloseLink: true,
closeLinkText: null,
cancelOnClose: true,
showConfirmButton: true,
confirmButtonText: 'Confirm',
confirmDisabled: false,
confirmSelected: true,
showCancelButton: true,
cancelButtonText: 'Cancel',
cancelDisabled: false,
cancelSelected: false,
modalAction: null,
animating: false,
animateSize: true,
inlineConfirm: false,
inlineConfirmData: {
title: '',
body: '',
confirmButtonText: '',
cancelButtonText: '',
confirmSelected: true,
cancelSelected: false,
},
onBeforeOpen: null,
onOpen: null,
onBeforeClose: null,
onClose: null,
onConfirm: null,
onCancel: null
},
translationModal: {
name: 'translation-modal',
bodyComponent: 'translation-editor',
defaultBodyComponent: 'translation-editor',
noHandlingKeys: true,
hasGoogleTranslate: false,
hasSearch: false,
searchResults: null,
modalClassName: 'translation-editor-modal',
preventEscClose: true,
},
configEditorModal: {
name: 'config-modal',
bodyComponent: 'config-editor',
defaultBodyComponent: 'config-editor',
modalClassName: 'config-editor-modal',
},
debugConfigEditorModal: {
name: 'debug-config-modal',
bodyComponent: 'debug-config-editor',
defaultBodyComponent: 'debug-config-editor',
modalClassName: 'debug-config-editor-modal',
},
userMessagesConfigEditorModal: {
name: 'user-messages-config-modal',
bodyComponent: 'user-messages-config-editor',
defaultBodyComponent: 'user-messages-config-editor',
modalClassName: 'user-messages-config-editor-modal',
},
closeModal: {
name: 'close-modal',
bodyComponent: 'modal-body',
defaultBodyComponent: 'modal-body',
},
saveDebugModal: {
name: 'save-debug',
bodyComponent: 'save-debug',
defaultBodyComponent: 'save-debug',
modalClassName: 'save-debug-log-modal',
saveDebugFileError: false,
hasHiddenMessages: false,
file: '',
fileExists: false,
saveAll: false,
overwriteAction: 'overwrite',
},
saveUserMessagesModal: {
name: 'save-user-messages',
bodyComponent: 'save-user-messages',
defaultBodyComponent: 'save-user-messages',
modalClassName: 'save-user-messages-modal',
hasHiddenMessages: false,
saveFileError: false,
file: '',
fileExists: false,
saveAll: false,
overwriteAction: 'overwrite',
},
cancelAndExitModal: {
name: 'cancel-and-exit',
bodyComponent: 'cancel-and-exit',
defaultBodyComponent: 'cancel-and-exit',
modalClassName: 'cancel-and-exit-modal',
preventEscClose: true,
hideProgress: false,
remainingTime: 0,
success: false,
fail: false,
closing: false,
reloading: false,
cancelable: false,
},
appInfoModal: {
name: 'app-info',
bodyComponent: 'app-info',
defaultBodyComponent: 'app-info',
modalClassName: 'app-info-modal',
busy: true,
},
},
};