Extend usage of html5 data attributes of the jquery UJS gem in the context of Ajax calls. It's just global attributes listeners I find myself often needing to rewrite in my new projects to save time on javascript writing. I extracted it as a gem.
#Prerequisites
This has been tested on Rails 3.2.8 so far. Since it's just a collection of JS listeners, it should work on any version really.
Requires :
- Usage of asset pipeline
- Coffeescript
- jquery-rails
#Installation
In your Gemfile assets
group, put:
gem 'jquery_ujs_extended'
Then bundle install
as usual.
Edit application.js
to add :
//= require jquery_ujs_extended
Restart your webserver and all should be fine
#Usage
When specifying a target DOM element in custom data attributes, you have to use the jQuery selector syntax. You can modify several elements on the DOM at once this way
##Ajax listeners
This applies to <form>, <a>, <input> and <select> elements. Needs to be used with data-remote
from jquery-ujs
-
data-update listener that automatically updates the DOM elements
link_to "Update", url_path, data: {remote: true, update: "#div1"} form_for @object, data: {remote: true, update: "#div1"}
-
data-destroy listener that automatically deletes the DOM elements
link_to "Destroy", url_path, data: {remote: true, destroy: ".class1"} form_for @object, data: {remote: true, destroy: ".class1 .class2"}
-
data-append listener that automatically appends to the DOM elements
link_to "Append", url_path, data: {remote: true, append: "#div1 span .class1"}
-
data-loader. Takes a DOM element. Will show the DOM element before sending the request, and hide it when the request is completed. This is best used to show a spinner image during a request.
<%= link_to "Loader", url_path, data: {remote: true, loader: ".loader"} %> <%= image_tag "/my/image.jpg", style: 'display: none', class: 'loader' %>
-
data-redirect. Takes a url. Redirects to the url on ajax success.
link_to "redirect", url_path, data: {remote: true, redirect: "/my/url"}
##Behaviour
-
data-integer. If specified and applied to a text field, will prevent the field from being anything but an integer.Value: minimum value or range like 1..10000. Leave blank if you don't want one.
text_field_tag "quantity", 1, data: {integer: 1} text_field_tag "quantity", 1, data: {integer: 1..10000}
-
data-float. If specified and applied to a text field, will prevent the field from being anything but a float.Value: minimum value or range like 1..10000. Leave blank if you don't want one.
text_field_tag "price", 1, data: {float: 0.01} text_field_tag "price", 1, data: {float: 0.01..10000}
#Bugs? Thoughts? Ideas to make it better?
Don't hesitate to open an issue here and I'll see what I can do!