Commit 7b2de454 authored by Nick Poulden's avatar Nick Poulden
Browse files

Scroll state fixes

parent c9fda3e0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ Ext.define('Docs.Application', {
        Docs.App = this;
        Docs.Favorites.init();
        Docs.Settings.init();
        Docs.classState = {};
        Docs.contentState = {};

        Ext.create('Docs.view.Viewport');

@@ -46,9 +46,9 @@ Ext.define('Docs.Application', {
            Docs.initEventTracking();
        }

        setInterval(function(){
            Ext.DomQuery.select('link')[4].href = "resources/css/viewport.css?" + Math.ceil(Math.random() * 100000000)
        }, 1000)
        // setInterval(function(){
        //     Ext.DomQuery.select('link')[4].href = "resources/css/viewport.css?" + Math.ceil(Math.random() * 100000000)
        // }, 1000)
    }

});
+3 −3
Original line number Diff line number Diff line
@@ -187,8 +187,8 @@ Ext.define('Docs.Renderer', {
        var memberName = member.tagname + '-' + member.name,
            open;

        if (Docs.classState && Docs.classState['/api/' + this.cls.name] && Docs.classState['/api/' + this.cls.name][memberName]) {
            open = Docs.classState['/api/' + this.cls.name][memberName].expanded;
        if (Docs.contentState && Docs.contentState['/api/' + this.cls.name] && Docs.contentState['/api/' + this.cls.name][memberName]) {
            open = Docs.contentState['/api/' + this.cls.name][memberName].expanded;
        }

        return this.memberTpl.apply(Ext.apply({
+19 −13
Original line number Diff line number Diff line
/**
 * Controller responsible for loading classes, guides, and switching
 * between pages.
 * Controller responsible for loading classes
 */
Ext.define('Docs.controller.Classes', {
    extend: 'Docs.controller.Content',
@@ -103,13 +102,13 @@ Ext.define('Docs.controller.Classes', {
                            memberName = member.getAttribute('id'),
                            baseUrl = '/api/' + this.currentCls.name;

                        Docs.classState[baseUrl] = Docs.classState[baseUrl] || {};
                        Docs.classState[baseUrl][memberName] = Docs.classState[baseUrl][memberName] || {};
                        Docs.contentState[baseUrl] = Docs.contentState[baseUrl] || {};
                        Docs.contentState[baseUrl][memberName] = Docs.contentState[baseUrl][memberName] || {};

                        if (member.hasCls('open')) {
                            Docs.classState[baseUrl][memberName].expanded = false;
                            Docs.contentState[baseUrl][memberName].expanded = false;
                        } else {
                            Docs.classState[baseUrl][memberName].expanded = true;
                            Docs.contentState[baseUrl][memberName].expanded = true;
                            this.fireEvent('showMember', clsName, memberName);
                        }
                        member.toggleCls('open');
@@ -126,8 +125,8 @@ Ext.define('Docs.controller.Classes', {

                    cmp.body.addListener('scroll', function(cmp, el) {
                        var baseUrl = '/api/' + this.currentCls.name;
                        Docs.classState[baseUrl] = Docs.classState[baseUrl] || {};
                        Docs.classState[baseUrl]['scrollOffset'] = el.scrollTop;
                        Docs.contentState[baseUrl] = Docs.contentState[baseUrl] || {};
                        Docs.contentState[baseUrl]['scrollOffset'] = el.scrollTop;
                    }, this);
                }
            }
@@ -180,7 +179,10 @@ Ext.define('Docs.controller.Classes', {
        Ext.getCmp('tree-container').show();
        Ext.getCmp('tree-container').layout.setActiveItem(0);

        if (this.activeUrl === url) return;
        if (this.activeUrl === url) {
            this.scrollContent();
            return;
        }
        this.activeUrl = url;

        if (!noHistory) {
@@ -228,16 +230,20 @@ Ext.define('Docs.controller.Classes', {
            this.fireEvent('showClass', cls.name);
        }

        this.currentCls = cls;

        if (anchor) {
            this.getOverview().scrollToEl("#" + anchor);
            this.fireEvent('showMember', cls.name, anchor);
        } else {
            var baseUrl = '/api/' + cls.name,
                offset = (Docs.classState[baseUrl] && Docs.classState[baseUrl].scrollOffset) || 0;
            this.getOverview().getEl().down('.x-panel-body').scrollTo('top', offset);
            this.scrollContent();
        }
    },

        this.currentCls = cls;
    scrollContent: function() {
        var baseUrl = '/api/' + this.currentCls.name,
            offset = (Docs.contentState[baseUrl] && Docs.contentState[baseUrl].scrollOffset) || 0;
        this.getOverview().getEl().down('.x-panel-body').scrollTo('top', offset);
    }

});
+1 −1
Original line number Diff line number Diff line
/**
 * Controller for inline examples.
 * Controller for Examples showcase
 */
Ext.define('Docs.controller.Examples', {
    extend: 'Ext.app.Controller',
+39 −17
Original line number Diff line number Diff line
/**
 * Controller for Welcome page
 * Guides Controller
 */
Ext.define('Docs.controller.Guides', {
    extend: 'Docs.controller.Content',
@@ -15,6 +15,8 @@ Ext.define('Docs.controller.Guides', {
        }
    ],

    cache: {},

    init: function() {
        this.addEvents(
            /**
@@ -59,6 +61,9 @@ Ext.define('Docs.controller.Guides', {
        }
    },

    /**
     * Loads the guides index
     */
    loadIndex: function() {
        Ext.getCmp('doctabs').activateTab('#/guide');
        Ext.getCmp('card-panel').layout.setActiveItem('guides');
@@ -73,6 +78,7 @@ Ext.define('Docs.controller.Guides', {
     * @param {Boolean} noHistory  true to disable adding entry to browser history
     */
    loadGuide: function(url, noHistory) {

        Ext.getCmp('card-panel').layout.setActiveItem('guide');
        Ext.getCmp('tree-container').show();
        Ext.getCmp('tree-container').layout.setActiveItem(2);
@@ -84,16 +90,15 @@ Ext.define('Docs.controller.Guides', {

        var name = url.match(/^\/guide\/(.*)$/);
        if (name) {
            if (this.cache[name[1]]) {
                this.showGuide(this.cache[name[1]], url, name[1]);
            } else {
                Ext.data.JsonP.request({
                    url: this.getBaseUrl() + "/guides/" + name[1] + "/README.js",
                    callbackName: name[1],
                    success: function(json) {
                    this.getViewport().setPageTitle(json.guide.match(/<h1>(.*)<\/h1>/)[1]);
                    Ext.getCmp("guide").update(json.guide);

                    Docs.Syntax.highlight(Ext.get("guide"));
                    this.fireEvent('showGuide', name[1]);
                    this.getTree().selectUrl(url);
                        this.cache[name[1]] = json;
                        this.showGuide(json, url, name[1]);
                    },
                    failure: function(response, opts) {
                        this.getController('Index').showFailure("Guide <b>"+name[1]+"</b> was not found.");
@@ -102,5 +107,22 @@ Ext.define('Docs.controller.Guides', {
                });
            }
        }
    },

    /**
     * Shows guide.
     *
     * @param {Object} json Guide json
     * @param {String} url URL of the guide
     * @param {Boolean} name Name of the guide
     */
    showGuide: function(json, url, name) {
        this.getViewport().setPageTitle(json.guide.match(/<h1>(.*)<\/h1>/)[1]);
        Ext.getCmp("guide").update(json.guide);

        Docs.Syntax.highlight(Ext.get("guide"));
        this.fireEvent('showGuide', name);
        this.getTree().selectUrl(url);
    }

});
Loading