您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A small script to tweak the shoutbox
当前为
- // ==UserScript==
- // @name TorViet Shoutbox Enhancer
- // @namespace http://torviet.com/userdetails.php?id=1662
- // @version 0.5.11
- // @license http://www.wtfpl.net/txt/copying/
- // @homepageURL https://github.com/S-a-l-a-d/TorViet-Shoutbox-Enhancer
- // @supportURL https://github.com/S-a-l-a-d/TorViet-Shoutbox-Enhancer/issues
- // @icon http://torviet.com/pic/salad.png
- // @description A small script to tweak the shoutbox
- // @author Salad
- // @match http://torviet.com/qa.php*
- // @grant none
- // ==/UserScript==
- (function() {
- // First let's get the elements which we will work on.
- var boxHead = document.getElementById('boxHead'),
- marquee = document.getElementsByClassName('marquee')[0],
- sltTheme = document.getElementById('sltTheme'),
- clock = document.getElementById('clock'),
- allWrapper = document.getElementsByClassName('all-wrapper')[0],
- inputSection = document.getElementsByClassName('input-section')[0],
- idQuestion = document.getElementById('idQuestion'),
- navigationPage = document.getElementsByClassName('navigation_page')[0],
- boxQuestion = document.getElementById('boxQuestion'),
- emoGroup = document.getElementById('emogroup'),
- emoGroupDetail = document.getElementsByClassName('emo-group-detail')[0];
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Now remove the unnecessary elements including the box containing new torrents *
- * and football news, the warning, the theme drop-down list and the clock. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- boxHead.parentNode.removeChild(boxHead);
- marquee.parentNode.removeChild(marquee);
- sltTheme.parentNode.removeChild(sltTheme);
- clock.parentNode.removeChild(clock);
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Here we get the window height of the current window size and the height *
- * without the input section and the div holding the navigation. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- var windowHeight = window.innerHeight,
- remainingHeight = inputSection.parentNode.offsetHeight + navigationPage.offsetHeight - 100;
- // Center the wrapper for readability. It's also time to use the defined heights.
- allWrapper.style.cssText = 'background-image: none; margin: auto; height: ' + windowHeight + 'px';
- inputSection.parentNode.style.padding = '0px';
- navigationPage.style.width = 'auto';
- boxQuestion.style.height = windowHeight - remainingHeight + 2 + 'px';
- emoGroupDetail.parentNode.parentNode.style.height =
- emoGroupDetail.parentNode.style.height =
- emoGroupDetail.style.height = windowHeight - remainingHeight + 'px';
- // Override the default emoticons with the frequently used ones.
- emoGroupDetail.innerHTML = getEmoticons(524, 574) + getEmoticons(707) + getEmoticons(200, 234);
- // Add a button to show/hide the emoticon drop-down list.
- var btnToggle = document.createElement('input');
- btnToggle.type = 'button';
- btnToggle.value = 'Toggle';
- btnToggle.onclick = toggleEmoSlt;
- idQuestion.parentNode.appendChild(btnToggle);
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Let's see if the user is using Firefox to add the required keymapping event. *
- * This method is taken from http://stackoverflow.com/questions/9847580/ *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- typeof InstallTrigger !== 'undefined' ?
- document.addEventListener('keypress', keyEvent) : document.addEventListener('keydown', keyEvent);
- // Here comes our own functions.
- function toggleEmoSlt() {
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Found this useful method while I was searching for a way to check *
- * whether an element is visible: *
- * http://stackoverflow.com/questions/19669786/ *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- emoGroup.parentNode.style.display = emoGroup.offsetParent ? 'none' : 'block';
- }
- function getEmoticons(start, end) {
- var emos = '';
- // We won't use a loop if we need only one emoticon.
- if (end === void 0)
- emos = '<div style="height:43px;width:43px;float:left;display:inline-block;margin:1px;"><a style="margin: 0;" class="btuEmotion" alt="[em' + start +
- ']"><img style="max-width: 43px; max-height: 43px" src="/pic/smilies/' + start +
- '.gif" alt=""></a></div>';
- else
- for (var i = start; i <= end; i++)
- emos += '<div style="height:43px;width:43px;float:left;display:inline-block;margin:1px;"><a style="margin: 0;" class="btuEmotion" alt="[em' + i +
- ']"><img style="max-width: 43px; max-height: 43px" src="/pic/smilies/' + i +
- '.gif" alt=""></a></div>';
- return emos;
- }
- function keyEvent(e) {
- switch (e.keyCode) {
- // Down arrow.
- case 40:
- (emoGroup !== document.activeElement) && (emoGroup.selectedIndex !== emoGroup.length - 1) && emoGroup.selectedIndex++;
- changeEmoGroup();
- break;
- // Up arrow.
- case 38:
- (emoGroup !== document.activeElement) && (emoGroup.selectedIndex !== 0) && emoGroup.selectedIndex--;
- changeEmoGroup();
- break;
- // Ctrl.
- case 17:
- // Ctrl + C.
- case 17 && 67:
- break;
- default:
- idQuestion.focus();
- }
- }
- function changeEmoGroup() {
- // Native JavaScript method to send an AJAX request.
- var request = new XMLHttpRequest();
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Asynchronous request sometimes doesn't work properly so we'll make it synchronous. *
- * This process is fast enough so the user won't notice the unresponsive moment *
- * while the browser is sending the request and receiving the response. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- request.open('POST', 'qa_smiley_ajax.php', 0);
- request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- request.onreadystatechange = function() {
- request.readyState == 4 && request.status == 200 &&
- (emoGroupDetail.innerHTML = JSON.parse(request.responseText).str, addEmoGroupEvent())
- };
- request.send('group=' + emoGroup.value);
- }
- function addEmoGroupEvent() {
- // Let's add click events for the newly added emoticons.
- for (var i = 0, emos = emoGroupDetail.childNodes, len = emos.length; i < len; i++)
- emos[i].addEventListener('click', function(e) {
- idQuestion.value += e.target.parentNode.getAttribute('alt');
- idQuestion.focus();
- });
- }
- // The following should run at startup.
- toggleEmoSlt();
- addEmoGroupEvent();
- idQuestion.focus();
- })();