返回首頁 

ku10 Enhance

ku10.com增强:课程倒放、跳转Gomocalc分析


Install this script?
/* eslint-disable no-multi-spaces */// ==UserScript==// @name               ku10 Enhance// @namespace          PY-DNG userscripts// @version            0.2.1// @description        ku10.com增强:课程倒放、跳转Gomocalc分析// @description:en     try to take over the world!// @author             PY-DNG// @license            GPL-3.0-or-later// @match              *://ku10.com/// @match              *://ku10.com/#*// @require            https://greasyfork.org/scripts/456034-basic-functions-for-userscripts/code/script.js?version=1226884// @icon               data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABZVJREFUWEfFl11sU2UYx//tadfTD0Y/xrawsW7EkQAmTKDMAF7gDQrCilyhu5E7WBBGohgMN1wRNZggXpDInSYmKgaV4QJKIpGLcYWDBJCBrpO1p5/n9JzT89XWPG9tWRlL2LrE56ZNe/o+v/f5+D9PbeVyuYz/0WxzARQtC6VSGXk5j3K5hGKxxDDtdg5u3oWmJhecTc6G0ecEEAQBeUnCr9euIZNOY3p6Gh6vD37/UvT19aG3txftbe1we9wNQcwCUGQZv9+4gTu3bmFqchKiJEEpFJDLiUjnsiwSuq5jzerV6OjswEeffAwn51gwRB1AQS1AEBIYuTyCRw8eQIgn2MEFApDymJp+DEVRkUqlEA53obWlBV+cP4/W1lYsaW5eEEQdwL2793B7fBxff/UlOsJhBEMhcHYbJDGPTFLA/YcPIUl5JAQBuVyOgQ0dHMKWLZux7619jQN89823GBsbw3RsEh1dXQi0tLBDZUlEOlEByOREVg+ynIem6Vi7Zg1e37EDR44cZpGYr9VF4NPTp3H9t+sILm3G8hWdCARD7Ly8KCItCLj75wNkJRFTU/9AVVUYhsG+37v3TZw4cQKrVq2ar3/UARw//iFGR0cRXr4coVAIPp8PdhugKAqyuRxij6chyTLi8TgMQ4dlFZnDl/v7Ed0TxYGhg/MuyDqAY++9j0uXL6OjvR3+5iVwu92w2exQVQWSrCAuJKCoKpLJFIpFiwHY7XZsikQQHRjAgUNDjQEcOXwYP/50CYFgAF63G03OitAYpslaMZvJssKj/JNIlUolBhDZuBHRgd04+O6hxgCGh4dx4cL3ME2T3Z7nXew99b5lWdC0AgzDZJ+REQDZGzt34ujRYUQim8A5uHnVQV0KTp48iYsXf8DExAQ8Hg+cTmfNGYWcnNNr9fbkye/3Y/euXTj2wTH09PTMyzk9XAdw8+YYrl79BVSMLhfpfSUF5PBpow6gSAwOvo1Xt23DO/v3z9v5LADS/zu3b+PUqVO4e+8+6/e5LBDww+dbgs/PnsGKri6sXfti7dEi644KNMHbqZVge2Z6Zs2CWCyGs2c+w8+jo/hjfLx2KMc9yW2xWMTKlSvR1tqGK1dG4XA64HLxYBPUBhRLZZRNi/3WskxWqA6HAy6en3WfZ05DusGjv/5GKpXEuXPnoGkaaEjxPI9gMMhC3rf+JfR099RGcrlUcWizVwaTaZiscAtagb3SAKO0unm+bm7MOY7JYUHTMTJyif3Y0A00uZoQ9AewMRJBMBiAx+NlYX3a+UwAtaDAMCodBNjB8260LgvV0jEnwPNWVNX5zNvPBZDOyKBUruhsQ8DvZxANA1CoKcdP9z99TnJNykkRJAETMzmWDhtnw7p1fWyZaQiAaoUOJICZ6xkVI2kGFaCsqGxqapqKXDoLyzRQMA1s2bwZXp9v4QAUessqs9w6HE5W5VUjKHKuGybEXJZJOU1P9t4wkJcVvLZ9OyvGBUeAbk9STCsb9blzBoDJqt5gENlslgkWgdKOSR0l5WXsiUYXByCVzoIkguPsbHJWZLr4X+foyIoiLMOoDTFNNyDn8xiIRllLLzgCFG5Kw8TDSXAcKd0Tq9xYq0xROc+ioWsFxBMCey###jdeA1V3tB2ZpsEcVo2qn3JNNUDrHAHJsopkKsmmbH9/P3pf6G28C8hhJpOBKIpMNe2UgnIJpm5A0zVQLdASSy2oKDJb7YOBAAYHB+Hx8Ew1G0pB9ca0zscTccRikyioKnOoazp0k4oww2qDbMOG9ejs6ES4u7sWrUUBoI4QJRGP2NouVTZm6gLTgqzIcHAck+Ctr2xlEaD+r9qiAFQPI/Wj/5KJRBI6pcDU0dKyDF6vFwF/4Jn/JRcVgECq+kBiREYCRTrBzdCJmR2z6ADPO8Sqz/0Lvpyizp/5G68AAAAASUVORK5CYII=// @grant              none// ==/UserScript==/* global LogLevel DoLog Err $ $All $CrE $AEL $$CrE addStyle detectDom destroyEvent copyProp copyProps parseArgs escJsStr replaceText getUrlArgv dl_browser dl_GM AsyncManager *//* global record_player */(function __MAIN__() {'use strict';$('#play_control>.buttons').insertAdjacentElement('afterbegin', $$CrE({tagName: 'div',props: { innerText: '<' },classes: ['button'],listeners: [['click', e => record_player.back()]]}));record_player.jumpto = function(i) {const obj = this;const list = $('#chat_content');if (i < obj.pointer) {// Remove 'future' messagesfor (let j = obj.pointer; j > i; j--) {const noMsgActions = ['BACK', 'RESET', 'FIRST', 'NEXT', 'LOAD', 'LAST', 'GOTO'];if (!noMsgActions.includes(obj.record[j-1].action)) {while ($(list.children[list.children.length-1], '.chat-sys')) {list.children[list.children.length-1].remove();}list.children[list.children.length-1].remove();}}// Reload boardconst boardStatus = calcBoard(i);obj.boardHandler.load(boardStatus.game);obj.boardHandler.endgame = boardStatus.endgame;obj.pointer = i;} else {// Load history messagesfor (let j = obj.pointer; j < i; j++) {obj.play();}}}record_player.back = function() {record_player.pointer > 0 ? record_player.jumpto(record_player.pointer-1) : record_player.sysMsg('已经是第一条了');}// Analyze in gomocalc$AEL($('.controlbar>button'), 'click', function(e) {if (e.target.matches('.controlbar>button:first-child')) {record_player.pause();const gomocalcStr = ku10ToGomocalc(record_player.boardHandler.currgame);window.open(`https://gomocalc.com/#/${gomocalcStr}`, 'analyze');e.stopImmediatePropagation();}}, { capture: true });// No selections in buttonsaddStyle('.button {user-select: none;}');function calcBoard(i) {let game = '', endgame = '';for (let j = 0; j < i; j++) {const record = record_player.record[j];switch (record.action) {case 'MOVE': {game += record.content;if (endgame.substring(0, game.length) !== game) {endgame = game;}break;}case 'BACK': {game = game.substring(0, game.length-2);break;}case 'RESET': {game = endgame = '';break;}case 'FIRST': {game = endgame.substring(0, 2);break;}case 'NEXT': {game = endgame.substring(0, game.length+2);break;}case 'LOAD': {game = endgame = record.content;break;}case 'LAST': {game = endgame;break;}case 'GOTO': {while (game.length > record.content * 2) {game = game.substring(0, game.length-2);}while (game.length < record.content * 2) {game = endgame.substring(0, game.length+2);}break;}}}return {game, endgame};}function ku10ToGomocalc(ku10) {const xConvert = numStr => 'abcdefghijklmno'.charAt(parseInt(numStr, 16) - 1);const yConvert = numStr => ('123456789abcdef'.indexOf(numStr) + 1).toString();let gomocalc = '';for (let i = 0; i < ku10.length; i = i + 2) {const [x, y] = [ku10.charAt(i), ku10.charAt(i+1)];gomocalc += xConvert(x) + yConvert(y);}return gomocalc;}})();