(function($, block) {
// Entity formatters for use by tweet list
var entity_formatters = {
'urls': function(e) {
return '' + e.display_url + '';
},
'user_mentions': function(e) {
return '@'+e.screen_name+'';
},
'hashtags': function(e) {
return '#' +e.text+'';
},
'default': function(e) {
return '{ENTITY}';
}
};
// processes entities for the given message and entity object
var process_entities = function(message, entities) {
// short-circuit failure mode
if(typeof entities === 'undefined') {
return message;
}
// build list of entities sorted on starting index
var es = [];
$.each(entities, function(t, ts) {
$.each(ts, function(_, e) {
e['type'] = t;
es.push(e);
});
});
es.sort(function(a,b) {
return a['indices'][0] - b['indices'][0];
});
// process entities one-by-one in order of appearance
var marker = 0;
var result = "";
for(var i in es) {
var e = es[i];
var start = e['indices'][0];
var stop = e['indices'][1];
//copy string content
result += message.substring(marker, start);
//process entity (through formatter or no-op function)
var formatter = entity_formatters[e.type]
|| function(e) { return message.substring(start,stop) };
result += formatter(e);
// update marker location
marker = stop;
}
// append tail of message
result += message.substring(marker, message.length);
return result;
}
block.fn.tweets = function(config) {
var options = $.extend({
memory: 20
}, config);
// store list for later
// var $list = $("div.tweetcontainer");
var $list = document.querySelector("#latest")
// register default handler for handling tweet data
this.actions(function(e, tweet){
$(window).trigger("filter");
tweets = window.sessionStorage.getItem('tweets');
tweets = JSON.parse(tweets);
tweets.push(tweet);
var localMemory = 100;
if(tweets.length >= localMemory) {
tweets.shift();
}
window.sessionStorage.setItem('tweets', JSON.stringify(tweets));
// remove tweets
$list.replaceChildren();
var displayTweets = tweets.reverse().slice(0, options.memory).reverse();
for (i = 0; i < options.memory-1; i++){
$list.prepend(tweetCell(displayTweets[i]));
}
});
return this.$element;
};
})(jQuery, block);