diff --git a/.eslintrc.json b/.eslintrc.json index b587495296..bad432c4f2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -166,7 +166,6 @@ "recent_topics": false, "reminder": false, "search_pill_widget": false, - "server_events": false, "settings": false, "settings_account": false, "settings_bots": false, diff --git a/frontend_tests/node_tests/activity.js b/frontend_tests/node_tests/activity.js index 099b65b60b..20399ee1f1 100644 --- a/frontend_tests/node_tests/activity.js +++ b/frontend_tests/node_tests/activity.js @@ -82,7 +82,7 @@ rewiremock("../../static/js/resize").with(_resize); rewiremock("../../static/js/scroll_util").with(_scroll_util); rewiremock("../../static/js/stream_popover").with(_stream_popover); set_global("ui", _ui); -set_global("server_events", { +rewiremock("../../static/js/server_events").with({ check_for_unsuspend() {}, }); diff --git a/frontend_tests/node_tests/compose.js b/frontend_tests/node_tests/compose.js index 1191231e91..90ef832820 100644 --- a/frontend_tests/node_tests/compose.js +++ b/frontend_tests/node_tests/compose.js @@ -735,7 +735,7 @@ test_ui("send_message", () => { set_global("setTimeout", (func) => { func(); }); - set_global("server_events", { + rewiremock("../../static/js/server_events").with({ assert_get_events_running() { stub_state.get_events_running_called += 1; }, diff --git a/frontend_tests/node_tests/message_fetch.js b/frontend_tests/node_tests/message_fetch.js index bdff46f640..b71d7c8522 100644 --- a/frontend_tests/node_tests/message_fetch.js +++ b/frontend_tests/node_tests/message_fetch.js @@ -47,7 +47,8 @@ const narrow_state = {__esModule: true}; rewiremock("../../static/js/narrow_state").with(narrow_state); const pm_list = {__esModule: true}; rewiremock("../../static/js/pm_list").with(pm_list); -const server_events = set_global("server_events", {}); +const server_events = {__esModule: true}; +rewiremock("../../static/js/server_events").with(server_events); const stream_list = set_global("stream_list", { maybe_scroll_narrow_into_view: () => {}, }); diff --git a/frontend_tests/node_tests/presence.js b/frontend_tests/node_tests/presence.js index db7a21c368..1b9eb02025 100644 --- a/frontend_tests/node_tests/presence.js +++ b/frontend_tests/node_tests/presence.js @@ -4,10 +4,11 @@ const {strict: assert} = require("assert"); const rewiremock = require("rewiremock/node"); -const {set_global, zrequire} = require("../zjsunit/namespace"); +const {zrequire} = require("../zjsunit/namespace"); const {run_test} = require("../zjsunit/test"); -const server_events = set_global("server_events", {}); +const server_events = {__esModule: true}; +rewiremock("../../static/js/server_events").with(server_events); const reload_state = { __esModule: true, is_in_progress: () => false, diff --git a/frontend_tests/node_tests/ui_init.js b/frontend_tests/node_tests/ui_init.js index 0bdbdecda1..677ae3e710 100644 --- a/frontend_tests/node_tests/ui_init.js +++ b/frontend_tests/node_tests/ui_init.js @@ -87,7 +87,11 @@ set_global("panels", {initialize() {}}); rewiremock("../../static/js/popovers").with({initialize() {}}); rewiremock("../../static/js/reload").with({initialize() {}}); rewiremock("../../static/js/scroll_bar").with({initialize() {}}); -const server_events = set_global("server_events", {initialize() {}}); +const server_events = { + __esModule: true, + initialize() {}, +}; +rewiremock("../../static/js/server_events").with(server_events); set_global("settings_sections", {initialize() {}}); rewiremock("../../static/js/settings_panel_menu").with({initialize() {}}); rewiremock("../../static/js/settings_toggle").with({initialize() {}}); diff --git a/static/js/activity.js b/static/js/activity.js index 5c1b7863c6..49263a4992 100644 --- a/static/js/activity.js +++ b/static/js/activity.js @@ -8,6 +8,7 @@ const {ListCursor} = require("./list_cursor"); const people = require("./people"); const pm_list = require("./pm_list"); const popovers = require("./popovers"); +const server_events = require("./server_events"); const {UserSearch} = require("./user_search"); const user_status = require("./user_status"); diff --git a/static/js/click_handlers.js b/static/js/click_handlers.js index 7f2e90d07e..b4d93f7da7 100644 --- a/static/js/click_handlers.js +++ b/static/js/click_handlers.js @@ -20,6 +20,7 @@ import * as notifications from "./notifications"; import * as overlays from "./overlays"; import * as popovers from "./popovers"; import * as rows from "./rows"; +import * as server_events from "./server_events"; import * as settings_panel_menu from "./settings_panel_menu"; import * as settings_toggle from "./settings_toggle"; import * as stream_edit from "./stream_edit"; diff --git a/static/js/compose.js b/static/js/compose.js index 7bd442399b..8f5fa3d460 100644 --- a/static/js/compose.js +++ b/static/js/compose.js @@ -23,6 +23,7 @@ import * as rendered_markdown from "./rendered_markdown"; import * as resize from "./resize"; import * as rtl from "./rtl"; import * as sent_messages from "./sent_messages"; +import * as server_events from "./server_events"; import * as settings_config from "./settings_config"; import * as stream_data from "./stream_data"; import * as stream_edit from "./stream_edit"; diff --git a/static/js/global.d.ts b/static/js/global.d.ts index 1979143f85..23bbf07701 100644 --- a/static/js/global.d.ts +++ b/static/js/global.d.ts @@ -38,7 +38,6 @@ declare let realm_logo: any; declare let recent_topics: any; declare let reminder: any; declare let search_pill_widget: any; -declare let server_events: any; declare let settings: any; declare let settings_account: any; declare let settings_bots: any; diff --git a/static/js/message_fetch.js b/static/js/message_fetch.js index 37d56bbffd..1e6cd4cb1c 100644 --- a/static/js/message_fetch.js +++ b/static/js/message_fetch.js @@ -6,6 +6,7 @@ import * as message_store from "./message_store"; import * as message_util from "./message_util"; import * as people from "./people"; import * as pm_list from "./pm_list"; +import * as server_events from "./server_events"; import * as stream_data from "./stream_data"; import * as ui_report from "./ui_report"; diff --git a/static/js/presence.js b/static/js/presence.js index ebb129f1ed..e58d138b9b 100644 --- a/static/js/presence.js +++ b/static/js/presence.js @@ -2,6 +2,7 @@ const people = require("./people"); const reload_state = require("./reload_state"); +const server_events = require("./server_events"); // This module just manages data. See activity.js for // the UI of our buddy list. diff --git a/static/js/reload.js b/static/js/reload.js index 1353103e6f..7ddd2144f3 100644 --- a/static/js/reload.js +++ b/static/js/reload.js @@ -4,6 +4,7 @@ import * as hashchange from "./hashchange"; import {localstorage} from "./localstorage"; import * as narrow_state from "./narrow_state"; import * as reload_state from "./reload_state"; +import * as server_events from "./server_events"; import * as ui_report from "./ui_report"; import * as util from "./util"; diff --git a/static/js/sent_messages.js b/static/js/sent_messages.js index 36686040fa..d21bda1b6b 100644 --- a/static/js/sent_messages.js +++ b/static/js/sent_messages.js @@ -1,4 +1,5 @@ import * as channel from "./channel"; +import * as server_events from "./server_events"; export let next_local_id; export const messages = new Map(); diff --git a/static/js/server_events.js b/static/js/server_events.js index 45b3a9eb89..b438984052 100644 --- a/static/js/server_events.js +++ b/static/js/server_events.js @@ -1,15 +1,14 @@ -"use strict"; +import _ from "lodash"; -const _ = require("lodash"); +import * as channel from "./channel"; +import * as echo from "./echo"; +import * as message_store from "./message_store"; +import * as reload from "./reload"; +import * as reload_state from "./reload_state"; +import * as sent_messages from "./sent_messages"; +import * as server_events_dispatch from "./server_events_dispatch"; +import * as ui_report from "./ui_report"; -const channel = require("./channel"); -const echo = require("./echo"); -const message_store = require("./message_store"); -const reload = require("./reload"); -const reload_state = require("./reload_state"); -const sent_messages = require("./sent_messages"); -const server_events_dispatch = require("./server_events_dispatch"); -const ui_report = require("./ui_report"); // Docs: https://zulip.readthedocs.io/en/latest/subsystems/events-system.html let waiting_on_homeview_load = true; @@ -25,7 +24,7 @@ const get_events_params = {}; // force-reconnect to the events server due to suspecting we are // offline. It is important for avoiding races with the presence // system when coming back from unsuspend. -exports.suspect_offline = false; +export let suspect_offline = false; function get_events_success(events) { let messages = []; @@ -192,7 +191,7 @@ function get_events(options) { // that means it's fairly likely that this client has been off // the Internet and thus may have stale state (which is // important for potential presence issues). - exports.suspect_offline = true; + suspect_offline = true; } if (get_events_params.queue_id === undefined) { get_events_params.queue_id = page_params.queue_id; @@ -216,7 +215,7 @@ function get_events(options) { idempotent: true, timeout: page_params.poll_timeout, success(data) { - exports.suspect_offline = false; + suspect_offline = false; try { get_events_xhr = undefined; get_events_failures = 0; @@ -279,29 +278,30 @@ function get_events(options) { }); } -exports.assert_get_events_running = function assert_get_events_running(error_message) { +export function assert_get_events_running(error_message) { if (get_events_xhr === undefined && get_events_timeout === undefined) { - exports.restart_get_events({dont_block: true}); + restart_get_events({dont_block: true}); blueslip.error(error_message); } -}; +} -exports.restart_get_events = function restart_get_events(options) { +export function restart_get_events(options) { get_events(options); -}; +} -exports.force_get_events = function force_get_events() { +export function force_get_events() { get_events_timeout = setTimeout(get_events, 0); -}; +} -exports.home_view_loaded = function home_view_loaded() { +export function home_view_loaded() { waiting_on_homeview_load = false; get_events_success([]); $(document).trigger("home_view_loaded.zulip"); -}; +} let watchdog_time = $.now(); -exports.check_for_unsuspend = function () { + +export function check_for_unsuspend() { const new_time = $.now(); if (new_time - watchdog_time > 20000) { // 20 seconds. @@ -313,20 +313,21 @@ exports.check_for_unsuspend = function () { $(document).trigger("unsuspend"); } watchdog_time = new_time; -}; -setInterval(exports.check_for_unsuspend, 5000); +} -exports.initialize = function () { +setInterval(check_for_unsuspend, 5000); + +export function initialize() { $(document).on("unsuspend", () => { // Immediately poll for new events on unsuspend blueslip.log("Restarting get_events due to unsuspend"); get_events_failures = 0; - exports.restart_get_events({dont_block: true}); + restart_get_events({dont_block: true}); }); get_events(); -}; +} -exports.cleanup_event_queue = function cleanup_event_queue() { +export function cleanup_event_queue() { // Submit a request to the server to cleanup our event queue if (page_params.event_queue_expired === true || page_params.no_event_queue === true) { return; @@ -339,13 +340,11 @@ exports.cleanup_event_queue = function cleanup_event_queue() { data: {queue_id: page_params.queue_id}, ignore_reload: true, }); -}; +} window.addEventListener("beforeunload", () => { - exports.cleanup_event_queue(); + cleanup_event_queue(); }); // For unit testing -exports._get_events_success = get_events_success; - -window.server_events = exports; +export const _get_events_success = get_events_success; diff --git a/static/js/ui_init.js b/static/js/ui_init.js index 5fa7c8e501..8a86a40053 100644 --- a/static/js/ui_init.js +++ b/static/js/ui_init.js @@ -40,6 +40,7 @@ const rows = require("./rows"); const scroll_bar = require("./scroll_bar"); const search = require("./search"); const sent_messages = require("./sent_messages"); +const server_events = require("./server_events"); const settings_panel_menu = require("./settings_panel_menu"); const settings_toggle = require("./settings_toggle"); const spoilers = require("./spoilers");