diff --git a/app/assets/javascripts/application/autocomplete.js b/app/assets/javascripts/application/autocomplete.js index 3f8ef4723bcf61fac02b1415f67b87af70f4aa81..916308ff14e66d624ff82f32d0e6a014686baa1b 100644 --- a/app/assets/javascripts/application/autocomplete.js +++ b/app/assets/javascripts/application/autocomplete.js @@ -1,16 +1,24 @@ $(document).ready(function() { - $('#search input[name=query]').autocomplete({ - minLength: 3, - source: function (request, response) { - $.ajax({ - url: "/autocomplete", - data: { query: request.term, search_class: $('select[name="search_class"]').val()}, - dataType: "json", - success: response, - error: function () { - response([]); - } - }); - } - }); + $('#search input[name=query]').autocomplete({ + minLength: 3, + source: function (request, response) { + $.ajax({ + url: "/autocomplete", + data: { query: request.term, search_class: $('select[name="search_class"]').val()}, + dataType: "json", + success: response, + error: function () { + response([]); + } + }); + }, + select: function(event, ui) { + window.location.href = ui.item.url; + } + }).data("uiAutocomplete")._renderItem = function(ul, item) { + return $("<li></li>") + .append("<img class='autocomplete' src='" + item.thumbnail + "'>") + .append("<a>"+ item.name +"</a>" ) + .appendTo(ul); + }; }); diff --git a/app/assets/stylesheets/application/search.scss b/app/assets/stylesheets/application/search.scss index 454ef0a722430e915d11f6eb59ff17c3548e9364..25c956f57d11948fc789e2751467998b794e2666 100644 --- a/app/assets/stylesheets/application/search.scss +++ b/app/assets/stylesheets/application/search.scss @@ -2,6 +2,13 @@ background-color:green; } +.autocomplete { + width: 56px; + height: 32px; + border: 0; + margin-right: 8px; +} + .search-sidebar { margin-top: 40px; display: none; diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index bc28a13207a36dea813cc6971aa23c551b5608a1..c4d440da9d34846f709ee52d9c8e3f84655b7e88 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,5 +1,7 @@ class SearchController < ApplicationController + include LearningObjectsHelper + def index @types = LearningObject.object_types @@ -18,9 +20,9 @@ class SearchController < ApplicationController when "LearningObject" @result = LearningObject.search params[:query], where: where_hash(params), order: lo_order_hash(params), page: params[:page] || 1, per_page: 10 when "Collection" - @result = Collection.search params[:query], where: {privacy: "public"}, order: col_order_hash(params), page: params[:page] + @result = Collection.search params[:query], where: {privacy: "public"}, order: col_order_hash(params), page: params[:page] || 1, per_page: 10 when "User" - @result = User.search params[:query], order: user_order_hash(params), page: params[:page] + @result = User.search params[:query], order: user_order_hash(params), page: params[:page] || 1, per_page: 10 else raise "Wrong search class parameter" end @@ -29,32 +31,52 @@ class SearchController < ApplicationController end def autocomplete + response = [] case params[:search_class] when "LearningObject" - render json: LearningObject.search(params[:query], { + los = LearningObject.search(params[:query], { fields: ['name^5', 'description', 'author'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + los.each do |lo| + hash = {} + hash["name"] = lo.name + hash["thumbnail"] = "/assets/"+learning_object_thumbnail(lo) + hash["url"] = url_for([lo, :only_path => false]) + response << hash + end when "Collection" - render json: Collection.search(params[:query], { + cols = Collection.search(params[:query], { where: {privacy: "public"}, fields: ['name^5', 'description', 'owner'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + cols.each do |col| + hash = {} + hash["name"] = col.name + hash["thumbnail"] = "/assets/icons/collection" + hash["url"] = url_for([col, :only_path => false]) + response << hash + end when "User" - render json: User.search(params[:query], { + users = User.search(params[:query], { fields: ['name'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + users.each do |user| + hash = {} + hash["name"] = user.name + hash["thumbnail"] = user.avatar.url(:thumb) + hash["url"] = url_for([user, :only_path => false]) + response << hash + end else raise "Wrong search class parameter" end + render json: response end private diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb index 391b3e7512b7c99e723391e98391d32e1c3c5cc0..4dfa144645e250f21132b62d805478ab5a3faa95 100644 --- a/app/helpers/learning_objects_helper.rb +++ b/app/helpers/learning_objects_helper.rb @@ -9,7 +9,7 @@ module LearningObjectsHelper when 'PDF' then "<iframe src=\"/pdfjs/web/viewer.html?file=#{learning_object.retrieve_link }\" style=\"border: 0 \" width=\"125%\" height=\"280\" frameborder=\"0\" scrolling=\"no\"></iframe>".html_safe else - learning_object_thumbnail learning_object, "large" + image_tag learning_object_thumbnail(learning_object, "large"), alt: learning_object_title(learning_object), class: "thumbnail" end end @@ -44,7 +44,7 @@ module LearningObjectsHelper else thumbnail = learning_object.thumbnail end - image_tag thumbnail, alt: learning_object_title(learning_object), class: "thumbnail" + thumbnail end def learning_object_title(learning_object) diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb index b4b8f123dbd917baf50a748c4d743292a728fe69..6538596f77807cc636867b04e0d45c400a518539 100644 --- a/app/views/learning_objects/_learning_object_horizontal.erb +++ b/app/views/learning_objects/_learning_object_horizontal.erb @@ -4,7 +4,7 @@ <!-- <div class="col-md-5"> --> <div class="learning-object-thumbnail"> <%= link_to link do - learning_object_thumbnail learning_object + image_tag learning_object_thumbnail(learning_object), alt: learning_object_title(learning_object), class: "thumbnail" end %> <% if user_signed_in? %> diff --git a/app/views/learning_objects/_learning_object_vertical.erb b/app/views/learning_objects/_learning_object_vertical.erb index 58aada1502d2ae275eced9af1e1f714b09abab78..0e22d59fb5bad7cd65ea3d632fdd7f209ffac1f6 100644 --- a/app/views/learning_objects/_learning_object_vertical.erb +++ b/app/views/learning_objects/_learning_object_vertical.erb @@ -2,7 +2,7 @@ <div class="panel"> <div class="learning-object-thumbnail"> <%= link_to learning_object_path(id: learning_object.id) do - learning_object_thumbnail learning_object + image_tag learning_object_thumbnail(learning_object), alt: learning_object_title(learning_object), class: "thumbnail" end %> <% if user_signed_in? %> <%= render 'learning_objects/actions_buttons', learning_object: learning_object %>