(function (factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery', 'sammy', 'mustache'], factory);
} else {
(window.Sammy = window.Sammy || {}).Mustache = factory(window.jQuery, window.Sammy, window.Mustache);
}
}(function ($, Sammy, Mustache) {
// Sammy.Mustache provides a quick way of using mustache style templates in your app.
// The plugin wraps the awesome mustache.js lib created and maintained by Jan Lehnardt
// at http://github.com/janl/mustache.js
//
// Note: As of Sammy 0.7 the Mustache lib is not included in the templates source. Please download
// mustache.js and include it before Sammy.Mustache.
//
// Mustache is a clever templating system that relys on double brackets {{}} for interpolation.
// For full details on syntax check out the original Ruby implementation created by Chris Wanstrath at
// http://github.com/defunkt/mustache
//
// By default using Sammy.Mustache in your app adds the mustache() method to the EventContext
// prototype. However, just like Sammy.Template you can change the default name of the method
// by passing a second argument (e.g. you could use the ms() as the method alias so that all the template
// files could be in the form file.ms instead of file.mustache)
//
// ### Example #1
//
// The template (mytemplate.ms):
//
//
{{title}}
//
// Hey, {{name}}! Welcome to Mustache!
//
// The app:
//
// var app = $.sammy(function() {
// // include the plugin and alias mustache() to ms()
// this.use('Mustache', 'ms');
//
// this.get('#/hello/:name', function() {
// // set local vars
// this.title = 'Hello!'
// this.name = this.params.name;
// // render the template and pass it through mustache
// this.partial('mytemplate.ms');
// });
// });
//
// $(function() {
// app.run()
// });
//
// If I go to #/hello/AQ in the browser, Sammy will render this to the body:
//
// Hello!
//
// Hey, AQ! Welcome to Mustache!
//
//
// ### Example #2 - Mustache partials
//
// The template (mytemplate.ms)
//
// Hey, {{name}}! {{>hello_friend}}
//
//
// The partial (mypartial.ms)
//
// Say hello to your friend {{friend}}!
//
// The app:
//
// var app = $.sammy(function() {
// // include the plugin and alias mustache() to ms()
// this.use('Mustache', 'ms');
//
// this.get('#/hello/:name/to/:friend', function(context) {
// // fetch mustache-partial first
// this.load('mypartial.ms')
// .then(function(partial) {
// // set local vars
// context.partials = {hello_friend: partial};
// context.name = context.params.name;
// context.friend = context.params.friend;
//
// // render the template and pass it through mustache
// context.partial('mytemplate.ms');
// });
// });
// });
//
// $(function() {
// app.run()
// });
//
// If I go to #/hello/AQ/to/dP in the browser, Sammy will render this to the body:
//
// Hey, AQ! Say hello to your friend dP!
//
// Note: You need to include the mustache.js file before this plugin.
//
Sammy.Mustache = function(app, method_alias) {
// *Helper* Uses Mustache.js to parse a template and interpolate and work with the passed data
//
// ### Arguments
//
// * `template` A String template. {{}} Tags are evaluated and interpolated by Mustache.js
// * `data` An Object containing the replacement values for the template.
// data is extended with the EventContext allowing you to call its methods within the template.
// * `partials` An Object containing one or more partials (String templates
// that are called from the main template).
//
var mustache = function(template, data, partials) {
data = $.extend({}, this, data);
partials = $.extend({}, data.partials, partials);
return Mustache.to_html(template, data, partials);
};
// set the default method name/extension
if (!method_alias) { method_alias = 'mustache'; }
app.helper(method_alias, mustache);
};
return Sammy.Mustache;
}));