jsbin/lib/helpers.js
Remy Sharp ab3ce57881 Flipping mismatch between client side urls and server.
Bottom line: if revision is 1 - it should not be visible. End of!
2012-07-22 23:36:53 +01:00

77 lines
2.1 KiB
JavaScript

// A collection of useful methods that are essentially utils but are
// specific to the application and require access to the app object.
module.exports.createHelpers = function createHelpers(app) {
return {
// Proxied access to the Application#set() method.
set: app.set.bind(app),
// Proxied access to the Application#render() method.
render: app.render.bind(app),
// Check to see if the app is in production.
production: app.set('env') === app.PRODUCTION,
// Renders the analytics snippet. Accepts a callback that recieves
// and error and html object.
analytics: function (fn) {
app.render('analytics', {id: app.set('analytics id')}, fn);
},
// Generates a url for the path provided including prefix. If the second
// full parameter is provided then a full url including domain and
// protocol will be returned.
url: function (path, full, static) {
var root = '';
if (full) {
root = app.set('url full');
} else if (static) {
root = app.set('static url');
} else {
root = app.set('url prefix');
}
// Remove preceding slash if one exists.
if (path && path[0] === '/') {
path = path.slice(1);
}
return path ? root + '/' + path : root;
},
// matches the format used in the client side code (jsbin.js)
jsbinURL: function (bin) {
var url = app.set('url full');
if (bin.url) {
url += '/' + bin.url;
if (bin.revision && bin.revision !== 1) {
url += '/' + bin.revision;
}
}
return url;
},
// Same as helper.url() but creates a url for the bin object provided.
urlForBin: function (bin, full) {
var url = [];
if (bin.url) {
url.push(bin.url);
if (bin.revision) {
url.push(bin.revision);
}
}
return this.url(url.join('/'), full);
},
// Same as helper.urlForBin() but returns an url for the edit page.
editUrlForBin: function (bin, full) {
return this.urlForBin(bin, full) + '/edit';
}
};
};