Merge pull request #3757 from tgxworld/full_page_search

Improvements to full page search.
This commit is contained in:
Sam 2015-09-14 12:00:26 +10:00
commit 447f65890d
6 changed files with 40 additions and 14 deletions

View File

@ -1,4 +1,4 @@
import {searchForTerm, searchContextDescription} from 'discourse/lib/search';
import {searchForTerm, searchContextDescription, isValidSearchTerm } from 'discourse/lib/search';
import DiscourseURL from 'discourse/lib/url';
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
import showModal from 'discourse/lib/show-modal';
@ -61,8 +61,8 @@ export default Ember.Component.extend({
@observes('searchService.term', 'typeFilter')
newSearchNeeded() {
this.set('noResults', false);
const term = (this.get('searchService.term') || '').trim();
if (term.length >= Discourse.SiteSettings.min_search_term_length) {
const term = this.get('searchService.term')
if (isValidSearchTerm(term)) {
this.set('loading', true);
Ember.run.debounce(this, 'searchTerm', term, this.get('typeFilter'), 400);
} else {
@ -134,7 +134,7 @@ export default Ember.Component.extend({
},
showedSearch() {
$('#search-term').focus();
$('#search-term').focus().select();
},
showSearchHelp() {
@ -154,8 +154,7 @@ export default Ember.Component.extend({
},
keyDown(e) {
const term = this.get('searchService.term');
if (e.which === 13 && term && term.length >= this.siteSettings.min_search_term_length) {
if (e.which === 13 && isValidSearchTerm(this.get('searchService.term'))) {
this.set('visible', false);
this.send('fullSearch');
}

View File

@ -5,5 +5,13 @@ export default TextField.extend({
@computed('searchService.searchContextEnabled')
placeholder: function(searchContextEnabled) {
return searchContextEnabled ? "" : I18n.t('search.title');
}
},
focusIn: function() {
Em.run.later(() => { this.$().select(); });
},
becomeFocused: function() {
if (this.get('hasAutofocus')) this.$().focus();
}.on('didInsertElement')
});

View File

@ -1,4 +1,4 @@
import { translateResults, searchContextDescription, getSearchKey } from "discourse/lib/search";
import { translateResults, searchContextDescription, getSearchKey, isValidSearchTerm } from "discourse/lib/search";
import showModal from 'discourse/lib/show-modal';
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
import Category from 'discourse/models/category';
@ -13,6 +13,11 @@ export default Ember.Controller.extend({
context_id: null,
context: null,
@computed('q')
hasAutofocus(q) {
return Em.isEmpty(q);
},
@computed('skip_context', 'context')
searchContextEnabled: {
get(skip,context){
@ -37,7 +42,12 @@ export default Ember.Controller.extend({
@computed('q')
searchActive(q){
return q && q.length > 0;
return isValidSearchTerm(q);
},
@computed('searchTerm')
isNotValidSearchTerm(searchTerm) {
return !isValidSearchTerm(searchTerm);
},
@observes('model')
@ -129,6 +139,7 @@ export default Ember.Controller.extend({
},
search() {
if (this.get("isNotValidSearchTerm")) return;
this.search();
}
}

View File

@ -106,4 +106,12 @@ const getSearchKey = function(args){
((args.searchContext && args.searchContext.id) || "")
};
export { searchForTerm, searchContextDescription, getSearchKey };
const isValidSearchTerm = function(searchTerm) {
if (searchTerm) {
return searchTerm.trim().length >= Discourse.SiteSettings.min_search_term_length;
} else {
return false;
}
};
export { searchForTerm, searchContextDescription, getSearchKey, isValidSearchTerm };

View File

@ -1,4 +1,4 @@
import { translateResults, getSearchKey } from "discourse/lib/search";
import { translateResults, getSearchKey, isValidSearchTerm } from "discourse/lib/search";
export default Discourse.Route.extend({
queryParams: { q: {}, context_id: {}, context: {} },
@ -23,7 +23,7 @@ export default Discourse.Route.extend({
}
return PreloadStore.getAndRemove("search", function() {
if (params.q && params.q.length > 2) {
if (isValidSearchTerm(params.q)) {
return Discourse.ajax("/search", { data: args });
} else {
return null;

View File

@ -1,6 +1,6 @@
<div class="search row clearfix">
{{input type="text" value=searchTerm class="input-xxlarge search no-blur" action="search"}}
{{d-button action="search" icon="search" class="btn-primary"}}
{{search-text-field value=searchTerm class="input-xxlarge search no-blur" action="search" hasAutofocus=hasAutofocus}}
{{d-button action="search" icon="search" class="btn-primary" disabled=isNotValidSearchTerm}}
{{#if canBulkSelect}}
{{#if model.posts}}
{{d-button icon="list" class="bulk-select" title="topics.bulk.toggle" action="toggleBulkSelect"}}