summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorYogesh (OpenERP) <ysa@tinyerp.com>2011-10-12 10:39:18 +0530
committerYogesh (OpenERP) <ysa@tinyerp.com>2011-10-12 10:39:18 +0530
commitc6d4bea1c2e9198f07eab560677c2dd52408cf2a (patch)
tree444a59b2bd04b1699897514a7b0f6fb7b7992337 /addons/web/static/src
parent80e785734759262d99d0b4f17d3dfebd5d91b526 (diff)
parent048cfa7804759c6b3fb952983451165fb319bc80 (diff)
[MERGE] Merge with trunk upto revision no 1218.
bzr revid: ysa@tinyerp.com-20111012050918-c83f2y42ocshk6e6
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/css/base.css16
-rw-r--r--addons/web/static/src/js/core.js1
-rw-r--r--addons/web/static/src/js/data.js4
-rw-r--r--addons/web/static/src/js/view_form.js81
-rw-r--r--addons/web/static/src/js/view_tree.js42
-rw-r--r--addons/web/static/src/xml/base.xml4
6 files changed, 109 insertions, 39 deletions
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index 0e2a4e94e01..a814ddbba1b 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -300,7 +300,7 @@ label.error {
text-shadow: 0 1px 0 #333;
text-align: center;
font-size: 18px;
- line-height: 14px;
+ line-height: 18px;
right: 0;
}
.openerp .secondary_menu.oe_folded .oe_toggle_secondary_menu {
@@ -325,6 +325,7 @@ label.error {
background: #5A5858;
vertical-align: top;
height: 100%;
+ display: block;
position: relative;
}
.openerp .secondary_menu.oe_folded {
@@ -721,11 +722,15 @@ label.error {
.openerp .oe-listview .oe-field-cell {
cursor: pointer;
}
+.openerp .oe-listview .oe-field-cell progress {
+ width: 100%;
+}
.openerp .oe-listview .oe-field-cell button {
+ margin: 0;
padding: 0;
border: none;
background: none;
- width: 100%;
+ width: 16px;
}
.openerp .oe-listview .oe-field-cell button:active {
opacity: 0.5;
@@ -767,6 +772,10 @@ label.error {
.openerp .oe-listview .oe-list-footer span {
margin: 0 1em;
}
+.openerp .oe-listview .oe-list-footer progress {
+ vertical-align:-10% !important;
+ width: 100%;
+}
/** list rounded corners
@@ -828,6 +837,9 @@ label.error {
}
/* Form */
+.openerp .oe_frame.oe_forms {
+ clear: both;
+}
.openerp table.oe_frame td {
color: #4c4c4c;
}
diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js
index ea1114407bb..b1708bb5826 100644
--- a/addons/web/static/src/js/core.js
+++ b/addons/web/static/src/js/core.js
@@ -74,6 +74,7 @@ openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
}
return this;
}
+ // This should NOT be used, like callbackenable it's too hackish not enough javasish
Class.include = function (properties) {
for (var name in properties) {
if (typeof properties[name] !== 'function'
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js
index 76e430dc34a..ea0824fb1df 100644
--- a/addons/web/static/src/js/data.js
+++ b/addons/web/static/src/js/data.js
@@ -639,6 +639,10 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
self.to_write.push(record);
}
var cached = _.detect(this.cache, function(x) {return x.id === id;});
+ if (!cached) {
+ cached = {id: id, values: {}};
+ this.cache.push(cached);
+ }
$.extend(cached.values, record.values);
if (dirty)
this.on_change();
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index d583088f4da..c940f4909e9 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -44,6 +44,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.translatable_fields = [];
_.defaults(this.options, {"always_show_new_button": true,
"not_interactible_on_create": false});
+ this.save_lock = $.Deferred().resolve();
},
start: function() {
this._super();
@@ -365,42 +366,45 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
*/
do_save: function(success, prepend_on_create) {
var self = this;
- if (!this.ready) {
- return $.Deferred().reject();
- }
- var form_dirty = false,
- form_invalid = false,
- values = {},
- first_invalid_field = null;
- for (var f in this.fields) {
- f = this.fields[f];
- if (!f.is_valid()) {
- form_invalid = true;
- f.update_dom();
- if (!first_invalid_field) {
- first_invalid_field = f;
+ var action = function() {
+ if (!self.ready) {
+ return $.Deferred().reject();
+ }
+ var form_dirty = false,
+ form_invalid = false,
+ values = {},
+ first_invalid_field = null;
+ for (var f in self.fields) {
+ f = self.fields[f];
+ if (!f.is_valid()) {
+ form_invalid = true;
+ f.update_dom();
+ if (!first_invalid_field) {
+ first_invalid_field = f;
+ }
+ } else if (f.is_dirty()) {
+ form_dirty = true;
+ values[f.name] = f.get_value();
}
- } else if (f.is_dirty()) {
- form_dirty = true;
- values[f.name] = f.get_value();
}
- }
- if (form_invalid) {
- first_invalid_field.focus();
- this.on_invalid();
- return $.Deferred().reject();
- } else {
- console.log("About to save", values);
- if (!this.datarecord.id) {
- return this.dataset.create(values).pipe(function(r) {
- return self.on_created(r, undefined, prepend_on_create);
- }).then(success);
+ if (form_invalid) {
+ first_invalid_field.focus();
+ self.on_invalid();
+ return $.Deferred().reject();
} else {
- return this.dataset.write(this.datarecord.id, values, {}).pipe(function(r) {
- return self.on_saved(r);
- }).then(success);
+ console.log("About to save", values);
+ if (!self.datarecord.id) {
+ return self.dataset.create(values).pipe(function(r) {
+ return self.on_created(r, undefined, prepend_on_create);
+ }).then(success);
+ } else {
+ return self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) {
+ return self.on_saved(r);
+ }).then(success);
+ }
}
- }
+ };
+ this.save_lock = this.save_lock.pipe(action, action);
},
do_save_edit: function() {
this.do_save();
@@ -756,6 +760,10 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({
var type = {};
if (node.tag == 'field') {
type = this.view.fields_view.fields[node.attrs.name] || {};
+ if (node.attrs.widget == 'statusbar') {
+ // This way we can retain backward compatibility between addons and old clients
+ node.attrs.nolabel = '1';
+ }
}
var widget = new (this.view.registry.get_any(
[node.attrs.widget, type.type, node.tag])) (this.view, node);
@@ -810,7 +818,7 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
page.id = self.pages[index].element_id;
});
this.$element.tabs();
- this.view.on_button_new.add_last(this.do_select_first_visible_tab);
+ this.view.on_button_new.add_first(this.do_select_first_visible_tab);
},
do_select_first_visible_tab: function() {
for (var i = 0; i < this.pages.length; i++) {
@@ -2490,6 +2498,9 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({
};
this.get_fields_values = view.get_fields_values;
this.do_onchange = this.on_form_changed = this.on_nop;
+ this.dataset = this.view.dataset;
+ this.widgets_counter = 0;
+ this.view_id = 'reference_' + _.uniqueId();
this.widgets = {};
this.fields = {};
this.selection = new openerp.web.form.FieldSelection(this, { attrs: {
@@ -2505,8 +2516,10 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({
on_nop: function() {
},
on_selection_changed: function() {
- this.m2o.field.relation = this.selection.get_value();
+ var sel = this.selection.get_value();
+ this.m2o.field.relation = sel;
this.m2o.set_value(null);
+ this.m2o.$element.toggle(sel !== false);
},
start: function() {
this._super();
diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js
index 7988d65805c..78818c069c0 100644
--- a/addons/web/static/src/js/view_tree.js
+++ b/addons/web/static/src/js/view_tree.js
@@ -32,6 +32,8 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView#
this.records = {};
this.options = _.extend({}, this.defaults, options || {});
+
+ _.bindAll(this, 'color_for');
},
start: function () {
@@ -107,6 +109,43 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView#
$select.change();
}
});
+
+ if (this.fields_view.arch.attrs.colors) {
+ return;
+ }
+ this.colors = _(this.fields_view.arch.attrs.colors.split(';')).chain()
+ .compact()
+ .map(function(color_pair) {
+ var pair = color_pair.split(':'),
+ color = pair[0],
+ expr = pair[1];
+ return [color, py.parse(py.tokenize(expr)), expr];
+ }).value();
+ },
+ /**
+ * Returns the color for the provided record in the current view (from the
+ * ``@colors`` attribute)
+ *
+ * @param {Object} record record for the current row
+ * @returns {String} CSS color declaration
+ */
+ color_for: function (record) {
+ if (!this.colors) { return ''; }
+ var context = _.extend({}, record, {
+ uid: this.session.uid,
+ current_date: new Date().toString('yyyy-MM-dd')
+ // TODO: time, datetime, relativedelta
+ });
+ for(var i=0, len=this.colors.length; i<len; ++i) {
+ var pair = this.colors[i],
+ color = pair[0],
+ expression = pair[1];
+ if (py.evaluate(expression, context)) {
+ return 'color: ' + color + ';';
+ }
+ // TODO: handle evaluation errors
+ }
+ return '';
},
/**
* Sets up opening a row
@@ -159,7 +198,8 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView#
'fields_view': self.fields_view.arch.children,
'fields': self.fields,
'level': $curr_node.data('level') || 0,
- 'render': openerp.web.format_value
+ 'render': openerp.web.format_value,
+ 'color_for': self.color_for
});
if ($curr_node.length) {
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 6091d0ec212..7b4baae58d0 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -539,7 +539,7 @@
<td t-foreach="fields_view" t-as="field"
t-if="!field.attrs.modifiers.tree_invisible"
t-att-data-id="record.id"
- t-att-style="!field_index ? 'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px' : undefined"
+ t-att-style="color_for(record) + (!field_index ? 'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px;' : '')"
t-att-class="!field_index and has_children ? 'treeview-tr' : 'treeview-td'">
<span t-if="!field.attrs.modifiers.invisible">
<t t-esc="render(record[field.attrs.name], fields[field.attrs.name])" />
@@ -887,7 +887,7 @@
<td t-attf-class="oe_form_frame_cell oe_form_selection #{widget.selection.element_class}">
<t t-raw="widget.selection.render()"/>
</td>
- <td class="oe_form_frame_cell oe_form_many2one #{widget.selection.element_class}" nowrap="true">
+ <td t-attf-class="oe_form_frame_cell oe_form_many2one #{widget.m2o.element_class}" nowrap="true" style="display: none">
<t t-raw="widget.m2o.render()"/>
</td>
</tr>