diff --git a/web/src/common.ts b/web/src/common.ts index ebb6f18e9c..6f6f3f808c 100644 --- a/web/src/common.ts +++ b/web/src/common.ts @@ -113,6 +113,19 @@ export function adjust_mac_hotkey_hints(hotkeys: string[]): void { } } +// We convert the Shift key with ⇧ (Level 2 Select Symbol) in the +// popover menu hotkey hints. This helps us reduce the width of +// the popover menus. +export function adjust_shift_hotkey(hotkeys: string[]): boolean { + for (const [index, hotkey] of hotkeys.entries()) { + if (hotkey === "Shift") { + hotkeys[index] = "⇧"; + return true; + } + } + return false; +} + // See https://zulip.readthedocs.io/en/latest/development/authentication.html#password-form-implementation // for design details on this feature. function set_password_toggle_label( diff --git a/web/src/templates.js b/web/src/templates.js index b78563943e..b672ab7bb1 100644 --- a/web/src/templates.js +++ b/web/src/templates.js @@ -132,9 +132,16 @@ Handlebars.registerHelper("popover_hotkey_hints", (...hotkeys) => { hotkeys.pop(); // Handlebars options let hotkey_hints = ""; common.adjust_mac_hotkey_hints(hotkeys); + const shift_hotkey_exists = common.adjust_shift_hotkey(hotkeys); for (const hotkey of hotkeys) { hotkey_hints += `${hotkey}`; } - const result = `${hotkey_hints}`; - return new Handlebars.SafeString(result); + if (shift_hotkey_exists) { + return new Handlebars.SafeString( + `${hotkey_hints}`, + ); + } + return new Handlebars.SafeString( + `${hotkey_hints}`, + ); }); diff --git a/web/src/tippyjs.ts b/web/src/tippyjs.ts index 9b244f4516..e6f76ff959 100644 --- a/web/src/tippyjs.ts +++ b/web/src/tippyjs.ts @@ -621,4 +621,19 @@ export function initialize(): void { instance.destroy(); }, }); + + delegate("body", { + target: ".popover-contains-shift-hotkey", + trigger: "mouseenter", + placement: "top", + appendTo: () => document.body, + onShow(instance) { + const hotkey_hints = $(instance.reference).attr("data-hotkey-hints"); + if (hotkey_hints) { + instance.setContent(hotkey_hints.replace("⇧", "Shift").replaceAll(",", " + ")); + return undefined; + } + return false; + }, + }); } diff --git a/web/tests/templates.test.js b/web/tests/templates.test.js index 6cd87a31a6..36ee1c7c79 100644 --- a/web/tests/templates.test.js +++ b/web/tests/templates.test.js @@ -56,11 +56,23 @@ run_test("tooltip_hotkey_hints", () => { run_test("popover_hotkey_hints", () => { const args = { - hotkey_one: "Shift", - hotkey_two: "V", + hotkey_one: "Ctrl", + hotkey_two: "[", }; const html = require("./templates/popover_hotkey_hints.hbs")(args); const expected_html = `${args.hotkey_one}${args.hotkey_two}\n`; assert.equal(html, expected_html); }); + +run_test("popover_hotkey_hints_shift_hotkey", () => { + const args = { + hotkey_one: "Shift", + hotkey_two: "V", + }; + + const html = require("./templates/popover_hotkey_hints.hbs")(args); + args.hotkey_one = "⇧"; // adjust_shift_hotkey + const expected_html = `${args.hotkey_one}${args.hotkey_two}\n`; + assert.equal(html, expected_html); +});