您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highlights dubs - Never miss your chance to check em again!
- // ==UserScript==
- // @name [s4s] Enhancer
- // @namespace https://userscripts.org/users/532546
- // @email lefuncssman@mail.com
- // @description Highlights dubs - Never miss your chance to check em again!
- // @include https://boards.4chan.org/*
- // @include http://boards.4chan.org/*
- // @author le fun css man AKA Doctor Worse Than Hitler
- // @version 1.32
- // ==/UserScript==
- // NOTE:
- // This is a copy that works on all 4chan subs. I haven't edited anything but the includes.
- initialize();
- addCSS(); // add the css
- highlightDubs(); // highlight dubs
- changePosts(); // color and replace text
- // if this page is a thread, then we need to periodically check for updates brought in by the auto-update
- //if(document.URL.indexOf("res") != -1)
- //{
- setInterval(function(){checkIfUpdated()}, 5000); // check if the thread is updated every 5 seconds
- //}
- function initialize()
- {
- window.lastNo = 0; // used to make sure we don't check posts twice
- window.lastMessage = 0; // don't want to check texts twice either
- window.replaceLimit = 10; // limits number of times an individual emote can be used
- window.totalLimit = 50; // limits total number of emotes per post. These limits are too prevent errors like "unresponsive script"
- window.posts = getPosts();
- // Replaces ":key:" with the image"
- window.replaceList = {
- doge: 'http://i.imgur.com/5XD1CYW.png',
- kek: 'http://i.imgur.com/lblY5Sn.png',
- checkem: 'http://i.imgur.com/PwAtIwi.png',
- froge: 'http://i.imgur.com/j8uUz62.png',
- lel: 'http://i.imgur.com/1DfcjLb.png',
- thinchin: 'http://i.imgur.com/SwNA28g.png',
- ptree: 'http://i.imgur.com/rUDbkXw.png',
- btree: 'http://i.imgur.com/M2kjuLL.png',
- pktree: 'http://i.imgur.com/GWepwsJ.png',
- rtree: 'http://i.imgur.com/l5fKXY7.png',
- ruse: 'http://i.imgur.com/8XBt7yF.png',
- mot: 'http://i.imgur.com/IfMpxw1.png',
- a: 'http://i.imgur.com/q8hHbwQ.gif',
- b: 'http://i.imgur.com/03xYJTU.gif',
- c: 'http://i.imgur.com/9UxS7ej.gif',
- d: 'http://i.imgur.com/gJezGs5.gif',
- e: 'http://i.imgur.com/J9df7FB.gif',
- f: 'http://i.imgur.com/XgufMCh.gif',
- g: 'http://i.imgur.com/BDKY6vy.gif',
- h: 'http://i.imgur.com/JWRrUUO.gif',
- i: 'http://i.imgur.com/gZLK7Dc.gif',
- j: 'http://i.imgur.com/BiZ3dqk.gif',
- k: 'http://i.imgur.com/15DDVOh.gif',
- l: 'http://i.imgur.com/p0HyNUw.gif',
- m: 'http://i.imgur.com/JX55XPt.gif',
- n: 'http://i.imgur.com/XhUUK36.gif',
- o: 'http://i.imgur.com/04fvVIM.gif',
- p: 'http://i.imgur.com/TlWblXt.gif',
- q: 'http://i.imgur.com/aEGHWjg.gif',
- r: 'http://i.imgur.com/PD6x0Uh.gif',
- s: 'http://i.imgur.com/wirH3pL.gif',
- t: 'http://i.imgur.com/hsKlJrv.gif',
- u: 'http://i.imgur.com/Xpf1VnM.gif',
- v: 'http://i.imgur.com/g3INSef.gif',
- w: 'http://i.imgur.com/cF6pbpj.gif',
- x: 'http://i.imgur.com/UVbdagZ.gif',
- y: 'http://i.imgur.com/2BJaMA3.gif',
- z: 'http://i.imgur.com/itOUZ85.gif',
- }
- }
- function highlightDubs()
- {
- // grabs the elements that contain "No. <postno>"
- var postNum = document.getElementsByClassName("postNum");
- // iterate through all post numbers and check for dubs
- for(var i = window.lastNo; i < postNum.length; i++)
- {
- // get the post number
- var no = postNum[i].children[1].innerHTML;
- // check for dubs, but only if this isn't already highlighted
- if(no.charAt(no.length - 1) == no.charAt(no.length - 2))
- {
- // highlight it
- postNum[i].children[1].className += " dubsHighlight";
- }
- }
- window.lastNo = postNum.length; //last number we checked
- }
- function addCSS()
- {
- var css = document.createElement("style");
- css.type = "text/css";
- css.innerHTML = ".dubsHighlight { background-color: orange;" +
- "padding: 0 1px; }";
- document.head.appendChild(css);
- }
- function getPosts()
- {
- return document.getElementsByClassName("replyContainer").length
- }
- /* function colorText() colors the text in a post based on < > [] {} etc
- * This code is a modification of Chest54's extension
- * http://userscripts.org/scripts/source/177986
- */
- function colorText(postMessage)
- {
- var checkora = postMessage.innerHTML.replace('<span class="fortune"','<br><span class="fortune"').split('<br>');
- for(j = 0; j < checkora.length; j++)
- {
- temp = checkora[j].replace('\n','');
- if(temp.length-temp.lastIndexOf('<') == 4 && temp.indexOf('<') !=-1)
- {
- checkora[j] = '<span style="color:orange">' + checkora[j] + '</span>';
- }
- else if(temp.indexOf('<')==0)
- {
- checkora[j] = '<span style="color:red">' + checkora[j] + '</span>';
- }
- else if(temp.length-temp.lastIndexOf(' ]')== 2 && temp.indexOf(' ]') != -1)
- {
- if(temp.indexOf('[ ') == 0)
- {
- checkora[j] = '<span style="color:blue;font-family:monospace;font-weight:bold">' + checkora[j] + '</span>';
- }
- }
- else if(temp.length-temp.lastIndexOf(' }') == 2 && temp.indexOf(' }') !=-1)
- {
- if(temp.indexOf('{ ') == 0)
- {
- checkora[j] = '<span style="color:purple;font-family:monospace;font-weight:bold">' + checkora[j] + '</span>';
- }
- }
- if(temp.indexOf('[spoiler]') + 1 && temp.indexOf('[/spoiler]'))
- {
- if(temp.indexOf('[spoiler]')<temp.indexOf('[/spoiler]'))
- {
- checkora[j]=checkora[j].replace('[spoiler]','<span class="spoiler">');
- checkora[j]=checkora[j].replace('[/spoiler]','</span>');
- }
- }
- }
- var checkorb = checkora.join('<br>').replace('<br><span class="fortune"','<span class="fortune"');
- postMessage.innerHTML=checkorb;
- }
- // handles post modifcations such as colorText() and replaceText()
- function changePosts()
- {
- var postMessage=document.getElementsByClassName('postMessage'); // get all post messages
- for(i = window.lastMessage; i < postMessage.length; i++)
- {
- colorText(postMessage[i]);
- replaceText(postMessage[i]);
- }
- window.lastMessage = postMessage.length;
- }
- function replaceText(postMessage)
- {
- var totalCount = 0; // count replaced stuff so we don't overdo it
- // replace everything in the replace list
- for(var key in window.replaceList)
- {
- var singleCount = 0;
- while(singleCount < window.replaceLimit && postMessage.innerHTML.indexOf(':'+key+':') != -1)
- {
- singleCount++;
- postMessage.innerHTML = postMessage.innerHTML.replace(':' + key + ':', '<img class="emote" src="' + window.replaceList[key] +
- '" alt="' + key + '" title="' + key + '" />');
- }
- totalCount += singleCount;
- if(totalCount >= window.totalLimit)
- break;
- }
- }
- // supposed to do stuff after a page is updated
- function checkIfUpdated()
- {
- //console.log("checked!");
- // if there are new posts, thread has been updated!
- if(window.posts < getPosts())
- {
- window.posts = getPosts();
- updateCare(); // update stuff!
- }
- }
- // things to do on thread update
- function updateCare()
- {
- highlightDubs(); // highlight new post dubs
- changePosts(); // update posts
- }