diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index c8c5fa41..9878dedf 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -82,8 +82,7 @@ class Website(Home): @http.route(['/website/menu/render'], type='json', auth="user", website=True) def menu_render(self, **kwargs): - menu = request.env['website.menu'].browse( - int(kwargs['menu_id'])) + menu = request.env['website.menu'].browse(int(kwargs['menu_id'])) value = { 'menu': menu, } diff --git a/addons/website/models/website.py b/addons/website/models/website.py index ca60c906..4ccce166 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -90,7 +90,7 @@ class Website(models.Model): def _compute_menu(self): Menu = self.env['website.menu'] for website in self: - website.menu_id = Menu.search([('parent_id', '=', False), ('website_id', '=', website.id)], order='id', limit=1).id + website.menu_id = Menu.search([('parent_id', '=', False), ('website_id', '=', website.id), ('menu_view', '!=', False)], order='id', limit=1).id # cf. Wizard hack in website_views.xml def noop(self, *args, **kwargs): diff --git a/addons/website/static/src/img/blocks/menu-icon.png b/addons/website/static/src/img/blocks/menu-icon.png new file mode 100644 index 00000000..cdd2200f Binary files /dev/null and b/addons/website/static/src/img/blocks/menu-icon.png differ diff --git a/addons/website/static/src/js/editor/snippets.options.js b/addons/website/static/src/js/editor/snippets.options.js index c8188872..887041c4 100644 --- a/addons/website/static/src/js/editor/snippets.options.js +++ b/addons/website/static/src/js/editor/snippets.options.js @@ -5,6 +5,7 @@ var core = require('web.core'); var Dialog = require('web.Dialog'); var widgets = require('web_editor.widget'); var options = require('web_editor.snippets.options'); +var sAnimation = require('website.content.snippets.animation'); var ajax = require('web.ajax'); var _t = core._t; @@ -937,21 +938,63 @@ options.registry.gallery_img = options.Class.extend({ }, }); options.registry.js_menu = options.Class.extend({ + onBuilt: function(){ + var self = this; + this._super.apply(this, arguments); + if (!self.$target.data('snippet-view')) { + this.$target.data("snippet-view", new sAnimation.registry.js_menu(this.$target)); + } + }, + + cleanForSave:function(){ + if(this.$target.data('menu_template') && this.$target.data('menu_id')){ + this._super.apply(this, arguments); + this.$target.empty(); + } + }, selected_menu: function (type,value){ - if(type != true) - return + if (type != true) return; var menu = eval(value); - var section=this.$target.find('.menu_view'); - section.empty(); - console.info(section) - ajax.jsonRpc('/website/menu/render', 'call', {'template': menu[1], 'menu_id':menu[0]} + this.$target.attr("data-menu_template", menu[1]); + this.$target.attr("data-menu_id", menu[0]); + this.$target.data("snippet-view").redraw(true); + }, +}); + +sAnimation.registry.js_menu = sAnimation.Class.extend({ + selector: ".s_menu", + + start: function() { + if(this.$target.data('menu_template') && this.$target.data('menu_id')){ + this.redraw(); + } + }, + + destroy: function () { + this.clean(); + this._super.apply(this, arguments); + }, + + redraw: function(debug) { + this.clean(debug); + this.build(debug); + }, + + clean: function(debug) { + if(this.$target.data('menu_template') && this.$target.data('menu_id')){ + this.$target.empty(); + } + }, + build: function(){ + var self = this; + ajax.jsonRpc('/website/menu/render', 'call', {'template': this.$target.data('menu_template'), 'menu_id':this.$target.data('menu_id')} ).then(function (result) { - $(result).appendTo(section); + $(result).appendTo(self.$target); }).fail(function () { - self.$('.o_website_links_code_error').show(); - self.$('.o_website_links_code_error').html( - "
ServerError

We are not able to render template.

"); - }) ; + self.$('.o_website_links_code_error').show(); + self.$('.o_website_links_code_error').html( + "
ServerError

We are not able to render template.

"); + }) ; }, }); }); diff --git a/addons/website/views/snippets.xml b/addons/website/views/snippets.xml index 294705a0..f4fdb56f 100644 --- a/addons/website/views/snippets.xml +++ b/addons/website/views/snippets.xml @@ -17,8 +17,10 @@ diff --git a/addons/website/views/website_views.xml b/addons/website/views/website_views.xml index da41c716..8fef97d2 100644 --- a/addons/website/views/website_views.xml +++ b/addons/website/views/website_views.xml @@ -188,6 +188,7 @@ +