Skip to content

Commit 907e644

Browse files
WIP
1 parent 4ad6c94 commit 907e644

40 files changed

+651
-442
lines changed

addons/html_builder/static/src/bs/bs.buttons.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.o-website-builder_sidebar .btn {
1+
.o-snippets-menu .btn {
22
--btn-font-weight: normal;
33
--btn-font-size: #{$o-we-font-size-sm};
44
--btn-box-shadow: 0 0;

addons/html_builder/static/src/builder.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export class Builder extends Component {
3030
static template = "html_builder.Builder";
3131
static components = { BlockTab, CustomizeTab, InvisibleElementsPanel };
3232
static props = {
33-
closeEditor: { type: Function },
33+
closeEditor: { type: Function, optional: true },
3434
reloadEditor: { type: Function, optional: true },
3535
snippetModel: { type: Object },
3636
toggleMobile: { type: Function },
@@ -41,6 +41,8 @@ export class Builder extends Component {
4141
Plugins: { type: Array, optional: true },
4242
config: { type: Object, optional: true },
4343
getThemeTab: { type: Function, optional: true },
44+
editableSelector: { type: String },
45+
toggleFullscreen: { type: Function, optional: true },
4446
};
4547
static defaultProps = {
4648
config: {},
@@ -106,7 +108,7 @@ export class Builder extends Component {
106108
});
107109
},
108110
closeEditor: async () => {
109-
await this.props.closeEditor();
111+
await this.props.closeEditor?.();
110112
},
111113
resources: {
112114
trigger_dom_updated: () => {
@@ -164,7 +166,9 @@ export class Builder extends Component {
164166
// instantiating the sub components that potentially need the
165167
// editor.
166168
const iframeEl = await this.props.iframeLoaded;
167-
this.editableEl = iframeEl.contentDocument.body.querySelector("#wrapwrap");
169+
this.editableEl = iframeEl.contentDocument.body.querySelector(
170+
this.props.editableSelector
171+
);
168172
setEditableWindow(iframeEl.contentWindow);
169173

170174
// Prevent image dragging in the website builder. Not via css because
@@ -189,7 +193,7 @@ export class Builder extends Component {
189193
// });
190194
onWillDestroy(() => {
191195
this.editor.destroy();
192-
this.editableEl.removeEventListener("dragstart", this.onDragStart);
196+
this.editableEl?.removeEventListener("dragstart", this.onDragStart);
193197
this.snippetModel.unregisterBeforeReload();
194198
// actionService.setActionMode("current");
195199
});

addons/html_builder/static/src/builder.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
</div>
1111
<div class="d-flex gap-1">
1212
<button t-on-click="onMobilePreviewClick" type="button" class="o-hb-btn btn d-flex align-items-center" t-att-class="{active: props.isMobile}" data-action="mobile" title="Mobile Preview" accesskey="v" style="--btn-font-size: 20px"><span class="fa fa-mobile" role="img"/></button>
13-
<button type="button" t-on-click="discard" class="o-hb-btn btn" data-action="cancel" title="Tip: Esc to preview" accesskey="j">Discard</button>
14-
<button type="button" t-on-click="save" class="o-hb-btn btn btn-success px-3" data-action="save" accesskey="s">Save</button>
13+
<button t-if="props.toggleFullscreen" t-on-click="props.toggleFullscreen"
14+
class="o-hb-btn btn d-flex align-items-center" title="Fullscreen" accesskey="f">FS</button>
15+
<button t-if="props.closeEditor" type="button" t-on-click="discard" class="o-hb-btn btn" data-action="cancel" title="Tip: Esc to preview" accesskey="j">Discard</button>
16+
<button t-if="props.closeEditor" type="button" t-on-click="save" class="o-hb-btn btn btn-success px-3" data-action="save" accesskey="s">Save</button>
1517
</div>
1618
</div>
1719
<div class="o-snippets-tabs position-relative grid px-2 my-2" style="--columns: 3; --gap: 0.25rem">

addons/html_builder/static/src/core/border_radius_style_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ class BorderRadiusStylePlugin extends Plugin {
3737
});
3838
}
3939
}
40-
registry.category("website-plugins").add(BorderRadiusStylePlugin.id, BorderRadiusStylePlugin);
40+
registry.category("builder-plugins").add(BorderRadiusStylePlugin.id, BorderRadiusStylePlugin);

addons/html_builder/static/src/core/color_style_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ class ColorAction extends BuilderAction {
5050
}
5151
}
5252

53-
registry.category("website-plugins").add(ColorStylePlugin.id, ColorStylePlugin);
53+
registry.category("builder-plugins").add(ColorStylePlugin.id, ColorStylePlugin);

addons/html_builder/static/src/core/customize_tab_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ export class CustomizeTabPlugin extends Plugin {
3939
}
4040
}
4141

42-
registry.category("website-plugins").add(CustomizeTabPlugin.id, CustomizeTabPlugin);
42+
registry.category("builder-plugins").add(CustomizeTabPlugin.id, CustomizeTabPlugin);

addons/html_builder/static/src/core/disable_snippets_plugin.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ export class DisableSnippetsPlugin extends Plugin {
6565
}
6666
};
6767
const canDrop = (snippet) => {
68+
if (!snippet) {
69+
return false;
70+
}
6871
const snippetEl = snippet.content;
6972
return !!dropAreasBySelector.find(
7073
({ selector, exclude, dropAreaEls }) =>

addons/html_builder/static/src/plugins/alert_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,4 @@ class AlertIconAction extends BuilderAction {
4848
return iconEl.classList.contains(className);
4949
}
5050
}
51-
registry.category("website-plugins").add(AlertOptionPlugin.id, AlertOptionPlugin);
51+
registry.category("builder-plugins").add(AlertOptionPlugin.id, AlertOptionPlugin);

addons/html_builder/static/src/plugins/font/font_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,4 @@ export class BuilderFontPlugin extends Plugin {
139139
};
140140
}
141141
}
142-
registry.category("website-plugins").add(BuilderFontPlugin.id, BuilderFontPlugin);
142+
registry.category("builder-plugins").add(BuilderFontPlugin.id, BuilderFontPlugin);

