mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							1f4e1ece3a
						
					
				
				
					commit
					2d73e03e37
				
			@@ -57,7 +57,7 @@
 | 
			
		||||
        "compose_actions": false,
 | 
			
		||||
        "compose_state": false,
 | 
			
		||||
        "compose_fade": false,
 | 
			
		||||
        "modals": false,
 | 
			
		||||
        "overlays": false,
 | 
			
		||||
        "stream_create": false,
 | 
			
		||||
        "stream_edit": false,
 | 
			
		||||
        "subs": false,
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
//
 | 
			
		||||
// The way the Zulip hotkey tests work is as follows.  First, we set
 | 
			
		||||
// up various contexts by monkey-patching the various hotkeys exports
 | 
			
		||||
// functions (like modals.settings_open).  Within that context, to
 | 
			
		||||
// functions (like overlays.settings_open).  Within that context, to
 | 
			
		||||
// test whether a given key (e.g. `x`) results in a specific function
 | 
			
		||||
// (e.g. `ui.foo()`), we fail to import any modules other than
 | 
			
		||||
// hotkey.js so that accessing them will result in a ReferenceError.
 | 
			
		||||
@@ -17,7 +17,7 @@ set_global('activity', {
 | 
			
		||||
set_global('drafts', {
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
set_global('modals', {
 | 
			
		||||
set_global('overlays', {
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
set_global('reactions', {
 | 
			
		||||
@@ -158,7 +158,7 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
    // We have to skip some checks due to the way the code is
 | 
			
		||||
    // currently organized for mapped keys.
 | 
			
		||||
    hotkey.is_editing_stream_name = return_false;
 | 
			
		||||
    modals.settings_open = return_false;
 | 
			
		||||
    overlays.settings_open = return_false;
 | 
			
		||||
 | 
			
		||||
    set_global('popovers', {
 | 
			
		||||
        actions_popped: return_false,
 | 
			
		||||
@@ -182,7 +182,7 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
    _.each([return_true, return_false], function (settings_open) {
 | 
			
		||||
        _.each([return_true, return_false], function (is_active) {
 | 
			
		||||
            _.each([return_true, return_false], function (info_overlay_open) {
 | 
			
		||||
                set_global('modals', {
 | 
			
		||||
                set_global('overlays', {
 | 
			
		||||
                    is_active: is_active,
 | 
			
		||||
                    settings_open: settings_open,
 | 
			
		||||
                    info_overlay_open: info_overlay_open});
 | 
			
		||||
@@ -194,15 +194,15 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
 | 
			
		||||
    // Ok, now test keys that work when we're viewing messages.
 | 
			
		||||
    hotkey.processing_text = return_false;
 | 
			
		||||
    modals.settings_open = return_false;
 | 
			
		||||
    overlays.settings_open = return_false;
 | 
			
		||||
 | 
			
		||||
    modals.streams_open = return_true;
 | 
			
		||||
    modals.is_active = return_true;
 | 
			
		||||
    overlays.streams_open = return_true;
 | 
			
		||||
    overlays.is_active = return_true;
 | 
			
		||||
    assert_mapping('S', 'subs.keyboard_sub');
 | 
			
		||||
    modals.is_active = return_false;
 | 
			
		||||
    overlays.is_active = return_false;
 | 
			
		||||
    assert_mapping('V', 'subs.view_stream');
 | 
			
		||||
    assert_mapping('n', 'subs.new_stream_clicked');
 | 
			
		||||
    modals.streams_open = return_false;
 | 
			
		||||
    overlays.streams_open = return_false;
 | 
			
		||||
 | 
			
		||||
    assert_mapping('?', 'ui.show_info_overlay');
 | 
			
		||||
    assert_mapping('/', 'search.initiate_search');
 | 
			
		||||
@@ -228,9 +228,9 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
    global.current_msg_list.empty = return_false;
 | 
			
		||||
 | 
			
		||||
    // Check that they do nothing while in the settings overlay
 | 
			
		||||
    modals.settings_open = return_true;
 | 
			
		||||
    overlays.settings_open = return_true;
 | 
			
		||||
    assert_unmapped('@*+rRjJkKsSvi:GM');
 | 
			
		||||
    modals.settings_open = return_false;
 | 
			
		||||
    overlays.settings_open = return_false;
 | 
			
		||||
 | 
			
		||||
    // TODO: Similar check for being in the subs page
 | 
			
		||||
 | 
			
		||||
@@ -307,9 +307,9 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
    list_util.inside_list = return_false;
 | 
			
		||||
    global.current_msg_list.empty = return_true;
 | 
			
		||||
    global.drafts.drafts_overlay_open = return_false;
 | 
			
		||||
    modals.settings_open = return_false;
 | 
			
		||||
    modals.streams_open = return_false;
 | 
			
		||||
    modals.lightbox_open = return_false;
 | 
			
		||||
    overlays.settings_open = return_false;
 | 
			
		||||
    overlays.streams_open = return_false;
 | 
			
		||||
    overlays.lightbox_open = return_false;
 | 
			
		||||
 | 
			
		||||
    assert_unmapped('down_arrow');
 | 
			
		||||
    assert_unmapped('end');
 | 
			
		||||
@@ -334,27 +334,27 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
    assert_mapping('spacebar', 'navigate.page_down');
 | 
			
		||||
    assert_mapping('up_arrow', 'navigate.up');
 | 
			
		||||
 | 
			
		||||
    modals.info_overlay_open = return_true;
 | 
			
		||||
    overlays.info_overlay_open = return_true;
 | 
			
		||||
    assert_unmapped('down_arrow');
 | 
			
		||||
    assert_unmapped('up_arrow');
 | 
			
		||||
    modals.info_overlay_open = return_false;
 | 
			
		||||
    overlays.info_overlay_open = return_false;
 | 
			
		||||
 | 
			
		||||
    modals.streams_open = return_true;
 | 
			
		||||
    overlays.streams_open = return_true;
 | 
			
		||||
    assert_mapping('up_arrow', 'subs.switch_rows');
 | 
			
		||||
    assert_mapping('down_arrow', 'subs.switch_rows');
 | 
			
		||||
    modals.streams_open = return_false;
 | 
			
		||||
    overlays.streams_open = return_false;
 | 
			
		||||
 | 
			
		||||
    modals.lightbox_open = return_true;
 | 
			
		||||
    overlays.lightbox_open = return_true;
 | 
			
		||||
    assert_mapping('left_arrow', 'lightbox.prev');
 | 
			
		||||
    assert_mapping('right_arrow', 'lightbox.next');
 | 
			
		||||
    modals.lightbox_open = return_false;
 | 
			
		||||
    overlays.lightbox_open = return_false;
 | 
			
		||||
 | 
			
		||||
    hotkey.is_editing_stream_name = return_true;
 | 
			
		||||
    assert_unmapped('down_arrow');
 | 
			
		||||
    assert_unmapped('up_arrow');
 | 
			
		||||
    hotkey.is_editing_stream_name = return_false;
 | 
			
		||||
 | 
			
		||||
    modals.settings_open = return_true;
 | 
			
		||||
    overlays.settings_open = return_true;
 | 
			
		||||
    assert_unmapped('end');
 | 
			
		||||
    assert_unmapped('home');
 | 
			
		||||
    assert_unmapped('left_arrow');
 | 
			
		||||
@@ -364,7 +364,7 @@ function stubbing(func_name_to_stub, test_function) {
 | 
			
		||||
 | 
			
		||||
    assert_mapping('up_arrow', 'settings.handle_up_arrow');
 | 
			
		||||
    assert_mapping('down_arrow', 'settings.handle_down_arrow');
 | 
			
		||||
    modals.settings_open = return_false;
 | 
			
		||||
    overlays.settings_open = return_false;
 | 
			
		||||
 | 
			
		||||
    global.drafts.drafts_overlay_open = return_true;
 | 
			
		||||
    assert_mapping('up_arrow', 'drafts.drafts_handle_events');
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,7 @@ exports.launch_page = function (tab) {
 | 
			
		||||
        $(".sidebar .ind-tab[data-tab-key='organization']").click();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modals.open_settings();
 | 
			
		||||
    overlays.open_settings();
 | 
			
		||||
    $active_tab.click();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -314,7 +314,7 @@ $(function () {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $(".brand").on('click', function (e) {
 | 
			
		||||
        if (modals.is_active()) {
 | 
			
		||||
        if (overlays.is_active()) {
 | 
			
		||||
            ui_util.change_tab_to('#home');
 | 
			
		||||
        } else {
 | 
			
		||||
            narrow.restore_home_state();
 | 
			
		||||
@@ -599,7 +599,7 @@ $(function () {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Unfocus our compose area if we click out of it. Don't let exits out
 | 
			
		||||
        // of modals or selecting text (for copy+paste) trigger cancelling.
 | 
			
		||||
        // of overlays or selecting text (for copy+paste) trigger cancelling.
 | 
			
		||||
        if (compose_state.composing() && !$(e.target).is("a") &&
 | 
			
		||||
            ($(e.target).closest(".modal").length === 0) &&
 | 
			
		||||
            window.getSelection().toString() === "" &&
 | 
			
		||||
 
 | 
			
		||||
@@ -128,7 +128,7 @@ exports.restore_draft = function (draft_id) {
 | 
			
		||||
                              draft_copy);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modals.close_modal("drafts");
 | 
			
		||||
    overlays.close_overlay("drafts");
 | 
			
		||||
    compose_fade.clear_compose();
 | 
			
		||||
    if (draft.type === "stream" && draft.stream === "") {
 | 
			
		||||
        draft_copy.subject = "";
 | 
			
		||||
@@ -354,7 +354,7 @@ exports.drafts_handle_events = function (e, event_key) {
 | 
			
		||||
 | 
			
		||||
exports.toggle = function () {
 | 
			
		||||
    if (exports.drafts_overlay_open()) {
 | 
			
		||||
        modals.close_modal("drafts");
 | 
			
		||||
        overlays.close_overlay("drafts");
 | 
			
		||||
    } else {
 | 
			
		||||
        exports.launch();
 | 
			
		||||
    }
 | 
			
		||||
@@ -362,7 +362,7 @@ exports.toggle = function () {
 | 
			
		||||
 | 
			
		||||
exports.launch = function () {
 | 
			
		||||
    exports.setup_page(function () {
 | 
			
		||||
        modals.open_overlay({
 | 
			
		||||
        overlays.open_overlay({
 | 
			
		||||
            name: 'drafts',
 | 
			
		||||
            overlay: $('#draft_overlay'),
 | 
			
		||||
            on_close: function () {
 | 
			
		||||
 
 | 
			
		||||
@@ -243,7 +243,7 @@ function hashchanged(from_reload, e) {
 | 
			
		||||
 | 
			
		||||
        if (!should_ignore(old_hash || "#") || ignore.group !== get_hash_group(base)) {
 | 
			
		||||
            if (ignore.group !== get_hash_group(base)) {
 | 
			
		||||
                modals.close_for_hash_change();
 | 
			
		||||
                overlays.close_for_hash_change();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // now only if the previous one should not have been ignored.
 | 
			
		||||
@@ -267,7 +267,7 @@ function hashchanged(from_reload, e) {
 | 
			
		||||
            subs.change_state(get_hash_components());
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!should_ignore(window.location.hash) && !ignore.flag) {
 | 
			
		||||
        modals.close_for_hash_change();
 | 
			
		||||
        overlays.close_for_hash_change();
 | 
			
		||||
        changing_hash = true;
 | 
			
		||||
        var ret = do_hashchange(from_reload);
 | 
			
		||||
        changing_hash = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -166,8 +166,8 @@ exports.process_escape_key = function (e) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (modals.is_active()) {
 | 
			
		||||
        modals.close_active();
 | 
			
		||||
    if (overlays.is_active()) {
 | 
			
		||||
        overlays.close_active();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -268,13 +268,13 @@ exports.process_enter_key = function (e) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (modals.settings_open()) {
 | 
			
		||||
    if (overlays.settings_open()) {
 | 
			
		||||
        // On the settings page just let the browser handle
 | 
			
		||||
        // the enter key for things like submitting forms.
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (modals.streams_open()) {
 | 
			
		||||
    if (overlays.streams_open()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -416,18 +416,18 @@ exports.process_hotkey = function (e, hotkey) {
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hotkey.message_view_only && modals.is_active()) {
 | 
			
		||||
    if (hotkey.message_view_only && overlays.is_active()) {
 | 
			
		||||
        if (exports.processing_text()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (event_name === 'narrow_by_subject' && modals.streams_open()) {
 | 
			
		||||
        if (event_name === 'narrow_by_subject' && overlays.streams_open()) {
 | 
			
		||||
            subs.keyboard_sub();
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (modals.settings_open()) {
 | 
			
		||||
    if (overlays.settings_open()) {
 | 
			
		||||
        if (exports.processing_text()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
@@ -446,11 +446,11 @@ exports.process_hotkey = function (e, hotkey) {
 | 
			
		||||
        return reactions.reaction_navigate(e, event_name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (modals.info_overlay_open()) {
 | 
			
		||||
    if (overlays.info_overlay_open()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((event_name === 'up_arrow' || event_name === 'down_arrow') && modals.streams_open()) {
 | 
			
		||||
    if ((event_name === 'up_arrow' || event_name === 'down_arrow') && overlays.streams_open()) {
 | 
			
		||||
        return subs.switch_rows(event_name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -516,10 +516,10 @@ exports.process_hotkey = function (e, hotkey) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event_name === 'left_arrow') {
 | 
			
		||||
        if (modals.lightbox_open()) {
 | 
			
		||||
        if (overlays.lightbox_open()) {
 | 
			
		||||
            lightbox.prev();
 | 
			
		||||
            return true;
 | 
			
		||||
        } else if (modals.streams_open()) {
 | 
			
		||||
        } else if (overlays.streams_open()) {
 | 
			
		||||
            subs.toggle_view(event_name);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
@@ -529,10 +529,10 @@ exports.process_hotkey = function (e, hotkey) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event_name === 'right_arrow') {
 | 
			
		||||
        if (modals.lightbox_open()) {
 | 
			
		||||
        if (overlays.lightbox_open()) {
 | 
			
		||||
            lightbox.next();
 | 
			
		||||
            return true;
 | 
			
		||||
        } else if (modals.streams_open()) {
 | 
			
		||||
        } else if (overlays.streams_open()) {
 | 
			
		||||
            subs.toggle_view(event_name);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
@@ -572,12 +572,12 @@ exports.process_hotkey = function (e, hotkey) {
 | 
			
		||||
            navigate.cycle_stream('forward');
 | 
			
		||||
            return true;
 | 
			
		||||
        case 'view_selected_stream':
 | 
			
		||||
            if (modals.streams_open()) {
 | 
			
		||||
            if (overlays.streams_open()) {
 | 
			
		||||
                subs.view_stream();
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        case 'n_key':
 | 
			
		||||
            if (modals.streams_open()) {
 | 
			
		||||
            if (overlays.streams_open()) {
 | 
			
		||||
                subs.new_stream_clicked();
 | 
			
		||||
            } else {
 | 
			
		||||
                narrow.narrow_to_next_topic();
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ exports.initialize = function () {
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    modals.open_overlay({
 | 
			
		||||
    overlays.open_overlay({
 | 
			
		||||
        name: 'invite',
 | 
			
		||||
        overlay: $('#invite-user'),
 | 
			
		||||
        on_close: function () {
 | 
			
		||||
 
 | 
			
		||||
@@ -105,16 +105,16 @@ exports.open = function (image) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function lightbox_close_modal() {
 | 
			
		||||
    function lightbox_close_overlay() {
 | 
			
		||||
        $(".player-container iframe").remove();
 | 
			
		||||
        is_open = false;
 | 
			
		||||
        document.activeElement.blur();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modals.open_overlay({
 | 
			
		||||
    overlays.open_overlay({
 | 
			
		||||
        name: 'lightbox',
 | 
			
		||||
        overlay: $("#lightbox_overlay"),
 | 
			
		||||
        on_close: lightbox_close_modal,
 | 
			
		||||
        on_close: lightbox_close_overlay,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    popovers.hide_all();
 | 
			
		||||
 
 | 
			
		||||
@@ -446,7 +446,7 @@ exports.restore_home_state = function () {
 | 
			
		||||
    // If we click on the Home link from another nav pane, just go
 | 
			
		||||
    // back to the state you were in (possibly still narrowed) before
 | 
			
		||||
    // you left the Home pane.
 | 
			
		||||
    if (!modals.is_active()) {
 | 
			
		||||
    if (!overlays.is_active()) {
 | 
			
		||||
        exports.deactivate();
 | 
			
		||||
    }
 | 
			
		||||
    navigate.maybe_scroll_to_selected();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,46 +1,46 @@
 | 
			
		||||
var modals = (function () {
 | 
			
		||||
var overlays = (function () {
 | 
			
		||||
 | 
			
		||||
var exports = {};
 | 
			
		||||
 | 
			
		||||
var active_overlay;
 | 
			
		||||
var close_handler;
 | 
			
		||||
var open_modal_name;
 | 
			
		||||
var open_overlay_name;
 | 
			
		||||
 | 
			
		||||
function reset_state() {
 | 
			
		||||
    active_overlay = undefined;
 | 
			
		||||
    close_handler = undefined;
 | 
			
		||||
    open_modal_name = undefined;
 | 
			
		||||
    open_overlay_name = undefined;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.is_active = function () {
 | 
			
		||||
    return !!open_modal_name;
 | 
			
		||||
    return !!open_overlay_name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.info_overlay_open = function () {
 | 
			
		||||
    return open_modal_name === 'informationalOverlays';
 | 
			
		||||
    return open_overlay_name === 'informationalOverlays';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.settings_open = function () {
 | 
			
		||||
    return open_modal_name === 'settings';
 | 
			
		||||
    return open_overlay_name === 'settings';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.streams_open = function () {
 | 
			
		||||
    return open_modal_name === 'subscriptions';
 | 
			
		||||
    return open_overlay_name === 'subscriptions';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.lightbox_open = function () {
 | 
			
		||||
    return open_modal_name === 'lightbox';
 | 
			
		||||
    return open_overlay_name === 'lightbox';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.open_overlay = function (opts) {
 | 
			
		||||
    if (!opts.name || !opts.overlay || !opts.on_close) {
 | 
			
		||||
        blueslip.error('Programming error in open_modal');
 | 
			
		||||
        blueslip.error('Programming error in open_overlay');
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (active_overlay || open_modal_name || close_handler) {
 | 
			
		||||
    if (active_overlay || open_overlay_name || close_handler) {
 | 
			
		||||
        blueslip.error('Programming error--trying to open ' + opts.name +
 | 
			
		||||
            ' before closing ' + open_modal_name);
 | 
			
		||||
            ' before closing ' + open_overlay_name);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -52,7 +52,7 @@ exports.open_overlay = function (opts) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    open_modal_name = opts.name;
 | 
			
		||||
    open_overlay_name = opts.name;
 | 
			
		||||
    active_overlay = opts.overlay;
 | 
			
		||||
    opts.overlay.addClass('show');
 | 
			
		||||
 | 
			
		||||
@@ -62,16 +62,16 @@ exports.open_overlay = function (opts) {
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.close_modal = function (name) {
 | 
			
		||||
    if (name !== open_modal_name) {
 | 
			
		||||
        blueslip.error("Trying to close " + name + " when " + open_modal_name + " is open." );
 | 
			
		||||
exports.close_overlay = function (name) {
 | 
			
		||||
    if (name !== open_overlay_name) {
 | 
			
		||||
        blueslip.error("Trying to close " + name + " when " + open_overlay_name + " is open." );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    active_overlay.removeClass("show");
 | 
			
		||||
 | 
			
		||||
    if (!close_handler) {
 | 
			
		||||
        blueslip.error("Modal close handler for " + name + " not properly setup." );
 | 
			
		||||
        blueslip.error("Overlay close handler for " + name + " not properly setup." );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -79,12 +79,12 @@ exports.close_modal = function (name) {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.close_active = function () {
 | 
			
		||||
    if (!open_modal_name) {
 | 
			
		||||
    if (!open_overlay_name) {
 | 
			
		||||
        blueslip.warn('close_active() called without checking is_active()');
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    exports.close_modal(open_modal_name);
 | 
			
		||||
    exports.close_overlay(open_overlay_name);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.close_for_hash_change = function () {
 | 
			
		||||
@@ -93,7 +93,7 @@ exports.close_for_hash_change = function () {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.open_settings = function () {
 | 
			
		||||
    modals.open_overlay({
 | 
			
		||||
    overlays.open_overlay({
 | 
			
		||||
        name: 'settings',
 | 
			
		||||
        overlay: $("#settings_overlay_container"),
 | 
			
		||||
        on_close: function () {
 | 
			
		||||
@@ -117,7 +117,7 @@ $(function () {
 | 
			
		||||
 | 
			
		||||
        var target_name = $target.attr("data-overlay");
 | 
			
		||||
 | 
			
		||||
        exports.close_modal(target_name);
 | 
			
		||||
        exports.close_overlay(target_name);
 | 
			
		||||
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        e.stopPropagation();
 | 
			
		||||
@@ -129,5 +129,5 @@ return exports;
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
if (typeof module !== 'undefined') {
 | 
			
		||||
    module.exports = modals;
 | 
			
		||||
    module.exports = overlays;
 | 
			
		||||
}
 | 
			
		||||
@@ -113,7 +113,7 @@ exports.launch_page = function (tab) {
 | 
			
		||||
        $(".sidebar .ind-tab[data-tab-key='settings']").click();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modals.open_settings();
 | 
			
		||||
    overlays.open_settings();
 | 
			
		||||
 | 
			
		||||
    $active_tab.click();
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -438,7 +438,7 @@ $(function () {
 | 
			
		||||
        if (e.metaKey || e.ctrlKey) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (modals.is_active()) {
 | 
			
		||||
        if (overlays.is_active()) {
 | 
			
		||||
            ui_util.change_tab_to('#home');
 | 
			
		||||
        }
 | 
			
		||||
        var stream = $(e.target).parents('li').attr('data-name');
 | 
			
		||||
@@ -511,7 +511,7 @@ function maybe_select_stream(e) {
 | 
			
		||||
        var topStream = $('#stream_filters li.narrow-filter').first().data('name');
 | 
			
		||||
        if (topStream !== undefined) {
 | 
			
		||||
            // undefined if there are no results
 | 
			
		||||
            if (modals.is_active()) {
 | 
			
		||||
            if (overlays.is_active()) {
 | 
			
		||||
                ui_util.change_tab_to('#home');
 | 
			
		||||
            }
 | 
			
		||||
            exports.clear_and_hide_search();
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ exports.update_in_home_view = function (sub, value) {
 | 
			
		||||
        var msg_offset;
 | 
			
		||||
        var saved_ypos;
 | 
			
		||||
        // Save our current scroll position
 | 
			
		||||
        if (modals.is_active()) {
 | 
			
		||||
        if (overlays.is_active()) {
 | 
			
		||||
            saved_ypos = message_viewport.scrollTop();
 | 
			
		||||
        } else if (home_msg_list === current_msg_list &&
 | 
			
		||||
                   current_msg_list.selected_row().offset() !== null) {
 | 
			
		||||
@@ -24,7 +24,7 @@ exports.update_in_home_view = function (sub, value) {
 | 
			
		||||
        message_util.add_messages(message_list.all.all_messages(), home_msg_list);
 | 
			
		||||
 | 
			
		||||
        // Ensure we're still at the same scroll position
 | 
			
		||||
        if (modals.is_active()) {
 | 
			
		||||
        if (overlays.is_active()) {
 | 
			
		||||
            message_viewport.scrollTop(saved_ypos);
 | 
			
		||||
        } else if (home_msg_list === current_msg_list) {
 | 
			
		||||
            // We pass use_closest to handle the case where the
 | 
			
		||||
 
 | 
			
		||||
@@ -449,7 +449,7 @@ exports.change_state = (function () {
 | 
			
		||||
 | 
			
		||||
exports.launch = function (hash) {
 | 
			
		||||
    exports.setup_page(function () {
 | 
			
		||||
        modals.open_overlay({
 | 
			
		||||
        overlays.open_overlay({
 | 
			
		||||
            name: 'subscriptions',
 | 
			
		||||
            overlay: $("#subscription_overlay"),
 | 
			
		||||
            on_close: exports.close,
 | 
			
		||||
@@ -542,7 +542,7 @@ function ajaxSubscribe(stream) {
 | 
			
		||||
        url: "/json/users/me/subscriptions",
 | 
			
		||||
        data: {subscriptions: JSON.stringify([{name: stream}]) },
 | 
			
		||||
        success: function (resp, statusText, xhr) {
 | 
			
		||||
            if (modals.streams_open()) {
 | 
			
		||||
            if (overlays.streams_open()) {
 | 
			
		||||
                $("#create_stream_name").val("");
 | 
			
		||||
 | 
			
		||||
                actually_filter_streams();
 | 
			
		||||
 
 | 
			
		||||
@@ -214,7 +214,7 @@ exports.set_click_handlers = function (callbacks) {
 | 
			
		||||
 | 
			
		||||
        // In a more componentized world, we would delegate some
 | 
			
		||||
        // of this stuff back up to our parents.
 | 
			
		||||
        if (modals.is_active()) {
 | 
			
		||||
        if (overlays.is_active()) {
 | 
			
		||||
            ui_util.change_tab_to('#home');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -504,7 +504,7 @@ function welcome() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.start = function () {
 | 
			
		||||
    if (modals.is_active()) {
 | 
			
		||||
    if (overlays.is_active()) {
 | 
			
		||||
        ui_util.change_tab_to('#home');
 | 
			
		||||
    }
 | 
			
		||||
    narrow.deactivate();
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@ exports.show_info_overlay = function (target) {
 | 
			
		||||
    var overlay = $(".informational-overlays");
 | 
			
		||||
 | 
			
		||||
    if (!overlay.hasClass("show")) {
 | 
			
		||||
        modals.open_overlay({
 | 
			
		||||
        overlays.open_overlay({
 | 
			
		||||
            name:  'informationalOverlays',
 | 
			
		||||
            overlay: overlay,
 | 
			
		||||
            on_close: function () {},
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,7 @@ $(function () {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    message_viewport.message_pane.mousewheel(function (e, delta) {
 | 
			
		||||
        if (!modals.is_active()) {
 | 
			
		||||
        if (!overlays.is_active()) {
 | 
			
		||||
            // In the message view, we use a throttled mousewheel handler.
 | 
			
		||||
            throttled_mousewheelhandler(e, delta);
 | 
			
		||||
        }
 | 
			
		||||
@@ -78,7 +78,7 @@ $(function () {
 | 
			
		||||
 | 
			
		||||
    $(window).resize($.throttle(50, resize.handler));
 | 
			
		||||
 | 
			
		||||
    // Scrolling in modals, input boxes, and other elements that
 | 
			
		||||
    // Scrolling in overlays. input boxes, and other elements that
 | 
			
		||||
    // explicitly scroll should not scroll the main view.  Stop
 | 
			
		||||
    // propagation in all cases.  Also, ignore the event if the
 | 
			
		||||
    // element is already at the top or bottom.  Otherwise we get a
 | 
			
		||||
 
 | 
			
		||||
@@ -221,14 +221,14 @@ def find_edges_to_remove(graph, methods):
 | 
			
		||||
        ('subs', 'narrow'),
 | 
			
		||||
        ('unread_ui', 'pm_list'),
 | 
			
		||||
        ('unread_ui', 'stream_list'),
 | 
			
		||||
        ('modals', 'hashchange'),
 | 
			
		||||
        ('overlays', 'hashchange'),
 | 
			
		||||
        ('emoji_picker', 'reactions'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    def cut_is_legal(edge):
 | 
			
		||||
        # type: (Edge) -> bool
 | 
			
		||||
        parent, child = edge
 | 
			
		||||
        if child in ['reload', 'popovers', 'modals', 'notifications',
 | 
			
		||||
        if child in ['reload', 'popovers', 'overlays', 'notifications',
 | 
			
		||||
                     'server_events', 'compose_actions']:
 | 
			
		||||
            return True
 | 
			
		||||
        return edge in APPROVED_CUTS
 | 
			
		||||
 
 | 
			
		||||
@@ -916,7 +916,7 @@ JS_SPECS = {
 | 
			
		||||
            'js/copy_and_paste.js',
 | 
			
		||||
            'js/stream_popover.js',
 | 
			
		||||
            'js/popovers.js',
 | 
			
		||||
            'js/modals.js',
 | 
			
		||||
            'js/overlays.js',
 | 
			
		||||
            'js/typeahead_helper.js',
 | 
			
		||||
            'js/search_suggestion.js',
 | 
			
		||||
            'js/search.js',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user