diff --git a/addons/html_builder/static/src/core/dropzone_selector_plugin.js b/addons/html_builder/static/src/core/dropzone_selector_plugin.js
index 1bea049f275d0..6ea7b38fddba6 100644
--- a/addons/html_builder/static/src/core/dropzone_selector_plugin.js
+++ b/addons/html_builder/static/src/core/dropzone_selector_plugin.js
@@ -1,7 +1,5 @@
import { Plugin } from "@html_editor/plugin";
-// TODO s_website_form, s_searchbar_input were added by extending xpath.
-const so_content_addition_selector = `blockquote, .s_alert, .o_facebook_page, .s_share, .s_social_media, .s_rating, .s_hr, .s_google_map, .s_map, .s_countdown, .s_chart, .s_text_highlight, .s_progress_bar, .s_badge, .s_embed_code, .s_donation, .s_add_to_cart, .s_online_appointment, .o_snippet_drop_in_only, .s_image, .s_cta_badge, .s_accordion, .s_website_form, .s_searchbar_input, .s_rental_search, .s_card`;
const card_parent_handlers =
".s_three_columns .row > div, .s_comparisons .row > div, .s_cards_grid .row > div, .s_cards_soft .row > div, .s_product_list .row > div, .s_newsletter_centered .row > div, .s_company_team_spotlight .row > div, .s_comparisons_horizontal .row > div, .s_company_team_grid .row > div, .s_company_team_card .row > div, .s_carousel_cards_item";
const special_cards_selector = `.s_card.s_timeline_card, div:is(${card_parent_handlers}) > .s_card`;
@@ -27,10 +25,20 @@ export class DropZoneSelectorPlugin extends Plugin {
dropIn: so_snippet_addition_drop_in,
},
{
- selector: `${so_content_addition_selector}, .s_card`, // TODO check extend so_content_addition_selector
+ plugin: this,
+ get selector() {
+ return [
+ ...this.plugin.getResource("so_content_addition_selector"),
+ ".s_card",
+ ].join(", ");
+ },
exclude: `${special_cards_selector}`,
- dropNear: `p, h1, h2, h3, ul, ol, div:not(.o_grid_item_image) > img, div:not(.o_grid_item_image) > a, .btn, ${so_content_addition_selector}, .s_card:not(${special_cards_selector})`,
dropIn: "nav",
+ get dropNear() {
+ return `p, h1, h2, h3, ul, ol, div:not(.o_grid_item_image) > img, div:not(.o_grid_item_image) > a, .btn, ${this.plugin
+ .getResource("so_content_addition_selector")
+ .join(", ")}, .s_card:not(${special_cards_selector})`;
+ },
excludeNearParent: so_snippet_addition_drop_in,
},
{
@@ -51,12 +59,11 @@ export class DropZoneSelectorPlugin extends Plugin {
},
],
so_snippet_addition_selector: ["section", ".parallax", ".s_hr"],
+ so_content_addition_selector: [
+ "blockquote",
+ ".s_text_highlight",
+ ".s_donation", // TODO: move to plugin
+ ".o_snippet_drop_in_only",
+ ],
};
}
-
-/** TODO add xpath
- *
-
-
-
- */
diff --git a/addons/html_builder/static/src/plugins/alert_option_plugin.js b/addons/html_builder/static/src/plugins/alert_option_plugin.js
index ad3463f2677a6..7acd3d60fdd2d 100644
--- a/addons/html_builder/static/src/plugins/alert_option_plugin.js
+++ b/addons/html_builder/static/src/plugins/alert_option_plugin.js
@@ -40,6 +40,7 @@ class AlertOptionPlugin extends Plugin {
selector: ".s_alert",
}),
],
+ so_content_addition_selector: [".s_alert"],
};
}
registry.category("website-plugins").add(AlertOptionPlugin.id, AlertOptionPlugin);
diff --git a/addons/html_builder/static/src/plugins/countdown_option_plugin.js b/addons/html_builder/static/src/plugins/countdown_option_plugin.js
index 37ce5aaae4ac1..8c82472098210 100644
--- a/addons/html_builder/static/src/plugins/countdown_option_plugin.js
+++ b/addons/html_builder/static/src/plugins/countdown_option_plugin.js
@@ -13,6 +13,7 @@ class CountdownOptionPlugin extends Plugin {
cleanForSave: this.cleanForSave.bind(this),
}),
],
+ so_content_addition_selector: [".s_countdown"],
builder_actions: {
// TODO AGAU: update after merging generalized restart interactions
// remove this and xml BuilderContext
diff --git a/addons/html_builder/static/src/plugins/rating_option_plugin.js b/addons/html_builder/static/src/plugins/rating_option_plugin.js
index 8ce3730a8d7cb..7729befebed36 100644
--- a/addons/html_builder/static/src/plugins/rating_option_plugin.js
+++ b/addons/html_builder/static/src/plugins/rating_option_plugin.js
@@ -10,6 +10,7 @@ class RatingOptionPlugin extends Plugin {
template: "html_builder.RatingOption",
selector: ".s_rating",
},
+ so_content_addition_selector: [".s_rating"],
builder_actions: this.getActions(),
};
getActions() {
diff --git a/addons/html_builder/static/src/plugins/separator_option_plugin.js b/addons/html_builder/static/src/plugins/separator_option_plugin.js
index 051ee17f7b9bd..5bec927327d51 100644
--- a/addons/html_builder/static/src/plugins/separator_option_plugin.js
+++ b/addons/html_builder/static/src/plugins/separator_option_plugin.js
@@ -15,6 +15,7 @@ class SeparatorOptionPlugin extends Plugin {
selector: ".s_hr",
dropNear: "p, h1, h2, h3, blockquote, .s_hr",
},
+ so_content_addition_selector: [".s_hr"],
};
}
registry.category("website-plugins").add(SeparatorOptionPlugin.id, SeparatorOptionPlugin);
diff --git a/addons/html_builder/static/src/website_builder/plugins/form/form_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/form/form_option_plugin.js
index 486cfb99be019..0f43994d14669 100644
--- a/addons/html_builder/static/src/website_builder/plugins/form/form_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/form/form_option_plugin.js
@@ -140,6 +140,7 @@ export class FormOptionPlugin extends Plugin {
selector: ".s_website_form",
excludeAncestor: "form",
},
+ so_content_addition_selector: [".s_website_form"],
};
getActions() {
return {
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/accordion_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/accordion_option_plugin.js
index e4693324dbd39..587e5c4e58e67 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/accordion_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/accordion_option_plugin.js
@@ -17,6 +17,7 @@ class accordionOptionPlugin extends Plugin {
selector: ".s_accordion .accordion-item",
}),
],
+ so_content_addition_selector: [".s_accordion"],
builder_actions: this.getActions(),
};
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/badge_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/badge_option_plugin.js
index 4f7485be16715..f9a8f009a733f 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/badge_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/badge_option_plugin.js
@@ -11,6 +11,7 @@ class BadgeOptionPlugin extends Plugin {
selector: ".s_badge",
}),
],
+ so_content_addition_selector: [".s_badge"],
};
}
registry.category("website-plugins").add(BadgeOptionPlugin.id, BadgeOptionPlugin);
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/chart_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/chart_option_plugin.js
index a64a4df0df58d..3756bd5891f48 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/chart_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/chart_option_plugin.js
@@ -18,6 +18,7 @@ class ChartOptionPlugin extends Plugin {
},
},
],
+ so_content_addition_selector: [".s_chart"],
builder_actions: this.getActions(),
};
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/cta_badge_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/cta_badge_option_plugin.js
index f2d45f63a9627..77214785192b2 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/cta_badge_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/cta_badge_option_plugin.js
@@ -10,6 +10,7 @@ class CTABadgeOptionPlugin extends Plugin {
selector: ".s_cta_badge",
},
],
+ so_content_addition_selector: [".s_cta_badge"],
};
}
registry.category("website-plugins").add(CTABadgeOptionPlugin.id, CTABadgeOptionPlugin);
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/embed_code_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/embed_code_option_plugin.js
index 64b8fab62bbdd..128ef57e0d312 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/embed_code_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/embed_code_option_plugin.js
@@ -15,6 +15,7 @@ class EmbedCodeOptionPlugin extends Plugin {
selector: ".s_embed_code",
}),
],
+ so_content_addition_selector: [".s_embed_code"],
builder_actions: this.getActions(),
clean_for_save_handlers: this.cleanForSave.bind(this),
};
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/facebook_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/facebook_option_plugin.js
index 118baba237b6e..8c71610f11e5f 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/facebook_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/facebook_option_plugin.js
@@ -14,6 +14,7 @@ class FacebookOptionPlugin extends Plugin {
selector: ".o_facebook_page",
},
],
+ so_content_addition_selector: [".o_facebook_page"],
builder_actions: {
dataAttributeListAction: {
isApplied: ({ editingElement, param: { mainParam } = {}, value }) =>
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/google_maps_option/google_maps_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/google_maps_option/google_maps_option_plugin.js
index 2af81a54a7d38..44570a34b324b 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/google_maps_option/google_maps_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/google_maps_option/google_maps_option_plugin.js
@@ -46,6 +46,7 @@ export class GoogleMapsOptionPlugin extends Plugin {
},
},
],
+ so_content_addition_selector: [".s_google_map"],
builder_actions: this.getActions(),
};
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/image_snippet_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/image_snippet_option_plugin.js
index 5446fd6813133..a10bbc4e4bf77 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/image_snippet_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/image_snippet_option_plugin.js
@@ -6,6 +6,7 @@ class ImageSnippetOptionPlugin extends Plugin {
static dependencies = ["media"];
resources = {
on_snippet_dropped_handlers: this.onSnippetDropped.bind(this),
+ so_content_addition_selector: [".s_image"],
};
async onSnippetDropped({ snippetEl }) {
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/map_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/map_option_plugin.js
index 825353a734724..f9f54467ff849 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/map_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/map_option_plugin.js
@@ -12,6 +12,7 @@ class MapOptionPlugin extends Plugin {
selector: ".s_map",
},
],
+ so_content_addition_selector: [".s_map"],
builder_actions: this.getActions(),
};
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/progress_bar_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/progress_bar_option_plugin.js
index bf184be3703cd..a5de58b3e32a8 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/progress_bar_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/progress_bar_option_plugin.js
@@ -12,6 +12,7 @@ class ProgressBarOptionPlugin extends Plugin {
cleanForSave: this.cleanForSave.bind(this),
},
builder_actions: this.getActions(),
+ so_content_addition_selector: [".s_progress_bar"],
};
cleanForSave(editingEl) {
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/searchbar_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/searchbar_option_plugin.js
index 6f31e726f70ae..f39abf7000a9f 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/searchbar_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/searchbar_option_plugin.js
@@ -18,6 +18,7 @@ class SearchbarOptionPlugin extends Plugin {
},
],
builder_actions: this.getActions(),
+ so_content_addition_selector: [".s_searchbar_input"],
searchbar_option_order_by_items: {
label: _t("Name (A-Z)"),
orderBy: "name asc",
diff --git a/addons/html_builder/static/src/website_builder/plugins/options/social_media_option_plugin.js b/addons/html_builder/static/src/website_builder/plugins/options/social_media_option_plugin.js
index 18e33c7d0d8c6..af9b9affde144 100644
--- a/addons/html_builder/static/src/website_builder/plugins/options/social_media_option_plugin.js
+++ b/addons/html_builder/static/src/website_builder/plugins/options/social_media_option_plugin.js
@@ -124,6 +124,7 @@ class SocialMediaOptionPlugin extends Plugin {
selector: ".s_social_media",
}),
],
+ so_content_addition_selector: [".s_share", ".s_social_media"],
builder_actions: {
deleteSocialMediaLink: {
apply: ({ editingElement }) => {
diff --git a/addons/html_builder/static/src/website_event/speaker_bio_plugin.js b/addons/html_builder/static/src/website_event/speaker_bio_plugin.js
new file mode 100644
index 0000000000000..c7c7bd4d5aa51
--- /dev/null
+++ b/addons/html_builder/static/src/website_event/speaker_bio_plugin.js
@@ -0,0 +1,11 @@
+import { Plugin } from "@html_editor/plugin";
+import { registry } from "@web/core/registry";
+
+class SpeakerBioPlugin extends Plugin {
+ static id = "speakerBio";
+ resources = {
+ so_content_addition_selector: [".s_speaker_bio"],
+ };
+}
+
+registry.category("website-plugins").add(SpeakerBioPlugin.id, SpeakerBioPlugin);
diff --git a/addons/html_builder/static/src/website_sale/add_to_cart_option_plugin.js b/addons/html_builder/static/src/website_sale/add_to_cart_option_plugin.js
index 17ea29cf2a528..4d0b745d09d7e 100644
--- a/addons/html_builder/static/src/website_sale/add_to_cart_option_plugin.js
+++ b/addons/html_builder/static/src/website_sale/add_to_cart_option_plugin.js
@@ -12,6 +12,7 @@ class AddToCartOptionPlugin extends Plugin {
selector: ".s_add_to_cart",
},
],
+ so_content_addition_selector: [".s_add_to_cart"],
builder_actions: {
productToCartAction: {
apply: ({ editingElement, value }) => {