<?xml version="1.0"?> <!-- 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/. --> <!DOCTYPE bindings [ <!ENTITY % notificationDTD SYSTEM "chrome://global/locale/notification.dtd"> %notificationDTD; ]> <bindings id="notificationBindings" xmlns="http://www.mozilla.org/xbl" xmlns:xbl="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <binding id="notificationbox" extends="chrome://global/content/bindings/notification.xml#notificationbox"> <content> <xul:vbox xbl:inherits="hidden=notificationshidden"> <xul:spacer/> <children includes="notification"/> </xul:vbox> <children/> </content> <implementation> <constructor><![CDATA[ let temp = {}; Cu.import("resource://services-common/observers.js", temp); temp.Observers.add("weave:notification:added", this.onNotificationAdded, this); temp.Observers.add("weave:notification:removed", this.onNotificationRemoved, this); for each (var notification in Weave.Notifications.notifications) this._appendNotification(notification); ]]></constructor> <destructor><![CDATA[ let temp = {}; Cu.import("resource://services-common/observers.js", temp); temp.Observers.remove("weave:notification:added", this.onNotificationAdded, this); temp.Observers.remove("weave:notification:removed", this.onNotificationRemoved, this); ]]></destructor> <method name="onNotificationAdded"> <parameter name="subject"/> <parameter name="data"/> <body><![CDATA[ this._appendNotification(subject); ]]></body> </method> <method name="onNotificationRemoved"> <parameter name="subject"/> <parameter name="data"/> <body><![CDATA[ // If the view of the notification hasn't been removed yet, remove it. var notifications = this.allNotifications; for each (var notification in notifications) { if (notification.notification == subject) { notification.close(); break; } } ]]></body> </method> <method name="_appendNotification"> <parameter name="notification"/> <body><![CDATA[ var node = this.appendNotification(notification.description, notification.title, notification.iconURL, notification.priority, notification.buttons); node.notification = notification; ]]></body> </method> </implementation> </binding> <binding id="notification" extends="chrome://global/content/bindings/notification.xml#notification"> <content> <xul:hbox class="notification-inner outset" flex="1" xbl:inherits="type"> <xul:toolbarbutton ondblclick="event.stopPropagation();" class="messageCloseButton close-icon tabbable" xbl:inherits="hidden=hideclose" tooltiptext="&closeNotification.tooltip;" oncommand="document.getBindingParent(this).close()"/> <xul:hbox anonid="details" align="center" flex="1"> <xul:image anonid="messageImage" class="messageImage" xbl:inherits="src=image"/> <xul:description anonid="messageText" class="messageText" xbl:inherits="xbl:text=label"/> <!-- The children are the buttons defined by the notification. --> <xul:hbox oncommand="document.getBindingParent(this)._doButtonCommand(event);"> <children/> </xul:hbox> </xul:hbox> </xul:hbox> </content> <implementation> <!-- Note: this used to be a field, but for some reason it kept getting - reset to its default value for TabNotification elements. - As a property, that doesn't happen, even though the property stores - its value in a JS property |_notification| that is not defined - in XBL as a field or property. Maybe this is wrong, but it works. --> <property name="notification" onget="return this._notification" onset="this._notification = val; return val;"/> <method name="close"> <body><![CDATA[ Weave.Notifications.remove(this.notification); // We should be able to call the base class's close method here // to remove the notification element from the notification box, // but we can't because of bug 373652, so instead we copied its code // and execute it below. var control = this.control; if (control) control.removeNotification(this); else this.hidden = true; ]]></body> </method> </implementation> </binding> </bindings>