Files
odoo_source/addons/web/static/src/js/compatibility.js
T

266 lines
8.7 KiB
JavaScript

// ------------------------------------------------------------------------------
// 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', 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 Model = require('web.DataModel');
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.form.custom_widgets = make_old_registry(core.form_custom_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.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;
};
// Monkey-patching of the ListView for backward compatibiliy of the colors and
// fonts row's attributes, as they are deprecated in 9.0.
ListView.include({
willStart: function() {
if (this.fields_view.arch.attrs.colors) {
this.colors = _(this.fields_view.arch.attrs.colors.split(';')).chain()
.compact()
.map(function(color_pair) {
var pair = color_pair.split(':'),
color = pair[0],
expr = pair[1];
return [color, py.parse(py.tokenize(expr)), expr];
}).value();
}
if (this.fields_view.arch.attrs.fonts) {
this.fonts = _(this.fields_view.arch.attrs.fonts.split(';')).chain().compact()
.map(function(font_pair) {
var pair = font_pair.split(':'),
font = pair[0],
expr = pair[1];
return [font, py.parse(py.tokenize(expr)), expr];
}).value();
}
return this._super();
},
/**
* Returns the style for the provided record in the current view (from the
* ``@colors`` and ``@fonts`` attributes)
*
* @param {Record} record record for the current row
* @returns {String} CSS style declaration
*/
style_for: function (record) {
var len, style= '';
var context = _.extend({}, record.attributes, {
uid: session.uid,
current_date: moment().format('YYYY-MM-DD')
// TODO: time, datetime, relativedelta
});
var i;
var pair;
var expression;
if (this.fonts) {
for(i=0, len=this.fonts.length; i<len; ++i) {
pair = this.fonts[i];
var font = pair[0];
expression = pair[1];
if (py.PY_isTrue(py.evaluate(expression, context))) {
switch(font) {
case 'bold':
style += 'font-weight: bold;';
break;
case 'italic':
style += 'font-style: italic;';
break;
case 'underline':
style += 'text-decoration: underline;';
break;
}
}
}
}
if (!this.colors) { return style; }
for(i=0, len=this.colors.length; i<len; ++i) {
pair = this.colors[i];
var color = pair[0];
expression = pair[1];
if (py.PY_isTrue(py.evaluate(expression, context))) {
return style += 'color: ' + color + ';';
}
}
return style;
},
});
});