Commit 4ab63b08 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Refactor show/hide members to save in 'show' field.

Avoids double-negations to have show:{public:true} than hide:{public:false}.

Filtering class members now also applies the filter to menus.
For this the field is now aligned right - otherwise it'll jump on
every character typed to the field as the member counts change.
parent 5abd55eb
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -8,7 +8,13 @@ Ext.define("Docs.Settings", {

    // Default values for settings for which undefined doesn't suite.
    defaults: {
        hide: {inherited: false, accessors: false, privates: true}
        show: {
            "public": true,
            "protected": false,
            "private": false,
            "inherited": true,
            "accessor": true
        }
    },

    /**
+17 −18
Original line number Diff line number Diff line
@@ -71,8 +71,8 @@ Ext.define('Docs.view.cls.Overview', {
            docClass: this.docClass,
            accessors: this.accessors,
            listeners: {
                filter: function(search, hide) {
                    this.filterMembers(search, hide);
                filter: function(search, show) {
                    this.filterMembers(search, show);
                },
                scope: this
            }
@@ -83,7 +83,7 @@ Ext.define('Docs.view.cls.Overview', {

        Docs.Syntax.highlight(this.getEl());

        this.filterMembers("", Docs.Settings.get("hide"));
        this.filterMembers("", Docs.Settings.get("show"));

        this.fireEvent('afterload');
    },
@@ -91,13 +91,11 @@ Ext.define('Docs.view.cls.Overview', {
    /**
     * Filters members by search string and inheritance.
     * @param {String} search
     * @param {Object} hide
     * @param {Boolean} hide.inherited
     * @param {Boolean} hide.accessors
     * @param {Object} show
     * @private
     */
    filterMembers: function(search, hide) {
        Docs.Settings.set("hide", hide);
    filterMembers: function(search, show) {
        Docs.Settings.set("show", show);
        var isSearch = search.length > 0;

        // Hide the class documentation when filtering
@@ -105,18 +103,19 @@ Ext.define('Docs.view.cls.Overview', {
            Ext.get(el).setStyle({display: isSearch ? 'none' : 'block'});
        });

        // Hide members who's name doesn't match with the search string
        // and hide inherited members if hideInherited=true
        // and hide accessor methods when hideAccessors=true
        // Only show members who's name matches with the search string
        // and its type is currently visible
        var re = new RegExp(Ext.String.escapeRegex(search), "i");
        this.eachMember(function(m) {
            var el = Ext.get(m.id);
            var visible = (!hide.publics || (m.meta['private'] || m.meta['protected']))
                       && (!hide.protecteds || !m.meta['protected'])
                       && (!hide.privates || !m.meta['private'])
                       && (!hide.inherited || (m.owner === this.docClass.name))
                       && (!hide.accessors || m.tagname !== 'method' || !this.accessors.hasOwnProperty(m.name))
                       && (!isSearch || re.test(m.name));
            var visible = !(
                !show['public']    && !(m.meta['private'] || m.meta['protected']) ||
                !show['protected'] && m.meta['protected'] ||
                !show['private']   && m.meta['private'] ||
                !show['inherited'] && (m.owner !== this.docClass.name) ||
                !show['accessor']  && m.tagname === 'method' && this.accessors.hasOwnProperty(m.name) ||
                isSearch           && !re.test(m.name)
            );

            if (visible) {
                el.setStyle({display: 'block'});
@@ -152,7 +151,7 @@ Ext.define('Docs.view.cls.Overview', {
            }, this);
        }, this);

        this.toolbar.hideMenuItems(hide);
        this.toolbar.showMenuItems(show, isSearch, re);
    },

    buildAccessorsMap: function(name) {
+40 −40
Original line number Diff line number Diff line
@@ -32,10 +32,12 @@ Ext.define('Docs.view.cls.Toolbar', {
             * @event filter
             * Fires when text typed to filter, or one of the hide-checkboxes clicked.
             * @param {String} search  The search text.
             * @param {Object} hide  Flags which members to hide:
             * @param {Boolean} hide.inherited  True when inherited items should get hidden.
             * @param {Boolean} hide.accessors  True when accessor methods should get hidden.
             * @param {Boolean} hide.privates  True when private members should get hidden.
             * @param {Object} show  Flags which members to show:
             * @param {Boolean} show.public
             * @param {Boolean} show.protected
             * @param {Boolean} show.private
             * @param {Boolean} show.inherited
             * @param {Boolean} show.accessor
             */
            "filter",
            /**
@@ -77,16 +79,16 @@ Ext.define('Docs.view.cls.Toolbar', {
        }

        this.checkItems = {
            publics: this.createCb("Public", "publics"),
            protecteds: this.createCb("Protected", "protecteds"),
            privates: this.createCb("Private", "privates"),
            inherited: this.createCb("Inherited", "inherited"),
            accessors: this.createCb("Accessors", "accessors")
            "public": this.createCb("Public", "public"),
            "protected": this.createCb("Protected", "protected"),
            "private": this.createCb("Private", "private"),
            "inherited": this.createCb("Inherited", "inherited"),
            "accessor": this.createCb("Accessor", "accessor")
        };

        var self = this;
        this.items = this.items.concat([
            { xtype: 'tbspacer', width: 10 },
            { xtype: 'tbfill' },
            this.filterField = Ext.widget("triggerfield", {
                triggerCls: 'reset',
                cls: 'member-filter',
@@ -95,13 +97,13 @@ Ext.define('Docs.view.cls.Toolbar', {
                enableKeyEvents: true,
                listeners: {
                    keyup: function(cmp) {
                        this.fireEvent("filter", cmp.getValue(), this.getHideFlags());
                        this.fireEvent("filter", cmp.getValue(), this.getShowFlags());
                        cmp.setHideTrigger(cmp.getValue().length === 0);
                    },
                    specialkey: function(cmp, event) {
                        if (event.keyCode === Ext.EventObject.ESC) {
                            cmp.reset();
                            this.fireEvent("filter", "", this.getHideFlags());
                            this.fireEvent("filter", "", this.getShowFlags());
                        }
                    },
                    scope: this
@@ -109,21 +111,21 @@ Ext.define('Docs.view.cls.Toolbar', {
                onTriggerClick: function() {
                    this.reset();
                    this.focus();
                    self.fireEvent('filter', '', self.getHideFlags());
                    self.fireEvent('filter', '', self.getShowFlags());
                    this.setHideTrigger(true);
                }
            }),
            { xtype: 'tbfill' },
            { xtype: 'tbspacer', width: 10 },
            {
                xtype: 'button',
                text: 'Show',
                menu: [
                    this.checkItems.publics,
                    this.checkItems.protecteds,
                    this.checkItems.privates,
                    this.checkItems['public'],
                    this.checkItems['protected'],
                    this.checkItems['private'],
                    '-',
                    this.checkItems.inherited,
                    this.checkItems.accessors
                    this.checkItems['inherited'],
                    this.checkItems['accessor']
                ]
            },
            {
@@ -142,10 +144,10 @@ Ext.define('Docs.view.cls.Toolbar', {
        this.callParent(arguments);
    },

    getHideFlags: function() {
    getShowFlags: function() {
        var flags = {};
        for (var i in this.checkItems) {
            flags[i] = !this.checkItems[i].checked;
            flags[i] = this.checkItems[i].checked;
        }
        return flags;
    },
@@ -153,10 +155,10 @@ Ext.define('Docs.view.cls.Toolbar', {
    createCb: function(text, type) {
        return Ext.widget('menucheckitem', {
            text: text,
            checked: !Docs.Settings.get("hide")[type],
            checked: Docs.Settings.get("show")[type],
            listeners: {
                checkchange: function() {
                    this.fireEvent("filter", this.filterField.getValue(), this.getHideFlags());
                    this.fireEvent("filter", this.filterField.getValue(), this.getShowFlags());
                },
                scope: this
            }
@@ -217,28 +219,26 @@ Ext.define('Docs.view.cls.Toolbar', {
    },

    /**
     * Hides or unhides inherited members in dropdown menus.
     * @param {Object} hide
     * Show or hides members in dropdown menus.
     * @param {Object} show
     * @param {Boolean} isSearch
     * @param {RegExp} re
     */
    hideMenuItems: function(hide) {
    showMenuItems: function(show, isSearch, re) {
        Ext.Array.forEach(['cfg', 'property', 'method', 'event'], function(type) {
            if (this.memberButtons[type]) {
                var store = this.memberButtons[type].getStore();
                if (hide.inherited || hide.accessors || hide.privates) {
                store.filterBy(function(m) {
                    return !(
                            hide.publics && !(m.get("meta")["private"] || m.get("meta")["protected"]) ||
                            hide.protecteds && m.get("meta")["protected"] ||
                            hide.privates && m.get("meta")["private"] ||
                            hide.inherited && m.get("inherited") ||
                            hide.accessors && m.get("accessor")
                        !show['public']    && !(m.get("meta")["private"] || m.get("meta")["protected"]) ||
                        !show['protected'] && m.get("meta")["protected"] ||
                        !show['private']   && m.get("meta")["private"] ||
                        !show['inherited'] && m.get("inherited") ||
                        !show['accessor']  && m.get("accessor") ||
                        isSearch           && !re.test(m.get("label"))
                    );
                });
            }
                else {
                    store.clearFilter();
                }
            }
        }, this);
    },