<?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/. --> <bindings id="expanderBindings" 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="expander" display="xul:vbox"> <resources> <stylesheet src="chrome://global/skin/expander.css"/> </resources> <content> <xul:hbox align="center"> <xul:button type="disclosure" class="expanderButton" anonid="disclosure" xbl:inherits="disabled" mousethrough="always"/> <xul:label class="header expanderButton" anonid="label" xbl:inherits="value=label,disabled" mousethrough="always" flex="1"/> <xul:button anonid="clear-button" xbl:inherits="label=clearlabel,disabled=cleardisabled,hidden=clearhidden" mousethrough="always" icon="clear"/> </xul:hbox> <xul:vbox flex="1" anonid="settings" class="settingsContainer" collapsed="true" xbl:inherits="align"> <children/> </xul:vbox> </content> <implementation> <constructor><![CDATA[ var settings = document.getAnonymousElementByAttribute(this, "anonid", "settings"); var expander = document.getAnonymousElementByAttribute(this, "anonid", "disclosure"); var open = this.getAttribute("open") == "true"; settings.collapsed = !open; expander.open = open; ]]></constructor> <property name="open"> <setter> <![CDATA[ var settings = document.getAnonymousElementByAttribute(this, "anonid", "settings"); var expander = document.getAnonymousElementByAttribute(this, "anonid", "disclosure"); settings.collapsed = !val; expander.open = val; if (val) this.setAttribute("open", "true"); else this.setAttribute("open", "false"); return val; ]]> </setter> <getter> return this.getAttribute("open"); </getter> </property> <method name="onCommand"> <parameter name="aEvent"/> <body><![CDATA[ var element = aEvent.originalTarget; var button = element.getAttribute("anonid"); switch (button) { case "disclosure": case "label": if (this.open == "true") this.open = false; else this.open = true; break; case "clear-button": var event = document.createEvent("Events"); event.initEvent("clear", true, true); this.dispatchEvent(event); break; } ]]></body> </method> </implementation> <handlers> <handler event="command"><![CDATA[ this.onCommand(event); ]]></handler> <handler event="click"><![CDATA[ if (event.originalTarget.localName == "label") this.onCommand(event); ]]></handler> </handlers> </binding> </bindings>