Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
const localization = new Localization(["toolkit/about/aboutWebrtc.ftl"], true);
/*
* A disclosure area that has localized tooltips for expanding and collapsing
* the area.
*/
class Disclosure {
constructor({
showMsg = "about-webrtc-fold-default-show-msg",
hideMsg = "about-webrtc-fold-default-hide-msg",
startsCollapsed = true,
} = {}) {
Object.assign(this, { showMsg, hideMsg, startsCollapsed });
this.target = document.createElement("div");
this.target.classList.add("fold-target");
this.trigger = document.createElement("div");
this.trigger.className = "fold-trigger";
this.trigger.classList.add(
"heading-medium",
"no-print",
this.showMsg,
this.hideMsg
);
this.message = document.createElement("span");
if (this.startsCollapsed) {
this.collapse();
} else {
this.expand();
}
this.trigger.onclick = () => {
if (this.target.classList.contains("fold-closed")) {
this.expand();
} else {
this.collapse();
}
};
}
/** @return {Element} */
control() {
return this.trigger;
}
/** @return {Element} */
view() {
return this.target;
}
expand() {
this.target.classList.remove("fold-closed");
this.control().textContent = String.fromCodePoint(0x25bc);
this.control().setAttribute(
"title",
localization.formatValueSync(this.hideMsg)
);
document.l10n.setAttributes(this.message, this.hideMsg);
}
collapse() {
this.target.classList.add("fold-closed");
this.trigger.textContent = String.fromCodePoint(0x25b6);
this.control().setAttribute(
"title",
localization.formatValueSync(this.showMsg)
);
document.l10n.setAttributes(this.message, this.showMsg);
}
static expandAll() {
for (const target of document.getElementsByClassName("fold-closed")) {
target.classList.remove("fold-closed");
}
for (const trigger of document.getElementsByClassName("fold-trigger")) {
const hideMsg = trigger.classList[2];
document.l10n.setAttributes(trigger, hideMsg);
}
}
static collapseAll() {
for (const target of document.getElementsByClassName("fold-target")) {
target.classList.add("fold-closed");
}
for (const trigger of document.getElementsByClassName("fold-trigger")) {
const showMsg = trigger.classList[1];
document.l10n.setAttributes(trigger, showMsg);
}
}
}
export { Disclosure };