summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorVaibhav (OpenERP) <vda@tinyerp.com>2011-06-22 10:53:59 +0530
committerVaibhav (OpenERP) <vda@tinyerp.com>2011-06-22 10:53:59 +0530
commit30d315dfd95bccc1fb91c2fea9d7a31cf86ab6bf (patch)
tree1d46c6a5e1c86fe051c19139014fa402d49f02ea /addons/base/static/src
parent68fdbd29122f085e128d9d93e3ea53ef18a6a12f (diff)
parentc57a3e0d98229ed66dde92c5caad39f6bc0efdbd (diff)
[MERGE] openerp-web
bzr revid: vda@tinyerp.com-20110622052359-n3tef8f89jo22cs9
Diffstat (limited to 'addons/base/static/src')
-rw-r--r--addons/base/static/src/css/base.css30
-rw-r--r--addons/base/static/src/img/warning.pngbin0 -> 1342 bytes
-rw-r--r--addons/base/static/src/js/chrome.js110
-rw-r--r--addons/base/static/src/js/data.js5
-rw-r--r--addons/base/static/src/js/form.js17
-rw-r--r--addons/base/static/src/js/list.js2
-rw-r--r--addons/base/static/src/js/search.js34
-rw-r--r--addons/base/static/src/js/views.js24
-rw-r--r--addons/base/static/src/xml/base.xml18
9 files changed, 173 insertions, 67 deletions
diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css
index 30dc3718fa9..9749dc97110 100644
--- a/addons/base/static/src/css/base.css
+++ b/addons/base/static/src/css/base.css
@@ -547,11 +547,27 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
}
.openerp .searchview_extended_group {
- border: #696969 solid 1px;
padding: 3px;
margin: 2px;
}
+.openerp .searchview_extended_group .oe_adv_filters_and {
+ border-bottom: 1px solid #8E8E8E;
+ text-align: center;
+ margin-top: -10px;
+}
+.openerp .searchview_extended_group .oe_adv_filters_and span {
+ background: #F0EEEE;
+ position: relative;
+ top: 0.5em;
+ padding: 0 1em 0 1em;
+ color: #8E8E8E;
+}
+
+.openerp .searchview_extended_group.last_group .oe_adv_filters_and {
+ display: none;
+}
+
.openerp .oe_search-view-custom-filter-btn span {
background: url(../img/icons/gtk-add.png) repeat-y;
padding-left: 18px;
@@ -565,6 +581,7 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp .searchview_extended_delete_group {
float:right;
+ display: none;
}
.openerp .searchview_extended_delete_group span,
@@ -1042,3 +1059,14 @@ background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */
.openerp .oe-m2o-disabled-cm {
color: grey;
}
+
+.openerp .oe-dialog-warning {
+ font-size: 1.2em;
+ font-weight: bold;
+}
+.openerp .oe-dialog-warning img {
+ float: left;
+ position: relative;
+ top: -0.5em;
+ margin:0 7px 7px 0;
+}
diff --git a/addons/base/static/src/img/warning.png b/addons/base/static/src/img/warning.png
new file mode 100644
index 00000000000..cbfb25a89cd
--- /dev/null
+++ b/addons/base/static/src/img/warning.png
Binary files differ
diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js
index 84aa4acc325..2bea20fe972 100644
--- a/addons/base/static/src/js/chrome.js
+++ b/addons/base/static/src/js/chrome.js
@@ -739,36 +739,47 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({
identifier_prefix: 'dialog',
init: function (session, options) {
this._super(null, session);
- options = _.extend({
+ this.options = {
modal: true,
- title: this.dialog_title,
- width: '700px',
+ width: 'auto',
min_width: 0,
max_width: '100%',
- height: '500px',
+ height: 'auto',
min_height: 0,
max_height: '100%',
+ autoOpen: false,
buttons: {}
- }, options);
-
- options.width = this.get_width(options.width);
- options.min_width = this.get_width(options.min_width);
- options.max_width = this.get_width(options.max_width);
- options.height = this.get_height(options.height);
- options.min_height = this.get_height(options.min_height);
- options.max_height = this.get_height(options.max_height);
-
- if (options.width > options.max_width) options.width = options.max_width;
- if (options.width < options.min_width) options.width = options.min_width;
- if (options.height > options.max_height) options.height = options.max_height;
- if (options.height < options.min_height) options.height = options.min_height;
-
+ };
for (var f in this) {
if (f.substr(0, 10) == 'on_button_') {
- options.buttons[f.substr(10)] = this[f];
+ this.options.buttons[f.substr(10)] = this[f];
}
}
- this.options = options;
+ if (options) {
+ this.set_options(options);
+ }
+ },
+ set_options: function(options) {
+ options = options || {};
+ options.width = this.get_width(options.width || this.options.width);
+ options.min_width = this.get_width(options.min_width || this.options.min_width);
+ options.max_width = this.get_width(options.max_width || this.options.max_width);
+ options.height = this.get_height(options.height || this.options.height);
+ options.min_height = this.get_height(options.min_height || this.options.min_height);
+ options.max_height = this.get_height(options.max_height || this.options.max_width);
+
+ if (options.width !== 'auto') {
+ if (options.width > options.max_width) options.width = options.max_width;
+ if (options.width < options.min_width) options.width = options.min_width;
+ }
+ if (options.height !== 'auto') {
+ if (options.height > options.max_height) options.height = options.max_height;
+ if (options.height < options.min_height) options.height = options.min_height;
+ }
+ if (!options.title && this.dialog_title) {
+ options.title = this.dialog_title;
+ }
+ _.extend(this.options, options);
},
get_width: function(val) {
return this.get_size(val.toString(), $(window.top).width());
@@ -777,7 +788,7 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({
return this.get_size(val.toString(), $(window.top).height());
},
get_size: function(val, available_size) {
- if (val == 'auto') {
+ if (val === 'auto') {
return val;
} else if (val.slice(-1) == "%") {
return Math.round(available_size / 100 * parseInt(val.slice(0, -1), 10));
@@ -785,33 +796,55 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({
return parseInt(val, 10);
}
},
- start: function () {
+ start: function (auto_open) {
this.$dialog = $('<div id="' + this.element_id + '"></div>').dialog(this.options);
+ if (auto_open !== false) {
+ this.open();
+ }
this._super();
},
+ open: function(options) {
+ // TODO fme: bind window on resize
+ if (this.template) {
+ this.$element.html(this.render());
+ }
+ this.set_options(options);
+ this.$dialog.dialog(this.options).dialog('open');
+ },
+ close: function(options) {
+ this.$dialog.dialog('close');
+ },
stop: function () {
- this.$dialog("destroy").remove();
+ this.$dialog.dialog('destroy');
}
});
-openerp.base.CrashManager = openerp.base.Controller.extend({
- init: function(session, element_id) {
- this._super(session, element_id);
+openerp.base.CrashManager = openerp.base.Dialog.extend({
+ identifier_prefix: 'dialog_crash',
+ init: function(session) {
+ this._super(session);
this.session.on_rpc_error.add(this.on_rpc_error);
},
- on_rpc_error: function(error) {
- var msg = error.message + "\n" + error.data.debug;
- this.display_error(msg);
+ on_button_Ok: function() {
+ this.close();
},
- display_error: function(message) {
- $('<pre></pre>').text(message).dialog({
- modal: true,
- buttons: {
- OK: function() {
- $(this).dialog("close");
- }
- }
- });
+ on_rpc_error: function(error) {
+ this.error = error;
+ if (error.code === 200) {
+ this.dialog_title = "OpenERP Warning";
+ this.template = 'DialogWarning';
+ this.open({
+ width: 'auto',
+ height: 'auto'
+ });
+ } else {
+ this.dialog_title = "OpenERP Error";
+ this.template = 'DialogTraceback';
+ this.open({
+ width: '80%',
+ height: '80%'
+ });
+ }
}
});
@@ -1041,6 +1074,7 @@ openerp.base.WebClient = openerp.base.Controller.extend({
this.session = new openerp.base.Session("oe_errors");
this.loading = new openerp.base.Loading(this.session, "oe_loading");
this.crashmanager = new openerp.base.CrashManager(this.session);
+ this.crashmanager.start(false);
// Do you autorize this ?
openerp.base.Controller.prototype.notification = new openerp.base.Notification("oe_notification");
diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js
index 1463ca279fa..736c31c1f7b 100644
--- a/addons/base/static/src/js/data.js
+++ b/addons/base/static/src/js/data.js
@@ -287,11 +287,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
});
}
},
- default_get: function(fields, callback) {
+ default_get: function(fields, context, callback) {
+ context = context || this.context;
return this.rpc('/base/dataset/default_get', {
model: this.model,
fields: fields,
- context: this.context
+ context: context
}, callback);
},
create: function(data, callback, error_callback) {
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index 90357325928..d221872598d 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -1,4 +1,3 @@
-
openerp.base.form = function (openerp) {
openerp.base.views.add('form', 'openerp.base.FormView');
@@ -43,8 +42,12 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
if (this.embedded_view) {
return $.Deferred().then(this.on_loaded).resolve({fields_view: this.embedded_view});
} else {
+ var context = new openerp.base.CompoundContext(this.dataset.context);
+ if (this.view_manager.action && this.view_manager.action.context) {
+ context.add(this.view_manager.action.context);
+ }
return this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id,
- toolbar:!!this.flags.sidebar}, this.on_loaded);
+ toolbar:!!this.flags.sidebar, context: context}, this.on_loaded);
}
},
on_loaded: function(data) {
@@ -226,8 +229,12 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
},
on_button_new: function() {
var self = this;
+ var context = new openerp.base.CompoundContext(this.dataset.context);
+ if (this.view_manager.action && this.view_manager.action.context) {
+ context.add(this.view_manager.action.context);
+ }
$.when(this.has_been_loaded).then(function() {
- self.dataset.default_get(_.keys(self.fields_view.fields), function(result) {
+ self.dataset.default_get(_.keys(self.fields_view.fields), context, function(result) {
self.on_record_loaded(result.result);
});
});
@@ -299,6 +306,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
if (success) {
success(r);
}
+ this.reload();
}
},
/**
@@ -333,6 +341,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
if (success) {
success(_.extend(r, {created: true}));
}
+ this.reload();
}
},
do_search: function (domains, contexts, groupbys) {
@@ -995,7 +1004,7 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
if (value != null && value !== false) {
this.$element.find('select').val(value);
} else {
- this.$element.find('select')[0].selectedIndex = 0;
+ this.$element.find('select').val('false');
}
},
set_value_from_ui: function() {
diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js
index b4528de5afd..bd2518dcb66 100644
--- a/addons/base/static/src/js/list.js
+++ b/addons/base/static/src/js/list.js
@@ -571,7 +571,7 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
this.$current.remove();
}
this.$current = this.$_element.clone(true);
- this.$current.empty().append($(QWeb.render('ListView.rows', this)));
+ this.$current.empty().append(QWeb.render('ListView.rows', this));
},
get_fields_view: function () {
// deep copy of view
diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js
index 4c23f64bcbb..cd69ec4f0e8 100644
--- a/addons/base/static/src/js/search.js
+++ b/addons/base/static/src/js/search.js
@@ -731,6 +731,7 @@ openerp.base.search.ExtendedSearch = openerp.base.BaseWidget.extend({
var render = group.render();
this.$element.find('.searchview_extended_groups_list').append(render);
group.start();
+ this.check_last_element();
},
start: function () {
this._super();
@@ -758,11 +759,9 @@ openerp.base.search.ExtendedSearch = openerp.base.BaseWidget.extend({
on_activate: function() {
this.add_group();
var table = this.$element.closest("table.oe-searchview-render-line");
- if(table.css("display") == "none") {
- table.css("display", "");
- if(this.$element.hasClass("folded")) {
- this.$element.toggleClass("folded expanded");
- }
+ table.css("display", "");
+ if(this.$element.hasClass("folded")) {
+ this.$element.toggleClass("folded expanded");
}
},
hide: function() {
@@ -771,6 +770,10 @@ openerp.base.search.ExtendedSearch = openerp.base.BaseWidget.extend({
if(this.$element.hasClass("expanded")) {
this.$element.toggleClass("folded expanded");
}
+ },
+ check_last_element: function() {
+ _.each(this.children, function(x) {x.set_last_group(false);});
+ this.children[this.children.length - 1].set_last_group(true);
}
});
@@ -796,9 +799,6 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.BaseWidget.extend({
});
var delete_btn = this.$element.find('.searchview_extended_delete_group');
delete_btn.click(function (e) {
- if (_this.parent.children.length == 1) {
- _this.parent.hide();
- }
_this.stop();
});
},
@@ -811,6 +811,19 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.BaseWidget.extend({
return [].concat(choice == "none" ? ['!'] : [],
_.map(_.range(_.max([0,props.length - 1])), function() { return op; }),
props);
+ },
+ stop: function() {
+ var parent = this.parent;
+ if (this.parent.children.length == 1)
+ this.parent.hide();
+ this._super();
+ parent.check_last_element();
+ },
+ set_last_group: function(is_last) {
+ if(is_last)
+ this.$element.addClass("last_group");
+ else
+ this.$element.removeClass("last_group");
}
});
@@ -838,6 +851,11 @@ openerp.base.search.ExtendedSearchProposition = openerp.base.BaseWidget.extend({
_this.stop();
});
},
+ stop: function() {
+ if (this.parent.children.length == 1)
+ this.parent.stop();
+ this._super();
+ },
changed: function() {
var nval = this.$element.find(".searchview_extended_prop_field").val();
if(this.attrs.selected == null || nval != this.attrs.selected.name) {
diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 4217031a7e3..ee910d57cfd 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -397,10 +397,22 @@ openerp.base.View = openerp.base.Controller.extend({
*/
execute_action: function (action_data, dataset, action_manager, record_id, on_no_action) {
var handler = function (r) {
- if (r.result && r.result.constructor == Object) {
- action_manager.do_action(r.result);
+ var action = r.result;
+ if (action && action.constructor == Object) {
+ action.context = action.context || {};
+ action.context['active_id'] = dataset.ids[dataset.index];
+ action.context['active_ids'] = [dataset.ids[dataset.index]];
+ action.context['active_model'] = dataset.model;
+ action.flags = {
+ sidebar : false,
+ search_view : false,
+ views_switcher : false,
+ action_buttons : false,
+ pager : false
+ };
+ action_manager.do_action(action);
} else {
- on_no_action(r.result);
+ on_no_action(action);
}
};
@@ -409,12 +421,12 @@ openerp.base.View = openerp.base.Controller.extend({
result : { type: 'ir.actions.act_window_close' }
});
} else {
- var context = _.extend({}, dataset.context, action_data.context || {});
+ var context = new openerp.base.CompoundContext(dataset.context).add(action_data.context || {});
switch(action_data.type) {
case 'object':
- return dataset.call(action_data.name, [[record_id], context], handler);
+ return dataset.call_and_eval(action_data.name, [[record_id], context], null, 1, handler);
case 'action':
- return this.rpc('/base/action/load', { action_id: parseInt(action_data.name, 10) }, handler);
+ return this.rpc('/base/action/load', { action_id: parseInt(action_data.name, 10), context: context }, handler);
default:
return dataset.exec_workflow(record_id, action_data.name, handler);
}
diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml
index 949b38e0115..b03bb044ba4 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/base/static/src/xml/base.xml
@@ -90,7 +90,7 @@
t-att-value="selected_password || ''"/></td>
</tr>
<tr t-if="has_local_storage">
- <td><label for="remember">Rember password:</label></td>
+ <td><label for="remember">Remember password:</label></td>
<td class="oe_remember">
<t t-if="remember">
<input type="checkbox" name="remember" checked="yes"/>
@@ -804,6 +804,7 @@
</div>
<a class="searchview_extended_add_proposition" href="javascript:void(0)">
<span>Add condition</span></a>
+ <div class="oe_adv_filters_and"><span>and</span></div>
</div>
</t>
<t t-name="SearchView.extended_search.proposition">
@@ -870,12 +871,15 @@
</div>
</t>
<t t-name="DialogWarning">
- <div id="dialog-message" t-att-title="title">
- <p>
- <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
- <t t-esc="message"/>
- </p>
- </div>
+ <p class="oe-dialog-warning">
+ <img src="/base/static/src/img/warning.png" class="oe-dialog-icon"/>
+ <t t-esc="error.data.fault_code.substr(18)"/>
+ </p>
+</t>
+<t t-name="DialogTraceback">
+ <pre><t t-esc="error.message"/></pre>
+ <hr/>
+ <pre><t t-esc="error.data.debug"/></pre>
</t>
<t t-name="SelectCreatePopup">
<div t-att-id="element_id">