%notificationDTD; ]> 1 2 3 4 5 6 7 8 9 10 null 4 null null null if (val) this.setAttribute('notificationshidden', true); else this.removeAttribute('notificationshidden'); return val; = 0; n--) { if (aValue == notifications[n].value) return notifications[n]; } return null; ]]> this.PRIORITY_CRITICAL_BLOCK) throw "Invalid notification priority " + aPriority; // check for where the notification should be inserted according to // priority. If two are equal, the existing one appears on top. var notifications = this.allNotifications; var insertPos = null; for (var n = notifications.length - 1; n >= 0; n--) { if (notifications[n].priority < aPriority) break; insertPos = notifications[n]; } const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var newitem = document.createElementNS(XULNS, "notification"); newitem.setAttribute("label", aLabel); newitem.setAttribute("value", aValue); newitem.setAttribute("image", aImage); if (!insertPos) { newitem.style.position = "fixed"; newitem.style.top = "100%"; } this.insertBefore(newitem, insertPos); if (aButtons) { for (var b = 0; b < aButtons.length; b++) { var button = aButtons[b]; var buttonElem = document.createElementNS(XULNS, "button"); buttonElem.setAttribute("label", button.label); buttonElem.setAttribute("accesskey", button.accessKey); newitem.appendChild(buttonElem); buttonElem.buttonInfo = button; } } newitem.priority = aPriority; if (aPriority >= this.PRIORITY_CRITICAL_LOW) newitem.type = "critical"; else if (aPriority <= this.PRIORITY_INFO_HIGH) newitem.type = "info"; else newitem.type = "warning"; if (!insertPos) this._showNotification(newitem, true); // Fire event for accessibility APIs var event = document.createEvent("Events"); event.initEvent("AlertActive", true, true); newitem.dispatchEvent(event); return newitem; ]]> = 0; n--) { if (aImmediate) this.removeChild(notifications[n]); else this.removeNotification(notifications[n]); } this.currentNotification = null; ]]> height) height = this.currentNotification.boxObject.height; this.currentNotification = aNotification; this._closedNotification = null; aNotification.style.removeProperty("position"); aNotification.style.removeProperty("top"); aNotification.style.marginTop = -height + "px"; aNotification.style.opacity = 0; } else { change = -change; this._closedNotification = aNotification; var notifications = this.allNotifications; var idx = notifications.length - 2; if (idx >= 0) this.currentNotification = notifications[idx]; else this.currentNotification = null; } var opacitychange = change / height; var self = this; var slide = function slideInFn() { var done = false; var style = window.getComputedStyle(aNotification, null); var margin = style.getPropertyCSSValue("margin-top"). getFloatValue(CSSPrimitiveValue.CSS_PX); if (change > 0 && margin + change >= 0) { aNotification.style.marginTop = "0px"; aNotification.style.opacity = 1; done = true; } else if (change < 0 && margin + change <= -height) { aNotification.style.marginTop = -height + "px"; done = true; } else { aNotification.style.marginTop = (margin + change).toFixed(4) + "px"; if (opacitychange) aNotification.style.opacity = Number(aNotification.style.opacity) + opacitychange; } if (done) { clearInterval(self._timer); self._timer = null; if (self._closedNotification) self._closedNotification.parentNode. removeChild(self._closedNotification); self._setBlockingState(self.currentNotification); } } this._timer = setInterval(slide, 50); ]]>