diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /toolkit/content/aboutwebrtc/disclosure.mjs | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/content/aboutwebrtc/disclosure.mjs')
-rw-r--r-- | toolkit/content/aboutwebrtc/disclosure.mjs | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/toolkit/content/aboutwebrtc/disclosure.mjs b/toolkit/content/aboutwebrtc/disclosure.mjs new file mode 100644 index 0000000000..6460f6523d --- /dev/null +++ b/toolkit/content/aboutwebrtc/disclosure.mjs @@ -0,0 +1,95 @@ +/* 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 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +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 }; |