diff --git a/js/autocomplete.js b/js/autocomplete.js index 1bed2301a2..9adde2e89e 100644 --- a/js/autocomplete.js +++ b/js/autocomplete.js @@ -50,7 +50,7 @@ this.$inputField = this.$el.closest('.input-field'); this.$active = $(); this._mousedown = false; - this._setupDropdown(); + this._setupDropdown(options.dropdownOptions); this._setupEventHandlers(); } @@ -145,7 +145,7 @@ /** * Setup dropdown */ - _setupDropdown() { + _setupDropdown(dropdownOptions) { this.container = document.createElement('ul'); this.container.id = `autocomplete-options-${M.guid()}`; $(this.container).addClass('autocomplete-content dropdown-content'); @@ -158,7 +158,8 @@ coverTrigger: false, onItemClick: (itemEl) => { this.selectOption($(itemEl)); - } + }, + ...dropdownOptions }); // Sketchy removal of dropdown click handler diff --git a/js/dropdown.js b/js/dropdown.js index 5fd0d98668..caa748d91f 100644 --- a/js/dropdown.js +++ b/js/dropdown.js @@ -390,10 +390,22 @@ let triggerBRect = this.el.getBoundingClientRect(); let dropdownBRect = this.dropdownEl.getBoundingClientRect(); - let idealHeight = dropdownBRect.height; - let idealWidth = dropdownBRect.width; - let idealXPos = triggerBRect.left - dropdownBRect.left; - let idealYPos = triggerBRect.top - dropdownBRect.top; + let idealHeight; + let idealWidth; + let idealXPos; + let idealYPos; + + if (this.options.container == document.body) { + idealHeight = dropdownBRect.height; + idealWidth = triggerBRect.width; + idealXPos = triggerBRect.left + window.scrollX; + idealYPos = triggerBRect.top + window.scrollY; + } else { + idealHeight = dropdownBRect.height; + idealWidth = dropdownBRect.width; + idealXPos = triggerBRect.left - dropdownBRect.left; + idealYPos = triggerBRect.top - dropdownBRect.top; + } let dropdownBounds = { left: idealXPos,