From 6b6cd671965b074aa81beaf27c3f7d987f44f166 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 3 Jul 2012 18:17:20 +0200 Subject: [WIP] Breadcrumb bzr revid: fme@openerp.com-20120703161720-kiavze0kmxs6v5uq --- addons/web/static/src/js/views.js | 58 ++++++++++++++++++++++++++++++++++++-- addons/web/static/src/xml/base.xml | 14 ++++++++- 2 files changed, 68 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 98df8a0af0d..d623c889e55 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -15,6 +15,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_viewmanager = null; this.client_widget = null; }, + start: function() { + this._super.apply(this, arguments); + this.bread_crumb = new instance.web.BreadCrumb(this); + }, dialog_stop: function () { if (this.dialog) { this.dialog_viewmanager.destroy(); @@ -150,7 +154,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.open(); } else { this.dialog_stop(); - this.content_stop(); + //this.content_stop(); + this.bread_crumb.hide_all(); if(action.menu_id) { return this.getParent().do_action(action, function () { instance.webclient.menu.open_menu(action.menu_id); @@ -160,6 +165,11 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); + this.bread_crumb.add({ + view_manager: this.inner_viewmanager, + action: action, + title: action.name + }); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -214,6 +224,43 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }); +instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ + init: function(parent) { + this._super(parent); + this.action_manager = parent; + this.items = []; + this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); + }, + add: function(item) { + this.items.push(item); + }, + hide_all: function() { + _.each(this.items, function(i) { + i.view_manager.$element.hide(); + }); + }, + get_title: function() { + return QWeb.render('BreadCrumb', { widget: this }); + }, + on_item_clicked: function(ev) { + var $e = $(ev.target); + var index = $e.data('index'); + this.select_item(index); + }, + select_item: function(index) { + for (var i = index + 1; i < this.items.length; i += 1) { + this.remove_item(i); + } + this.items[index].view_manager.$element.show(); + }, + remove_item: function(index) { + var item = this.items.splice(index, 1)[0]; + if (item) { + item.view_manager.destroy(); + } + } +}); + instance.web.ViewManager = instance.web.Widget.extend({ template: "ViewManager", init: function(parent, dataset, views, flags) { @@ -350,7 +397,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ } }); - self.$element.find('.oe_view_title_text:first').text( + self.$element.find('.oe_view_title_text:first').html( self.display_title()); }); return view_promise; @@ -703,7 +750,12 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ }); }, display_title: function () { - return this.action.name; + var am = this.getParent(); + if (am) { + return am.bread_crumb.get_title(); + } else { + return _.escape(this.action.name); + } } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 29a7a61aa30..45cf3acafb3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -396,6 +396,18 @@ + + + + + + / + + + + + +
@@ -405,7 +417,7 @@

- +

-- cgit v1.2.3 From 7af6fa7e8f78bef83d161325db7d4268b9bd0222 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 4 Jul 2012 11:56:55 +0200 Subject: [WIP] breadcrumb bzr revid: fme@openerp.com-20120704095655-kxdhcsb5n7i0i7i6 --- addons/web/static/src/js/views.js | 45 ++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index d623c889e55..56b85f0b876 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -17,7 +17,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, start: function() { this._super.apply(this, arguments); - this.bread_crumb = new instance.web.BreadCrumb(this); + this.breadcrumb = new instance.web.BreadCrumb(this); }, dialog_stop: function () { if (this.dialog) { @@ -28,6 +28,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }, content_stop: function () { + // TODO: problem with bread crumb here. Check if those references are needed if (this.inner_viewmanager) { this.inner_viewmanager.destroy(); this.inner_viewmanager = null; @@ -124,6 +125,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ console.error("Action manager can't handle action of type " + action.type, action); return; } + console.log("Action", action); return this[type](action, on_close); }, null_action: function() { @@ -155,7 +157,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ } else { this.dialog_stop(); //this.content_stop(); - this.bread_crumb.hide_all(); + this.breadcrumb.hide_all(); if(action.menu_id) { return this.getParent().do_action(action, function () { instance.webclient.menu.open_menu(action.menu_id); @@ -165,8 +167,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); - this.bread_crumb.add({ - view_manager: this.inner_viewmanager, + this.breadcrumb.add({ + widget: this.inner_viewmanager, action: action, title: action.name }); @@ -188,10 +190,16 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); }, ir_actions_client: function (action) { - this.content_stop(); + //this.content_stop(); this.dialog_stop(); + this.breadcrumb.hide_all(); var ClientWidget = instance.web.client_actions.get_object(action.tag); (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); + this.breadcrumb.add({ + widget: this.client_widget, + action: action, + title: action.name + }); }, ir_actions_report_xml: function(action, on_closed) { var self = this; @@ -233,10 +241,11 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ }, add: function(item) { this.items.push(item); + console.log("BreadCrumb: add ", item); }, hide_all: function() { _.each(this.items, function(i) { - i.view_manager.$element.hide(); + i.widget.$element.hide(); }); }, get_title: function() { @@ -251,14 +260,30 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ for (var i = index + 1; i < this.items.length; i += 1) { this.remove_item(i); } - this.items[index].view_manager.$element.show(); + var item = this.items[index]; + if (item) { + item.widget.$element.show(); + } else { + console.warn("Breadcrumb: Can't select item at index", index); + } }, remove_item: function(index) { var item = this.items.splice(index, 1)[0]; if (item) { - item.view_manager.destroy(); + item.widget.destroy(); + } else { + console.warn("Breadcrumb: Can't remove item at index", index); } - } + }, + clear: function() { + while (this.items.length) { + this.remove_item(0); + } + }, + back: function() { + this.remove_item(this.items.length - 1); + this.select_item(this.items.length - 1); + }, }); instance.web.ViewManager = instance.web.Widget.extend({ @@ -752,7 +777,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ display_title: function () { var am = this.getParent(); if (am) { - return am.bread_crumb.get_title(); + return am.breadcrumb.get_title(); } else { return _.escape(this.action.name); } -- cgit v1.2.3 From 575455c135ac0f61da2cc4b83fe427308556eed7 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 4 Jul 2012 16:53:11 +0200 Subject: [WIP] Breadcrumb bzr revid: fme@openerp.com-20120704145311-k7akbzz0gv9lf3ps --- addons/web/static/src/js/chrome.js | 1 + addons/web/static/src/js/views.js | 51 ++++++++++++++++++++++++++++++-------- addons/web/static/src/xml/base.xml | 4 +-- 3 files changed, 43 insertions(+), 13 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index b87ebe56856..7aea1cdd5e3 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1036,6 +1036,7 @@ instance.web.WebClient = instance.web.Widget.extend({ if (options.needaction) { action.context.search_default_needaction_pending = true; } + self.action_manager.breadcrumb.clear(); self.action_manager.do_action(action); }); }, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 56b85f0b876..368dd5e840c 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -125,7 +125,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ console.error("Action manager can't handle action of type " + action.type, action); return; } - console.log("Action", action); return this[type](action, on_close); }, null_action: function() { @@ -167,11 +166,15 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); - this.breadcrumb.add({ + this.breadcrumb.push({ widget: this.inner_viewmanager, action: action, title: action.name }); + // show + // hide + // destroy + // title // all view get_title ?? } }, ir_actions_act_window_close: function (action, on_closed) { @@ -195,7 +198,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.breadcrumb.hide_all(); var ClientWidget = instance.web.client_actions.get_object(action.tag); (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); - this.breadcrumb.add({ + this.breadcrumb.push({ widget: this.client_widget, action: action, title: action.name @@ -239,13 +242,37 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.items = []; this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); }, - add: function(item) { + push: function(item) { + if (!item.show) { + item.show = function() { + item.widget.$element.show(); + }; + } + if (!item.hide) { + item.hide = function() { + return item.widget.$element.hide(); + }; + } + if (!item.destroy) { + item.destroy = function() { + return item.widget.destroy(); + }; + } + if (!item.get_title) { + item.get_title = function() { + return item.action.name; + }; + } this.items.push(item); console.log("BreadCrumb: add ", item); }, + pop: function() { + this.remove_item(this.items.length - 1); + this.select_item(this.items.length - 1); + }, hide_all: function() { _.each(this.items, function(i) { - i.widget.$element.hide(); + i.hide(); }); }, get_title: function() { @@ -262,7 +289,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } var item = this.items[index]; if (item) { - item.widget.$element.show(); + item.show(); } else { console.warn("Breadcrumb: Can't select item at index", index); } @@ -270,7 +297,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ remove_item: function(index) { var item = this.items.splice(index, 1)[0]; if (item) { - item.widget.destroy(); + item.destroy(); } else { console.warn("Breadcrumb: Can't remove item at index", index); } @@ -280,10 +307,6 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.remove_item(0); } }, - back: function() { - this.remove_item(this.items.length - 1); - this.select_item(this.items.length - 1); - }, }); instance.web.ViewManager = instance.web.Widget.extend({ @@ -1141,6 +1164,12 @@ instance.web.View = instance.web.Widget.extend({ } this.translate_dialog.open(field); }, + /** + * Get the title of the view + */ + get_title: function() { + return ""; + }, /** * Fetches and executes the action identified by ``action_data``. * diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 45cf3acafb3..b5b4c708b97 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -400,11 +400,11 @@ - + / - + -- cgit v1.2.3 From 1a2c33faa2fcd3112c76b287c19cd3be0538e728 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 5 Jul 2012 10:04:50 +0200 Subject: [WIP] breadcrumb bzr revid: fme@openerp.com-20120705080450-j1o7p0vebjtd4ch3 --- addons/web/static/src/js/view_form.js | 2 ++ addons/web/static/src/js/views.js | 45 ++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 16 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d40a1760e81..607f3283179 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -287,10 +287,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM on_record_loaded: function(record) { var self = this, set_values = []; if (!record) { + this.set({ 'title' : undefined }); this.do_warn("Form", "The record could not be found in the database.", true); return $.Deferred().reject(); } this.datarecord = record; + this.set({ 'title' : record.id ? record.name : "New record" }); if (this.qweb) { this.kill_current_form(); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 368dd5e840c..f4ec3d4458d 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -156,25 +156,44 @@ instance.web.ActionManager = instance.web.Widget.extend({ } else { this.dialog_stop(); //this.content_stop(); - this.breadcrumb.hide_all(); + this.breadcrumb.hide_items(); if(action.menu_id) { return this.getParent().do_action(action, function () { instance.webclient.menu.open_menu(action.menu_id); }); } this.inner_action = action; - this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); + var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); + this.breadcrumb.push({ - widget: this.inner_viewmanager, + widget: inner_viewmanager, + show: function() { + inner_viewmanager.$element.show(); + inner_viewmanager.on_mode_switch(action.view_mode.split(',')[0]); + }, action: action, title: action.name }); - // show - // hide - // destroy - // title // all view get_title ?? + inner_viewmanager.on_mode_switch.add_first(function(mode) { + if (mode === 'form' && !inner_viewmanager.views[mode].controller) { + self.breadcrumb.push({ + widget: inner_viewmanager, + show: function() { + inner_viewmanager.$element.show(); + inner_viewmanager.on_mode_switch('form'); + }, + action: action, + get_title: function() { + var form = inner_viewmanager.views['form'].controller; + if (form) { + return form.get('title'); + } + } + }); + } + }); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -195,7 +214,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ ir_actions_client: function (action) { //this.content_stop(); this.dialog_stop(); - this.breadcrumb.hide_all(); + this.breadcrumb.hide_items(); var ClientWidget = instance.web.client_actions.get_object(action.tag); (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); this.breadcrumb.push({ @@ -260,7 +279,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } if (!item.get_title) { item.get_title = function() { - return item.action.name; + return item.title || item.action.name; }; } this.items.push(item); @@ -270,7 +289,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.remove_item(this.items.length - 1); this.select_item(this.items.length - 1); }, - hide_all: function() { + hide_items: function() { _.each(this.items, function(i) { i.hide(); }); @@ -1164,12 +1183,6 @@ instance.web.View = instance.web.Widget.extend({ } this.translate_dialog.open(field); }, - /** - * Get the title of the view - */ - get_title: function() { - return ""; - }, /** * Fetches and executes the action identified by ``action_data``. * -- cgit v1.2.3 From 17b09849fb6c4d54796bc7e953264315d8f16acf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 5 Jul 2012 16:22:46 +0200 Subject: [WIP] Breakpoint commit. Gonna refactor everything bzr revid: fme@openerp.com-20120705142246-yelkx5eqxxzyf45i --- addons/web/static/src/js/views.js | 108 ++++++++++++++++++------------------- addons/web/static/src/xml/base.xml | 2 +- 2 files changed, 54 insertions(+), 56 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f4ec3d4458d..73dd9002a52 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -166,34 +166,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); - - this.breadcrumb.push({ - widget: inner_viewmanager, - show: function() { - inner_viewmanager.$element.show(); - inner_viewmanager.on_mode_switch(action.view_mode.split(',')[0]); - }, - action: action, - title: action.name - }); - inner_viewmanager.on_mode_switch.add_first(function(mode) { - if (mode === 'form' && !inner_viewmanager.views[mode].controller) { - self.breadcrumb.push({ - widget: inner_viewmanager, - show: function() { - inner_viewmanager.$element.show(); - inner_viewmanager.on_mode_switch('form'); - }, - action: action, - get_title: function() { - var form = inner_viewmanager.views['form'].controller; - if (form) { - return form.get('title'); - } - } - }); - } - }); + this.breadcrumb.push_actionmanager(inner_viewmanager); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -219,7 +192,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); this.breadcrumb.push({ widget: this.client_widget, - action: action, title: action.name }); }, @@ -269,34 +241,62 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } if (!item.hide) { item.hide = function() { - return item.widget.$element.hide(); + item.widget.$element.hide(); }; } if (!item.destroy) { item.destroy = function() { - return item.widget.destroy(); + item.widget.destroy(); }; } if (!item.get_title) { item.get_title = function() { - return item.title || item.action.name; + return item.title || item.widget.get('title'); }; } this.items.push(item); - console.log("BreadCrumb: add ", item); + }, + push_actionmanager: function(am) { + var self = this; + var bookmarked_view = am.active_view; + this.push({ + widget: am, + show: function() { + am.$element.show(); + am.on_mode_switch(current_view); + } + }); + am.on_mode_switch.add_first(function(mode) { + if (mode === 'form' && !am.views[mode].controller) { + self.push({ + widget: am, + show: function() { + am.$element.show(); + inner_viewmanager.on_mode_switch('form'); + }, + action: action, + get_title: function() { + var form = inner_viewmanager.views['form'].controller; + if (form) { + return form.get('title'); + } + } + }); + } + }); }, pop: function() { this.remove_item(this.items.length - 1); this.select_item(this.items.length - 1); }, + get_title: function() { + return QWeb.render('BreadCrumb', { widget: this }); + }, hide_items: function() { _.each(this.items, function(i) { i.hide(); }); }, - get_title: function() { - return QWeb.render('BreadCrumb', { widget: this }); - }, on_item_clicked: function(ev) { var $e = $(ev.target); var index = $e.data('index'); @@ -380,6 +380,14 @@ instance.web.ViewManager = instance.web.Widget.extend({ if (this.flags.views_switcher === false) { this.$element.find('.oe_view_manager_switch').hide(); } + this.on('change:title', this, function() { + var breadcrumb = self.getParent().breadcrumb; + if (breadcrumb) { + self.$element.find('.oe_view_title_text:first').html(breadcrumb.get_title()); + } else { + self.$element.find('.oe_view_title_text:first').text(self.get('title')); + } + }); // If no default view defined, switch to the first one in sequence var default_view = this.flags.default_view || this.views_src[0].view_type; return this.on_mode_switch(default_view); @@ -416,10 +424,16 @@ instance.web.ViewManager = instance.web.Widget.extend({ } } var controller = new controllerclass(this, this.dataset, view.view_id, options); + controller.on("change:title", this, function() { + if (self.active_view === view_type) { + self.set({ 'title' : controller.get('title') }); + } + }); if (view.embedded_view) { controller.set_embedded_view(view.embedded_view); } controller.do_switch_view.add_last(_.bind(this.switch_view, this)); + controller.do_prev_view.add_last(this.on_prev_view); var container = this.$element.find(".oe_view_manager_view_" + view_type); view_promise = controller.appendTo(container); @@ -463,9 +477,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ } } }); - - self.$element.find('.oe_view_title_text:first').html( - self.display_title()); }); return view_promise; }, @@ -561,14 +572,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ */ on_action_executed: function () { }, - display_title: function () { - var view = this.views[this.active_view]; - if (view) { - // ick - return view.controller.fields_view.arch.attrs.string; - } - return ''; - } }); instance.web.ViewManagerAction = instance.web.ViewManager.extend({ @@ -613,7 +616,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ if (this.session.hidden_menutips) { return; } - this.session.hidden_menutips = {} + this.session.hidden_menutips = {}; }, /** * Initializes the ViewManagerAction: sets up the searchview (if the @@ -816,13 +819,8 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ self.views[self.active_view].controller.do_load_state(state, warm); }); }, - display_title: function () { - var am = this.getParent(); - if (am) { - return am.breadcrumb.get_title(); - } else { - return _.escape(this.action.name); - } + set_title: function (title) { + this.getParent().breadcrumb.update(); } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index b5b4c708b97..c81b00d623c 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -417,7 +417,7 @@

- +

-- cgit v1.2.3 From 4f04c1b80b76eaf885cc298fc87554a1372a8cc2 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 5 Jul 2012 21:22:27 +0200 Subject: [WIP] Refactor views title managment + lazy loading bzr revid: fme@openerp.com-20120705192227-r4hu0kcq3ngqsud4 --- addons/web/static/src/js/views.js | 154 ++++++++++++++++++++----------------- addons/web/static/src/xml/base.xml | 2 +- 2 files changed, 86 insertions(+), 70 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 73dd9002a52..dfb63808fac 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -164,9 +164,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ } this.inner_action = action; var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); + this.breadcrumb.push_actionmanager(inner_viewmanager); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); - this.breadcrumb.push_actionmanager(inner_viewmanager); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -254,36 +254,34 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ return item.title || item.widget.get('title'); }; } + console.log("breadcrumb push", item); this.items.push(item); }, - push_actionmanager: function(am) { + push_actionmanager: function(am, view_type) { var self = this; - var bookmarked_view = am.active_view; + var bookmarked_view = view_type || am.active_view || am.views_src[0].view_type; this.push({ widget: am, show: function() { am.$element.show(); - am.on_mode_switch(current_view); - } - }); - am.on_mode_switch.add_first(function(mode) { - if (mode === 'form' && !am.views[mode].controller) { - self.push({ - widget: am, - show: function() { - am.$element.show(); - inner_viewmanager.on_mode_switch('form'); - }, - action: action, - get_title: function() { - var form = inner_viewmanager.views['form'].controller; - if (form) { - return form.get('title'); - } - } - }); + if (am.active_view !== bookmarked_view) { + am.on_mode_switch(bookmarked_view); + am.set_title(); + } + }, + get_title: function() { + return am.views[bookmarked_view].controller.get('title'); } }); + if (bookmarked_view !== 'form') { + am.on_mode_switch.add_first(function(mode) { + if (mode === 'form') { + self.push_actionmanager(am, 'form'); + } else { + // select previous to form and remove form + } + }); + } }, pop: function() { this.remove_item(this.items.length - 1); @@ -314,9 +312,16 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } }, remove_item: function(index) { + console.log("Breadcrumb remove index", index); var item = this.items.splice(index, 1)[0]; if (item) { - item.destroy(); + var dups = _.filter(this.items, function(it) { + return item.widget === it.widget; + }); + if (dups.length === 0) { + console.log("Breadcrumb Destroy", item); + item.destroy(); + } } else { console.warn("Breadcrumb: Can't remove item at index", index); } @@ -380,14 +385,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ if (this.flags.views_switcher === false) { this.$element.find('.oe_view_manager_switch').hide(); } - this.on('change:title', this, function() { - var breadcrumb = self.getParent().breadcrumb; - if (breadcrumb) { - self.$element.find('.oe_view_title_text:first').html(breadcrumb.get_title()); - } else { - self.$element.find('.oe_view_title_text:first').text(self.get('title')); - } - }); // If no default view defined, switch to the first one in sequence var default_view = this.flags.default_view || this.views_src[0].view_type; return this.on_mode_switch(default_view); @@ -412,41 +409,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ this.active_view = view_type; if (!view.controller) { - // Lazy loading of views - var controllerclass = this.registry.get_object(view_type); - var options = _.clone(view.options); - if (view_type === "form" && this.action) { - switch (this.action.target) { - case 'new': - case 'inline': - options.initial_mode = 'edit'; - break; - } - } - var controller = new controllerclass(this, this.dataset, view.view_id, options); - controller.on("change:title", this, function() { - if (self.active_view === view_type) { - self.set({ 'title' : controller.get('title') }); - } - }); - if (view.embedded_view) { - controller.set_embedded_view(view.embedded_view); - } - controller.do_switch_view.add_last(_.bind(this.switch_view, this)); - - controller.do_prev_view.add_last(this.on_prev_view); - var container = this.$element.find(".oe_view_manager_view_" + view_type); - view_promise = controller.appendTo(container); - this.views[view_type].controller = controller; - this.views[view_type].deferred.resolve(view_type); - $.when(view_promise).then(function() { - self.on_controller_inited(view_type, controller); - if (self.searchview - && self.flags.auto_search - && view.controller.searchable !== false) { - self.searchview.ready.then(self.searchview.do_search); - } - }); + view_promise = this.do_create_view(view_type); } else if (this.searchview && self.flags.auto_search && view.controller.searchable !== false) { @@ -480,6 +443,50 @@ instance.web.ViewManager = instance.web.Widget.extend({ }); return view_promise; }, + do_create_view: function(view_type) { + // Lazy loading of views + var self = this; + var view = this.views[view_type]; + var controllerclass = this.registry.get_object(view_type); + var options = _.clone(view.options); + if (view_type === "form" && this.action) { + switch (this.action.target) { + case 'new': + case 'inline': + options.initial_mode = 'edit'; + break; + } + } + var controller = new controllerclass(this, this.dataset, view.view_id, options); + + controller.on("change:title", this, function() { + if (self.active_view === view_type) { + self.set_title(controller.get('title')); + } + }); + + if (view.embedded_view) { + controller.set_embedded_view(view.embedded_view); + } + controller.do_switch_view.add_last(_.bind(this.switch_view, this)); + + controller.do_prev_view.add_last(this.on_prev_view); + var container = this.$element.find(".oe_view_manager_view_" + view_type); + var view_promise = controller.appendTo(container); + this.views[view_type].controller = controller; + this.views[view_type].deferred.resolve(view_type); + return $.when(view_promise).then(function() { + self.on_controller_inited(view_type, controller); + if (self.searchview + && self.flags.auto_search + && view.controller.searchable !== false) { + self.searchview.ready.then(self.searchview.do_search); + } + }); + }, + set_title: function(title) { + this.$element.find('.oe_view_title_text:first').text(title); + }, /** * Method used internally when a view asks to switch view. This method is meant * to be extended by child classes to change the default behavior, which simply @@ -798,6 +805,18 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ }); }, + do_create_view: function(view_type) { + var r = this._super.apply(this, arguments); + var view = this.views[view_type].controller; + view.set({ 'title': this.action.name }); + return r; + }, + set_title: function(title) { + var breadcrumb = this.getParent().breadcrumb; + if (breadcrumb) { + this.$element.find('.oe_breadcrumb_title:first').html(breadcrumb.get_title()); + } + }, do_push_state: function(state) { if (this.getParent() && this.getParent().do_push_state) { state["view_type"] = this.active_view; @@ -819,9 +838,6 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ self.views[self.active_view].controller.do_load_state(state, warm); }); }, - set_title: function (title) { - this.getParent().breadcrumb.update(); - } }); instance.web.Sidebar = instance.web.Widget.extend({ diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c81b00d623c..7dbf3bd4d7a 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -399,7 +399,7 @@ - + / -- cgit v1.2.3 From 648ea3e7ca278796ac781f1ba918235fe31cbf4a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 5 Jul 2012 21:27:01 +0200 Subject: [WIP] Breadcrumb: compact code, fix client actions bzr revid: fme@openerp.com-20120705192701-3lzkdadaqtjo7wm0 --- addons/web/static/src/js/views.js | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index dfb63808fac..e6d404701a1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -189,11 +189,12 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_stop(); this.breadcrumb.hide_items(); var ClientWidget = instance.web.client_actions.get_object(action.tag); - (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); + this.client_widget = new ClientWidget(this, action.params); this.breadcrumb.push({ widget: this.client_widget, title: action.name }); + this.client_widget.appendTo(this.$element); }, ir_actions_report_xml: function(action, on_closed) { var self = this; @@ -234,26 +235,18 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); }, push: function(item) { - if (!item.show) { - item.show = function() { - item.widget.$element.show(); - }; - } - if (!item.hide) { - item.hide = function() { - item.widget.$element.hide(); - }; - } - if (!item.destroy) { - item.destroy = function() { - item.widget.destroy(); - }; - } - if (!item.get_title) { - item.get_title = function() { - return item.title || item.widget.get('title'); - }; - } + item.show = item.show || function() { + item.widget.$element.show(); + }; + item.hide = item.hide || function() { + item.widget.$element.hide(); + }; + item.destroy = item.destroy || function() { + item.widget.destroy(); + }; + item.get_title = item.get_title || function() { + return item.title || item.widget.get('title'); + }; console.log("breadcrumb push", item); this.items.push(item); }, -- cgit v1.2.3 From 607730850992b8b1bbf27a4172fb99c5e5ec9c24 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 9 Jul 2012 12:32:15 +0200 Subject: [WIP] Pop breadcrumb on mode switch != form bzr revid: fme@openerp.com-20120709103215-bemcmt5silu5u4je --- addons/web/static/src/js/views.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index e6d404701a1..7bf462faf51 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -130,6 +130,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ null_action: function() { this.dialog_stop(); this.content_stop(); + this.breadcrumb.clear(); }, ir_actions_act_window: function (action, on_close) { var self = this; @@ -255,6 +256,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ var bookmarked_view = view_type || am.active_view || am.views_src[0].view_type; this.push({ widget: am, + view: bookmarked_view, show: function() { am.$element.show(); if (am.active_view !== bookmarked_view) { @@ -271,7 +273,10 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ if (mode === 'form') { self.push_actionmanager(am, 'form'); } else { - // select previous to form and remove form + var last = self.items[self.items.length - 1]; + if (last.widget === am && last.view === 'form') { + self.pop(); + } } }); } -- cgit v1.2.3 From f6d6f85a089188c3eaf6b6ad7e57df2866122242 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 10 Jul 2012 10:36:33 +0200 Subject: [WIP] breakpoint bzr revid: fme@openerp.com-20120710083633-ti8s1qg5s0tuhwla --- addons/web/static/src/js/views.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 7bf462faf51..dcd29211db1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -261,6 +261,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ am.$element.show(); if (am.active_view !== bookmarked_view) { am.on_mode_switch(bookmarked_view); + console.log("breadcrunb pushaction man ager set title on show"); am.set_title(); } }, @@ -273,8 +274,8 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ if (mode === 'form') { self.push_actionmanager(am, 'form'); } else { - var last = self.items[self.items.length - 1]; - if (last.widget === am && last.view === 'form') { + var previous = self.items[self.items.length - 1]; + if (previous.widget === am && previous && previous.view === 'form') { self.pop(); } } @@ -459,6 +460,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ controller.on("change:title", this, function() { if (self.active_view === view_type) { + console.log("controller.on change:title"); self.set_title(controller.get('title')); } }); -- cgit v1.2.3 From 14c66c73767c293d99145a60d8dca5ffe2ffa512 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 10 Jul 2012 18:29:13 +0200 Subject: [WIP] Refactor again bzr revid: fme@openerp.com-20120710162913-6gyda8y3e6vu86ph --- addons/web/static/src/js/views.js | 94 +++++++++++++++++++++++--------------- addons/web/static/src/xml/base.xml | 12 ----- 2 files changed, 56 insertions(+), 50 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index eaf9487473e..df57dc8e9be 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -165,7 +165,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ } this.inner_action = action; var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); - this.breadcrumb.push_actionmanager(inner_viewmanager); + this.breadcrumb.push_viewmanager(inner_viewmanager); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + (action.target || 'current')); } @@ -236,6 +236,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); }, push: function(item) { + item.id = _.uniqueId('breadcrumb_'); item.show = item.show || function() { item.widget.$element.show(); }; @@ -251,43 +252,58 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ console.log("breadcrumb push", item); this.items.push(item); }, - push_actionmanager: function(am, view_type) { + push_viewmanager: function(vm, view_type) { var self = this; - var bookmarked_view = view_type || am.active_view || am.views_src[0].view_type; + var bookmarked_view = view_type || vm.active_view || vm.views_src[0].view_type; + var views = [bookmarked_view]; + vm.on_mode_switch.add(function(mode) { + var last = views.slice(-1)[0]; + if (mode !== last) { + if (mode !== 'form') { + views.length = 0; + } + views.push(mode); + } + console.log(views); + }); this.push({ - widget: am, + widget: vm, view: bookmarked_view, - show: function() { - am.$element.show(); - if (am.active_view !== bookmarked_view) { - am.on_mode_switch(bookmarked_view); - console.log("breadcrunb pushaction man ager set title on show"); - am.set_title(); + show: function($e) { + var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + var view_to_select = views[index]; + vm.$element.show(); + if (vm.active_view !== view_to_select) { + vm.on_mode_switch(view_to_select); + vm.set_title(); } }, get_title: function() { - return am.views[bookmarked_view].controller.get('title'); + return _.map(views, function(v) { + return vm.views[v].controller.get('title'); + }); } }); - if (bookmarked_view !== 'form') { - am.on_mode_switch.add_first(function(mode) { - if (mode === 'form') { - self.push_actionmanager(am, 'form'); + }, + get_title: function() { + var titles = []; + for (var i = 0; i < this.items.length; i += 1) { + var item = this.items[i]; + var tit = item.get_title(); + if (!_.isArray(tit)) { + tit = [tit]; + } + for (var j = 0; j < tit.length; j += 1) { + var t= tit[j]; + var label = _.escape(t); + if (i === this.items.length - 1 && j === tit.length - 1) { + titles.push(label); } else { - var previous = self.items[self.items.length - 1]; - if (previous.widget === am && previous && previous.view === 'form') { - self.pop(); - } + titles.push(_.str.sprintf('%s', item.id, label)); } - }); + } } - }, - pop: function() { - this.remove_item(this.items.length - 1); - this.select_item(this.items.length - 1); - }, - get_title: function() { - return QWeb.render('BreadCrumb', { widget: this }); + return titles.join(' / '); }, hide_items: function() { _.each(this.items, function(i) { @@ -296,16 +312,19 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ }, on_item_clicked: function(ev) { var $e = $(ev.target); - var index = $e.data('index'); - this.select_item(index); - }, - select_item: function(index) { - for (var i = index + 1; i < this.items.length; i += 1) { - this.remove_item(i); + var item; + for (var i = 0; i < this.items.length; i += 1) { + var it = this.items[i]; + if (it.id == $e.data('id')) { + item = it; + continue; + } + if (item) { + this.remove_item(i); + } } - var item = this.items[index]; if (item) { - item.show(); + item.show($e); } else { console.warn("Breadcrumb: Can't select item at index", index); } @@ -315,9 +334,9 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ var item = this.items.splice(index, 1)[0]; if (item) { var dups = _.filter(this.items, function(it) { - return item.widget === it.widget; + return item.widget === it.widget; }); - if (dups.length === 0) { + if (!dups.length) { console.log("Breadcrumb Destroy", item); item.destroy(); } @@ -460,7 +479,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ controller.on("change:title", this, function() { if (self.active_view === view_type) { - console.log("controller.on change:title"); self.set_title(controller.get('title')); } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index fe640ee4085..42ca90c4df4 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -396,18 +396,6 @@
- - - - - - / - - - - - -
-- cgit v1.2.3 From d17a664875f70b44cf068e0816fc9580a445a67c Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 10 Jul 2012 18:43:44 +0200 Subject: [WIP] Clean code bzr revid: fme@openerp.com-20120710164344-pnnvl7ygs7e96pnx --- addons/web/static/src/js/views.js | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index df57dc8e9be..3b5f3466cf1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -231,8 +231,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ init: function(parent) { this._super(parent); - this.action_manager = parent; this.items = []; + this.action_manager = parent; this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); }, push: function(item) { @@ -249,13 +249,11 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ item.get_title = item.get_title || function() { return item.title || item.widget.get('title'); }; - console.log("breadcrumb push", item); this.items.push(item); }, - push_viewmanager: function(vm, view_type) { + push_viewmanager: function(vm) { var self = this; - var bookmarked_view = view_type || vm.active_view || vm.views_src[0].view_type; - var views = [bookmarked_view]; + var views = [vm.active_view || vm.views_src[0].view_type]; vm.on_mode_switch.add(function(mode) { var last = views.slice(-1)[0]; if (mode !== last) { @@ -264,11 +262,9 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } views.push(mode); } - console.log(views); }); this.push({ widget: vm, - view: bookmarked_view, show: function($e) { var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); var view_to_select = views[index]; @@ -294,8 +290,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ tit = [tit]; } for (var j = 0; j < tit.length; j += 1) { - var t= tit[j]; - var label = _.escape(t); + var label = _.escape(tit[j]); if (i === this.items.length - 1 && j === tit.length - 1) { titles.push(label); } else { @@ -320,28 +315,21 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ continue; } if (item) { + // Remove items after selected item this.remove_item(i); } } - if (item) { - item.show($e); - } else { - console.warn("Breadcrumb: Can't select item at index", index); - } + item.show($e); }, remove_item: function(index) { - console.log("Breadcrumb remove index", index); var item = this.items.splice(index, 1)[0]; if (item) { var dups = _.filter(this.items, function(it) { - return item.widget === it.widget; + return item.widget === it.widget; }); if (!dups.length) { - console.log("Breadcrumb Destroy", item); item.destroy(); } - } else { - console.warn("Breadcrumb: Can't remove item at index", index); } }, clear: function() { -- cgit v1.2.3 From 88a8f5b5bd9fe4bf351fed00690f6bde1a6f694a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 14:47:43 +0200 Subject: [WIP] Rename client_widget and inner_viewmanager to inner_widget bzr revid: fme@openerp.com-20120711124743-subh6412gul0v0k9 --- addons/web/static/src/js/chrome.js | 4 ++-- addons/web/static/src/js/view_editor.js | 8 ++++---- addons/web/static/src/js/views.js | 34 ++++++++++++++------------------- 3 files changed, 20 insertions(+), 26 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 7aea1cdd5e3..e49e9ce1cbd 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -822,8 +822,8 @@ instance.web.UserMenu = instance.web.Widget.extend({ {text: _t("Change password"), click: function(){ self.change_password(); }}, {text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }}, {text: _t("Save"), click: function(){ - var inner_viewmanager = action_manager.inner_viewmanager; - inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save() + var inner_widget = action_manager.inner_widget; + inner_widget.views[inner_widget.active_view].controller.do_save() .then(function() { self.dialog.destroy(); // needs to refresh interface in case language changed diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 8733a191b21..7c333dccbfc 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -53,7 +53,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ this.main_view_id = this.parent.fields_view.view_id; this.action_manager = new instance.web.ActionManager(this); $.when(this.action_manager.do_action(action)).then(function() { - var viewmanager = self.action_manager.inner_viewmanager, + var viewmanager = self.action_manager.inner_widget, controller = viewmanager.views[viewmanager.active_view].controller; self.action_manager.appendTo(self.view_edit_dialog.$element); self.action_manager.renderElement(self.view_edit_dialog); @@ -88,7 +88,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ } else { $.when(self.do_save_view(view_values)).then(function() { self.create_view_dialog.close(); - var controller = self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller; + var controller = self.action_manager.inner_widget.views[self.action_manager.inner_widget.active_view].controller; controller.reload_content(); }); } @@ -167,7 +167,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ do_delete_view: function() { var self = this; if (confirm(_t("Do you really want to remove this view?"))) { - var controller = this.action_manager.inner_viewmanager.views[this.action_manager.inner_viewmanager.active_view].controller; + var controller = this.action_manager.inner_widget.views[this.action_manager.inner_widget.active_view].controller; this.dataset.unlink([this.main_view_id]).then(function() { controller.reload_content(); self.main_view_id = self.parent.fields_view.view_id; @@ -397,7 +397,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ action_manager.do_action(action); }}, {text: _t("Close"), click: function(){ - self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller.reload_content(); + self.action_manager.inner_widget.views[self.action_manager.inner_widget.active_view].controller.reload_content(); self.edit_xml_dialog.close(); }} ] diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 3b5f3466cf1..640044e1742 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -10,10 +10,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ init: function(parent) { this._super(parent); this.inner_action = null; - this.inner_viewmanager = null; + this.inner_widget = null; this.dialog = null; this.dialog_viewmanager = null; - this.client_widget = null; }, start: function() { this._super.apply(this, arguments); @@ -28,14 +27,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }, content_stop: function () { - // TODO: problem with bread crumb here. Check if those references are needed - if (this.inner_viewmanager) { - this.inner_viewmanager.destroy(); - this.inner_viewmanager = null; - } - if (this.client_widget) { - this.client_widget.destroy(); - this.client_widget = null; + if (this.inner_widget) { + this.inner_widget.destroy(); + this.inner_widget = null; } }, do_push_state: function(state) { @@ -54,7 +48,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ var self = this, action_loaded; if (state.action_id) { - var run_action = (!this.inner_viewmanager) || this.inner_viewmanager.action.id !== state.action_id; + var run_action = (!this.inner_widget && !this.inner_widget.action) || this.inner_widget.action.id !== state.action_id; if (run_action) { this.null_action(); action_loaded = this.do_action(state.action_id); @@ -94,8 +88,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ } $.when(action_loaded || null).then(function() { - if (self.inner_viewmanager) { - self.inner_viewmanager.do_load_state(state, warm); + if (self.inner_widget && self.inner_widget.do_load_state) { + self.inner_widget.do_load_state(state, warm); } }); }, @@ -164,10 +158,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); } this.inner_action = action; - var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); - this.breadcrumb.push_viewmanager(inner_viewmanager); - this.inner_viewmanager.appendTo(this.$element); - this.inner_viewmanager.$element.addClass("oe_view_manager_" + (action.target || 'current')); + var inner_widget = this.inner_widget = new instance.web.ViewManagerAction(this, action); + this.breadcrumb.push_viewmanager(inner_widget); + this.inner_widget.appendTo(this.$element); + this.inner_widget.$element.addClass("oe_view_manager_" + (action.target || 'current')); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -190,12 +184,12 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_stop(); this.breadcrumb.hide_items(); var ClientWidget = instance.web.client_actions.get_object(action.tag); - this.client_widget = new ClientWidget(this, action.params); + this.inner_widget = new ClientWidget(this, action.params); this.breadcrumb.push({ - widget: this.client_widget, + widget: this.inner_widget, title: action.name }); - this.client_widget.appendTo(this.$element); + this.inner_widget.appendTo(this.$element); }, ir_actions_report_xml: function(action, on_closed) { var self = this; -- cgit v1.2.3 From 4f51eac39299e93533afbfe60aa3279ba3a9e568 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 14:55:11 +0200 Subject: [WIP] Removed content_stop() bzr revid: fme@openerp.com-20120711125511-b5ku6gigunx2csgz --- addons/web/static/src/js/views.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 640044e1742..9829b89b7a6 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -3,6 +3,7 @@ *---------------------------------------------------------*/ openerp.web.views = function(instance) { + this.action_manager.inner_widget = item.widget; var QWeb = instance.web.qweb, _t = instance.web._t; @@ -26,12 +27,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog = null; } }, - content_stop: function () { - if (this.inner_widget) { - this.inner_widget.destroy(); - this.inner_widget = null; - } - }, do_push_state: function(state) { if (this.getParent() && this.getParent().do_push_state) { if (this.inner_action) { @@ -123,7 +118,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, null_action: function() { this.dialog_stop(); - this.content_stop(); this.breadcrumb.clear(); }, ir_actions_act_window: function (action, on_close) { @@ -150,7 +144,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.open(); } else { this.dialog_stop(); - //this.content_stop(); this.breadcrumb.hide_items(); if(action.menu_id) { return this.getParent().do_action(action, function () { @@ -180,7 +173,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); }, ir_actions_client: function (action) { - //this.content_stop(); this.dialog_stop(); this.breadcrumb.hide_items(); var ClientWidget = instance.web.client_actions.get_object(action.tag); @@ -259,8 +251,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ }); this.push({ widget: vm, - show: function($e) { - var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + show: function(index, $e) { var view_to_select = views[index]; vm.$element.show(); if (vm.active_view !== view_to_select) { @@ -313,7 +304,9 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.remove_item(i); } } - item.show($e); + var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + item.show(index, $e); + this.action_manager.inner_widget = item.widget; }, remove_item: function(index) { var item = this.items.splice(index, 1)[0]; -- cgit v1.2.3 From 1144a72e143c1d279e01addc709626708f3b5fdb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 15:02:52 +0200 Subject: [WIP] Move view manager addClass to ViewManagerAction#start bzr revid: fme@openerp.com-20120711130252-i9erdzo93p6siteq --- addons/web/static/src/js/views.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 9829b89b7a6..07ee5c53e3e 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -140,7 +140,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.dialog_title = action.name; this.dialog_viewmanager = new instance.web.ViewManagerAction(this.dialog, action); this.dialog_viewmanager.appendTo(this.dialog.$element); - this.dialog_viewmanager.$element.addClass("oe_view_manager_" + (action.target || 'current')); this.dialog.open(); } else { this.dialog_stop(); @@ -154,7 +153,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ var inner_widget = this.inner_widget = new instance.web.ViewManagerAction(this, action); this.breadcrumb.push_viewmanager(inner_widget); this.inner_widget.appendTo(this.$element); - this.inner_widget.$element.addClass("oe_view_manager_" + (action.target || 'current')); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -644,6 +642,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ var manager_ready = $.when(searchview_loaded, main_view_loaded); this.$element.find('.oe_debug_view').change(this.on_debug_changed); + this.$element.addClass("oe_view_manager_" + (this.action.target || 'current')); if (this.action.help && !this.flags.low_profile) { var Users = new instance.web.DataSet(self, 'res.users'), -- cgit v1.2.3 From 7564a0c1b1d396159bdb89f4ba6d80b911966897 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 15:05:25 +0200 Subject: [WIP] Renamed dialog_viewmanager to dialog_widget bzr revid: fme@openerp.com-20120711130525-qpmsh7qtmtbl65xw --- addons/web/static/src/js/view_editor.js | 2 +- addons/web/static/src/js/views.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 7c333dccbfc..6df78679ecb 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -998,7 +998,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ }; var action_manager = new instance.web.ActionManager(self); $.when(action_manager.do_action(action)).then(function() { - var controller = action_manager.dialog_viewmanager.views['form'].controller; + var controller = action_manager.dialog_widget.views['form'].controller; controller.on_button_cancel.add_last(function(){ action_manager.destroy() }); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 07ee5c53e3e..fe9ce582c96 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -13,7 +13,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_action = null; this.inner_widget = null; this.dialog = null; - this.dialog_viewmanager = null; + this.dialog_widget = null; }, start: function() { this._super.apply(this, arguments); @@ -21,8 +21,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, dialog_stop: function () { if (this.dialog) { - this.dialog_viewmanager.destroy(); - this.dialog_viewmanager = null; + this.dialog_widget.destroy(); + this.dialog_widget = null; this.dialog.destroy(); this.dialog = null; } @@ -135,11 +135,11 @@ instance.web.ActionManager = instance.web.Widget.extend({ if(on_close) this.dialog.on_close.add(on_close); } else { - this.dialog_viewmanager.destroy(); + this.dialog_widget.destroy(); } this.dialog.dialog_title = action.name; - this.dialog_viewmanager = new instance.web.ViewManagerAction(this.dialog, action); - this.dialog_viewmanager.appendTo(this.dialog.$element); + this.dialog_widget = new instance.web.ViewManagerAction(this.dialog, action); + this.dialog_widget.appendTo(this.dialog.$element); this.dialog.open(); } else { this.dialog_stop(); -- cgit v1.2.3 From 571648e4cf246f7b38560780718ade1c13faddcf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 15:38:30 +0200 Subject: [WIP] Merge breadcrumb to actionmanager bzr revid: fme@openerp.com-20120711133830-677ug7jcoz2y1zoe --- addons/web/static/src/js/chrome.js | 2 +- addons/web/static/src/js/views.js | 233 +++++++++++++++++-------------------- 2 files changed, 109 insertions(+), 126 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index e49e9ce1cbd..db696ac65f0 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1036,7 +1036,7 @@ instance.web.WebClient = instance.web.Widget.extend({ if (options.needaction) { action.context.search_default_needaction_pending = true; } - self.action_manager.breadcrumb.clear(); + self.action_manager.clear_breadcrumbs(); self.action_manager.do_action(action); }); }, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index fe9ce582c96..931019ce627 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -3,7 +3,6 @@ *---------------------------------------------------------*/ openerp.web.views = function(instance) { - this.action_manager.inner_widget = item.widget; var QWeb = instance.web.qweb, _t = instance.web._t; @@ -14,10 +13,11 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_widget = null; this.dialog = null; this.dialog_widget = null; + this.breadcrumbs = []; }, start: function() { this._super.apply(this, arguments); - this.breadcrumb = new instance.web.BreadCrumb(this); + this.$element.on('click', '.oe_breadcrumb_item', this.on_breadcrumb_clicked); }, dialog_stop: function () { if (this.dialog) { @@ -27,6 +27,78 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog = null; } }, + push_breadcrumb: function(item) { + _.each(this.breadcrumbs, function(i) { + i.hide(); + }); + item.id = _.uniqueId('breadcrumb_'); + item.show = item.show || function() { + item.widget.$element.show(); + }; + item.hide = item.hide || function() { + item.widget.$element.hide(); + }; + item.destroy = item.destroy || function() { + item.widget.destroy(); + }; + item.get_title = item.get_title || function() { + return item.title || item.widget.get('title'); + }; + this.breadcrumbs.push(item); + }, + on_breadcrumb_clicked: function(ev) { + var $e = $(ev.target); + var item; + for (var i = 0; i < this.breadcrumbs.length; i += 1) { + var it = this.breadcrumbs[i]; + if (it.id == $e.data('id')) { + item = it; + continue; + } + if (item) { + // Remove items after selected item + this.remove_breadcrumb(i); + } + } + var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + item.show(index, $e); + this.inner_widget = item.widget; + }, + clear_breadcrumbs: function() { + while (this.breadcrumbs.length) { + this.remove_breadcrumb(0); + } + }, + remove_breadcrumb: function(index) { + var item = this.breadcrumbs.splice(index, 1)[0]; + if (item) { + var dups = _.filter(this.breadcrumbs, function(it) { + return item.widget === it.widget; + }); + if (!dups.length) { + item.destroy(); + } + } + }, + get_title: function() { + var titles = []; + for (var i = 0; i < this.breadcrumbs.length; i += 1) { + var item = this.breadcrumbs[i]; + var tit = item.get_title(); + if (!_.isArray(tit)) { + tit = [tit]; + } + for (var j = 0; j < tit.length; j += 1) { + var label = _.escape(tit[j]); + if (i === this.breadcrumbs.length - 1 && j === tit.length - 1) { + titles.push(label); + } else { + titles.push(_.str.sprintf('%s', item.id, label)); + } + } + } + return titles.join(' / '); + }, do_push_state: function(state) { if (this.getParent() && this.getParent().do_push_state) { if (this.inner_action) { @@ -43,7 +115,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ var self = this, action_loaded; if (state.action_id) { - var run_action = (!this.inner_widget && !this.inner_widget.action) || this.inner_widget.action.id !== state.action_id; + var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action_id; if (run_action) { this.null_action(); action_loaded = this.do_action(state.action_id); @@ -118,7 +190,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, null_action: function() { this.dialog_stop(); - this.breadcrumb.clear(); + this.clear_breadcrumbs(); }, ir_actions_act_window: function (action, on_close) { var self = this; @@ -143,7 +215,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.open(); } else { this.dialog_stop(); - this.breadcrumb.hide_items(); if(action.menu_id) { return this.getParent().do_action(action, function () { instance.webclient.menu.open_menu(action.menu_id); @@ -151,7 +222,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ } this.inner_action = action; var inner_widget = this.inner_widget = new instance.web.ViewManagerAction(this, action); - this.breadcrumb.push_viewmanager(inner_widget); + inner_widget.add_breadcrumb(); this.inner_widget.appendTo(this.$element); } }, @@ -172,10 +243,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, ir_actions_client: function (action) { this.dialog_stop(); - this.breadcrumb.hide_items(); var ClientWidget = instance.web.client_actions.get_object(action.tag); this.inner_widget = new ClientWidget(this, action.params); - this.breadcrumb.push({ + this.push_breadcrumb({ widget: this.inner_widget, title: action.name }); @@ -213,115 +283,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ - init: function(parent) { - this._super(parent); - this.items = []; - this.action_manager = parent; - this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); - }, - push: function(item) { - item.id = _.uniqueId('breadcrumb_'); - item.show = item.show || function() { - item.widget.$element.show(); - }; - item.hide = item.hide || function() { - item.widget.$element.hide(); - }; - item.destroy = item.destroy || function() { - item.widget.destroy(); - }; - item.get_title = item.get_title || function() { - return item.title || item.widget.get('title'); - }; - this.items.push(item); - }, - push_viewmanager: function(vm) { - var self = this; - var views = [vm.active_view || vm.views_src[0].view_type]; - vm.on_mode_switch.add(function(mode) { - var last = views.slice(-1)[0]; - if (mode !== last) { - if (mode !== 'form') { - views.length = 0; - } - views.push(mode); - } - }); - this.push({ - widget: vm, - show: function(index, $e) { - var view_to_select = views[index]; - vm.$element.show(); - if (vm.active_view !== view_to_select) { - vm.on_mode_switch(view_to_select); - vm.set_title(); - } - }, - get_title: function() { - return _.map(views, function(v) { - return vm.views[v].controller.get('title'); - }); - } - }); - }, - get_title: function() { - var titles = []; - for (var i = 0; i < this.items.length; i += 1) { - var item = this.items[i]; - var tit = item.get_title(); - if (!_.isArray(tit)) { - tit = [tit]; - } - for (var j = 0; j < tit.length; j += 1) { - var label = _.escape(tit[j]); - if (i === this.items.length - 1 && j === tit.length - 1) { - titles.push(label); - } else { - titles.push(_.str.sprintf('%s', item.id, label)); - } - } - } - return titles.join(' / '); - }, - hide_items: function() { - _.each(this.items, function(i) { - i.hide(); - }); - }, - on_item_clicked: function(ev) { - var $e = $(ev.target); - var item; - for (var i = 0; i < this.items.length; i += 1) { - var it = this.items[i]; - if (it.id == $e.data('id')) { - item = it; - continue; - } - if (item) { - // Remove items after selected item - this.remove_item(i); - } - } - var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); - item.show(index, $e); - this.action_manager.inner_widget = item.widget; - }, - remove_item: function(index) { - var item = this.items.splice(index, 1)[0]; - if (item) { - var dups = _.filter(this.items, function(it) { - return item.widget === it.widget; - }); - if (!dups.length) { - item.destroy(); - } - } - }, - clear: function() { - while (this.items.length) { - this.remove_item(0); - } - }, }); instance.web.ViewManager = instance.web.Widget.extend({ @@ -478,6 +439,34 @@ instance.web.ViewManager = instance.web.Widget.extend({ set_title: function(title) { this.$element.find('.oe_view_title_text:first').text(title); }, + add_breadcrumb: function() { + var self = this; + var views = [this.active_view || this.views_src[0].view_type]; + this.on_mode_switch.add(function(mode) { + var last = views.slice(-1)[0]; + if (mode !== last) { + if (mode !== 'form') { + views.length = 0; + } + views.push(mode); + } + }); + this.getParent().push_breadcrumb({ + widget: this, + show: function(index, $e) { + var view_to_select = views[index]; + self.$element.show(); + if (self.active_view !== view_to_select) { + self.on_mode_switch(view_to_select); + } + }, + get_title: function() { + return _.map(views, function(v) { + return self.views[v].controller.get('title'); + }); + } + }); + }, /** * Method used internally when a view asks to switch view. This method is meant * to be extended by child classes to change the default behavior, which simply @@ -791,10 +780,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ view: controller, view_manager: self })); - if (!self.action.name && fvg) { - self.$element.find('.oe_view_title_text').text(fvg.arch.attrs.string || fvg.name); - } - + self.set_title(fvg.arch.attrs.string || fvg.name); }); }, do_create_view: function(view_type) { @@ -804,10 +790,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ return r; }, set_title: function(title) { - var breadcrumb = this.getParent().breadcrumb; - if (breadcrumb) { - this.$element.find('.oe_breadcrumb_title:first').html(breadcrumb.get_title()); - } + this.$element.find('.oe_breadcrumb_title:first').html(this.getParent().get_title()); }, do_push_state: function(state) { if (this.getParent() && this.getParent().do_push_state) { -- cgit v1.2.3 From 7bc912723985fbef0aab7856b30597806a29696b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 11:17:56 +0200 Subject: [FIX] Hide only last item on push bzr revid: fme@openerp.com-20120712091756-g8gsmdxuvte9phse --- addons/web/static/src/js/views.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 931019ce627..d2afb80ff23 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -28,9 +28,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }, push_breadcrumb: function(item) { - _.each(this.breadcrumbs, function(i) { - i.hide(); - }); + var last = this.breadcrumbs.slice(-1)[0]; + if (last) { + last.hide(); + } item.id = _.uniqueId('breadcrumb_'); item.show = item.show || function() { item.widget.$element.show(); @@ -282,9 +283,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }); -instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ -}); - instance.web.ViewManager = instance.web.Widget.extend({ template: "ViewManager", init: function(parent, dataset, views, flags) { -- cgit v1.2.3 From bdd6d0e5994045d6eadc443cd5d4d8d7549965fe Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 11:37:08 +0200 Subject: [IMP] Use _.defaults bzr revid: fme@openerp.com-20120712093708-b5p58jzdn8y78xy4 --- addons/web/static/src/js/views.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index d2afb80ff23..62adafb2c05 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -33,18 +33,20 @@ instance.web.ActionManager = instance.web.Widget.extend({ last.hide(); } item.id = _.uniqueId('breadcrumb_'); - item.show = item.show || function() { - item.widget.$element.show(); - }; - item.hide = item.hide || function() { - item.widget.$element.hide(); - }; - item.destroy = item.destroy || function() { - item.widget.destroy(); - }; - item.get_title = item.get_title || function() { - return item.title || item.widget.get('title'); - }; + _.defaults(item, { + show: function() { + item.widget.$element.show(); + }, + hide: function() { + item.widget.$element.hide(); + }, + destroy: function() { + item.widget.destroy(); + }, + get_title: function() { + return item.title || item.widget.get('title'); + } + }); this.breadcrumbs.push(item); }, on_breadcrumb_clicked: function(ev) { -- cgit v1.2.3 From 76c0b261983c07147e875f41be9fdf54e7bc9063 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 11:55:17 +0200 Subject: [ADD] Added doc to breadcrumb items callback bzr revid: fme@openerp.com-20120712095517-itzfdh52fd0zuzi4 --- addons/web/static/src/js/views.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 62adafb2c05..bf385ff97f3 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -34,16 +34,36 @@ instance.web.ActionManager = instance.web.Widget.extend({ } item.id = _.uniqueId('breadcrumb_'); _.defaults(item, { - show: function() { + show: function(index) { + /* + * This callback is used whenever the widget should be shown. + * If multiple titles are used, the index can be used in order + * to define which item of the breadcrumb has been trigerred. + */ item.widget.$element.show(); }, hide: function() { + /* + * This callback is used whenever the widget should be hidden. + * Called on the last pushed item before pusing a new + * breadcrumb. + */ item.widget.$element.hide(); }, destroy: function() { + /* + * This callback is used whenever the widget should be + * destroyed. Happens when the breadcrumb is cleared. + */ item.widget.destroy(); }, get_title: function() { + /* + * Should return the title of the widget as a string. If an + * array is returned, multiple titles can be used (eg: a + * widget switching views). The #show() callback will receive + * the index of the selected title. + */ return item.title || item.widget.get('title'); } }); -- cgit v1.2.3 From 0aaa77339598e3ff14879b81ccafd61bd61fc9a5 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 11:56:54 +0200 Subject: [REM] Removed useless argument causing problem in case of buggy load_state bzr revid: fme@openerp.com-20120712095654-32pj8yrwubf2up1w --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index bf385ff97f3..9a998d78545 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -800,7 +800,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ view: controller, view_manager: self })); - self.set_title(fvg.arch.attrs.string || fvg.name); + self.set_title(); }); }, do_create_view: function(view_type) { -- cgit v1.2.3 From b4b5321738cf39dfd5c2ba3b15c31625e2440e0c Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 12:27:25 +0200 Subject: [ADD] Added jsdoc bzr revid: fme@openerp.com-20120712102725-fjd8izjibbbe0ljg --- addons/web/static/src/js/views.js | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 9a998d78545..1197ca2b4c8 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -27,6 +27,17 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog = null; } }, + /** + * Add a new item to the breadcrumb + * + * @param {Object} item breadcrumb item + * @param {Object} item.widget widget containing the view(s) to be added to the breadcrumb added + * @param {null|Function} item.show callback triggered whenever the widget should be shown back + * @param {null|Function} item.hide callback triggered whenever the widget should be shown hidden + * @param {null|Function} item.destroy callback triggered whenever the widget should be destroyed + * @param {null|String|Array} item.title title(s) of the view(s) to be displayed in the breadcrumb + * @param {null|Function} item.get_title function returning the title(s) of the view(s) to be displayed in the breadcrumb + */ push_breadcrumb: function(item) { var last = this.breadcrumbs.slice(-1)[0]; if (last) { @@ -35,35 +46,24 @@ instance.web.ActionManager = instance.web.Widget.extend({ item.id = _.uniqueId('breadcrumb_'); _.defaults(item, { show: function(index) { - /* - * This callback is used whenever the widget should be shown. - * If multiple titles are used, the index can be used in order - * to define which item of the breadcrumb has been trigerred. - */ + // If multiple titles are used, the index can be used in order + // to define which item of the breadcrumb has been trigerred. item.widget.$element.show(); }, hide: function() { - /* - * This callback is used whenever the widget should be hidden. - * Called on the last pushed item before pusing a new - * breadcrumb. - */ + // Called on the last pushed item before pusing a new breadcrumb. item.widget.$element.hide(); }, destroy: function() { - /* - * This callback is used whenever the widget should be - * destroyed. Happens when the breadcrumb is cleared. - */ + // Called on all breadcrumbs items when it should be cleared. + // Eg: new action triggered from menu item.widget.destroy(); }, get_title: function() { - /* - * Should return the title of the widget as a string. If an - * array is returned, multiple titles can be used (eg: a - * widget switching views). The #show() callback will receive - * the index of the selected title. - */ + // Should return the title(s) of the widget as a string. + // If an array is returned, multiple titles can be used + // (eg: a widget switching views). The #show() callback will receive + // the index of the selected title. return item.title || item.widget.get('title'); } }); -- cgit v1.2.3 From 87cf418d788c05adeaca0a31083f81bb51e52b98 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 14:12:46 +0200 Subject: [FIX] Fixed loop bug bzr revid: fme@openerp.com-20120712121246-m16bo4d0cw7o7oz4 --- addons/web/static/src/js/views.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 1197ca2b4c8..842536f5d67 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -71,17 +71,15 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, on_breadcrumb_clicked: function(ev) { var $e = $(ev.target); + var id = $e.data('id'); var item; - for (var i = 0; i < this.breadcrumbs.length; i += 1) { + for (var i = this.breadcrumbs.length - 1; i >= 0; i--) { var it = this.breadcrumbs[i]; - if (it.id == $e.data('id')) { + if (it.id == id) { item = it; - continue; - } - if (item) { - // Remove items after selected item - this.remove_breadcrumb(i); + break; } + this.remove_breadcrumb(i); } var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); item.show(index, $e); -- cgit v1.2.3 From b83fff287a2c341cae3ee8c93a2925d15433e29e Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 12 Jul 2012 14:56:37 +0200 Subject: [IMP] change CSS classes for m2m tags and get them out of the oe_form namespace this way, we can consistently display m2m tags anywhere without dummy CSS copy/paste (example: projet issues, projet tasks) oe_form_field_many2manytags became oe_field_many2many_tags (container) oe_form_field_many2manytags_box became oe_field_many2many_tag (item) Qweb templates names have been changed accordingly bzr revid: abo@openerp.com-20120712125637-hji6e9chch1h01f0 --- addons/web/static/src/css/base.css | 54 ++++++++++++++--------------- addons/web/static/src/css/base.sass | 64 +++++++++++++++++------------------ addons/web/static/src/js/view_form.js | 58 +++++++++++++++---------------- addons/web/static/src/xml/base.xml | 8 +++-- 4 files changed, 93 insertions(+), 91 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index f9493f08e55..b9e2e42946f 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -34,7 +34,7 @@ background: white; /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ */ + */ } .openerp a { text-decoration: none; @@ -450,6 +450,32 @@ .openerp .oe_webclient .oe_star_on { color: gold; } +.openerp .oe_field_many2many_tags .text-wrap { + width: 100% !important; +} +.openerp .oe_field_many2many_tags .text-wrap textarea { + width: 100% !important; +} +.openerp .oe_field_many2many_tags .oe_field_many2many_tag { + border-radius: 2px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + position: relative; + float: left; + border: 1px solid #9daccc; + background: #e2e6f0; + color: black; + padding: 0px 3px 0px 3px; + margin: 0 2px 2px 0; + height: 16px; + font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; +} +.openerp .oe_field_many2many_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { + font-style: italic; + text-decoration: none; +} .openerp.oe_tooltip { font-size: 12px; } @@ -2017,32 +2043,6 @@ padding-top: 4px; width: auto; } -.openerp .oe_form .oe_form_field_many2manytags .text-wrap { - width: 100% !important; -} -.openerp .oe_form .oe_form_field_many2manytags .text-wrap textarea { - width: 100% !important; -} -.openerp .oe_form .oe_form_field_many2manytags .oe_form_field_many2manytags_box { - border-radius: 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - position: relative; - float: left; - border: 1px solid #9daccc; - background: #e2e6f0; - color: black; - padding: 0px 3px 0px 3px; - margin: 0 2px 2px 0; - height: 16px; - font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; -} -.openerp .oe_form .oe_form_field_many2manytags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { - font-style: italic; - text-decoration: none; -} .openerp .oe_form .oe_datepicker_container { display: none; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index d26b6c9e29b..01e2bdb1005 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -362,8 +362,28 @@ $sheet-max-width: 860px text-decoration: none .oe_star_on color: gold - - //.oe_edit_only  + // }}} + // Many2many tags {{{ + .oe_field_many2many_tags + .text-wrap + width: 100% !important + textarea + width: 100% !important + .oe_field_many2many_tag + border-radius: 2px + @include box-sizing(border) + position: relative + float: left + border: 1px solid #9DACCC + background: #E2E6F0 + color: black + padding: 0px 3px 0px 3px + margin: 0 2px 2px 0 + height: 16px + font: 11px "lucida grande", tahoma, verdana, arial, sans-serif + .text-core .text-wrap .text-dropdown .text-list .text-suggestion em + font-style: italic + text-decoration: none // }}} // Tooltips {{{ &.oe_tooltip @@ -823,7 +843,7 @@ $sheet-max-width: 860px text-shadow: 0 1px 1px rgba(0,0,0,0.2) @include radius(4px) @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.2)) - .oe_menu_counter + .oe_menu_counter float: right background: #8a89ba color: #eee @@ -846,7 +866,7 @@ $sheet-max-width: 860px color: $colour4 text-shadow: 0 1px 1px white @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.2)) - .oe_menu_counter + .oe_menu_counter background: #eee color: #8a89ba .oe_menu_toggler:before @@ -1312,7 +1332,7 @@ $sheet-max-width: 860px margin: 0 0 0 4px padding: 0 - + // }}} // Views Common {{{ .oe_view_nocontent @@ -1356,7 +1376,7 @@ $sheet-max-width: 860px display: none !important .oe_form .oe_form_field_date width: auto - .oe_form_nosheet + .oe_form_nosheet margin-left: 10px margin-right: 10px .oe_form_nosheet > header @@ -1364,13 +1384,13 @@ $sheet-max-width: 860px margin-right: -10px // }}} // FormView.custom tags and classes {{{ - .oe_form + .oe_form header position: relative border-bottom: 1px solid #cacaca @include vertical-gradient(#fcfcfc, #dedede) padding: 0 8px - line-height: 30px + line-height: 30px ul display: inline-block float: right @@ -1387,12 +1407,12 @@ $sheet-max-width: 860px vertical-align: top margin-left: 8px li - border-right: none + border-right: none padding: 0 margin: 0 - float: left + float: left vertical-align: top - height: 30px + height: 30px padding: 0 0 0 12px &:first-child border-left: 1px solid #cacaca @@ -1428,7 +1448,7 @@ $sheet-max-width: 860px .oe_form_sheetbg background: url(/web/static/src/img/form_sheetbg.png) padding: 8px 0 - border-bottom: 1px solid #ddd + border-bottom: 1px solid #ddd .oe_form_sheet_width min-width: 650px max-width: $sheet-max-width @@ -1572,26 +1592,6 @@ $sheet-max-width: 860px .oe_form_field_boolean padding-top: 4px width: auto - .oe_form_field_many2manytags - .text-wrap - width: 100% !important - textarea - width: 100% !important - .oe_form_field_many2manytags_box - border-radius: 2px - @include box-sizing(border) - position: relative - float: left - border: 1px solid #9DACCC - background: #E2E6F0 - color: black - padding: 0px 3px 0px 3px - margin: 0 2px 2px 0 - height: 16px - font: 11px "lucida grande", tahoma, verdana, arial, sans-serif - .text-core .text-wrap .text-dropdown .text-list .text-suggestion em - font-style: italic - text-decoration: none .oe_datepicker_container display: none .oe_datepicker_root diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d629b8e9b3d..fa6cd2644f1 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -9,7 +9,7 @@ instance.web.form = {}; /** * Interface implemented by the form view or any other object * able to provide the features necessary for the fields to work. - * + * * Properties: * - display_invalid_fields : if true, all fields where is_valid() return true should * be displayed as invalid. @@ -953,7 +953,7 @@ instance.web.form.FormRenderingEngineInterface = instance.web.Class.extend({ /** * Default rendering engine for the form view. - * + * * It is necessary to set the view using set_view() before usage. */ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInterface.extend({ @@ -1276,7 +1276,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt page_attrs.__page = $new_page; page_attrs.__ic = ic; pages.push(page_attrs); - + $new_page.children().each(function() { self.process($(this)); }); @@ -1302,7 +1302,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } }); }); - + this.handle_common_properties($new_notebook, $notebook); return $new_notebook; }, @@ -1603,7 +1603,7 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi if (! v_context) { v_context = (this.field || {}).context || {}; } - + if (v_context.__ref || true) { //TODO: remove true var fields_values = this._build_eval_context(blacklist); v_context = new instance.web.CompoundContext(v_context).set_eval_context(fields_values); @@ -1711,14 +1711,14 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ /** * Interface to be implemented by fields. - * + * * Properties: * - readonly: boolean. If set to true the field should appear in readonly mode. * - force_readonly: boolean, When it is true, the field should always appear * in read only mode, no matter what the value of the "readonly" property can be. * Events: * - changed_value: triggered to inform the view to check on_changes - * + * */ instance.web.form.FieldInterface = { /** @@ -1729,14 +1729,14 @@ instance.web.form.FieldInterface = { init: function(field_manager, node) {}, /** * Called by the form view to indicate the value of the field. - * + * * set_value() may return an object that can be passed to $.when() that represents the moment when * the field has finished all operations necessary before the user can effectively use the widget. - * + * * Multiple calls to set_value() can occur at any time and must be handled correctly by the implementation, * regardless of any asynchronous operation currently running and the status of any promise that a * previous call to set_value() could have returned. - * + * * set_value() must be able, at any moment, to handle the syntax returned by the "read" method of the * osv class in the OpenERP server as well as the syntax used by the set_value() (see below). It must * also be able to handle any other format commonly used in the _defaults key on the models in the addons @@ -1746,16 +1746,16 @@ instance.web.form.FieldInterface = { set_value: function(value_) {}, /** * Get the current value of the widget. - * + * * Must always return a syntaxically correct value to be passed to the "write" method of the osv class in * the OpenERP server, although it is not assumed to respect the constraints applied to the field. * For example if the field is marqued as "required", a call to get_value() can return false. - * + * * get_value() can also be called *before* a call to set_value() and, in that case, is supposed to * return a defaut value according to the type of field. - * + * * This method is always assumed to perform synchronously, it can not return a promise. - * + * * If there was no user interaction to modify the value of the field, it is always assumed that * get_value() return the same semantic value than the one passed in the last call to set_value(), * altough the syntax can be different. This can be the case for type of fields that have a different @@ -1785,14 +1785,14 @@ instance.web.form.FieldInterface = { /** * Abstract class for classes implementing FieldInterface. - * + * * Properties: * - effective_readonly: when it is true, the widget is displayed as readonly. Vary depending * the values of the "readonly" property and the "force_readonly" property on the field manager. * - value: useful property to hold the value of the field. By default, set_value() and get_value() * set and retrieve the value property. Changing the value property also triggers automatically * a 'changed_value' event that inform the view to trigger on_changes. - * + * */ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.web.form.FieldInterface, { /** @@ -1811,7 +1811,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w this.string = this.node.attrs.string || this.field.string || this.name; this.set({'value': false}); this.set({required: this.modifiers['required'] === true}); - + // some events to make the property "effective_readonly" sync automatically with "readonly" and // "force_readonly" this.set({"readonly": this.modifiers['readonly'] === true}); @@ -1821,7 +1821,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w this.on("change:readonly", this, test_effective_readonly); this.on("change:force_readonly", this, test_effective_readonly); _.bind(test_effective_readonly, this)(); - + this.on("change:value", this, function() { if (! this._inhibit_on_change) this.trigger('changed_value'); @@ -2003,7 +2003,7 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we }); instance.web.form.FieldID = instance.web.form.FieldChar.extend({ - + }); instance.web.form.FieldEmail = instance.web.form.FieldChar.extend({ @@ -2396,7 +2396,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan } else { var self = this; var option = _(this.values) - .detect(function (record) { return record[0] === self.get('value'); }); + .detect(function (record) { return record[0] === self.get('value'); }); this.$element.text(option ? option[1] : this.values[0][1]); } }, @@ -2575,7 +2575,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc render_editable: function() { var self = this; this.$input = this.$element.find("input"); - + self.$input.tipsy({ title: function() { return "No element was selected, you should create or select one from the dropdown list."; @@ -2583,10 +2583,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc trigger:'manual', fade: true, }); - + this.$drop_down = this.$element.find(".oe_m2o_drop_down_button"); this.$follow_button = $(".oe_m2o_cm_button", this.$element); - + this.$follow_button.click(function() { if (!self.get('value')) { self.focus(); @@ -2880,7 +2880,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ }, load_views: function() { var self = this; - + var modes = this.node.attrs.mode; modes = !!modes ? modes.split(",") : ["tree"]; var views = []; @@ -3462,7 +3462,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in $("textarea", self.$element).css("padding-left", "3px"); self.tags.addTags(_.map(data, function(el) {return {name: el[1], id:el[0]};})); } else { - self.$element.html(QWeb.render("FieldMany2ManyTags.box", {elements: data})); + self.$element.html(QWeb.render("FieldMany2ManyTag", {elements: data})); } }; if (! self.get('values') || self.get('values').length > 0) { @@ -3634,7 +3634,7 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( this.dataset.on_unlink.add_last(function(ids) { self.dataset_changed(); }); - + this.is_setted.then(function() { self.load_view(); }); @@ -3750,7 +3750,7 @@ instance.web.form.Many2ManyKanbanView = instance.web_kanban.KanbanView.extend({ }); instance.web.form.Many2ManyQuickCreate = instance.web.Widget.extend({ template: 'Many2ManyKanban.quick_create', - + /** * close_btn: If true, the widget will display a "Close" button able to trigger * a "close" event. @@ -4443,7 +4443,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ this.selection = []; // get fold information from widget var fold = ((this.node.attrs || {}).statusbar_fold || true); - // build final domain: if fold option required, add the + // build final domain: if fold option required, add the if (fold == true) { var domain = new instance.web.CompoundDomain(['|'], ['&'], self.build_domain(), [['fold', '=', false]], [['id', '=', self.selected_value]]); } else { @@ -4475,7 +4475,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), function(x) { return _.str.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); - + if (shown.length == 0) { this.to_show = this.selection; } else { diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index aa04df98f04..4615e16b2a1 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -961,18 +961,20 @@ + -
+
- + + - + -- cgit v1.2.3 From ae44723e2bed58dd289bfb2d9708219401f7cf7e Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 12 Jul 2012 15:32:50 +0200 Subject: [IMP] turn many2many tags CSS classes into *real* generic classes, without any reference to other openerp elements like fields oe_field_many2many_tags becomes oe_tags oe_field_many2many_tag becomes oe_tag bzr revid: abo@openerp.com-20120712133250-c2ss8ygqujx4m2w2 --- addons/web/static/src/css/base.css | 8 ++++---- addons/web/static/src/css/base.sass | 6 +++--- addons/web/static/src/xml/base.xml | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index b9e2e42946f..13ce5b73795 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -450,13 +450,13 @@ .openerp .oe_webclient .oe_star_on { color: gold; } -.openerp .oe_field_many2many_tags .text-wrap { +.openerp .oe_tags .text-wrap { width: 100% !important; } -.openerp .oe_field_many2many_tags .text-wrap textarea { +.openerp .oe_tags .text-wrap textarea { width: 100% !important; } -.openerp .oe_field_many2many_tags .oe_field_many2many_tag { +.openerp .oe_tags .oe_tag { border-radius: 2px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; @@ -472,7 +472,7 @@ height: 16px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; } -.openerp .oe_field_many2many_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { +.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { font-style: italic; text-decoration: none; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 01e2bdb1005..5a0daae0674 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -363,13 +363,13 @@ $sheet-max-width: 860px .oe_star_on color: gold // }}} - // Many2many tags {{{ - .oe_field_many2many_tags + // Tags (for many2many tags, among others) {{{ + .oe_tags .text-wrap width: 100% !important textarea width: 100% !important - .oe_field_many2many_tag + .oe_tag border-radius: 2px @include box-sizing(border) position: relative diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 4615e16b2a1..5b3a6ac7166 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -963,7 +963,7 @@ -
+
@@ -974,7 +974,7 @@ - + -- cgit v1.2.3 From 279c349344f15cca198ca4bf8d2341107d8edb95 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 16:46:23 +0200 Subject: [IMP] Do not edit in place pushed breadcrumb items bzr revid: fme@openerp.com-20120712144623-ttfejkrxv7ep4y12 --- addons/web/static/src/js/views.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 842536f5d67..87017bbe0bd 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -43,30 +43,30 @@ instance.web.ActionManager = instance.web.Widget.extend({ if (last) { last.hide(); } - item.id = _.uniqueId('breadcrumb_'); - _.defaults(item, { + var item = _.extend({ show: function(index) { // If multiple titles are used, the index can be used in order // to define which item of the breadcrumb has been trigerred. - item.widget.$element.show(); + this.widget.$element.show(); }, hide: function() { // Called on the last pushed item before pusing a new breadcrumb. - item.widget.$element.hide(); + this.widget.$element.hide(); }, destroy: function() { // Called on all breadcrumbs items when it should be cleared. // Eg: new action triggered from menu - item.widget.destroy(); + this.widget.destroy(); }, get_title: function() { // Should return the title(s) of the widget as a string. // If an array is returned, multiple titles can be used // (eg: a widget switching views). The #show() callback will receive // the index of the selected title. - return item.title || item.widget.get('title'); + return this.title || this.widget.get('title'); } - }); + }, item); + item.id = _.uniqueId('breadcrumb_'); this.breadcrumbs.push(item); }, on_breadcrumb_clicked: function(ev) { -- cgit v1.2.3 From 048d96fa636036665b2bb0f523a48900e2e36e35 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 17:05:48 +0200 Subject: [IMP] Improved jsdoc bzr revid: fme@openerp.com-20120712150548-w1m47j9op8p46xpy --- addons/web/static/src/js/views.js | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 87017bbe0bd..ffa78f315e5 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -30,13 +30,18 @@ instance.web.ActionManager = instance.web.Widget.extend({ /** * Add a new item to the breadcrumb * + * If the title of an item is an array, the multiple title mode is in use. + * (eg: a widget with multiple views might need to display a title for each view) + * In multiple title mode, the show() callback can check the index it receives + * in order to detect which of its titles has been clicked on by the user. + * * @param {Object} item breadcrumb item * @param {Object} item.widget widget containing the view(s) to be added to the breadcrumb added - * @param {null|Function} item.show callback triggered whenever the widget should be shown back - * @param {null|Function} item.hide callback triggered whenever the widget should be shown hidden - * @param {null|Function} item.destroy callback triggered whenever the widget should be destroyed - * @param {null|String|Array} item.title title(s) of the view(s) to be displayed in the breadcrumb - * @param {null|Function} item.get_title function returning the title(s) of the view(s) to be displayed in the breadcrumb + * @param {Function} [item.show] triggered whenever the widget should be shown back + * @param {Function} [item.hide] triggered whenever the widget should be shown hidden + * @param {Function} [item.destroy] triggered whenever the widget should be destroyed + * @param {String|Array} [item.title] title(s) of the view(s) to be displayed in the breadcrumb + * @param {Function} [item.get_title] should return the title(s) of the view(s) to be displayed in the breadcrumb */ push_breadcrumb: function(item) { var last = this.breadcrumbs.slice(-1)[0]; @@ -45,24 +50,15 @@ instance.web.ActionManager = instance.web.Widget.extend({ } var item = _.extend({ show: function(index) { - // If multiple titles are used, the index can be used in order - // to define which item of the breadcrumb has been trigerred. this.widget.$element.show(); }, hide: function() { - // Called on the last pushed item before pusing a new breadcrumb. this.widget.$element.hide(); }, destroy: function() { - // Called on all breadcrumbs items when it should be cleared. - // Eg: new action triggered from menu this.widget.destroy(); }, get_title: function() { - // Should return the title(s) of the widget as a string. - // If an array is returned, multiple titles can be used - // (eg: a widget switching views). The #show() callback will receive - // the index of the selected title. return this.title || this.widget.get('title'); } }, item); -- cgit v1.2.3 From 940f27a4492f950facc32d0113218c9a9a73602d Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Thu, 12 Jul 2012 17:26:35 +0200 Subject: [IMP] size of kanban columns bzr revid: fp@tinyerp.com-20120712152635-3lb33yoxyaailakj --- addons/web/static/src/xml/base.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index aa04df98f04..8acf63a97b8 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -399,16 +399,17 @@
- - - + + + + - @@ -416,7 +417,7 @@ -

+
+
-- cgit v1.2.3 From c9f66e1efc5ddd2950d1337b35687d12c1408ab7 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 18:31:43 +0200 Subject: [FIX] Bug in action manager. AFAIK, the parent of a ViewManager should be it's ActionManager The bug could be experienced with action target new (Eg: debug Edit this Form) bzr revid: fme@openerp.com-20120712163143-s1nbf88lqz011uhi --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index ffa78f315e5..423bf3f9d46 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -227,7 +227,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_widget.destroy(); } this.dialog.dialog_title = action.name; - this.dialog_widget = new instance.web.ViewManagerAction(this.dialog, action); + this.dialog_widget = new instance.web.ViewManagerAction(this, action); this.dialog_widget.appendTo(this.dialog.$element); this.dialog.open(); } else { -- cgit v1.2.3 From 32f49b71bacf3c4165a81ef60b2bf2cdbb275fa3 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Thu, 12 Jul 2012 18:34:44 +0200 Subject: [FIX] cleaned dialog box design bzr revid: fp@tinyerp.com-20120712163444-thvd2zqbwxcff4i5 --- addons/web/static/src/css/base.css | 6 ------ addons/web/static/src/css/base.sass | 6 ------ 2 files changed, 12 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index f9493f08e55..00d80d6085b 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -188,13 +188,7 @@ } .openerp.ui-dialog { display: none; - position: fixed; padding: 6px; - top: 50%; - left: 50%; - z-index: 1050; - width: 560px; - margin: -150px 0 0 -280px; background-color: rgba(60, 60, 60, 0.7); border: 1px solid; border-color: #888888 #555555 #444444; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index d26b6c9e29b..b7d866245f1 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -205,13 +205,7 @@ $sheet-max-width: 860px // Modal box &.ui-dialog display: none - position: fixed padding: 6px - top: 50% - left: 50% - z-index: 1050 - width: 560px - margin: -150px 0 0 -280px //overflow: hidden background-color: rgba(60,60,60,0.7) border: 1px solid -- cgit v1.2.3 From 1a4bd20eafcafcc62adc413cea3bcbef5aa42a58 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Thu, 12 Jul 2012 18:40:59 +0200 Subject: [IMP] width of dialogs bzr revid: fp@tinyerp.com-20120712164059-drg0h7dovuh3l26c --- addons/web/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 970d509d481..bd7ee28dd6e 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -63,7 +63,7 @@ instance.web.Dialog = instance.web.Widget.extend({ this.dialog_options = { modal: true, destroy_on_close: true, - width: $(window).width() * (($(window).width() > 1024) ? 0.5 : 0.75), + width: 580, min_width: 0, max_width: '95%', height: 'auto', -- cgit v1.2.3 From ded3223288d0714641fa28b64ab2659d7b742ec0 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Jul 2012 18:43:44 +0200 Subject: [FIX] Fixed oe_avatar class bug bzr revid: fme@openerp.com-20120712164344-ayd0r47oy90vp9st --- addons/web/static/src/css/base.css | 5 +++-- addons/web/static/src/css/base.sass | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index f9493f08e55..1db092caf8a 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -34,7 +34,7 @@ background: white; /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ */ + */ } .openerp a { text-decoration: none; @@ -395,7 +395,7 @@ .openerp .oe_avatar { margin: 0 16px 0 0; } -.openerp .oe_avatar img { +.openerp .oe_avatar > img { height: 50px; -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -2125,6 +2125,7 @@ } .openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { position: absolute; + white-space: nowrap; top: 1px; padding: 3px 0 0 0; margin: 0 1px; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index d26b6c9e29b..43521eb9282 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -336,7 +336,7 @@ $sheet-max-width: 860px margin: 4px .oe_avatar margin: 0 16px 0 0 - img + > img height: 50px @include radius(3px) @include box-shadow(0 1px 3px rgba(0, 0, 0, 0.3)) @@ -1669,6 +1669,7 @@ $sheet-max-width: 860px vertical-align: top .oe_form_field_image_controls position: absolute + white-space: nowrap top: 1px padding: 3px 0 0 0 margin: 0 1px -- cgit v1.2.3 From cc42add5bdd70e7cb427004a35591680588e42a0 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Thu, 12 Jul 2012 19:03:21 +0200 Subject: [IMP] width of dialog boxes bzr revid: fp@tinyerp.com-20120712170321-8fxzwxrvj56ef5xq --- addons/web/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 5d8270c2f68..c32d4feafe1 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -63,7 +63,7 @@ instance.web.Dialog = instance.web.Widget.extend({ this.dialog_options = { modal: true, destroy_on_close: true, - width: 580, + width: 750, min_width: 0, max_width: '95%', height: 'auto', -- cgit v1.2.3 From f0e50ce71cf1fcb9612c7cdc0daca3965223787e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 15 Jun 2012 16:35:20 +0200 Subject: [ADD] Added text_html / FieldTextHtml widget. Basically, it is a FieldText widget with the CLEditor added on the textarea. Some customization work will have to be done though. bzr revid: tde@openerp.com-20120615143520-irw7ougo19c0fvi8 --- addons/web/static/src/js/view_form.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index aba31d64434..5ee4310f8a8 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2209,6 +2209,36 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(_.extend({} }, })); +/** + * FieldTextHtml Widget + * Intended for FieldText widgets meant to display HTML content. This + * widget will instantiate the CLEditor (see cleditor in static/src/lib) + * To find more information about CLEditor configutation: go to + * http://premiumsoftware.net/cleditor/docs/GettingStarted.html + */ +instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ + + set_value: function(value_) { + this._super.apply(this, arguments); + console.log(this.$element); + var textarea_node = this.$element.find('textarea.field_text'); + textarea_node.cleditor({ + //width: 500, // width not including margins, borders or padding + //height: 250, // height not including margins, borders or padding + controls: // controls to add to the toolbar + "bold italic underline strikethrough | size " + + "| removeformat | bullets numbering | outdent " + + "indent | " + + "link unlink | source", + sizes: // sizes in the font size popup + "1,2,3,4,5,6,7", + useCSS: false, // use CSS to style HTML when possible (not supported in ie) + bodyStyle: // style to assign to document body contained within the editor + "margin:4px; font:13px monospace; cursor:text" + }); + }, +}); + instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({ template: 'FieldBoolean', start: function() { @@ -4287,6 +4317,7 @@ instance.web.form.widgets = new instance.web.Registry({ 'email' : 'instance.web.form.FieldEmail', 'url' : 'instance.web.form.FieldUrl', 'text' : 'instance.web.form.FieldText', + 'text_html' : 'instance.web.form.FieldTextHtml', 'date' : 'instance.web.form.FieldDate', 'datetime' : 'instance.web.form.FieldDatetime', 'selection' : 'instance.web.form.FieldSelection', -- cgit v1.2.3 From 97e94941cbdc02ffc6d3e45a441afa592070d900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 20 Jun 2012 10:44:54 +0200 Subject: [REF] view_form: removed a forgotten debug line. bzr revid: tde@openerp.com-20120620084454-e8vezrij11bqakx7 --- addons/web/static/src/js/view_form.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 37a4cde1f68..806649165ae 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2220,7 +2220,6 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ set_value: function(value_) { this._super.apply(this, arguments); - console.log(this.$element); var textarea_node = this.$element.find('textarea.field_text'); textarea_node.cleditor({ //width: 500, // width not including margins, borders or padding -- cgit v1.2.3 From 9e952c3fba9b4f0cd6399d3ba24f17e98b6f0560 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Mon, 2 Jul 2012 17:49:27 +0530 Subject: [IMP]implement css and collapse all functionality. bzr revid: vme@tinyerp.com-20120702121927-wbg5pncvw4qo8cni --- addons/web/static/src/css/base.css | 50 +++++++++++++++++++++++++++++++++++ addons/web/static/src/css/base.sass | 40 ++++++++++++++++++++++++++++ addons/web/static/src/js/view_tree.js | 26 +++++++++++------- addons/web/static/src/xml/base.xml | 14 +++++----- 4 files changed, 115 insertions(+), 15 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 8df712d88d1..54284aa6be8 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2215,6 +2215,56 @@ color: #333333; } +.openerp .tree_header { + background-color: #f0f0f0; + border-bottom: 1px solid #cacaca; + color: #4c4c4c; + padding: 5px; +} +.openerp .tree_header button { + float: right; +} +.openerp .oe-treeview-table { + width: 100%; + background-color: white; + border-spacing: 0; +} +.openerp .oe-treeview-table th { + padding: 10px; + color: #4c4c4c; + font-weight: bold; + background-color: #f0f0f0; + border-bottom: 2px solid #cacaca; +} +.openerp .oe-treeview-table .treeview-tr, .openerp .oe-treeview-table .treeview-td { + cursor: pointer; + border-right: 1px dotted #afafb6; + vertical-align: top; + text-align: left; + border-bottom: 1px solid #cfcccc; +} +.openerp .oe-treeview-table tr:hover { + background-color: #e0e0f8; +} +.openerp .oe-treeview-table .oe-number { + text-align: right !important; +} +.openerp .oe-treeview-table span { + font-size: 90%; + font-weight: normal; + white-space: nowrap; + display: block; +} +.openerp .oe-treeview-table .treeview-tr.oe-treeview-first { + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; +} +.openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { + background-image: url(/web/static/src/img/collapse.gif); +} +.openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { + margin-left: 16px; +} + .kitten-mode-activated { background-image: url(http://placekitten.com/g/1365/769); background-size: cover; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 2846ce7235d..9dbe2f71ffe 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1747,6 +1747,46 @@ $colour4: #8a89ba float: right color: #333 // }}} +//Tree view +.openerp + .tree_header + background-color: #f0f0f0 + border-bottom: 1px solid #cacaca + color: #4c4c4c + padding: 5px + button + float: right + .oe-treeview-table + width: 100% + background-color: white + border-spacing: 0 + th + padding: 10px + color: #4c4c4c + font-weight: bold + background-color: #f0f0f0 + border-bottom: 2px solid #cacaca + .treeview-tr, .treeview-td + cursor: pointer + border-right: 1px dotted #afafb6 + vertical-align: top + text-align: left + border-bottom: 1px solid #cfcccc + tr:hover + background-color: #e0e0f8 + .oe-number + text-align: right !important + span + font-size: 90% + font-weight: normal + white-space: nowrap + display: block + .treeview-tr.oe-treeview-first + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat + .oe_open .treeview-tr.oe-treeview-first + background-image: url(/web/static/src/img/collapse.gif) + .treeview-tr.oe-treeview-first span, .treeview-td.oe-treeview-first span + margin-left: 16px // Kitten Mode {{{ .kitten-mode-activated background-image: url(http://placekitten.com/g/1365/769) diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index e8bd7351f1f..363bf6258f1 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -112,7 +112,12 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie $select.change(); } }); - + this.$element.find("#tree_view_expand").click(function(){ + self.expand_all(); + }); + this.$element.find("#tree_view_collapse").click(function(){ + self.collpase_all(); + }); // TODO store open nodes in url ?... this.do_push_state({}); @@ -128,6 +133,17 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie return [color, py.parse(py.tokenize(expr)), expr]; }).value(); }, + expand_all: function(){ + }, + collpase_all: function(){ + var self = this; + var root_tr = this.$element.find(".oe-treeview-table tbody tr[data-level='"+1+"']"); + _.each(root_tr,function(rec){ + if($(rec).hasClass('oe_open')){ + self.showcontent($(rec).attr('data-id'),false); + } + }); + }, /** * Returns the color for the provided record in the current view (from the * ``@colors`` attribute) @@ -259,13 +275,5 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie }, this); }, - do_show: function () { - this.$element.show(); - }, - - do_hide: function () { - this.$element.hide(); - this.hidden = true; - } }); }; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 46fab28d791..5b21802f91a 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -535,14 +535,16 @@ - - +
+ + + +
+
@@ -557,7 +559,7 @@ t-att-data-id="record.id" t-att-data-level="level + 1"> - + + t-att-data-id="record.id" t-att-data-level="level"> - +
+ t-if="!field.attrs.modifiers.tree_invisible">
Date: Tue, 3 Jul 2012 17:49:14 +0530 Subject: [IMP]expand all and render all records with at one time. bzr revid: vme@tinyerp.com-20120703121914-yf9hbri57grukuff --- addons/web/static/src/js/view_tree.js | 81 ++++++++++++++++++++--------------- addons/web/static/src/xml/base.xml | 4 +- 2 files changed, 48 insertions(+), 37 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 363bf6258f1..2e1300ce267 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -63,6 +63,13 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie } return fields; }, + store_record:function(records){ + var self = this; + _(records).each(function (record) { + console.log(record.id); + self.records[record.id] = record; + }); + }, on_loaded: function (fields_view) { var self = this; var has_toolbar = !!fields_view.arch.attrs.toolbar; @@ -87,17 +94,19 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie this.$element.addClass(this.fields_view.arch.attrs['class']); this.dataset.read_slice(this.fields_list()).then(function(records) { + self.store_record(records); if (!has_toolbar) { // WARNING: will do a second read on the same ids, but only on // first load so not very important - self.getdata(null, _(records).pluck('id')); + self.render_data({'null':records}) + self.getdata(_.pluck(records,"id")); return; } var $select = self.$element.find('select') .change(function () { var $option = $(this).find(':selected'); - self.getdata($option.val(), $option.data('children')); + self.getdata($option.val()); }); _(records).each(function (record) { self.records[record.id] = record; @@ -134,6 +143,11 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie }).value(); }, expand_all: function(){ + var self = this; + var tr = this.$element.find(".oe-treeview-table tbody tr[id^='treerow_']"); + _.each(tr,function(rec){ + self.showcontent($(rec).attr('data-id'),true); + }); }, collpase_all: function(){ var self = this; @@ -180,50 +194,45 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie }); this.$element.delegate('.treeview-tr', 'click', function () { - var is_loaded = 0, - $this = $(this), + var $this = $(this), record_id = $this.data('id'), - record = self.records[record_id], - children_ids = record[self.children_field]; - - _(children_ids).each(function(childid) { - if (self.$element.find('#treerow_' + childid).length) { - if (self.$element.find('#treerow_' + childid).is(':hidden')) { - is_loaded = -1; - } else { - is_loaded++; - } - } - }); - if (is_loaded === 0) { - if (!$this.parent().hasClass('oe_open')) { - self.getdata(record_id, children_ids); - } - } else { - self.showcontent(record_id, is_loaded < 0); - } + bool = $this.parent().hasClass('oe_open'); + self.showcontent(record_id, !bool); }); }, // get child data of selected value - getdata: function (id, children_ids) { + getdata: function (id) { var self = this; - - self.dataset.read_ids(children_ids, this.fields_list()).then(function(records) { - _(records).each(function (record) { - self.records[record.id] = record; - }); - - var $curr_node = self.$element.find('#treerow_' + id); + var parent_child ={}; + id = _.isArray(id)?id:parseInt(id); + var ir_model_data = new instance.web.Model(this.model,{},[['id','child_of',id]]).query(); + ir_model_data._execute().then(function(records){ + self.store_record(records); + _.each(records,function(rec){ + if(rec[self.children_field].length === 0)return; + parent_child[rec.id] = []; + _.each(rec[self.children_field],function(key){ + parent_child[rec.id].push(self.records[key]); + }); + }) + self.render_data(parent_child); + }); + }, + render_data: function(groupby){ + var self = this; + console.log(groupby); + _.each(_.keys(groupby),function(key){ + var $curr_node = self.$element.find('#treerow_' + key); + var record = groupby[key]; var children_rows = QWeb.render('TreeView.rows', { - 'records': records, + 'records': record, 'children_field': self.children_field, 'fields_view': self.fields_view.arch.children, 'fields': self.fields, - 'level': $curr_node.data('level') || 0, + 'level': ($curr_node.data('level') || 0) + 1, 'render': instance.web.format_value, 'color_for': self.color_for }); - if ($curr_node.length) { $curr_node.addClass('oe_open'); $curr_node.after(children_rows); @@ -231,8 +240,10 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie self.$element.find('tbody').html(children_rows); } }); + self.collpase_all(); }, + // Get details in listview activate: function(id) { var self = this; @@ -254,7 +265,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie } return self.rpc('/web/session/eval_domain_and_context', { contexts: [c], domains: [] - }).pipe(function (res) { + }).pipe(function (res) {records action.context = res.context; return self.do_action(action); }, null); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 5b21802f91a..6e0bd2417f1 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -556,11 +556,11 @@
Date: Tue, 3 Jul 2012 19:05:08 +0530 Subject: [IMP]minor changes. bzr revid: vme@tinyerp.com-20120703133508-33lfisga2u4tlepe --- addons/web/static/src/css/base.css | 3 +++ addons/web/static/src/css/base.sass | 3 +++ addons/web/static/src/js/view_tree.js | 6 ++---- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 54284aa6be8..e338cc309d9 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2220,9 +2220,12 @@ border-bottom: 1px solid #cacaca; color: #4c4c4c; padding: 5px; + height: 25px; } .openerp .tree_header button { float: right; + height: 27px; + margin-right: 5px; } .openerp .oe-treeview-table { width: 100%; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 9dbe2f71ffe..6514ea8d70b 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1754,8 +1754,11 @@ $colour4: #8a89ba border-bottom: 1px solid #cacaca color: #4c4c4c padding: 5px + height: 25px button float: right + height: 27px + margin-right: 5px .oe-treeview-table width: 100% background-color: white diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 2e1300ce267..2181b2aa157 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -66,7 +66,6 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie store_record:function(records){ var self = this; _(records).each(function (record) { - console.log(record.id); self.records[record.id] = record; }); }, @@ -205,7 +204,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie var self = this; var parent_child ={}; id = _.isArray(id)?id:parseInt(id); - var ir_model_data = new instance.web.Model(this.model,{},[['id','child_of',id]]).query(); + var ir_model_data = new instance.web.Model(this.model,self.dataset.get_context() || {},[['id','child_of',id]]).query(); ir_model_data._execute().then(function(records){ self.store_record(records); _.each(records,function(rec){ @@ -220,7 +219,6 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie }, render_data: function(groupby){ var self = this; - console.log(groupby); _.each(_.keys(groupby),function(key){ var $curr_node = self.$element.find('#treerow_' + key); var record = groupby[key]; @@ -265,7 +263,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie } return self.rpc('/web/session/eval_domain_and_context', { contexts: [c], domains: [] - }).pipe(function (res) {records + }).pipe(function (res) { action.context = res.context; return self.do_action(action); }, null); -- cgit v1.2.3 From bd3a82c2505c77c9f32ec0665f7efeed783b1035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 6 Jul 2012 09:44:35 +0200 Subject: [IMP] HTML text field: implemented the get_value to retrieve the html value from the ClEditor. bzr revid: tde@openerp.com-20120706074435-v3882oyuzbrffqnr --- addons/web/static/src/js/view_form.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3f4a447f0ca..23107b108ee 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2316,6 +2316,13 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ "margin:4px; font:13px monospace; cursor:text" }); }, + get_value: function() { + // retrive cleditor and get its html content + var textarea_node = this.$element.find('textarea.field_text'); + var cleditor = textarea_node.cleditor()[0]; + var value = cleditor.$area.val(); + return value; + }, }); instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({ -- cgit v1.2.3 From 2a382252e828a19e96f18bac8a44b25c7849e21b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 6 Jul 2012 17:51:13 +0200 Subject: [WIP] TextHtml field: updated behavior to work in form views (display field value, take into account a modified value). bzr revid: tde@openerp.com-20120706155113-co8higd2mm1qki00 --- addons/web/static/src/js/view_form.js | 59 +++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 23107b108ee..1abc71a0826 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2298,10 +2298,10 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we */ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ - set_value: function(value_) { - this._super.apply(this, arguments); - var textarea_node = this.$element.find('textarea.field_text'); - textarea_node.cleditor({ + initialize_content: function() { + console.log('initialize_content'); + this.$textarea = this.$element.find('textarea'); + this.$textarea.cleditor({ //width: 500, // width not including margins, borders or padding //height: 250, // height not including margins, borders or padding controls: // controls to add to the toolbar @@ -2315,11 +2315,58 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ bodyStyle: // style to assign to document body contained within the editor "margin:4px; font:13px monospace; cursor:text" }); + // cleditor.bind('change', function(event) { + // console.log(event) + // }); + // call super now, because cleditor seems to reset the disable attr + this._super.apply(this, arguments); + if (this.$textarea.attr('disabled') == 'disabled') { + this.$textarea.cleditor()[0].disable(true); + } + else { + this.$textarea.cleditor()[0].disable(false); + } + }, + + set_value: function(value_) { + console.log('set_value'); + console.log(value_); + this._super.apply(this, arguments); + // debugger + this._dirty_flag = true; + // this.render_value(); }, + render_value: function() { + console.log('render_value'); + var show_value = instance.web.format_value(this.get('value'), this, ''); + console.log(show_value); + this.$textarea.val(show_value); + if (show_value && this.view.options.resize_textareas) { + this.do_resize(this.view.options.resize_textareas); + } + this.$textarea.cleditor()[0].updateFrame(); + }, + + // render_value: function() { + // console.log('render_value'); + // this._super.apply(this, arguments); + // console.log(instance.web.format_value(this.get('value'), this, '')); + // this.$textarea.cleditor()[0].updateFrame(); + + // }, + + // set_value: function(value_) { + // console.log('set_value'); + // console.log(value_); + // this._super.apply(this, arguments); + // }, + get_value: function() { + console.log('get_value'); // retrive cleditor and get its html content - var textarea_node = this.$element.find('textarea.field_text'); - var cleditor = textarea_node.cleditor()[0]; + var cleditor = this.$textarea.cleditor()[0]; + console.log(this.$textarea.val()); + // cleditor.updateTextArea(); var value = cleditor.$area.val(); return value; }, -- cgit v1.2.3 From 73b7c1f8ae255dbf6a92fd6c51e01e3ff4f127d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 9 Jul 2012 12:31:37 +0200 Subject: [CLEAN] TextFieldHtml: cleaned code (removed debug and comments). bzr revid: tde@openerp.com-20120709103137-0662p5zbi4ib3zky --- addons/web/static/src/js/view_form.js | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 1abc71a0826..2a32f7c47af 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2315,9 +2315,6 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ bodyStyle: // style to assign to document body contained within the editor "margin:4px; font:13px monospace; cursor:text" }); - // cleditor.bind('change', function(event) { - // console.log(event) - // }); // call super now, because cleditor seems to reset the disable attr this._super.apply(this, arguments); if (this.$textarea.attr('disabled') == 'disabled') { @@ -2329,17 +2326,12 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ }, set_value: function(value_) { - console.log('set_value'); - console.log(value_); this._super.apply(this, arguments); - // debugger this._dirty_flag = true; - // this.render_value(); }, + render_value: function() { - console.log('render_value'); var show_value = instance.web.format_value(this.get('value'), this, ''); - console.log(show_value); this.$textarea.val(show_value); if (show_value && this.view.options.resize_textareas) { this.do_resize(this.view.options.resize_textareas); @@ -2347,25 +2339,9 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ this.$textarea.cleditor()[0].updateFrame(); }, - // render_value: function() { - // console.log('render_value'); - // this._super.apply(this, arguments); - // console.log(instance.web.format_value(this.get('value'), this, '')); - // this.$textarea.cleditor()[0].updateFrame(); - - // }, - - // set_value: function(value_) { - // console.log('set_value'); - // console.log(value_); - // this._super.apply(this, arguments); - // }, - get_value: function() { - console.log('get_value'); // retrive cleditor and get its html content var cleditor = this.$textarea.cleditor()[0]; - console.log(this.$textarea.val()); // cleditor.updateTextArea(); var value = cleditor.$area.val(); return value; -- cgit v1.2.3 From df4a5a580b6ebd2201eb7db22d8d48c4adc41d36 Mon Sep 17 00:00:00 2001 From: "Sanjay Gohel (Open ERP)" Date: Mon, 9 Jul 2012 16:17:20 +0530 Subject: [IMP]If there is not available db, jump direclty in the db manager view (creation of a db) instead of staying in the login page. bzr revid: sgo@tinyerp.com-20120709104720-0oi5975lfropyh4w --- addons/web/static/src/js/chrome.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index b87ebe56856..ffecd3289db 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -486,7 +486,7 @@ instance.web.Login = instance.web.Widget.extend({ var self = this; self.$element.find("form").submit(self.on_submit); - + self.$element.find('.oe_login_manage_db').click(function() { self.$element.find('.oe_login_bottom').hide(); self.$element.find('.oe_login_pane').hide(); @@ -515,12 +515,25 @@ instance.web.Login = instance.web.Widget.extend({ return d; }, _db_list_loaded: function () { + var self = this; var list = this._db_list, dbdiv = this.$element.find('div.oe_login_dbpane'); this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db})); if(list && list.length === 1) { dbdiv.hide(); - } else { + } + if(list.length === 0){ + self.$element.find('.oe_login_bottom').hide(); + self.$element.find('.oe_login_pane').hide(); + self.databasemanager = new instance.web.DatabaseManager(self); + self.databasemanager.appendTo(self.$element); + self.databasemanager.do_exit.add_last(function() { + self.databasemanager.destroy(); + self.$element.find('.oe_login_bottom').show(); + self.$element.find('.oe_login_pane').show(); + }); + } + else { dbdiv.show(); } }, -- cgit v1.2.3 From 09a63068a2e800ff0079446283262f62c17cbcb8 Mon Sep 17 00:00:00 2001 From: "Sanjay Gohel (Open ERP)" Date: Tue, 10 Jul 2012 14:52:55 +0530 Subject: [IMP]minor imp bzr revid: sgo@tinyerp.com-20120710092255-00eo11hm33ejhmnc --- addons/web/static/src/js/chrome.js | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index ffecd3289db..ff9f2c89a0e 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -482,22 +482,26 @@ instance.web.Login = instance.web.Widget.extend({ } } }, + open_db_manager: function(){ + var self = this; + self.$element.find('.oe_login_bottom').hide(); + self.$element.find('.oe_login_pane').hide(); + self.databasemanager = new instance.web.DatabaseManager(self); + self.databasemanager.appendTo(self.$element); + self.databasemanager.do_exit.add_last(function() { + self.databasemanager.destroy(); + self.$element.find('.oe_login_bottom').show(); + self.$element.find('.oe_login_pane').show(); + self.load_db_list(true).then(self.proxy('_db_list_loaded')); + }); + }, start: function() { var self = this; self.$element.find("form").submit(self.on_submit); self.$element.find('.oe_login_manage_db').click(function() { - self.$element.find('.oe_login_bottom').hide(); - self.$element.find('.oe_login_pane').hide(); - self.databasemanager = new instance.web.DatabaseManager(self); - self.databasemanager.appendTo(self.$element); - self.databasemanager.do_exit.add_last(function() { - self.databasemanager.destroy(); - self.$element.find('.oe_login_bottom').show(); - self.$element.find('.oe_login_pane').show(); - self.load_db_list(true).then(self.proxy('_db_list_loaded')); - }); + self.open_db_manager(); }); return self.load_db_list().then(self.proxy('_db_list_loaded')); }, @@ -523,15 +527,7 @@ instance.web.Login = instance.web.Widget.extend({ dbdiv.hide(); } if(list.length === 0){ - self.$element.find('.oe_login_bottom').hide(); - self.$element.find('.oe_login_pane').hide(); - self.databasemanager = new instance.web.DatabaseManager(self); - self.databasemanager.appendTo(self.$element); - self.databasemanager.do_exit.add_last(function() { - self.databasemanager.destroy(); - self.$element.find('.oe_login_bottom').show(); - self.$element.find('.oe_login_pane').show(); - }); + self.open_db_manager(); } else { dbdiv.show(); -- cgit v1.2.3 From b1f09441cd63adf921b5dff88150ab057be97ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 10 Jul 2012 14:34:01 +0200 Subject: [REM] TextFieldHemolt: removed debug log. bzr revid: tde@openerp.com-20120710123401-9dsdg6tvhczan51l --- addons/web/static/src/js/view_form.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2d7d87c4092..c82bf528491 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2303,7 +2303,6 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ initialize_content: function() { - console.log('initialize_content'); this.$textarea = this.$element.find('textarea'); this.$textarea.cleditor({ //width: 500, // width not including margins, borders or padding -- cgit v1.2.3 From 8c4af1a1d4845d94af00bb35a0320971762a271a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 11 Jul 2012 16:44:40 +0200 Subject: [IMP] Improved kanban dropdown bzr revid: fme@openerp.com-20120711144440-oksivy1kmcmjm2zw --- addons/web/static/src/js/chrome.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index b87ebe56856..970d509d481 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -894,11 +894,12 @@ instance.web.WebClient = instance.web.Widget.extend({ }); this.$element.on('click', '.oe_dropdown_toggle', function(ev) { ev.preventDefault(); - var $menu = $(this).find('.oe_dropdown_menu'); + var $toggle = $(this); + var $menu = $toggle.find('.oe_dropdown_menu'); var state = $menu.is('.oe_opened'); setTimeout(function() { // Do not alter propagation - $menu.toggleClass('oe_opened', !state); + $toggle.add($menu).toggleClass('oe_opened', !state); if (!state) { // Move $menu if outside window's edge var doc_width = $(document).width(); -- cgit v1.2.3 From 5a0b486e129a70d785c416dadeb10367c4bfc78a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 11 Jul 2012 17:44:47 +0200 Subject: [IMP] Cleditor: cleaned default options. bzr revid: tde@openerp.com-20120711154447-ojklly0whajbte3y --- addons/web/static/src/js/view_form.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e38cffcfffd..83d57fe4969 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2304,18 +2304,19 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ initialize_content: function() { this.$textarea = this.$element.find('textarea'); + var width = ((this.node.attrs || {}).editor_width || '100%'); + var height = ((this.node.attrs || {}).editor_height || '100%'); this.$textarea.cleditor({ - //width: 500, // width not including margins, borders or padding - //height: 250, // height not including margins, borders or padding - controls: // controls to add to the toolbar + width: width, // width not including margins, borders or padding + height: height, // height not including margins, borders or padding + controls: // controls to add to the toolbar "bold italic underline strikethrough | size " + "| removeformat | bullets numbering | outdent " + "indent | " + "link unlink | source", - sizes: // sizes in the font size popup + sizes: // sizes in the font size popup "1,2,3,4,5,6,7", - useCSS: false, // use CSS to style HTML when possible (not supported in ie) - bodyStyle: // style to assign to document body contained within the editor + bodyStyle: // style to assign to document body contained within the editor "margin:4px; font:13px monospace; cursor:text" }); // call super now, because cleditor seems to reset the disable attr -- cgit v1.2.3 From c183ec5e039900cc43e9efaf0afec51b938c9f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 12 Jul 2012 12:16:07 +0200 Subject: [IMP] TextFieldHtml: updated default values for width/height of cleditor. bzr revid: tde@openerp.com-20120712101607-hbfqhxymwyq9lf2w --- addons/web/static/src/js/view_form.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 83d57fe4969..caa2cb8ab7e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2304,8 +2304,8 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ initialize_content: function() { this.$textarea = this.$element.find('textarea'); - var width = ((this.node.attrs || {}).editor_width || '100%'); - var height = ((this.node.attrs || {}).editor_height || '100%'); + var width = ((this.node.attrs || {}).editor_width || 468); + var height = ((this.node.attrs || {}).editor_height || 100); this.$textarea.cleditor({ width: width, // width not including margins, borders or padding height: height, // height not including margins, borders or padding @@ -2317,8 +2317,9 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ sizes: // sizes in the font size popup "1,2,3,4,5,6,7", bodyStyle: // style to assign to document body contained within the editor - "margin:4px; font:13px monospace; cursor:text" + "margin:4px; font:12px monospace; cursor:text; color:#1F1F1F" }); + this.$cleditor = this.$textarea.cleditor()[0]; // call super now, because cleditor seems to reset the disable attr this._super.apply(this, arguments); if (this.$textarea.attr('disabled') == 'disabled') { @@ -2340,14 +2341,12 @@ instance.web.form.FieldTextHtml = instance.web.form.FieldText.extend({ if (show_value && this.view.options.resize_textareas) { this.do_resize(this.view.options.resize_textareas); } - this.$textarea.cleditor()[0].updateFrame(); + this.$cleditor.updateFrame(); }, get_value: function() { - // retrive cleditor and get its html content - var cleditor = this.$textarea.cleditor()[0]; // cleditor.updateTextArea(); - var value = cleditor.$area.val(); + var value = this.$cleditor.$area.val(); return value; }, }); -- cgit v1.2.3 From 2b6cce2c7c1a53680b974fa0a3a17a83a8702732 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Fri, 13 Jul 2012 13:47:37 +0200 Subject: [IMP] modal dialogs bzr revid: fp@tinyerp.com-20120713114737-hqieh0oi6nnnbjqh --- addons/web/static/src/css/base.css | 7 +++++-- addons/web/static/src/css/base.sass | 4 +++- addons/web/static/src/js/chrome.js | 20 ++++++++++---------- addons/web/static/src/js/view_form.js | 2 +- addons/web/static/src/js/views.js | 11 ++++++++++- 5 files changed, 29 insertions(+), 15 deletions(-) (limited to 'addons/web/static/src') diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 75af0a44202..05c0a9b68b8 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -34,7 +34,7 @@ background: white; /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ + */ */ } .openerp a { text-decoration: none; @@ -240,6 +240,9 @@ .openerp.ui-dialog .ui-dialog-buttonpane button { margin-left: 8px; } +.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; +} .openerp.ui-dialog .ui-dialog-titlebar-close { padding: 0; } @@ -1785,7 +1788,7 @@ display: inline-block; float: right; } -.openerp .oe_form footer { +.openerp .oe_form div.oe_chatter { min-width: 650px; max-width: 860px; margin: 0 auto; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index f9a0306c969..f6e3e9a6ea2 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -235,6 +235,8 @@ $sheet-max-width: 860px @include radius(0 0 2px 2px) button margin-left: 8px + .ui-dialog-buttonset + float: left .ui-dialog-titlebar-close padding: 0 .ui-icon-closethick @@ -1388,7 +1390,7 @@ $sheet-max-width: 860px ul display: inline-block float: right - footer + div.oe_chatter min-width: 650px max-width: $sheet-max-width margin: 0 auto diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index c32d4feafe1..e4d543c69ce 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -63,7 +63,7 @@ instance.web.Dialog = instance.web.Widget.extend({ this.dialog_options = { modal: true, destroy_on_close: true, - width: 750, + width: 700, min_width: 0, max_width: '95%', height: 'auto', @@ -86,7 +86,7 @@ instance.web.Dialog = instance.web.Widget.extend({ if (this.dialog_options.autoOpen) { this.open(); } else { - instance.web.dialog(this.$element, this.get_options()); + test = instance.web.dialog(this.$element, this.get_options()); } }, get_options: function(options) { @@ -145,9 +145,9 @@ instance.web.Dialog = instance.web.Widget.extend({ _.each(this.getChildren(), function(el) { el.destroy(); }); - if (! this.isDestroyed()) { - this.$element.dialog('destroy'); - } + if (! this.isDestroyed()) { + this.$element.dialog('destroy'); + } this._super(); } }); @@ -212,11 +212,11 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({ dialog.$element.html(QWeb.render('CrashManager.error', {session: instance.connection, error: error})); }, on_javascript_exception: function(exception) { - this.on_traceback({ - type: _t("Client Error"), - message: exception, - data: {debug: ""} - }); + this.on_traceback({ + type: _t("Client Error"), + message: exception, + data: {debug: ""} + }); }, }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a2e0baaded6..3a3c49b2375 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -526,7 +526,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.on_form_changed(); } if (!_.isEmpty(result.warning)) { - instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { + instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { title:result.warning.title, modal: true, buttons: [ diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 423bf3f9d46..1bfd7d18776 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -220,7 +220,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ } if (action.target === 'new') { if (this.dialog === null) { - this.dialog = new instance.web.Dialog(this, { width: '80%' }); + // These buttons will be overwrited by