1221c8110390e443385c5f4690af4de38365bd3f
[odoo/odoo.git] / addons / base / static / src / xml / base.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- vim:fdl=1:
3 -->
4 <templates id="template" xml:space="preserve">
5 <t t-name="Interface">
6     <div id="oe_loading" class="loading"></div>
7     <div id="oe_notification" class="oe_notification">
8         <div id="oe_notification_default">
9             <a class="ui-notify-cross ui-notify-close" href="#">x</a>
10             <h1>#{title}</h1>
11             <p>#{text}</p>
12         </div>
13         <div id="oe_notification_alert" class="ui-state-error">
14             <a class="ui-notify-cross ui-notify-close" href="#">x</a>
15             <span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-alert"></span>
16             <h1>#{title}</h1>
17             <p>#{text}</p>
18         </div>
19     </div>
20     <div id="oe_login" class="login"></div>
21     <div style="position: absolute; right: 2px; top: 38px;">
22         <button onclick="QWeb.add_template('base.xml'); $('body').css('background-color', '#FFFF9C'); setTimeout(function() { $('body').css('background-color', '#FFF'); }, 500);">Reload QWEB</button>
23     </div>
24     <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"
25         t-att-class="'main_table' + (typeof kitten == 'undefined' ? '' : ' kitten-mode-activated')">
26     <tr>
27         <td colspan="2">
28             <div id="oe_header" class="header"></div>
29             <div id="oe_menu" class="menu"></div>
30         </td>
31     </tr>
32     <tr>
33         <td valign="top" id="oe_secondary_menu" class="secondary_menu">
34         </td>
35         <td valign="top" width="100%" height="100%">
36             <div id="oe_app" class="oe-application"></div>
37         </td>
38     </tr>
39     <tr>
40         <td colspan="2">
41             <div id="oe_footer" class="oe_footer">
42                 <p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">openerp.com</a>.</p>
43             </div>
44         </td>
45     </tr>
46     </table>
47 </t>
48 <t t-name="Loading">
49     Loading...
50 </t>
51 <t t-name="Login">
52     <form>
53         Database: <input type="text" name="db" value="trunk"/><br/>
54         Login: <input type="text" name="login" value="admin"/><br/>
55         Password: <input type="password" name="password" value="a"/><br/>
56         <input type="submit" name="submit" value="Login"/>
57     </form>
58 </t>
59 <t t-name="Header">
60     <a href="/" class="company_logo_link">
61         <img t-att-src="typeof kitten == 'undefined' ? '/base/static/src/img/logo.png' :
62             'http://placekitten.com/g/179/46'" border="0" class="company_logo"/>
63     </a>
64     <h1 class="header_title" t-if="session.session_is_valid()">
65         <span class="company">$company</span> - (<span class="database">$database</span>)<br/>
66         <small class="username">$username session_id: <t t-esc="session.session_id"/></small>
67     </h1>
68     <div class="header_corner">
69         <ul class="block" t-if="session.session_is_valid()">
70             <li>
71                 <a href="#home" title="Home" class="home"><img src="/base/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
72             </li>
73             <li>
74                 <a href="#requests" title="Requests" class="requests"><img src="/base/static/src/img/header-requests.png" width="16" height="16" border="0"/><small>1</small></a>
75             </li>
76             <li class="preferences">
77                 <a href="#preferences" title="Preferences" class="preferences"><img src="/base/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
78             </li>
79             <li>
80                 <a href="#about" title="About" class="about"><img src="/base/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
81             </li>
82             <li>
83                 <a href="http://doc.openerp.com/v6.0/book?version=$version" title="Help" target="_blank" class="help"><img src="/base/static/src/img/header-help.png" width="16" height="16" border="0"/></a>
84             </li>
85         </ul>
86         <div class="block">
87             <a href="#logout" class="logout">LOGOUT</a>
88         </div>
89
90     </div>
91 </t>
92 <t t-name="Menu">
93     <ul>
94         <li t-foreach="data.children" t-as="menu">
95             <a href="#" t-att-data-menu="menu.id">
96                 <span><t t-esc="menu.name"/></span>
97             </a>
98         </li>
99     </ul>
100 </t>
101 <t t-name="Menu.secondary">
102     <div style="display: none" class="menu_accordion" t-att-data-menu-parent="menu.id">
103         <t t-foreach="menu.children" t-as="menu">
104             <t t-set="header">h3</t>
105             <t t-call="Menu.secondary.children"/>
106         </t>
107     </div>
108 </t>
109 <t t-name="Menu.secondary.children">
110     &lt;<t t-esc="header"/>&gt;
111         <a href="#" t-attf-id="menu_#{menu.id}">
112             <span><t t-esc="menu.name"/></span>
113         </a>
114     &lt;/<t t-esc="header"/>&gt;
115     <div class="menu_content">
116         <t t-foreach="menu.children" t-as="menu">
117             <t t-if="!menu.children.length">
118                 <a href="#" class="leaf" t-att-data-menu="menu.id">
119                     <span><t t-esc="menu.name"/></span>
120                 </a>
121             </t>
122             <t t-if="menu.children.length">
123                 <div class="submenu_accordion">
124                     <t t-call="Menu.secondary.children">
125                         <t t-set="header">h4</t>
126                     </t>
127                 </div>
128             </t>
129         </t>
130     </div>
131 </t>
132 <t t-name="ViewManager">
133     <table class="view-manager-main-table">
134     <tr>
135         <td class="view-manager-main-content">
136             <!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" -->
137             <div class="oe_vm_switch">
138                 <t t-foreach="views" t-as="view">
139                     <button type="button" t-att-data-view-type="view[1]">
140                         <t t-esc="view[1]"/>
141                     </button>
142                 </t>
143             </div>
144             <div t-attf-id="#{prefix}_search" t-opentag="true"/>
145             <t t-foreach="views" t-as="view">
146                 <div t-attf-id="#{prefix}_view_#{view[1]}"/>
147             </t>
148         </td>
149         <td class="view-manager-main-sidebar">
150         </td>
151     </tr>
152     </table>
153 </t>
154 <table t-name="ListView">
155     <t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
156     <t t-set="actions_span" t-value="Math.floor((options.deletable or options.addable) ? columns_count/2 : 0)"/>
157     <thead class="ui-widget-header">
158         <tr t-if="options.selectable">
159             <th t-if="actions_span" t-att-colspan="actions_span"
160                 class="oe-actions">
161                 <button type="button" id="oe-list-add"
162                         t-if="options.addable">
163                     <t t-esc="options.addable"/>
164                 </button>
165                 <button type="button" id="oe-list-delete"
166                         t-if="options.deletable">
167                     Delete
168                 </button>
169             </th>
170             <th t-att-colspan="columns_count - actions_span"
171                 class="oe-list-pager">
172                 <button type="button" data-pager-action="first">First</button>
173                 <button type="button" data-pager-action="previous"
174                         >&lt;&lt;</button>
175
176                 <span class="oe-pager-first">1</span>
177                 to <span class="oe-pager-last">1</span>
178                 of <span class="oe-pager-total">1</span>
179
180                 <button type="button" data-pager-action="next">&gt;&gt;</button>
181                 <button type="button" data-pager-action="last">Last</button>
182             </th>
183         </tr>
184         <tr t-if="options.header">
185             <th t-if="options.selectable"/>
186             <t t-foreach="columns" t-as="column">
187                 <th t-if="column.invisible !== '1'">
188                     <t t-if="column.tag !== 'button'">
189                         <t t-esc="column.string"/>
190                     </t>
191                 </th>
192             </t>
193             <th t-if="options.deletable"/>
194         </tr>
195     </thead>
196 </table>
197 <t t-name="ListView.rows" t-foreach="rows" t-as="row">
198     <t t-call="ListView.row">
199         <t t-set="style" t-value="null"/>
200         <t-if test="row.color">
201             <t t-set="style" t-value="'color: ' + row.color"/>
202         </t-if>
203     </t>
204 </t>
205 <tr t-name="ListView.row" t-att-style="style" t-att-class="row_parity">
206     <th t-if="options.selectable" class="oe-record-selector">
207         <input type="checkbox"/>
208     </th>
209     <t t-foreach="columns" t-as="column">
210         <t t-set="attrs" t-value="column.attrs_for(row.data)"/>
211         <td t-if="column.invisible !== '1'" t-att-title="column.help"
212             class="oe-field-cell">
213             <t t-if="!attrs.invisible">
214                 <t t-set="is_button" t-value="column.tag === 'button'"/>
215                 <!-- TODO: get correct widget from form -->
216                 <t t-if="!is_button and row['data'][column.id].value">
217                     <t t-set="value" t-value="row['data'][column.id].value"/>
218                     <t t-esc="value instanceof Array ? value[1] : value"/>
219                 </t>
220                 <button type="button" t-att-title="column.help"
221                         t-if="is_button">
222                     <img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
223                          t-att-alt="column.string"/>
224                 </button>
225             </t>
226         </td>
227     </t>
228     <td t-if="options.deletable" class='oe-record-delete'>
229         <button type="button" name="delete">â™»</button>
230     </td>
231 </tr>
232 <t t-name="FormView">
233     <h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>
234     <div class="oe_form_header" t-att-id="view.element_id + '_header'">
235         <div class="oe_form_buttons">
236             <!--<button type="button" class="oe_form_button_save">Save</button>-->
237             <button type="button" class="oe_form_button_save_edit">Save &amp; Edit</button>
238             <!--<button type="button" class="oe_form_button_cancel">Cancel</button>-->
239             <button type="button" class="oe_form_button_new">New</button>
240         </div>
241         <div class="oe_form_pager">
242             <button type="button" data-pager-action="first">First</button>
243             <button type="button" data-pager-action="previous">&lt;&lt;</button>
244
245             <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
246
247             <button type="button" data-pager-action="next">&gt;&gt;</button>
248             <button type="button" data-pager-action="last">Last</button>
249         </div>
250     </div>
251     <t t-raw="frame.render()"/>
252 </t>
253 <t t-name="Widget">
254     Unhandled widget
255     <t t-raw="console.log('Unhandled widget', widget)"/>
256 </t>
257 <t t-name="WidgetFrame">
258     <table border="0" width="100%" cellpadding="2" cellspacing="2" class="oe_frame">
259     <tr t-foreach="widget.table" t-as="row">
260         <t t-foreach="row" t-as="td">
261             <td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
262                 t-att-width="td.width ? td.width : undefined"
263                 t-att-nowrap="td.is_field_label ? 'true' : undefined"
264                 t-att-valign="td.table ? 'top' : undefined"
265                 t-att-id="td.element_id"
266                 t-att-class="'oe_form_' + (td.is_field_label ? 'label' : (td.field ? 'field_' + td.type : td.type))"
267             >
268                 <t t-raw="td.render()"/>
269             </td>
270         </t>
271     </tr>
272     </table>
273 </t>
274 <t t-name="WidgetNotebook">
275     <ul>
276         <li t-foreach="widget.pages" t-as="page">
277             <a t-att-href="'#' + widget.element_id + '-' + page_index">
278                 <t t-esc="page.string"/>
279             </a>
280         </li>
281     </ul>
282     <t t-foreach="widget.pages" t-as="page">
283         <div t-att-id="widget.element_id + '-' + page_index">
284             <t t-raw="page.render()"/>
285         </div>
286     </t>
287 </t>
288 <t t-name="WidgetSeparator">
289     <div t-att-class="'separator ' + (widget.node.attrs.orientation || 'horizontal')">
290         <t t-esc="widget.string"/>
291     </div>
292 </t>
293 <t t-name="WidgetLabel">
294     <label t-att-for="widget.element_id + '_field'"
295            t-att-class="'oe_form_label' + (widget.help ? '_help' : '')"
296            t-att-title="widget.help"
297            t-att-ondblclick="'console.log(\'' + widget.element_id + '\', openerp.screen.' + widget.element_id + ')'">
298         <t t-esc="widget.string"/>
299         <span t-if="widget.help">?</span>
300         <t t-if="widget.string">:</t>
301     </label>
302 </t>
303 <t t-name="FieldChar">
304     <input type="text"
305         t-att-name="widget.name"
306         t-att-id="widget.element_id + '_field'"
307         t-att-class="'field_' + widget.type" style="width: 100%"
308     />
309 </t>
310 <t t-name="FieldText">
311     <textarea rows="6" style="width: 100%;"
312         t-att-name="widget.name"
313         t-att-id="widget.element_id + '_field'"
314         t-att-class="'field_' + widget.type"
315     ></textarea>
316 </t>
317 <t t-name="FieldDate">
318     <input type="text" style="width: 100%"
319         t-att-name="widget.name"
320         t-att-id="widget.element_id + '_field'"
321         t-att-class="'field_' + widget.type"
322     />
323 </t>
324 <t t-name="FieldDatetime">
325     <input type="text" style="width: 100%"
326         t-att-name="widget.name"
327         t-att-id="widget.element_id + '_field'"
328         t-att-class="'field_' + widget.type"
329     />
330 </t>
331 <t t-name="FieldSelection">
332     <select
333         t-att-name="widget.name"
334         t-att-id="widget.element_id + '_field'"
335         t-att-class="'field_' + widget.type"
336         style="width: 100%">
337             <t t-foreach="widget.field.selection" t-as="options">
338                 <option t-att-value="options[0]">
339                     <t t-esc="options[1]"/>
340                 </option>
341             </t>
342     </select>
343 </t>
344 <t t-name="FieldMany2One">
345     <input type="text"
346         t-att-name="widget.name"
347         t-att-id="widget.element_id + '_field'"
348         t-att-class="'field_' + widget.type"
349         style="width: 100%;"/>
350 </t>
351 <t t-name="FieldOne2Many">
352     <div t-att-id="widget.element_id">
353         One2Many widget
354     </div>
355 </t>
356 <t t-name="FieldMany2Many">
357     <div style="background: #ccc; padding: 20px">
358         Many2Many widget
359     </div>
360 </t>
361 <t t-name="FieldReference">
362     <input type="text" t-att-name="widget.name" t-att-id="widget.element_id" t-att-class="'field_' + widget.type" style="width: 100%" placeholder="Widget Reference"/>
363 </t>
364 <t t-name="FieldBoolean">
365     <input type="checkbox"
366         t-att-name="widget.name"
367         t-att-id="widget.element_id + '_field'"
368         t-att-class="'field_' + widget.type"/>
369 </t>
370 <t t-name="FieldProgressBar">
371     <div t-opentag="true"></div>
372 </t>
373 <t t-name="WidgetButton">
374     <button type="button"
375         t-att-id="widget.element_id + '_button'"
376         t-att-title="widget.help"
377         style="width: 100%" class="button">
378         <img t-if="widget.node.attrs.icon" t-att-src="'/base/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
379         <span t-if="widget.string"><t t-esc="widget.string"/></span>
380     </button>
381 </t>
382 <t t-name="SearchView">
383     <h2 class="oe_view_title"><t t-esc="view.attrs['string']"/></h2>
384     <form>
385         <t t-call="SearchView.render_lines"/>
386         <div style="text-align:right;">
387             <input type="submit" value="Search"/>
388             <input type="reset" value="Clear"/>
389         </div>
390     </form>
391 </t>
392 <t t-name="SearchView.render_lines">
393     <table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
394            t-foreach="lines" t-as="line">
395         <tr>
396             <td t-foreach="line" t-as="widget">
397                 <t t-raw="widget.render(defaults)"/>
398             </td>
399         </tr>
400     </table>
401 </t>
402 <button t-name="SearchView.filter" type="button"
403         t-att-id="element_id"
404         t-att-title="attrs.help"
405         t-att-class="classes.join(' ')"
406         t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
407     <img t-if="attrs.icon" t-att-src="'/base/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
408     <br t-if="attrs.icon and attrs.string"/>
409     <t t-esc="attrs.string"/>
410 </button>
411 <span t-name="SearchView.filters" class="filter_label_group"
412     ><t t-foreach="filters" t-as="filter"
413         ><t t-raw="filter.render(defaults)"/></t
414 ></span>
415 <t t-name="SearchView.field">
416     <label style="display: block" t-att-title="attrs.help"
417            t-att-for="element_id">
418         <t t-esc="attrs.string || attrs.name"/>
419         <span t-if="attrs.help">(?)</span>
420     </label>
421     <div style="white-space: nowrap;">
422         <input type="text" t-att-name="attrs.name"
423                t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"
424                t-att-id="element_id"
425                t-att-value="defaults[attrs.name] || ''"/>
426         <t t-if="filters.length" t-raw="filters.render(defaults)"/>
427     </div>
428 </t>
429 <t t-name="SearchView.fields.date">
430     <label style="display: block" t-att-title="attrs.help"
431            t-att-for="element_id">
432         <t t-esc="attrs.string || attrs.name"/>
433         <span t-if="attrs.help">(?)</span>
434     </label>
435     <div style="white-space: nowrap;" t-att-id="element_id">
436         <input t-att-name="attrs.name" type="text" class="field_date"
437                t-att-value="defaults[attrs.name] || ''"
438                t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"/>
439         to
440         <input t-att-name="attrs.name" type="text" class="field_date"
441                t-att-value="defaults[attrs.name] || ''"/>
442         <t t-if="filters.length" t-raw="filters.render(defaults)"/>
443     </div>
444 </t>
445 <t t-name="SearchView.field.selection">
446     <label style="display: block" t-att-title="attrs.help"
447            t-att-for="element_id">
448         <t t-esc="attrs.string || attrs.name"/>
449         <span t-if="attrs.help">(?)</span>
450     </label>
451     <div style="white-space: nowrap;">
452         <select t-att-name="attrs.name" t-att-id="element_id"
453                 t-att-autofocus="attrs.default_focus === '1' || undefined">
454             <option/>
455             <t t-foreach="attrs.selection" t-as="option">
456                 <t t-set="selected" t-value="defaults[attrs.name] === option[0]"/>
457                 <option t-if="selected"
458                         t-att-value="option[0]" selected="selected">
459                     <t t-esc="option[1]"/>
460                 </option>
461                 <option t-if="!selected" t-att-value="option[0]">
462                     <t t-esc="option[1]"/>
463                 </option>
464             </t>
465         </select>
466         <t t-if="filters.length" t-raw="filters.render(defaults)"/>
467     </div>
468 </t>
469 <t t-name="SearchView.util.expand">
470     <div t-att-class="'searchview_group ' + (expand == '0' ? 'folded' : 'expanded')"
471          t-att-id="element_id">
472         <a t-if="label" class="searchview_group_string" href="#">
473             <t t-esc="label"/>
474         </a>
475         <div class="searchview_group_content">
476             <t t-raw="content"/>
477         </div>
478     </div>
479 </t>
480 <t t-name="SearchView.group">
481     <t t-call="SearchView.util.expand">
482         <t t-set="expand" t-value="attrs.expand"/>
483         <t t-set="label" t-value="attrs.string"/>
484         <t t-set="content">
485             <t t-call="SearchView.render_lines"/>
486         </t>
487     </t>
488 </t>
489 <t t-name="SearchView.extended_search">
490     <t t-call="SearchView.util.expand">
491         <t t-set="expand" t-value="false"/>
492         <t t-set="label" t-value="'Custom Filters'"/>
493         <t t-set="content">
494             <div class="searchview_extended_groups_list"/>
495             <button class="searchview_extended_add_group"
496                     type="button">Add group of conditions</button>
497         </t>
498     </t>
499 </t>
500 <t t-name="SearchView.extended_search.group">
501     <div t-att-id="element_id" class="searchview_extended_group">
502         <select class="searchview_extended_group_choice">
503             <option value="all">All the following conditions must match</option>
504             <option value="any">Any of the following conditions must match</option>
505             <option value="none">None of the following conditions must match</option>
506         </select>
507         <button class="searchview_extended_delete_group"
508                 type="button">Delete this group of conditions</button>
509         <div class="searchview_extended_propositions_list">
510         </div>
511         <button class="searchview_extended_add_proposition" type="button">Add condition</button>
512     </div>
513 </t>
514 <t t-name="SearchView.extended_search.proposition">
515     <div t-att-id="element_id">
516         <select class="searchview_extended_prop_field">
517             <t t-foreach="attrs.fields" t-as="field">
518                 <option t-att="{'selected': field === attrs.selected ? 'selected' : null}"
519                         t-att-value="field.name">
520                     <t t-esc="field.string"/>
521                 </option>
522             </t>
523         </select>
524         <select class="searchview_extended_prop_op"/>
525         <span class="searchview_extended_prop_value"/>
526         <button class="searchview_extended_delete_prop"
527                 type="button">Delete this condition</button>
528     </div>
529 </t>
530 <t t-name="SearchView.extended_search.proposition.char">
531     <input t-att-id="element_id"/>
532 </t>
533 <t t-name="ViewManager.sidebar">
534     <div t-att-id="element_id" class="sidebar-main-div open-sidebar">
535
536     </div>
537 </t>
538 <t t-name="ViewManager.sidebar.internal">
539     <t t-set="the_condition" t-value="sections.length &gt; 0 &amp;&amp; _.detect(sections, function(x)
540         {return x.elements.length &gt; 0;}) != undefined"/>
541     <t t-if="the_condition">
542         <a class="toggle-sidebar"></a>
543         <div t-att-id="element_id" class="sidebar-sub-div">
544             <div class="sidebar-displaying-div">
545                 <t t-set="i" t-value="0"/>
546                 <t t-foreach="sections" t-as="section">
547                     <t t-if="section.elements.length &gt; 0">
548                     <h2><t t-esc="section.label"/></h2>
549                     <ul>
550                         <t t-set="j" t-value="0"/>
551                         <t t-foreach="section.elements" t-as="element">
552                             <li><a t-att-data-i="i" t-att-data-j="j" href="#"><t t-esc="element.name"/></a></li>
553                             <t t-set="j" t-value="j+1"/>
554                         </t>
555                     </ul>
556                     </t>
557                     <t t-set="i" t-value="i+1"/>
558                 </t>
559             </div>
560         </div>
561     </t>
562 </t>
563 <t t-name="DialogWarning">
564     <div id="dialog-message" t-att-title="title">
565         <p>
566             <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
567             <t t-esc="message"/>
568         </p>
569     </div>
570 </t>
571 </templates>