summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfja-odoo <fja@odoo.com>2019-06-19 15:28:56 +0000
committerqsm-odoo <qsm@odoo.com>2019-08-08 16:05:33 +0000
commit736353b169d451d48cb9d5ae82c2d342543ba57e (patch)
tree9734e1e729938710074aab8b96a787ac889a9f4e
parent50155ae08e6e3f4a60bf3142174f56bfd246d865 (diff)
[IMP] website, *: improve published smart button
* = web, website_blog, website_crm_partner_assign, website_event, website_event_track, website_forum, website_hr_recruitment, website_livechat, website_partner, website_profile, website_sale, website_sale_delivery, website_slides The published button name is a bit ambiguous, now it will clearly state what it does with a new title : "Go to Website". The "Published", "Unpublished" state is shown with the globe icon changing color (green and red) and a title on the button. Badge and Delivery don't have a website page, the button will then be a publish/unpublish button in the backend. task-2002435 closes odoo/odoo#34261 Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
-rw-r--r--addons/web/static/src/scss/form_view.scss1
-rw-r--r--addons/website/models/mixins.py5
-rw-r--r--addons/website/static/src/js/backend/button.js89
-rw-r--r--addons/website/static/src/xml/website.backend.xml9
-rw-r--r--addons/website/static/tests/website_tests.js28
-rw-r--r--addons/website_blog/views/website_blog_views.xml7
-rw-r--r--addons/website_crm_partner_assign/views/res_partner_views.xml5
-rw-r--r--addons/website_event/views/event_views.xml7
-rw-r--r--addons/website_event_track/views/event_track_views.xml5
-rw-r--r--addons/website_event_track/views/event_views.xml4
-rw-r--r--addons/website_forum/views/res_users_views.xml5
-rw-r--r--addons/website_hr_recruitment/views/hr_recruitment_views.xml6
-rw-r--r--addons/website_livechat/views/website_livechat_view.xml5
-rw-r--r--addons/website_partner/views/res_partner_views.xml5
-rw-r--r--addons/website_profile/views/gamification_badge_views.xml7
-rw-r--r--addons/website_sale/models/product.py7
-rw-r--r--addons/website_sale/views/product_views.xml5
-rw-r--r--addons/website_sale_delivery/views/website_sale_delivery_views.xml4
-rw-r--r--addons/website_slides/views/slide_channel_views.xml5
-rw-r--r--addons/website_slides/views/slide_slide_views.xml8
20 files changed, 124 insertions, 93 deletions
diff --git a/addons/web/static/src/scss/form_view.scss b/addons/web/static/src/scss/form_view.scss
index 088fefc03ed..51920df3510 100644
--- a/addons/web/static/src/scss/form_view.scss
+++ b/addons/web/static/src/scss/form_view.scss
@@ -338,6 +338,7 @@
background-color: transparent;
opacity: 0.8;
border-radius: 0px;
+ margin-bottom: 0; // If the button comes from a field
&:hover, &:focus {
background-color: rgba(black, 0.03);
diff --git a/addons/website/models/mixins.py b/addons/website/models/mixins.py
index a13fc3d59e4..76c98ca5ce6 100644
--- a/addons/website/models/mixins.py
+++ b/addons/website/models/mixins.py
@@ -132,11 +132,6 @@ class WebsitePublishedMixin(models.AbstractModel):
def website_publish_button(self):
self.ensure_one()
- if self.env.user.has_group('website.group_website_publisher') and self.website_url != '#':
- # Force website to land on record's website to publish/unpublish it
- if 'website_id' in self and self.env.user.has_group('website.group_multi_website'):
- self.website_id._force()
- return self.open_website_url()
return self.write({'website_published': not self.website_published})
def open_website_url(self):
diff --git a/addons/website/static/src/js/backend/button.js b/addons/website/static/src/js/backend/button.js
index 0f6ea22cb7f..23be7708e5b 100644
--- a/addons/website/static/src/js/backend/button.js
+++ b/addons/website/static/src/js/backend/button.js
@@ -7,14 +7,17 @@ var field_registry = require('web.field_registry');
var _t = core._t;
-var WidgetWebsiteButton = AbstractField.extend({
- template: 'WidgetWebsiteButton',
+var WebsitePublishButton = AbstractField.extend({
+ className: 'o_stat_info',
+ supportedFieldTypes: ['boolean'],
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
+ * A boolean field is always set since false is a valid value.
+ *
* @override
*/
isSet: function () {
@@ -26,19 +29,89 @@ var WidgetWebsiteButton = AbstractField.extend({
//--------------------------------------------------------------------------
/**
+ * This widget is supposed to be used inside a stat button and, as such, is
+ * rendered the same way in edit and readonly mode.
+ *
* @override
* @private
*/
_render: function () {
+ this.$el.empty();
+ var text = this.value ? _t("Published") : _t("Unpublished");
+ var hover = this.value ? _t("Unpublish") : _t("Publish");
+ var valColor = this.value ? 'text-success' : 'text-danger';
+ var hoverColor = this.value ? 'text-danger' : 'text-success';
+ var $val = $('<span>').addClass('o_stat_text o_not_hover ' + valColor).text(text);
+ var $hover = $('<span>').addClass('o_stat_text o_hover ' + hoverColor).text(hover);
+ this.$el.append($val).append($hover);
+ },
+});
+
+var WidgetWebsiteButtonIcon = AbstractField.extend({
+ template: 'WidgetWebsiteButtonIcon',
+ events: {
+ 'click': '_onClick',
+ },
+
+ /**
+ * @override
+ */
+ start: function () {
+ this.$icon = this.$('.o_button_icon');
+ return this._super.apply(this, arguments);
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ */
+ isSet: function () {
+ return true;
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ */
+ _render: function () {
this._super.apply(this, arguments);
- var $value = this.$('.o_value');
- var published = (this.value === true);
- $value.html(published ? _t("Published") : _t("Unpublished"))
- .toggleClass('text-danger', !published)
- .toggleClass('text-success', published);
+ var published = this.value;
+ var info = published ? _t("Published") : _t("Unpublished");
+ this.$el.attr('aria-label', info)
+ .prop('title', info);
+ this.$icon.toggleClass('text-danger', !published)
+ .toggleClass('text-success', published);
+ },
+
+ //--------------------------------------------------------------------------
+ // Handler
+ //--------------------------------------------------------------------------
+
+ /**
+ * Redirects to the website page of the record.
+ *
+ * @private
+ */
+ _onClick: function () {
+ var self = this;
+ this._rpc({
+ model: this.model,
+ method: 'open_website_url',
+ args: [this.res_id],
+ }).then(function (result) {
+ self.do_action(result);
+ });
},
});
-field_registry.add('website_button', WidgetWebsiteButton);
+field_registry
+ .add('website_redirect_button', WidgetWebsiteButtonIcon)
+ .add('website_publish_button', WebsitePublishButton);
});
diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml
index 25745afb6b8..1063de39fed 100644
--- a/addons/website/static/src/xml/website.backend.xml
+++ b/addons/website/static/src/xml/website.backend.xml
@@ -5,6 +5,15 @@
<span class="o_stat_text">On Website</span>
</div>
+ <t t-name="WidgetWebsiteButtonIcon">
+ <button type="button" class="btn oe_stat_button">
+ <i class="fa fa-fw o_button_icon fa-globe"/>
+ <div class="o_stat_info">
+ <span class="o_stat_text">Go to<br/>Website</span>
+ </div>
+ </button>
+ </t>
+
<t t-name="website.WebsiteDashboardMain">
<div class="o_dashboards">
<div class="container-fluid o_website_dashboard">
diff --git a/addons/website/static/tests/website_tests.js b/addons/website/static/tests/website_tests.js
index cd7d14a68a3..8d43100b9d5 100644
--- a/addons/website/static/tests/website_tests.js
+++ b/addons/website/static/tests/website_tests.js
@@ -31,22 +31,19 @@ QUnit.module('website', {
View: FormView,
model: 'blog_post',
data: this.data,
- arch:
- '<form>' +
+ arch: '<form>' +
'<sheet>' +
'<div class="oe_button_box" name="button_box">' +
- '<button class="oe_stat_button" name="website_publish_button" type="object" icon="fa-globe">' +
- '<field name="website_published" widget="website_button"/>' +
- '</button>' +
+ '<field name="website_published" widget="website_redirect_button"/>' +
'</div>' +
'</sheet>' +
'</form>',
res_id: 1,
});
- var selector = '.oe_button_box .oe_stat_button .o_stat_info[name="website_published"] .o_stat_text';
- assert.containsN(form, selector, 2, "there should be two texts displayed");
- selector = '.oe_button_box .oe_stat_button .o_stat_info[name="website_published"] .o_stat_text.o_value.text-danger';
- assert.containsOnce(form, selector, "there should be one text in red");
+ var selector = '.oe_button_box .oe_stat_button[name="website_published"] .o_stat_text';
+ assert.containsN(form, selector, 1, "there should be one text displayed");
+ selector = '.oe_button_box .oe_stat_button[name="website_published"] .o_button_icon.fa-globe.text-danger';
+ assert.containsOnce(form, selector, "there should be one icon in red");
form.destroy();
});
QUnit.test("widget website button: display true value", async function (assert) {
@@ -56,21 +53,18 @@ QUnit.module('website', {
View: FormView,
model: 'blog_post',
data: this.data,
- arch:
- '<form>' +
+ arch: '<form>' +
'<sheet>' +
'<div class="oe_button_box" name="button_box">' +
- '<button class="oe_stat_button" name="website_publish_button" type="object" icon="fa-globe">' +
- '<field name="website_published" widget="website_button"/>' +
- '</button>' +
+ '<field name="website_published" widget="website_redirect_button"/>' +
'</div>' +
'</sheet>' +
'</form>',
res_id: 2,
});
- var selector = '.oe_button_box .oe_stat_button .o_stat_info[name="website_published"] .o_stat_text';
- assert.containsN(form, selector, 2, "should be two texts displayed");
- selector = '.oe_button_box .oe_stat_button .o_stat_info[name="website_published"] .o_stat_text.o_value.text-success';
+ var selector = '.oe_button_box .oe_stat_button[name="website_published"] .o_stat_text';
+ assert.containsN(form, selector, 1, "should be one text displayed");
+ selector = '.oe_button_box .oe_stat_button[name="website_published"] .o_button_icon.fa-globe.text-success';
assert.containsOnce(form, selector, "there should be one text in green");
form.destroy();
});
diff --git a/addons/website_blog/views/website_blog_views.xml b/addons/website_blog/views/website_blog_views.xml
index 7152b2c299b..e73f23b9ad8 100644
--- a/addons/website_blog/views/website_blog_views.xml
+++ b/addons/website_blog/views/website_blog_views.xml
@@ -61,10 +61,7 @@
<sheet>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_button_box" name="button_box">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
<group name="blog_details">
<field name="blog_id"/>
@@ -260,7 +257,7 @@
<menuitem name="Blogs"
id="menu_website_blog_root_global"
sequence="100"
- parent="website.menu_website_global_configuration"
+ parent="website.menu_website_global_configuration"
groups="website.group_website_designer"/>
<menuitem id="menu_website_blog_tag_category_global" parent="menu_website_blog_root_global"
diff --git a/addons/website_crm_partner_assign/views/res_partner_views.xml b/addons/website_crm_partner_assign/views/res_partner_views.xml
index bc42280abfb..51bdb6cbbc0 100644
--- a/addons/website_crm_partner_assign/views/res_partner_views.xml
+++ b/addons/website_crm_partner_assign/views/res_partner_views.xml
@@ -58,10 +58,7 @@
<form string="Partner Level">
<sheet string="Level">
<div class="oe_button_box" name="button_box">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
diff --git a/addons/website_event/views/event_views.xml b/addons/website_event/views/event_views.xml
index 7641aa7844a..59fa3d2837f 100644
--- a/addons/website_event/views/event_views.xml
+++ b/addons/website_event/views/event_views.xml
@@ -35,12 +35,7 @@
</field>
<div name="button_box" position="inside">
<field name="website_url" invisible="1"/>
- <button name="website_publish_button"
- type="object"
- class="oe_stat_button"
- icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
<label for="is_online" position="after">
<field name="website_menu"/>
diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml
index b65b708fa87..19a7fcd10ea 100644
--- a/addons/website_event_track/views/event_track_views.xml
+++ b/addons/website_event_track/views/event_track_views.xml
@@ -116,10 +116,7 @@
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_button_box" name="button_box">
<field name="website_url" invisible="1"/>
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
<field name="kanban_state" widget="state_selection"/>
<div class="oe_title">
diff --git a/addons/website_event_track/views/event_views.xml b/addons/website_event_track/views/event_views.xml
index 8a3ac53b19a..0ae83b9400f 100644
--- a/addons/website_event_track/views/event_views.xml
+++ b/addons/website_event_track/views/event_views.xml
@@ -23,7 +23,7 @@
<field name="inherit_id" ref="website_event.event_event_view_form_inherit_website"/>
<field name="model">event.event</field>
<field name="arch" type="xml">
- <button name="website_publish_button" position="before">
+ <field name="is_published" position="before">
<button name="%(action_event_track_from_event)d"
type="action"
class="oe_stat_button"
@@ -36,7 +36,7 @@
icon="fa-users">
<field name="sponsor_count" string="Sponsors" widget="statinfo"/>
</button>
- </button>
+ </field>
<label for="website_menu" position="after">
<field name="website_track" attrs="{'invisible': [('website_menu', '=', False)]}"/>
<label for="website_track" string="Tracks on Website" attrs="{'invisible': [('website_menu', '=', False)]}"/>
diff --git a/addons/website_forum/views/res_users_views.xml b/addons/website_forum/views/res_users_views.xml
index 7036588ba97..85d62a26d3e 100644
--- a/addons/website_forum/views/res_users_views.xml
+++ b/addons/website_forum/views/res_users_views.xml
@@ -12,10 +12,7 @@
<field name="karma" string="Forum Karma"/>
</field>
<div name="button_box" position="inside">
- <button class="oe_stat_button" name="open_website_url"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
</field>
</record>
diff --git a/addons/website_hr_recruitment/views/hr_recruitment_views.xml b/addons/website_hr_recruitment/views/hr_recruitment_views.xml
index 3c487f3c07a..931cab4d458 100644
--- a/addons/website_hr_recruitment/views/hr_recruitment_views.xml
+++ b/addons/website_hr_recruitment/views/hr_recruitment_views.xml
@@ -17,10 +17,7 @@
<field name="inherit_id" ref="hr_recruitment.hr_job_survey"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
</field>
</record>
@@ -46,5 +43,4 @@
</field>
</field>
</record>
-
</odoo>
diff --git a/addons/website_livechat/views/website_livechat_view.xml b/addons/website_livechat/views/website_livechat_view.xml
index 1441f0642ff..f160d68c6f9 100644
--- a/addons/website_livechat/views/website_livechat_view.xml
+++ b/addons/website_livechat/views/website_livechat_view.xml
@@ -8,10 +8,7 @@
<field name="inherit_id" ref="im_livechat.im_livechat_channel_view_form"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
</field>
</record>
diff --git a/addons/website_partner/views/res_partner_views.xml b/addons/website_partner/views/res_partner_views.xml
index 6d9a93ea920..390d86d2189 100644
--- a/addons/website_partner/views/res_partner_views.xml
+++ b/addons/website_partner/views/res_partner_views.xml
@@ -8,10 +8,7 @@
<field name="arch" type="xml">
<data>
<div name="button_box" position="inside">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
</data>
</field>
diff --git a/addons/website_profile/views/gamification_badge_views.xml b/addons/website_profile/views/gamification_badge_views.xml
index 6a3cbe77249..f7b3b087f0e 100644
--- a/addons/website_profile/views/gamification_badge_views.xml
+++ b/addons/website_profile/views/gamification_badge_views.xml
@@ -6,11 +6,10 @@
<field name="inherit_id" ref="gamification.badge_form_view"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
+ <button name="website_publish_button" type="object" class="oe_stat_button" icon="fa-globe">
+ <field name="is_published" widget="website_publish_button"/>
</button>
</xpath>
</field>
</record>
-</odoo> \ No newline at end of file
+</odoo>
diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py
index 5ff7890914c..2b1e4007831 100644
--- a/addons/website_sale/models/product.py
+++ b/addons/website_sale/models/product.py
@@ -410,12 +410,7 @@ class Product(models.Model):
def website_publish_button(self):
self.ensure_one()
- res = self.product_tmpl_id.website_publish_button()
-
- # res can be the result of write() if not website_publisher
- if type(res) == dict and res.get('type') == 'ir.actions.act_url':
- res['url'] = self.website_url
- return res
+ return self.product_tmpl_id.website_publish_button()
def open_website_url(self):
self.ensure_one()
diff --git a/addons/website_sale/views/product_views.xml b/addons/website_sale/views/product_views.xml
index 6b68b0e6ba4..60d1b50aa90 100644
--- a/addons/website_sale/views/product_views.xml
+++ b/addons/website_sale/views/product_views.xml
@@ -99,10 +99,7 @@
<attribute name="invisible">0</attribute>
</xpath>
<div name="button_box" position="inside">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe" attrs="{'invisible': [('sale_ok','=',False)]}">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button" attrs="{'invisible': [('sale_ok','=',False)]}"/>
</div>
<xpath expr="//page[@name='sales']" position="after">
<page name="shop" string="eCommerce" attrs="{'invisible': [('sale_ok','=',False)]}">
diff --git a/addons/website_sale_delivery/views/website_sale_delivery_views.xml b/addons/website_sale_delivery/views/website_sale_delivery_views.xml
index 3ad54b1d01a..66296d31944 100644
--- a/addons/website_sale_delivery/views/website_sale_delivery_views.xml
+++ b/addons/website_sale_delivery/views/website_sale_delivery_views.xml
@@ -15,8 +15,8 @@
</page>
</xpath>
<xpath expr="//button[@name='toggle_prod_environment']" position='before'>
- <button class="oe_stat_button" name="website_publish_button" type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
+ <button name="website_publish_button" type="object" class="oe_stat_button" icon="fa-globe">
+ <field name="is_published" widget="website_publish_button"/>
</button>
</xpath>
</field>
diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml
index 50261342db7..e877311de22 100644
--- a/addons/website_slides/views/slide_channel_views.xml
+++ b/addons/website_slides/views/slide_channel_views.xml
@@ -39,10 +39,7 @@
attrs="{'invisible': [('allow_comment', '=', False)]}">
<field name="rating_count" string="Reviews" widget="statinfo"/>
</button>
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"/>
</div>
<field name="image_1920" widget="image" class="oe_avatar" options="{'preview_image': 'image_128'}"/>
<div class="oe_title">
diff --git a/addons/website_slides/views/slide_slide_views.xml b/addons/website_slides/views/slide_slide_views.xml
index 4e927211a3b..d145869f52f 100644
--- a/addons/website_slides/views/slide_slide_views.xml
+++ b/addons/website_slides/views/slide_slide_views.xml
@@ -42,10 +42,8 @@
<sheet>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_button_box" name="button_box">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe" attrs="{'invisible': [('is_category', '=', True)]}">
- <field name="is_published" widget="website_button"/>
- </button>
+ <field name="is_published" widget="website_redirect_button"
+ attrs="{'invisible': [('is_category', '=', True)]}"/>
</div>
<field name="image_1920" widget="image" class="oe_avatar" options='{"preview_image": "image_256"}'
attrs="{'readonly': [('slide_type', 'in', ('document', 'presentation', 'video'))], 'invisible': [('is_category', '=', True)]}"
@@ -277,4 +275,4 @@
<field name="view_id" ref="slide_slide_view_graph"/>
</record>
</data>
-</odoo> \ No newline at end of file
+</odoo>