[WIP] better url management, only views are allowed to call this.do_push_state
bzr revid: chs@openerp.com-20111214160958-fb0dtboz2smakb6p
This commit is contained in:
parent
5eb0b2a10f
commit
99ffc0507f
|
@ -1053,7 +1053,6 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
|
||||||
if(this.action_manager)
|
if(this.action_manager)
|
||||||
this.action_manager.stop();
|
this.action_manager.stop();
|
||||||
this.action_manager = new openerp.web.ActionManager(this);
|
this.action_manager = new openerp.web.ActionManager(this);
|
||||||
this.action_manager.do_push_state.add(this.do_push_state);
|
|
||||||
this.action_manager.appendTo($("#oe_app"));
|
this.action_manager.appendTo($("#oe_app"));
|
||||||
|
|
||||||
if (openerp._modules_loaded) { // TODO: find better option than this
|
if (openerp._modules_loaded) { // TODO: find better option than this
|
||||||
|
@ -1068,7 +1067,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
|
||||||
},
|
},
|
||||||
on_logged_out: function() {
|
on_logged_out: function() {
|
||||||
$(window).unbind('hashchange', this.on_hashchange);
|
$(window).unbind('hashchange', this.on_hashchange);
|
||||||
this.do_push_state({},true);
|
this.do_push_state({});
|
||||||
if(this.action_manager)
|
if(this.action_manager)
|
||||||
this.action_manager.stop();
|
this.action_manager.stop();
|
||||||
this.action_manager = null;
|
this.action_manager = null;
|
||||||
|
@ -1090,11 +1089,8 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
|
||||||
}
|
}
|
||||||
this._current_state = state;
|
this._current_state = state;
|
||||||
},
|
},
|
||||||
do_push_state: function(state, overwrite) {
|
do_push_state: function(state) {
|
||||||
if (!overwrite) {
|
console.log('dopushstate', state);
|
||||||
var hash = $.deparam.fragment(true);
|
|
||||||
state = _.extend({}, hash, state);
|
|
||||||
}
|
|
||||||
var url = '#' + $.param(state);
|
var url = '#' + $.param(state);
|
||||||
this._current_state = _.clone(state);
|
this._current_state = _.clone(state);
|
||||||
$.bbq.pushState(url);
|
$.bbq.pushState(url);
|
||||||
|
|
|
@ -175,6 +175,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||||
if (self.default_focus_field && !self.embedded_view) {
|
if (self.default_focus_field && !self.embedded_view) {
|
||||||
self.default_focus_field.focus();
|
self.default_focus_field.focus();
|
||||||
}
|
}
|
||||||
|
if (record.id) {
|
||||||
|
self.do_push_state({id:record.id});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
on_form_changed: function() {
|
on_form_changed: function() {
|
||||||
|
|
|
@ -20,6 +20,7 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||||
identifier_prefix: "actionmanager",
|
identifier_prefix: "actionmanager",
|
||||||
init: function(parent) {
|
init: function(parent) {
|
||||||
this._super(parent);
|
this._super(parent);
|
||||||
|
this.action = null;
|
||||||
this.inner_viewmanager = null;
|
this.inner_viewmanager = null;
|
||||||
this.dialog = null;
|
this.dialog = null;
|
||||||
this.dialog_viewmanager = null;
|
this.dialog_viewmanager = null;
|
||||||
|
@ -47,7 +48,15 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
do_push_state: function(state, overwrite) {
|
do_push_state: function(state) {
|
||||||
|
if (this.wiget_parent && this.widget_parent.do_push_state) {
|
||||||
|
if (this.action.id) {
|
||||||
|
state = _.extend({}, state || {}, {
|
||||||
|
action_id: this.action.id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.widget_parent.do_push_state(state);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
do_load_state: function(state) {
|
do_load_state: function(state) {
|
||||||
|
@ -95,6 +104,7 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||||
console.error("Action manager can't handle action of type " + action.type, action);
|
console.error("Action manager can't handle action of type " + action.type, action);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.action = action;
|
||||||
return this[type](action, on_close);
|
return this[type](action, on_close);
|
||||||
},
|
},
|
||||||
null_action: function() {
|
null_action: function() {
|
||||||
|
@ -128,10 +138,6 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||||
this.content_stop();
|
this.content_stop();
|
||||||
this.inner_action = action;
|
this.inner_action = action;
|
||||||
this.inner_viewmanager = new session.web.ViewManagerAction(this, action);
|
this.inner_viewmanager = new session.web.ViewManagerAction(this, action);
|
||||||
this.inner_viewmanager.do_push_state.add(function(state,overwrite) {
|
|
||||||
state['action_id'] = action.id;
|
|
||||||
self.do_push_state(state,true);
|
|
||||||
});
|
|
||||||
this.inner_viewmanager.appendTo(this.$element);
|
this.inner_viewmanager.appendTo(this.$element);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -154,10 +160,6 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||||
this.content_stop();
|
this.content_stop();
|
||||||
var ClientWidget = session.web.client_actions.get_object(action.tag);
|
var ClientWidget = session.web.client_actions.get_object(action.tag);
|
||||||
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
|
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
|
||||||
|
|
||||||
var client_action = {tag: action.tag};
|
|
||||||
if (action.params) _.extend(client_action, {params: action.params});
|
|
||||||
this.do_push_state({client_action: client_action}, true);
|
|
||||||
},
|
},
|
||||||
ir_actions_report_xml: function(action, on_closed) {
|
ir_actions_report_xml: function(action, on_closed) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
@ -466,12 +468,6 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
|
||||||
|
|
||||||
var main_view_loaded = this._super();
|
var main_view_loaded = this._super();
|
||||||
|
|
||||||
_.each(_.keys(this.views), function(view_type) {
|
|
||||||
$.when(self.views[view_type].deferred).done(function(view_type) {
|
|
||||||
self.views[view_type].controller.do_push_state.add(self.do_push_state);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
var manager_ready = $.when(searchview_loaded, main_view_loaded);
|
var manager_ready = $.when(searchview_loaded, main_view_loaded);
|
||||||
|
|
||||||
this.$element.find('.oe_debug_view').change(this.on_debug_changed);
|
this.$element.find('.oe_debug_view').change(this.on_debug_changed);
|
||||||
|
@ -584,12 +580,16 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
|
||||||
} else {
|
} else {
|
||||||
$search_prefix.remove();
|
$search_prefix.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.do_push_state({view_type: self.active_view});
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
do_push_state: function(state, overwrite) {
|
do_push_state: function(state) {
|
||||||
|
if (this.wiget_parent && this.widget_parent.do_push_state) {
|
||||||
|
state = _.extend({}, state || {}, {
|
||||||
|
view_type: this.active_view
|
||||||
|
});
|
||||||
|
this.widget_parent.do_push_state(state);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
do_load_state: function(state) {
|
do_load_state: function(state) {
|
||||||
|
@ -1146,11 +1146,12 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
|
||||||
return $.Deferred().resolve({}).promise();
|
return $.Deferred().resolve({}).promise();
|
||||||
},
|
},
|
||||||
|
|
||||||
do_push_state: function(state, overwrite) {
|
do_push_state: function(state) {
|
||||||
|
if (this.wiget_parent && this.widget_parent.do_push_state) {
|
||||||
|
this.widget_parent.do_push_state(state);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
do_load_state: function(state) {
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
session.web.json_node_to_xml = function(node, human_readable, indent) {
|
session.web.json_node_to_xml = function(node, human_readable, indent) {
|
||||||
|
|
Loading…
Reference in New Issue