jsbin/lib/helpers.js
Aron Carroll 0f146f6255 Update rendered root to include custom subdomain
This doesn't account for all generated url's only those in the initial
html and those generated by the client. However this seems to cover
most bases without having to completely refactor the url helper to have
access to the request object.
2012-09-09 22:35:54 +01:00

85 lines
2.2 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) {
var root = '';
if (full) {
root = app.set('url full');
} 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';
},
// Returns a url for a static resource.
urlForStatic: function (path) {
if (path && path[0] === '/') {
path = path.slice(1);
}
var root = app.set('static url');
return path ? root + '/' + (path || '') : root;
}
};
};