Commit bb4edc0e authored by Nick Poulden's avatar Nick Poulden
Browse files

Remember state of expanded class members

parent 08d47edf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ Ext.define('Docs.Application', {
        Docs.App = this;
        Docs.Favorites.init();
        Docs.Settings.init();
        Docs.classState = {};

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

+10 −2
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ Ext.define('Docs.Renderer', {

    renderMemberDiv: function(member, index) {
        this.memberTpl = this.memberTpl || new Ext.XTemplate(
            '<div id="{tagname}-{name}" class="member {firstChild} {inherited}">',
            '<div id="{tagname}-{name}" class="member {firstChild} {inherited} {[values.open ? " open" : ""]}">',
                // leftmost column: expand button
                '<a href="#" class="side {expandable}">',
                    '<span>&nbsp;</span>',
@@ -184,6 +184,13 @@ 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;
        }

        return this.memberTpl.apply(Ext.apply({
            // use classname "first-child" when it's first member in its category
            firstChild: (index === 0) ? "first-child" : "",
@@ -194,7 +201,8 @@ Ext.define('Docs.Renderer', {
            // method params signature or property type signature
            signature: this.renderSignature(member),
            // full documentation together with optional parameters and return value
            longDoc: this.renderLongDoc(member)
            longDoc: this.renderLongDoc(member),
            open: open
        }, member));
    },

+16 −1
Original line number Diff line number Diff line
@@ -114,7 +114,22 @@ Ext.define('Docs.controller.Classes', {
                afterrender: function(cmp) {
                    // Expand member when clicked
                    cmp.el.addListener('click', function(cmp, el) {
                        Ext.get(Ext.get(el).up('.member')).toggleCls('open');
                        var member = Ext.get(el).up('.member'),
                            docClass = member.down('.meta .docClass'),
                            clsName = docClass.getAttribute('rel'),
                            memberName = member.getAttribute('id'),
                            baseUrl = '/api/' + this.currentCls.name;

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

                        if (member.hasCls('open')) {
                            Docs.classState[baseUrl][memberName].expanded = false;
                        } else {
                            Docs.classState[baseUrl][memberName].expanded = true;
                            this.fireEvent('showMember', clsName, memberName);
                        }
                        member.toggleCls('open');
                    }, this, {
                        preventDefault: true,
                        delegate: '.expandable'