From 41eeecee5a5897014f942b0893f67930b9a60dc9 Mon Sep 17 00:00:00 2001 From: ddm Date: Wed, 11 Sep 2013 00:11:54 +0200 Subject: [PATCH] [FIX] Ace editor cleanup + bugfixes bzr revid: ddm@openerp.com-20130910221154-y9i1w1omib1bp01o --- addons/website/static/src/js/website.ace.js | 54 ++++++++++++--------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js index c78f8b7f7eb..e8155c78a65 100644 --- a/addons/website/static/src/js/website.ace.js +++ b/addons/website/static/src/js/website.ace.js @@ -14,13 +14,9 @@ if (!editor) { editor = new website.ace.ViewEditor(); editor.appendTo($(document.body)); - setTimeout(function () { - editor.show.call(editor); - }, 100); } else { editor.show(); } - }, }); @@ -70,33 +66,43 @@ 'click button[data-action=close]': 'hide', }, start: function () { + var viewId = $(document.documentElement).data('view-xmlid'); + this.$viewList = this.$('#ace-view-list'); var self = this; - var currentView = $(document.documentElement).data('view-xmlid'); - this.$viewList = this.$('#ace-view-list'), - openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': currentView, 'optional': false }) + openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': viewId, 'optional': false }) .then(function(result) { - _.each(result, function (view) { - if (view.id) { - new website.ace.ViewOption(self, view).appendTo(self.$viewList); - } - }); - var editor = ace.edit(self.$('#ace-view-editor')[0]); - editor.setTheme("ace/theme/monokai"); - self.aceEditor = editor; + if (result && result.length > 0) { + _.each(result, function (view) { + if (view.id) { + new website.ace.ViewOption(self, view).appendTo(self.$viewList); + } + }); + var editor = ace.edit(self.$('#ace-view-editor')[0]); + editor.setTheme("ace/theme/monokai"); + self.aceEditor = editor; + self.show(); + } else { + throw Error("Could not load view list"); + } }); }, displayView: function () { var editor = this.aceEditor; + var viewId = this.$viewList.val(); openerp.jsonRpc('/web/dataset/call', 'call', { model: 'ir.ui.view', method: 'read', - args: [[this.$viewList.val()], ['arch']] + args: [[viewId], ['arch']] }).then(function(result) { - var xml = new website.ace.XmlDocument(result[0].arch) - var editingSession = new ace.EditSession(xml.xml); - editingSession.setMode("ace/mode/xml"); - editingSession.setUndoManager(new ace.UndoManager()); - editor.setSession(editingSession); + if (result && result.length > 0) { + var xml = new website.ace.XmlDocument(result[0].arch) + var editingSession = new ace.EditSession(xml.xml); + editingSession.setMode("ace/mode/xml"); + editingSession.setUndoManager(new ace.UndoManager()); + editor.setSession(editingSession); + } else { + throw Error("Could not load view XML"); + } }); }, formatXml: function () { @@ -105,16 +111,18 @@ }, saveView: function () { var xml = new website.ace.XmlDocument(this.aceEditor.getValue()); + var viewId = this.$viewList.val(); if (xml.isWellFormed()) { openerp.jsonRpc('/web/dataset/call', 'call', { model: 'ir.ui.view', method: 'write', - args: [[this.$viewList.val()], { 'arch': xml.xml }] + args: [[viewId], { 'arch': xml.xml }] }).then(function(result) { window.location.reload(); }); } else { - alert("Please check your XML structure!"); + // TODO Improve feedback (e.g. update 'Save' button + tooltip) + alert("Malformed XML document"); } }, hide: function () {