diff options
| author | Fabien Meghazi <fme@openerp.com> | 2013-09-24 21:06:37 +0200 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2013-09-24 21:06:37 +0200 |
| commit | f79d27e9a3a9fb1d16d2af44d3f0f8a1eb4abf1a (patch) | |
| tree | 5aea34014993e5f77fa0590c16d85a8357823e60 | |
| parent | bcd3f471ad16f4a9a2ebe7c75e12d3cc1eaf6e73 (diff) | |
[FIX] Update translations
bzr revid: fme@openerp.com-20130924190637-0qgzp58lzan8j1oc
| -rw-r--r-- | addons/website/controllers/main.py | 35 | ||||
| -rw-r--r-- | addons/website/static/src/css/editor.css | 4 | ||||
| -rw-r--r-- | addons/website/static/src/css/editor.sass | 2 | ||||
| -rw-r--r-- | addons/website/static/src/js/website.translator.js | 48 | ||||
| -rw-r--r-- | addons/website/views/views.xml | 1 |
5 files changed, 57 insertions, 33 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 39361cc1917..99ee5c9fb26 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -161,10 +161,13 @@ class Website(openerp.addons.web.controllers.main.Home): return result @website.route('/website/get_view_translations', type='json', auth='admin') - def get_view_translations(self, xml_id, optional=False): - view = request.registry.get("ir.ui.view") - views = view._views_get(request.cr, request.uid, xml_id, request.context) - return [] + def get_view_translations(self, xml_id, lang=None): + lang = lang or request.context.get('lang') + views = self.customize_template_get(xml_id, optional=False) + views_ids = [view.get('id') for view in views if view.get('active')] + domain = [('type', '=', 'view'), ('res_id', 'in', views_ids), ('lang', '=', lang)] + irt = request.registry.get('ir.translation') + return irt.search_read(request.cr, request.uid, domain, ['id', 'res_id', 'value'], context=request.context) @website.route('/website/set_translations', type='json', auth='admin') def set_translations(self, data, lang): @@ -174,17 +177,21 @@ class Website(openerp.addons.web.controllers.main.Home): for t in trans: initial_content = t['initial_content'].strip() new_content = t['new_content'].strip() - old_trans = irt.search_read( - request.cr, request.uid, - [ - ('type', '=', 'view'), - ('res_id', '=', view_id), - ('lang', '=', lang), - ('src', '=', initial_content), - ]) - if old_trans: + tid = t['translation_id'] + if not tid: + old_trans = irt.search_read( + request.cr, request.uid, + [ + ('type', '=', 'view'), + ('res_id', '=', view_id), + ('lang', '=', lang), + ('src', '=', initial_content), + ]) + if old_trans: + tid = old_trans[0]['id'] + if tid: vals = {'value': new_content} - irt.write(request.cr, request.uid, [old_trans[0]['id']], vals) + irt.write(request.cr, request.uid, [tid], vals) else: new_trans = { 'name': 'website', diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index b6cc8505fed..da15826cd2d 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -124,6 +124,10 @@ table.editorbar-panel td.selected { outline-color: red; } +.oe_translatable_text.oe_dirty:empty { + padding: 0 10px; +} + .oe_translatable_todo { background: #ffffb6; } diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index b5c0b21a197..00ee3df5014 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -103,6 +103,8 @@ table.editorbar-panel outline: 1px dashed black .oe_translatable_text.oe_dirty, .oe_translatable_field.oe_dirty outline-color: red +.oe_translatable_text.oe_dirty:empty + padding: 0 10px .oe_translatable_todo background: rgb(255, 255, 182) // }}} diff --git a/addons/website/static/src/js/website.translator.js b/addons/website/static/src/js/website.translator.js index d1701db5b2f..39408234b6f 100644 --- a/addons/website/static/src/js/website.translator.js +++ b/addons/website/static/src/js/website.translator.js @@ -40,7 +40,7 @@ this.translations = null; openerp.jsonRpc('/website/get_view_translations', 'call', { 'xml_id': $(document.documentElement).data('view-xmlid'), - 'context': website.get_context(), + 'lang': website.get_context().lang, }).then(function (translations) { self.translations = translations; self.processTranslatableNodes(); @@ -48,12 +48,13 @@ }, processTranslatableNodes: function () { var self = this; - var $editables = $('[data-oe-model]') + var $editables = $('[data-oe-model="ir.ui.view"]') .not('link, script') .not('.oe_snippets,.oe_snippet, .oe_snippet *') .not('[data-oe-type]'); + $editables.each(function () { - self.transNode(this); + self.transNode(this, $(this).attr('data-oe-id')|0); }); $('.oe_translatable_text').prop('contenteditable', true).on('paste', function () { var node = $(this); @@ -64,7 +65,7 @@ $(document).on('blur keyup paste', '.oe_translatable_text[contenteditable]', function(ev) { var $node = $(this); setTimeout(function () { - // Doing stuff next tick because past and keyup are + // Doing stuff next tick because paste and keyup events are // fired before the content is changed if (ev.type == 'paste') { self.sanitizeNode($node[0]); @@ -84,26 +85,35 @@ isTranslatable: function (text) { return text && _.str.trim(text) !== ''; }, - markTranslatableNode: function (node) { + markTranslatableNode: function (node, view_id) { // TODO: link nodes with same content - node.className += ' oe_translatable_text oe_translatable_todo'; + node.className += ' oe_translatable_text'; + node.setAttribute('data-oe-translation-view-id', view_id); + var content = node.childNodes[0].data.trim(); + var trans = this.translations.filter(function (t) { + return t.res_id === view_id && t.value === content; + }); + if (trans.length) { + node.setAttribute('data-oe-translation-id', trans[0].id); + } else { + node.className += ' oe_translatable_todo'; + } node.contentEditable = true; - $(node).data('initial_content', node.childNodes[0].data); + $(node).data('initial_content', content); }, save: function () { var trans = {}; // this._super.apply(this, arguments); $('.oe_translatable_text.oe_dirty').each(function () { var $node = $(this); - var text = $node.text(); - var view_id = $(this).parents('[data-oe-model="ir.ui.view"]') - .not('[data-oe-type]').first().data().oeId; - if (!trans[view_id]) { - trans[view_id] = []; + var data = $node.data(); + if (!trans[data.oeTranslationViewId]) { + trans[data.oeTranslationViewId] = []; } - trans[view_id].push({ - initial_content: $node.data('initial_content'), - new_content: text + trans[data.oeTranslationViewId].push({ + initial_content: data.initial_content, + new_content: $node.text(), + translation_id: data.oeTranslationId || null }); }); openerp.jsonRpc('/website/set_translations', 'call', { @@ -116,11 +126,11 @@ alert("Could not save translation"); }); }, - transNode: function (node, context) { + transNode: function (node, view_id) { if (node.childNodes.length === 1 && this.isTextNode(node.childNodes[0]) && !node.getAttribute('data-oe-model')) { - this.markTranslatableNode(node); + this.markTranslatableNode(node, view_id); } else { for (var i = 0, l = node.childNodes.length; i < l; i ++) { var n = node.childNodes[i]; @@ -129,10 +139,10 @@ var container = document.createElement('span'); node.insertBefore(container, n); container.appendChild(n); - this.markTranslatableNode(container); + this.markTranslatableNode(container, view_id); } } else { - this.transNode(n); + this.transNode(n, view_id); } } } diff --git a/addons/website/views/views.xml b/addons/website/views/views.xml index b52cd5a5a9f..ca65fce6cf2 100644 --- a/addons/website/views/views.xml +++ b/addons/website/views/views.xml @@ -22,6 +22,7 @@ <meta name="openerp.company" t-att-value="res_company.name" /> <meta name="description" value="" /> <meta name="keywords" value="" /> + <script type="text/javascript" src="/web/static/lib/es5-shim/es5-shim.min.js"></script> <script type="text/javascript" src="/web/static/lib/underscore/underscore.js"></script> <script type="text/javascript" src="/web/static/lib/underscore.string/lib/underscore.string.js"></script> <script type="text/javascript" src="/web/static/lib/jquery/jquery.js"></script> |
