zjquery: Use elements for next, prev accessors.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2026-03-05 17:51:34 -08:00 committed by Tim Abbott
parent e1328d3b52
commit d931783682
2 changed files with 24 additions and 30 deletions

View File

@ -211,8 +211,8 @@ run_test("arrows on pills", ({mock_template}) => {
const $prev_pill_stub = $.create("prev-pill-stub");
const $next_pill_stub = $.create("next-pill-stub");
const $pill_stub = $.create("pill-stub");
$pill_stub.set_prev_results("*", $prev_pill_stub);
$pill_stub.set_next_results("*", $next_pill_stub);
$pill_stub.set_prev($prev_pill_stub);
$pill_stub.set_next($next_pill_stub);
$container.set_find_results(".pill:focus", $pill_stub);
@ -408,8 +408,8 @@ run_test("insert_remove", ({mock_template}) => {
$container.set_find_results(".pill:focus", yellow_pill.$element);
const $prev_pill_stub = $("<prev-stub>");
yellow_pill.$element.set_prev_results("*", $prev_pill_stub);
yellow_pill.$element.set_next_results("*", $("<next-stub>"));
yellow_pill.$element.set_prev($prev_pill_stub);
yellow_pill.$element.set_next($("<next-stub>"));
key_handler = $container.get_on_handler("keydown", ".pill");
key_handler.call(
@ -428,8 +428,8 @@ run_test("insert_remove", ({mock_template}) => {
assert.deepEqual(widget.items(), [items.blue, items.red]);
const $focus_pill_stub = $(pill_html("RED"));
$focus_pill_stub.set_prev_results("*", $prev_pill_stub);
$focus_pill_stub.set_next_results("*", $("<next-stub>"));
$focus_pill_stub.set_prev($prev_pill_stub);
$focus_pill_stub.set_next($("<next-stub>"));
$container.set_find_results(".pill:focus", $focus_pill_stub);

View File

@ -85,8 +85,6 @@ class FakeElementState {
delegated_event_handlers = new Map();
is_focused = false;
jquery_data = new Map();
jquery_next_results = new Map();
jquery_prev_results = new Map();
match_results = new Map([["*", true]]);
parents_results = new Map();
query_results = new Map();
@ -542,15 +540,12 @@ function dom_args(args) {
last() {
return new exports.FakeJQuery([...this].slice(-1));
}
next(next_selector = "*") {
assert.equal(this.length, 1);
const state = fake_element_state.get(this[0]);
if (!state.jquery_next_results.has(next_selector)) {
throw new Error(
`You need to call $(${JSON.stringify(state.selector)}).set_next_results(${JSON.stringify(next_selector)}, ...)`,
);
}
return state.jquery_next_results.get(next_selector);
next(selector = "*") {
return new exports.FakeJQuery(
[...this]
.map((element) => element.nextElementSibling)
.filter((next) => next !== null && next.matches(selector)),
);
}
off(event_type, ...args) {
if (args.length === 0) {
@ -648,15 +643,12 @@ function dom_args(args) {
this[0].prepend(...dom_args(args));
return this;
}
prev(prev_selector = "*") {
assert.equal(this.length, 1);
const state = fake_element_state.get(this[0]);
if (!state.jquery_prev_results.has(prev_selector)) {
throw new Error(
`You need to call $(${JSON.stringify(state.selector)}).set_prev_results(${JSON.stringify(prev_selector)}, ...)`,
);
}
return state.jquery_prev_results.get(prev_selector);
prev(selector = "*") {
return new exports.FakeJQuery(
[...this]
.map((element) => element.previousElementSibling)
.filter((prev) => prev !== null && prev.matches(selector)),
);
}
prop(name, ...args) {
if (args.length === 0) {
@ -750,9 +742,10 @@ function dom_args(args) {
assert.equal(this.length, 1);
fake_element_state.get(this[0]).match_results.set(selector, value);
}
set_next_results(selector, $result) {
set_next($result) {
assert.equal(this.length, 1);
fake_element_state.get(this[0]).jquery_next_results.set(selector, $result);
assert.equal($result.length, 1);
this[0].nextElementSibling = $result[0];
}
set_parent($parent_elem) {
assert.equal(this.length, 1);
@ -763,9 +756,10 @@ function dom_args(args) {
assert.equal(this.length, 1);
fake_element_state.get(this[0]).parents_results.set(selector, [...elements]);
}
set_prev_results(selector, $result) {
set_prev($result) {
assert.equal(this.length, 1);
fake_element_state.get(this[0]).jquery_prev_results.set(selector, $result);
assert.equal($result.length, 1);
this[0].previousElementSibling = $result[0];
}
show() {
for (const element of this) {