mirror of
https://github.com/jsbin/jsbin.git
synced 2026-01-25 15:38:56 +00:00
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.
85 lines
2.2 KiB
JavaScript
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;
|
|
}
|
|
};
|
|
};
|