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 }) => {