diff options
| author | Yogesh (OpenERP) <ysa@tinyerp.com> | 2011-10-12 10:39:18 +0530 |
|---|---|---|
| committer | Yogesh (OpenERP) <ysa@tinyerp.com> | 2011-10-12 10:39:18 +0530 |
| commit | c6d4bea1c2e9198f07eab560677c2dd52408cf2a (patch) | |
| tree | 444a59b2bd04b1699897514a7b0f6fb7b7992337 /addons/web/static/src | |
| parent | 80e785734759262d99d0b4f17d3dfebd5d91b526 (diff) | |
| parent | 048cfa7804759c6b3fb952983451165fb319bc80 (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.css | 16 | ||||
| -rw-r--r-- | addons/web/static/src/js/core.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/data.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 81 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_tree.js | 42 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 4 |
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> |
