viewmanager refactor part1

bzr revid: al@openerp.com-20120409103708-fu62p9wxdcjzzl5m
This commit is contained in:
Antony Lesuisse 2012-04-09 12:37:08 +02:00
parent e376323c8f
commit 64974e24e6
3 changed files with 62 additions and 75 deletions

View File

@ -39,7 +39,7 @@ openerp.web.corelib = function(openerp) {
*
* Example:
*
* var Person = nova.Class.extend({
* var Person = openerp.web.Class.extend({
* init: function(isDancing){
* this.dancing = isDancing;
* },
@ -397,8 +397,9 @@ openerp.web.GetterSetterMixin = _.extend({}, openerp.web.EventDispatcherMixin, {
}
});
openerp.web.CallbackEnabledMixin = {
openerp.web.CallbackEnabledMixin = _.extend({}, openerp.web.GetterSetterMixin, {
init: function() {
openerp.web.GetterSetterMixin.init.call(this);
var self = this;
var callback_maker = function(obj, name, method) {
var callback = function() {
@ -494,19 +495,9 @@ openerp.web.CallbackEnabledMixin = {
return self[method_name].apply(self, arguments);
}
}
};
openerp.web.CallbackEnabled = openerp.web.Class.extend(openerp.web.GetterSetterMixin, openerp.web.CallbackEnabledMixin, {
init: function() {
openerp.web.GetterSetterMixin.init.call(this);
openerp.web.CallbackEnabledMixin.init.call(this);
}
});
// Class
// TODO al merge or make 2 mixins
openerp.web.Widget = openerp.web.Class.extend(openerp.web.GetterSetterMixin, {
openerp.web.WidgetMixin = _.extend({},openerp.web.CallbackEnabledMixin, {
/**
* Tag name when creating a default $element.
* @type string
@ -527,9 +518,8 @@ openerp.web.Widget = openerp.web.Class.extend(openerp.web.GetterSetterMixin, {
* for new components this argument should not be provided any more.
*/
init: function(parent) {
openerp.web.GetterSetterMixin.init.call(this);
openerp.web.CallbackEnabledMixin.init.call(this);
this.$element = $(document.createElement(this.tagName));
this.setParent(parent);
},
/**
@ -621,6 +611,14 @@ openerp.web.Widget = openerp.web.Class.extend(openerp.web.GetterSetterMixin, {
}
});
// Classes
openerp.web.CallbackEnabled = openerp.web.Class.extend(openerp.web.CallbackEnabledMixin, {
init: function() {
openerp.web.CallbackEnabledMixin.init.call(this);
}
});
/**
* Base class for all visual components. Provides a lot of functionalities helpful
* for the management of a part of the DOM.
@ -669,7 +667,7 @@ openerp.web.Widget = openerp.web.Class.extend(openerp.web.GetterSetterMixin, {
*
* That will kill the widget in a clean way and erase its content from the dom.
*/
openerp.web.Widget = openerp.web.Widget.extend(openerp.web.CallbackEnabledMixin, {
openerp.web.Widget = openerp.web.Class.extend(openerp.web.WidgetMixin, {
/**
* The name of the QWeb template that will be used for rendering. Must be
* redefined in subclasses or the default render() method can not be used.
@ -692,8 +690,7 @@ openerp.web.Widget = openerp.web.Widget.extend(openerp.web.CallbackEnabledMixin,
* for new components this argument should not be provided any more.
*/
init: function(parent) {
this._super(parent);
openerp.web.CallbackEnabledMixin.init.call(this);
openerp.web.WidgetMixin.init.call(this,parent);
this.session = openerp.connection;
},
/**
@ -1687,33 +1684,6 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
}
});
/**
* @deprecated use :class:`openerp.web.Widget`
*/
openerp.web.OldWidget = openerp.web.Widget.extend({
init: function(parent, element_id) {
this._super(parent);
this.element_id = element_id;
this.element_id = this.element_id || _.uniqueId('widget-');
var tmp = document.getElementById(this.element_id);
this.$element = tmp ? $(tmp) : $(document.createElement(this.tagName));
},
renderElement: function() {
var rendered = this.render();
if (rendered) {
var elem = $(rendered);
this.$element.replaceWith(elem);
this.$element = elem;
}
return this;
},
render: function (additional) {
if (this.template)
return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {}));
return null;
}
});
openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.web.TranslationDataBase# */{
/**
* @constructs openerp.web.TranslationDataBase
@ -1767,6 +1737,32 @@ openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.we
}
});
/**
* @deprecated use :class:`openerp.web.Widget`
*/
openerp.web.OldWidget = openerp.web.Widget.extend({
init: function(parent, element_id) {
this._super(parent);
this.element_id = element_id;
this.element_id = this.element_id || _.uniqueId('widget-');
var tmp = document.getElementById(this.element_id);
this.$element = tmp ? $(tmp) : $(document.createElement(this.tagName));
},
renderElement: function() {
var rendered = this.render();
if (rendered) {
var elem = $(rendered);
this.$element.replaceWith(elem);
this.$element = elem;
}
return this;
},
render: function (additional) {
if (this.template)
return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {}));
return null;
}
});
}

View File

@ -6,17 +6,7 @@ openerp.web.views = function(session) {
var QWeb = session.web.qweb,
_t = session.web._t;
/**
* Registry for all the client actions key: tag value: widget
*/
session.web.client_actions = new session.web.Registry();
/**
* Registry for all the main views
*/
session.web.views = new session.web.Registry();
session.web.ActionManager = session.web.OldWidget.extend({
session.web.ActionManager = session.web.Widget.extend({
init: function(parent) {
this._super(parent);
this.inner_action = null;
@ -25,9 +15,6 @@ session.web.ActionManager = session.web.OldWidget.extend({
this.dialog_viewmanager = null;
this.client_widget = null;
},
render: function() {
return '<div id="' + this.element_id + '" style="height: 100%;"></div>';
},
dialog_stop: function () {
if (this.dialog) {
this.dialog_viewmanager.destroy();
@ -217,7 +204,7 @@ session.web.ActionManager = session.web.OldWidget.extend({
}
});
session.web.ViewManager = session.web.OldWidget.extend(/** @lends session.web.ViewManager# */{
session.web.ViewManager = session.web.OldWidget.extend({
template: "ViewManager",
/**
* @constructs session.web.ViewManager
@ -250,12 +237,6 @@ session.web.ViewManager = session.web.OldWidget.extend(/** @lends session.web.V
this.registry = session.web.views;
this.views_history = [];
},
render: function() {
return session.web.qweb.render(this.template, {
self: this,
prefix: this.element_id,
views: this.views_src});
},
/**
* @returns {jQuery.Deferred} initial view loading promise
*/
@ -452,7 +433,7 @@ session.web.ViewManager = session.web.OldWidget.extend(/** @lends session.web.V
}
});
session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepnerp.web.ViewManagerAction# */{
session.web.ViewManagerAction = session.web.ViewManager.extend({
template:"ViewManagerAction",
/**
* @constructs session.web.ViewManagerAction
@ -1295,6 +1276,16 @@ session.web.xml_to_str = function(node) {
}
}
/**
* Registry for all the client actions key: tag value: widget
*/
session.web.client_actions = new session.web.Registry();
/**
* Registry for all the main views
*/
session.web.views = new session.web.Registry();
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -409,14 +409,14 @@
<div class="oe_view_manager">
<div class="oe_view_manager_header">
<div class="oe_view_manager_row">
<h2 class="oe_view_title" t-if="self.flags.display_title !== false">
<span class="oe_view_title_text"><t t-esc="self.display_title()"/></span>
<h2 class="oe_view_title" t-if="widget.flags.display_title !== false">
<span class="oe_view_title_text"><t t-esc="widget.display_title()"/></span>
</h2>
<div t-attf-id="#{prefix}_search" t-opentag="true"/>
<div t-attf-id="#{widget.element_id}_search" t-opentag="true"/>
</div>
<div class="oe_view_manager_row">
<div class="oe_view_manager_switch oe_button_group">
<t t-if="views.length != 1" t-foreach="views" t-as="view">
<t t-if="widget.views_src.length != 1" t-foreach="widget.views_src" t-as="view">
<button type="button" t-attf-class="oe_vm_switch_#{view.view_type}" t-att-data-view-type="view.view_type" t-att-title="view.label || view.view_type">
<span><t t-esc="view.label || view.view_type"/></span>
</button>
@ -425,19 +425,19 @@
</div>
</div>
<div class="oe_view_manager_body">
<t t-foreach="views" t-as="view">
<div t-attf-id="#{prefix}_view_#{view.view_type}"/>
<t t-foreach="widget.views_src" t-as="view">
<div t-attf-id="#{widget.element_id}_view_#{view.view_type}"/>
</t>
</div>
</div>
</t>
<t t-name="ViewManagerAction" t-extend="ViewManager">
<t t-jquery="h2.oe_view_title" t-operation="prepend">
<a t-if="self.flags.display_title !== false" class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
<a t-if="widget.flags.display_title !== false" class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
href="javascript: void(0)"> </a>
</t>
<t t-jquery="h2.oe_view_title" t-operation="after">
<select t-if="self.session.debug" class="oe_debug_view"/>
<select t-if="widget.session.debug" class="oe_debug_view"/>
</t>
</t>
<t t-name="ViewManagerDebug">