forked from ryanbriones/fluid-twitter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fluid_twitter.user.js
113 lines (89 loc) · 3.19 KB
/
fluid_twitter.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// ==UserScript==
// @name Fluid Twitter
// @namespace http://brionesandco.com/ryabriones
// @description Streamline the Twitter interface to be nicer in a Fluid Instance
// @include http://twitter.tld/*
// @version 0.1
// @author Ryan Carmelo Briones
// @homepage http://brionesandco.com/ryabriones
// ==/UserScript==
Element.addMethods({
markRead: function(element) {
element.setStyle({
opacity: '.75',
background: '#eee'
})
}
});
var FluidTwitter = Class.create({
update_interval: 120000,
initialize: function() {
this.trimUI();
this.allRead();
this.dockMenuItems();
setTimeout(this.refreshTwitter.bind(this), this.update_interval);
},
trimUI: function() {
// hide some unneccessary parts of the UI
$('side', 'footer', 'navigation').invoke('hide');
// hide some more by overlaying the content
$('content').setStyle({ position: 'absolute', top: '-20px', left: '0' });
// alter divs to stretch with the viewport
$('container', 'content').invoke('setStyle', {width: '100%'});
$('status').setStyle({width: '90%'});
// alter "What are you doing?" h3 to allow thin viewport
$$('.bar').first().down('h3').down('label').setStyle({padding: 0});
// remove user photos
$$('td.thumb').invoke('remove');
$('header').down('img').setStyle({paddingLeft: '10px'});
},
allRead: function() {
var history = $$('#timeline tr[id^=status]');
var last_read = $('status_'+window.location.href.split('#l').last());
if (!last_read) last_read = history.last();
var newest = history.first().id.sub(/status_/,'');
var unread = last_read.previousSiblings();
last_read.nextSiblings().concat(last_read).invoke('markRead');
if (unread.size() > 0) {
var link = new Element('a', { href: '#l'+newest, accesskey: 'a' }).update('mark <u>a</u>ll read');
link.observe('click', function() {
history.invoke('markRead')
fluid.setDockBadge("");
this.hide();
});
link.setStyle({
border: '1px solid #ccc', display: 'block', float: 'right',
'font-size': '10px', 'margin-top': '-21px', padding: '2px 6px'
});
$('timeline').insert({ before: link } );
fluid.setDockBadge((unread.size() || "").toString());
var from = unread.last().down('strong').down('a').getAttribute('title');
var tweet = unread.last().down('span').innerHTML.strip().stripTags();
if (unread.size() > 1) {
tweet += "\n("+ (unread.size()-1) +" more tweets)"
}
fluid.showGrowlNotification({
title: from,
description: tweet,
priority: 3,
sticky: false,
onclick: window.fluid.activate
});
}
},
dockMenuItems: function() {
window.fluid.addDockMenuItem("Settings", function() { window.location.href = '/account/settings' })
},
refreshTwitter: function() {
// don't refresh if i'm scrolling
if($$('.wrapper').first().cumulativeScrollOffset()[1] > 90)
return setTimeout(this.refreshTwitter.bind(this), this.update_interval);
// don't refresh if i'm typing either
if($F('status') != '')
return setTimeout(this.refreshTwitter.bind(this), this.update_interval);
window.location.reload();
}
});
(function() {
document.fluid_twitter = new FluidTwitter();
})();