Skip to content

Instantly share code, notes, and snippets.

@matasar
Created December 22, 2010 01:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matasar/750949 to your computer and use it in GitHub Desktop.
Save matasar/750949 to your computer and use it in GitHub Desktop.
twttr.txt.autoLinkWithEntities = function(text, entities) {
var result = [];
var allEntities = [];
var addEntities = function (key, array) {
if (entities[key]) {
array.push.apply(array, entities[key].map(function (ea) { return {type: key, value: ea}}));
};
};
for (var key in entities) {
addEntities(key, allEntities);
}
allEntities.sort(function (a,b) { return a.value.indices[0] - b.value.indices[0];});
var linkersFor = {
urls: function (text, url) {
var displayUrl = twttr.txt.htmlEscape(url.display_url || url.url);
var expandedUrl = twttr.txt.htmlEscape(url.expanded_url || url.url);
var srcUrl = twttr.txt.htmlEscape(url.url);
return '<a href="' + srcUrl + '" target="_blank" rel="nofollow" data-expanded-url="' + expandedUrl + '" class="twitter-timeline-link">' + displayUrl + '</a>';
},
hashtags: function (text, hashtag) {
var escaped = twttr.txt.htmlEscape(hashtag.text);
return '<a href="#!/search?q=%23' + escaped + '" title = "#' + escaped + '" class="twitter-hashtag" rel="nofollow">#' + escaped + "</a>";
},
user_mentions: function (text, user_mention) {
var screenName = twttr.txt.htmlEscape(user_mention.screen_name);
return '<a class="twitter-atreply" data-screen-name="' + screenName + '" href="http://twitter.com/' + screenName + '" rel="nofollow">' + screenName + "</a>";
}
};
var index = 0;
allEntities.forEach(function (object) {
var type = object.type;
var entity = object.value;
var start = entity.indices[0];
var end = entity.indices[1];
result.push(text.slice(index, start));
var linker = linkersFor[type] || function (text) { return text;};
result.push(linker(text.slice(start, end), entity));
index = end;
});
result.push(text.slice(index, text.length + 1));
return result.join("");
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment