154 lines
2.1 KiB
JavaScript
154 lines
2.1 KiB
JavaScript
|
|
|
||
|
|
|
||
|
|
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 ];
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|