diff --git a/.eslintrc.json b/.eslintrc.json index c7cb483bf0..3f1e89e556 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -176,7 +176,6 @@ "realm_night_logo": false, "recent_topics": false, "reminder": false, - "search": false, "search_pill_widget": false, "server_events": false, "settings": false, diff --git a/frontend_tests/node_tests/hashchange.js b/frontend_tests/node_tests/hashchange.js index fb296482c8..f6b70f9624 100644 --- a/frontend_tests/node_tests/hashchange.js +++ b/frontend_tests/node_tests/hashchange.js @@ -15,7 +15,7 @@ set_global("location", { }); set_global("to_$", () => window_stub); -set_global("search", { +rewiremock("../../static/js/search").with({ update_button_visibility: () => {}, }); set_global("document", "document-stub"); diff --git a/frontend_tests/node_tests/hotkey.js b/frontend_tests/node_tests/hotkey.js index 3c45069723..7972744fd2 100644 --- a/frontend_tests/node_tests/hotkey.js +++ b/frontend_tests/node_tests/hotkey.js @@ -92,7 +92,8 @@ rewiremock("../../static/js/muting_ui").with(muting_ui); const narrow = set_global("narrow", {}); const navigate = set_global("navigate", {}); const reactions = set_global("reactions", {}); -const search = set_global("search", {}); +const search = {__esModule: true}; +rewiremock("../../static/js/search").with(search); const stream_list = set_global("stream_list", {}); const subs = set_global("subs", {}); diff --git a/frontend_tests/node_tests/narrow_activate.js b/frontend_tests/node_tests/narrow_activate.js index 52f05af86a..58d0b760f6 100644 --- a/frontend_tests/node_tests/narrow_activate.js +++ b/frontend_tests/node_tests/narrow_activate.js @@ -30,7 +30,8 @@ rewiremock("../../static/js/message_scroll").with(message_scroll); set_global("message_util", {}); const notifications = set_global("notifications", {}); set_global("page_params", {}); -const search = set_global("search", {}); +const search = {__esModule: true}; +rewiremock("../../static/js/search").with(search); const stream_list = set_global("stream_list", {}); const message_view_header = set_global("message_view_header", {}); const top_left_corner = {__esModule: true}; diff --git a/frontend_tests/node_tests/search.js b/frontend_tests/node_tests/search.js index d18fdc742e..0b24c418cf 100644 --- a/frontend_tests/node_tests/search.js +++ b/frontend_tests/node_tests/search.js @@ -195,7 +195,7 @@ run_test("initialize", () => { assert(!is_blurred); assert(is_append_search_string_called); - search.is_using_input_method = true; + search.__Rewire__("is_using_input_method", true); _setup("stream:Verona"); assert.equal(opts.updater("stream:Verona"), "stream:Verona"); @@ -222,7 +222,7 @@ run_test("initialize", () => { searchbox.trigger("focusout"); assert.deepEqual(searchbox.css(), {"box-shadow": "unset"}); - search.is_using_input_method = false; + search.__Rewire__("is_using_input_method", false); searchbox_form.trigger("compositionend"); assert(search.is_using_input_method); @@ -303,7 +303,7 @@ run_test("initialize", () => { assert(is_blurred); _setup("ver"); - search.is_using_input_method = true; + search.__Rewire__("is_using_input_method", true); searchbox_form.trigger(ev); // No change on Enter keyup event when using input tool assert(!is_blurred); diff --git a/frontend_tests/node_tests/search_legacy.js b/frontend_tests/node_tests/search_legacy.js index c605d607ea..b387723efc 100644 --- a/frontend_tests/node_tests/search_legacy.js +++ b/frontend_tests/node_tests/search_legacy.js @@ -161,7 +161,7 @@ run_test("initialize", () => { assert.equal(opts.updater("stream:Verona"), "stream:Verona"); assert(is_blurred); - search.is_using_input_method = true; + search.__Rewire__("is_using_input_method", true); _setup("stream:Verona"); assert.equal(opts.updater("stream:Verona"), "stream:Verona"); assert(!is_blurred); @@ -181,7 +181,7 @@ run_test("initialize", () => { search_query_box.trigger("blur"); assert.equal(search_query_box.val(), "test string"); - search.is_using_input_method = false; + search.__Rewire__("is_using_input_method", false); searchbox_form.trigger("compositionend"); assert(search.is_using_input_method); @@ -261,7 +261,7 @@ run_test("initialize", () => { assert(is_blurred); _setup("ver"); - search.is_using_input_method = true; + search.__Rewire__("is_using_input_method", true); searchbox_form.trigger(ev); // No change on Enter keyup event when using input tool assert(!is_blurred); diff --git a/frontend_tests/node_tests/ui_init.js b/frontend_tests/node_tests/ui_init.js index b6fdf42d0d..b8924cbc38 100644 --- a/frontend_tests/node_tests/ui_init.js +++ b/frontend_tests/node_tests/ui_init.js @@ -119,7 +119,6 @@ const upload = zrequire("upload"); const compose = zrequire("compose"); zrequire("composebox_typeahead"); zrequire("narrow"); -zrequire("search"); zrequire("notifications"); zrequire("stream_list"); zrequire("starred_messages"); diff --git a/static/js/bundles/app.js b/static/js/bundles/app.js index 4f2a51db52..3a6b5820fd 100644 --- a/static/js/bundles/app.js +++ b/static/js/bundles/app.js @@ -27,7 +27,6 @@ import "../reload"; import "../compose_actions"; import "../subs"; import "../ui"; -import "../search"; import "../composebox_typeahead"; import "../navigate"; import "../list_util"; diff --git a/static/js/global.d.ts b/static/js/global.d.ts index 67d3ec43e9..d037bce918 100644 --- a/static/js/global.d.ts +++ b/static/js/global.d.ts @@ -49,7 +49,6 @@ declare let realm_icon: any; declare let realm_logo: any; declare let recent_topics: any; declare let reminder: any; -declare let search: any; declare let search_pill_widget: any; declare let server_events: any; declare let settings: any; diff --git a/static/js/hashchange.js b/static/js/hashchange.js index 96feea16a9..46f95a3c6b 100644 --- a/static/js/hashchange.js +++ b/static/js/hashchange.js @@ -6,6 +6,7 @@ const info_overlay = require("./info_overlay"); const invite = require("./invite"); const message_viewport = require("./message_viewport"); const overlays = require("./overlays"); +const search = require("./search"); const settings_panel_menu = require("./settings_panel_menu"); const top_left_corner = require("./top_left_corner"); const ui_util = require("./ui_util"); diff --git a/static/js/hotkey.js b/static/js/hotkey.js index 6336f95005..e4e50dde28 100644 --- a/static/js/hotkey.js +++ b/static/js/hotkey.js @@ -15,6 +15,7 @@ const message_edit = require("./message_edit"); const muting_ui = require("./muting_ui"); const overlays = require("./overlays"); const popovers = require("./popovers"); +const search = require("./search"); const stream_popover = require("./stream_popover"); const topic_zoom = require("./topic_zoom"); diff --git a/static/js/message_view_header.js b/static/js/message_view_header.js index b5d97f17b5..3cd9a185c8 100644 --- a/static/js/message_view_header.js +++ b/static/js/message_view_header.js @@ -5,6 +5,7 @@ const render_message_view_header = require("../templates/message_view_header.hbs const narrow_state = require("./narrow_state"); const peer_data = require("./peer_data"); const rendered_markdown = require("./rendered_markdown"); +const search = require("./search"); function get_formatted_sub_count(sub_count) { if (sub_count >= 1000) { diff --git a/static/js/narrow.js b/static/js/narrow.js index 2837a5f774..2a7677241e 100644 --- a/static/js/narrow.js +++ b/static/js/narrow.js @@ -12,6 +12,7 @@ const message_scroll = require("./message_scroll"); const narrow_state = require("./narrow_state"); const people = require("./people"); const resize = require("./resize"); +const search = require("./search"); const search_pill = require("./search_pill"); const stream_data = require("./stream_data"); const stream_topic_history = require("./stream_topic_history"); diff --git a/static/js/search.js b/static/js/search.js index 42f78753d8..c3fbe05d5c 100644 --- a/static/js/search.js +++ b/static/js/search.js @@ -1,17 +1,15 @@ -"use strict"; - -const {Filter} = require("./filter"); -const narrow_state = require("./narrow_state"); -const search_pill = require("./search_pill"); -const search_suggestion = require("./search_suggestion"); -const ui_util = require("./ui_util"); +import {Filter} from "./filter"; +import * as narrow_state from "./narrow_state"; +import * as search_pill from "./search_pill"; +import * as search_suggestion from "./search_suggestion"; +import * as ui_util from "./ui_util"; // Exported for unit testing -exports.is_using_input_method = false; +export let is_using_input_method = false; -exports.narrow_or_search_for_term = function (search_string) { +export function narrow_or_search_for_term(search_string) { const search_query_box = $("#search_query"); - if (exports.is_using_input_method) { + if (is_using_input_method) { // Neither narrow nor search when using input tools as // `updater` is also triggered when 'enter' is triggered // while using input tool @@ -43,7 +41,7 @@ exports.narrow_or_search_for_term = function (search_string) { search_query_box.trigger("blur"); } return search_query_box.val(); -}; +} function update_buttons_with_focus(focused) { const search_query_box = $("#search_query"); @@ -55,11 +53,11 @@ function update_buttons_with_focus(focused) { } } -exports.update_button_visibility = function () { +export function update_button_visibility() { update_buttons_with_focus($("#search_query").is(":focus")); -}; +} -exports.initialize = function () { +export function initialize() { const search_query_box = $("#search_query"); const searchbox_form = $("#searchbox_form"); const searchbox = $("#searchbox"); @@ -100,7 +98,7 @@ exports.initialize = function () { search_pill.append_search_string(search_string, search_pill_widget.widget); return search_query_box.val(); } - return exports.narrow_or_search_for_term(search_string); + return narrow_or_search_for_term(search_string); }, sorter(items) { return items; @@ -124,12 +122,12 @@ exports.initialize = function () { // we suppress searching triggered by this Enter key by checking // `is_using_input_method` before searching. // More details in the commit message that added this line. - exports.is_using_input_method = true; + is_using_input_method = true; }); searchbox_form .on("keydown", (e) => { - exports.update_button_visibility(); + update_button_visibility(); const code = e.which; if (code === 13 && search_query_box.is(":focus")) { // Don't submit the form so that the typeahead can instead @@ -139,8 +137,8 @@ exports.initialize = function () { } }) .on("keyup", (e) => { - if (exports.is_using_input_method) { - exports.is_using_input_method = false; + if (is_using_input_method) { + is_using_input_method = false; return; } const code = e.which; @@ -153,7 +151,7 @@ exports.initialize = function () { // indicate that they've done what they need to do) // Pill is already added during keydown event of input pills. - exports.narrow_or_search_for_term(search_query_box.val()); + narrow_or_search_for_term(search_query_box.val()); search_query_box.trigger("blur"); update_buttons_with_focus(false); } @@ -163,7 +161,7 @@ exports.initialize = function () { // but the code was moved here from elsewhere, and it would be // more work to re-order everything and make them private. - search_query_box.on("focus", exports.focus_search); + search_query_box.on("focus", focus_search); search_query_box.on("blur", (e) => { // The search query box is a visual cue as to // whether search or narrowing is active. If @@ -193,7 +191,7 @@ exports.initialize = function () { } } setTimeout(() => { - exports.update_button_visibility(); + update_button_visibility(); }, 100); }); @@ -206,14 +204,14 @@ exports.initialize = function () { searchbox.css({"box-shadow": "unset"}); }); } -}; +} -exports.focus_search = function () { +export function focus_search() { // The search bar is not focused yet, but will be. update_buttons_with_focus(true); -}; +} -exports.initiate_search = function () { +export function initiate_search() { message_view_header.open_search_bar_and_close_narrow_description(); $("#searchbox").css({"box-shadow": "inset 0px 0px 0px 2px hsl(204, 20%, 74%)"}); $("#search_query").typeahead("lookup").trigger("select"); @@ -221,12 +219,10 @@ exports.initiate_search = function () { $("#search_query").trigger("focus"); ui_util.place_caret_at_end($("#search_query")[0]); } -}; +} -exports.clear_search_form = function () { +export function clear_search_form() { $("#search_query").val(""); $("#search_query").trigger("blur"); $(".search_button").prop("disabled", true); -}; - -window.search = exports; +} diff --git a/static/js/ui_init.js b/static/js/ui_init.js index 04bc6c161c..5a5a0b0637 100644 --- a/static/js/ui_init.js +++ b/static/js/ui_init.js @@ -34,6 +34,7 @@ const reload = require("./reload"); const resize = require("./resize"); const rows = require("./rows"); const scroll_bar = require("./scroll_bar"); +const search = require("./search"); const sent_messages = require("./sent_messages"); const settings_panel_menu = require("./settings_panel_menu"); const settings_toggle = require("./settings_toggle");