123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?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,type"/>
- <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>
|