Skip to content

Commit df3423a

Browse files
committed
ARIA-friendlier expander for subreviews
1 parent f3594b7 commit df3423a

File tree

2 files changed

+45
-24
lines changed

2 files changed

+45
-24
lines changed

scripts/script.js

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4608,9 +4608,11 @@ function make_expander_element(foldnum) {
46084608
function mksvgp(d) {
46094609
return $svg("svg", {class: "licon", width: "0.75em", height: "0.75em", viewBox: "0 0 16 16", preserveAspectRatio: "none"}, $svg("path", {d: d}));
46104610
}
4611+
let fx = foldnum == null ? "" : " fx" + foldnum,
4612+
fn = foldnum == null ? "" : " fn" + foldnum;
46114613
return $e("span", "expander",
4612-
$e("span", "in0 fx" + foldnum, mksvgp("M1 1L8 15L15 1z")),
4613-
$e("span", "in1 fn" + foldnum, mksvgp("M1 1L15 8L1 15z")));
4614+
$e("span", "in0" + fx, mksvgp("M1 1L8 15L15 1z")),
4615+
$e("span", "in1" + fn, mksvgp("M1 1L15 8L1 15z")));
46144616
}
46154617

46164618

@@ -6473,13 +6475,17 @@ function render_ratings(ratings, user_rating, editable) {
64736475
} else {
64746476
ex = $e("div", "revrating", ...es);
64756477
}
6476-
return $e("div", "revcard-rating fx20", ex);
6478+
return $e("div", "revcard-rating", ex);
64776479
}
64786480

6479-
function make_review_h2(rrow, rlink, rdesc) {
6481+
function make_review_h2(rrow, rlink, rdesc, rid) {
64806482
let h2 = $e("h2"), ma, rd = $e("span");
64816483
if (rrow.collapsed) {
6482-
ma = $e("button", {type: "button", class: "qo ui js-foldup", "data-fold-target": 20}, make_expander_element(20));
6484+
ma = $e("button", {
6485+
type: "button", class: "qo ui js-foldup expander",
6486+
"aria-controls": `r${rid}-body`, "aria-expanded": "false"
6487+
});
6488+
ma.append(make_expander_element());
64836489
} else {
64846490
ma = $e("a", {href: hoturl("review", rlink), class: "qo"});
64856491
}
@@ -6556,61 +6562,70 @@ hotcrp.add_review = function (rrow) {
65566562

65576563
const earticle = document.createElement("article");
65586564
earticle.id = "r" + rid;
6559-
earticle.className = "pcard revcard " + (rrow.subreview || rrow.draft ? "" : "revsubmitted ") + "need-anchor-unfold has-fold fold20" + (rrow.collapsed ? "c" : "o");
6565+
earticle.className = "pcard revcard " + (rrow.subreview || rrow.draft ? "" : "revsubmitted ") + "need-anchor-unfold";
65606566
earticle.setAttribute("data-pid", rrow.pid);
65616567
earticle.setAttribute("data-rid", rrow.rid);
6562-
rrow.ordinal && earticle.setAttribute("data-review-ordinal", rrow.ordinal);
6563-
$(".pcontainer")[0].appendChild(earticle);
6568+
if (rrow.ordinal) {
6569+
earticle.setAttribute("data-review-ordinal", rrow.ordinal);
6570+
}
65646571

65656572
// header
6566-
const eheader = $e("header", "revcard-head", make_review_h2(rrow, rlink, rdesc));
6573+
const eheader = $e("header", "revcard-head",
6574+
make_review_h2(rrow, rlink, rdesc, rid));
65676575
append_review_id(rrow, eheader);
65686576
eheader.appendChild($e("hr", "c"));
6569-
earticle.appendChild(eheader);
65706577

6571-
// messages
6578+
// body
6579+
const ebody = document.createElement("div");
6580+
ebody.id = `r${rid}-body`;
6581+
if (rrow.collapsed) {
6582+
ebody.hidden = true;
6583+
earticle.setAttribute("aria-expanded", "false");
6584+
}
6585+
65726586
if (rrow.message_list) {
6573-
earticle.appendChild($e("div", "revcard-feedback fx20", feedback.render_list(rrow.message_list)));
6587+
ebody.appendChild($e("div", "revcard-feedback", feedback.render_list(rrow.message_list)));
65746588
}
65756589

65766590
// body
6577-
let e = $e("div", "revcard-render fx20");
6578-
earticle.appendChild(e);
6591+
let e = $e("div", "revcard-render");
6592+
ebody.appendChild(e);
65796593
render_review_body_in(rrow, e);
65806594

65816595
// hidden fields, if any
65826596
if (rrow.hidden_fields && rrow.hidden_fields.length > 0) {
6583-
earticle.appendChild(render_review_hidden_fields(rrow.hidden_fields));
6597+
ebody.appendChild(render_review_hidden_fields(rrow.hidden_fields));
65846598
}
65856599

65866600
// ratings
65876601
if ((e = render_ratings(rrow.ratings, rrow.user_rating, "user_rating" in rrow))) {
6588-
earticle.appendChild(e);
6602+
ebody.appendChild(e);
65896603
}
65906604

65916605
// complete render
6606+
earticle.append(eheader, ebody);
6607+
document.querySelector(".pcontainer").append(earticle);
65926608
score_header_tooltips($(earticle));
65936609
navsidebar.set("r" + rid, rdesc);
65946610
};
65956611

65966612
function render_review_hidden_fields(hidden_fields) {
6597-
var i, n = [], link;
6598-
for (i = 0; i !== hidden_fields.length; ++i) {
6599-
var f = formj[hidden_fields[i]];
6613+
let n = [];
6614+
for (let i = 0; i !== hidden_fields.length; ++i) {
6615+
let f = formj[hidden_fields[i]];
66006616
n.push(f.name);
66016617
}
6602-
link = $e("a");
6618+
const link = $e("a");
66036619
link.href = hoturl("settings", {group: "reviewform", "#": "rf/" + formj[hidden_fields[0]].order});
66046620
if (!hotcrp.status.is_admin) {
66056621
link.className = "q";
66066622
}
66076623
if (n.length === 1) {
66086624
link.textContent = "field condition";
6609-
return $e("p", "feedback is-warning mt-3", "This review’s ".concat(n[0], " field has been hidden by a "), link, ".");
6610-
} else {
6611-
link.textContent = "field conditions";
6612-
return $e("p", "feedback is-warning mt-3", "This review’s ".concat(commajoin(n), " fields have been hidden by "), link, ".");
6625+
return $e("p", "feedback is-warning mt-3", `This review’s ${n[0]} field has been hidden by a `, link, ".");
66136626
}
6627+
link.textContent = "field conditions";
6628+
return $e("p", "feedback is-warning mt-3", `This review’s ${commajoin(n)} fields have been hidden by `, link, ".");
66146629
}
66156630

66166631

stylesheets/style.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,12 @@ span.expander {
13581358
opacity: 0.65;
13591359
text-decoration: none;
13601360
}
1361+
button.expander[aria-expanded="false"] > span.expander > span.in0 {
1362+
display: none;
1363+
}
1364+
button.expander[aria-expanded="true"] > span.expander > span.in1 {
1365+
display: none;
1366+
}
13611367

13621368
.tbtn {
13631369
display: inline-block;

0 commit comments

Comments
 (0)