Skip to content

Master snippet options owl role #3300

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 102 commits into
base: master-snippet-options-owl-ard
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
5fb5de8
[REF] web_editor: move SnippetOptionWidget into legacy file
detrouxdev Apr 8, 2024
0b4d6d1
[REF] web_editor: convert SnippetOption widget to an ES6 class
detrouxdev Apr 8, 2024
661d5fd
[REF] web_editor: convert UserValueWidget and <we-button> to OWL
detrouxdev Apr 24, 2024
0369fbf
[REF] web_editor: convert <we-select> to OWL
detrouxdev Apr 24, 2024
6102422
[REF] web_editor: add WeButtonGroup component
detrouxdev May 8, 2024
bac3ebc
[WIP] web_editor: add tooltips on buttons
detrouxdev May 8, 2024
fdfd1b3
[REF] web_editor: Convert column width to new Owl option
detrouxdev May 8, 2024
66c96fb
[REF] web_editor: adapt Unit & Input user value widget to Owl
bso-odoo Apr 26, 2024
259a370
[REF] web_editor: convert we-datetimepicker to OWL
bso-odoo May 15, 2024
b0b52aa
[REF] web_editor: convert we-row to OWL
detrouxdev May 16, 2024
835e581
[REF] web_editor: add WeTitle component
robinlej Aug 1, 2024
6f5a802
[REF] web_editor, website: convert column and grid option to OWL
detrouxdev May 21, 2024
91a43b2
[REF] web_editor: convert ColorpickerUserValueWidget to OWL
detrouxdev Jun 4, 2024
bdf273b
[WIP] web_editor: convert Mediapicker widget to OWL
robinlej May 7, 2024
66577ca
[IMP] web_editor: convert Range widget to Owl
bso-odoo May 2, 2024
cc85af4
[IMP] website: convert UrlPicker widget to Owl
bso-odoo May 6, 2024
99a9593
[REF] web_editor: convert we-checkbox to Owl
bso-odoo Jun 3, 2024
476a963
[REF] website: convert SnippetOption website patch
bso-odoo Jun 4, 2024
57e093d
[REF] web_editor: convert MultiUserValueWidget to Owl
bso-odoo Jun 10, 2024
7c9cf16
[REF] website: convert s_facebook_page options to Owl
agau-odoo Jun 20, 2024
a475943
[REF] website: convert s_image options to Owl
agau-odoo Jun 20, 2024
160ee60
[REF] web_editor: allow asynchronous start on UserValue
bso-odoo Jun 5, 2024
4ee4096
[REF] website: convert GPSPicker to Owl
bso-odoo May 29, 2024
d674f9f
[REF] website: convert s_google_map options
bso-odoo Jun 3, 2024
390b007
[REF] convert WeFontFamilyPicker to Owl
bso-odoo Jun 6, 2024
e4de5f1
[REF] website: convert s_instagram_page options to Owl
agau-odoo Jun 20, 2024
bac452b
[REF] website: convert s_map options to Owl
agau-odoo Jun 20, 2024
94371df
[MOV] web: move camelToKebab to strings utils
robinlej Jun 25, 2024
65dcedf
[REF] web_editor: convert ListUserValueWidget to OWL
robinlej May 27, 2024
8c0f4bb
[REF] web_editor: show widget components by default
robinlej Jun 11, 2024
84c5aff
[REF] web_editor, website: convert Many2oneUserValueWidget to OWL
robinlej Jun 7, 2024
46267d8
[REF] website: convert s_embed_code options to OWL
robinlej Jun 20, 2024
3216ca6
[REF] web_editor: convert "cover_update" trigger_up
robinlej Jun 25, 2024
1bd3554
[REF] (temp) website: use env in utils instead of trigger_up
robinlej Jun 26, 2024
548fde5
[REF] web_editor: convert option_update trigger_up to notifyOptions
robinlej Jun 28, 2024
5dea23a
[REF] web_editor, *: introduce a register mechanism for options
detrouxdev Jul 3, 2024
b1918da
[REF] web_editor, website: adapt background options to OWL
detrouxdev Jul 3, 2024
389c3e5
[REF] web_editor: add isElementSelected to subEnv
robinlej Jun 28, 2024
124c26f
[REF] website: convert s_blockquote options to Owl
bso-odoo Jul 4, 2024
1707933
[REF] website: convert vertical alignment option
bso-odoo Jun 12, 2024
f788525
[REF] website: convert card color/border/shadow options to Owl
bso-odoo Jun 13, 2024
e80997f
[REF] website: convert horizontal alignment options to Owl
bso-odoo Jun 13, 2024
86e26be
[REF] website: convert share/social option to Owl
bso-odoo Jun 13, 2024
831a1b9
[FIX] web_editor: delay OWL updateUI until after postSnippetDrop promise
detrouxdev Jul 5, 2024
540db97
[FIX] web_editor, website: fix tours with OWL options
detrouxdev Jul 8, 2024
3ea0730
[REF] website: remove old exports
detrouxdev Jul 8, 2024
8322e5b
[WIP][FIX] website: attempt to fix a tour
detrouxdev Jul 8, 2024
4fe4219
[WIP] web_editor: attempt at improving performance of tours
detrouxdev Jul 10, 2024
c32cdbb
[REF] website: convert s_countdown options to Owl
bso-odoo Jun 18, 2024
c67ce1c
[REF] website: convert s_media_list options to Owl
bso-odoo Jun 27, 2024
37f13b4
[REF] website: add only coulumn option
detrouxdev Jul 11, 2024
5c07f5b
[REF] website: convert s_process_steps options to Owl
bso-odoo Jun 27, 2024
725772e
[REF] website: convert GalleryImage options to OWL
robinlej Jun 25, 2024
f8ec375
[IMP] web_editor: add static defaultRenderingComponent to SnippetOpti…
agau-odoo Jun 27, 2024
cda4955
[REF] web_editor: add updateSnippetOptionVisibility to SnippetEditor …
robinlej Jun 28, 2024
b9bbaa3
[REF] website, web_editor: convert DeviceVisibility and ConditionalVi…
robinlej Jun 28, 2024
ebdd8f4
[REF] web_editor, *: refactor serviceCached to work with any services
detrouxdev Jul 16, 2024
c813146
[REF] website: convert SocialMedia options to OWL
robinlej Jul 1, 2024
397c6a2
[REF] website_sale: convert s_add_to_cart option to OWL
robinlej Jul 2, 2024
965d15a
[REF] website_mail_group: convert s_group options to OWL
robinlej Jul 3, 2024
97647a2
[REF] web_editor: hide editors for users not in group
robinlej Jul 4, 2024
595f445
[REF] web_editor: provide a way to display Owl options in overlay
bso-odoo Jun 27, 2024
351efbd
[REF] web_editor, website: convert SnippetMove options to Owl
bso-odoo Jun 27, 2024
08b7c1d
[REF] website: convert s_product_catalog options to Owl
bso-odoo Jun 27, 2024
f2c9ae6
[REF] website: convert s_progress_bar option to Owl
bso-odoo Jul 1, 2024
14d19b0
[REF] web_editor, website: convert s_chart to Owl
bso-odoo Jun 12, 2024
6b0b66d
[REF] website, *: convert dynamic snippet options to Owl
bso-odoo Jun 18, 2024
32b7ee6
[REM] website: s_progress_bar already in so_content_addition
bso-odoo Jul 1, 2024
7ef0f30
[REF] website: convert s_showcase option to Owl
bso-odoo Jul 1, 2024
d8c42ef
[REF] web_editor: support isTopOption in Owl snippet options
bso-odoo Jul 1, 2024
a177a10
[REF] website: convert s_tabs option to Owl
bso-odoo Jul 1, 2024
e832d2d
[REF] website: convert s_timeline option to Owl
bso-odoo Jul 1, 2024
b0a048a
[REF] web_editor: support naming editor block with data.string
bso-odoo Jul 2, 2024
dec2389
[REF] website: convert s_website_controller_page_listing to Owl
bso-odoo Jul 1, 2024
a094064
[REF] website, web_editor: Carousel, CarouselItem, GalleryElement
robinlej Jul 5, 2024
c9150b9
[REF] web_editor: convert SelectTemplate option to Owl
agau-odoo Jun 26, 2024
b5098a2
[REF] web_editor: convert s_masonry_block options to Owl
agau-odoo Jun 26, 2024
6e5a9ff
[IMP] web_editor: use forceNoDeleteButton in owl options
agau-odoo Jul 1, 2024
cf14b7b
[REF] web_editor, website: convert MegaMenuLayout options to owl
agau-odoo Jun 26, 2024
554bae5
[WIP] web_editor: disable test_options
detrouxdev Jul 23, 2024
5beda1a
[REF] website_payment, *: convert s_donation options to OWL
robinlej Jul 3, 2024
b7dab7d
[REF] website: convert s_rating option to Owl
bso-odoo Jul 1, 2024
67342bd
[REF] web_editor, website: convert s_website_form options to Owl
bso-odoo Jul 2, 2024
0565709
[WIP] disable legacy options and keep editors in DOM
detrouxdev Aug 6, 2024
1ea9cc1
[WIP] fixup! [REF] web_editor, website: convert s_website_form option…
detrouxdev Aug 6, 2024
edacf5e
fixup! [REF] web_editor: adapt Unit & Input user value widget to Owl
robinlej Aug 5, 2024
b0e0a62
fixup! [REF] web_editor: add WeTitle component
robinlej Aug 2, 2024
da59730
fixup! [REF] convert WeFontFamilyPicker to Owl
robinlej Aug 2, 2024
3ba4cfd
fixup! [IMP] website: convert UrlPicker widget to Owl
robinlej Aug 2, 2024
0dca0b8
[REF] web_editor, *: convert ImageTools and WebsiteAnimate options
robinlej Jul 11, 2024
5f22075
[REF] website, web_editor: convert TextHighlight to OWL
robinlej Jul 30, 2024
bff3817
[REF] mass_mailing: convert border options to OWL
robinlej Jul 31, 2024
8021dbb
[REF] mass_mailing: convert MassMailingImageTools to OWL
robinlej Jul 31, 2024
26bd73e
[REF] web_editor: add an updateOption util
robinlej Jul 31, 2024
93ff24f
[REF] website, website_blog: use updateOption util
robinlej Jul 31, 2024
a504d20
[REF] mass_mailing: convert MassMailingBackgroundImage to OWL
robinlej Jul 31, 2024
d6119a9
[REF] web_editor, website_blog: convert many2one SnippetOption to OWL
robinlej Jul 31, 2024
078c847
[REF] web_editor, website: convert SaveSnippet option to Owl
bso-odoo Jul 15, 2024
3eb1fbe
[REF] website_sale: convert SnippetSave patch to OWL
robinlej Aug 8, 2024
27f573f
[REF] website: convert s_badge_options to OWL
robinlej Aug 8, 2024
a3e0f25
[REF] website, mass_mailing: convert s_hr_options to OWL
robinlej Aug 8, 2024
d8a5dc4
Do not pick - trash commit
robinlej Jul 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions addons/mass_mailing/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@
('include', 'web_editor.assets_snippets_menu'),
'mass_mailing/static/src/js/snippets.editor.js',
'mass_mailing/static/src/xml/mass_mailing.editor.xml',
'mass_mailing/static/src/js/snippets.options.xml',
'mass_mailing/static/src/js/snippets.registry.js',
'mass_mailing/static/src/snippets/s_hr/options.xml',
],
'web.assets_frontend': [
'mass_mailing/static/src/js/tours/**/*',
Expand Down
44 changes: 35 additions & 9 deletions addons/mass_mailing/static/src/js/mass_mailing_snippets.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
/** @odoo-module **/

import options from "@web_editor/js/editor/snippets.options";
import options from "@web_editor/js/editor/snippets.options.legacy";
import { loadImage } from "@web_editor/js/editor/image_processing";
import { BackgroundImage, ImageTools, registerBackgroundOptions } from "@web_editor/js/editor/snippets.options";
import { updateOption } from "@web_editor/js/editor/snippets.registry";
const SelectUserValueWidget = options.userValueWidgetsRegistry['we-select'];
import weUtils from "@web_editor/js/common/utils";
import {
Expand All @@ -11,6 +13,7 @@ import {
transformFontFamilySelector,
} from "@mass_mailing/js/mass_mailing_design_constants";
import { isCSSColor, normalizeCSSColor } from "@web/core/utils/colors";
import { registerMassMailingOption } from "./snippets.registry";


//--------------------------------------------------------------------------
Expand All @@ -19,17 +22,32 @@ import { isCSSColor, normalizeCSSColor } from "@web/core/utils/colors";

// Adding compatibility for the outlook compliance of mailings.
// Commit of such compatibility : a14f89c8663c9cafecb1cc26918055e023ecbe42
options.registry.MassMailingBackgroundImage = options.registry.BackgroundImage.extend({
start: function () {
this._super();
class MassMailingBackgroundImage extends BackgroundImage {
/**
* @override
*/
willStart() {
super.willStart(...arguments);
const $table_target = this.$target.find('table:first');
if ($table_target.length) {
this.$target = $table_target;
}
}
}
// Allow changing background images in Masonry and Cover
registerBackgroundOptions("MassMailingBackgroundImage", {
selector: ".s_masonry_block .row > div, .s_cover .oe_img_bg",
withImages: true,
withVideos: false,
withShapes: false,
},
(name) => name === "toggler" && "mass_mailing.snippet_options_background_options"
);
updateOption("MassMailingBackgroundImage-bgToggler", {
Class: () => MassMailingBackgroundImage,
});

options.registry.MassMailingImageTools = options.registry.ImageTools.extend({
class MassMailingImageTools extends ImageTools {

//--------------------------------------------------------------------------
// Private
Expand All @@ -48,13 +66,12 @@ options.registry.MassMailingImageTools = options.registry.ImageTools.extend({
const colorValue = window.getComputedStyle(tempEl).getPropertyValue("background-color").trim();
tempEl.parentNode.removeChild(tempEl);
return normalizeCSSColor(colorValue).replace(/"/g, "'");
},

}
/**
* @override
*/
async computeShape(svgText, img) {
const dataURL = await this._super(...arguments);
const dataURL = await super.computeShape(...arguments);
const image = await loadImage(dataURL);
const canvas = document.createElement("canvas");
const imgFilename = (img.dataset.originalSrc.split("/").pop()).split(".")[0];
Expand All @@ -65,7 +82,16 @@ options.registry.MassMailingImageTools = options.registry.ImageTools.extend({
canvas.getContext("2d").drawImage(image, 0, 0, image.width, image.height);
return canvas.toDataURL(`image/png`, 1.0);
}
});
/**
* @override
*/
_relocateWeightEl() {}
}
registerMassMailingOption("MassMailingImageTools", {
Class: MassMailingImageTools,
template: "mass_mailing.ImageTools",
selector: "img",
}, { sequence: 49 });

options.userValueWidgetsRegistry['we-fontfamilypicker'] = SelectUserValueWidget.extend({
/**
Expand Down
90 changes: 90 additions & 0 deletions addons/mass_mailing/static/src/js/snippets.options.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<templates id="template" xml:space="preserve">

<!-- Border -->
<t t-name="mass_mailing.snippet_options_border_line_widgets">
<WeRow title="label">
<WeInput name="'border_width_opt'"
applyTo="apply_to || ''"
selectStyle="'0'"
cssProperty="'border-' + (direction ? direction + '-' : '') + 'width'"
unit="'px'"
extraClass="with_bs_class ? 'border' : ''"
variable="width_variable || ''"/>
<WeSelect dependencies="'border_width_opt'"
cssProperty="'border-' + (direction ? direction + '-' : '') + 'style'"
applyTo="apply_to || ''"
variable="style_variable || ''">
<WeButton tooltip.translate="Solid" selectStyle="'solid'"><div class="o_we_fake_img_item o_we_border_preview" style="border-style: solid;"/></WeButton>
<WeButton tooltip.translate="Dashed" selectStyle="'dashed'"><div class="o_we_fake_img_item o_we_border_preview" style="border-style: dashed;"/></WeButton>
<WeButton tooltip.translate="Dotted" selectStyle="'dotted'"><div class="o_we_fake_img_item o_we_border_preview" style="border-style: dotted;"/></WeButton>
<WeButton tooltip.translate="Double" selectStyle="'double'"><div class="o_we_fake_img_item o_we_border_preview" style="border-style: double; border-left: none; border-right: none;"/></WeButton>
</WeSelect>
<WeColorpicker dependencies="'border_width_opt'"
applyTo="apply_to || ''"
selectStyle="'true'"
cssProperty="'border-' + (direction ? direction + '-' : '') + 'color'"
colorPrefix="'border-'"
color="color_variable || ''"/>
</WeRow>
</t>

<t t-name="mass_mailing.snippet_options_border_widgets">
<t t-call="mass_mailing.snippet_options_border_line_widgets">
<t t-set="label">Border</t>
<t t-set="with_bs_class" t-value="true"/>
</t>
<WeInput title.translate="Round Corners"
applyTo="apply_to || ''"
dependencies="!so_rounded_no_dependencies and 'border_width_opt,bg_color_opt'"
selectStyle="'0'" cssProperty="'border-radius'"
unit="'px'" extraClass="'rounded'"
variable="radius_variable || ''"/>
</t>

<t t-name="mass_mailing.snippet_options_background_options" t-inherit="web_editor.snippet_options_background_options" t-inherit-mode="primary"/>

<!-- =================================================================== -->
<!-- Modify generic snippet options -->
<!-- =================================================================== -->

<t t-name="mass_mailing.ImageTools" t-inherit="web_editor.ImageTools" t-inherit-mode="primary">
<xpath expr="//t[@t-set='no_animations']" position="attributes">
<attribute name="t-value">true</attribute>
</xpath>

<!-- Transform is _very_ badly supported in mail clients -->
<xpath expr="//WeButton[@name=&quot;'image_transform_opt'&quot;]" position="replace" />
</t>

<!-- Image styles -->
<t t-name="mass_mailing.IconTools">
<!-- TODO review to only modify what's really necessary and potentially -->
<!-- make the changes in web_editor directly so that website can benefit -->
<!-- from it. -->
<WeSelect title.translate="Alignment" stateToFirstClass="'true'">
<WeButton selectClass="'float-start'" tooltip.translate="Align Left">Left</WeButton>
<WeButton selectClass="''" tooltip.translate="Align Center">Center</WeButton>
<WeButton selectClass="'float-end'" tooltip.translate="Align Right">Right</WeButton>
</WeSelect>

<t t-call="mass_mailing.snippet_options_border_line_widgets">
<t t-set="label">Border</t>
<t t-set="with_bs_class" t-value="true"/>
</t>

<WeInput title.translate="Round Corners"
selectStyle="'0'" cssProperty="'border-radius'" unit="'px'" extraClass="'rounded'"
variable="radius_variable"/>

<WeRow title.translate="Padding &#x2194;">
<WeInput selectStyle="''" unit="'px'" cssProperty="'padding-left'"/>
<WeInput selectStyle="''" unit="'px'" cssProperty="'padding-right'"/>
</WeRow>
<WeRow title.translate="Padding &#x2195;">
<WeInput selectStyle="''" unit="'px'" cssProperty="'padding-top'"/>
<WeInput selectStyle="''" unit="'px'" cssProperty="'padding-bottom'"/>
</WeRow>
</t>

</templates>
21 changes: 21 additions & 0 deletions addons/mass_mailing/static/src/js/snippets.registry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { registerOption } from "@web_editor/js/editor/snippets.registry";


export function registerMassMailingOption(name, def, options) {
if (!def.module) {
def.module = "mass_mailing";
}
return registerOption(name, def, options);
}

registerMassMailingOption("MassMailingIconTools", {
template: "mass_mailing.IconTools",
selector: "span.fa, i.fa, img",
exclude: "[data-oe-type='image'] > img, [data-oe-xpath]",
});

registerMassMailingOption("MassMailingHrOptions", {
template: "mass_mailing.s_hr_options",
selector: ".s_hr",
target: "hr",
});
22 changes: 22 additions & 0 deletions addons/mass_mailing/static/src/snippets/s_hr/options.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates xml:space="preserve">

<t t-name="mass_mailing.s_hr_options">
<t t-call="mass_mailing.snippet_options_border_line_widgets">
<t t-set="label">Border</t>
<t t-set="direction" t-value="'top'"/>
</t>
<WeSelect title.translate="Width">
<WeButton selectClass="'w-25'">25%</WeButton>
<WeButton selectClass="'w-50'">50%</WeButton>
<WeButton selectClass="'w-75'">75%</WeButton>
<WeButton selectClass="'w-100'" name="'so_width_100'">100%</WeButton>
</WeSelect>
<WeButtonGroup title.translate="Alignment" dependencies="'!so_width_100'">
<WeButton class="'fa fa-fw fa-align-left'" tooltip.translate="Left" selectClass="'me-auto'"/>
<WeButton class="'fa fa-fw fa-align-center'" tooltip.translate="Center" selectClass="'mx-auto'"/>
<WeButton class="'fa fa-fw fa-align-right'" tooltip.translate="Right" selectClass="'ms-auto'"/>
</WeButtonGroup>
</t>

</templates>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/** @odoo-module **/

import options from "@web_editor/js/editor/snippets.options";
import options from "@web_editor/js/editor/snippets.options.legacy";

options.registry.MasonryLayout = options.registry.SelectTemplate.extend({
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/** @odoo-module **/

import options from "@web_editor/js/editor/snippets.options";
import options from "@web_editor/js/editor/snippets.options.legacy";

options.registry.MediaItemLayout = options.Class.extend({

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** @odoo-module **/

import { MediaDialog } from "@web_editor/components/media_dialog/media_dialog";
import options from "@web_editor/js/editor/snippets.options";
import options from "@web_editor/js/editor/snippets.options.legacy";

options.registry.Rating = options.Class.extend({
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/** @odoo-module **/

import options from "@web_editor/js/editor/snippets.options";
import options from "@web_editor/js/editor/snippets.options.legacy";

options.registry.Showcase = options.Class.extend({
/**
Expand Down
6 changes: 4 additions & 2 deletions addons/mass_mailing/views/snippets/s_alert.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@
data-color-prefix="alert-"/>
</div>
<div data-selector=".s_mail_alert .s_alert">
<t t-call="mass_mailing.snippet_options_border_widgets">
<!-- TODO @owl-options: do convert & uncomment this. Just commented
in legacy to avoid errors. -->
<!-- <t t-call="mass_mailing.snippet_options_border_widgets">
<t t-set="so_rounded_no_dependencies" t-value="True"/>
</t>
</t> -->
</div>
</xpath>
</template>
Expand Down
22 changes: 0 additions & 22 deletions addons/mass_mailing/views/snippets/s_hr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,6 @@
</xpath>
</template>

<template id="s_hr_options" inherit_id="mass_mailing.snippet_options">
<xpath expr="." position="inside">
<div data-selector=".s_hr" data-target="hr">
<t t-call="mass_mailing.snippet_options_border_line_widgets">
<t t-set="label">Border</t>
<t t-set="direction" t-value="'top'"/>
</t>
<we-select string="Width">
<we-button data-select-class="w-25">25%</we-button>
<we-button data-select-class="w-50">50%</we-button>
<we-button data-select-class="w-75">75%</we-button>
<we-button data-select-class="w-100" data-name="so_width_100">100%</we-button>
</we-select>
<we-button-group string="Alignment" data-dependencies="!so_width_100">
<we-button class="fa fa-fw fa-align-left" title="Left" data-select-class="me-auto"/>
<we-button class="fa fa-fw fa-align-center" title="Center" data-select-class="mx-auto"/>
<we-button class="fa fa-fw fa-align-right" title="Right" data-select-class="ms-auto"/>
</we-button-group>
</div>
</xpath>
</template>

<record id="mass_mailing.s_hr_000_scss" model="ir.asset">
<field name="name">Hr 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
Expand Down
Loading