aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJoe Sak <joe@joesak.com>2011-06-15 11:02:59 -0500
committerJoe Sak <joe@joesak.com>2011-06-15 11:02:59 -0500
commitb8d2bcb913827e1db612b2952e74d316669e6835 (patch)
treec417f2ec10e5e21c24ffbbc1319dbf707a3b05e9 /app
parent687ffb62863fd036f1eb62e82a407b5a71a0e812 (diff)
downloadrefinerycms-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.rb8
-rw-r--r--app/views/admin/blog/posts/_form.html.erb1
-rw-r--r--app/views/shared/admin/_autocomplete.html.erb55
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