From d506e577a5940a23aaaa2be372eee84e7ed8794c Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Mon, 14 Aug 2017 18:07:49 -0400 Subject: [PATCH] FEATURE: if full search returns no results, show google search form --- .../discourse/components/google-search.js.es6 | 13 ++++++++++ .../controllers/full-page-search.js.es6 | 5 ++++ .../templates/components/google-search.hbs | 7 +++++ .../discourse/templates/full-page-search.hbs | 26 +++++++++++++++---- .../stylesheets/common/base/search.scss | 9 ++++++- app/views/exceptions/not_found.html.erb | 2 +- config/locales/client.en.yml | 6 +++++ .../acceptance/search-full-test.js.es6 | 5 +++- 8 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 app/assets/javascripts/discourse/components/google-search.js.es6 create mode 100644 app/assets/javascripts/discourse/templates/components/google-search.hbs diff --git a/app/assets/javascripts/discourse/components/google-search.js.es6 b/app/assets/javascripts/discourse/components/google-search.js.es6 new file mode 100644 index 00000000000..97036b01175 --- /dev/null +++ b/app/assets/javascripts/discourse/components/google-search.js.es6 @@ -0,0 +1,13 @@ +import computed from "ember-addons/ember-computed-decorators"; + +export default Ember.Component.extend({ + classNames: ['google-search-form'], + classNameBindings: ['hidden:hidden'], + + hidden: Ember.computed.alias('siteSettings.login_required'), + + @computed + siteUrl() { + return `${location.protocol}//${location.host}${Discourse.getURL('/')}`; + } +}); diff --git a/app/assets/javascripts/discourse/controllers/full-page-search.js.es6 b/app/assets/javascripts/discourse/controllers/full-page-search.js.es6 index de70b3701f8..ef661f19289 100644 --- a/app/assets/javascripts/discourse/controllers/full-page-search.js.es6 +++ b/app/assets/javascripts/discourse/controllers/full-page-search.js.es6 @@ -87,6 +87,11 @@ export default Ember.Controller.extend({ return escapeExpression(q); }, + @computed('canCreateTopic', 'siteSettings.login_required') + showSuggestion(canCreateTopic, loginRequired) { + return canCreateTopic || !loginRequired; + }, + _searchOnSortChange: true, setSearchTerm(term) { diff --git a/app/assets/javascripts/discourse/templates/components/google-search.hbs b/app/assets/javascripts/discourse/templates/components/google-search.hbs new file mode 100644 index 00000000000..766bf3a9082 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/google-search.hbs @@ -0,0 +1,7 @@ +
+ +
diff --git a/app/assets/javascripts/discourse/templates/full-page-search.hbs b/app/assets/javascripts/discourse/templates/full-page-search.hbs index c1779595cfe..d138f8ea438 100644 --- a/app/assets/javascripts/discourse/templates/full-page-search.hbs +++ b/app/assets/javascripts/discourse/templates/full-page-search.hbs @@ -15,7 +15,9 @@ {{/if}} - {{create-topic-button canCreateTopic=canCreateTopic action=(action "createTopic" searchTerm)}} + {{#if hasResults}} + {{create-topic-button canCreateTopic=canCreateTopic action=(action "createTopic" searchTerm)}} + {{/if}} {{#if canBulkSelect}} {{d-button icon="list" class="bulk-select" title="topics.bulk.toggle" action="toggleBulkSelect"}} @@ -116,11 +118,25 @@ {{#conditional-loading-spinner condition=loading }} {{#unless hasResults}} -

- {{#if searchActive}} - {{i18n "search.no_results"}} + {{#if searchActive}} +

{{i18n "search.no_results"}}

+ + {{#if showSuggestion}} +
+ {{i18n "search.cant_find"}} + {{#if canCreateTopic}} + {{i18n "search.start_new_topic"}} + {{#unless siteSettings.login_required}} + {{i18n "search.or_search_google"}} + {{/unless}} + {{else}} + {{i18n "search.search_google"}} + {{/if}} +
+ + {{google-search searchTerm=searchTerm}} {{/if}} - + {{/if}} {{/unless}} {{#if hasResults}} diff --git a/app/assets/stylesheets/common/base/search.scss b/app/assets/stylesheets/common/base/search.scss index eeb82c5d045..a8a81759f43 100644 --- a/app/assets/stylesheets/common/base/search.scss +++ b/app/assets/stylesheets/common/base/search.scss @@ -108,7 +108,7 @@ } .search-advanced-options { - border: 1px solid $primary-low; + border: 1px solid $primary-low; padding: 10px; .control-group.pull-left { @@ -121,6 +121,9 @@ } } +.no-results-suggestion { + margin-top: 30px; +} .search-footer { margin-bottom: 30px; } @@ -162,3 +165,7 @@ margin-bottom: 4px; } } + +.google-search-form { + margin-top: 2em; +} diff --git a/app/views/exceptions/not_found.html.erb b/app/views/exceptions/not_found.html.erb index 771e65a5d72..32d1532fa04 100644 --- a/app/views/exceptions/not_found.html.erb +++ b/app/views/exceptions/not_found.html.erb @@ -34,7 +34,7 @@

diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 14830dcea30..c017b1c892c 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1353,6 +1353,12 @@ en: post_format: "#{{post_number}} by {{username}}" results_page: "Search Results" more_results: "There are more results. Please narrow your search criteria." + cant_find: "Can't find what you're looking for?" + start_new_topic: "Why not create a topic?" + or_search_google: "Or use Google to search instead:" + search_google: "Try searching with Google instead:" + search_google_button: "Google" + search_google_title: "Search this site" context: user: "Search posts by @{{username}}" diff --git a/test/javascripts/acceptance/search-full-test.js.es6 b/test/javascripts/acceptance/search-full-test.js.es6 index 782d234adc5..a7f480df9c2 100644 --- a/test/javascripts/acceptance/search-full-test.js.es6 +++ b/test/javascripts/acceptance/search-full-test.js.es6 @@ -53,7 +53,10 @@ QUnit.test("perform various searches", assert => { fillIn('.search input.full-page-search', 'none'); click('.search .btn-primary'); - andThen(() => assert.ok(find('.fps-topic').length === 0), 'has no results'); + andThen(() => { + assert.ok(find('.fps-topic').length === 0, 'has no results'); + assert.ok(find('.no-results-suggestion .google-search-form')); + }); fillIn('.search input.full-page-search', 'posts'); click('.search .btn-primary');