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 | } |