diff options
| author | fja-odoo <fja@odoo.com> | 2019-06-19 15:28:56 +0000 |
|---|---|---|
| committer | qsm-odoo <qsm@odoo.com> | 2019-08-08 16:05:33 +0000 |
| commit | 736353b169d451d48cb9d5ae82c2d342543ba57e (patch) | |
| tree | 9734e1e729938710074aab8b96a787ac889a9f4e | |
| parent | 50155ae08e6e3f4a60bf3142174f56bfd246d865 (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>
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> |
