UX: Display a message when the search term is too short on full page

This commit is contained in:
Robin Ward 2016-08-09 15:11:58 -04:00
parent 28436a604a
commit fd3a8583dd
4 changed files with 27 additions and 18 deletions

View File

@ -26,6 +26,7 @@ export default Ember.Controller.extend({
searching: false,
sortOrder: 0,
sortOrders: SortOrders,
invalidSearch: false,
@computed('model.posts')
resultCount(posts) {
@ -69,11 +70,6 @@ export default Ember.Controller.extend({
return isValidSearchTerm(q);
},
@computed('searchTerm', 'searching')
searchButtonDisabled(searchTerm, searching) {
return !!(searching || !isValidSearchTerm(searchTerm));
},
@computed('q')
noSortQ(q) {
if (q) {
@ -107,7 +103,7 @@ export default Ember.Controller.extend({
@observes('sortOrder')
triggerSearch() {
if (this._searchOnSortChange) {
this.search();
this._search();
}
},
@ -147,14 +143,21 @@ export default Ember.Controller.extend({
return this.currentUser && !this.site.mobileView;
},
search(){
if (this.get("searching")) return;
this.set("searching", true);
_search() {
if (this.get("searching")) { return; }
this.set('invalidSearch', false);
const searchTerm = this.get('searchTerm');
if (!isValidSearchTerm(searchTerm)) {
this.set('invalidSearch', true);
return;
}
this.set("searching", true);
this.set('bulkSelectEnabled', false);
this.get('selected').clear();
var args = { q: this.get("searchTerm") };
var args = { q: searchTerm };
const sortOrder = this.get("sortOrder");
if (sortOrder && SortOrders[sortOrder].term) {
@ -203,18 +206,13 @@ export default Ember.Controller.extend({
this.get('selected').clear();
},
refresh() {
this.search();
},
showSearchHelp() {
// TODO: dupe code should be centralized
ajax("/static/search_help.html", { dataType: 'html' }).then(model => showModal('searchHelp', { model }));
},
search() {
if (this.get("searchButtonDisabled")) return;
this.search();
this._search();
}
}
});

View File

@ -1,6 +1,6 @@
<div class="search row clearfix">
{{search-text-field value=searchTerm class="full-page-search input-xxlarge search no-blur" action="search" hasAutofocus=hasAutofocus}}
{{d-button action="search" icon="search" class="btn-primary" disabled=searchButtonDisabled}}
{{d-button action="search" icon="search" class="btn-primary" disabled=searching}}
{{#if canCreateTopic}}
<span class="new-topic-btn">{{d-button id="create-topic" class="btn-default" action="createTopic" actionParam=searchTerm icon="plus" label="topic.create"}}</span>
@ -8,7 +8,7 @@
{{#if canBulkSelect}}
{{d-button icon="list" class="bulk-select" title="topics.bulk.toggle" action="toggleBulkSelect"}}
{{bulk-select-button selected=selected action="refresh"}}
{{bulk-select-button selected=selected action="search"}}
{{/if}}
</div>
@ -19,6 +19,12 @@
</div>
{{/if}}
{{#if invalidSearch}}
<div class='fps-invalid'>
{{i18n "search.too_short"}}
</div>
{{/if}}
{{#if context}}
<div class='fps-search-context'>
<label>

View File

@ -1,3 +1,7 @@
.fps-invalid {
margin-bottom: 1em;
}
.fps-result {
.author {

View File

@ -1185,6 +1185,7 @@ en:
most_liked: "Most Liked"
select_all: "Select All"
clear_all: "Clear All"
too_short: "Sorry, your search term is too short. Please try a longer query."
result_count:
one: "1 result for <span class='term'>\"{{term}}\"</span>"
other: "{{count}} results for <span class='term'>\"{{term}}\"</span>"