First commit

This commit is contained in:
2025-12-25 11:16:59 +01:00
commit 0c5ca09a63
720 changed files with 329234 additions and 0 deletions

View File

@@ -0,0 +1,702 @@
/*
Copyright (c) 2020, 2023, The Unified Company.
This code is part of Unify.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE,
as published by the Free Software Foundation.
See the GNU AFFERO GENERAL PUBLIC LICENSE, for more details.
https://unifyjs.org
*/
import core from './core.js';
import dom from './dom.js';
import css from './css.js';
import eventManager from './eventManager.js';
import socketManager from './socketManager.js';
import animationManager from './animation/animationManager.js';
import collection from './collection.js';
import codePreview from './codePreview.js';
import themeLoader from './themeLoader.js';
import tools from '../unify/tools.js';
import defaultObject from '../unify/defaultObject.js';
//import cookieManager from '../unify/cookieManager.js';
import cacheManager from "../unify/cacheManager.js";
import config from "../configs/config.js";
import applicationImport from './import.js';
import progressBar from './progressBar.js';
import applications from '../configs/applications.js';
import simplePath from "../unify/simplePath.js";
// For Benchmarking
//document.timer.lap("before");
//document.timer.lap("after");
document.promises = new Array();
document.cacheManager = new cacheManager();
document.cacheManager.useDB = false;
document.debugALL = false;
export default class applicationManager{
socketPort = 5002;
defaultSocketPort = 5002;
loadEditor = true;
defaultObject = new defaultObject();
themeLoader = new themeLoader();
mode = "development";
serverAddress = "localhost";
serverPort = 8090;
application;
applications;
applicationInstances = new Array();
ssl = false;
themeObjects = new Array();
connectPromise;
signinPromise;
constructor() {
this.themeLoader.applicationManager = this;
}
setParameters( config ) {
this.mode = config.mode;
this.ssl = config.ssl;
this.socketPort = config.socketPort;
this.loadThemes = config.loadThemes;
this.os = tools.CamelCase( config.os );
this.tint = tools.CamelCase( config.tint );
this.device = tools.CamelCase( config.device );
if( config.serverAddress ) {
this.serverAddress = config.serverAddress;
} else {
this.serverAddress = "localhost";
}
if( config.port ) {
this.port = config.port;
} else {
this.port = 3000;
}
}
setGlobal() {
document.mode = this.mode;
document.config = new Object();
document.config.os = this.os;
document.config.tint = this.tint;
document.config.device = this.device;
}
logConfig( config ) {
console.log( config );
console.log("set socket port", this.socketPort );
console.log( "running in ", config.mode, " mode.", "address : " + this.serverAddress );
}
parseConfig() {
this.setParameters( config );
this.setGlobal();
this.logConfig( config );
}
createApplicationPath( path ) {
var device = tools.CamelCase( this.device );
var os = tools.CamelCase( this.os );
var tint = tools.CamelCase( this.tint );
var applicationPath = '/framework/cache/platforms/' + os + '/' + device + '/' + tint + '/' + path + '/application.js';
return applicationPath;
}
async getApplicationInstance( path, applicationID ) {
if( this.mode == "development" ) {
var applicationPath = this.createApplicationPath( path );
var importObject = await import( applicationPath );
this.application = new importObject.default();
} else {
var currentBundle = applicationImport[ applicationID ];
//console.log("loading application with id", applicationID);
if( currentBundle ) {
this.application = new currentBundle();
}
}
return this.application;
}
getUserObject( core, application, username, sessionKey ) {
if( !username ) {
var userObject = core.getFirstByClassName( "signin", application );
} else {
var userObject = core.getFirstByClassName( "signin", application );
if( !userObject ){
return false;
}
if( sessionKey ) {
userObject.sessionKey.value = sessionKey;
}
}
return userObject;
}
async singinUser( core, socketManager, userObject ) {
//var user = await socketManager.get( "settings", "signIn", userObject );
var user = await userObject.process();
//await userObject.socketManager.get( "table", "process", userObject );
//var user = await userObject.process();
core.user = user;
await core.setUser( user, application );
console.log( "update user permissions", user );
if( !user.permissionObjects ) {
return false;
}
core.updatePermissions( user.permissionObjects );
}
configurePath() {
this.url = window.location;
this.pathName = this.url.pathname;
}
parseUrlByID( core, tableName, id ) {
var objects = core.getObjectsByPropertyName( tableName );
if( objects.length > 0 ) {
var object = objects[0];
if( object.parent.create ) {
object.parent.create();
}
object.id = parseFloat( id );
if( object.loadPage ) {
object.loadPage();
}
object.showParents();
}
}
async parseUrl( core, application ) {
this.configurePath();
var pathName = this.pathName;
var pathParts = pathName.split("/");
pathParts.shift();
var tableName = pathParts[0];
var id = pathParts[1];
if( id ) {
this.parseUrlByID( core, tableName, id );
} else {
document.stateMachine.composeState()
core.runDefault( application );
}
}
createBaseUrl() {
var base = document.createElement("base");
if( this.ssl ) {
base.href = "https://" + this.serverAddress;
} else {
base.href = "http://" + this.serverAddress + ":" + this.port;
}
document.head.appendChild( base );
}
createMetaDescription() {
if( this.application.description ) {
document.querySelector(".metaDescription").setAttribute("content", this.application.description );
} else {
document.querySelector(".metaDescription").setAttribute("content", "A unifyJS application." );
}
}
async initializeSocketManager( core, application ) {
var socket = new socketManager( this.socketPort );
socket.ssl = this.ssl;
socket.serverAddress = this.serverAddress;
this.connectPromise = socket.connect();
document.connectPromise = this.connectPromise;
await this.connectPromise;
socket.addClient();
return socket;
}
async createApplicationInstances() {
for( var applicationID = 0; applicationID < this.applications.length; applicationID++ ) {
var applicationFile = this.applications[ applicationID ];
this.applicationInstances[ applicationID ] = await this.getApplicationInstance( applicationFile.path, applicationID );
}
}
bindApplications() {
this.applications = applications;
document.applications = applications;
}
getApplication() {
var applicationFile = this.applications[ 0 ];
applicationFile.socket = socket;
}
async start() {
var unifyCore = new core();
this.parseConfig();
this.bindApplications();
this.createBaseUrl();
await this.createApplicationInstances();
var socket = this.initializeSocketManager( unifyCore, this.applicationInstances[0] );
await this.runApplication( socket, 0, unifyCore );
this.createMetaDescription();
document.timer.lap("Everything is loaded");
console.log( this.applicationInstances[0] );
}
async updateApplications() {
for( var applicationID = 1; applicationID < this.applications.length; applicationID++) {
var applicationFile = this.applications[ applicationID ];
var unifyCore = new core();
this.runApplication( applicationFile.socket, applicationID, unifyCore );
}
}
async attachSocket( applicationFile, socket, applicationID ) {
if( !applicationFile.socket ) {
applicationFile.socket = await new socketManager( this.defaultSocketPort + applicationID );
if( this.serverAddress ) {
applicationFile.socket.serverAddress = this.serverAddress;
}
await applicationFile.socket.connect();
}
return applicationFile.socket;
}
preventDoubleLoading( element ) {
if( element && element.childElementCount != 0 ) {
return true;
}
}
createCodeEditor( app, applicationID ) {
if( applicationID != 0 ) {
new codePreview( app );
}
}
getDomElement( application ) {
if( this.applications.length == 1) {
application.selector = "#application";
}
var element = document.querySelector( application.selector );
if( document.querySelectorAll( application.selector ).length == 0 ) {
return true;
} else {
if( this.preventDoubleLoading( element ) ) {
return true;
}
}
return false;
}
configureCore( core ) {
core.device = this.device;
core.os = this.os;
core.tint = this.tint;
}
setGlobalCore( unifyCore, applicationID ) {
if( !document.cores ) {
document.cores = new Array();
}
document.cores[ applicationID ] = unifyCore;
}
async parseApplication( core, application, applicationID ) {
this.defaultObject.agregateDefaultObject( application );
this.setGlobalCore( core, applicationID );
await core.prepareObjects( application );
await document.connectPromise;
this.configureCore( core );
core.setTheme();
application.core = core;
await core.parse( application, true );
core.createDependencyMap();
}
hidePreloader() {
if( document.querySelector(".loadingBarPanel, .preloader, #preloader" )) {
document.querySelector(".loadingBarPanel, .preloader, #preloader").style.opacity = "0%";
}
setTimeout(function(){
document.querySelector(".loadingBarPanel, .preloader, #preloader").style.display = "none";
}, 1000)
}
logApplication( application, unifyCore ) {
if( document.debugALL ) {
console.log( "" );
console.log( "run application", application.selector );
console.log( "Core", unifyCore );
console.log( "Application", application );
console.log( "" );
}
}
setServerPort( port ) {
if( application.port ) {
this.serverPort = application.port;
}
}
prepareApplication(applicationID) {
var application = this.applicationInstances[ applicationID ];
application.applicationID = applicationID;
this.setServerPort( application.port );
return application;
}
bindObjectsToSocket( socket, application, unifyCore, applicationID ) {
if( applicationID == 0 ) {
socket.application = application;
socket.core = unifyCore;
}
}
async runApplication( socket = false, applicationID, unifyCore ) {
if ( this.applicationInstances[ applicationID ] ) {
var application = this.prepareApplication( applicationID );
this.bindObjectsToSocket( socket, application, unifyCore, applicationID );
if( this.getDomElement( application ) ) {
return true;
}
unifyCore.socketManager = await socket;
this.hidePreloader();
this.createCodeEditor( application, applicationID );
await this.parseApplication( unifyCore, application, applicationID );
//this.signinPromise = this.checkSignIn( socket, unifyCore, application );
//console.log("after signin");
if( applicationID == 0 ) {
//this.parseUrl( unifyCore, application );
}
//await Promise.all( document.promises );
await unifyCore.callAfterLoad( application );
this.logApplication( application, unifyCore );
if( this.loadThemes ) {
await this.themeLoader.loadThemes( application, applicationID, unifyCore );
}
this.setGlobals();
await unifyCore.callAfterThemeLoad( application );
}
return true;
}
setGlobals() {
document.timer.initialising = false;
document.themeObjects = this.themeObjects;
}
}