gecko-dev/toolkit/mozapps/update/content/updates.xml

380 lines
15 KiB
XML

<?xml version="1.0"?>
<!DOCTYPE bindings SYSTEM "chrome://mozapps/locale/update/updates.dtd">
<bindings id="updatesBindings"
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xbl="http://www.mozilla.org/xbl">
<binding id="link">
<implementation>
<property name="href"
onget="return this.getAttribute('href');"
onset="this.setAttribute('href', val); return val;"/>
</implementation>
<handlers>
<handler event="keypress" keycode="VK_ENTER" action="this.click()" />
<handler event="keypress" keycode="VK_RETURN" action="this.click()" />
<handler event="click">
<![CDATA[
if (event.button != 0)
return;
# If we're not a browser, use the external protocol service to load the URI.
#ifndef MOZ_PHOENIX
var uri = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService)
.newURI(this.getAttribute("href"), null, null);
var protocolSvc = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"]
.getService(Components.interfaces.nsIExternalProtocolService);
if (protocolSvc.isExposedProtocol(uri.scheme))
protocolSvc.loadUrl(uri);
# If we're a browser, open a new browser window instead.
#else
var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
.getService(Components.interfaces.nsIWindowWatcher);
var ary = Components.classes["@mozilla.org/supports-array;1"]
.createInstance(Components.interfaces.nsISupportsArray);
var url = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
url.data = this.getAttribute("href")
ary.AppendElement(url);
ww.openWindow(null, "chrome://browser/content/browser.xul",
"_blank", "chrome,all,dialog=no", ary);
#endif
]]>
</handler>
</handlers>
</binding>
<binding id="update" extends="chrome://mozapps/content/shared/richview.xml#richview-item">
<resources>
<stylesheet src="chrome://mozapps/content/update/updates.css"/>
</resources>
<content>
<xul:hbox pack="start">
<xul:label anonid="name" class="update-item-name" xbl:inherits="value=name" crop="right" flex="1"/>
<xul:link class="update-item-details" xbl:inherits="href=detailsURL">&details.link;</xul:link>
</xul:hbox>
<xul:deck anonid="modeDeck">
<xul:label class="update-item-status" xbl:inherits="value=status" flex="1"/>
<xul:vbox>
<xul:progressmeter class="update-item-progress" anonid="progress"
mode="undetermined"/>
<xul:hbox align="center">
<xul:label class="update-item-status" xbl:inherits="value=status" flex="1" crop="right"/>
<xul:button class="update-item-pause" anonid="pauseButton"
label="&pause.label;" accesskey="&pause.accesskey;"/>
</xul:hbox>
</xul:vbox>
</xul:deck>
<xul:stringbundle anonid="strings"
src="chrome://mozapps/locale/update/updates.properties"/>
</content>
<implementation>
<field name="_update">null</field>
<field name="_strings">
document.getAnonymousElementByAttribute(this, "anonid", "strings");
</field>
<field name="_name">
document.getAnonymousElementByAttribute(this, "anonid", "name");
</field>
<field name="_progressBar">
document.getAnonymousElementByAttribute(this, "anonid", "progress");
</field>
<field name="_modeDeck">
document.getAnonymousElementByAttribute(this, "anonid", "modeDeck");
</field>
<field name="_pauseButton">
document.getAnonymousElementByAttribute(this, "anonid", "pauseButton");
</field>
<method name="setUpdate">
<parameter name="update"/>
<body><![CDATA[
this._update = update;
this.name = update.name;
this.setAttribute("detailsURL", update.detailsURL);
this.state = update.selectedPatch.state;
]]></body>
</method>
<property name="name"
onget="return this._name.getAttribute('value');"
onset="this._name.setAttribute('value', val); return val;"/>
<property name="progress"
onget="return parseInt(this._progressBar.getAttribute('value'));"
onset="this._progressBar.setAttribute('value', val); return val;"/>
<property name="status"
onget="return this.getAttribute('status');"
onset="this.setAttribute('status', val); return val;"/>
<field name="_started">false</field>
<method name="startDownload">
<body><![CDATA[
if (!this._started) {
this._progressBar.setAttribute("mode", "normal");
this._pauseButton.disabled = false;
this._started = true;
}
]]></body>
</method>
<method name="stopDownload">
<body><![CDATA[
if (this._started) {
this._progressBar.setAttribute("mode", "undetermined");
this._pauseButton.disabled = true;
this._started = false;
}
]]></body>
</method>
<field name="_paused">false</field>
<property name="paused">
<getter><![CDATA[
return this._paused;
]]></getter>
<setter><![CDATA[
this._paused = val;
var key = val ? "pauseButtonResume" : "pauseButtonPause";
if (val) {
this.setAttribute("old-status", this.status);
//this.status = this._strings.getString("pausedStatus");
this.setAttribute("old-name", this.name);
this.name = this._strings.getFormattedString("pausedName", [this.name]);
LOG("GOAT = " + this._strings.getFormattedString("pausedName", [this.name]));
}
else {
this.status = this.getAttribute("old-status");
this.removeAttribute("old-status");
this.setAttribute("name", this.getAttribute("old-name"));
this.removeAttribute("old-name");
}
this._pauseButton.label = this._strings.getString(key);
return val;
]]></setter>
</property>
<property name="state">
<getter><![CDATA[
return this.getAttribute("state");
]]></getter>
<setter><![CDATA[
this.setAttribute("state", val);
this._modeDeck.setAttribute("selectedIndex", val == "downloading" ? 1 : 0);
var name = this._update.name;
if (val == "downloading") {
var name = this._strings.getFormattedString("downloadingPrefix",
[this._update.name]);
}
this.setAttribute("name", name);
if (val == "failed") {
var failed = this._strings.getString("statusFailed");
this.setAttribute("status", failed);
}
else if (val != "downloading") {
var sdf =
Components.classes["@mozilla.org/intl/scriptabledateformat;1"].
getService(Components.interfaces.nsIScriptableDateFormat);
var installDate = new Date(this._update.installDate);
var dateString = sdf.FormatDateTime("", sdf.dateFormatLong,
sdf.timeFormatSeconds,
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds());
dateString = this._strings.getFormattedString("statusSucceededFormat",
[dateString]);
this.setAttribute("status", dateString);
}
return val;
]]></setter>
</property>
<field name="eventPrefix">"update-"</field>
</implementation>
<handlers>
<handler event="command"><![CDATA[
if (event.originalTarget.getAttribute("anonid") == "pauseButton")
this.fireEvent("pause");
]]></handler>
</handlers>
</binding>
<binding id="license">
<content>
<xul:vbox flex="1" class="loadingBox">
<xul:hbox align="start">
<xul:image class="licenseLoadingThrobber" xbl:inherits="state"/>
<xul:vbox flex="1">
<xul:description flex="1" class="licenseLoadingMessage" crop="right"/>
</xul:vbox>
</xul:hbox>
</xul:vbox>
<xul:vbox flex="1">
<xul:browser class="licenseContent" flex="1"/>
</xul:vbox>
<xul:stringbundle anonid="strings"
src="chrome://mozapps/locale/update/updates.properties"/>
</content>
<implementation>
<constructor>
if (this.hasAttribute("url"))
this.url = this.getAttribute("url");
</constructor>
<field name="_request">null</field>
<field name="_message">
document.getAnonymousElementByAttribute(this, "class", "licenseLoadingMessage");
</field>
<field name="_content">
document.getAnonymousElementByAttribute(this, "class", "licenseContent");
</field>
<field name="_strings">
document.getAnonymousElementByAttribute(this, "anonid", "strings");
</field>
<method name="_setMessageValue">
<parameter name="value"/>
<body><![CDATA[
while (this._message.hasChildNodes())
this._message.removeChild(this._message.firstChild);
this._message.appendChild(document.createTextNode(value));
]]></body>
</method>
<method name="onError">
<parameter name="event"/>
<body><![CDATA[
var status = this._request.status;
var statusText = this._request.statusText
LOG("license.onError: error during load, status code = " + status +
", message: " + statusText);
if (status == 404)
statusText = this._strings.getString("license404Error");
this._setMessageValue(statusText);
this.setAttribute("state", "error");
]]></body>
</method>
<method name="onLoad">
<parameter name="event"/>
<body><![CDATA[
LOG("license.onLoad: request completed downloading document");
this.setAttribute("selectedIndex", "1");
var doc = this._content.contentWindow.document;
doc.documentElement.innerHTML = this._request.responseText;
var e = document.createEvent("Events");
e.initEvent("load", false, true);
this.dispatchEvent(e);
]]></body>
</method>
<method name="onProgress">
<parameter name="event"/>
<body><![CDATA[
LOG("license.onProgress: download progress: " + event.position + "/" + event.totalSize);
]]></body>
</method>
<property name="url">
<getter><![CDATA[
return this.getAttribute("url");
]]></getter>
<setter><![CDATA[
this.setAttribute("url", val);
this._request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
this._request.open("GET", val, true);
this._request.setRequestHeader("Cache-Control", "no-cache");
var self = this;
this._request.onerror = function(event) { self.onError(event); };
this._request.onload = function(event) { self.onLoad(event); };
this._request.onprogress = function(event) { self.onProgress(event); };
this.setAttribute("state", "loading");
this._setMessageValue(this._strings.getString("downloadingLicense"));
LOG("license.set_url: sending request to " + val);
this._request.send(null);
]]></setter>
</property>
<method name="stopDownloading">
<body><![CDATA[
const READY_STATE_COMPLETED = 4
if (this._request &&
this._request.readyState != READY_STATE_COMPLETED)
this._request.abort();
]]></body>
</method>
</implementation>
</binding>
<binding id="update" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
<content>
<xul:hbox>
<xul:label class="update-name" xbl:inherits="value=name" flex="1" crop="right"/>
<xul:link xbl:inherits="href=detailsURL" class="update-details-link">
<xul:label>&update.details.label;</xul:label>
</xul:link>
</xul:hbox>
<xul:label class="update-type" xbl:inherits="value=type"/>
<xul:grid>
<xul:columns>
<xul:column class="update-label-column"/>
<xul:column flex="1"/>
</xul:columns>
<xul:rows>
<xul:row>
<xul:label class="update-installedOn-label">&update.installedOn.label;</xul:label>
<xul:label class="update-installedOn-value" xbl:inherits="value=installDate" flex="1" crop="right"/>
</xul:row>
<xul:row>
<xul:label class="update-status-label">&update.status.label;</xul:label>
<xul:description class="update-status-value" flex="1"/>
</xul:row>
</xul:rows>
</xul:grid>
</content>
<implementation>
<property name="name"
onget="return this.getAttribute('name');"
onset="this.setAttribute('name', val); return val;"/>
<property name="detailsURL"
onget="return this.getAttribute('detailsURL');"
onset="this.setAttribute('detailsURL', val); return val;"/>
<property name="installDate"
onget="return this.getAttribute('installDate');"
onset="this.setAttribute('installDate', val); return val;"/>
<property name="type"
onget="return this.getAttribute('type');"
onset="this.setAttribute('type', val); return val;"/>
<property name="status"
onget="return this.getAttribute('status');">
<setter><![CDATA[
this.setAttribute("status", val);
var field = document.getAnonymousElementByAttribute(this, "class", "update-status-value");
while (field.hasChildNodes())
field.removeChild(field.firstChild);
field.appendChild(document.createTextNode(val));
return val;
]]></setter>
</property>
onset="this.setAttribute('status', val); return val;"/>
</implementation>
</binding>
</bindings>