Skip to content

Instantly share code, notes, and snippets.

@etgryphon
Created November 12, 2011 14:56
Show Gist options
  • Save etgryphon/1360627 to your computer and use it in GitHub Desktop.
Save etgryphon/1360627 to your computer and use it in GitHub Desktop.
/*globals Yi Statechart */
window.Yi = Statechart.create();
Yi.addState("Store", {
initialSubstate: "store.Loading"
});
Yi.addState("store.Loading", {
parentState: "Store",
enterState: function() {
this.sendEvent("loadLargeStore");
},
"loadLargeStore": function() {
this.goToState("store.Large");
}
});
Yi.addState("store.Large", {
parentState: "Store",
substatesAreConcurrent: true
});
Yi.addState("store.large.View", {
parentState: "store.Large",
substatesAreConcurrent: true
});
Yi.addState("store.large.view.Buy", {
parentState: "store.large.View",
initialSubstate: "store.large.view.buy.Loading"
});
Yi.addState("store.large.view.buy.Loading", {
parentState: "store.large.view.Buy",
enterState: function() {
this.sendEvent("show");
},
"show": function() {
this.goToState("store.large.view.buy.Show");
return true;
}
});
Yi.addState("store.large.view.buy.Show", {
parentState: "store.large.view.Buy",
substatesAreConcurrent: true,
/* THIS EVENT HANDLER IS NOT TRIGGERED! BUG? */
"showSellView": function() {
this.goToState("store.large.view.buy.Hide");
}
});
Yi.addState("store.large.view.buy.Hide", {
parentState: "store.large.view.Buy"
});
Yi.addState("store.large.view.Sell", {
parentState: "store.large.View",
initialSubstate: "store.large.view.sell.Loading"
});
Yi.addState("store.large.view.sell.Loading", {
parentState: "store.large.view.Sell",
enterState: function() {
this.sendEvent("hide");
},
"hide": function() {
this.goToState("store.large.view.sell.Hide");
return true;
}
});
Yi.addState("store.large.view.sell.Hide", {
parentState: "store.large.view.Sell",
/* THIS EVENT HANDLER IS TRIGGERED AS USUAL */
"showSellView": function() {
this.goToState("store.large.view.sell.Show");
}
});
Yi.addState("store.large.view.sell.Show", {
parentState: "store.large.view.Sell",
initialSubstate: 'store.large.view.sell.show.View' // <= Should be this!
// substatesAreConcurrent: true // <= NOT this!
});
/******* IF YOU DELETE THIS SECTION BELOW IT WILL WORK ********/
Yi.addState("store.large.view.sell.show.View", {
parentState: "store.large.view.sell.Show",
substatesAreConcurrent: true
});
Yi.addState("store.large.view.sell.show.view.All", {
parentState: "store.large.view.sell.show.View",
initialSubstate: "store.large.view.sell.show.view.all.Loading"
});
Yi.addState("store.large.view.sell.show.view.all.Loading", {
parentState: "store.large.view.sell.show.view.All",
enterState: function() {
this.sendEvent("show");
},
"show": function() {
this.goToState("store.large.view.sell.show.view.all.Show");
return true;
}
});
Yi.addState("store.large.view.sell.show.view.all.Hide", {
parentState: "store.large.view.sell.show.view.All"
});
Yi.addState("store.large.view.sell.show.view.all.Show", {
parentState: "store.large.view.sell.show.view.All"
});
/**************************************************************/
Yi.initStates("Store");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment