您需要先安装一个扩展,例如 篡改猴、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