[IMP] web: add compatibility layer

This compatibility file reexports every symbols from the modules to the
old openerp namespace.  The goal is to allow old unconverted odoo addons
to interact seamlessly with the new web client.
This commit is contained in:
Géry Debongnie
2015-03-18 09:01:49 +01:00
parent e8a00bc50d
commit 5ed9c00e30
+225
View File
@@ -0,0 +1,225 @@
// ------------------------------------------------------------------------------
// Compatibility with Odoo v8.
//
// With the new module system, no global variable can (and should) be accessed
// in openerp. This file exports everything, to mimic the previous global
// namespace structure. This is only supposed to be used by 3rd parties to
// facilitate migration. Odoo addons should not use the 'openerp' variable at
// all.
// ------------------------------------------------------------------------------
odoo.define('web.compatibility', [
'web.ActionManager',
'web.core',
'web.data',
'web.Dialog',
'web.FavoriteMenu',
'web.form_common',
'web.form_relational',
'web.form_widgets',
'web.formats',
'web.FormView',
'web.framework',
'web.ListView',
'web.Menu',
'web.Model',
'web.pyeval',
'web.Registry',
'web.SearchView',
'web.session',
'web.Sidebar',
'web.SystrayMenu',
'web.time',
'web.UserMenu',
'web.utils',
'web.View',
'web.ViewManager',
'web.WebClient',
'web.Widget',
],
function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var core = require('web.core');
var data = require('web.data');
var Dialog = require('web.Dialog');
var FavoriteMenu = require('web.FavoriteMenu');
var form_common = require('web.form_common');
var formats = require('web.formats');
var FormView = require('web.FormView');
var form_relational = require('web.form_relational'); // necessary
var form_widgets = require('web.form_widgets'); // necessary
var framework = require('web.framework');
var ListView = require('web.ListView');
var Menu = require('web.Menu');
var Model = require('web.Model');
var pyeval = require('web.pyeval');
var Registry = require('web.Registry');
var SearchView = require('web.SearchView');
var session = require('web.session');
var Sidebar = require('web.Sidebar');
var SystrayMenu = require('web.SystrayMenu');
var time = require('web.time');
var UserMenu = require('web.UserMenu');
var utils = require('web.utils');
var View = require('web.View');
var ViewManager = require('web.ViewManager');
var WebClient = require('web.WebClient');
var Widget = require('web.Widget');
var client_started = $.Deferred();
var OldRegistry = Registry.extend({
add: function (key, path) {
},
get_object: function (key) {
return get_object(this.map[key]);
},
});
window.openerp = window.openerp || {};
$.Mutex = utils.Mutex;
openerp._session_id = "instance0";
openerp._t = core._t;
openerp.get_cookie = utils.get_cookie;
openerp.qweb = core.qweb;
openerp.session = session;
openerp.web = openerp.web || {};
openerp.web._t = core._t;
openerp.web._lt = core._lt;
openerp.web.ActionManager = ActionManager;
openerp.web.auto_str_to_date = time.auto_str_to_date;
openerp.web.blockUI = framework.blockUI;
openerp.web.BufferedDataSet = data.BufferedDataSet;
openerp.web.bus = core.bus;
openerp.web.Class = core.Class;
openerp.web.client_actions = make_old_registry(core.action_registry);
openerp.web.CompoundContext = data.CompoundContext;
openerp.web.CompoundDomain = data.CompoundDomain;
openerp.web.DataSetSearch = data.DataSetSearch;
openerp.web.DataSet = data.DataSet;
openerp.web.date_to_str = time.date_to_str;
openerp.web.Dialog = Dialog;
openerp.web.DropMisordered = utils.DropMisordered;
openerp.web.form = openerp.web.form || {};
openerp.web.form.AbstractField = form_common.AbstractField;
openerp.web.form.compute_domain = data.compute_domain;
openerp.web.form.DefaultFieldManager = form_common.DefaultFieldManager;
openerp.web.form.FieldChar = core.form_widget_registry.get('char');
openerp.web.form.FieldFloat = core.form_widget_registry.get('float');
openerp.web.form.FieldStatus = core.form_widget_registry.get('statusbar');
openerp.web.form.FieldMany2ManyTags = core.form_widget_registry.get('many2many_tags');
openerp.web.form.FieldMany2One = core.form_widget_registry.get('many2one');
openerp.web.form.FormWidget = form_common.FormWidget;
openerp.web.form.tags = make_old_registry(core.form_tag_registry);
openerp.web.form.widgets = make_old_registry(core.form_widget_registry);
openerp.web.format_value = formats.format_value;
openerp.web.FormView = FormView;
openerp.web.json_node_to_xml = utils.json_node_to_xml;
openerp.web.ListView = ListView;
openerp.web.Menu = Menu;
openerp.web.Model = Model;
openerp.web.normalize_format = time.strftime_to_moment_format;
openerp.web.py_eval = pyeval.py_eval;
openerp.web.pyeval = pyeval;
openerp.web.qweb = core.qweb;
openerp.web.Registry = OldRegistry;
openerp.web.search = {};
openerp.web.search.FavoriteMenu = FavoriteMenu;
openerp.web.SearchView = SearchView;
openerp.web.Sidebar = Sidebar;
openerp.web.str_to_date = time.str_to_date;
openerp.web.str_to_datetime = time.str_to_datetime;
openerp.web.SystrayItems = SystrayMenu.Items;
openerp.web.unblockUI = framework.unblockUI;
openerp.web.UserMenu = UserMenu;
openerp.web.View = View;
openerp.web.ViewManager = ViewManager;
openerp.web.views = make_old_registry(core.view_registry);
openerp.web.WebClient = WebClient;
openerp.web.Widget = Widget;
openerp.Widget = openerp.web.Widget;
openerp.Widget.prototype.session = session;
WebClient.include({
init: function () {
openerp.client = this;
openerp.webclient = this;
start_modules();
client_started.resolve();
this._super.apply(this, arguments);
},
});
function make_old_registry(registry) {
return {
add: function (key, path) {
client_started.done(function () {
registry.add(key, get_object(path));
});
},
};
}
function get_object(path) {
var object_match = openerp;
path = path.split('.');
// ignore first section
for(var i=1; i<path.length; ++i) {
object_match = object_match[path[i]];
}
return object_match;
}
/**
* OpenERP instance constructor
*
* @param {Array|String} modules list of modules to initialize
*/
var inited = false;
function start_modules (modules) {
if (modules === undefined) {
modules = odoo._modules;
}
modules = _.without(modules, "web");
if (inited) {
throw new Error("OpenERP was already inited");
}
inited = true;
for(var i=0; i < modules.length; i++) {
var fct = openerp[modules[i]];
if (typeof(fct) === "function") {
openerp[modules[i]] = {};
for (var k in fct) {
openerp[modules[i]][k] = fct[k];
}
fct(openerp, openerp[modules[i]]);
}
}
openerp._modules = ['web'].concat(modules);
return openerp;
};
});
odoo.define('mail.compatibility', ['mail.mail'], function (require) {
var mail = require('mail.mail');
return;
window.openerp = window.openerp || {};
openerp.mail = {};
openerp.mail.Wall = mail.Wall;
});