Merge pull request #4335 from Team-D/feature/4169-tag_search_autocomplete

#4169 tag search autocomplete
This commit is contained in:
Jonne Haß 2013-08-06 13:29:12 -07:00
commit a2e5f1f88e
8 changed files with 77 additions and 33 deletions

View file

@ -41,6 +41,8 @@
* Deleting a post deletes it from Tumblr too [#4331](https://github.com/diaspora/diaspora/pull/4331)
* OpenGraph support [#4215](https://github.com/diaspora/diaspora/pull/4215)
* Added Wordpress service ability for posts. [#4321](https://github.com/diaspora/diaspora/pull/4321)
* Implement tag search autocomplete in header search box [#4169](https://github.com/diaspora/diaspora/issues/4169)
# 0.1.1.0

View file

@ -31,7 +31,11 @@
if (typeof row.search !== "undefined") {
return Diaspora.I18n.t("search_for", row);
} else {
return "<img src='"+ row.avatar +"' class='avatar'/>" + row.name;
if (row.avatar) {
return "<img src='"+ row.avatar +"' class='avatar'/>" + row.name;
} else {
return row.name;
}
}
};
@ -62,7 +66,7 @@
window.location = self.searchFormAction + '?' + self.searchInputName + '=' + data['name'];
} else { // The actual result
self.options.element.val(formatted);
window.location = data['url'];
window.location = data['url'] ? data['url'] : "/tags/" + searchForm.attr('name');
}
};
};

View file

@ -103,7 +103,7 @@
<div id="global_search">
<form accept-charset="UTF-8" action="/people" class="search_form" method="get">
<form accept-charset="UTF-8" action="/search" class="search_form" method="get">
<input name="utf8" type="hidden" value="✓">
<input id="q" name="q" placeholder="{{t "header.search"}}" results="5" type="search" autocomplete="off" class="ac_input">
</form>

View file

@ -4,7 +4,6 @@
class PeopleController < ApplicationController
before_filter :authenticate_user!, :except => [:show, :last_post]
before_filter :redirect_if_tag_search, :only => [:index]
respond_to :html, :except => [:tag_index]
respond_to :json, :only => [:index, :show]
@ -162,18 +161,6 @@ class PeopleController < ApplicationController
render :partial => 'aspect_membership_dropdown', :locals => {:contact => @contact, :person => @person, :hang => 'left'}
end
def redirect_if_tag_search
if search_query.starts_with?('#')
if search_query.length > 1
redirect_to tag_path(:name => search_query.delete('#.'))
else
flash[:error] = I18n.t('tags.show.none', :name => search_query)
redirect_to :back
end
end
end
private
def hashes_for_people(people, aspects)

View file

@ -0,0 +1,26 @@
class SearchController < ApplicationController
before_filter :authenticate_user!
def search
if search_query.starts_with?('#')
if search_query.length > 1
respond_to do |format|
format.json {redirect_to tags_path(:q => search_query.delete("#."))}
format.html {redirect_to tag_path(:name => search_query.delete("#."))}
end
else
flash[:error] = I18n.t('tags.show.none', :name => search_query)
redirect_to :back
end
else
redirect_to people_path(:q => search_query)
end
end
private
def search_query
@search_query ||= params[:q] || params[:term] || ''
end
end

View file

@ -64,6 +64,9 @@ Diaspora::Application.routes.draw do
resources :photos, :except => [:index] do
put :make_profile_photo
end
#Search
get 'search' => "search#search"
resources :conversations do
resources :messages, :only => [:create, :show]

View file

@ -64,23 +64,6 @@ describe PeopleController do
end
end
context 'query is a tag' do
it 'goes to a tag page' do
get :index, :q => '#babies'
response.should redirect_to(tag_path('babies'))
end
it 'removes dots from the query' do
get :index, :q => '#babi.es'
response.should redirect_to(tag_path('babies'))
end
it 'stay on the page if you search for the empty hash' do
get :index, :q => '#'
flash[:error].should be_present
end
end
context 'query is not a tag or a diaspora ID' do
it 'assigns hashes' do
get :index, :q => "Korth"

View file

@ -0,0 +1,39 @@
require 'spec_helper'
describe SearchController do
before do
@user = alice
@aspect = @user.aspects.first
sign_in :user, @user
end
describe 'query is a person' do
@lola = FactoryGirl.create(:person, :diaspora_handle => "lola@example.org",
:profile => FactoryGirl.build(:profile, :first_name => "Lola",
:last_name => "w", :searchable => false))
it 'goes to people index page' do
get :search, :q => 'eugene'
response.should be_redirect
end
end
describe 'query is a tag' do
it 'goes to a tag page' do
get :search, :q => '#cats'
response.should redirect_to(tag_path('cats'))
end
it 'removes dots from the query' do
get :search, :q => '#cat.s'
response.should redirect_to(tag_path('cats'))
end
it 'stay on the page if you search for the empty hash' do
get :search, :q => '#'
flash[:error].should be_present
end
end
end