mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	We move all of its logic into settings_sections. Note that this is slightly more than a refactor. We are slightly more aggressive about resetting sections. For example, if you go into Settings, then exit the overlay, then go into Manage Organization, we will now reset sections for both groups.
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var settings_panel_menu = (function () {
 | 
						|
 | 
						|
var exports = {};
 | 
						|
 | 
						|
exports.make_menu = function (opts) {
 | 
						|
    var main_elem = opts.main_elem;
 | 
						|
    var hash_prefix = opts.hash_prefix;
 | 
						|
    var curr_li = main_elem.children('li').eq(0);
 | 
						|
 | 
						|
    var self = {};
 | 
						|
 | 
						|
    self.show = function () {
 | 
						|
        main_elem.show();
 | 
						|
        var section = self.current_tab();
 | 
						|
        self.activate_section(section);
 | 
						|
        curr_li.focus();
 | 
						|
    };
 | 
						|
 | 
						|
    self.hide = function () {
 | 
						|
        main_elem.hide();
 | 
						|
    };
 | 
						|
 | 
						|
    self.current_tab = function () {
 | 
						|
        return curr_li.data('section');
 | 
						|
    };
 | 
						|
 | 
						|
    self.li_for_section = function (section) {
 | 
						|
        var li = $("#settings_overlay_container li[data-section='" + section + "']");
 | 
						|
        return li;
 | 
						|
    };
 | 
						|
 | 
						|
    self.set_key_handlers = function (toggler) {
 | 
						|
        keydown_util.handle({
 | 
						|
            elem: main_elem,
 | 
						|
            handlers: {
 | 
						|
                left_arrow: toggler.maybe_go_left,
 | 
						|
                right_arrow: toggler.maybe_go_right,
 | 
						|
                enter_key: self.enter_panel,
 | 
						|
                up_arrow: self.prev,
 | 
						|
                down_arrow: self.next,
 | 
						|
            },
 | 
						|
        });
 | 
						|
    };
 | 
						|
 | 
						|
    self.prev = function () {
 | 
						|
        curr_li.prev().focus().click();
 | 
						|
        return true;
 | 
						|
    };
 | 
						|
 | 
						|
    self.next = function () {
 | 
						|
        curr_li.next().focus().click();
 | 
						|
        return true;
 | 
						|
    };
 | 
						|
 | 
						|
    self.enter_panel = function () {
 | 
						|
        var panel = self.get_panel();
 | 
						|
        var sel = 'input:visible:first,button:visible:first,select:visible:first';
 | 
						|
        var panel_elem = panel.find(sel).first();
 | 
						|
 | 
						|
        panel_elem.focus();
 | 
						|
        return true;
 | 
						|
    };
 | 
						|
 | 
						|
    self.activate_section = function (section) {
 | 
						|
        curr_li = self.li_for_section(section);
 | 
						|
 | 
						|
        main_elem.children("li").removeClass("active no-border");
 | 
						|
        curr_li.addClass("active");
 | 
						|
        curr_li.prev().addClass("no-border");
 | 
						|
 | 
						|
        var settings_section_hash = '#' + hash_prefix + section;
 | 
						|
        hashchange.update_browser_history(settings_section_hash);
 | 
						|
 | 
						|
        $(".settings-section, .settings-wrapper").removeClass("show");
 | 
						|
 | 
						|
        ui.update_scrollbar($("#settings_content"));
 | 
						|
 | 
						|
        settings_sections.load_settings_section(section);
 | 
						|
 | 
						|
        self.get_panel().addClass('show');
 | 
						|
 | 
						|
        var $settings_overlay_container = $("#settings_overlay_container");
 | 
						|
        $settings_overlay_container.find(".right").addClass("show");
 | 
						|
        $settings_overlay_container.find(".settings-header.mobile").addClass("slide-left");
 | 
						|
 | 
						|
        settings.set_settings_header(section);
 | 
						|
    };
 | 
						|
 | 
						|
    self.get_panel = function () {
 | 
						|
        var section = curr_li.data('section');
 | 
						|
        var sel = "[data-name='" + section + "']";
 | 
						|
        var panel = $(".settings-section" + sel + ", .settings-wrapper" + sel);
 | 
						|
        return panel;
 | 
						|
    };
 | 
						|
 | 
						|
    main_elem.on("click", "li[data-section]", function (e) {
 | 
						|
        var section = $(this).attr('data-section');
 | 
						|
 | 
						|
        self.activate_section(section);
 | 
						|
 | 
						|
        // You generally want to add logic to activate_section,
 | 
						|
        // not to this click handler.
 | 
						|
 | 
						|
        e.stopPropagation();
 | 
						|
    });
 | 
						|
 | 
						|
    return self;
 | 
						|
};
 | 
						|
 | 
						|
exports.initialize = function () {
 | 
						|
    exports.normal_settings = exports.make_menu({
 | 
						|
        main_elem: $('.normal-settings-list'),
 | 
						|
        hash_prefix: "settings/",
 | 
						|
    });
 | 
						|
    exports.org_settings = exports.make_menu({
 | 
						|
        main_elem: $('.org-settings-list'),
 | 
						|
        hash_prefix: "organization/",
 | 
						|
    });
 | 
						|
};
 | 
						|
 | 
						|
exports.show_normal_settings = function () {
 | 
						|
    exports.org_settings.hide();
 | 
						|
    exports.normal_settings.show();
 | 
						|
};
 | 
						|
 | 
						|
exports.show_org_settings = function () {
 | 
						|
    exports.normal_settings.hide();
 | 
						|
    exports.org_settings.show();
 | 
						|
};
 | 
						|
 | 
						|
exports.set_key_handlers = function (toggler) {
 | 
						|
    exports.normal_settings.set_key_handlers(toggler);
 | 
						|
    exports.org_settings.set_key_handlers(toggler);
 | 
						|
};
 | 
						|
 | 
						|
return exports;
 | 
						|
 | 
						|
}());
 | 
						|
 | 
						|
if (typeof module !== 'undefined') {
 | 
						|
    module.exports = settings_panel_menu;
 | 
						|
}
 | 
						|
 | 
						|
window.settings_panel_menu = settings_panel_menu;
 |