View difference between Paste ID: RMYaa1gV and XURXL9id
SHOW: | | - or go back to the newest paste.
1
/* 
2
 * Toastmaster 1.0 
3
 * Finds the bread so you don't have to.
4
 * 
5
 * Always read the code before pasting it in like an idiot.
6
 */
7
8
var toast ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAA3CAMAAACfBSJ0AAAAS1BMVEXMzMzMmWbMmTP/zJmZZjPMzJmZZgDMZjPMzGb/zGaZZmZmMwCZmWb/mWZmMzP//8yZmTP/zMzMmZmZMwBmZjPMZgCZMzPMZmb///+gGFQUAAAAAXRSTlMAQObYZgAABIBJREFUSMe1Vtly4zgMNEECJCXZTjKZmv//0+luUIqzW3u8jHxIlNA4Ggd1u/2Bo7X22B74/5/iW9Ox749933nxeODqP3E7TOC7b+1BxCfXn/+O+9y2X61FKc0Kj9Z6K/rQ538A8SFkD/da8MG/F/cyvOLf8XT//DuUKgvFIURBfJ9PnHKN/0rkX202+lJooA6cefgTsgLlmrrg+OO7MQpDbBSbuKRfXNYyDYG6VHlC92/mYtAW4+IxcJ60BfQ8QVi/Q8P2DQbhKBPqzGERNuYApFKBVMkLRV/ai5uVsPSIR53kswz8TxifQtaBNX066S/tQBQBm26FwZeBtVEId3GFT80ArI5aV93Ryhvt4fAq7XQPBuegPYonGNfGjC6c+YE80B5drQ5/FFdVTggImsa5y/TCMboWHfcdd0eGb4zPZeVnetjwNUhNcLD8hD6UYU9OZp7oa2XyBnSEu5zBMmwsZmAOaxSwIiSNEBniAZJhmaKs9ElevS5GK2vTqBwwgxX8Vvap0lY1TBYCquPKH2zAeZkbQthgkHNxLz6ZAxY4KuirgaryHZVeVFLDRAE6hjFsS2/M35/1pVyUQTxpinykW4Oqce4ZX4fvUP98HuUL9cW5wnKdGI6qAHd7phGa3r1uL7hDjpKGZET/Jyv0k6fBgvLaLhyKJyM3O5PHxlAeqPCuKyYdP/erPssxTCBfGbeTRTtNcpWFOK76XGybHCllTSRqOixZAcJyyHWrL3V2lAtsg+xO6ZjqYOvyMFQ7wRAunGdmq1Ke1eGDDUtER6eY2EH1m0rislcVzapJcPKmolUDpcpOg8E2rgwi+8/khTzV3CPB1VjIsUhZ7NzhKfpIqUDvcT5oFI7JEkgafRHZQ2G3YJxt0UZcXJSsgilnLiGJeRyWrdnZpMEWc9nrdgaRKYq8IAepMyDODICWYA3XKVyJ6WcYDAD8iXS0Mgus2L1rityj7R1ejyw1KHJFsYK3xodYRu+NvuFHDnDfmAq2WOJKbnd0VSRQB6zJGEzi1CEDBBPYzDz9RFrfSo4RW2PbyC9E8Kh3kxLqhOVOSmdfOBYTouK+GUpbyCTEAhZgH4RQIRaNYzM4PrvaoCv4kgkLWsCNn+CP4ebGA1uImY1fsv3YOCT7ZLXTaKN2yZaeGYAifAO9L3uKn/rpPgH0hkJBRulYi5CjdyriHpN1ppST+oaHTDhr/85EMBd8AJVksym8mbhbb6u7Ccya6zlSVDAIyBgWQDSfA/mWxKiewta+e/aGLS3cG5teZVgErOy+cHVJUd6zuFc31GsS0A1yznEiP6HrYEUG6u3gNnvKaraXrGhRF9lSmCLE/Wi2Rk/uuL4GZ+7PmBVlNb62OK0WL+3ICZcgbR5jTXG+fawdUa83WYdr9Br3d8xFH3rBOjx3nlFz3zpSnd6FnLto6wtnPvKdLF+mSg7NlgMybPGkTVe1+mON+pDvXmJnZo+N++i2AfZRPrbSzoPvs3iPLR+3L5yGaMHL6rbxOVHbR2IB3VRuB57sLJNrB2Rbte3lxp86fgOuVyGN3reBwAAAAABJRU5ErkJggg==";
9
10
function navigate(url) {
11
   if(typeof url != 'undefined') {
12
      window.location.href=url;
13
   }
14
}
15
function get_bread_number(text) {
16
   if (   (text.toLowerCase().indexOf('ebake') != -1) 
17
       || (text.toLowerCase().indexOf('research') != -1)) {
18
      var rx = /[^0-9]*([0-9]+)[^0-9]*/g;
19
      var arr = rx.exec(text);
20
      return arr.length > 1 ? arr[1] : false; 
21
  }
22
        
23
  return false;
24
}
25
26
function make_toast(url, time) {
27
 
28
   var response;
29
   
30
   var age = 100 - ((~~((new Date).getTime() / 1000)) - time)/72;
31
   
32
   var x = new XMLHttpRequest();
33
   x.open('GET', url, true);  
34
   
35
   x.onreadystatechange = function() {
36
      if(x.readyState === 4 && x.status == 200) {
37
         response = JSON.parse(x.responseText);
38
39
         var target = document.getElementById('dythreads');
40
 
41
         var bread = response.posts[0];
42
         var posts = response.posts.length;
43
         var opts = document.getElementsByName('toast');
44
         
45
         for(var i = 0; i < opts.length; i++) {
46
            if (opts[i].getAttribute('no') == bread.no) {
47
               opts[i].setAttribute('old',false)
48
               return;
49
            }
50
         }
51
         var txt = bread.sub;
52
         
53
         if (typeof txt == 'undefined') {
54
            txt = bread.com;
55
            if (txt.length > 40) {
56
               txt = txt.substring(0,39) + '...';
57
            }
58
         }
59
         var num = get_bread_number(txt);
60
         if (false == num) return;
61
         var img = document.createElement('IMG');
62
63
         var opt = document.createElement('SPAN');
64
         
65
         opt.setAttribute('title', txt + ' (' + posts + ')' );     
66
         opt.setAttribute('no',bread.no);
67
         opt.style.borderRadius='5px';
68
         opt.style.border='1px solid transparent';
69
         opt.addEventListener('mouseover',function() {
70
            opt.style.backgroundColor='rgb(255,255,255,0.4)';
71
            opt.style.cursor='pointer';
72
         });
73
         opt.addEventListener('mouseout',function() {
74
            opt.style.backgroundColor='transparent';
75
            opt.style.cursor='auto';
76
         });
77
         opt.style.height = '76px';
78
         opt.style.width = '70px';   
79
         opt.style.verticalAlign='top';
80
         opt.style.textAlign='center';
81
         opt.style.display = 'inline-block';
82
     
83
     
84
         img.src = toast; 
85
         img.id = "" + bread.no;
86
      
87
         opt.appendChild(img);
88
         target.appendChild(opt);
89
     
90
         opt.setAttribute('name','toast');
91
    
92
       
93
         var label = document.createElement('SPAN');
94
         label.style.display    = 'block';
95
         label.style.fontWeight = 'bold';
96
         var node = document.createTextNode('#' + num);
97
         label.appendChild(node);
98
         opt.appendChild(label);
99
        
100
         img.style = "filter: saturate(" + age + "%);";
101
         img.style = "filter: brightness(" + age + "%);";
102
        
103
         opt.onclick = function () { 
104
            var no = bread.no;
105
            return navigate("/qresearch/res/" + no + ".html"); 
106
         };
107
         
108
       
109
          opt.setAttribute('old',false);
110
        }     
111
     };
112
    x.send();
113
114
}
115
116
// every 60 seconds we reload from threads.json
117
function refresh() {
118
   var opts = document.getElementsByName('toast');
119
   
120
   // prune expired breads and append new ones.
121
   if (typeof opts != 'undefined' && opts.length) {
122
      for(var i = 0; i < opts.length; i++) {
123
         if(opts[i].getAttribute('old') == true) {
124
            target.removeChild(opts[i]);
125
            console.log('removed option ' + i)
126
         }
127
         else {
128
            opts[i].setAttribute('old',true);
129
         }
130
      }
131
   }
132
  
133
    var x = new XMLHttpRequest();
134
    x.open('GET', "/qresearch/threads.json", true);  
135
    x.onreadystatechange = function() {
136
        if(x.readyState === 4 && x.status == 200) {
137
           var response = JSON.parse(x.responseText);
138
           find_recent_bread(response);
139
        }  
140
    };
141
    x.send();
142
143
   
144
}
145
function find_recent_bread(board) {
146
147
   var now = ~~((new Date).getTime() / 1000);
148
   var thread;
149
   for(var i = 0; i < board.length; i++) {
150
      for(var j = 0; j < board[i].threads.length; j++) {
151
         thread = board[i].threads[j];
152
         // only show threads modified within the last 2 hours
153
         
154
         if (now - thread.last_modified < 7200) {
155
            make_toast('/qresearch/res/'+thread.no + '.json',
156
                       thread.last_modified);
157
         }
158
         
159
      }   
160
   }
161
}
162
   
163
var target = document.getElementsByName('postcontrols')[0]; 
164
165
// Post controls is loaded and we're already in a thread
166
// append the controls at the top.
167
if (target) {
168
169
   var div = document.createElement('DIV');
170
   div.id  = 'dythreads';
171
   target.appendChild(div);
172
173
   div.style
174
      = 'z-index:2;' 
175
      + 'top:20px;'
176
      + 'padding:1px 3px 0 3px;'
177
      + 'position:fixed;height:1px;width:100%;' 
178
      + 'display:block;' ; 
179
180
   
181
   setInterval("refresh();", 60000);
182
   refresh(); 
183
}