README.md in gritter-1.0.3 vs README.md in gritter-1.1.0

- old
+ new

@@ -1,354 +1,441 @@ -# gritter - - version 1.0.3 - Robin Brouwer - Daniƫl Zwijnenburg - 45north - -This Ruby on Rails gem allows you to easily add Growl-like notifications to your application using a jQuery plugin called 'gritter'. [Check out the demo for this plugin](http://boedesign.com/demos/gritter/). - -## Note - -This is a Rails 3.1 gem. Are you using Rails 3.0 or lower? Check out [the 'old' branch on Github](https://github.com/RobinBrouwer/gritter/tree/old). Want support for IE6? -Also check out that branch, because the newer version of gritter inside this gem dropped support for it. - - -## Installation - -You can use this gem by putting the following inside your Gemfile: - - gem "gritter", "1.0.3" - -Now generate the locale for gritter: - - rails g gritter:locale - -Add the following to `/app/assets/javascripts/application.js`: - - //= require gritter - -And the following to `/app/assets/stylesheets/application.css`: - - *= require gritter - -And that's it! - -## Changes - -Version 1.0.3 changes (26/01/2013): - - - :nodom_wrap added by indykish - -Version 1.0.2 changes (03/09/2012): - - - Merged pull request #22 (namespaced controllers gflash fix). - -Version 1.0.1 changes (23/01/2012): - - - Fixed gflash(:js => true) in Ruby 1.9.2 and 1.9.3. - -Version 1.0.0 changes (17/11/2011): - - - Gritter now only works in Rails 3.1. You should check out the 'old' branch for other Rails versions. - - Removed everything that isn't needed for Rails 3.1. - - Added new version for the gritter jQuery plugin (1.7.1). - - Added position option for your gritter messages. - - Locale isn't automatically generated. You need to use the gritter:locale generator. - - Adding locale-based gflash messages got a bit easier. - - You can now use a :gflash option inside the redirect_to method. - - Using SCSS image_path instead of ERB image_path inside the CSS. - - Added CSS3 support for gritter. - - Refactored some parts of the gem. - - Changed the README quite a bit. - - -## Usage - -There are several helpers you can use with gritter. All of them print out Javascript code without script-tags. - - add_gritter - remove_gritter - extend_gritter - -To add the script-tags we added another function called `js`. It allows you to easily add script-tags around your javascript. -It can be used in combination with gritter, but also other Javascript you want to run. - -The most popular feature of this gem is `gflash`. This replaces the regular flash messages in Rails and -automatically puts these in gritter boxes. Read further to learn more about gflash. - - -### add_gritter - -The `add_gritter` helper allows you to add a gritter notification to your application. -It outputs Javascript directly into your template. It works like this inside a `js.erb` file: - - <%= add_gritter("This is a notification just for you!") %> - -The `add_gritter` helper allows you to easily set the text for the notification. -When you want to change the title, just pass the `:title` argument to the helper: - - <%= add_gritter("This is a notification just for you!", :title => "Please pay attention!") %> - -There are many more arguments you can pass to the helper: - - :title => "This is a title" # => Allows you to set the title for the notification. - :image => "/images/rails.png" # => Allows you to add an image to the notification. - :sticky => true # => Allows you to make the notification sticky. - :time => 4000 # => Allows you to set the time when the notification disappears (in ms). - :class_name => "gritter" # => Allows you to set a different classname. - :before_open => "alert('Opening!');" # => Execute javascript before opening. - :after_open => "alert('Opened!');" # => Execute javascript after opening. - :before_close => "alert('Closing!');" # => Execute javascript before closing. - :after_close => "alert('Closed!');" # => Execute javascript after closing. - :nodom_wrap => true # => Removes the DOM wrap on the produced JQuery code. Default, this argument - is false or not present, hence you always get a DOM wrap. - -The `:image` argument also allows you to easily set five different images: - - :success - :warning - :notice - :error - :progress - -It works like this in combination with flash[:notice] and the `js` helper: - - <%= js add_gritter(flash[:notice], :image => :notice, :title => "Pay attention!", :sticky => true) %> - -The js helper is almost the same as the javascript_tag helper. The difference is that you can pass several scripts at once. -You don't need to pass these scripts as an Array. The helper also adds a linebreak (\n) after each script. - - <%= js add_gritter("See my notification"), add_gritter("Another one") %> - -It puts all the scripts inside a single script-tag. - -And that's it! You just added Growl-like notifications to your Rails application. -It's great for all kinds of notifications, including the flash notifications you want to show to your users. - - -### remove_gritter - -The `remove_gritter` helper removes all gritter notifications from the screen. You can use it inside a `js.erb` file: - - <%= remove_gritter %> - -You can pass two extra arguments to this helper. - - :before_close => "alert('Closing!');" # => Execute javascript before closing. - :after_close => "alert('Closed!');" # => Execute javascript after closing. - -You can also use the `js` helper to add script-tags around this helper. - - -### extend_gritter - -The `extend_gritter` helper allows you to set the default gritter options. - - <%= extend_gritter :time => 1000 %> - -These are the options you can pass to `extend_gritter`: - - :fade_in_speed => "medium" # => Allows you to set the fade-in-speed. Can be String or Integer (in ms). - :fade_out_speed => 1000 # => Allows you to set the fade-out-speed. Can be String or Integer (in ms). - :time => 8000 # => Allows you to set the time the notification stays. Must be an Integer (in ms). - :position => :bottom_left # => Allows you to set the position for all gritter messages. - -The :fade_in_speed and :fade_out_speed options accept the following Strings: - - "slow" - "medium" - "fast" - -The :position option accepts four different Symbols: - - :top_left - :top_right # Default - :bottom_left - :bottom_right - -You can also use the `js` helper , add_gritter("Another one") to add script-tags around this helper. - - -### gflash - -The `gflash` helper is a different kind of `flash[:notice]` message. It uses the `add_gritter` helper and the default images used in this plugin. -It uses a session to remember the flash messages. Add the following inside your controller action: - - def create - gflash :success => "The product has been created successfully!" - end - -Now you can add the following to your layout view inside the body-tag: - - <%= gflash %> - -The flash-message will be shown with 'success.png' as the image and 'Success' as the title. -To change the title you can add the following to the `gflash` helper inside the layout: - - <%= gflash :success => "It has been successful!" %> - -Now the default title will be overwritten. You can also use gflash inside `js.erb` files: - - <%= gflash :js => true %> - -The :success key isn't the only option supported by gflash. You can use the following gflash options: - - :success - :warning - :notice - :error - :progress - -Each uses the corresponding image and title. You can also add multiple gritter notifications at once: - - def create - gflash :success => "The product has been created successfully!", :notice => "This product doesn't have a category." - end - -Besides passing the exact text inside the controller, gflash also supports locales (both for messages and titles). -When you start your server a new locale file will be added to /config/locales called `gflash.en.yml`. -Here you can set the locales for all your gflash messages and the titles. It works like this: - - en: - gflash: - titles: - notice: "Custom notice title" - success: "Success" - warning: "Warning" - error: "Error" - progress: "Progress" - products: # => Controller name - create: # => Action name - notice: "Custom notice message" - -Now you can do the following inside your Controller: - - def create - gflash :notice => true - end - -The locales for the `:notice` title and message will now be used. You can still pass a `String` to override a locale. -Since gritter version 1.0 you can also do the following to add the gritter messages: - - def create - gflash :notice, :success, :error - end - -No need to pass `true` to each key. - -You can change the default time, sticky and class_name options for each gritter message. -This is done inside the Controller and works like this: - - gflash :success => { :time => 2000, :class_name => "my_class", :sticky => true } - gflash :success => { :value => true, :time => 2000, :class_name => "my_class", :sticky => true } - gflash :error => { :value => "Custom error", :time => 3000, :class_name => "my_error_class", :sticky => false } - -When you don't pass a `:value` it uses the locale. Same goes for when you pass `true` to `:value`. When you give `:value` a String, that String will be used to display the message. Here's another example: - - def create - @user = User.new(params[:user]) - if @user.save - gflash :success => { :value => "Account has been created!", :time => 5000 }, - :notice => { :value => "You have received an e-mail notification.", :sticky => true } - redirect_to :root - else - gflash :error => { :value => "Something went wrong.", :time => 4000 }, - :warning => { :value => "Some fields weren't filled in correctly.", :time => 7000 } - render :new - end - end - -You can also use gflash directly inside the `redirect_to` method. - - def create - redirect_to @post, :gflash => [:notice, :success] - end - - def destroy - redirect_to :posts, :gflash => { :warning => "You just deleted something important." } - end - - def logged_in? - redirect_to :login, :gflash => { :error => { :value => "You are not logged in!", :sticky => true } } - end - -And that's how you add gflash to your Rails application! - - -### Using `nodom_wrap` to change the JQuery code produced - -##### Default. (when nodom_wrap is not present) -The `add_gritter` helper produces JQuery code as shown below. - -```ruby -<%= add_gritter(:success, "See my notification")%> -``` - -```js -jQuery(function() { - jQuery.gritter.add({image:'/assets/success.png',title:'Success',text:'See my notification'}) -}); -``` - -##### nodom_wrap - -If you don't want to wrap `jQuery.gritter.add({` inside a `jQuery(function()` then include the argument `:nodom_wrap` - -The modified `add_gritter` helper with `nodom_wrap` looks like this: - -```ruby -<%= add_gritter(:success, "See my notification", :nodom_wrap => true )%> -``` - -With `:nodom_wrap` included, the following JQuery code will be produced. - -```js -jQuery.gritter.add({ - image: '/assets/success.png', - title: 'Success', - text: 'The product has been created successfully!' -}); -``` - -The argument can be included in `gflash` helper as well. - -```ruby -gflash :success => { :value => "Account has been created!", :time => 5000, :nodom_wrap => true } - -redirect_to signin_path(@user), :gflash => -{ :success => { :value => "Welcome back #{@user.first_name}. -Your email #{@user.email} is verified. Thank you.", :sticky => false, :nodom_wrap => true } } -``` - - -## Copyright - -Copyright (C) 2010 Robin Brouwer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -## Special Thanks - -We'd like to express our gratitude to the following people: - -Many thanks to Jordan Boesch, creator of the AWESOME jQuery plugin gritter. -http://boedesign.com/blog/2009/07/11/growl-for-jquery-gritter/ - -Also special thanks to Liam McKay for creating the awesome icons! +# gritter + + version 1.1.0 + Robin Brouwer + montblanc + +This Ruby on Rails gem allows you to easily add Growl-like notifications to your application using a jQuery plugin called 'gritter'. [Check out the demo for this plugin](http://boedesign.com/demos/gritter/). + +## Note + +Are you using Rails 3.0 or lower? Check out [the 'old' branch on Github](https://github.com/RobinBrouwer/gritter/tree/old). Want support for IE6? +Also check out that branch, because the newer version of gritter inside this gem dropped support for it. + + +## Installation + +You can use this gem by putting the following inside your Gemfile: + + gem "gritter", "1.1.0" + +Now generate the locale for gritter: + + rails g gritter:locale + +Add the following to `/app/assets/javascripts/application.js`: + + //= require gritter + +And the following to `/app/assets/stylesheets/application.css`: + + *= require gritter + +And that's it! + +## Changes + +Version 1.1.0 changes (31/01/2013): + + - All gflash messages are also stored in the Rails flash messages. + - Added i18n interpolation for gflash messages. + - Added default values for the gflash messages. + - Fixed several other issues. + +Version 1.0.3 changes (26/01/2013): + + - :nodom_wrap added by indykish + +Version 1.0.2 changes (03/09/2012): + + - Merged pull request #22 (namespaced controllers gflash fix). + +Version 1.0.1 changes (23/01/2012): + + - Fixed gflash(:js => true) in Ruby 1.9.2 and 1.9.3. + +Version 1.0.0 changes (17/11/2011): + + - Gritter now only works in Rails 3.1. You should check out the 'old' branch for other Rails versions. + - Removed everything that isn't needed for Rails 3.1. + - Added new version for the gritter jQuery plugin (1.7.1). + - Added position option for your gritter messages. + - Locale isn't automatically generated. You need to use the gritter:locale generator. + - Adding locale-based gflash messages got a bit easier. + - You can now use a :gflash option inside the redirect_to method. + - Using SCSS image_path instead of ERB image_path inside the CSS. + - Added CSS3 support for gritter. + - Refactored some parts of the gem. + - Changed the README quite a bit. + + +## Usage + +There are several helpers you can use with gritter. All of them print out Javascript code without script-tags. + +```ruby +add_gritter +remove_gritter +extend_gritter +``` + +To add the script-tags we added another function called `js`. It allows you to easily add script-tags around your javascript. +It can be used in combination with gritter, but also other Javascript you want to run. + +The most popular feature of this gem is `gflash`. This replaces the regular flash messages in Rails and +automatically puts these in gritter boxes. Read further to learn more about gflash. + + +### add_gritter + +The `add_gritter` helper allows you to add a gritter notification to your application. +It outputs Javascript directly into your template. It works like this inside a `js.erb` file: + +```ruby +<%= add_gritter("This is a notification just for you!") %> +``` + +The `add_gritter` helper allows you to easily set the text for the notification. +When you want to change the title, just pass the `:title` argument to the helper: + +```ruby +<%= add_gritter("This is a notification just for you!", :title => "Please pay attention!") %> +``` + +There are many more arguments you can pass to the helper: + +```ruby +:title => "This is a title" # => Allows you to set the title for the notification. +:image => "/images/rails.png" # => Allows you to add an image to the notification. +:sticky => true # => Allows you to make the notification sticky. +:time => 4000 # => Allows you to set the time when the notification disappears (in ms). +:class_name => "gritter" # => Allows you to set a different classname. +:before_open => "alert('Opening!');" # => Execute javascript before opening. +:after_open => "alert('Opened!');" # => Execute javascript after opening. +:before_close => "alert('Closing!');" # => Execute javascript before closing. +:after_close => "alert('Closed!');" # => Execute javascript after closing. +:nodom_wrap => true # => Removes the DOM wrap on the produced JQuery code. Default, this argument + # is false or not present, hence you always get a DOM wrap. +``` + +The `:image` argument also allows you to easily set five different images: + +```ruby +:success +:warning +:notice +:error +:progress +``` + +It works like this in combination with flash[:notice] and the `js` helper: + +```ruby +<%= js add_gritter(flash[:notice], :image => :notice, :title => "Pay attention!", :sticky => true) %> +``` + +The js helper is almost the same as the javascript_tag helper. The difference is that you can pass several scripts at once. +You don't need to pass these scripts as an Array. The helper also adds a linebreak (\n) after each script. + +```ruby +<%= js add_gritter("See my notification"), add_gritter("Another one") %> +``` + +It puts all the scripts inside a single script-tag. + +And that's it! You just added Growl-like notifications to your Rails application. +It's great for all kinds of notifications, including the flash notifications you want to show to your users. + + +### remove_gritter + +The `remove_gritter` helper removes all gritter notifications from the screen. You can use it inside a `js.erb` file: + +```ruby +<%= remove_gritter %> +``` + +You can pass two extra arguments to this helper. + +```ruby +:before_close => "alert('Closing!');" # => Execute javascript before closing. +:after_close => "alert('Closed!');" # => Execute javascript after closing. +``` + +You can also use the `js` helper to add script-tags around this helper. + + +### extend_gritter + +The `extend_gritter` helper allows you to set the default gritter options. + +```ruby +<%= extend_gritter :time => 1000 %> +``` + +These are the options you can pass to `extend_gritter`: + +```ruby +:fade_in_speed => "medium" # => Allows you to set the fade-in-speed. Can be String or Integer (in ms). +:fade_out_speed => 1000 # => Allows you to set the fade-out-speed. Can be String or Integer (in ms). +:time => 8000 # => Allows you to set the time the notification stays. Must be an Integer (in ms). +:position => :bottom_left # => Allows you to set the position for all gritter messages. +``` + +The :fade_in_speed and :fade_out_speed options accept the following Strings: + +```ruby +"slow" +"medium" +"fast" +``` + +The :position option accepts four different Symbols: + +```ruby +:top_left +:top_right # Default +:bottom_left +:bottom_right +``` + +You can also use the `js` helper , add_gritter("Another one") to add script-tags around this helper. + + +### gflash + +The `gflash` helper is a different kind of `flash[:notice]` message. It uses the `add_gritter` helper and the default images used in this gem. +It saves the messages in `session[:gflash]`. It can also save the messages inside the default Rails flash messages (`flash` and `flash.now`). +To do this, you have to add the following to an initializer: `Gritter.rails_flash_fallback = true`. + +Add the following inside your controller action: + +```ruby +def create + @product = Product.new(product_params) + if @product.save + gflash :success => "The product has been created successfully!" + redirect_to(@product) + else + gflash :now, :error => "Something went wrong." + render("new") + end +end +``` + +You can add `:now` to add the flash message to `flash.now` as well. + +Now you can add the following to your layout view inside the body-tag: + +```ruby +<%= gflash %> +``` + +The flash-message will be shown with 'success.png' as the image and 'Success' as the title when the product is saved. +To change the title you can add the following to the `gflash` helper inside the layout: + +```ruby +<%= gflash :success => "It has been successful!" %> +``` + +Now the default title will be overwritten. You can also use gflash inside `js.erb` files: + +```ruby +<%= gflash :js => true %> +``` + +The :success key isn't the only option supported by gflash. You can use the following gflash options: + +```ruby +:success +:warning +:notice +:error +:progress +``` + +Each uses the corresponding image and title. You can also add multiple gritter notifications at once: + +```ruby +def create + gflash :success => "The product has been created successfully!", :notice => "This product doesn't have a category." +end +``` + +Besides passing the exact text inside the controller, gflash also supports locales (both for messages and titles). +You can generate `gflash.en.yml` by using the following command: `rails g gritter:locale`. +Here you can set the locales for all your gflash messages and the titles. It works like this: + + en: + gflash: + titles: + notice: "Custom notice title" + success: "Success" + warning: "Warning" + error: "Error" + progress: "Progress" + products: # => Controller name + create: # => Action name + notice: "Custom notice message" + +It's also possible to add default gflash messages. + + en: + gflash: + defaults: + success: "This is a notification" + error: "Something went wrong" + create: + success: "Successfully created!" + error: "Something went wrong. Please take a look at the form to see what went wrong." + +Now you can do the following inside your Controller: + +```ruby +def create + gflash :notice => true +end +``` + +The locales for the `:notice` title and message will now be used. You can still pass a `String` to override a locale. +Since gritter version 1.0 you can also do the following to add the gritter messages: + +```ruby +def create + gflash :notice, :success, :error +end +``` + +No need to pass `true` to each key. + +You can change the default time, sticky and class_name options for each gritter message. +This is done inside the Controller and works like this: + +```ruby +gflash :success => { :time => 2000, :class_name => "my_class", :sticky => true } +gflash :success => { :value => true, :time => 2000, :class_name => "my_class", :sticky => true } +gflash :error => { :value => "Custom error", :time => 3000, :class_name => "my_error_class", :sticky => false } +``` + +When you don't pass a `:value` it uses the locale. Same goes for when you pass `true` to `:value`. When you give `:value` a String, that String will be used to display the message. Here's another example: + +```ruby +def create + @user = User.new(params[:user]) + if @user.save + gflash :success => { :value => "Account has been created!", :time => 5000 }, + :notice => { :value => "You have received an e-mail notification.", :sticky => true } + redirect_to :root + else + gflash :error => { :value => "Something went wrong.", :time => 4000 }, + :warning => { :value => "Some fields weren't filled in correctly.", :time => 7000 } + render :new + end +end +```ruby + +You can also use gflash directly inside the `redirect_to` method. + +```ruby +def create + redirect_to @post, :gflash => [:notice, :success] +end + +def destroy + redirect_to :posts, :gflash => { :warning => "You just deleted something important." } +end + +def logged_in? + redirect_to :login, :gflash => { :error => { :value => "You are not logged in!", :sticky => true } } +end +``` + +You can use i18n interpolation like this: + +```ruby +redirect_to :root, :flash => { :success => true, :locals => { :name => @user.name, :email => @user.email } } +gflash :success, :info, :locals => { :name => @user.name, :email => @user.email } +gflash :success, :info => { :locals => { :name => @user.name, :email => @user.email } } +``` + +Inside `gflash.en.yml` you can do the following: + +```ruby +success: "Welcome, %{name}." +info: "Your e-mail address has been changed to: %{email}." +``` + +And that's how you add gflash to your Rails application! + + +### Using `nodom_wrap` to change the jQuery code produced + +##### Default (when nodom_wrap is not present) +The `add_gritter` helper produces JQuery code as shown below. + +```ruby +<%= add_gritter(:success, "See my notification") %> +``` + +```js +jQuery(function() { + jQuery.gritter.add({ image: '/assets/success.png', title: 'Success', text: 'See my notification' }); +}); +``` + +##### nodom_wrap + +If you don't want to wrap `jQuery.gritter.add({` inside a `jQuery(function()` then include the argument `:nodom_wrap` + +The modified `add_gritter` helper with `nodom_wrap` looks like this: + +```ruby +<%= add_gritter(:success, "See my notification", :nodom_wrap => true )%> +``` + +With `:nodom_wrap` included, the following JQuery code will be produced. + +```js +jQuery.gritter.add({ + image: '/assets/success.png', + title: 'Success', + text: 'The product has been created successfully!' +}); +``` + +The argument can be included in `gflash` helper as well. + +```ruby +gflash :nodom_wrap => true +``` + +## Copyright + +Copyright (C) 2010 Robin Brouwer + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Special Thanks + +We'd like to express our gratitude to the following people: + +Many thanks to Jordan Boesch, creator of the AWESOME jQuery plugin gritter. +http://boedesign.com/blog/2009/07/11/growl-for-jquery-gritter/ + +Also special thanks to Liam McKay for creating the awesome icons! http://wefunction.com/2008/07/function-free-icon-set/ \ No newline at end of file