livechesscloud Exportable PGN

Exportable PGN

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         livechesscloud Exportable PGN
// @namespace    https://www.twitch.tv/simplevar
// @version      2025-02-28
// @description  Exportable PGN
// @author       SimpleVar
// @match        https://view.livechesscloud.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=livechesscloud.com
// @grant        none
// @run-at       document-end
// @license      Fuckall
// ==/UserScript==

(()=>{
    const text = document.createElement('textarea')
    text.setAttribute('readonly', 1)
    text.innerText = '...'
    text.style.minHeight = '10rem'

    const moves = document.querySelector('app-gv-movelist > app-gv-scroll')
    moves.parentElement.append(text)

    new MutationObserver((mutationList, observer) => {
        text.innerText = moves.innerText
            .replaceAll('♞', 'N')
            .replaceAll('♘', 'N')
            .replaceAll('♝', 'B')
            .replaceAll('♗', 'B')
            .replaceAll('♜', 'R')
            .replaceAll('♖', 'R')
            .replaceAll('♛', 'Q')
            .replaceAll('♕', 'Q')
            .replaceAll('♚', 'K')
            .replaceAll('♔', 'K')
            .replaceAll('\n', ' ')
    }).observe(moves, { childList: true });
})()