diff options
author | Joe Sak <joe@joesak.com> | 2011-06-15 11:02:59 -0500 |
---|---|---|
committer | Joe Sak <joe@joesak.com> | 2011-06-15 11:02:59 -0500 |
commit | b8d2bcb913827e1db612b2952e74d316669e6835 (patch) | |
tree | c417f2ec10e5e21c24ffbbc1319dbf707a3b05e9 /app | |
parent | 687ffb62863fd036f1eb62e82a407b5a71a0e812 (diff) | |
download | refinerycms-blog-b8d2bcb913827e1db612b2952e74d316669e6835.tar.gz refinerycms-blog-b8d2bcb913827e1db612b2952e74d316669e6835.tar.bz2 refinerycms-blog-b8d2bcb913827e1db612b2952e74d316669e6835.zip |
autocomplete added for tags
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/admin/blog/posts_controller.rb | 8 | ||||
-rw-r--r-- | app/views/admin/blog/posts/_form.html.erb | 1 | ||||
-rw-r--r-- | app/views/shared/admin/_autocomplete.html.erb | 55 |
3 files changed, 64 insertions, 0 deletions
diff --git a/app/controllers/admin/blog/posts_controller.rb b/app/controllers/admin/blog/posts_controller.rb index e8ffed2..7569aa6 100644 --- a/app/controllers/admin/blog/posts_controller.rb +++ b/app/controllers/admin/blog/posts_controller.rb @@ -11,6 +11,14 @@ class Admin::Blog::PostsController < Admin::BaseController }) end + def tags + @tags = BlogPost.tag_counts_on(:tags).where(["tags.name LIKE ?", "%#{params[:term].to_s.downcase}%"]) + .collect { |tag| + {:id => tag.id, :value => tag.name} + } + render :json => @tags.flatten + end + def create # if the position field exists, set this object as last object, given the conditions of this class. if BlogPost.column_names.include?("position") diff --git a/app/views/admin/blog/posts/_form.html.erb b/app/views/admin/blog/posts/_form.html.erb index 24b14ba..c0467fd 100644 --- a/app/views/admin/blog/posts/_form.html.erb +++ b/app/views/admin/blog/posts/_form.html.erb @@ -88,3 +88,4 @@ <% content_for :stylesheets, render(:partial => 'form.css') -%> <% content_for :javascripts, render(:partial => 'form.js') -%> +<%= render 'shared/admin/autocomplete', :dom_id => '#blog_post_tag_list', :url => tags_admin_blog_posts_url %> diff --git a/app/views/shared/admin/_autocomplete.html.erb b/app/views/shared/admin/_autocomplete.html.erb new file mode 100644 index 0000000..7a3baa1 --- /dev/null +++ b/app/views/shared/admin/_autocomplete.html.erb @@ -0,0 +1,55 @@ +<% content_for :stylesheets, stylesheet_link_tag("ui-lightness/jquery-ui-1.8.13.custom") -%> + +<% content_for :javascripts do %> + <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js" %> + <script> + function split( val ) { + return val.split( /,\s*/ ); + } + function extractLast( term ) { + return split( term ).pop(); + } + + + $(document).ready(function(){ + page_options.init(false, '', '') + + $('<%= dom_id %>') + .bind( "keydown", function( event ) { + if ( event.keyCode === $.ui.keyCode.TAB && + $( this ).data( "autocomplete" ).menu.active ) { + event.preventDefault() + } + }) + .autocomplete({ + source: function( request, response ) { + $.getJSON( "<%= url %>", { + term: extractLast( request.term ) + }, response ); + }, + search: function() { + // custom minLength + var term = extractLast( this.value ); + if ( term.length < 2 ) { + return false; + } + }, + focus: function() { + // prevent value inserted on focus + return false; + }, + select: function( event, ui ) { + var terms = split( this.value ); + // remove the current input + terms.pop(); + // add the selected item + terms.push( ui.item.value ); + // add placeholder to get the comma-and-space at the end + terms.push( "" ); + this.value = terms.join( ", " ); + return false; + } + }) + }); + </script> +<% end %>
\ No newline at end of file |