addons/html_builder/static/src/plugins/image/image_filter_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@ class SetCustomFilterAction extends BuilderAction {
6666
}
6767
}
6868

69-
registry.category("website-plugins").add(ImageFilterOptionPlugin.id, ImageFilterOptionPlugin);
69+
registry.category("builder-plugins").add(ImageFilterOptionPlugin.id, ImageFilterOptionPlugin);

addons/html_builder/static/src/plugins/image/image_format_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,4 @@ class SetImageQualityAction extends BuilderAction {
104104
}
105105
}
106106

107-
registry.category("website-plugins").add(ImageFormatOptionPlugin.id, ImageFormatOptionPlugin);
107+
registry.category("builder-plugins").add(ImageFormatOptionPlugin.id, ImageFormatOptionPlugin);

addons/html_builder/static/src/plugins/image/image_shape_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,4 +468,4 @@ class ToggleImageShapeRatioAction extends BuilderAction {
468468
}
469469
}
470470

471-
registry.category("website-plugins").add(ImageShapeOptionPlugin.id, ImageShapeOptionPlugin);
471+
registry.category("builder-plugins").add(ImageShapeOptionPlugin.id, ImageShapeOptionPlugin);

addons/html_builder/static/src/plugins/image/image_tool_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class AltAction extends BuilderAction {
298298
}
299299
}
300300

301-
registry.category("website-plugins").add(ImageToolOptionPlugin.id, ImageToolOptionPlugin);
301+
registry.category("builder-plugins").add(ImageToolOptionPlugin.id, ImageToolOptionPlugin);
302302

