From 86a9171ec7790aa09f2b9a50dcb26deb029e8bed Mon Sep 17 00:00:00 2001 From: Romain Estievenart Date: Mon, 9 Oct 2023 11:32:52 +0200 Subject: [PATCH] [REF] web(site): migrate jQueryUI `urlautocomplete` to owl component *: web, website, website_form_project Remove the jQuery UI Widget `urlautocomplete` by using made some refactor to allow usage of the owl component. task-3439226 Part-of: odoo/odoo#139209 --- .../src/core/autocomplete/autocomplete.js | 17 +- .../src/core/autocomplete/autocomplete.xml | 5 +- addons/website/__manifest__.py | 4 + addons/website/controllers/main.py | 5 +- .../autocomplete_with_pages.js | 156 ++++++++++++++++++ .../autocomplete_with_pages.xml | 8 + .../url_autocomplete.js | 95 +++++++++++ .../url_autocomplete.scss | 6 + .../url_autocomplete.xml | 23 +++ .../static/src/components/dialog/edit_menu.js | 16 +- .../static/src/components/editor/editor.scss | 18 +- addons/website/static/src/js/editor/editor.js | 30 ++-- .../static/src/js/editor/snippets.options.js | 20 ++- .../static/src/js/editor/widget_link.js | 38 +++-- addons/website/static/src/js/utils.js | 93 +++-------- addons/website_form_project/__manifest__.py | 2 + 16 files changed, 416 insertions(+), 120 deletions(-) create mode 100644 addons/website/static/src/components/autocomplete_with_pages/autocomplete_with_pages.js create mode 100644 addons/website/static/src/components/autocomplete_with_pages/autocomplete_with_pages.xml create mode 100644 addons/website/static/src/components/autocomplete_with_pages/url_autocomplete.js create mode 100644 addons/website/static/src/components/autocomplete_with_pages/url_autocomplete.scss create mode 100644 addons/website/static/src/components/autocomplete_with_pages/url_autocomplete.xml diff --git a/addons/web/static/src/core/autocomplete/autocomplete.js b/addons/web/static/src/core/autocomplete/autocomplete.js index d215658c6de..58133ee3f7b 100644 --- a/addons/web/static/src/core/autocomplete/autocomplete.js +++ b/addons/web/static/src/core/autocomplete/autocomplete.js @@ -64,7 +64,7 @@ export class AutoComplete extends Component { // position and size if (this.props.dropdown) { - usePosition("sourcesList", () => this.inputRef.el, { + usePosition("sourcesList", () => this.targetDropdown, { position: "bottom-start", }); } else { @@ -72,6 +72,10 @@ export class AutoComplete extends Component { } } + get targetDropdown() { + return this.inputRef.el; + } + get isOpened() { return this.state.open; } @@ -263,6 +267,7 @@ export class AutoComplete extends Component { this.inputRef.el.setSelectionRange(0, this.inputRef.el.value.length); this.props.onFocus(ev); } + get autoCompleteRootClass() { let classList = ""; if (this.props.class) { @@ -274,6 +279,16 @@ export class AutoComplete extends Component { return classList; } + get ulDropdownClass() { + let classList = ""; + if (this.props.dropdown) { + classList += " dropdown-menu ui-autocomplete"; + } else { + classList += " list-group"; + } + return classList; + } + async onInputKeydown(ev) { const hotkey = getActiveHotkey(ev); const isSelectKey = hotkey === "enter" || hotkey === "tab"; diff --git a/addons/web/static/src/core/autocomplete/autocomplete.xml b/addons/web/static/src/core/autocomplete/autocomplete.xml index 7ba18a2da44..0bfd797e18d 100644 --- a/addons/web/static/src/core/autocomplete/autocomplete.xml +++ b/addons/web/static/src/core/autocomplete/autocomplete.xml @@ -20,10 +20,7 @@ />