Skip to content

Instantly share code, notes, and snippets.

@ahoward
Created January 11, 2011 00:28
Show Gist options
  • Select an option

  • Save ahoward/773779 to your computer and use it in GitHub Desktop.

Select an option

Save ahoward/773779 to your computer and use it in GitHub Desktop.
flash partial
// add a flash message
//
App.flash = function(msg, options){
options = options || {};
var flash = jQuery('.flash');
var template = App.templates['flash-list-item'];
var data = {'message' : msg};
var message = jQuery.tmpl(template, data);
var dismiss = message.find('.dismiss');
dismiss.click(function(){ message.remove() });
message.addClass(options.class || 'info');
flash.append(message);
return(message);
};
// find and pre-compile all jQuery templates on the page. cache them by name.
//
var templates = {};
jQuery('script.template').each(function(){
var j = jQuery(this);
var name = j.attr('name');
var html = j.html();
App.templates[name] = jQuery.template(name, html);
});
// usage (from javascript)
//
// App.flash('a flash message!')
//
// App.flash('an error!', {'class' : 'error'})
//
<%
flash = self.flash ### see http://groups.google.ca/group/rubyonrails-talk/browse_thread/thread/8e54e4bc3c2b4366
keys = [:info, :notice, :error, :success]
javascript = []
unless flash[:hide]
keys.each do |key|
message = flash[key]
next if message.blank?
javascript.push("App.flash(#{ message.to_json }, {'class' : #{ key.to_json }});")
end
end
keys.each{|key| self.flash[key] = nil}
%>
<ul class='flash'>
<script class='template' name='flash-list-item' type='text/x-jquery-tmpl'>
<li>
<span class='message'>{{html message}}</span>
<a class='dismiss' href='javascript:void(42)'>dismiss</a>
</li>
</script>
<script>
jQuery(function(){
<%= raw(javascript.join("\n")) %>
});
</script>
</ul>
<noscript>
<ul class="flash">
<li class="error">
<span class="message">You need javascript enabled for the internet to function properly.</span>
</li>
</ul>
</noscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment