/* 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/. */
"use strict";
// This is loaded into all XUL windows. Wrap in a block to prevent
// leaking to window scope.
{
class MozPopupNotification extends MozXULElement {
static get observedAttributes() {
return [
"buttonaccesskey",
"buttoncommand",
"buttonhighlight",
"buttonlabel",
"closebuttoncommand",
"closebuttonhidden",
"dropmarkerhidden",
"dropmarkerpopupshown",
"endlabel",
"icon",
"iconclass",
"label",
"learnmoreclick",
"learnmoreurl",
"mainactiondisabled",
"menucommand",
"name",
"origin",
"origin",
"popupid",
"secondarybuttonaccesskey",
"secondarybuttoncommand",
"secondarybuttonhidden",
"secondarybuttonlabel",
"secondendlabel",
"secondname",
"warninghidden",
"warninglabel",
];
}
_updateAttributes() {
for (let [ el, attrs ] of this._inheritedAttributeMap.entries()) {
for (let attr of attrs) {
this.inheritAttribute(el, attr);
}
}
}
get _inheritedAttributeMap() {
if (!this.__inheritedAttributeMap) {
this.__inheritedAttributeMap = new Map();
for (let el of this.querySelectorAll("[inherits]")) {
this.__inheritedAttributeMap.set(el, el.getAttribute("inherits").split(","));
}
}
return this.__inheritedAttributeMap;
}
attributeChangedCallback(name, oldValue, newValue) {
if (!this._hasSlotted || oldValue === newValue) {
return;
}
this._updateAttributes();
}
show() {
this.slotContents();
if (this.checkboxState) {
this.checkbox.checked = this.checkboxState.checked;
this.checkbox.setAttribute("label", this.checkboxState.label);
this.checkbox.hidden = false;
} else {
this.checkbox.hidden = true;
}
this.hidden = false;
}
slotContents() {
if (this._hasSlotted) {
return;
}
this._hasSlotted = true;
this.appendChild(MozXULElement.parseXULToFragment(`
`, ["chrome://global/locale/notification.dtd"]));
this.button = this.querySelector(".popup-notification-primary-button");
this.secondaryButton = this.querySelector(".popup-notification-secondary-button");
this.checkbox = this.querySelector(".popup-notification-checkbox");
this.closebutton = this.querySelector(".popup-notification-closebutton");
this.menubutton = this.querySelector(".popup-notification-dropmarker");
this.menupopup = this.menubutton.querySelector("menupopup");
let popupnotificationfooter = this.querySelector("popupnotificationfooter");
if (popupnotificationfooter) {
this.querySelector(".popup-notification-footer-container").append(popupnotificationfooter);
}
let popupnotificationheader = this.querySelector("popupnotificationheader");
if (popupnotificationheader) {
this.querySelector(".popup-notification-header-container").append(popupnotificationheader);
}
for (let popupnotificationcontent of this.querySelectorAll("popupnotificationcontent")) {
this.appendNotificationContent(popupnotificationcontent);
}
this._updateAttributes();
}
appendNotificationContent(el) {
let nextSibling = this.querySelector(".popup-notification-body > .popup-notification-learnmore-link");
nextSibling.before(el);
}
}
customElements.define("popupnotification", MozPopupNotification);
}