您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Notify Kanban in your turn
// ==UserScript== // @name Kanban Your turn Notifier // @namespace tequila_j-script // @version 0.4.2 // @description Notify Kanban in your turn // @match http://*.boiteajeux.net/jeux/kan/* // @match https://*.boiteajeux.net/jeux/kan/* // @match http://www.boiteajeux.net/jeux/kan/* // @match https://www.boiteajeux.net/jeux/kan/* // @grant GM_addStyle // @run-at document-idle // ==/UserScript== // request permission on page load document.addEventListener('DOMContentLoaded', function () { if (Notification.permission !== "granted") Notification.requestPermission(); }); (function() { 'use strict'; /*jshint multistr: true */ var honkSound = new Audio("http://www.soundjay.com/transportation/car-locked-honk-1.mp3"); window.setCheckTurn = function(callbackFunc, timing) { var variableInterval = { config: timing, callback: callbackFunc, stopped: false, runLoop: function() { if (variableInterval.stopped) return; var result = variableInterval.callback.call(variableInterval); if (typeof result == 'number') { if (result === 0) return; variableInterval.interval = result; }; variableInterval.loop(); }, stop: function() { this.stopped = true; console.log("Auto refresh stopped"); window.clearTimeout(this.timeout); }, start: function() { this.stopped = false; console.log("Auto refresh started"); return this.loop(); }, loop: function() { this.timeout = window.setTimeout(this.runLoop, this.getInterval()); return this; }, incrementInterval: function() { var alic = this.getInterval() + this.config.step; if (alic > this.config.max) { this.setInterval(this.config.max) console.log("Interval already set to maximum:" + this.getInterval()); } else { this.setInterval(this.getInterval() + this.config.step); console.log("Interval increased to:" + this.getInterval()); } return this; }, resetInterval: function() { this.setInterval(this.config.start) console.log("Interval reset to:" + this.getInterval()); }, getInterval: function() { if (sessionStorage.getItem("currentTime") === null) { sessionStorage.setItem("currentTime", this.config.start); } return Number(sessionStorage.getItem("currentTime")); }, setInterval: function(val) { sessionStorage.setItem("currentTime", val); } } return variableInterval; }; var notificationTimeout = { start: 10000, max: 60000, step: 3000, current: 10000 }; var gameName = $("#dvBandeauHaut > div:first > div.clTexteFort:nth-child(2)").html(); function notify(message) { if (!Notification) { console.log('Desktop notifications are not available for your browser.'); return; } if (Notification.permission !== "granted") Notification.requestPermission(); else { var notification = new Notification(gameName + ': your turn!', { icon: 'http://www.boiteajeux.net/jeux/kan/img/sandra_1.png', body: message, requireInteraction: true }); notification.onclick = function () { window.focus(); }; } honkSound.play(); } var isMyTurn = function() { var message = $('#dvMessage').html(); return ! message.startsWith("Still twiddling your thumbs"); } var turnNotifier = setCheckTurn(function() { actualiserPage(); }, notificationTimeout ) function startNotification() { turnNotifier.resetInterval(); turnNotifier.start(); } //override function so notification can start again when they are clicked var proxied_finalizeActions = finalizeActions finalizeActions = function() { turnNotifier.stop(); proxied_finalizeActions.apply(this, arguments); startNotification(); } var proxied_refreshDisplay = refreshDisplay; refreshDisplay = function() { proxied_refreshDisplay.apply( this, arguments ); console.log("Display refreshed"); if (isMyTurn()) { var message = $('#dvMessage').html(); notify(message); turnNotifier.stop(); console.log("Auto refresh stop"); } else { turnNotifier.incrementInterval(); } } var proxied_passer = passer; passer = function() { turnNotifier.stop(); var result = proxied_passer.apply( this, arguments ); startNotification(); } var proxied_actualiserPage = actualiserPage; actualiserPage = function() { turnNotifier.stop(); var result = proxied_actualiserPage.apply( this, arguments); turnNotifier.start(); } var proxied_faire = faire; faire = function() { var result = proxied_faire.apply( this, arguments ); //if (arguments[0] == "moveWorker" || arguments[0] == "perfGoal" || arguments[0] == "nextperfgoal" || arguments[0] == "selectDesignInit" || arguments[0] == "selectPosCertifInit") // selectPosCertifInit does not work. It is used by any cert if (arguments[0] == "moveWorker" || arguments[0] == "perfGoal" || arguments[0] == "nextperfgoal" || arguments[0] == "selectDesignInit" ) startNotification(); return result; }; startNotification(); })() //end of script
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址