summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views.js
diff options
context:
space:
mode:
authorJiten (OpenERP) <jra@tinyerp.com>2011-09-13 16:47:54 +0530
committerJiten (OpenERP) <jra@tinyerp.com>2011-09-13 16:47:54 +0530
commit47cdc8d62d3627d3d03e5d0963a5104e7dff9d7e (patch)
tree6b6a28e30a036024c18b35e25a75aaa11faf1fa5 /addons/web/static/src/js/views.js
parent655d615f52fabf821d354f0399a792ac595de88e (diff)
parenta6b981eca52e04678b74acedeba21c2f4c2c5155 (diff)
[MERGE] Merge from openerp-web.
bzr revid: jra@tinyerp.com-20110913111754-zk57t5dqc22s98vm
Diffstat (limited to 'addons/web/static/src/js/views.js')
-rw-r--r--addons/web/static/src/js/views.js107
1 files changed, 70 insertions, 37 deletions
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index 2c616359f01..6c10174d109 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -115,7 +115,7 @@ openerp.web.ActionManager = openerp.web.Widget.extend({
var self = this;
this.rpc('/web/action/run', {
action_id: action.id,
- context: {active_id: 66, active_ids: [66], active_model: 'ir.ui.menu'}
+ context: action.context || {}
}).then(function (action) {
self.do_action(action, on_closed)
});
@@ -135,8 +135,17 @@ openerp.web.ActionManager = openerp.web.Widget.extend({
}
});
-openerp.web.ViewManager = openerp.web.Widget.extend({
+openerp.web.ViewManager = openerp.web.Widget.extend(/** @lends openerp.web.ViewManager# */{
identifier_prefix: "viewmanager",
+ template: "ViewManager",
+ /**
+ * @constructs openerp.web.ViewManager
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param dataset
+ * @param views
+ */
init: function(parent, dataset, views) {
this._super(parent);
this.model = dataset.model;
@@ -149,7 +158,7 @@ openerp.web.ViewManager = openerp.web.Widget.extend({
this.registry = openerp.web.views;
},
render: function() {
- return QWeb.render("ViewManager", {"prefix": this.element_id, views: this.views_src})
+ return QWeb.render(this.template, {"prefix": this.element_id, views: this.views_src})
},
/**
* @returns {jQuery.Deferred} initial view loading promise
@@ -257,7 +266,7 @@ openerp.web.ViewManager = openerp.web.Widget.extend({
/**
* Sets up the current viewmanager's search view.
*
- * @param view_id the view to use or false for a default one
+ * @param {Number|false} view_id the view to use or false for a default one
* @returns {jQuery.Deferred} search view startup deferred
*/
setup_search_view: function(view_id, search_defaults) {
@@ -265,10 +274,10 @@ openerp.web.ViewManager = openerp.web.Widget.extend({
if (this.searchview) {
this.searchview.stop();
}
- this.searchview = new openerp.web.SearchView(this, this.element_id + "_search", this.dataset, view_id, search_defaults);
- if (this.flags.search_view === false) {
- this.searchview.hide();
- }
+ this.searchview = new openerp.web.SearchView(
+ this, this.element_id + "_search", this.dataset,
+ view_id, search_defaults);
+
this.searchview.on_search.add(function(domains, contexts, groupbys) {
var controller = self.views[self.active_view].controller;
controller.do_search.call(controller, domains, contexts, groupbys);
@@ -288,50 +297,65 @@ openerp.web.ViewManager = openerp.web.Widget.extend({
}
});
-openerp.web.ViewManagerAction = openerp.web.ViewManager.extend({
+openerp.web.ViewManagerAction = openerp.web.ViewManager.extend(/** @lends oepnerp.web.ViewManagerAction# */{
+ template:"ViewManagerAction",
+ /**
+ * @constructs openerp.web.ViewManagerAction
+ * @extends openerp.web.ViewManager
+ *
+ * @param {openerp.web.ActionManager} parent parent object/widget
+ * @param {Object} action descriptor for the action this viewmanager needs to manage its views.
+ */
init: function(parent, action) {
+ // dataset initialization will take the session from ``this``, so if we
+ // do not have it yet (and we don't, because we've not called our own
+ // ``_super()``) rpc requests will blow up.
this.session = parent.session;
this.action = action;
- var dataset;
- if (!action.res_id) {
- dataset = new openerp.web.DataSetSearch(this, action.res_model, action.context, action.domain);
- } else {
- this.action.flags.search_view = false;
- dataset = new openerp.web.DataSetStatic(this, action.res_model, action.context, [action.res_id]);
+ var dataset = new openerp.web.DataSetSearch(this, action.res_model, action.context, action.domain);
+ if (action.res_id) {
+ dataset.ids.push(action.res_id);
dataset.index = 0;
}
this._super(parent, dataset, action.views);
- this.action = action;
this.flags = this.action.flags || {};
if (action.res_model == 'board.board' && action.views.length == 1 && action.views) {
- // Not elegant but allows to avoid flickering of SearchView#do_hide
+ // Not elegant but allows to avoid form chrome (pager, save/new
+ // buttons, sidebar, ...) displaying
this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false;
}
},
+ /**
+ * Initializes the ViewManagerAction: sets up the searchview (if the
+ * searchview is enabled in the manager's action flags), calls into the
+ * parent to initialize the primary view and (if the VMA has a searchview)
+ * launches an initial search after both views are done rendering.
+ */
start: function() {
- var inital_view_loaded = this._super();
-
- var search_defaults = {};
- _.each(this.action.context, function (value, key) {
- var match = /^search_default_(.*)$/.exec(key);
- if (match) {
- search_defaults[match[1]] = value;
- }
- });
-
+ var searchview_loaded;
if (this.flags.search_view !== false) {
+ var search_defaults = {};
+ _.each(this.action.context, function (value, key) {
+ var match = /^search_default_(.*)$/.exec(key);
+ if (match) {
+ search_defaults[match[1]] = value;
+ }
+ });
// init search view
- var searchview_id = this.action.search_view_id && this.action.search_view_id[0];
+ var searchview_id = this.action['search_view_id'] && this.action['search_view_id'][0];
- var searchview_loaded = this.setup_search_view(
+ searchview_loaded = this.setup_search_view(
searchview_id || false, search_defaults);
+ }
+
+ var main_view_loaded = this._super();
+ var manager_ready = $.when(searchview_loaded, main_view_loaded);
+ if (searchview_loaded && this.action['auto_search']) {
// schedule auto_search
- if (searchview_loaded != null && this.action['auto_search']) {
- $.when(searchview_loaded, inital_view_loaded)
- .then(this.searchview.do_search);
- }
+ manager_ready.then(this.searchview.do_search);
}
+ return manager_ready;
},
on_mode_switch: function (view_type) {
return $.when(
@@ -444,7 +468,11 @@ openerp.web.Sidebar = openerp.web.Widget.extend({
if (item.action) {
var ids = self.widget_parent.get_selected_ids();
if (ids.length == 0) {
- //TODO niv: maybe show a warning?
+ //TODO: make prettier warning?
+ $("<div />").text(_t("You must choose at least one record.")).dialog({
+ title: _t("Warning"),
+ modal: true
+ });
return false;
}
var additional_context = {
@@ -454,7 +482,7 @@ openerp.web.Sidebar = openerp.web.Widget.extend({
};
self.rpc("/web/action/load", {
action_id: item.action.id,
- context: _.extend({"bin_size": true}, additional_context)
+ context: additional_context
}, function(result) {
result.result.context = _.extend(result.result.context || {},
additional_context);
@@ -613,7 +641,11 @@ openerp.web.TranslateDialog = openerp.web.Dialog.extend({
}
});
-openerp.web.View = openerp.web.Widget.extend({
+/**
+ * @class
+ * @extends openerp.web.Widget
+ */
+openerp.web.View = openerp.web.Widget.extend(/** @lends openerp.web.View# */{
set_default_options: function(options) {
this.options = options || {};
_.defaults(this.options, {
@@ -653,6 +685,7 @@ openerp.web.View = openerp.web.Widget.extend({
active_ids: [record_id || false],
active_model: dataset.model
});
+ action.context = new openerp.web.CompoundContext(dataset.get_context(), action.context);
self.do_action(action, on_closed);
} else if (on_closed) {
on_closed(action);
@@ -675,7 +708,7 @@ openerp.web.View = openerp.web.Widget.extend({
* Directly set a view to use instead of calling fields_view_get. This method must
* be called before start(). When an embedded view is set, underlying implementations
* of openerp.web.View must use the provided view instead of any other one.
- *
+ *
* @param embedded_view A view.
*/
set_embedded_view: function(embedded_view) {