Where we display actual dates and times for tweets in the local timezone. Because I like big endian date formatting and really, fuck the 12 hours clock format. Also am/pm, please die in a fire.
Using `setTimeout()` is a little trick that, on average, reduces the number of calls by a factor of thousand (0.1%). Observing mutations is expensive.
From this:
>spenibus @_spenibus Apr 17
Slept for 18 hours. Wednesday never happened.
Expand
To this:
>spenibus @_spenibus # Apr 17 - 2014-04-17 02:52:49
Slept for 18 hours. Wednesday never happened.
Expand
Prerequisite
--
````
function css(str) {
var tmp = document.createElement('style');
tmp.textContent = str;
document.getElementsByTagName("head")[0].appendChild(tmp);
}
````
And the code
--
````
window.addEventListener('load', function(){
css(""
+"small.time > a > time,"
+"div.tweet-details-fixer > div.client-and-actions > span.metadata > time"
+"{font-weight:bold;}"
);
var time = function(timestamp) {
if(timestamp) {
var date = new Date(timestamp*1000);
return date.getFullYear()+'-'+
('0'+(date.getMonth()+1)).slice(-2)+'-'+
('0'+date.getDate()).slice(-2)+' '+
('0'+date.getHours()).slice(-2)+':'+
('0'+date.getMinutes()).slice(-2)+':'+
('0'+date.getSeconds()).slice(-2);
}
return 0;
}
var properTime = function() {
var data = {};
var dataIndex = 0;
// timeline elements
var elems = document.querySelectorAll('small.time > a > span[data-time]._timestamp');
elems = elems ? elems : [];
for(var i=0; i<elems.length; i++) {
var stamp = elems[i].getAttribute("data-time");
data[dataIndex++] = {
node : elems[i],
timestamp : stamp,
};
}
// individual tweet elements
var elems = document.querySelectorAll('div.tweet-details-fixer > div.client-and-actions > span.metadata > span');
elems = elems ? elems : [];
for(var i=0; i<elems.length; i++) {
var stamp = new Date(elems[i].innerHTML).getTime()/1000;
data[dataIndex++] = {
node : elems[i],
timestamp : stamp,
};
}
// add time string
for(var i in data) {
if(data[i].node.parentNode && data[i].node.parentNode.innerHTML.substr(0,1) != "#") {
data[i].node.parentNode.innerHTML =
"# "+data[i].node.parentNode.innerHTML
+" - <time>"+time(data[i].timestamp)+"</time>";
}
}
}
// we only fire once per second max
var properTimeAllowed = true; // we exec at least once
var properTimeLauncher = function() {
if(properTimeAllowed) {
properTimeAllowed = false;
setTimeout(function(){
properTimeAllowed = true;
properTime();
}, 1000);
}
}
window.addEventListener('DOMSubtreeModified', properTimeLauncher, false);
}, false);
````