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 <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"
22 t-att-class="'main_table' + (typeof kitten == 'undefined' ? '' : ' kitten-mode-activated')">
25 <div id="oe_header" class="header"></div>
26 <div id="oe_menu" class="menu"></div>
30 <td valign="top" id="oe_secondary_menu" class="secondary_menu">
32 <td valign="top" width="100%" height="100%">
33 <div id="oe_app" class="oe-application"></div>
38 <div id="oe_footer" class="oe_footer">
39 <p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">openerp.com</a>.</p>
50 Database: <input type="text" name="db" value="trunk"/><br/>
51 Login: <input type="text" name="login" value="admin"/><br/>
52 Password: <input type="password" name="password" value="a"/><br/>
53 <input type="submit" name="submit" value="Login"/>
57 <a href="/" class="company_logo_link">
58 <img t-att-src="typeof kitten == 'undefined' ? '/base/static/src/img/logo.png' :
59 'http://placekitten.com/g/179/46'" border="0" class="company_logo"/>
61 <h1 class="header_title" t-if="session.session_is_valid()">
62 <span class="company">$company</span> - (<span class="database">$database</span>)<br/>
63 <small class="username">$username session_id: <t t-esc="session.session_id"/></small>
65 <div class="header_corner">
66 <ul class="block" t-if="session.session_is_valid()">
68 <a href="#home" title="Home" class="home"><img src="/base/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
71 <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>
73 <li class="preferences">
74 <a href="#preferences" title="Preferences" class="preferences"><img src="/base/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
77 <a href="#about" title="About" class="about"><img src="/base/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
80 <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 <a href="#logout" class="logout">LOGOUT</a>
91 <li t-foreach="data.children" t-as="menu">
92 <a href="#" t-att-data-menu="menu.id">
93 <span><t t-esc="menu.name"/></span>
98 <t t-name="Menu.secondary">
99 <div style="display: none" class="menu_accordion" t-att-data-menu-parent="menu.id">
100 <t t-foreach="menu.children" t-as="menu">
101 <t t-set="header">h3</t>
102 <t t-call="Menu.secondary.children"/>
106 <t t-name="Menu.secondary.children">
107 <<t t-esc="header"/>>
108 <a href="#" t-attf-id="menu_#{menu.id}">
109 <span><t t-esc="menu.name"/></span>
111 </<t t-esc="header"/>>
112 <div class="menu_content">
113 <t t-foreach="menu.children" t-as="menu">
114 <t t-if="!menu.children.length">
115 <a href="#" class="leaf" t-att-data-menu="menu.id">
116 <span><t t-esc="menu.name"/></span>
119 <t t-if="menu.children.length">
120 <div class="submenu_accordion">
121 <t t-call="Menu.secondary.children">
122 <t t-set="header">h4</t>
129 <t t-name="ViewManager">
130 <table class="view-manager-main-table">
132 <td class="view-manager-main-content">
133 <!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" -->
134 <div class="oe_vm_switch">
135 <t t-foreach="views" t-as="view">
136 <button type="button" t-att-data-view-type="view[1]">
141 <div t-attf-id="#{prefix}_search" t-opentag="true"/>
142 <t t-foreach="views" t-as="view">
143 <div t-attf-id="#{prefix}_view_#{view[1]}"/>
146 <td class="view-manager-main-sidebar">
151 <table t-name="ListView">
152 <t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
153 <t t-set="actions_span" t-value="Math.floor((options.deletable or options.addable) ? columns_count/2 : 0)"/>
154 <thead class="ui-widget-header">
155 <tr t-if="options.selectable">
156 <th t-if="actions_span" t-att-colspan="actions_span"
158 <button type="button" id="oe-list-add"
159 t-if="options.addable">
160 <t t-esc="options.addable"/>
162 <button type="button" id="oe-list-delete"
163 t-if="options.deletable">
167 <th t-att-colspan="columns_count - actions_span"
168 class="oe-list-pager">
169 <button type="button" data-pager-action="first">First</button>
170 <button type="button" data-pager-action="previous"
173 <span class="oe-pager-first">1</span>
174 to <span class="oe-pager-last">1</span>
175 of <span class="oe-pager-total">1</span>
177 <button type="button" data-pager-action="next">>></button>
178 <button type="button" data-pager-action="last">Last</button>
181 <tr t-if="options.header">
182 <th t-if="options.selectable"/>
183 <t t-foreach="columns" t-as="column">
184 <th t-if="column.invisible !== '1'" t-att-data-id="column.id"
185 t-att-class="((options.sortable and column.tag !== 'button') ? 'oe-sortable' : null)">
186 <t t-if="column.tag !== 'button'">
187 <t t-esc="column.string"/>
188 <span t-att-class="(fields_view.sorted.field === column.id) ? ('ui-icon' + (fields_view.sorted.reversed ? ' ui-icon-triangle-1-n' : ' ui-icon-triangle-1-s')) : ''"/>
192 <th t-if="options.deletable"/>
196 <t t-name="ListView.rows" t-foreach="rows" t-as="row">
197 <t t-call="ListView.row">
198 <t t-set="style" t-value="null"/>
199 <t-if test="row.color">
200 <t t-set="style" t-value="'color: ' + row.color"/>
204 <tr t-name="ListView.row" t-att-style="style" t-att-class="row_parity">
205 <th t-if="options.selectable" class="oe-record-selector">
206 <input type="checkbox"/>
208 <t t-foreach="columns" t-as="column">
209 <t t-set="attrs" t-value="column.attrs_for(row.data)"/>
210 <td t-if="column.invisible !== '1'" t-att-title="column.help"
211 class="oe-field-cell">
212 <t t-if="!attrs.invisible">
213 <t t-set="is_button" t-value="column.tag === 'button'"/>
214 <!-- TODO: get correct widget from form -->
215 <t t-if="!is_button and row['data'][column.id].value">
216 <t t-set="value" t-value="row['data'][column.id].value"/>
217 <t t-esc="value instanceof Array ? value[1] : value"/>
219 <button type="button" t-att-title="column.help"
221 <img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
222 t-att-alt="column.string"/>
227 <td t-if="options.deletable" class='oe-record-delete'>
228 <button type="button" name="delete">â™»</button>
231 <t t-name="FormView">
232 <h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>
233 <div class="oe_form_header" t-att-id="view.element_id + '_header'">
234 <div class="oe_form_buttons">
235 <!--<button type="button" class="oe_form_button_save">Save</button>-->
236 <button type="button" class="oe_form_button_save_edit">Save & Edit</button>
237 <!--<button type="button" class="oe_form_button_cancel">Cancel</button>-->
238 <button type="button" class="oe_form_button_new">New</button>
240 <div class="oe_form_pager">
241 <button type="button" data-pager-action="first">First</button>
242 <button type="button" data-pager-action="previous"><<</button>
244 <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
246 <button type="button" data-pager-action="next">>></button>
247 <button type="button" data-pager-action="last">Last</button>
250 <t t-raw="frame.render()"/>
254 <t t-raw="console.log('Unhandled widget', widget)"/>
256 <t t-name="WidgetFrame">
257 <table border="0" width="100%" cellpadding="2" cellspacing="2" class="oe_frame">
258 <tr t-foreach="widget.table" t-as="row">
259 <t t-foreach="row" t-as="td">
260 <td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
261 t-att-width="td.width ? td.width : undefined"
262 t-att-nowrap="td.is_field_label ? 'true' : undefined"
263 t-att-valign="td.table ? 'top' : undefined"
264 t-att-id="td.element_id"
265 t-att-class="'oe_form_' + (td.is_field_label ? 'label' : (td.field ? 'field_' + td.type : td.type))"
267 <t t-raw="td.render()"/>
273 <t t-name="WidgetNotebook">
275 <li t-foreach="widget.pages" t-as="page">
276 <a t-att-href="'#' + widget.element_id + '-' + page_index">
277 <t t-esc="page.string"/>
281 <t t-foreach="widget.pages" t-as="page">
282 <div t-att-id="widget.element_id + '-' + page_index">
283 <t t-raw="page.render()"/>
287 <t t-name="WidgetSeparator">
288 <div t-att-class="'separator ' + (widget.node.attrs.orientation || 'horizontal')">
289 <t t-esc="widget.string"/>
292 <t t-name="WidgetLabel">
293 <label t-att-for="widget.element_id + '_field'"
294 t-att-class="'oe_form_label' + (widget.help ? '_help' : '')"
295 t-att-title="widget.help"
296 t-att-ondblclick="'console.log(\'' + widget.element_id + '\', openerp.screen.' + widget.element_id + ')'">
297 <t t-esc="widget.string"/>
298 <span t-if="widget.help">?</span>
299 <t t-if="widget.string and widget.node.tag != 'label'">:</t>
302 <t t-name="FieldChar">
304 t-att-name="widget.name"
305 t-att-id="widget.element_id + '_field'"
306 t-att-class="'field_' + widget.type" style="width: 100%"
309 <t t-name="FieldText">
310 <textarea rows="6" style="width: 100%;"
311 t-att-name="widget.name"
312 t-att-id="widget.element_id + '_field'"
313 t-att-class="'field_' + widget.type"
316 <t t-name="FieldDate">
317 <input type="text" style="width: 100%"
318 t-att-name="widget.name"
319 t-att-id="widget.element_id + '_field'"
320 t-att-class="'field_' + widget.type"
323 <t t-name="FieldDatetime">
324 <input type="text" style="width: 100%"
325 t-att-name="widget.name"
326 t-att-id="widget.element_id + '_field'"
327 t-att-class="'field_' + widget.type"
330 <t t-name="FieldSelection">
332 t-att-name="widget.name"
333 t-att-id="widget.element_id + '_field'"
334 t-att-class="'field_' + widget.type"
336 <t t-foreach="widget.field.selection" t-as="options">
337 <option t-att-value="options[0]">
338 <t t-esc="options[1]"/>
343 <t t-name="FieldMany2One">
345 t-att-name="widget.name"
346 t-att-id="widget.element_id + '_field'"
347 t-att-class="'field_' + widget.type"
348 style="width: 100%;"/>
350 <t t-name="FieldOne2Many">
351 <div t-att-id="widget.element_id">
355 <t t-name="FieldMany2Many">
356 <div t-att-id="widget.list_id"></div>
358 <t t-name="FieldReference">
359 <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"/>
361 <t t-name="FieldBoolean">
362 <input type="checkbox"
363 t-att-name="widget.name"
364 t-att-id="widget.element_id + '_field'"
365 t-att-class="'field_' + widget.type"/>
367 <t t-name="FieldProgressBar">
368 <div t-opentag="true"></div>
370 <t t-name="WidgetButton">
371 <button type="button"
372 t-att-id="widget.element_id + '_button'"
373 t-att-title="widget.help"
374 style="width: 100%" class="button">
375 <img t-if="widget.node.attrs.icon" t-att-src="'/base/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
376 <span t-if="widget.string"><t t-esc="widget.string"/></span>
379 <t t-name="SearchView">
380 <h2 class="oe_view_title"><t t-esc="view.attrs['string']"/></h2>
382 <t t-call="SearchView.render_lines"/>
383 <div style="text-align:right;">
384 <input type="submit" value="Search"/>
385 <input type="reset" value="Clear"/>
389 <t t-name="SearchView.render_lines">
390 <table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
391 t-foreach="lines" t-as="line">
393 <td t-foreach="line" t-as="widget">
394 <t t-raw="widget.render(defaults)"/>
399 <button t-name="SearchView.filter" type="button"
400 t-att-id="element_id"
401 t-att-title="attrs.help"
402 t-att-class="classes.join(' ')"
403 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
404 <img t-if="attrs.icon" t-att-src="'/base/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
405 <br t-if="attrs.icon and attrs.string"/>
406 <t t-esc="attrs.string"/>
408 <span t-name="SearchView.filters" class="filter_label_group"
409 ><t t-foreach="filters" t-as="filter"
410 ><t t-raw="filter.render(defaults)"/></t
412 <t t-name="SearchView.field">
413 <label style="display: block" t-att-title="attrs.help"
414 t-att-for="element_id">
415 <t t-esc="attrs.string || attrs.name"/>
416 <span t-if="attrs.help">(?)</span>
418 <div style="white-space: nowrap;">
419 <input type="text" t-att-name="attrs.name"
420 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"
421 t-att-id="element_id"
422 t-att-value="defaults[attrs.name] || ''"/>
423 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
426 <t t-name="SearchView.fields.date">
427 <label style="display: block" t-att-title="attrs.help"
428 t-att-for="element_id">
429 <t t-esc="attrs.string || attrs.name"/>
430 <span t-if="attrs.help">(?)</span>
432 <div style="white-space: nowrap;" t-att-id="element_id">
433 <input t-att-name="attrs.name" type="text" class="field_date"
434 t-att-value="defaults[attrs.name] || ''"
435 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"/>
437 <input t-att-name="attrs.name" type="text" class="field_date"
438 t-att-value="defaults[attrs.name] || ''"/>
439 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
442 <t t-name="SearchView.field.selection">
443 <label style="display: block" t-att-title="attrs.help"
444 t-att-for="element_id">
445 <t t-esc="attrs.string || attrs.name"/>
446 <span t-if="attrs.help">(?)</span>
448 <div style="white-space: nowrap;">
449 <select t-att-name="attrs.name" t-att-id="element_id"
450 t-att-autofocus="attrs.default_focus === '1' || undefined">
452 <t t-foreach="attrs.selection" t-as="option">
453 <t t-set="selected" t-value="defaults[attrs.name] === option[0]"/>
454 <option t-if="selected"
455 t-att-value="option[0]" selected="selected">
456 <t t-esc="option[1]"/>
458 <option t-if="!selected" t-att-value="option[0]">
459 <t t-esc="option[1]"/>
463 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
466 <t t-name="SearchView.util.expand">
467 <div t-att-class="'searchview_group ' + (expand == '0' ? 'folded' : 'expanded')"
468 t-att-id="element_id">
469 <a t-if="label" class="searchview_group_string" href="#">
472 <div class="searchview_group_content">
477 <t t-name="SearchView.group">
478 <t t-call="SearchView.util.expand">
479 <t t-set="expand" t-value="attrs.expand"/>
480 <t t-set="label" t-value="attrs.string"/>
482 <t t-call="SearchView.render_lines"/>
486 <t t-name="SearchView.extended_search">
487 <t t-call="SearchView.util.expand">
488 <t t-set="expand" t-value="false"/>
489 <t t-set="label" t-value="'Custom Filters'"/>
491 <div class="searchview_extended_groups_list"/>
492 <button class="searchview_extended_add_group"
493 type="button">Add group of conditions</button>
497 <t t-name="SearchView.extended_search.group">
498 <div t-att-id="element_id" class="searchview_extended_group">
499 <select class="searchview_extended_group_choice">
500 <option value="all">All the following conditions must match</option>
501 <option value="any">Any of the following conditions must match</option>
502 <option value="none">None of the following conditions must match</option>
504 <button class="searchview_extended_delete_group"
505 type="button">Delete this group of conditions</button>
506 <div class="searchview_extended_propositions_list">
508 <button class="searchview_extended_add_proposition" type="button">Add condition</button>
511 <t t-name="SearchView.extended_search.proposition">
512 <div t-att-id="element_id">
513 <select class="searchview_extended_prop_field">
514 <t t-foreach="attrs.fields" t-as="field">
515 <option t-att="{'selected': field === attrs.selected ? 'selected' : null}"
516 t-att-value="field.name">
517 <t t-esc="field.string"/>
521 <select class="searchview_extended_prop_op"/>
522 <span class="searchview_extended_prop_value"/>
523 <button class="searchview_extended_delete_prop"
524 type="button">Delete this condition</button>
527 <t t-name="SearchView.extended_search.proposition.char">
528 <input t-att-id="element_id"/>
530 <t t-name="ViewManager.sidebar">
531 <div t-att-id="element_id" class="sidebar-main-div open-sidebar">
535 <t t-name="ViewManager.sidebar.internal">
537 d.the_condition = d.sections.length > 0 && d._.detect(d.sections, function(x) {
538 return x.elements.length > 0;
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>