/* 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); }