[KK] Kill Kittens

bzr revid: fme@openerp.com-20120315115215-02kq4flqg95zq67r
This commit is contained in:
Fabien Meghazi 2012-03-15 12:52:15 +01:00
parent aac8c23bc2
commit e59179f71f
4 changed files with 11 additions and 247 deletions

View File

@ -102,11 +102,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
var form = new openerp.web.FormRenderingEngine(this, data);
form.appendTo(this.$element.find('.oe_form_content'));
//this.root_frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch);
//var to_append = $(".oe_form_header", this.$element);
//this.root_frame.appendTo(to_append.length > 0 ? to_append : this.$element);
//this.root_frame.$element.children().unwrap();
this.$form_header = this.$element.find('.oe_form_header:first');
this.$form_header.find('div.oe_form_pager button[data-pager-action]').click(function() {
var action = $(this).data('pager-action');
@ -1105,177 +1100,6 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
}
});
openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({
form_template: 'WidgetFrame',
init: function(view, node) {
this._super(view, node);
this.columns = parseInt(node.attrs.col || 4, 10);
this.x = 0;
this.y = 0;
this.table = [];
this.add_row();
for (var i = 0; i < node.children.length; i++) {
var n = node.children[i];
if (n.tag == "newline") {
this.add_row();
} else {
this.handle_node(n);
}
}
this.set_row_cells_with(this.table[this.table.length - 1]);
},
renderElement: function() {
this._super();
var self = this;
_.each(this.table, function(row) {
_.each(row, function(td) {
td.$element = self.$element.find('.' + td.element_class);
td.renderElement();
});
});
},
start: function() {
_.each(this.table, function(row) {
_.each(row, function(td) {
td.start();
});
});
},
add_row: function(){
if (this.table.length) {
this.set_row_cells_with(this.table[this.table.length - 1]);
}
var row = [];
this.table.push(row);
this.x = 0;
this.y += 1;
return row;
},
set_row_cells_with: function(row) {
var bypass = 0,
max_width = 100,
row_length = row.length;
for (var i = 0; i < row.length; i++) {
if (row[i].always_invisible) {
row_length--;
} else {
bypass += row[i].width === undefined ? 0 : 1;
max_width -= row[i].decrease_max_width;
}
}
var size_unit = Math.round(max_width / (this.columns - bypass)),
colspan_sum = 0;
for (var i = 0; i < row.length; i++) {
var w = row[i];
if (w.always_invisible) {
continue;
}
colspan_sum += w.colspan;
if (w.width === undefined) {
var width = (i === row_length - 1 && colspan_sum === this.columns) ? max_width : Math.round(size_unit * w.colspan);
max_width -= width;
w.width = width + '%';
}
}
},
handle_node: function(node) {
var type = {};
if (node.tag == 'field') {
type = this.view.fields_view.fields[node.attrs.name] || {};
if (node.attrs.widget == 'statusbar' && node.attrs.nolabel !== '1') {
// This way we can retain backward compatibility between addons and old clients
node.attrs.colspan = (parseInt(node.attrs.colspan, 10) || 1) + 1;
node.attrs.nolabel = '1';
}
}
var widget = instanciate_widget(this.view.registry.get_any(
[node.attrs.widget, type.type, node.tag]), this.view, node);
if (node.tag == 'field') {
if (!this.view.default_focus_field || node.attrs.default_focus == '1') {
this.view.default_focus_field = widget;
}
if (node.attrs.nolabel != '1') {
var label = instanciate_widget(this.view.registry.get_object('label'), this.view, node);
label["for"] = widget;
this.add_widget(label, widget.colspan + 1);
}
}
this.add_widget(widget);
},
add_widget: function(widget, colspan) {
var current_row = this.table[this.table.length - 1];
if (!widget.always_invisible) {
colspan = colspan || widget.colspan;
if (current_row.length && (this.x + colspan) > this.columns) {
current_row = this.add_row();
}
this.x += widget.colspan;
}
current_row.push(widget);
return widget;
}
});
openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
template: 'WidgetNotebook',
init: function(view, node) {
var self = this;
this._super(view, node);
this.pages = [];
$(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);
_.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);
if (openerp.connection.debug) {
this.do_attach_tooltip(this, this.$element.find('ul:first'), {
gravity: 's'
});
}
},
do_select_first_visible_tab: function() {
for (var i = 0; i < this.pages.length; i++) {
var page = this.pages[i];
if (page.invisible === false) {
this.$element.tabs('select', page.index);
break;
}
}
}
});
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.page_id = _.uniqueId('notebook_page_');
},
start: function() {
var self = this;
this._super.apply(this, arguments);
$(this.node).children().appendTo(this.$element);
},
update_dom: function() {
if (this.invisible && this.index === this.notebook.$element.tabs('option', 'selected')) {
this.notebook.do_select_first_visible_tab();
}
this.$element_tab.toggle(!this.invisible);
this.$element.toggle(!this.invisible);
}
});
openerp.web.form.WidgetSeparator = openerp.web.form.Widget.extend({
template: 'WidgetSeparator',
init: function(view, node) {
@ -3411,42 +3235,10 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({
}
});
openerp.web.form.WidgetHtml = openerp.web.form.Widget.extend({
renderElement: function () {
var $root = $('<div class="oe_form_html_view">');
this.render_children(this, $root);
var rendered = $root.html();
this.$element.html(rendered);
},
render_children: function (object, $into) {
var self = this,
fields = this.view.fields_view.fields;
_(object.children).each(function (child) {
if (typeof child === 'string') {
$into.text(child);
} else if (child.tag === 'field') {
var widget = instanciate_widget(self.view.registry.get_object('frame'),
self.view, {tag: 'ueule', attrs: {}, children: [child] });
widget.appendTo($into);
} else {
var $child = $(document.createElement(child.tag))
.attr(child.attrs)
.appendTo($into);
self.render_children(child, $child);
}
});
}
});
/**
* Registry of form widgets, called by :js:`openerp.web.FormView`
*/
openerp.web.form.widgets = new openerp.web.Registry({
'frame' : 'openerp.web.form.WidgetFrame',
'notebook' : 'openerp.web.form.WidgetNotebook',
'notebookpage' : 'openerp.web.form.WidgetNotebookPage',
'separator' : 'openerp.web.form.WidgetSeparator',
'button' : 'openerp.web.form.WidgetButton',
'char' : 'openerp.web.form.FieldChar',
'id' : 'openerp.web.form.FieldID',
@ -3468,19 +3260,9 @@ openerp.web.form.widgets = new openerp.web.Registry({
'progressbar': 'openerp.web.form.FieldProgressBar',
'image': 'openerp.web.form.FieldBinaryImage',
'binary': 'openerp.web.form.FieldBinaryFile',
'statusbar': 'openerp.web.form.FieldStatus',
'html': 'openerp.web.form.WidgetHtml'
'statusbar': 'openerp.web.form.FieldStatus'
});
var instanciate_widget = function(claz, view, node, o1, o2) {
var widget = new (claz)(view, node, o1, o2);
widget.element_class = (['formview', view.view_id, widget.element_name,
view.widgets_counter++].join("_")).replace(/[^\r\n\f0-9A-Za-z_-]/g, "_");
view.widgets[widget.element_class] = widget;
return widget;
}
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -372,13 +372,15 @@ openerp.web.list_editable = function (openerp) {
if (!openerp.web.list.form) {
openerp.web.list.form = {};
}
openerp.web.list.form.WidgetFrame = openerp.web.form.WidgetFrame.extend({
form_template: 'ListView.row.frame'
});
// TODO: EDITABLE LIST SHOULD USE openerp.web.FormRenderingEngine
//openerp.web.list.form.WidgetFrame = openerp.web.form.WidgetFrame.extend({
// form_template: 'ListView.row.frame'
//});
var form_widgets = openerp.web.form.widgets;
openerp.web.list.form.widgets = form_widgets.extend({
'frame': 'openerp.web.list.form.WidgetFrame'
// 'frame': 'openerp.web.list.form.WidgetFrame'
});
// All form widgets inherit a problematic behavior from
// openerp.web.form.WidgetFrame: the cell itself is removed when invisible
// whether it's @invisible or @attrs[invisible]. In list view, only the

View File

@ -67,9 +67,9 @@ openerp.web.page = function (openerp) {
/** @namespace */
openerp.web.page = {};
openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
form_template: 'WidgetFrame.readonly'
});
//openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
// form_template: 'WidgetFrame.readonly'
//});
openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({
});

View File

@ -835,7 +835,7 @@
<t t-name="FormRenderingGroup">
<t t-set="table">
<table border="1" cellpadding="0" cellspacing="0" width="100%"/>
<table border="0" cellpadding="0" cellspacing="0" width="100%"/>
</t>
<t t-if="string">
<fieldset class="oe_group_box">
@ -875,26 +875,6 @@
Unhandled widget
<t t-js="dict">console.warn('Unhandled widget', dict.widget);</t>
</t>
<t t-name="WidgetFrame">
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="oe_frame oe_forms">
<tr t-foreach="widget.table" t-as="row">
<t t-foreach="row" t-as="td">
<td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
t-att-width="td.width"
t-att-valign="td.table ? 'top' : undefined"
t-attf-class="oe_form_frame_cell #{td.classname} #{td.element_class}"
>
<t t-raw="td.render()"/>
</td>
</t>
</tr>
</table>
</t>
<t t-name="WidgetFrame.readonly" t-extend="WidgetFrame">
<t t-jquery="&gt;table">
this.attr('class', this.attr('class')+' oe_form_readonly');
</t>
</t>
<t t-name="WidgetSeparator">
<div t-if="widget.orientation !== 'vertical'" t-att-class="'separator ' + widget.orientation">
<t t-esc="widget.node.attrs.string"/>