--- /dev/null
+/**
+ * Browser history management using Ext.util.History.
+ */
+Ext.define("Docs.History", {
+ singleton: true,
+
+ /**
+ * Initializes history management.
+ */
+ init: function() {
+ Ext.util.History.init(function() {
+ this.navigate(Ext.util.History.getToken());
+ }, this);
+ Ext.util.History.on("change", this.navigate, this);
+ },
+
+ // Parses current URL and navigates to the page
+ navigate: function(token) {
+ var url = this.parseToken(token);
+ if (url.type === "api") {
+ Docs.ClassLoader.load(url.key, true);
+ Ext.getCmp('treePanelCmp').selectClass(url.key.replace(/-.*$/, ''));
+ }
+ else if (url.type === "guide") {
+ Docs.App.setGuideMode();
+ Docs.Guides.load(url.key, true);
+ }
+ else {
+ Docs.App.setIndexMode();
+ }
+ },
+
+ // Parses current browser location
+ parseToken: function(token) {
+ var matches = token && token.match(/\/(api|guide)\/(.*)/);
+ return matches ? {type: matches[1], key: matches[2]} : {};
+ },
+
+ /**
+ * Adds URL to history
+ *
+ * @param {String} token the part of URL after #
+ */
+ push: function(token) {
+ Ext.util.History.add(token);
+ }
+});