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
+