[WIP] Fixed notebooks

bzr revid: fme@openerp.com-20120313193443-0gjk1wmxfe946uyz
This commit is contained in:
Fabien Meghazi 2012-03-13 20:34:43 +01:00
parent 9ce66ed4b5
commit a5be5c2438
2 changed files with 27 additions and 47 deletions

View File

@ -182,7 +182,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
// TODO: modifiers invisible. Add a special attribute, eg: data-invisible that should be used in order to create openerp.form.InvisibleWidgetG
// TODO: split registry ? tags and fields types ?
$form.find('*').each(function() {
$form.find('group,notebook,separator,label,field,button,html').each(function() {
var $elem = $(this),
key = $elem.attr('data-widget') || $elem[0].tagName.toLowerCase();
if (view.registry.contains(key)) {
@ -1200,38 +1200,23 @@ openerp.web.form.WidgetGroup = openerp.web.form.Widget.extend({
}),
openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
form_template: 'WidgetNotebook',
template: 'WidgetNotebook',
init: function(view, node) {
var self = this;
this._super(view, node);
this.pages = [];
for (var i = 0; i < node.children.length; i++) {
var n = node.children[i];
if (n.tag == "page") {
var page = instanciate_widget(this.view.registry.get_object('notebookpage'),
this.view, n, this, this.pages.length);
this.pages.push(page);
}
}
},
renderElement: function() {
this._super();
var self = this;
_.each(this.pages, function(page) {
page.$element = self.$element.find('.' + page.element_class);
page.renderElement();
});
$(node).find('> page').each(function(index) {
var page_node = this,
obj = self.view.registry.get_object('notebookpage'),
page = new (obj)(self.view, page_node, self, index);
self.pages.push(page);
});
},
start: function() {
var self = this;
this._super.apply(this, arguments);
this.$element.find('> ul > li').each(function (index, tab_li) {
var page = self.pages[index],
id = _.uniqueId(self.element_name + '-');
page.element_id = id;
$(tab_li).find('a').attr('href', '#' + id);
});
this.$element.find('> div').each(function (index, page) {
page.id = self.pages[index].element_id;
_.each(self.pages, function(page) {
page.appendTo(self.$element);
});
this.$element.tabs();
this.view.on_button_new.add_first(this.do_select_first_visible_tab);
@ -1240,9 +1225,6 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
gravity: 's'
});
}
_.each(this.pages, function(page) {
page.start();
});
},
do_select_first_visible_tab: function() {
for (var i = 0; i < this.pages.length; i++) {
@ -1255,18 +1237,18 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
}
});
openerp.web.form.WidgetNotebookPage = openerp.web.form.WidgetFrame.extend({
form_template: 'WidgetNotebookPage',
openerp.web.form.WidgetNotebookPage = openerp.web.form.Widget.extend({
template: 'WidgetNotebookPage',
init: function(view, node, notebook, index) {
this._super(view, node);
this.notebook = notebook;
this.index = index;
this.element_name = 'page_' + index;
this._super(view, node);
this.page_id = _.uniqueId('notebook_page_');
},
start: function() {
var self = this;
this._super.apply(this, arguments);
this.$element_tab = this.notebook.$element.find(
'> ul > li:eq(' + this.index + ')');
$(this.node).children().appendTo(this.$element);
},
update_dom: function() {
if (this.invisible && this.index === this.notebook.$element.tabs('option', 'selected')) {

View File

@ -868,17 +868,15 @@
</t>
</t>
<t t-name="WidgetNotebook">
<ul>
<li t-foreach="widget.pages" t-as="page">
<a href="#">
<t t-esc="page.string"/>
</a>
</li>
</ul>
<t t-foreach="widget.pages" t-as="page">
<div t-att-class="page.element_class">
</div>
</t>
<div class="oe_form_notebook">
<ul>
<li t-foreach="widget.pages" t-as="page">
<a t-attf-href="##{page.page_id}">
<t t-esc="page.node_attrs.string"/>
</a>
</li>
</ul>
</div>
</t>
<t t-name="WidgetNotebook.tooltip">
<t t-foreach="widget.pages" t-as="page">
@ -894,7 +892,7 @@
</t>
</t>
<t t-name="WidgetNotebookPage">
<t t-call="WidgetFrame"/>
<div class="oe_form_notebook_page" t-att-id="widget.page_id"/>
</t>
<t t-name="WidgetSeparator">
<div t-if="widget.orientation !== 'vertical'" t-att-class="'separator ' + widget.orientation">