您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Update threads without refreshing
当前为
// ==UserScript== // @name ResetEra Live Thread // @namespace http://madjoki.com // @version 0.4 // @description Update threads without refreshing // @author Madjoki // @match https://www.resetera.com/threads/* // @grant none // ==/UserScript== (function() { 'use strict'; var countNew = 0; var countNewLast = 0; var betweenUpdates = 30; var timeToNextUpdate = betweenUpdates; var timeout; var autoUpdateEnabled = false; var updating = false; var lastUrl = window.location; function updateStatus() { var status = ""; if (updating) status += "Updating"; else if (autoUpdateEnabled) { status += "Next Update In " + timeToNextUpdate + " seconds - "; if (countNewLast > 0) status += countNewLast + " New Messages!"; else status += "No New Messages"; } else status += "Disabled"; $("#livethreadStatus").text(status); } function enableDisable() { if (autoUpdateEnabled) { clearInterval(timeout); autoUpdateEnabled = false; } else { timeout = setInterval(timerTick, 1000); autoUpdateEnabled = true; } updateStatus(); } function timerTick() { timeToNextUpdate--; if (timeToNextUpdate === 0) { updateMessages(); timeToNextUpdate = betweenUpdates; } updateStatus(); } function insertNotifi(text) { var $el = $('<div>', {'class': newMessagesNotice, 'text': text}); $("#messageList").append($el); return $el; } function getCurrentURL() { var pageNav = $('div.PageNav').first(); var current = pageNav.data('page'); var last = pageNav.data('last'); if (current === undefined) return window.location; if (last > current) current++; return pageNav.data('baseurl').replace('{{sentinel}}', current); } function updateMessages() { if (updating) return; updating = true; updateStatus(); countNewLast = 0; var thisUrl = getCurrentURL(); if (thisUrl != lastUrl) { window.history.pushState(null, null, thisUrl); lastUrl = thisUrl; } lastUrl = getCurrentURL(); $.get(lastUrl, function (data) { var node = $($.parseHTML(data)); var newNav = node.find('div.PageNav').first(); $('div.PageNav').each(function (i, el) { $(el).replaceWith(newNav.clone()); }); $('input[name="last_date"]').val(node.find('input[name="last_date"]').val()); $('input[name="last_known_date"]').val(node.find('input[name="last_known_date"]').val()); node.find('#messageList > li').each(function (i, el) { var $el = $(el); var id = $el.attr('id'); var $curr = $('#' + id); if ($curr.length) { //$curr.replaceWith($el); var newMessage = $el.find('article'); var oldMessage = $curr.find('article'); if (newMessage.text() != oldMessage.text() || true) { oldMessage.replaceWith(newMessage).xfActivate(); $curr.xfActivate(); } } else { $el.xfInsert('appendTo', $("#messageList")); countNew++; countNewLast++; } }); }).always(function () { updating = false; updateStatus(); }); } $('.quickReply.message').before('<div class="secondaryContent">\ <div id="livethreadStatus"></div>\ <button id="livethreadAutoUpdate" class="button">Auto Update On/Off</button>\ <button id="livethreadUpdate" class="button">Update</button>\ <select id="updateTime">\ <option value="15">Fast</option>\ <option value="30" selected>Normal</option>\ <option value="60">Slow</option>\ </select>\ </div>'); $('#livethreadAutoUpdate').click(enableDisable); $('#livethreadUpdate').click(updateMessages); $('#updateTime').change(function () { betweenUpdates = parseInt($('#updateTime').val()); if (betweenUpdates < timeToNextUpdate) timeToNextUpdate = betweenUpdates; }); updateStatus(); })();