public
Description: Add javascript variables and objects to rails projects without ugly js-erb stuffed in views.
Homepage:
Clone URL: git://github.com/ejschmitt/jsvars.git
jsvars /
name age message
file MIT-LICENSE Mon Sep 07 05:33:10 -0700 2009 Initial commit, needs documentation [ejschmitt]
file README Tue Sep 08 14:47:16 -0700 2009 added examples of using the extended dot notati... [ejschmitt]
file Rakefile Mon Sep 07 05:33:10 -0700 2009 Initial commit, needs documentation [ejschmitt]
file init.rb Mon Sep 07 05:33:10 -0700 2009 Initial commit, needs documentation [ejschmitt]
file install.rb Mon Sep 07 05:33:10 -0700 2009 Initial commit, needs documentation [ejschmitt]
directory lib/ Thu Nov 19 14:08:22 -0800 2009 added the ability to supress jsvars by using *j... [ejschmitt]
directory tasks/ Mon Sep 07 06:26:08 -0700 2009 added some documentation [ejschmitt]
directory test/ Mon Sep 07 06:26:08 -0700 2009 added some documentation [ejschmitt]
file uninstall.rb Mon Sep 07 05:33:10 -0700 2009 Initial commit, needs documentation [ejschmitt]
README
Jsvars
======
This rails plugin will hide the messiness of passing variables from rails into javascript. It will automatically add the 
js needed to create a variable you define in rails, or add variables to objects.


Install
======
Requires Json (require 'json')

./script/plugin install git://github.com/ejschmitt/jsvars.git


Examples
=======

in your controller:
jsvars[:loginPath] = login_path
    - Will create a global variable in the JS window object named 'loginPath' with the value you assigned.

jsvars[:myObject] = {:title => "My Page", :email => "me@example.com"}
    - Adds the object variables that can be used as myObject.title & myObject.email in the view javascipt.
    - This will add the object "myObject" if it does not exist, if it already does, only the variables will be added to 
    the already existing object.

jsvars['myObj.myMeth.myValue'] = "myVar"
  - Adds the objects myObj, myMeth, myValue if they do not exist and defines the value of myObj.myMeth.myValue to myVar.

    - Only undefined objects will be added, so if myObj exists but myMeth and myVal do not, they will be added to the 
  myObj object.

Example of extending an object:
In controller:
    jsvars[:login] = {:path => '/login'}
    
in view:
<script>
    var login = {
        loginFuntion: function () {
            // ....
        },
        specialVar: "My special Var"    
    };
</script>

in JS:
    login.loginFunction = function()
    login.specialVar = 'My special Var'
    login.path = '/login'
    
Getting the rails environment in javascript for all pages 
In ApplicationController:
    before_filter :set_js_env
    
    def set_js_env
        jsvars[:railsEnv] = RAILS_ENV
    end
    
In JS
    railsEnv = "development"
    
    
What this solves
=======
This solves the mess of stuff like this:

<script>
    var loginPath = '<%= login_path %>';
</script>
(requiring the js to be left in an .html.erb file, or a .js.erb file)

to simple adding:
    jsvars[:loginPath] = login_path
to the controller and allowing all js to be kept in .js files out of the html.
This can get especially messy with objects with a few rails defines attributes.