mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
Since notifications have limited space for the contents of a message, a quote from a previous message, or elsewhere, can take up most of the notification, leaving little room for the actual message, and reducing the usefulness of the notification. To fix this, we collapse blockquotes and "user said" paragraphs to make space for the actual message.
70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
"use strict";
|
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
const {zrequire} = require("./lib/namespace");
|
|
const {run_test} = require("./lib/test");
|
|
const $ = require("./lib/zjquery");
|
|
|
|
const ui_util = zrequire("ui_util");
|
|
|
|
run_test("potentially_collapse_quotes", ({override_rewire}) => {
|
|
const $element = $.create("message-content");
|
|
let children = [];
|
|
$element.children = () => children;
|
|
|
|
children = [
|
|
$.create("normal paragraph 1"),
|
|
$.create("blockquote"),
|
|
$.create("normal paragraph 2"),
|
|
$.create("user said paragraph"),
|
|
$.create("message quote"),
|
|
$.create("normal paragraph 3"),
|
|
];
|
|
override_rewire(ui_util, "get_collapsible_status_array", () => [
|
|
false,
|
|
true,
|
|
false,
|
|
true,
|
|
true,
|
|
false,
|
|
]);
|
|
// When there are both collapsible and non-collapsible elements, for
|
|
// multiple collapsible elements in a row, only the first element
|
|
// should be collapsed, and the rest's text should be removed. Non-
|
|
// collapsible elements should not be touched.
|
|
let collapsed = ui_util.potentially_collapse_quotes($element);
|
|
assert.equal(collapsed, true);
|
|
let expected_texts = ["never-been-set", "[…]", "never-been-set", "[…]", "", "never-been-set"];
|
|
assert.deepEqual(
|
|
$element.children().map(($el) => $el.text()),
|
|
expected_texts,
|
|
);
|
|
|
|
children = [
|
|
$.create("normal paragraph 4"),
|
|
$.create("normal paragraph 5"),
|
|
$.create("normal paragraph 6"),
|
|
];
|
|
override_rewire(ui_util, "get_collapsible_status_array", () => [false, false, false]);
|
|
// For all non-collapsible elements, none should be collapsed.
|
|
collapsed = ui_util.potentially_collapse_quotes($element);
|
|
assert.equal(collapsed, false);
|
|
expected_texts = ["never-been-set", "never-been-set", "never-been-set"];
|
|
assert.deepEqual(
|
|
$element.children().map(($el) => $el.text()),
|
|
expected_texts,
|
|
);
|
|
|
|
children = [$.create("blockquote 1"), $.create("blockquote 2"), $.create("blockquote 3")];
|
|
override_rewire(ui_util, "get_collapsible_status_array", () => [true, true, true]);
|
|
// For all collapsible elements, none should be collapsed.
|
|
collapsed = ui_util.potentially_collapse_quotes($element);
|
|
assert.equal(collapsed, false);
|
|
expected_texts = ["never-been-set", "never-been-set", "never-been-set"];
|
|
assert.deepEqual(
|
|
$element.children().map(($el) => $el.text()),
|
|
expected_texts,
|
|
);
|
|
});
|