Jelly ===== INSTALLATION ------------ If you haven't already, add GitHub to your gem sources: gem sources -a http://gems.github.com Then run: sudo gem install pivotal-jelly GETTING STARTED --------------- In your `environment.rb` in the `Rails::Initializer.run` block, be sure to require jelly: config.gem "jelly" Then install the required JavaScript files by running this command in your Rails project: script/generate jelly Then, in your layout, add the following: <%= javascript_include_tag :jelly, *application_jelly_files %> <%= spread_jelly %> This will include the required JavaScripts for jelly and activate the current page. The `:jelly` javascript expansion includes jQuery. If you already have jQuery included in the page, use the `:only_jelly` expansion instead. EXAMPLE USAGE ------------- Assuming you have controller named `fun` with an action called `index` and that you have a layout called `fun.html.erb` that is already setup as described above. In your fun index view (`index.html.erb`), put:

Your page's 'index' function did not run. Jelly is not configured correctly.

Your page's 'all' function did not run. Jelly is not configured correctly. Then, in `public/javascripts/pages/fun.js`, put: Jelly.add("Fun", { all: function() { $('span.all').text("I am displayed on every action in this controller."); }, index: function() { $('h1').text("Welcome to the index page."); } }); Now goto `/fun/index` and see Jelly in action! AJAX CALLBACKS WITH JELLY ------------------------- You can trigger callbacks on the page object from Rails with the `jelly_callback` method. Adding to the `index.html.erb` file from above: Click me for Jelly Ajax Action This gets filled in by the Jelly Ajax callback And update your controller: class FunController < ApplicationController def index end def ajax_action jelly_callback do [ render(:partial => 'fun_partial'), "second_parameter" ] end end end Update your page object in `fun.js`: Jelly.add("Fun", { all: function() { $('title').text("Hello! Isn't this fun?"); }, index: function() { $('h1').text("Welcome to the index page."); $("#jelly_ajax_link").click(function() { $.ajaxWithJelly({ type: "GET", url: "/fun/ajax_action" }); }); }, on_ajax_action: function(html, second_parameter) { $('#jelly_callback_element').html(html); } }); And finally, make the partial `_fun_partial.html.erb` and just put "Hello from the server!" in it, then visit your page and watch the ajax callbacks in action. The `jelly_callback` method takes an optional parameter for the name of the callback, and the provided block can return either one parameter, or an array of parameters. DEVELOPMENT ----------- To run ruby tests, run `rake spec`. To run JavaScript tests, open `jelly/spec/jasmine_runner.html` in a web browser.