1 <?xml version="1.0" encoding="UTF-8"?>
4 <templates id="template" xml:space="preserve">
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>
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>
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>
24 <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"
25 t-att-class="'main_table' + (typeof kitten == 'undefined' ? '' : ' kitten-mode-activated')">
28 <div id="oe_header" class="header"></div>
29 <div id="oe_menu" class="menu"></div>
33 <td valign="top" id="oe_secondary_menu" class="secondary_menu">
35 <td valign="top" width="100%" height="100%">
36 <div id="oe_app" class="oe-application"></div>
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>
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"/>
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"/>
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>
68 <div class="header_corner">
69 <ul class="block" t-if="session.session_is_valid()">
71 <a href="#home" title="Home" class="home"><img src="/base/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
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>
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>
80 <a href="#about" title="About" class="about"><img src="/base/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
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>
87 <a href="#logout" class="logout">LOGOUT</a>
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>
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"/>
109 <t t-name="Menu.secondary.children">
110 <<t t-esc="header"/>>
111 <a href="#" t-attf-id="menu_#{menu.id}">
112 <span><t t-esc="menu.name"/></span>
114 </<t t-esc="header"/>>
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>
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>
132 <t t-name="ViewManager">
133 <table class="view-manager-main-table">
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]">
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]}"/>
149 <td class="view-manager-main-sidebar">
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"
161 <button type="button" id="oe-list-add"
162 t-if="options.addable">
163 <t t-esc="options.addable"/>
165 <button type="button" id="oe-list-delete"
166 t-if="options.deletable">
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"
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>
180 <button type="button" data-pager-action="next">>></button>
181 <button type="button" data-pager-action="last">Last</button>
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"/>
193 <th t-if="options.deletable"/>
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"/>
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"/>
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"/>
220 <button type="button" t-att-title="column.help"
222 <img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
223 t-att-alt="column.string"/>
228 <td t-if="options.deletable" class='oe-record-delete'>
229 <button type="button" name="delete">â™»</button>
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 & Edit</button>
238 <!--<button type="button" class="oe_form_button_cancel">Cancel</button>-->
239 <button type="button" class="oe_form_button_new">New</button>
241 <div class="oe_form_pager">
242 <button type="button" data-pager-action="first">First</button>
243 <button type="button" data-pager-action="previous"><<</button>
245 <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
247 <button type="button" data-pager-action="next">>></button>
248 <button type="button" data-pager-action="last">Last</button>
251 <t t-raw="frame.render()"/>
255 <t t-raw="console.log('Unhandled widget', widget)"/>
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))"
268 <t t-raw="td.render()"/>
274 <t t-name="WidgetNotebook">
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"/>
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()"/>
288 <t t-name="WidgetSeparator">
289 <div t-att-class="'separator ' + (widget.node.attrs.orientation || 'horizontal')">
290 <t t-esc="widget.string"/>
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>
303 <t t-name="FieldChar">
305 t-att-name="widget.name"
306 t-att-id="widget.element_id + '_field'"
307 t-att-class="'field_' + widget.type" style="width: 100%"
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"
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"
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"
331 <t t-name="FieldSelection">
333 t-att-name="widget.name"
334 t-att-id="widget.element_id + '_field'"
335 t-att-class="'field_' + widget.type"
337 <t t-foreach="widget.field.selection" t-as="options">
338 <option t-att-value="options[0]">
339 <t t-esc="options[1]"/>
344 <t t-name="FieldMany2One">
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%;"/>
351 <t t-name="FieldOne2Many">
352 <div t-att-id="widget.element_id">
356 <t t-name="FieldMany2Many">
357 <div style="background: #ccc; padding: 20px">
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"/>
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"/>
370 <t t-name="FieldProgressBar">
371 <div t-opentag="true"></div>
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>
382 <t t-name="SearchView">
383 <h2 class="oe_view_title"><t t-esc="view.attrs['string']"/></h2>
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"/>
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">
396 <td t-foreach="line" t-as="widget">
397 <t t-raw="widget.render(defaults)"/>
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"/>
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
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>
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)"/>
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>
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"/>
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)"/>
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>
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">
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]"/>
461 <option t-if="!selected" t-att-value="option[0]">
462 <t t-esc="option[1]"/>
466 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
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="#">
475 <div class="searchview_group_content">
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"/>
485 <t t-call="SearchView.render_lines"/>
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'"/>
494 <div class="searchview_extended_groups_list"/>
495 <button class="searchview_extended_add_group"
496 type="button">Add group of conditions</button>
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>
507 <button class="searchview_extended_delete_group"
508 type="button">Delete this group of conditions</button>
509 <div class="searchview_extended_propositions_list">
511 <button class="searchview_extended_add_proposition" type="button">Add condition</button>
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"/>
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>
530 <t t-name="SearchView.extended_search.proposition.char">
531 <input t-att-id="element_id"/>
533 <t t-name="ViewManager.sidebar">
534 <div t-att-id="element_id" class="sidebar-main-div open-sidebar">
538 <t t-name="ViewManager.sidebar.internal">
539 <t t-set="the_condition" t-value="sections.length > 0 && _.detect(sections, function(x)
540 {return x.elements.length > 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 > 0">
548 <h2><t t-esc="section.label"/></h2>
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"/>
557 <t t-set="i" t-value="i+1"/>
563 <t t-name="DialogWarning">
564 <div id="dialog-message" t-att-title="title">
566 <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>