70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var ACTIVE_LOCALE = window.ACTIVE_LOCALE;
|
||
|
var Locale = require('locale/index')[ACTIVE_LOCALE];
|
||
|
|
||
|
var LINK_TEMPLATE = _.template("<a href='<%- href %>'><%- link %></a>");
|
||
|
|
||
|
module.exports = {
|
||
|
/*
|
||
|
*
|
||
|
* Sometimes we need to include a link in a message. This function takes a key:
|
||
|
*
|
||
|
* {
|
||
|
* "body": "You are over platform's limits. Please %{link} to know more details",
|
||
|
* "link": "contact us",
|
||
|
* "href": "mailto:support@carto.com"
|
||
|
* }
|
||
|
*
|
||
|
* and return the message htmlfied with the link properly included
|
||
|
*/
|
||
|
|
||
|
linkify: function (key) {
|
||
|
// microtemplate function
|
||
|
// underscore doesn't allow change the template settings for one call
|
||
|
function t (s, d) {
|
||
|
for (var p in d) {
|
||
|
s = s.replace(new RegExp('%{' + p + '}', 'g'), d[p]);
|
||
|
}
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
var data = this.resolve(key);
|
||
|
|
||
|
if (!data) {
|
||
|
return void 0;
|
||
|
}
|
||
|
|
||
|
if (_.isString(data)) {
|
||
|
// we need an object with body, href, link
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
var message = data.body;
|
||
|
var link = data.link;
|
||
|
var href = data.href;
|
||
|
|
||
|
// If some data is missing or it doesn't need link
|
||
|
if (!message || !link || !href || !this.needLink(message)) {
|
||
|
return void 0;
|
||
|
}
|
||
|
|
||
|
return t(message, {
|
||
|
link: LINK_TEMPLATE({
|
||
|
link: link,
|
||
|
href: href
|
||
|
})
|
||
|
});
|
||
|
},
|
||
|
|
||
|
needLink: function (message) {
|
||
|
return message.indexOf('%{link}') >= 0;
|
||
|
},
|
||
|
|
||
|
// It returns the value or undefined for a given locale key
|
||
|
resolve: function (path) {
|
||
|
return path.split('.').reduce(function (prev, curr) {
|
||
|
return prev ? prev[curr] : void 0;
|
||
|
}, Locale);
|
||
|
}
|
||
|
};
|