diff --git a/addons/website/models/website.py b/addons/website/models/website.py index dead4336ee1..d5e58d91f4e 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -752,7 +752,7 @@ class website_menu(osv.osv): _order = "sequence" # would be better to take a menu_id as argument - def get_tree(self, cr, uid, website_id, context=None): + def get_tree(self, cr, uid, website_id, menu_id=None, context=None): def make_tree(node): menu_node = dict( id=node.id, @@ -766,7 +766,10 @@ class website_menu(osv.osv): for child in node.child_id: menu_node['children'].append(make_tree(child)) return menu_node - menu = self.pool.get('website').browse(cr, uid, website_id, context=context).menu_id + if menu_id: + menu = self.browse(cr, uid, menu_id, context=context) + else: + menu = self.pool.get('website').browse(cr, uid, website_id, context=context).menu_id return make_tree(menu) def save(self, cr, uid, website_id, data, context=None): diff --git a/addons/website/static/src/js/website.contentMenu.js b/addons/website/static/src/js/website.contentMenu.js index cf60f1263f6..ab85c061a12 100644 --- a/addons/website/static/src/js/website.contentMenu.js +++ b/addons/website/static/src/js/website.contentMenu.js @@ -14,22 +14,34 @@ var $content_item = $(this); self[$content_item.data('action')](); }); - return this._super(); }, edit_menu: function() { var self = this; var context = website.get_context(); - openerp.jsonRpc('/web/dataset/call_kw', 'call', { - model: 'website.menu', - method: 'get_tree', - args: [context.website_id], - kwargs: { - context: context - }, - }).then(function (menu) { - var result = new website.contentMenu.EditMenuDialog(menu).appendTo(document.body); - return result; + var def = $.Deferred(); + if ($("[data-content_menu_id]").length) { + var select = new website.contentMenu.SelectEditMenuDialog(); + select.appendTo(document.body); + select.on('save', this, function (root) { + def.resolve(root); + }); + } else { + def.resolve(null); + } + + def.then(function (root_id) { + openerp.jsonRpc('/web/dataset/call_kw', 'call', { + model: 'website.menu', + method: 'get_tree', + args: [context.website_id, root_id], + kwargs: { + context: context + }, + }).then(function (menu) { + var result = new website.contentMenu.EditMenuDialog(menu).appendTo(document.body); + return result; + }); }); }, new_page: function() { @@ -105,6 +117,22 @@ } }); + website.contentMenu.SelectEditMenuDialog = website.editor.Dialog.extend({ + template: 'website.contentMenu.dialog.select', + init: function () { + var self = this; + self.roots = [{id: null, name: _t("Top Menu")}]; + $("[data-content_menu_id]").each(function () { + self.roots.push({id: $(this).data("content_menu_id"), name: $(this).attr("name")}); + }); + this._super(); + }, + save: function () { + this.trigger("save", parseInt(this.$el.find("select").val() || null)); + this._super(); + } + }); + website.contentMenu.EditMenuDialog = website.editor.Dialog.extend({ template: 'website.contentMenu.dialog.edit', events: _.extend({}, website.editor.Dialog.prototype.events, { diff --git a/addons/website/static/src/xml/website.contentMenu.xml b/addons/website/static/src/xml/website.contentMenu.xml index 166ec12aace..63d6a1a1437 100644 --- a/addons/website/static/src/xml/website.contentMenu.xml +++ b/addons/website/static/src/xml/website.contentMenu.xml @@ -22,9 +22,25 @@ + + + Select a Menu + Continue + + + Edit Menu +