[ADD] doc: new documentation, with training tutorials, and new scaffolding
[odoo/odoo.git] / openerp / addons / base / rng / view.rng
1 <?xml version="1.0" encoding="UTF-8"?>
2 <rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
3              xmlns:a="http://relaxng.org/ns/annotation/1.0"
4              datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
5     <!-- Handling of element overloading when inheriting from a base
6          template
7     -->
8     <rng:define name="overload">
9         <rng:optional>
10             <!--
11                 Alter matched element with content
12             -->
13             <rng:choice>
14                 <rng:attribute name="position">
15                     <rng:choice>
16                         <!-- Insert content before first child -->
17                         <rng:value>before</rng:value>
18                         <!-- Insert content after last child -->
19                         <rng:value>after</rng:value>
20                         <!-- Replace all children with content -->
21                         <rng:value>inside</rng:value>
22                         <!-- Replace matched element itself with content -->
23                         <rng:value>replace</rng:value>
24                     </rng:choice>
25                 </rng:attribute>
26                 <rng:group>
27                     <rng:attribute name="position">
28                         <!-- Edit element attributes -->
29                         <rng:value>attributes</rng:value>
30                     </rng:attribute>
31                     <rng:oneOrMore>
32                         <rng:element name="attribute">
33                             <rng:attribute name="name"><rng:text/></rng:attribute>
34                             <rng:text />
35                         </rng:element>
36                     </rng:oneOrMore>
37                 </rng:group>
38             </rng:choice>
39         </rng:optional>
40     </rng:define>
41
42     <rng:define name="modifiable">
43         <rng:optional>
44             <!-- @modifiers contains a JSON map unifying the various
45                  modifier attributes: @readonly, @required, @invisible.
46                  Each attribute is a key, mapped to a JSON list representing
47                  a condition expressed as an OpenERP `domain` filter
48                  Only some of the modifier keys make sense on some
49                  elements, for example <filter> and <group> only support
50                  `invisible`. -->
51             <rng:attribute name="modifiers"/>
52         </rng:optional>
53     </rng:define>
54
55     <rng:define name="access_rights">
56         <rng:optional>
57             <rng:attribute name="groups"/>
58         </rng:optional>
59     </rng:define>
60
61     <rng:define name="dashboard-column">
62         <rng:element name="column">
63             <rng:zeroOrMore>
64                 <rng:element name="action">
65                     <!-- Action identifier, used by clients to get the
66                          actual action from db -->
67                     <rng:attribute name="name"/>
68                     <!-- Displayed name of dashboard item (above idem) -->
69                     <rng:optional><rng:attribute name="string"/></rng:optional>
70                     <!-- Merged into the action descriptor's own
71                          context before executing the action -->
72                     <rng:optional><rng:attribute name="context"/></rng:optional>
73                     <!-- Added to the action descriptor's own domain
74                          before executing the action -->
75                     <rng:optional><rng:attribute name="domain"/></rng:optional>
76                     <!-- In case the action is an act_window,
77                          overrides its own @views. -->
78                     <rng:optional><rng:attribute name="view_mode"/></rng:optional>
79                     <!-- Add a 'Create' button in order to create a new resource of the action's model
80                          values :  [true|false|<ID of specific action view>]. -->
81                     <rng:optional><rng:attribute name="creatable"/></rng:optional>
82                 </rng:element>
83             </rng:zeroOrMore>
84         </rng:element>
85     </rng:define>
86     <rng:define name="dashboard">
87         <rng:choice>
88             <rng:element name="board">
89                 <a:documentation>
90                   New-style (6.1) dashboard definition
91                 </a:documentation>
92                 <rng:choice>
93                     <rng:group>
94                         <a:documentation>
95                           Single-column dashboard style
96                         </a:documentation>
97                         <rng:attribute name="style">
98                             <rng:value>1</rng:value>
99                         </rng:attribute>
100                         <rng:ref name="dashboard-column"/>
101                     </rng:group>
102                     <rng:group>
103                         <a:documentation>
104                           Three different 2-column dashboard styles:
105                           50|50, 33|66 and 66|33.
106                         </a:documentation>
107                         <rng:attribute name="style">
108                             <rng:choice>
109                                 <rng:value>1-1</rng:value>
110                                 <rng:value>1-2</rng:value>
111                                 <rng:value>2-1</rng:value>
112                             </rng:choice>
113                         </rng:attribute>
114                         <rng:ref name="dashboard-column"/>
115                         <rng:ref name="dashboard-column"/>
116                     </rng:group>
117                     <rng:group>
118                         <a:documentation>
119                           Three-column dashboard style: 33|33|33
120                         </a:documentation>
121                         <rng:attribute name="style">
122                             <rng:value>1-1-1</rng:value>
123                         </rng:attribute>
124                         <rng:ref name="dashboard-column"/>
125                         <rng:ref name="dashboard-column"/>
126                         <rng:ref name="dashboard-column"/>
127                     </rng:group>
128                 </rng:choice>
129             </rng:element>
130             <!--
131                 DEPRECATED old-style dashboards
132             -->
133             <rng:element>
134                 <rng:choice>
135                     <rng:name>hpaned</rng:name>
136                     <rng:name>vpaned</rng:name>
137                 </rng:choice>
138                 <rng:optional>
139                     <rng:attribute name="position">
140                         <rng:data type="int"/>
141                     </rng:attribute>
142                 </rng:optional>
143                 <rng:zeroOrMore>
144                     <rng:optional><rng:ref name="any"/></rng:optional>
145                     <rng:optional><rng:ref name="html"/></rng:optional>
146                 </rng:zeroOrMore>
147             </rng:element>
148         </rng:choice>
149     </rng:define>
150
151     <rng:define name="container">
152         <rng:optional><rng:attribute name="col"/></rng:optional>
153         <rng:zeroOrMore>
154             <rng:choice>
155                 <rng:ref name="notebook"/>
156                 <rng:ref name="field"/>
157                 <rng:ref name="group"/>
158                 <rng:ref name="button"/>
159                 <rng:ref name="label" />
160                 <rng:ref name="separator"/>
161                 <rng:ref name="image"/>
162                 <rng:ref name="form"/>
163                 <rng:ref name="dashboard"/>
164                 <rng:ref name="filter"/>
165                 <rng:ref name="html"/>
166                 <rng:element name="newline"><rng:empty/></rng:element>
167                 <rng:element name="properties"><rng:empty/></rng:element>
168             </rng:choice>
169         </rng:zeroOrMore>
170     </rng:define>
171
172     <rng:define name="form">
173         <rng:element name="form">
174             <rng:ref name="overload"/>
175             <rng:optional><rng:attribute name="create" /></rng:optional>
176             <rng:optional><rng:attribute name="delete" /></rng:optional>
177             <rng:optional><rng:attribute name="edit" /></rng:optional>
178             <rng:optional><rng:attribute name="string"/></rng:optional>
179             <rng:optional><rng:attribute name="type"/></rng:optional>
180             <rng:optional><rng:attribute name="link"/></rng:optional>
181             <rng:optional><rng:attribute name="version"/></rng:optional>
182             <rng:ref name="container"/>
183         </rng:element>
184     </rng:define>
185
186     <rng:define name="diagram">
187         <rng:element name="diagram">
188             <rng:optional><rng:attribute name="create" /></rng:optional>
189             <rng:optional><rng:attribute name="string"/></rng:optional>
190             <rng:ref name="node"/>
191             <rng:ref name="arrow"/>            
192             <rng:zeroOrMore>
193                 <rng:ref name="label"/>
194             </rng:zeroOrMore>
195         </rng:element>
196     </rng:define>
197
198     <rng:define name="node">
199         <rng:element name="node">
200             <rng:attribute name="object"/>
201             <rng:optional><rng:attribute name="shape"/></rng:optional>
202             <rng:optional><rng:attribute name="bgcolor"/></rng:optional>
203             <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
204             <rng:oneOrMore>
205               <rng:ref name="field"/>
206             </rng:oneOrMore>
207         </rng:element>
208     </rng:define>
209
210     <rng:define name="arrow">
211         <rng:element name="arrow">
212             <rng:attribute name="object" />
213             <rng:attribute name="source" />
214             <rng:attribute name="destination" />
215             <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
216             <rng:optional><rng:attribute name="label"/></rng:optional>
217             <rng:oneOrMore>
218               <rng:ref name="field"/>
219             </rng:oneOrMore>
220         </rng:element>
221     </rng:define>
222
223     <rng:define name="kanban">
224         <rng:element name="kanban">
225             <rng:optional>
226                 <!-- group-by field to apply in the kanban view when no other
227                      grouping is selected in the search view -->
228                 <rng:attribute name="default_group_by" />
229             </rng:optional>
230             <rng:optional><rng:attribute name="create" /></rng:optional>
231             <rng:optional><rng:attribute name="delete" /></rng:optional>
232             <rng:optional><rng:attribute name="edit" /></rng:optional>
233             <rng:optional><rng:attribute name="quick_create" /></rng:optional>
234             <rng:zeroOrMore>
235                 <rng:ref name="field"/>
236             </rng:zeroOrMore>
237             <rng:element name="templates">
238                 <rng:oneOrMore>
239                     <rng:ref name="any"/>
240                 </rng:oneOrMore>
241             </rng:element>
242         </rng:element>
243     </rng:define>
244
245     <rng:define name="tree">
246         <rng:element name="tree">
247             <rng:ref name="overload"/>
248             <rng:optional><rng:attribute name="create" /></rng:optional>
249             <rng:optional><rng:attribute name="delete" /></rng:optional>
250             <rng:optional><rng:attribute name="edit" /></rng:optional>
251             <rng:optional><rng:attribute name="string"/></rng:optional>
252             <rng:optional><rng:attribute name="colors"/></rng:optional>
253             <rng:optional><rng:attribute name="fonts"/></rng:optional>
254             <rng:optional>
255               <rng:attribute name="editable">
256                 <rng:choice>
257                   <rng:value>top</rng:value>
258                   <rng:value>bottom</rng:value>
259                 </rng:choice>
260               </rng:attribute>
261               <rng:optional><rng:attribute name="on_write"/></rng:optional>
262             </rng:optional>
263             <rng:optional>
264               <rng:attribute name="toolbar">
265                 <rng:choice>
266                   <rng:value>1</rng:value>
267                   <rng:value>True</rng:value>
268                 </rng:choice>
269               </rng:attribute>
270             </rng:optional>
271             <rng:zeroOrMore>
272                 <rng:choice>
273                     <rng:ref name="field"/>
274                     <rng:ref name="separator"/>
275                     <rng:ref name="tree"/>
276                     <rng:ref name="group"/>
277                     <rng:ref name="button"/>
278                     <rng:ref name="filter"/>
279                     <rng:ref name="html"/>
280                     <rng:element name="newline"><rng:empty/></rng:element>
281                 </rng:choice>
282             </rng:zeroOrMore>
283         </rng:element>
284     </rng:define>
285
286     <rng:define name="search">
287         <rng:element name="search">
288             <rng:ref name="overload"/>
289             <rng:optional><rng:attribute name="string"/></rng:optional>
290             <rng:zeroOrMore>
291                 <rng:choice>
292                     <rng:ref name="field"/>
293                     <rng:ref name="group"/>
294                     <rng:ref name="separator"/>
295                     <rng:ref name="filter"/>
296                     <rng:ref name="search"/>
297                     <rng:element name="newline"><rng:empty/></rng:element>
298                     <rng:element name="properties"><rng:empty/></rng:element>
299                 </rng:choice>
300             </rng:zeroOrMore>
301         </rng:element>
302     </rng:define>
303
304     <rng:define name="image">
305         <rng:element name="image">
306             <rng:attribute name="name"/>
307         </rng:element>
308     </rng:define>
309
310     <rng:define name="html">
311         <rng:element name="html">
312             <rng:zeroOrMore>
313                     <rng:text/>
314                     <rng:ref name="any"/>
315             </rng:zeroOrMore>
316         </rng:element>
317     </rng:define>
318
319     <rng:define name="label">
320         <rng:element name="label">
321             <rng:ref name="overload"/>
322             <rng:ref name="access_rights"/>
323             <rng:ref name="modifiable"/>
324             <rng:optional><rng:attribute name="invisible"/></rng:optional>
325             <rng:optional><rng:attribute name="align"/></rng:optional>
326             <rng:optional><rng:attribute name="nolabel"/></rng:optional>
327             <rng:optional><rng:attribute name="colspan"/></rng:optional>
328             <rng:optional><rng:attribute name="string"/></rng:optional>
329             <rng:optional><rng:attribute name="angle"/></rng:optional>
330             <rng:optional><rng:attribute name="fill"/></rng:optional>
331             <rng:optional><rng:attribute name="help"/></rng:optional>
332             <rng:optional><rng:attribute name="width"/></rng:optional>
333             <rng:optional><rng:attribute name="wrap"/></rng:optional>
334             <rng:optional><rng:attribute name="name"/></rng:optional>
335             <rng:optional>
336                 <!-- @for: allows to explicitely link a label to a field -->
337                 <rng:attribute name="for"/>
338             </rng:optional>
339             <rng:zeroOrMore>
340                 <rng:choice>
341                     <rng:text/>
342                     <rng:ref name="notebook"/>
343                     <rng:ref name="field"/>
344                     <rng:ref name="group"/>
345                     <rng:ref name="button"/>
346                     <rng:ref name="label" />
347                     <rng:ref name="separator"/>
348                     <rng:ref name="image"/>
349                     <rng:ref name="form"/>
350                     <rng:ref name="dashboard"/>
351                     <rng:ref name="filter"/>
352                     <rng:ref name="html"/>
353                     <rng:element name="newline"><rng:empty/></rng:element>
354                     <rng:element name="properties"><rng:empty/></rng:element>
355                 </rng:choice>
356             </rng:zeroOrMore>
357         </rng:element>
358     </rng:define>
359
360     <rng:define name="level">
361         <rng:element name="level">
362             <rng:optional><rng:attribute name="object"/></rng:optional>
363             <rng:optional><rng:attribute name="link"/></rng:optional>
364             <rng:optional><rng:attribute name="domain"/></rng:optional>
365             <rng:zeroOrMore>
366                 <rng:ref name="field"/>
367             </rng:zeroOrMore>
368             <rng:zeroOrMore>
369                 <rng:ref name="html"/>
370             </rng:zeroOrMore>
371         </rng:element>
372     </rng:define>
373
374     <rng:define name="gantt">
375         <rng:element name="gantt">
376             <rng:optional><rng:attribute name="mode">
377               <rng:choice>
378                  <rng:value>day</rng:value>
379                  <rng:value>3days</rng:value>
380                  <rng:value>week</rng:value>
381                  <rng:value>3weeks</rng:value>
382                  <rng:value>month</rng:value>
383                  <rng:value>3months</rng:value>
384                  <rng:value>year</rng:value>
385                  <rng:value>3years</rng:value>
386                  <rng:value>5years</rng:value>
387               </rng:choice></rng:attribute>
388             </rng:optional>
389             <rng:optional><rng:attribute name="create"/></rng:optional>
390             <rng:optional><rng:attribute name="delete"/></rng:optional>
391             <rng:optional><rng:attribute name="edit"/></rng:optional>
392             <rng:optional><rng:attribute name="color"/></rng:optional>
393             <rng:optional><rng:attribute name="date_delay"/></rng:optional>
394             <rng:optional><rng:attribute name="day_length"/></rng:optional>
395             <rng:optional><rng:attribute name="date_start"/></rng:optional>
396             <rng:optional><rng:attribute name="date_stop"/></rng:optional>
397             <rng:optional><rng:attribute name="progress"/></rng:optional>
398             <rng:optional><rng:attribute name="date_string"/></rng:optional>
399             <rng:optional><rng:attribute name="string"/></rng:optional>
400             <rng:optional><rng:attribute name="default_group_by"/></rng:optional>
401             <rng:zeroOrMore>
402                 <rng:optional><rng:ref name="level"/></rng:optional>
403                 <rng:optional><rng:ref name="field"/></rng:optional>
404                 <rng:optional><rng:ref name="html"/></rng:optional>
405             </rng:zeroOrMore>
406         </rng:element>
407     </rng:define>
408
409     <rng:define name="any">
410         <rng:element>
411             <rng:anyName/>
412             <rng:zeroOrMore>
413                 <rng:choice>
414                     <rng:attribute>
415                         <rng:anyName/>
416                     </rng:attribute>
417                     <rng:text/>
418                     <rng:ref name="any"/>
419                 </rng:choice>
420             </rng:zeroOrMore>
421         </rng:element>
422     </rng:define>
423
424     <rng:define name="page">
425         <rng:element name="page">
426             <rng:ref name="overload"/>
427             <rng:ref name="access_rights"/>
428             <rng:ref name="modifiable"/>
429             <rng:optional><rng:attribute name="string"/></rng:optional>
430             <rng:optional><rng:attribute name="name"/></rng:optional>
431             <rng:optional><rng:attribute name="attrs"/></rng:optional>
432             <rng:optional><rng:attribute name="invisible"/></rng:optional>
433             <rng:zeroOrMore>
434                 <rng:choice>
435                     <rng:element name="newline"><rng:empty/></rng:element>
436                     <rng:element name="properties"><rng:empty/></rng:element>
437                     <rng:ref name="label" />
438                     <rng:ref name="field"/>
439                     <rng:ref name="group"/>
440                     <rng:ref name="separator"/>
441                     <rng:ref name="button"/>
442                     <rng:ref name="form" />
443                     <rng:ref name="page" />
444                     <rng:ref name="notebook"/>
445                     <rng:ref name="dashboard"/>
446                     <rng:ref name="filter"/>
447                     <rng:ref name="html"/>
448                 </rng:choice>
449             </rng:zeroOrMore>
450         </rng:element>
451     </rng:define>
452
453     <rng:define name="notebook">
454         <rng:element name="notebook">
455             <rng:ref name="overload"/>
456             <rng:optional><rng:attribute name="colspan"/></rng:optional>
457             <rng:optional>
458               <rng:attribute name="tabpos">
459                 <!-- position of the notebook's tabs bar, support is
460                      optional and implementation-dependent -->
461                 <rng:choice>
462                   <rng:value>up</rng:value>
463                   <rng:value>down</rng:value>
464                   <rng:value>left</rng:value>
465                   <rng:value>right</rng:value>
466                 </rng:choice>
467               </rng:attribute>
468             </rng:optional>
469             <rng:oneOrMore>
470                 <rng:ref name="page"/>
471             </rng:oneOrMore>
472         </rng:element>
473     </rng:define>
474
475     <rng:define name="separator">
476         <rng:element name="separator">
477             <rng:ref name="overload"/>
478             <rng:ref name="access_rights"/>
479             <rng:ref name="modifiable"/>
480             <rng:optional><rng:attribute name="invisible"/></rng:optional>
481             <rng:optional><rng:attribute name="name"/></rng:optional>
482             <rng:optional><rng:attribute name="colspan"/></rng:optional>
483             <rng:optional><rng:attribute name="rowspan"/></rng:optional>
484             <rng:optional><rng:attribute name="string"/></rng:optional>
485             <rng:optional><rng:attribute name="col"/></rng:optional>
486             <rng:optional><rng:attribute name="select"/></rng:optional>
487             <rng:optional><rng:attribute name="orientation"/></rng:optional>
488             <rng:zeroOrMore>
489                 <rng:choice>
490                     <rng:ref name="separator"/>
491                     <rng:ref name="button"/>
492                     <rng:ref name="field"/>
493                     <rng:ref name="label" />
494                     <rng:ref name="group" />
495                     <rng:ref name="filter"/>
496                     <rng:ref name="html"/>
497                     <rng:element name="properties"><rng:empty/></rng:element>
498                     <rng:element name="newline"><rng:empty/></rng:element>
499                 </rng:choice>
500             </rng:zeroOrMore>
501         </rng:element>
502     </rng:define>
503
504     <rng:define name="xpath">
505         <rng:element name="xpath">
506             <rng:optional><rng:attribute name="expr"/></rng:optional>
507             <rng:ref name="overload"/>
508             <rng:zeroOrMore>
509                 <rng:choice>
510                     <rng:ref name="any"/>
511                     <rng:ref name="button"/>
512                     <rng:ref name="html"/>
513                 </rng:choice>
514             </rng:zeroOrMore>
515         </rng:element>
516     </rng:define>
517
518     <rng:define name="data">
519         <rng:element name="data">
520             <rng:zeroOrMore>
521                 <rng:choice>
522                     <rng:ref name="form"/>
523                     <rng:ref name="tree"/>
524                     <rng:ref name="field"/>
525                     <rng:ref name="label"/>
526                     <rng:ref name="separator"/>
527                     <rng:ref name="notebook"/>
528                     <rng:ref name="page"/>
529                     <rng:ref name="xpath"/>
530                     <rng:ref name="button"/>
531                     <rng:ref name="group"/>
532                     <rng:ref name="filter"/>
533                     <rng:ref name="graph"/>
534                     <rng:ref name="html"/>
535                     <rng:element name="newline"><rng:empty/></rng:element>
536                 </rng:choice>
537             </rng:zeroOrMore>
538         </rng:element>
539     </rng:define>
540
541     <rng:define name="field">
542         <rng:element name="field">
543             <rng:attribute name="name" />
544             <rng:ref name="overload"/>
545             <rng:ref name="access_rights"/>
546             <rng:ref name="modifiable"/>
547             <rng:optional><rng:attribute name="domain_filter"/></rng:optional>
548             <rng:optional><rng:attribute name="attrs"/></rng:optional>
549             <rng:optional><rng:attribute name="string"/></rng:optional>
550             <rng:optional><rng:attribute name="completion"/></rng:optional>
551             <rng:optional><rng:attribute name="width"/></rng:optional>
552             <rng:optional><rng:attribute name="type"/></rng:optional>
553             <rng:optional><rng:attribute name="ref"/></rng:optional>
554             <rng:optional><rng:attribute name="eval"/></rng:optional>
555             <rng:optional><rng:attribute name="search"/></rng:optional>
556             <rng:optional><rng:attribute name="model"/></rng:optional>
557             <rng:optional><rng:attribute name="use"/></rng:optional>
558             <rng:optional><rng:attribute name="on_change"/></rng:optional>
559             <rng:optional><rng:attribute name="domain"/></rng:optional>
560             <rng:optional><rng:attribute name="filter_domain"/></rng:optional>
561             <rng:optional><rng:attribute name="invisible"/></rng:optional>
562             <rng:optional><rng:attribute name="password"/></rng:optional>
563             <rng:optional><rng:attribute name="comparator"/></rng:optional>
564             <rng:optional><rng:attribute name="sum"/></rng:optional>
565             <rng:optional><rng:attribute name="bold"/></rng:optional>
566             <rng:optional><rng:attribute name="avg"/></rng:optional>
567             <rng:optional><rng:attribute name="select"/></rng:optional>
568             <rng:optional><rng:attribute name="group"/></rng:optional>
569             <rng:optional><rng:attribute name="operator"/></rng:optional>
570             <rng:optional><rng:attribute name="colspan"/></rng:optional>
571             <rng:optional><rng:attribute name="nolabel"/></rng:optional>
572             <rng:optional><rng:attribute name="default_get"/></rng:optional>
573             <rng:optional><rng:attribute name="required"/></rng:optional>
574             <rng:optional><rng:attribute name="readonly"/></rng:optional>
575             <rng:optional><rng:attribute name="view_mode"/></rng:optional>
576             <rng:optional><rng:attribute name="widget"/></rng:optional>
577             <rng:optional><rng:attribute name="context"/></rng:optional>
578             <rng:optional><rng:attribute name="states"/></rng:optional>
579             <rng:optional><rng:attribute name="digits"/></rng:optional>
580             <rng:optional><rng:attribute name="icon"/></rng:optional>
581             <rng:optional><rng:attribute name="mode"/></rng:optional>
582             <rng:optional><rng:attribute name="img_width"/></rng:optional>
583             <rng:optional><rng:attribute name="img_height"/></rng:optional>
584             <rng:optional><rng:attribute name="size"/></rng:optional>
585             <rng:optional><rng:attribute name="filename"/></rng:optional>
586             <rng:optional><rng:attribute name="height"/></rng:optional>
587             <rng:optional><rng:attribute name="rowspan"/></rng:optional>
588             <rng:optional><rng:attribute name="align"/></rng:optional>
589             <rng:optional><rng:attribute name="selection"/></rng:optional>
590             <rng:optional><rng:attribute name="default_focus"/></rng:optional>
591             <rng:optional><rng:attribute name="filters"/></rng:optional>
592             <rng:optional><rng:attribute name="statusbar_visible"/></rng:optional>
593             <rng:optional><rng:attribute name="statusbar_colors"/></rng:optional>
594             <rng:optional><rng:attribute name="interval" /></rng:optional>
595             <!-- Widget *static* options defined as an arbitrary JSON dict, with
596                  widget-dependent parameters. To be ignored if widget/client does
597                  not support them. -->
598             <rng:optional><rng:attribute name="options"/></rng:optional>
599             <rng:optional><rng:attribute name="placeholder"/></rng:optional>
600             <rng:zeroOrMore>
601                 <rng:choice>
602                     <rng:ref name="diagram"/>
603                     <rng:ref name="kanban"/>
604                     <rng:ref name="form"/>
605                     <rng:ref name="data"/>
606                     <rng:ref name="tree"/>
607                     <rng:ref name="field"/>
608                     <rng:ref name="label"/>
609                     <rng:ref name="separator"/>
610                     <rng:ref name="xpath"/>
611                     <rng:ref name="button"/>
612                     <rng:ref name="group"/>
613                     <rng:ref name="graph"/>
614                     <rng:ref name="filter"/>
615                     <rng:ref name="notebook"/>
616                     <rng:ref name="html"/>
617                     <rng:element name="newline"><rng:empty/></rng:element>
618                 </rng:choice>
619             </rng:zeroOrMore>
620         </rng:element>
621     </rng:define>
622
623     <rng:define name="group">
624         <rng:element name="group">
625             <rng:ref name="overload"/>
626             <rng:ref name="access_rights"/>
627             <rng:ref name="modifiable"/>
628             <rng:optional><rng:attribute name="attrs"/></rng:optional>
629             <rng:optional><rng:attribute name="colspan"/></rng:optional>
630             <rng:optional><rng:attribute name="rowspan"/></rng:optional>
631             <rng:optional><rng:attribute name="expand"/></rng:optional>
632             <rng:optional><rng:attribute name="states"/></rng:optional>
633             <rng:optional><rng:attribute name="string"/></rng:optional>
634             <rng:optional><rng:attribute name="fill"/></rng:optional>
635             <rng:optional><rng:attribute name="height"/></rng:optional>
636             <rng:optional><rng:attribute name="width"/></rng:optional>
637             <rng:optional><rng:attribute name="name"/></rng:optional>
638             <rng:optional><rng:attribute name="color" /></rng:optional>
639             <rng:optional><rng:attribute name="invisible"/></rng:optional>
640             <rng:ref name="container"/>
641         </rng:element>
642     </rng:define>
643
644     <rng:define name="calendar">
645         <rng:element name="calendar">
646             <rng:optional><rng:attribute name="string" /></rng:optional>
647             <rng:optional><rng:attribute name="color" /></rng:optional>
648             <rng:optional><rng:attribute name="date_start" /></rng:optional>
649             <rng:optional><rng:attribute name="date_stop" /></rng:optional>
650             <rng:optional><rng:attribute name="day_length" /></rng:optional>
651             <rng:optional><rng:attribute name="date_delay" /></rng:optional>
652             <rng:optional><rng:attribute name="all_day" /></rng:optional>
653             <rng:optional><rng:attribute name="event_open_popup" /></rng:optional>            
654             <rng:optional><rng:attribute name="attendee" /></rng:optional>
655             <rng:optional><rng:attribute name="color_is_attendee" /></rng:optional>
656             <rng:optional><rng:attribute name="avatar_filter" /></rng:optional>
657             <rng:optional><rng:attribute name="avatar_model" /></rng:optional>
658             <rng:optional><rng:attribute name="avatar_title" /></rng:optional>
659             <rng:optional><rng:attribute name="use_contacts" /></rng:optional>
660             <rng:optional><rng:attribute name="quick_add" /></rng:optional>
661             <rng:optional><rng:attribute name="display" /></rng:optional>            
662             <rng:optional><rng:attribute name="type" /></rng:optional>
663             <rng:optional>
664                 <rng:attribute name="mode">
665                     <rng:choice>
666                         <rng:value>month</rng:value>
667                         <rng:value>week</rng:value>
668                         <rng:value>day</rng:value>
669                     </rng:choice>
670                 </rng:attribute>
671             </rng:optional>
672             <rng:oneOrMore>
673                 <rng:ref name="field"/>
674             </rng:oneOrMore>
675             <rng:zeroOrMore>
676                 <rng:ref name="html"/>
677             </rng:zeroOrMore>
678         </rng:element>
679     </rng:define>
680
681     <rng:define name="graph">
682         <rng:element name="graph">
683             <rng:optional><rng:attribute name="string" /></rng:optional>
684             <rng:optional><rng:attribute name="orientation" /></rng:optional>
685             <rng:optional><rng:attribute name="type" /></rng:optional>
686             <rng:optional><rng:attribute name="stacked" /></rng:optional>
687             <rng:optional><rng:attribute name="color"/></rng:optional>
688             <rng:oneOrMore>
689                 <rng:ref name="field"/>
690             </rng:oneOrMore>
691             <rng:zeroOrMore>
692                 <rng:ref name="html"/>
693             </rng:zeroOrMore>
694         </rng:element>
695     </rng:define>
696
697     <rng:define name="button">
698         <rng:element name="button">
699             <rng:ref name="overload"/>
700             <rng:ref name="access_rights"/>
701             <rng:ref name="modifiable"/>
702             <rng:optional><rng:attribute name="attrs"/></rng:optional>
703             <rng:optional><rng:attribute name="invisible"/></rng:optional>
704             <rng:optional><rng:attribute name="name" /></rng:optional>
705             <rng:optional><rng:attribute name="icon" /></rng:optional>
706             <rng:optional><rng:attribute name="string" /></rng:optional>
707             <rng:optional><rng:attribute name="states" /></rng:optional>
708             <rng:optional><rng:attribute name="type" /></rng:optional>
709             <rng:optional><rng:attribute name="special" /></rng:optional>
710             <rng:optional><rng:attribute name="align" /></rng:optional>
711             <rng:optional><rng:attribute name="colspan"/></rng:optional>
712             <rng:optional><rng:attribute name="target"/></rng:optional>
713             <rng:optional><rng:attribute name="readonly"/></rng:optional>
714             <rng:optional><rng:attribute name="context"/></rng:optional>
715             <rng:optional><rng:attribute name="confirm"/></rng:optional>
716             <rng:optional><rng:attribute name="help"/></rng:optional>
717             <rng:optional><rng:attribute name="class"/></rng:optional>
718             <rng:optional><rng:attribute name="default_focus"/></rng:optional>
719             <rng:zeroOrMore>
720                 <rng:choice>
721                     <rng:ref name="form" />
722                     <rng:ref name="field" />
723                     <rng:ref name="tree" />
724                     <rng:ref name="notebook" />
725                     <rng:ref name="graph" />
726                     <rng:ref name="calendar" />
727                     <rng:ref name="gantt" />
728                     <rng:ref name="xpath" />
729                     <rng:ref name="page" />
730                     <rng:ref name="separator"/>
731                     <rng:ref name="button"/>
732                     <rng:ref name="group"/>
733                     <rng:ref name="filter"/>
734                     <rng:ref name="html"/>
735                     <rng:element name="properties"><rng:empty/></rng:element>
736                     <rng:element name="newline"><rng:empty/></rng:element>
737                 </rng:choice>
738             </rng:zeroOrMore>
739
740         </rng:element>
741     </rng:define>
742
743     <rng:define name="filter">
744         <rng:element name="filter">
745             <rng:ref name="overload"/>
746             <rng:ref name="access_rights"/>
747             <rng:ref name="modifiable"/>
748             <rng:optional><rng:attribute name="attrs"/></rng:optional>
749             <rng:optional><rng:attribute name="invisible"/></rng:optional>
750             <rng:optional><rng:attribute name="name" /></rng:optional>
751             <rng:optional><rng:attribute name="separator" /></rng:optional>
752             <rng:optional><rng:attribute name="icon" /></rng:optional>
753             <rng:optional><rng:attribute name="string" /></rng:optional>
754             <rng:optional><rng:attribute name="type" /></rng:optional>
755             <rng:optional><rng:attribute name="align" /></rng:optional>
756             <rng:optional><rng:attribute name="colspan"/></rng:optional>
757             <rng:optional><rng:attribute name="readonly"/></rng:optional>
758             <rng:optional><rng:attribute name="context"/></rng:optional>
759             <rng:optional><rng:attribute name="help"/></rng:optional>
760             <rng:optional><rng:attribute name="domain"/></rng:optional>
761             <rng:zeroOrMore>
762                 <rng:choice>
763                     <rng:ref name="form" />
764                     <rng:ref name="field" />
765                     <rng:ref name="tree" />
766                     <rng:ref name="notebook" />
767                     <rng:ref name="graph" />
768                     <rng:ref name="calendar" />
769                     <rng:ref name="gantt" />
770                     <rng:ref name="xpath" />
771                     <rng:ref name="page" />
772                     <rng:ref name="separator"/>
773                     <rng:ref name="button"/>
774                     <rng:ref name="filter"/>
775                     <rng:ref name="html"/>
776                     <rng:element name="properties"><rng:empty/></rng:element>
777                     <rng:element name="newline"><rng:empty/></rng:element>
778                 </rng:choice>
779             </rng:zeroOrMore>
780
781         </rng:element>
782     </rng:define>
783
784     <rng:start>
785         <rng:choice>
786             <rng:ref name="diagram" />
787             <rng:ref name="kanban" />
788             <rng:ref name="form" />
789             <rng:ref name="search" />
790             <rng:ref name="group" />
791             <rng:ref name="field" />
792             <rng:ref name="tree" />
793             <rng:ref name="notebook" />
794             <rng:ref name="graph" />
795             <rng:ref name="calendar" />
796             <rng:ref name="data" />
797             <rng:ref name="gantt" />
798             <rng:ref name="xpath" />
799             <rng:ref name="page" />
800             <rng:ref name="separator"/>
801             <rng:ref name="button"/>
802             <rng:ref name="filter"/>
803             <rng:ref name="label" />
804             <rng:ref name="html"/>
805         </rng:choice>
806     </rng:start>
807 </rng:grammar>