OpenERP Online has proposed merging 
lp:~openerp-dev/openerp-web/trunk-qweb_manifest-chs into lp:openerp-web.

Requested reviews:
  OpenERP R&D Web Team (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-qweb_manifest-chs/+merge/80556
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-qweb_manifest-chs/+merge/80556
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/trunk-qweb_manifest-chs.
=== modified file 'addons/web/__openerp__.py'
--- addons/web/__openerp__.py	2011-10-25 08:36:48 +0000
+++ addons/web/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -52,4 +52,7 @@
         "static/src/css/data_export.css",
         "static/src/css/data_import.css",
     ],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
 }

=== modified file 'addons/web/controllers/main.py'
--- addons/web/controllers/main.py	2011-10-24 14:06:58 +0000
+++ addons/web/controllers/main.py	2011-10-27 12:44:25 +0000
@@ -24,6 +24,32 @@
 # OpenERP Web web Controllers
 #----------------------------------------------------------
 
+
+def concat_xml(file_list):
+    """Concatenate xml files
+    return (concat,timestamp)
+    concat: concatenation of file content
+    timestamp: max(os.path.getmtime of file_list)
+    """
+    root = None
+    files_timestamp = 0
+    for fname in file_list:
+        ftime = os.path.getmtime(fname)
+        if ftime > files_timestamp:
+            files_timestamp = ftime
+
+        xml = ElementTree.parse(fname).getroot()
+
+        if root is None:
+            root = ElementTree.Element(xml.tag)
+        #elif root.tag != xml.tag:
+        #    raise ValueError("Root tags missmatch: %r != %r" % (root.tag, xml.tag))
+
+        for child in xml.getchildren():
+            root.append(child)
+    return ElementTree.tostring(root, 'utf-8'), files_timestamp
+
+
 def concat_files(file_list):
     """ Concatenate file content
     return (concat,timestamp)
@@ -83,12 +109,14 @@
                     yield path, path[len(addons_path):]
 
     def manifest_list(self, req, mods, extension):
+        env = req.httprequest.environ
+        host = '%s://%s' % (env['wsgi.url_scheme'], env['HTTP_HOST'])
         if not req.debug:
-            path = '/web/webclient/' + extension
+            path = host + '/web/webclient/' + extension
             if mods is not None:
                 path += '?mods=' + mods
             return [path]
-        return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)]
+        return ['%s%s?debug=%s' % (host, wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)]
 
     @openerpweb.jsonrequest
     def csslist(self, req, mods=None):
@@ -98,6 +126,10 @@
     def jslist(self, req, mods=None):
         return self.manifest_list(req, mods, 'js')
 
+    @openerpweb.jsonrequest
+    def qweblist(self, req, mods=None):
+        return self.manifest_list(req, mods, 'qweb')
+
     @openerpweb.httprequest
     def css(self, req, mods=None):
         files = [f[0] for f in self.manifest_glob(req, mods, 'css')]
@@ -113,6 +145,14 @@
         return req.make_response(content, [('Content-Type', 'application/javascript')])
 
     @openerpweb.httprequest
+    def qweb(self, req, mods=None):
+        files = [f[0] for f in self.manifest_glob(req, mods, 'qweb')]
+        content,timestamp = concat_xml(files)
+        # TODO use timestamp to set Last mofified date and E-tag
+        return req.make_response(content, [('Content-Type', 'text/xml')])
+
+
+    @openerpweb.httprequest
     def home(self, req, s_action=None, **kw):
         js = "\n        ".join('<script type="text/javascript" src="%s"></script>'%i for i in self.manifest_list(req, None, 'js'))
         css = "\n        ".join('<link rel="stylesheet" href="%s">'%i for i in self.manifest_list(req, None, 'css'))

=== modified file 'addons/web/static/src/js/chrome.js'
--- addons/web/static/src/js/chrome.js	2011-10-18 14:33:00 +0000
+++ addons/web/static/src/js/chrome.js	2011-10-27 12:44:25 +0000
@@ -2,7 +2,6 @@
  * OpenERP Web chrome
  *---------------------------------------------------------*/
 openerp.web.chrome = function(openerp) {
-var QWeb = openerp.web.qweb;
 
 openerp.web.Notification =  openerp.web.Widget.extend(/** @lends openerp.web.Notification# */{
     template: 'Notification',
@@ -157,7 +156,7 @@
         }
     },
     on_managed_error: function(error) {
-        $('<div>' + QWeb.render('DialogWarning', {error: error}) + '</div>').dialog({
+        $('<div>' + this.session.qweb.render('DialogWarning', {error: error}) + '</div>').dialog({
             title: "OpenERP " + _.capitalize(error.type),
             buttons: {
                 Ok: function() {
@@ -180,7 +179,7 @@
                 }
             }
         }).start();
-        dialog.$element.html(QWeb.render('DialogTraceback', {error: error}));
+        dialog.$element.html(this.session.qweb.render('DialogTraceback', {error: error}));
     }
 });
 
@@ -201,7 +200,7 @@
     on_rpc_event : function(increment) {
         this.count += increment;
         if (this.count) {
-            //this.$element.html(QWeb.render("Loading", {}));
+            //this.$element.html(this.session.qweb.render("Loading", {}));
             this.$element.html("Loading ("+this.count+")");
             this.$element.show();
             this.widget_parent.$element.addClass('loading');
@@ -226,7 +225,7 @@
         this.$option_id = $('#' + option_id);
     },
     start: function() {
-        this.$element.html(QWeb.render("Database", this));
+        this.$element.html(this.session.qweb.render("Database", this));
         this.$element.closest(".openerp")
                 .removeClass("login-mode")
                 .addClass("database_block");
@@ -339,7 +338,7 @@
     },
     do_create: function() {
         var self = this;
-       	self.$option_id.html(QWeb.render("Database.CreateDB", self));
+       	self.$option_id.html(this.session.qweb.render("Database.CreateDB", self));
         self.$option_id.find("form[name=create_db_form]").validate({
             submitHandler: function (form) {
                 var fields = $(form).serializeArray();
@@ -363,7 +362,7 @@
     },
     do_drop: function() {
         var self = this;
-       	self.$option_id.html(QWeb.render("DropDB", self));
+       	self.$option_id.html(this.session.qweb.render("DropDB", self));
        	self.$option_id.find("form[name=drop_db_form]").validate({
             submitHandler: function (form) {
                 var $form = $(form),
@@ -389,7 +388,7 @@
     do_backup: function() {
         var self = this;
        	self.$option_id
-            .html(QWeb.render("BackupDB", self))
+            .html(this.session.qweb.render("BackupDB", self))
             .find("form[name=backup_db_form]").validate({
             submitHandler: function (form) {
                 $.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
@@ -409,7 +408,7 @@
     },
     do_restore: function() {
         var self = this;
-       	self.$option_id.html(QWeb.render("RestoreDB", self));
+       	self.$option_id.html(this.session.qweb.render("RestoreDB", self));
 
        	self.$option_id.find("form[name=restore_db_form]").validate({
             submitHandler: function (form) {
@@ -447,7 +446,7 @@
     },
     do_change_password: function() {
         var self = this;
-       	self.$option_id.html(QWeb.render("Change_DB_Pwd", self));
+       	self.$option_id.html(this.session.qweb.render("Change_DB_Pwd", self));
 
         self.$option_id.find("form[name=change_pwd_form]").validate({
             messages: {
@@ -521,7 +520,7 @@
         this.$element.find("form").submit(this.on_submit);
 
         this.rpc("/web/database/get_list", {}, function(result) {
-            var tpl = openerp.web.qweb.render('Login_dblist', {db_list: result.db_list, selected_db: self.selected_db});
+            var tpl = self.session.qweb.render('Login_dblist', {db_list: result.db_list, selected_db: self.selected_db});
             self.$element.find("input[name=db]").replaceWith(tpl)
         }, 
         function(error, event) {
@@ -618,7 +617,7 @@
                 return;
             var func = new openerp.web.Model(self.session, "res.users").get_func("read");
             return func(self.session.uid, ["name", "company_id"]).pipe(function(res) {
-                self.$content = $(QWeb.render("Header-content", {widget: self, user: res}));
+                self.$content = $(self.session.qweb.render("Header-content", {widget: self, user: res}));
                 self.$content.appendTo(self.$element);
                 self.$element.find(".logout").click(self.on_logout);
                 self.$element.find("a.preferences").click(self.on_preferences);
@@ -631,7 +630,7 @@
     on_about: function() {
         var self = this;
         self.rpc("/web/webclient/version_info", {}).then(function(res) {
-            var $help = $(QWeb.render("About-Page", {version_info: res}));
+            var $help = $(self.session.qweb.render("About-Page", {version_info: res}));
             $help.dialog({autoOpen: true,
                 modal: true, width: 960, title: "About"});
         });
@@ -674,7 +673,7 @@
             sc.push.apply(sc, shortcuts);
 
             self.$element.find('.oe-shortcuts')
-                .html(QWeb.render('Shortcuts', {'shortcuts': shortcuts}))
+                .html(self.session.qweb.render('Shortcuts', {'shortcuts': shortcuts}))
                 .undelegate('li', 'click')
 
                 .delegate('li', 'click', function(e) {
@@ -747,7 +746,7 @@
             height : 'auto'
         });
         this.dialog.start().open();
-        this.dialog.$element.html(QWeb.render("Change_Pwd", self));
+        this.dialog.$element.html(self.session.qweb.render("Change_Pwd", self));
         this.dialog.$element.find("form[name=change_password_form]").validate({
             submitHandler: function (form) {
                 self.rpc("/web/session/change_password",{
@@ -806,8 +805,8 @@
     },
     on_loaded: function(data) {
         this.data = data;
-        this.$element.html(QWeb.render("Menu", { widget : this }));
-        this.$secondary_menu.html(QWeb.render("Menu.secondary", { widget : this }));
+        this.$element.html(this.session.qweb.render("Menu", { widget : this }));
+        this.$secondary_menu.html(this.session.qweb.render("Menu.secondary", { widget : this }));
         this.$element.add(this.$secondary_menu).find("a").click(this.on_menu_click);
         this.$secondary_menu.find('.oe_toggle_secondary_menu').click(this.on_toggle_fold);
     },
@@ -942,16 +941,15 @@
     init: function(element_id) {
         this._super(null, element_id);
         openerp.webclient = this;
+        this.session = new openerp.web.Session();
 
-        QWeb.add_template("/web/static/src/xml/base.xml");
         var params = {};
         if(jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) {
             this.$element.addClass("kitten-mode-activated");
         }
-        this.$element.html(QWeb.render("Interface", params));
 
-        this.notification = new openerp.web.Notification();
-        this.session = new openerp.web.Session();
+        this.$element.html(this.session.qweb.render("Interface", params));
+        this.notification = new openerp.web.Notification(this);
         this.loading = new openerp.web.Loading(this,"oe_loading");
         this.crashmanager =  new openerp.web.CrashManager(this);
 

=== modified file 'addons/web/static/src/js/core.js'
--- addons/web/static/src/js/core.js	2011-10-26 08:25:43 +0000
+++ addons/web/static/src/js/core.js	2011-10-27 12:44:25 +0000
@@ -364,10 +364,38 @@
         // TODO: session should have an optional name indicating that they'll
         //       be saved to (and revived from) cookies
         this.name = 'session';
+        this.qweb = this._build_qweb();
     },
     start: function() {
         this.session_restore();
     },
+
+    
+    _build_qweb: function() {
+        qweb = new QWeb2.Engine();
+        qweb.debug = this.debug;
+        qweb.default_dict = {
+            '_' : _
+        };
+        qweb.format_text_node = function(s) {
+            // Note that 'this' is the Qweb Node of the text
+            var translation = this.node.parentNode.attributes['t-translation'];
+            if (translation && translation.value === 'off') {
+                return s;
+            }
+            var ts = _.trim(s);
+            if (ts.length === 0) {
+                return s;
+            }
+            var tr = openerp.web._t(ts);
+            return tr === ts ? s : tr;
+        };
+        var tpl = _('http://%s:%s/web/webclient/qweb').sprintf(this.server, this.port)
+        qweb.add_template(tpl);
+        return qweb;
+    },
+
+
     /**
      * Executes an RPC call, registering the provided callbacks.
      *
@@ -487,6 +515,7 @@
             self.user_context = result.context;
             self.db = result.db;
             self.session_save();
+            self.on_session_valid();
             return true;
         }).then(success_callback);
     },
@@ -577,6 +606,7 @@
                 self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) {
                     self.do_load_js(file_list.concat(files));
                 });
+                self.rpc('/web/webclient/qweblist', {"mods": modules}, self.do_load_qweb);
                 openerp._modules_loaded = true;
             });
         });
@@ -610,6 +640,14 @@
             this.on_modules_loaded();
         }
     },
+    do_load_qweb: function(files) {
+        var self = this;
+        _.each(files, function(file) {
+            $.get(file).then(function(xml) {
+                self.qweb.add_template(_(xml).trim());
+            });
+        });
+    },
     on_modules_loaded: function() {
         for(var j=0; j<this.module_list.length; j++) {
             var mod = this.module_list[j];
@@ -905,7 +943,7 @@
      * @param {Object} additional Additional context arguments to pass to the template.
      */
     render: function (additional) {
-        return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {}));
+        return this.session.qweb.render(this.template, _.extend({widget: this}, additional || {}));
     },
     /**
      * Method called after rendering. Mostly used to bind actions, perform asynchronous
@@ -987,7 +1025,7 @@
  */
 openerp.web.OldWidget = openerp.web.Widget.extend(/** @lends openerp.web.OldWidget# */{
     render: function (additional) {
-        return openerp.web.qweb.render(this.template, _.extend(_.extend({}, this), additional || {}));
+        return this.session.qweb.render(this.template, _.extend(_.extend({}, this), additional || {}));
     }
 });
 
@@ -1044,24 +1082,6 @@
 });
 
 openerp.web._t = new openerp.web.TranslationDataBase().build_translation_function();
-openerp.web.qweb = new QWeb2.Engine();
-openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
-openerp.web.qweb.default_dict = {
-    '_' : _
-}
-openerp.web.qweb.format_text_node = function(s) {
-    // Note that 'this' is the Qweb Node of the text
-    var translation = this.node.parentNode.attributes['t-translation'];
-    if (translation && translation.value === 'off') {
-        return s;
-    }
-    var ts = _.trim(s);
-    if (ts.length === 0) {
-        return s;
-    }
-    var tr = openerp.web._t(ts);
-    return tr === ts ? s : tr;
-}
 
 };
 

=== modified file 'addons/web/static/src/js/data_export.js'
--- addons/web/static/src/js/data_export.js	2011-09-07 09:37:43 +0000
+++ addons/web/static/src/js/data_export.js	2011-10-27 12:44:25 +0000
@@ -1,5 +1,4 @@
 openerp.web.data_export = function(openerp) {
-var QWeb = openerp.web.qweb;
 openerp.web.DataExport = openerp.web.Dialog.extend({
     template: 'ExportTreeView',
     dialog_title: 'Export Data',
@@ -85,7 +84,7 @@
             if (!export_list.length) {
                 return;
             }
-            self.$element.find('#ExistsExportList').append(QWeb.render('Exists.ExportList', {'existing_exports': export_list}));
+            self.$element.find('#ExistsExportList').append(self.session.qweb.render('Exists.ExportList', {'existing_exports': export_list}));
             self.$element.find('#saved_export_list').change(function() {
                 self.$element.find('#fields_list option').remove();
                 var export_id = self.$element.find('#saved_export_list option:selected').val();
@@ -115,7 +114,7 @@
         var self = this;
         var current_node = self.$element.find("#savenewlist");
         if (!(current_node.find("label")).length) {
-            current_node.append(QWeb.render('ExportNewList'));
+            current_node.append(this.session.qweb.render('ExportNewList'));
             current_node.find("#add_export_list").click(function() {
                 var value = current_node.find("#savelist_name").val();
                 if (value) {
@@ -191,9 +190,9 @@
             var current_tr = self.$element.find("tr[id='treerow-" + after + "']");
             current_tr.addClass('open');
             current_tr.find('img').attr('src','/web/static/src/img/collapse.gif');
-            current_tr.after(QWeb.render('ExportTreeView-Secondary.children', {'fields': result}));
+            current_tr.after(this.session.qweb.render('ExportTreeView-Secondary.children', {'fields': result}));
         } else {
-            self.$element.find('#left_field_panel').append(QWeb.render('ExportTreeView-Secondary', {'fields': result}));
+            self.$element.find('#left_field_panel').append(this.session.qweb.render('ExportTreeView-Secondary', {'fields': result}));
         }
         _.each(result, function(record) {
             self.records[record.id] = record.value;

=== modified file 'addons/web/static/src/js/data_import.js'
--- addons/web/static/src/js/data_import.js	2011-10-24 14:27:44 +0000
+++ addons/web/static/src/js/data_import.js	2011-10-27 12:44:25 +0000
@@ -1,6 +1,5 @@
 openerp.web.data_import = function(openerp) {
-var QWeb = openerp.web.qweb,
-    _t = openerp.web._t;
+var _t = openerp.web._t;
 /**
  * Safari does not deal well at all with raw JSON data being returned. As a
  * result, we're going to cheat by using a pseudo-jsonp: instead of getting
@@ -188,7 +187,7 @@
                 with_headers = this.$element.find('#file_has_headers').prop('checked');
             headers = with_headers ? results.records[0] : null;
 
-            result_node.append(QWeb.render('ImportView.result', {
+            result_node.append(this.session.qweb.render('ImportView.result', {
                 'headers': headers,
                 'records': lines_to_skip ? results.records.slice(lines_to_skip)
                           : with_headers ? results.records.slice(1)
@@ -196,7 +195,7 @@
             }));
             this.$element.find('fieldset').addClass('oe-closed');
         } else if (results['error']) {
-            result_node.append(QWeb.render('ImportView.error', {
+            result_node.append(this.session.qweb.render('ImportView.error', {
                 'error': results['error']}));
             this.$element.find('fieldset').removeClass('oe-closed');
         } else if (results['success']) {

=== modified file 'addons/web/static/src/js/search.js'
--- addons/web/static/src/js/search.js	2011-10-24 15:26:12 +0000
+++ addons/web/static/src/js/search.js	2011-10-27 12:44:25 +0000
@@ -1,5 +1,4 @@
 openerp.web.search = function(openerp) {
-var QWeb = openerp.web.qweb;
 
 openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.SearchView# */{
     template: "EmptyComponent",
@@ -144,7 +143,7 @@
         lines.push([ext]);
         this.inputs.push(ext);
         
-        var render = QWeb.render("SearchView", {
+        var render = this.session.qweb.render("SearchView", {
             'view': data.fields_view['arch'],
             'lines': lines,
             'defaults': this.defaults
@@ -175,7 +174,7 @@
         }).then(function(result) {
             self.managed_filters = result;
             var filters = self.$element.find(".oe_search-view-filters-management");
-            filters.html(QWeb.render("SearchView.managed-filters", {filters: result}));
+            filters.html(self.session.qweb.render("SearchView.managed-filters", {filters: result}));
             filters.change(self.on_filters_management);
         });
     },
@@ -207,7 +206,7 @@
             _.each(data.domains, function(x) {
                 domain.add(x);
             });
-            var dial_html = QWeb.render("SearchView.managed-filters.add");
+            var dial_html = this.session.qweb.render("SearchView.managed-filters.add");
             var $dial = $(dial_html);
             $dial.dialog({
                 modal: true,
@@ -433,6 +432,7 @@
      * @param view the ancestor view of this widget
      */
     init: function (view) {
+        this._super(view);
         this.view = view;
     },
     /**
@@ -473,10 +473,8 @@
         this._super();
     },
     render: function (defaults) {
-        return QWeb.render(
-            this.template, _.extend(this, {
-                defaults: defaults
-        }));
+        // FIXME
+        return this._super(_.extend(this, {defaults: defaults}));
     }
 });
 openerp.web.search.add_expand_listener = function($root) {

=== modified file 'addons/web/static/src/js/view_form.js'
--- addons/web/static/src/js/view_form.js	2011-10-27 12:43:25 +0000
+++ addons/web/static/src/js/view_form.js	2011-10-27 12:44:25 +0000
@@ -1,7 +1,6 @@
 openerp.web.form = function (openerp) {
 
 var _t = openerp.web._t;
-var QWeb = openerp.web.qweb;
 
 openerp.web.views.add('form', 'openerp.web.FormView');
 openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# */{
@@ -89,7 +88,7 @@
             this.fields_view = data;
             var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch);
 
-            this.rendered = QWeb.render(this.form_template, { 'frame': frame, 'widget': this });
+            this.rendered = this.session.qweb.render(this.form_template, { 'frame': frame, 'widget': this });
         }
         this.$element.html(this.rendered);
         _.each(this.widgets, function(w) {
@@ -320,7 +319,7 @@
             this.on_form_changed();
         }
         if (!_.isEmpty(result.warning)) {
-            $(QWeb.render("DialogWarning", result.warning)).dialog({
+            $(this.session.qweb.render("DialogWarning", result.warning)).dialog({
                 modal: true,
                 buttons: {
                     Ok: function() {
@@ -593,7 +592,7 @@
     },
     on_attachments_loaded: function(attachments) {
         this.attachments = attachments;
-        this.$div.html(QWeb.render('FormView.sidebar.attachments', this));
+        this.$div.html(this.session.qweb.render('FormView.sidebar.attachments', this));
         this.$element.find('.oe-binary-file').change(this.on_attachment_changed);
         this.$element.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete);
     },
@@ -744,7 +743,7 @@
     },
     render: function() {
         var template = this.template;
-        return QWeb.render(template, { "widget": this });
+        return this.session.qweb.render(template, { "widget": this });
     },
     _build_view_fields_values: function() {
         var a_dataset = this.view.dataset;
@@ -1068,10 +1067,10 @@
     },
     render: function () {
         if (this['for'] && this.type !== 'label') {
-            return QWeb.render(this.template, {widget: this['for']});
+            return this.session.qweb.render(this.template, {widget: this['for']});
         }
         // Actual label widgets should not have a false and have type label
-        return QWeb.render(this.template, {widget: this});
+        return this.session.qweb.render(this.template, {widget: this});
     },
     start: function() {
         this._super();
@@ -1612,7 +1611,7 @@
                 self.related_entries = result;
 
                 var $cmenu = $("#" + self.cm_id);
-                $cmenu.append(QWeb.render("FieldMany2One.context_menu", {widget: self}));
+                $cmenu.append(self.session.qweb.render("FieldMany2One.context_menu", {widget: self}));
                 var bindings = {};
                 bindings[self.cm_id + "_search"] = function() {
                     self._search_create_popup("search");
@@ -2438,7 +2437,7 @@
         });
         this.searchview.on_loaded.add_last(function () {
             var $buttons = self.searchview.$element.find(".oe_search-view-buttons");
-            $buttons.append(QWeb.render("SelectCreatePopup.search.buttons"));
+            $buttons.append(self.session.qweb.render("SelectCreatePopup.search.buttons"));
             var $cbutton = $buttons.find(".oe_selectcreatepopup-search-close");
             $cbutton.click(function() {
                 self.stop();
@@ -2511,7 +2510,7 @@
         this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form"));
         this.view_form.on_loaded.add_last(function() {
             var $buttons = self.view_form.$element.find(".oe_form_buttons");
-            $buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self}));
+            $buttons.html(self.sessions.qweb.render("SelectCreatePopup.form.buttons", {widget:self}));
             var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new");
             $nbutton.click(function() {
                 $.when(self.view_form.do_save()).then(function() {
@@ -2613,7 +2612,7 @@
         this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form"));
         this.view_form.on_loaded.add_last(function() {
             var $buttons = self.view_form.$element.find(".oe_form_buttons");
-            $buttons.html(QWeb.render("FormOpenPopup.form.buttons"));
+            $buttons.html(self.session.qweb.render("FormOpenPopup.form.buttons"));
             var $nbutton = $buttons.find(".oe_formopenpopup-form-save");
             $nbutton.click(function() {
                 self.view_form.do_save().then(function() {
@@ -2869,7 +2868,7 @@
             });
         }
 
-        var content = openerp.web.qweb.render("FieldStatus.content", {widget: this, _:_});
+        var content = this.openerp.qweb.render("FieldStatus.content", {widget: this, _:_});
         this.$element.html(content);
 
         var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}");

=== modified file 'addons/web/static/src/js/view_list.js'
--- addons/web/static/src/js/view_list.js	2011-10-25 13:24:12 +0000
+++ addons/web/static/src/js/view_list.js	2011-10-27 12:44:25 +0000
@@ -1,6 +1,5 @@
 openerp.web.list = function (openerp) {
 var _t = openerp.web._t;
-var QWeb = openerp.web.qweb;
 openerp.web.views.add('list', 'openerp.web.ListView');
 openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# */ {
     defaults: {
@@ -200,7 +199,7 @@
 
         this.setup_columns(this.fields_view.fields, grouped);
 
-        this.$element.html(QWeb.render("ListView", this));
+        this.$element.html(this.session.qweb.render("ListView", this));
         // Head hook
         this.$element.find('.all-record-selector').click(function(){
             self.$element.find('.oe-record-selector input').prop('checked',
@@ -851,7 +850,7 @@
         }
         this.$current = this.$_element.clone(true);
         this.$current.empty().append(
-            QWeb.render('ListView.rows', _.extend({
+            this.session.qweb.render('ListView.rows', _.extend({
                 render_cell: $.proxy(this, 'render_cell')}, this)));
         this.pad_table_to(5);
     },
@@ -954,7 +953,7 @@
      */
     render_record: function (record) {
         var index = this.records.indexOf(record);
-        return QWeb.render('ListView.row', {
+        return this.sessions.qweb.render('ListView.row', {
             columns: this.columns,
             options: this.options,
             record: record,

=== modified file 'addons/web/static/src/js/view_tree.js'
--- addons/web/static/src/js/view_tree.js	2011-10-12 11:14:29 +0000
+++ addons/web/static/src/js/view_tree.js	2011-10-27 12:44:25 +0000
@@ -3,7 +3,6 @@
  *---------------------------------------------------------*/
 
 openerp.web.view_tree = function(openerp) {
-var QWeb = openerp.web.qweb;
 
 openerp.web.views.add('tree', 'openerp.web.TreeView');
 openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# */{
@@ -76,7 +75,7 @@
         });
         this.fields = fields_view.fields;
         this.hook_row_click();
-        this.$element.html(QWeb.render('TreeView', {
+        this.$element.html(this.session.qweb.render('TreeView', {
             'title': this.fields_view.arch.attrs.string,
             'fields_view': this.fields_view.arch.children,
             'fields': this.fields,
@@ -192,7 +191,7 @@
             });
 
             var $curr_node = self.$element.find('#treerow_' + id);
-            var children_rows = QWeb.render('TreeView.rows', {
+            var children_rows = self.session.qweb.render('TreeView.rows', {
                 'records': records,
                 'children_field': self.children_field,
                 'fields_view': self.fields_view.arch.children,

=== modified file 'addons/web/static/src/js/views.js'
--- addons/web/static/src/js/views.js	2011-10-27 06:17:27 +0000
+++ addons/web/static/src/js/views.js	2011-10-27 12:44:25 +0000
@@ -188,7 +188,7 @@
         this.registry = session.web.views;
     },
     render: function() {
-        return session.web.qweb.render(this.template, {
+        return this.session.qweb.render(this.template, {
             self: this,
             prefix: this.element_id,
             views: this.views_src});
@@ -549,7 +549,7 @@
     start: function() {
         this._super(this);
         var self = this;
-        this.$element.html(session.web.qweb.render('Sidebar'));
+        this.$element.html(this.session.qweb.render('Sidebar'));
         this.$element.find(".toggle-sidebar").click(function(e) {
             self.do_toggle();
         });
@@ -626,7 +626,7 @@
 
         if(!$section) {
             section_id = _.uniqueId(this.element_id + '_section_' + code + '_');
-            var $section = $(session.web.qweb.render("Sidebar.section", {
+            var $section = $(this.session.qweb.render("Sidebar.section", {
                 section_id: section_id,
                 name: name,
                 classname: 'oe_sidebar_' + code,
@@ -658,7 +658,7 @@
                 this.items[items[i].element_id] = items[i];
             }
 
-            var $items = $(session.web.qweb.render("Sidebar.section.items", {items: items}));
+            var $items = $(this.session.qweb.render("Sidebar.section.items", {items: items}));
 
             $items.find('a.oe_sidebar_action_a').click(function() {
                 var item = self.items[$(this).attr('id')];
@@ -739,7 +739,7 @@
         var self = this;
         this._super();
         $.when(this.languages_loaded).then(function() {
-            self.$element.html(session.web.qweb.render('TranslateDialog', { widget: self }));
+            self.$element.html(self.session.qweb.render('TranslateDialog', { widget: self }));
             self.$element.tabs();
             if (!(self.view.translatable_fields && self.view.translatable_fields.length)) {
                 self.hide_tabs('fields');

=== modified file 'addons/web_calendar/__openerp__.py'
--- addons/web_calendar/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_calendar/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -11,5 +11,8 @@
     "css": ['static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css',
             'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css'
             ],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     'active': True
 }

=== modified file 'addons/web_calendar/static/src/js/calendar.js'
--- addons/web_calendar/static/src/js/calendar.js	2011-10-20 10:39:26 +0000
+++ addons/web_calendar/static/src/js/calendar.js	2011-10-27 12:44:25 +0000
@@ -4,8 +4,6 @@
 
 openerp.web_calendar = function(openerp) {
 var _t = openerp.web._t;
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_calendar/static/src/xml/web_calendar.xml');
 openerp.web.views.add('calendar', 'openerp.web_calendar.CalendarView');
 openerp.web_calendar.CalendarView = openerp.web.View.extend({
 // Dhtmlx scheduler ?
@@ -78,7 +76,7 @@
         for (var fld = 0; fld < this.fields_view.arch.children.length; fld++) {
             this.info_fields.push(this.fields_view.arch.children[fld].attrs.name);
         }
-        this.$element.html(QWeb.render("CalendarView", {"fields_view": this.fields_view}));
+        this.$element.html(this.session.qweb.render("CalendarView", {"fields_view": this.fields_view}));
 
         if (this.options.sidebar && this.options.sidebar_id) {
             this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
@@ -374,7 +372,7 @@
         this.$element.delegate('input:checkbox', 'change', this.on_filter_click);
     },
     on_events_loaded: function(filters) {
-        this.$div.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
+        this.$div.html(this.session.qweb.render('CalendarView.sidebar.responsible', { filters: filters }));
     },
     on_filter_click: function(e) {
         var responsibles = [],

=== modified file 'addons/web_dashboard/__openerp__.py'
--- addons/web_dashboard/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_dashboard/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -7,5 +7,8 @@
         'static/src/js/dashboard.js'
     ],
     "css": ['static/src/css/dashboard.css'],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     'active': True
 }

=== modified file 'addons/web_dashboard/static/src/js/dashboard.js'
--- addons/web_dashboard/static/src/js/dashboard.js	2011-10-22 20:20:19 +0000
+++ addons/web_dashboard/static/src/js/dashboard.js	2011-10-27 12:44:25 +0000
@@ -1,6 +1,4 @@
 openerp.web_dashboard = function(openerp) {
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_dashboard/static/src/xml/web_dashboard.xml');
 
 if (!openerp.web_dashboard) {
     /** @namespace */
@@ -109,7 +107,7 @@
                 qdict.action = {
                     attrs : self.actions_attrs[aid]
                 };
-                self.$element.find('.oe-dashboard-column:first').prepend(QWeb.render('DashBoard.action', qdict));
+                self.$element.find('.oe-dashboard-column:first').prepend(self.session.qweb.render('DashBoard.action', qdict));
                 self.do_save_dashboard();
                 self.on_load_action(result)
             });
@@ -149,7 +147,7 @@
                             title: 'Edit Layout',
                             width: 'auto',
                             height: 'auto'
-                        }).html(QWeb.render('DashBoard.layouts', qdict));
+                        }).html(this.session.qweb.render('DashBoard.layouts', qdict));
         $dialog.find('li').click(function() {
             var layout = $(this).attr('data-layout');
             $dialog.dialog('destroy');
@@ -210,7 +208,7 @@
             });
             board.columns.push(actions);
         });
-        var arch = QWeb.render('DashBoard.xml', board);
+        var arch = this.session.qweb.render('DashBoard.xml', board);
         this.rpc('/web/view/add_custom', {
             view_id: this.view.fields_view.view_id,
             arch: arch
@@ -253,7 +251,7 @@
                 children: []
             });
         }
-        return QWeb.render(this.template, this);
+        return this.session.qweb.render(this.template, this);
     },
     do_reload: function() {
         var view_manager = this.view.widget_parent,
@@ -326,7 +324,7 @@
             })
             .groupBy(function (record) {return record.category})
             .value();
-        this.$element.html(QWeb.render('ConfigOverview.content', {
+        this.$element.html(this.session.qweb.render('ConfigOverview.content', {
             completion: 100 * progress.done / progress.total,
             groups: grouped_todos
         }));
@@ -439,7 +437,7 @@
             while (applications.length) {
                 rows.push(applications.splice(0, 3));
             }
-            var tiles = QWeb.render( 'ApplicationTiles.content', {rows: rows});
+            var tiles = self.session.qweb.render( 'ApplicationTiles.content', {rows: rows});
             self.$element.append(tiles)
                 .find('.oe-dashboard-home-tile')
                     .click(function () {
@@ -455,7 +453,7 @@
             session: self.session,
             rows: openerp.web_dashboard.apps.applications
         };
-        var installer = QWeb.render('StaticHome', render_ctx);
+        var installer = this.session.qweb.render('StaticHome', render_ctx);
         self.$element.append(installer);
         this.$element.delegate('.oe-static-home-tile-text button', 'click', function () {
             self.install_module($(this).val());
@@ -525,7 +523,7 @@
         var url = _.sprintf(
             '/web_dashboard/widgets/content?session_id=%s&widget_id=%d',
             this.session.session_id, widget.id);
-        this.$element.html(QWeb.render('HomeWidget.content', {
+        this.$element.html(this.session.qweb.render('HomeWidget.content', {
             widget: widget,
             url: url
         }));

=== modified file 'addons/web_diagram/__openerp__.py'
--- addons/web_diagram/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_diagram/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -13,5 +13,8 @@
     'css' : [
         "static/src/css/base_diagram.css",
     ],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     'active': True,
 }

=== modified file 'addons/web_diagram/static/src/js/diagram.js'
--- addons/web_diagram/static/src/js/diagram.js	2011-10-26 13:52:20 +0000
+++ addons/web_diagram/static/src/js/diagram.js	2011-10-27 12:44:25 +0000
@@ -3,8 +3,6 @@
  *---------------------------------------------------------*/
 
 openerp.web_diagram = function (openerp) {
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_diagram/static/src/xml/base_diagram.xml');
 openerp.web.views.add('diagram', 'openerp.web.DiagramView');
 openerp.web.DiagramView = openerp.web.View.extend({
     searchable: false,
@@ -43,7 +41,7 @@
         this.node = this.nodes.attrs.object,
         this.connector = this.connectors.attrs.object;
 
-        this.$element.html(QWeb.render("DiagramView", this));
+        this.$element.html(this.session.qweb.render("DiagramView", this));
 
         this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() {
             var action = $(this).data('pager-action');

=== modified file 'addons/web_gantt/__openerp__.py'
--- addons/web_gantt/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_gantt/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -9,5 +9,8 @@
         'static/src/js/gantt.js'
     ],
     "css": ['static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css'],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     'active': True
 }

=== modified file 'addons/web_gantt/static/src/js/gantt.js'
--- addons/web_gantt/static/src/js/gantt.js	2011-10-24 10:10:15 +0000
+++ addons/web_gantt/static/src/js/gantt.js	2011-10-27 12:44:25 +0000
@@ -2,8 +2,6 @@
  * OpenERP web_gantt
  *---------------------------------------------------------*/
 openerp.web_gantt = function (openerp) {
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_gantt/static/src/xml/web_gantt.xml');
 openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView');
 openerp.web_gantt.GanttView = openerp.web.View.extend({
 
@@ -61,7 +59,7 @@
         self.create_gantt();
         self.get_events();
 
-        this.$element.html(QWeb.render("GanttView", {"view": this, "fields_view": this.fields_view}));
+        this.$element.html(this.session.qweb.render("GanttView", {"view": this, "fields_view": this.fields_view}));
 
     },
 

=== modified file 'addons/web_graph/__openerp__.py'
--- addons/web_graph/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_graph/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -7,5 +7,8 @@
            "static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js",
            "static/src/js/graph.js"],
     "css": ["static/lib/dhtmlxGraph/codebase/dhtmlxchart.css"],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     "active": True
 }

=== modified file 'addons/web_graph/static/src/js/graph.js'
--- addons/web_graph/static/src/js/graph.js	2011-10-07 16:21:56 +0000
+++ addons/web_graph/static/src/js/graph.js	2011-10-27 12:44:25 +0000
@@ -12,8 +12,6 @@
     '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', '#f57900',
     '#cc0000', '#d400a8'];
 
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_graph/static/src/xml/web_graph.xml');
 openerp.web.views.add('graph', 'openerp.web_graph.GraphView');
 openerp.web_graph.GraphView = openerp.web.View.extend({
 
@@ -91,7 +89,7 @@
     },
     schedule_chart: function(results) {
         var self = this;
-        this.$element.html(QWeb.render("GraphView", {
+        this.$element.html(this.session.qweb.render("GraphView", {
             "fields_view": this.fields_view,
             "chart": this.chart,
             'element_id': this.element_id

=== modified file 'addons/web_kanban/__openerp__.py'
--- addons/web_kanban/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_kanban/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -9,5 +9,8 @@
     "css": [
         "static/src/css/kanban.css"
     ],
+    'qweb' : [
+        "static/src/xml/*.xml",
+    ],
     'active': True
 }

=== modified file 'addons/web_kanban/static/src/js/kanban.js'
--- addons/web_kanban/static/src/js/kanban.js	2011-10-27 10:33:01 +0000
+++ addons/web_kanban/static/src/js/kanban.js	2011-10-27 12:44:25 +0000
@@ -1,7 +1,5 @@
 openerp.web_kanban = function (openerp) {
 
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_kanban/static/src/xml/web_kanban.xml');
 openerp.web.views.add('kanban', 'openerp.web_kanban.KanbanView');
 openerp.web_kanban.KanbanView = openerp.web.View.extend({
     init: function (parent, dataset, view_id, options) {
@@ -16,7 +14,7 @@
         this.all_display_data = false;
         this.groups = [];
         this.qweb = new QWeb2.Engine();
-        this.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
+        this.qweb.debug = this.session.debug;
         this.aggregates = {};
         this.NO_OF_COLUMNS = 3;
         this.form_dialog = new openerp.web.FormDialog(this, {}, this.options.action_views_ids.form, dataset).start();
@@ -94,7 +92,7 @@
         return s.substr(0, size) + '...';
     },
     transform_qweb_template: function(node) {
-        var qweb_prefix = QWeb.prefix;
+        var qweb_prefix = this.session.qweb.prefix;
         switch (node.tag) {
             case 'field':
                 node.tag = 't';
@@ -149,7 +147,7 @@
         if (!this.group_by.length) {
             this.do_record_group();
         }
-        this.$element.html(QWeb.render("KanbanView", {"data": self.all_display_data}));
+        this.$element.html(this.session.qweb.render("KanbanView", {"data": self.all_display_data}));
         this.on_reload_kanban();
         this.$element.find(".oe_vertical_text").hide();
         var drag_handel = false;
@@ -223,7 +221,7 @@
         var self = this,
             id = record_id,
             colors = '#FFC7C7,#FFF1C7,#E3FFC7,#C7FFD5,#C7FFFF,#C7D5FF,#E3C7FF,#FFC7F1'.split(','),
-            $cpicker = $(QWeb.render('KanbanColorPicker', { colors : colors, columns: 2 }));
+            $cpicker = $(this.session.qweb.render('KanbanColorPicker', { colors : colors, columns: 2 }));
         $e.after($cpicker);
         $cpicker.mouseenter(function() {
             clearTimeout($cpicker.data('timeoutId'));

=== modified file 'addons/web_mobile/__openerp__.py'
--- addons/web_mobile/__openerp__.py	2011-10-05 14:36:07 +0000
+++ addons/web_mobile/__openerp__.py	2011-10-27 12:44:25 +0000
@@ -3,5 +3,5 @@
     "category" : "Hidden",
     "version" : "2.0",
     "depends" : [],
-    'active': True,
+    'active': False,
 }

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to