From 6a7773b681f43f6210cecba96fd0c1a0f940ed5b Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Wed, 8 Mar 2017 20:13:22 +0800 Subject: [PATCH] FIX: Category autocomplete breaks when search menu widget rerenders. https://github.com/discourse/discourse/pull/4717#issuecomment-284914585 --- .../javascripts/discourse/lib/autocomplete.js.es6 | 6 +++++- app/assets/javascripts/discourse/lib/search.js.es6 | 10 +++++----- app/assets/javascripts/discourse/widgets/header.js.es6 | 5 ++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 index bfaa65d49af..4b49fdc0146 100644 --- a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 +++ b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 @@ -261,7 +261,11 @@ export default function(options) { left: "-1000px" }); - me.parent().append(div); + if (options.appendSelector) { + me.parents(options.appendSelector).append(div); + } else { + me.parent().append(div); + } if (!isInput && !options.treatAsTextarea) { vOffset = div.height(); diff --git a/app/assets/javascripts/discourse/lib/search.js.es6 b/app/assets/javascripts/discourse/lib/search.js.es6 index 78318682302..0824f8edca2 100644 --- a/app/assets/javascripts/discourse/lib/search.js.es6 +++ b/app/assets/javascripts/discourse/lib/search.js.es6 @@ -130,14 +130,14 @@ export function isValidSearchTerm(searchTerm) { } }; -export function applySearchAutocomplete($input, siteSettings, appEvents) { +export function applySearchAutocomplete($input, siteSettings, appEvents, options) { const afterComplete = function() { if (appEvents) { appEvents.trigger("search-autocomplete:after-complete"); } }; - $input.autocomplete({ + $input.autocomplete(_.merge({ template: findRawTemplate('category-tag-autocomplete'), key: '#', width: '100%', @@ -153,9 +153,9 @@ export function applySearchAutocomplete($input, siteSettings, appEvents) { return searchCategoryTag(term, siteSettings); }, afterComplete - }); + }, options)); - $input.autocomplete({ + $input.autocomplete(_.merge({ template: findRawTemplate('user-selector-autocomplete'), key: "@", width: '100%', @@ -163,5 +163,5 @@ export function applySearchAutocomplete($input, siteSettings, appEvents) { transformComplete: v => v.username || v.name, dataSource: term => userSearch({ term, includeGroups: true }), afterComplete - }); + }, options)); }; diff --git a/app/assets/javascripts/discourse/widgets/header.js.es6 b/app/assets/javascripts/discourse/widgets/header.js.es6 index c74dac720ff..1f66b5eec66 100644 --- a/app/assets/javascripts/discourse/widgets/header.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header.js.es6 @@ -262,7 +262,10 @@ export default createWidget('header', { Ember.run.schedule('afterRender', () => { const $searchInput = $('#search-term'); $searchInput.focus().select(); - applySearchAutocomplete($searchInput, this.siteSettings, this.appEvents); + + applySearchAutocomplete($searchInput, this.siteSettings, this.appEvents, { + appendSelector: '.menu-panel' + }); }); } },