Files
Unify/framework/client/stateMachine.js

154 lines
2.1 KiB
JavaScript
Raw Normal View History

2025-12-25 11:16:59 +01:00
class stateEvent{
object;
method;
args;
}
class state{
events = new Array();
registerEvent( object, method, args ) {
var event = new stateEvent();
event.object = object;
event.method = method;
event.args = args;
this.events.push( event );
}
async triggerEvents() {
var events = this.events;
for ( var i = 0; i < events.length; i++ ) {
var event = events[ i ];
var object = event.object;
var method = event.method;
var args = event.args;
object["__" + method]( args[0], args[1], args[2], args[3], args[4] );
//object[ method ]()
}
}
}
export default class stateMachine{
states = new Array();
currentState;
stateID = 0;
constructor() {
var state = this.createState();
//history.pushState( { id: state.id }, "Unify" );
}
createState() {
var newState = new state();
newState.id = this.stateID++;
this.states.push( newState );
this.currentState = newState;
return newState;
}
registerEvent( object, method, args ) {
var state = this.currentState;
state.registerEvent( object, method, args )
//console.log( "event registered in stateMachine", this );
}
async composeState( ...args ) {
this.createState();
var state = this.currentState;
if( args.length == 0 ) {
history.pushState( { id: state.id }, "Unify" );
} else if( args.length == 1 ) {
var title = args.pop().replaceAll( " ", "_" );
//if( !title ) {
history.pushState( { id: state.id }, "localhost", title + "/" );
//} else {
// history.pushState( { id: state.id }, "Unify", "/" + title + ".html" );
//}
} else {
var title = args.pop();
title = title.toString().replaceAll( " ", "_" )
if(title == "") {
title = "page"
}
history.pushState( { id: state.id }, "Unify", "/" + args.join("/") + "/" + title + ".html" );
}
}
generateUrl( ...args ) {
var title = args.pop().replaceAll( " ", "_" );
return "https://unifyjs.org" + "/" + args.join("/") + "/" + title + ".html";
}
getState( id ) {
return this.states[ id ];
}
}