home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
-
- <bindings id="progressmeterBindings"
- 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="progressmeter">
- <resources>
- <stylesheet src="chrome://global/skin/progressmeter.css"/>
- </resources>
-
- <content>
- <xul:spacer class="progress-bar" xbl:inherits="mode"/>
- <xul:spacer class="progress-remainder" xbl:inherits="mode"/>
- </content>
-
- <implementation implements="nsIAccessibleProvider">
- <property name="mode" onset="if (this.mode != val) this.setAttribute('mode', val); return val;"
- onget="return this.getAttribute('mode');"/>
-
- <property name="value" onget="return this.getAttribute('value') || '0';">
- <setter><![CDATA[
- var p = Math.round(val);
- if (p < 0)
- p = 0;
- else if (p > 100)
- p = 100;
- var c = this.value;
- if (p != c) {
- var delta = p - c;
- if (delta < 0)
- delta = -delta;
- if (delta > 3 || p == 0 || p == 100) {
- this.setAttribute("value", p);
- // Fire DOM event so that accessible value change events occur
- var event = document.createEvent('Events');
- event.initEvent('ValueChange', true, true);
- this.dispatchEvent(event);
- }
- }
-
- return val;
- ]]></setter>
- </property>
-
- <property name="accessibleType" readonly="true">
- <getter>
- <![CDATA[
- return Components.interfaces.nsIAccessibleProvider.XULProgressMeter;
- ]]>
- </getter>
- </property>
- </implementation>
- </binding>
-
- <binding id="progressmeter-undetermined"
- extends="chrome://global/content/bindings/progressmeter.xml#progressmeter">
- <content>
- <xul:stack class="progress-remainder" flex="1" anonid="stack" style="overflow: -moz-hidden-unscrollable;">
- <xul:spacer class="progress-bar" anonid="spacer" top="0" style="margin-right: -1000px;"/>
- </xul:stack>
- </content>
-
- <implementation>
- <field name="_alive">true</field>
- <method name="_init">
- <body><![CDATA[
- var stack = document.getAnonymousElementByAttribute(this, "anonid", "stack");
- var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
- var self = this;
-
- var isLTR =
- document.defaultView.getComputedStyle(this, null).direction == "ltr";
-
- var position = isLTR ? 4 : -1;
- var interval = setInterval(function nextStep() {
- try {
- var width = stack.boxObject.width;
- if (!width) {
- // Maybe we've been removed from the document.
- if (!self._alive)
- clearInterval(interval);
- return;
- }
- width = width >> 2;
- spacer.height = stack.boxObject.height;
- spacer.width = width;
- spacer.left = width * position;
- if (isLTR) {
- position += 15 / (width + 150);
- if (position >= 4)
- position = -1;
- }
- else {
- position -= 15 / (width + 150);
- if (position < 0)
- position = 4;
- }
- } catch (e) {
- clearInterval(interval);
- }
- }, 20);
- ]]></body>
- </method>
-
- <constructor>this._init();</constructor>
- </implementation>
- </binding>
-
- <binding id="progressmeter-periodic-redraw"
- extends="chrome://global/content/bindings/progressmeter.xml#progressmeter">
- <content>
- <xul:spacer anonid="visibility-detector" flex="1"/>
- </content>
- <implementation>
- <field name="_alive">true</field>
- <method name="_init">
- <body><![CDATA[
- var step = 0;
- var self = this;
- var spacer = document.getAnonymousElementByAttribute(this, "anonid", "visibility-detector");
- var interval = setInterval(function nextStep() {
- try {
- // Only bother redrawing when we're visible
- var width = spacer.boxObject.width;
- if (!width) {
- // Maybe we've been removed from the document.
- if (!self._alive)
- clearInterval(interval);
- return;
- }
- // Trigger redraw by changing the step attribute
- step = 1 - step;
- self.setAttribute('step', step);
- } catch (e) {
- clearInterval(interval);
- }
- }, 1000/30);
- ]]></body>
- </method>
- <constructor>this._init();</constructor>
- </implementation>
- </binding>
-
- </bindings>
-