--- /dev/null
+/**
+ * Manages the loading of class documentation.
+ */
+Ext.define("Docs.ClassLoader", {
+ singleton: true,
+ cache: {},
+
+ /**
+ * Loads class.
+ *
+ * @param {String} clsUrl name of the class + optionally name of the method, separated with dash.
+ * @param {Boolean} noHistory true to disable adding entry to browser history
+ */
+ load: function(clsUrl, noHistory) {
+ var cls = clsUrl;
+ var member;
+
+ // separate class and member name
+ var matches = clsUrl.match(/^(.*?)(?:-(.*))?$/);
+ if (matches) {
+ cls = matches[1];
+ member = matches[2];
+ }
+
+ if (!noHistory) {
+ Docs.History.push("/api/" + clsUrl);
+ }
+
+ Docs.App.setClassMode();
+ var docTabPanel = Ext.getCmp('docTabPanel');
+ if (docTabPanel) {
+ Ext.getCmp('docTabPanel').setActiveTab(0);
+ }
+
+ if (this.cache[cls]) {
+ this.showClass(this.cache[cls], member);
+ } else {
+ if (docTabPanel) {
+ Ext.getCmp('doc-overview').setLoading(true);
+ }
+
+ Ext.data.JsonP.request({
+ url: Docs.App.getBaseUrl() + '/output/' + cls + '.js',
+ callbackName: cls.replace(/\./g, '_'),
+ success: function(json, opts) {
+ this.cache[cls] = json;
+ this.showClass(json, member);
+ },
+ failure : function(response, opts) {
+ console.log('Fail');
+ },
+ scope: this
+ });
+ }
+ },
+
+ showClass: function(cls, anchor) {
+ var docTabPanel = Ext.getCmp('docTabPanel');
+ if (!docTabPanel) {
+ Ext.create('Docs.ClassPanel');
+ }
+
+ Ext.get('docTabPanel').show();
+ var pageContent = Ext.get('pageContent');
+ if (pageContent) {
+ pageContent.setVisibilityMode(Ext.core.Element.DISPLAY).hide();
+ }
+
+ Ext.getCmp('treePanelCmp').selectClass(cls.name);
+ Docs.PageHeader.load(cls);
+
+ var docOverviewTab = Ext.getCmp('doc-overview');
+ docOverviewTab.load(cls);
+ docOverviewTab.setLoading(false);
+
+ if (anchor) {
+ Ext.getCmp('doc-overview').scrollToEl("#" + anchor);
+ } else {
+ var docContent = Ext.get(Ext.query('#doc-overview .x-panel-body')[0]);
+ docContent.scrollTo('top', 0);
+ }
+ }
+});
+