303303
/**
304304
* @param {String} mimetype

addons/html_builder/static/src/plugins/layout_column_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,4 @@ class ChangeColumnCountAction extends BuilderAction {
120120
}
121121
}
122122

123-
registry.category("website-plugins").add(LayoutColumnOptionPlugin.id, LayoutColumnOptionPlugin);
123+
registry.category("builder-plugins").add(LayoutColumnOptionPlugin.id, LayoutColumnOptionPlugin);

addons/html_builder/static/src/plugins/rating_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class TotalIconsNumberAction extends BuilderAction {
109109
}
110110
}
111111

112-
registry.category("website-plugins").add(RatingOptionPlugin.id, RatingOptionPlugin);
112+
registry.category("builder-plugins").add(RatingOptionPlugin.id, RatingOptionPlugin);
113113

114114
function createIcons({ editingElement, nbActiveIcons, nbTotalIcons }) {
115115
const activeIconEl = editingElement.querySelector(".s_rating_active_icons");

addons/html_builder/static/src/plugins/shadow_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export function shadowToString(shadow) {
6262
}`;
6363
}
6464

65-
registry.category("website-plugins").add(ShadowOptionPlugin.id, ShadowOptionPlugin);
65+
registry.category("builder-plugins").add(ShadowOptionPlugin.id, ShadowOptionPlugin);
6666

6767
export class SetShadowModeAction extends BuilderAction {
6868
static id = "setShadowMode";

addons/html_builder/static/src/plugins/text_alignment_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ class TextAlignmentOptionPlugin extends Plugin {
1515
};
1616
}
1717

18-
registry.category("website-plugins").add(TextAlignmentOptionPlugin.id, TextAlignmentOptionPlugin);
18+
registry.category("builder-plugins").add(TextAlignmentOptionPlugin.id, TextAlignmentOptionPlugin);

addons/html_builder/static/src/plugins/vertical_alignment_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ export class SetVerticalAlignmentAction extends ClassAction {
3939
}
4040

4141
registry
42-
.category("website-plugins")
42+
.category("builder-plugins")
4343
.add(VerticalAlignmentOptionPlugin.id, VerticalAlignmentOptionPlugin);

addons/html_builder/static/src/plugins/vertical_justify_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ class VerticalJustifyOptionPlugin extends Plugin {
1717
}
1818

1919
registry
20-
.category("website-plugins")
20+
.category("builder-plugins")
2121
.add(VerticalJustifyOptionPlugin.id, VerticalJustifyOptionPlugin);

addons/html_builder/static/src/plugins/width_option_plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ class WidthOptionPlugin extends Plugin {
1414
],
1515
};
1616
}
17-
registry.category("website-plugins").add(WidthOptionPlugin.id, WidthOptionPlugin);
17+
registry.category("builder-plugins").add(WidthOptionPlugin.id, WidthOptionPlugin);

addons/html_builder/static/src/sidebar/block_tab.xml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<div class="o_block_tab"
88
t-att-class="{'o_we_ongoing_insertion': this.state.ongoingInsertion}"
99
t-ref="block-tab">
10-
<div class="o_snippets_container" id="snippet_groups">
10+
<div t-if="this.snippetModel.snippetGroups.length" class="o_snippets_container" id="snippet_groups">
1111
<div class="o_snippets_container_header"><span>Categories</span></div>
1212
<div class="o_snippets_container_body">
1313
<t t-foreach="this.snippetModel.snippetGroups" t-as="snippet" t-key="snippet.id">
@@ -33,7 +33,8 @@
3333
</div>
3434
</t>
3535

36-
<div class="o_snippets_container" id="snippet_content">
36+
<div t-if="this.snippetModel.snippetInnerContents.length"
37+
class="o_snippets_container" id="snippet_content">
3738
<div class="o_snippets_container_header"><span>Inner Content</span></div>
3839
<div class="o_snippets_container_body">
3940
<t t-foreach="this.snippetModel.snippetInnerContents" t-as="snippet" t-key="snippet.id">
@@ -44,6 +45,19 @@
4445
</t>
4546
</div>
4647
</div>
48+
49+
<div t-foreach="snippetModel.snippetContentCategories" t-as="entry" t-key="entry_index"
50+
class="o_snippets_container" t-att-id="entry[0]">
51+
<div class="o_snippets_container_header"><span t-out="entry[1]"/></div>
52+
<div class="o_snippets_container_body">
53+
<t t-foreach="this.snippetModel.snippetsByCategory[entry[0]]" t-as="snippet" t-key="snippet.id">
54+
<Snippet snippet="snippet"
55+
snippetModel="this.snippetModel"
56+
onClickHandler.bind="showSnippetTooltip"
57+
disabledTooltip="disabledBlockTooltip"/>
58+
</t>
59+
</div>
60+
</div>
4761
</div>
4862
</t>
4963

addons/html_builder/static/src/snippets/snippet_service.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ export class SnippetModel extends Reactive {
7575
return this.snippetsByCategory.snippet_custom_content;
7676
}
7777

78+
get snippetContentCategories() {
79+
return Object.entries(this.contentCategories);
80+
}
81+
7882
isCustomInnerContent(customSnippetName) {
7983
return !!this.snippetsByCategory.snippet_content.find(
8084
(snippet) => snippet.name === customSnippetName
@@ -195,7 +199,15 @@ export class SnippetModel extends Reactive {
195199

196200
computeSnippetTemplates(snippetsDocument) {
197201
const snippetsBody = snippetsDocument.body;
198-
this.snippetsByCategory = {};
202+
const categories = new Set([
203+
"snippet_groups",
204+
"snippet_custom",
205+
"snippet_structure",
206+
"snippet_content",
207+
"snippet_custom_content",
208+
]);
209+
this.snippetsByCategory = Object.fromEntries([...categories].map((c) => [c, []]));
210+
this.contentCategories = {};
199211
for (const snippetCategory of snippetsBody.querySelectorAll("snippets")) {
200212
const snippets = [];
201213
for (const snippetEl of snippetCategory.children) {
@@ -235,9 +247,19 @@ export class SnippetModel extends Reactive {
235247
snippet.groupName = "custom";
236248
snippet.isCustom = true;
237249
break;
250+
case "snippet_content":
251+
case "snippet_custom_content":
252+
break;
253+
default:
254+
snippet.contentCategory = snippetCategory.id;
255+
this.contentCategories[snippetCategory.id] =
256+
snippetCategory.getAttribute("string");
238257
}
239258
snippets.push(snippet);
240259
}
260+
if (!categories.has(snippetCategory.id)) {
261+
this.contentCategories[snippetCategory.id] = snippetCategory.getAttribute("string");
262+
}
241263
this.snippetsByCategory[snippetCategory.id] = snippets;
242264
}
243265

addons/mass_mailing/static/src/scss/mass_mailing.ui.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ body {
2828
flex-direction: column;
2929
}
3030

31+
// DEPRECATED (DEAD CODE)
3132
.o_mail_theme_selector {
3233
> a {
3334
height: $o-we-toolbar-height;
@@ -68,6 +69,7 @@ body {
6869
}
6970
}
7071

72+
// TODO EGGMAIL: everything related to theme_selector should be removed
7173
.o_mail_theme_selector_new {
7274
display: block;
7375
font-size: 1rem;
@@ -221,6 +223,7 @@ body {
221223
}
222224
}
223225

226+
// DEPRECATED (DEAD CODE)
224227
body.o_force_mail_theme_choice {
225228
#oe_snippets {
226229
width: 100%;

addons/mass_mailing/static/src/xml/mass_mailing.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<templates id="template" xml:space="preserve">
3+
<!-- DEPRECATED (DEAD CODE) -->
34
<div t-name="mass_mailing.theme_selector" class="o_mail_theme_selector">
45
<t t-foreach="themes" t-as="theme" t-key="theme_index">
56
<a t-att-id="theme.name" href="#" class="dropdown-item">

addons/mass_mailing_egg/__manifest__.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,18 @@
2929
'mass_mailing_egg.assets_iframe_style': [ # equivalent website.inside_builder_style in website_builder_action.js
3030
# minimal style assets required to view the mail content
3131
# convert_inline ONLY uses this and inline styles.
32+
#
33+
# TODO EGGMAIL: recreate a scss bundle that is strictly used in relation with convert_inline
34+
# if there is "editor style" to include, put it in `mass_mailing_egg.assets_iframe_edit``
35+
### CSS part of wysiwyg_iframe_editor_assets
36+
('include', 'web_editor.wysiwyg_iframe_editor_assets'),
37+
38+
### iframe_css_assets_edit fast selection
39+
('include', 'mass_mailing.iframe_css_assets_edit'),
40+
],
41+
'mass_mailing_egg.assets_iframe_edit': [ # equivalent html_builder.assets_edit_frontend in website_builder_action.js
42+
# JS and style assets required to edit the mail content
3243
],
33-
# 'mass_mailing_egg.assets_iframe_edit': [ # equivalent html_builder.assets_edit_frontend in website_builder_action.js
34-
# # JS and style assets required to edit the mail content
35-
# ],
3644
'mass_mailing_egg.assets_iframe_dark': [ # separated complement of assets_iframe_style for dark mode
3745
# style assets for dark mode. Not used by convert_inline.
3846
# TODO EGGMAIL: investigate how this can behave properly with convert_inline (i.e. user chooses pretty colors for
@@ -41,7 +49,8 @@
4149
'web.assets_backend': [
4250
'mass_mailing_egg/static/src/interaction_service/**/*',
4351
'mass_mailing_egg/static/src/fields/**/*',
44-
'mass_mailing_egg/static/src/theme_selector/**/*',
52+
'mass_mailing_egg/static/src/themes/**/*',
53+
'mass_mailing_egg/static/src/iframe/**/*',
4554
],
4655
'web.assets_unit_tests': [
4756
# 'mass_mailing_egg/static/tests/**/*',

0 commit comments

Comments
 (0)