Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
987 lines (882 sloc) 42.9 KB
<?xml version="1.0" encoding="UTF-8"?>
<!--
Qookery - Declarative UI Building for Qooxdoo
Copyright (c) Ergobyte Informatics S.A., www.ergobyte.gr
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:q="http://www.qookery.org/ns/Form"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
targetNamespace="http://www.qookery.org/ns/Form"
elementFormDefault="qualified">
<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd" />
<import namespace="http://www.w3.org/2001/XMLSchema" />
<!-- Simple types -->
<simpleType name="access-level"><restriction base="token">
<enumeration value="public" />
<enumeration value="private" />
</restriction></simpleType>
<simpleType name="atom-element-visibility"><restriction base="token">
<enumeration value="both" />
<enumeration value="label" />
<enumeration value="icon" />
</restriction></simpleType>
<simpleType name="cell-editor"><union memberTypes="QName"><simpleType><restriction base="token">
<enumeration value="check-box" />
<enumeration value="password-field" />
<enumeration value="select-box" />
<enumeration value="text-field" />
</restriction></simpleType></union></simpleType>
<simpleType name="cell-renderer"><union memberTypes="QName"><simpleType><restriction base="token">
<enumeration value="boolean" />
<enumeration value="date" />
<enumeration value="debug" />
<enumeration value="default" />
<enumeration value="html" />
<enumeration value="image" />
<enumeration value="model" />
<enumeration value="number" />
<enumeration value="password" />
<enumeration value="string" />
</restriction></simpleType></union></simpleType>
<simpleType name="display">
<restriction base="token">
<enumeration value="inline" />
<enumeration value="none" />
</restriction>
</simpleType>
<simpleType name="format-specification">
<restriction base="string">
<pattern value="[a-z]+:?.*" />
</restriction>
</simpleType>
<simpleType name="flex">
<restriction base="nonNegativeInteger" />
</simpleType>
<simpleType name="javascript-expression">
<restriction base="string" />
</simpleType>
<simpleType name="javascript-identifier">
<restriction base="token">
<pattern value="[a-zA-Z_$][0-9a-zA-Z_$]*" />
</restriction>
</simpleType>
<simpleType name="horizontal-alignment">
<restriction base="token">
<enumeration value="left" />
<enumeration value="center" />
<enumeration value="right" />
</restriction>
</simpleType>
<simpleType name="icon-position">
<restriction base="token">
<enumeration value="left" />
<enumeration value="top" />
<enumeration value="top-left" />
<enumeration value="right" />
<enumeration value="bottom" />
<enumeration value="bottom-left" />
</restriction>
</simpleType>
<simpleType name="layout"><union memberTypes="QName"><simpleType>
<restriction base="token">
<enumeration value="none" />
<enumeration value="basic" />
<enumeration value="flow" />
<enumeration value="grid" />
<enumeration value="grow" />
<enumeration value="h-box" />
<enumeration value="v-box" />
</restriction>
</simpleType></union></simpleType>
<simpleType name="map-name">
<restriction base="token" />
</simpleType>
<simpleType name="media-query"><union memberTypes="string"><simpleType><restriction base="token">
<enumeration value="small-up" />
<enumeration value="small-only" />
<enumeration value="medium-up" />
<enumeration value="medium-only" />
<enumeration value="large-up" />
<enumeration value="large-only" />
<enumeration value="xlarge-up" />
<enumeration value="xlarge-only" />
<enumeration value="xxlarge-up" />
</restriction></simpleType></union></simpleType>
<simpleType name="orientation">
<restriction base="token">
<enumeration value="horizontal" />
<enumeration value="vertical" />
</restriction>
</simpleType>
<simpleType name="overflow">
<restriction base="token">
<enumeration value="hidden" />
<enumeration value="visible" />
<enumeration value="scroll" />
<enumeration value="auto" />
</restriction>
</simpleType>
<simpleType name="qooxdoo-class-name">
<restriction base="token">
<pattern value="([a-zA-Z_$][0-9a-zA-Z_$]*\.)*[A-Z][0-9a-zA-Z_$]*" />
</restriction>
</simpleType>
<simpleType name="replaced-string">
<restriction base="string">
<pattern value="%.*" />
</restriction>
</simpleType>
<simpleType name="row-and-column-count">
<union memberTypes="integer">
<simpleType>
<restriction base="token">
<enumeration value="auto" />
</restriction>
</simpleType>
</union>
</simpleType>
<simpleType name="selection-mode">
<restriction base="token">
<enumeration value="single" />
<enumeration value="multi" />
<enumeration value="additive" />
<enumeration value="one" />
</restriction>
</simpleType>
<simpleType name="scrollbar-policy">
<restriction base="token">
<enumeration value="auto" />
<enumeration value="on" />
<enumeration value="off" />
</restriction>
</simpleType>
<simpleType name="size">
<union memberTypes="integer">
<simpleType>
<restriction base="token">
<enumeration value="null" />
<enumeration value="XXS" />
<enumeration value="XS" />
<enumeration value="S" />
<enumeration value="M" />
<enumeration value="L" />
<enumeration value="XL" />
<enumeration value="XXL" />
</restriction>
</simpleType>
</union>
</simpleType>
<simpleType name="tab-index">
<restriction base="positiveInteger">
<minInclusive value="1" />
<maxInclusive value="32000" />
</restriction>
</simpleType>
<simpleType name="table-selection-mode">
<restriction base="token">
<enumeration value="none" />
<enumeration value="single" />
<enumeration value="single-interval" />
<enumeration value="multiple-interval" />
<enumeration value="multiple-interval-toggle" />
</restriction>
</simpleType>
<simpleType name="value-type"><restriction base="token">
<enumeration value="Boolean" />
<enumeration value="Expression" />
<enumeration value="Integer" />
<enumeration value="IntegerList" />
<enumeration value="Number" />
<enumeration value="NumberList" />
<enumeration value="RegularExpression" />
<enumeration value="ReplaceableString" />
<enumeration value="QName" />
<enumeration value="Size" />
<enumeration value="String" />
<enumeration value="StringList" />
</restriction></simpleType>
<simpleType name="vertical-alignment">
<restriction base="token">
<enumeration value="top" />
<enumeration value="middle" />
<enumeration value="bottom" />
<enumeration value="baseline" />
</restriction>
</simpleType>
<simpleType name="visibility">
<restriction base="token">
<enumeration value="visible" />
<enumeration value="hidden" />
<enumeration value="excluded" />
</restriction>
</simpleType>
<!-- Attribute groups -->
<attributeGroup name="container">
<attribute name="layout" type="q:layout" default="grid" />
<!-- Attributes used by multiple layouts -->
<attribute name="spacing" type="integer" default="0" />
<attribute name="spacing-x" type="integer" default="0" />
<attribute name="spacing-y" type="integer" default="0" />
<!-- Grid layout specific attributes -->
<attribute name="row-count" type="q:row-and-column-count" default="auto" />
<attribute name="column-count" type="q:row-and-column-count" default="1" />
<attribute name="row-flexes"><simpleType><list itemType="q:flex" /></simpleType></attribute>
<attribute name="column-flexes"><simpleType><list itemType="q:flex" /></simpleType></attribute>
<attribute name="row-alignments"><simpleType><list><simpleType><union memberTypes="q:horizontal-alignment q:vertical-alignment" /></simpleType></list></simpleType></attribute>
<attribute name="column-alignments"><simpleType><list><simpleType><union memberTypes="q:horizontal-alignment q:vertical-alignment" /></simpleType></list></simpleType></attribute>
<!-- Flow layout specific attributes -->
<attribute name="layout-align-x" type="q:horizontal-alignment" default="left" />
<attribute name="layout-align-y" type="q:vertical-alignment" default="top" />
<attribute name="reversed" type="boolean" default="false" />
<!-- HBox/VBox layout specific attributes -->
<attribute name="separator" type="token" />
</attributeGroup>
<attributeGroup name="content-padding">
<attribute name="content-padding"><simpleType><list itemType="integer" /></simpleType></attribute>
<attribute name="content-padding-bottom" type="integer" default="0" />
<attribute name="content-padding-left" type="integer" default="0" />
<attribute name="content-padding-right" type="integer" default="0" />
<attribute name="content-padding-top" type="integer" default="0" />
</attributeGroup>
<!-- Global attributes -->
<attribute name="format" type="q:format-specification"><annotation><documentation>
A specification for creating the formatter to attach to element
</documentation></annotation></attribute>
<attribute name="icon" type="anyURI"><annotation><documentation>
The URI of the icon to use when presenting element
</documentation></annotation></attribute>
<attribute name="map" type="q:map-name"><annotation><documentation>
The symbolic name of a registered map to associate with element
</documentation></annotation></attribute>
<attribute name="tool-tip-text" type="string"><annotation><documentation>
Text to associate with element that may be used when a tool tip needs to appear
</documentation></annotation></attribute>
<!-- Component attributes -->
<complexType name="component.attributes">
<!-- Identity -->
<attribute name="id" type="token" />
<!-- Properties -->
<attribute name="label" type="string" />
<attribute name="enabled" type="boolean" default="true" />
<attribute name="visibility" type="q:visibility" default="visible" />
<attribute name="text-color" type="string" default="black" />
<attribute name="background-color" type="string" default="white" />
<attribute name="display" type="q:display" default="inline" />
<attribute name="tab-index" type="q:tab-index" />
<!-- Layout item -->
<attribute name="width" type="q:size"><annotation><documentation>
Component preferred width in pixels or as one of the named sizes.
</documentation></annotation></attribute>
<attribute name="height" type="q:size"><annotation><documentation>
Component preferred height in pixels or as one of the named sizes.
</documentation></annotation></attribute>
<attribute name="min-width" type="q:size"><annotation><documentation>
Component minimum width in pixels or one of the named sizes.
</documentation></annotation></attribute>
<attribute name="min-height" type="q:size"><annotation><documentation>
Component minimum height in pixels or one of the named sizes.
</documentation></annotation></attribute>
<attribute name="max-width" type="q:size"><annotation><documentation>
Component maximum width in pixels or one of the named sizes.
</documentation></annotation></attribute>
<attribute name="max-height" type="q:size"><annotation><documentation>
Component maximum height in pixels or one of the named sizes.
</documentation></annotation></attribute>
<attribute name="margin-top" type="integer" default="0" />
<attribute name="margin-right" type="integer" default="0" />
<attribute name="margin-bottom" type="integer" default="0" />
<attribute name="margin-left" type="integer" default="0" />
<attribute name="margin"><simpleType><list itemType="integer" /></simpleType></attribute>
<attribute name="native-context-menu" type="boolean" />
<attribute name="allow-grow" type="boolean" default="true" />
<attribute name="allow-grow-x" type="boolean" default="true" />
<attribute name="allow-grow-y" type="boolean" default="true" />
<attribute name="allow-shrink" type="boolean" default="true" />
<attribute name="allow-shrink-x" type="boolean" default="true" />
<attribute name="allow-shrink-y" type="boolean" default="true" />
<attribute name="allow-stretch" type="boolean" default="true" />
<attribute name="allow-stretch-x" type="boolean" default="true" />
<attribute name="allow-stretch-y" type="boolean" default="true" />
<attribute name="align-x" type="q:horizontal-alignment"><annotation><documentation>
Horizontal alignment for component positioning purposes
</documentation></annotation></attribute>
<attribute name="align-y" type="q:vertical-alignment"><annotation><documentation>
Vertical alignment for component positioning purposes
</documentation></annotation></attribute>
<!-- Widget -->
<attribute name="appearance" type="string" />
<attribute name="cursor" type="string" />
<attribute name="decorator" type="string" />
<attribute name="focusable" type="boolean" />
<attribute name="font" type="string" />
<attribute name="padding-top" type="nonNegativeInteger" default="0" />
<attribute name="padding-right" type="nonNegativeInteger" default="0" />
<attribute name="padding-bottom" type="nonNegativeInteger" default="0" />
<attribute name="padding-left" type="nonNegativeInteger" default="0" />
<attribute name="padding"><simpleType><list itemType="nonNegativeInteger" /></simpleType></attribute>
<attribute name="tool-tip-text" type="string" />
<attribute name="tool-tip-icon" type="anyURI" />
<!-- Layout item properties -->
<attribute name="column" type="nonNegativeInteger" />
<attribute name="col-span" type="positiveInteger" default="1" />
<attribute name="flex" type="nonNegativeInteger" default="0" />
<attribute name="left" type="nonNegativeInteger" default="0" />
<attribute name="line-break" type="boolean" default="false" />
<attribute name="row" type="nonNegativeInteger" />
<attribute name="row-span" type="positiveInteger" default="1" />
<attribute name="stretch" type="boolean" default="false" />
<attribute name="top" type="nonNegativeInteger" default="0" />
<!-- Additional attributes -->
<attribute name="use-attributes"><annotation><documentation>
A list of variable names that provide additional attributes to use with this declaration
</documentation></annotation><simpleType><list itemType="q:javascript-identifier" /></simpleType></attribute>
<anyAttribute namespace="##other" />
</complexType>
<complexType name="atom-component.attributes"><complexContent><extension base="q:component.attributes">
<attribute name="center" type="boolean" default="false" />
<attribute name="gap" type="nonNegativeInteger" default="4" />
<attribute name="icon" type="anyURI" />
<attribute name="icon-position" type="q:icon-position" default="left" />
<attribute name="rich" type="boolean" default="false" />
<attribute name="show" type="q:atom-element-visibility" default="both" />
<attribute name="text-align" type="q:horizontal-alignment" />
</extension></complexContent></complexType>
<complexType name="container-component.attributes"><complexContent><extension base="q:component.attributes">
<attributeGroup ref="q:container" />
</extension></complexContent></complexType>
<complexType name="editable-component.attributes"><complexContent><extension base="q:component.attributes">
<attribute name="connect" type="string" />
<attribute name="create-label" type="boolean" default="true"><annotation><documentation>
When set, an additional widget will be created in order to hold component's label
</documentation></annotation></attribute>
<attribute name="format" type="q:format-specification" />
<attribute name="initialize" type="q:javascript-expression" />
<attribute name="live-validate" default="false">
<annotation><documentation>
When set, component's value changes will automatically trigger component or form validation
</documentation></annotation>
<simpleType><restriction base="token">
<enumeration value="false">
<annotation><documentation>Live validation disabled</documentation></annotation>
</enumeration>
<enumeration value="component">
<annotation><documentation>Validate component on value changes</documentation></annotation>
</enumeration>
<enumeration value="form">
<annotation><documentation>Validate form on value changes</documentation></annotation>
</enumeration>
</restriction></simpleType>
</attribute>
<attribute name="read-only" type="boolean" default="false" />
<attribute name="required" type="boolean" default="false" />
</extension></complexContent></complexType>
<complexType name="field-component.attributes"><complexContent><extension base="q:editable-component.attributes">
<attribute name="filter" type="string" />
<attribute name="live-update" type="boolean" default="false" />
<attribute name="max-length" type="integer" />
<attribute name="placeholder" type="string" />
<attribute name="text-align" type="q:horizontal-alignment" />
</extension></complexContent></complexType>
<!-- Component types -->
<complexType name="component"><complexContent><extension base="q:component.attributes">
<sequence>
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension></complexContent></complexType>
<complexType name="container-component"><complexContent><extension base="q:container-component.attributes">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="q:statements" />
</choice>
</extension></complexContent></complexType>
<complexType name="editable-component"><complexContent><extension base="q:editable-component.attributes">
<sequence>
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension></complexContent></complexType>
<complexType name="atom-component"><complexContent><extension base="q:atom-component.attributes">
<sequence>
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension></complexContent></complexType>
<complexType name="field-component"><complexContent><extension base="q:field-component.attributes">
<sequence>
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension></complexContent></complexType>
<complexType name="if-else">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="q:statements" />
</choice>
<attribute name="expression" type="q:javascript-expression" />
<attribute name="media-query" type="q:media-query" />
<attribute ref="xml:lang" />
</complexType>
<!-- Element groups -->
<group name="statements">
<annotation><documentation>Elements that may appear in a statement block</documentation></annotation>
<choice>
<element ref="q:script" />
<group ref="q:components" />
<group ref="q:flow-control-statements" />
<any namespace="##other" processContents="lax" />
</choice>
</group>
<group name="flow-control-statements">
<annotation><documentation>Elements that control the parsing flow</documentation></annotation>
<choice>
<element ref="q:else" />
<element ref="q:if" />
<element ref="q:switch" />
</choice>
</group>
<group name="components">
<annotation><documentation>Component elements defined by Qookery</documentation></annotation>
<choice>
<element ref="q:button" />
<element ref="q:canvas" />
<element ref="q:check-field" />
<element ref="q:component" />
<element ref="q:composite" />
<element ref="q:date-field" />
<element ref="q:form" />
<element ref="q:group-box" />
<element ref="q:hover-button" />
<element ref="q:html" />
<element ref="q:iframe" />
<element ref="q:image" />
<element ref="q:label" />
<element ref="q:list" />
<element ref="q:password-field" />
<element ref="q:progress-bar" />
<element ref="q:radio-button-group" />
<element ref="q:radio-button" />
<element ref="q:scroll" />
<element ref="q:select-box" />
<element ref="q:separator" />
<element ref="q:slider" />
<element ref="q:spacer" />
<element ref="q:spinner" />
<element ref="q:split-pane" />
<element ref="q:stack" />
<element ref="q:tab-view-page" />
<element ref="q:tab-view" />
<element ref="q:table" />
<element ref="q:text-area" />
<element ref="q:text-field" />
<element ref="q:toggle-button" />
<element ref="q:tool-bar" />
<element ref="q:virtual-tree" />
</choice>
</group>
<!-- Component elements -->
<element name="button"><complexType><complexContent><extension base="q:atom-component">
<attribute name="command" type="token" />
</extension></complexContent></complexType></element>
<element name="canvas"><complexType><complexContent><extension base="q:component">
<attribute name="canvas-height" type="q:size" default="150" />
<attribute name="canvas-width" type="q:size" default="300" />
<attribute name="sync-dimension" type="boolean" default="false" />
</extension></complexContent></complexType></element>
<element name="check-field"><complexType><complexContent><extension base="q:editable-component">
<attribute name="tri-state" type="boolean" default="false" />
<attribute name="check-box-label" type="string" />
</extension></complexContent></complexType></element>
<element name="component"><complexType><complexContent><extension base="q:component">
<attribute name="type" type="string" use="required" />
<anyAttribute namespace="##any" />
</extension></complexContent></complexType></element>
<element name="composite" type="q:container-component" />
<element name="date-field"><complexType><complexContent><extension base="q:editable-component">
<attribute name="placeholder" type="string" />
<attribute name="input-specification" type="string" />
</extension></complexContent></complexType></element>
<element name="form"><complexType><complexContent><extension base="q:container-component.attributes">
<sequence>
<element name="import" minOccurs="0" maxOccurs="unbounded">
<annotation><documentation>
Import a dependency into the form's scripting context
</documentation></annotation>
<complexType>
<!-- Source, exactly one must be specified -->
<attribute name="class" type="q:qooxdoo-class-name"><annotation><documentation>
Name of a Qooxdoo class to import via qx.Class.getByName(). Mutually exclusive with other source attributes.
</documentation></annotation></attribute>
<attribute name="form" type="token"><annotation><documentation>
Identifier of a form to look for within current form's ancestors. Mutually exclusive with other source attributes.
</documentation></annotation></attribute>
<attribute name="service" type="q:qooxdoo-class-name"><annotation><documentation>
Name of an interface for which an implementing service is needed. The service will be resolved using the parser's
service resolver or the default resolve (qooxdoo.Qooxdoo#getService()) if none defined. Mutually exclusive with
other source attributes.
</documentation></annotation></attribute>
<attribute name="singleton" type="q:qooxdoo-class-name"><annotation><documentation>
Name of a singleton class whose unique instance is needed. Mutually exclusive with other source attributes.
</documentation></annotation></attribute>
<!-- Options -->
<attribute name="resolution" default="immediate"><annotation><documentation>
When to resolve dependency, 'on-demand' means that the resolution will be attempted every time the variable is accessed
</documentation></annotation>
<simpleType><restriction base="token">
<enumeration value="immediate" />
<enumeration value="on-demand" />
</restriction></simpleType>
</attribute>
<attribute name="optional" type="boolean" default="false"><annotation><documentation>
If true, no exception will be thrown in case importing was not possible.
</documentation></annotation></attribute>
<attribute name="variable" type="q:javascript-identifier" use="optional"><annotation><documentation>
The name of the variable to create into the scripting context for imported object.
If not set, the last segment of the import's dot-separated name will be used.
</documentation></annotation></attribute>
</complexType>
</element>
<element ref="q:translation" minOccurs="0" maxOccurs="unbounded" />
<element ref="q:variable" minOccurs="0" maxOccurs="unbounded" />
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="q:statements" />
</choice>
</sequence>
<attribute ref="xml:base" />
<attribute name="translation-prefix" />
<attribute name="title" />
<attribute name="icon" type="anyURI" />
<attribute name="model-provider" type="token" />
</extension></complexContent></complexType></element>
<element name="group-box"><complexType><complexContent><extension base="q:container-component">
<attribute name="icon" type="anyURI" />
<attribute name="legend-position" default="middle"><simpleType><restriction base="token">
<enumeration value="middle" />
<enumeration value="top" />
</restriction></simpleType></attribute>
<attribute name="text-align" type="q:horizontal-alignment" default="left" />
<attributeGroup ref="q:content-padding" />
</extension></complexContent></complexType></element>
<element name="hover-button"><complexType><complexContent><extension base="q:atom-component.attributes">
<attribute name="interval" type="positiveInteger" />
</extension></complexContent></complexType></element>
<element name="html"><complexType><complexContent><extension base="q:component.attributes">
<sequence>
<any namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="1" />
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="html" type="string" />
<attribute name="overflow-x" type="q:overflow" />
<attribute name="overflow-y" type="q:overflow" />
</extension></complexContent></complexType></element>
<element name="iframe"><complexType><complexContent><extension base="q:component">
<attribute name="source" type="string" />
</extension></complexContent></complexType></element>
<element name="image"><complexType><complexContent><extension base="q:component">
<attribute name="source" type="string" />
<attribute name="scale" type="boolean" default="false" />
</extension></complexContent></complexType></element>
<element name="label"><complexType><complexContent><extension base="q:component">
<attribute name="icon" type="anyURI" />
<attribute name="rich" type="boolean" default="false" />
<attribute name="text-align" type="q:horizontal-alignment" />
<attribute name="wrap" type="boolean" default="true" />
</extension></complexContent></complexType></element>
<element name="list"><complexType><complexContent><extension base="q:editable-component">
<attribute name="map" type="q:map-name"><annotation><documentation>
The symbolic name of a map registered with the Qookery registry
</documentation></annotation></attribute>
<attribute name="scrollbar-x" type="q:scrollbar-policy" default="auto" />
<attribute name="scrollbar-y" type="q:scrollbar-policy" default="auto" />
<attribute name="selection-mode" type="q:selection-mode" default="single" />
<attribute name="orientation" type="q:orientation" default="vertical" />
<attribute name="spacing" type="nonNegativeInteger" default="0" />
<attribute name="text-align" type="q:horizontal-alignment" />
</extension></complexContent></complexType></element>
<element name="password-field" type="q:field-component" />
<element name="progress-bar"><complexType><complexContent><extension base="q:component">
<attribute name="maximum" type="double" />
<attribute name="value" type="double" />
</extension></complexContent></complexType></element>
<element name="radio-button"><complexType><complexContent><extension base="q:atom-component">
<attribute name="model" type="string" />
<attribute name="model-type" type="q:value-type" default="String" />
</extension></complexContent></complexType></element>
<element name="radio-button-group"><complexType><complexContent><extension base="q:editable-component.attributes">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="q:script" />
<element ref="q:radio-button" />
<element ref="q:toggle-button" />
</choice>
<attributeGroup ref="q:container" />
<attribute name="allow-empty-selection" type="boolean" default="false" />
</extension></complexContent></complexType></element>
<element name="scroll"><complexType><complexContent><extension base="q:container-component">
<attribute name="scrollbar-x" type="q:scrollbar-policy" default="auto" />
<attribute name="scrollbar-y" type="q:scrollbar-policy" default="auto" />
<attributeGroup ref="q:content-padding" />
</extension></complexContent></complexType></element>
<element name="select-box"><complexType><complexContent><extension base="q:editable-component">
<attribute name="keep-sorted" type="boolean" default="true"><annotation><documentation>
If true, the select box items will be kept sorted in ascending order at all times
</documentation></annotation></attribute>
<attribute name="map" type="q:map-name"><annotation><documentation>
The symbolic name of a map registered with the Qookery registry
</documentation></annotation></attribute>
<attribute name="max-list-height" type="nonNegativeInteger" />
<attribute name="null-item-label" type="string" />
</extension></complexContent></complexType></element>
<element name="separator"><complexType><complexContent><extension base="q:component">
<attribute name="variant" default="horizontal"><simpleType><restriction base="token">
<enumeration value="horizontal" />
<enumeration value="vertical" />
</restriction></simpleType></attribute>
</extension></complexContent></complexType></element>
<element name="slider"><complexType><complexContent><extension base="q:editable-component">
<attribute name="maximum" type="integer" default="100" />
<attribute name="minimum" type="integer" default="0" />
<attribute name="orientation" default="horizontal"><simpleType><restriction base="token">
<enumeration value="horizontal" />
<enumeration value="vertical" />
</restriction></simpleType></attribute>
<attribute name="page-step" type="integer" default="10" />
<attribute name="single-step" type="integer" default="1" />
</extension></complexContent></complexType></element>
<element name="spacer" type="q:component" />
<element name="spinner"><complexType><complexContent><extension base="q:editable-component">
<attribute name="maximum" type="integer" default="100" />
<attribute name="minimum" type="integer" default="0" />
<attribute name="page-step" type="integer" default="10" />
<attribute name="single-step" type="decimal" default="1" />
<attribute name="text-align" type="q:horizontal-alignment" />
<attributeGroup ref="q:content-padding" />
</extension></complexContent></complexType></element>
<element name="split-pane"><complexType><complexContent><extension base="q:container-component">
<attribute name="orientation" type="q:orientation" default="horizontal" />
<attribute name="flexes"><simpleType><list itemType="nonNegativeInteger" /></simpleType></attribute>
</extension></complexContent></complexType></element>
<element name="stack"><complexType><complexContent><extension base="q:container-component">
<attribute name="dynamic" type="boolean" />
</extension></complexContent></complexType></element>
<element name="tab-view"><complexType><complexContent><extension base="q:container-component">
<attribute name="bar-position" default="top"><simpleType><restriction base="token">
<enumeration value="left" />
<enumeration value="right" />
<enumeration value="top" />
<enumeration value="bottom" />
</restriction></simpleType></attribute>
<attributeGroup ref="q:content-padding" />
</extension></complexContent></complexType></element>
<element name="tab-view-page"><complexType><complexContent><extension base="q:container-component">
<attribute name="icon" type="anyURI" default="" />
<attribute name="show-close-button" type="boolean" default="false" />
</extension></complexContent></complexType></element>
<element name="table"><complexType><complexContent><extension base="q:editable-component.attributes">
<sequence>
<element ref="q:table-model" minOccurs="0" maxOccurs="1" />
<element ref="q:table-column" minOccurs="0" maxOccurs="unbounded" />
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="column-visibility-button-visible" type="boolean" default="true" />
<attribute name="header-cells-visible" type="boolean" default="true" />
<attribute name="row-height" type="integer" default="20" />
<attribute name="show-cell-focus-indicator" type="boolean" default="true" />
<attribute name="selection-mode" type="q:table-selection-mode" default="single" />
<attribute name="status-bar-visible" type="boolean" default="true" />
</extension></complexContent></complexType></element>
<element name="text-area"><complexType><complexContent><extension base="q:field-component">
<attribute name="auto-size" type="boolean" default="false" />
<attribute name="minimal-line-height" type="integer" default="4" />
<attribute name="single-step" type="integer" default="20" />
<attribute name="wrap" type="boolean" default="true" />
</extension></complexContent></complexType></element>
<element name="text-field" type="q:field-component" />
<element name="toggle-button"><complexType><complexContent><extension base="q:atom-component">
<attribute name="model" type="string" />
<attribute name="model-type" type="q:value-type" default="String" />
<attribute name="tri-state" type="boolean" default="false" />
</extension></complexContent></complexType></element>
<element name="tool-bar" type="q:container-component" />
<element name="virtual-tree"><complexType><complexContent><extension base="q:editable-component.attributes">
<sequence>
<element name="virtual-tree-delegate" minOccurs="0" maxOccurs="1"><complexType>
<attribute name="class" type="string" use="required" />
<anyAttribute namespace="##other" />
</complexType></element>
<element ref="q:script" minOccurs="0" maxOccurs="unbounded" />
</sequence>
<attribute name="child-property" type="string" />
<attribute name="hide-root" type="boolean" default="false" />
<attribute name="icon-path" type="string" />
<attribute name="label-path" type="string" />
</extension></complexContent></complexType></element>
<!-- Custom elements referenced as children of component elements -->
<element name="table-model"><complexType>
<attribute name="class" type="string" use="required" />
<anyAttribute namespace="##other" />
</complexType></element>
<element name="table-column"><complexType>
<attribute name="cell-editor" type="q:cell-editor" />
<attribute name="cell-renderer" default="model" type="q:cell-renderer" />
<attribute name="color" type="string" />
<attribute name="connect" type="string" />
<attribute name="editable" type="boolean" default="false" />
<attribute name="flex" type="q:flex" />
<attribute name="font-family" />
<attribute name="font-style" />
<attribute name="font-weight" />
<attribute name="format" type="q:format-specification" />
<attribute name="header-icon" type="string" />
<attribute name="header-click" type="string" />
<attribute name="height" type="string" />
<attribute name="label" type="string" />
<attribute name="line-height" type="string" />
<attribute name="map" type="q:map-name" />
<attribute name="max-width" type="q:size" />
<attribute name="min-width" type="q:size" />
<attribute name="name" type="token" />
<attribute name="sortable" type="boolean" default="true" />
<attribute name="text-align" type="q:horizontal-alignment" default="left" />
<attribute name="tool-tip-text" type="string" />
<attribute name="visibility" type="q:visibility" default="visible" />
<attribute name="width" type="string" />
<attribute name="white-space" type="string" />
<attribute name="cell-renderer-callback" type="string" />
</complexType></element>
<!-- Statement block non-component elements -->
<element name="else" type="q:if-else">
<annotation><documentation>
Conditional parsing of children elements when previous conditions failed, optionally depending on evaluation of JS expression
</documentation></annotation>
</element>
<element name="if" type="q:if-else">
<annotation><documentation>
Conditional parsing of children elements depending on evaluation of JS expression
</documentation></annotation>
</element>
<element name="script">
<annotation><documentation>
Add a JavaScript script to one or more components
</documentation></annotation>
<complexType>
<simpleContent>
<extension base="string">
<attribute name="access" type="q:access-level" default="public"><annotation><documentation>
The access level of the script (currently used only for documentation purposes)
</documentation></annotation></attribute>
<attribute name="action"><annotation><documentation>
The name(s) of the action(s) the script is a handler for.
</documentation></annotation><simpleType><list itemType="token" /></simpleType></attribute>
<attribute name="arguments"><annotation><documentation>
A list of JavaScript argument names to use for generated function body
</documentation></annotation><simpleType><list itemType="q:javascript-identifier" /></simpleType></attribute>
<attribute name="component"><annotation><documentation>
The identifier(s) of a previously registered component(s) that will receive the script.
If undefined, the enclosing component will be used.
</documentation></annotation><simpleType><list itemType="token" /></simpleType></attribute>
<attribute name="debounce" type="positiveInteger"><annotation><documentation>
Number of milliseconds to postpone execution until after the last time the script was invoked.
Implies "recursion = prevent".
</documentation></annotation></attribute>
<attribute name="event"><annotation><documentation>
The name(s) of the component's event(s) the script should be attached to.
</documentation></annotation><simpleType><list itemType="token" /></simpleType></attribute>
<attribute name="execute" type="boolean" default="false"><annotation><documentation>
If true, execute script immediately in addition to any other performed attachments/registrations.
This attribute is false by default, unless no action, function, event or media query is specified.
</documentation></annotation></attribute>
<attribute name="media-query" type="q:media-query"><annotation><documentation>
A CSS3 media query that will invoke script each time its state changes
</documentation></annotation></attribute>
<attribute name="name"><annotation><documentation>
The name(s) of the function(s) to register into the form context ("$") for later execution of script.
</documentation></annotation><simpleType><list itemType="q:javascript-identifier" /></simpleType></attribute>
<attribute name="once" type="boolean" default="false"><annotation><documentation>
Unregister the script after it has been run once (currently implemented only for event registrations)
</documentation></annotation></attribute>
<attribute name="recursion" default="allow"><annotation><documentation>
If set to 'prevented', the script will return "undefined" if called a second time while already running
</documentation></annotation><simpleType><restriction base="token">
<enumeration value="allow" />
<enumeration value="prevent" />
</restriction></simpleType>
</attribute>
<attribute name="source" type="anyURI"><annotation><documentation>
The URL to the script that will be attached.
</documentation></annotation></attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="switch">
<annotation><documentation>
Evaluate a JS expression and continue parsing with first matching statement block
</documentation></annotation>
<complexType>
<sequence>
<element name="case" minOccurs="0" maxOccurs="unbounded">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="q:statements" />
</choice>
<attribute name="expression" type="q:javascript-expression" use="optional" />
</complexType>
</element>
</sequence>
<attribute name="expression" type="q:javascript-expression" use="required" />
</complexType>
</element>
<element name="translation">
<annotation><documentation>
Provide an addition translation to the Qooxdoo locale manager
</documentation></annotation>
<complexType>
<sequence>
<element name="message" minOccurs="1" maxOccurs="unbounded">
<annotation><documentation>
A translated message
</documentation></annotation>
<complexType mixed="true">
<attribute name="id" use="required" />
</complexType>
</element>
</sequence>
<attribute ref="xml:lang" use="required" />
</complexType>
<unique name="message">
<selector xpath="q:message" />
<field xpath="@id" />
</unique>
</element>
<element name="variable">
<annotation><documentation>
Define a form variable, with optional default value
</documentation></annotation>
<complexType mixed="true">
<attribute name="access" type="q:access-level" default="public"><annotation><documentation>
The access level of the variable (currently used only for documentation purposes)
</documentation></annotation></attribute>
<attribute name="name" type="q:javascript-identifier"><annotation><documentation>
The name of the variable to register into the form context ("$")
</documentation></annotation></attribute>
<attribute name="provider" type="q:javascript-identifier" default="Form"><annotation><documentation>
The name of an existing variable whose value implements IVariableProvider and will provide new variable - defaults to 'Form'
</documentation></annotation></attribute>
<attribute name="default" type="q:javascript-expression"><annotation><documentation>
A default value to set as variable's value if not available during parsing
</documentation></annotation></attribute>
<attribute name="type" type="q:value-type" default="Expression"><annotation><documentation>
The type of the default value, defaults to JavaScript expression if unspecified
</documentation></annotation></attribute>
<attribute name="required" type="boolean" default="false"><annotation><documentation>
When true, a non-null value is required for form parsing to continue
</documentation></annotation></attribute>
<attribute name="writable" type="boolean" default="true"><annotation><documentation>
When false, modification of variable's initial value is not allowed
</documentation></annotation></attribute>
</complexType>
</element>
</schema>