천봉 한글화

천봉 사이트 한글화

// ==UserScript==
// @name         천봉 한글화 
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  천봉 사이트 한글화
// @author       1
// @match        https://tenhou.net/3/*
// @match        https://tenhou.net/0/wg/*
// @match        https://tenhou.net/*make_lobby*
// @icon         https://yt3.googleusercontent.com/J7QbevqvDkLbkI77_6EXxacKeq3SEvAfQ8pnlpyQ5RBzVjDHyMmNQ9UIOYc43nIQ6i5DKDCnCw=s160-c-k-c0x00ffffff-no-rj
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    let lobbyNumber;
    let el = [];
    let pageURL = location.href;



    const firstTransData = {

        "四般東喰赤速": "4일반 동풍탕적속",
        "四般東喰赤光": "4일반 동풍탕적광",
        "四般東喰赤": "4일반 동풍탕적",
        "四般東喰": "4일반 동풍탕",
        "四般東": "4일반 동풍전",
        "四般南喰赤速": "4일반 남풍탕적속",
        "四般南喰赤光": "4일반 남풍탕적광",
        "四般南喰赤": "4일반 남풍탕적",
        "四般南喰": "4일반 남풍탕",
        "四般南": "4일반 남풍전",
        "三般東喰赤速": "3일반 동풍탕적속",
        "三般東喰赤光": "3일반 동풍탕적광",
        "三般東喰赤": "3일반 동풍탕적",
        "三般東喰": "3일반 동풍탕",
        "三般東": "3일반 동풍전",
        "三般南喰赤速": "3일반 남풍탕적속",
        "三般南喰赤光": "3일반 동풍탕적광",
        "三般南喰赤": "3일반 남풍탕적",
        "三般南喰": "3일반 남풍탕",
        "三般南": "3일반 남풍전",
        "四上東喰赤速": "4상탁 동풍탕적속",
        "四上東喰赤光": "4상탁 동풍탕적광",
        "四上東喰赤": "4상탁 동풍탕적",
        "四上東喰": "4상탁 동풍탕",
        "四上東": "4상탁 동풍전",
        "四上南喰赤速": "4상탁 남풍탕적속",
        "四上南喰赤光": "4상탁 남풍탕적광",
        "四上南喰赤": "4상탁 남풍탕적",
        "四上南喰": "4상탁 남풍탕",
        "四上南": "4상탁 남풍전",
        "三上東喰赤速": "3상탁 동풍탕적속",
        "三上東喰赤光": "3상탁 동풍탕적광",
        "三上東喰赤": "3상탁 동풍탕적",
        "三上東喰": "3상탁 동풍탕",
        "三上東": "3상탁 동풍전",
        "三上南喰赤速": "3상탁 남풍탕적속",
        "三上南喰赤光": "3상탁 남풍탕적광",
        "三上南喰赤": "3상탁 남풍탕적",
        "三上南喰": "3상탁 남풍탕",
        "三上南": "3상탁 남풍전",
        "四特東喰赤速": "4특상 동풍탕적속",
        "四特東喰赤光": "4특상 동풍탕적광",
        "四特東喰赤": "4특상 동풍탕적",
        "四特東喰": "4특상 동풍탕",
        "四特東": "4특상 동풍전",
        "四特南喰赤速": "4특상 남풍탕적속",
        "四特南喰赤光": "4특상 남풍탕적광",
        "四特南喰赤": "4특상 남풍탕적",
        "四特南喰": "4특상 남풍탕",
        "四特南": "4특상 남풍전",
        "三特東喰赤速": "3특상 동풍탕적속",
        "三特東喰赤光": "3특상 동풍탕적광",
        "三特東喰赤": "3특상 동풍탕적",
        "三特東喰": "3특상 동풍탕",
        "三特東": "3특상 동풍전",
        "三特南喰赤速": "3특상 남풍탕적속",
        "三特南喰赤光": "3특상 남풍탕적광",
        "三特南喰赤": "3특상 남풍탕적",
        "三特南喰": "3특상 남풍탕",
        "三特南": "3특상 남풍전",
        "四鳳東喰赤速": "4봉황 동풍탕적속",
        "四鳳東喰赤光": "4봉황 동풍탕적광",
        "四鳳東喰赤": "4봉황 동풍탕적",
        "四鳳東喰": "4봉황 동풍탕",
        "四鳳東": "4봉황 동풍전",
        "四鳳南喰赤速": "4봉황 남풍탕적속",
        "四鳳南喰赤光": "4봉황 남풍탕적광",
        "四鳳南喰赤": "4봉황 남풍탕적",
        "四鳳南喰": "4봉황 남풍탕",
        "四鳳南": "4봉황 남풍전",
        "三鳳東喰赤速": "3봉황 동풍탕적속",
        "三鳳東喰赤": "3봉황 동풍탕적",
        "三鳳東喰": "3봉황 동풍탕",
        "三鳳東": "3봉황 동풍전",
        "三鳳南喰赤速": "3봉황 남풍탕적속",
        "三鳳南喰赤": "3봉황 남풍탕적",
        "三鳳南喰": "3봉황 남풍탕",
        "三鳳南": "3봉황 남풍전",
        "四麻雀荘戦": "4마 작장전",
        "三麻雀荘戦": "3마 작장전",
        "三麻":"3마 ",
        "四麻":"4마 ",
        "観戦":"관전",
        "段位戦":"랭킹전",

        "新人": "신인",
        "1級": "1급",
        "1級": "1급",
        "2級": "2급",
        "3級": "3급",
        "4級": "4급",
        "5級": "5급",
        "6級": "6급",
        "7級": "7급",
        "8級": "8급",
        "9級": "9급",
        "10級": "10급",

        "初段": "초단",
        "一段": "1단",
        "二段": "2단",
        "三段": "3단",
        "四段": "4단",
        "五段": "5단",
        "六段": "6단",
        "七段": "7단",
        "八段": "8단",
        "九段": "9단",
        "十段": "10단",

        "鳳凰卓": "봉황탁",
        "特上卓": "특상탁",
        "上級卓": "상급탁",
        "対戦": "대전",

    };

    // 텍스트 교체
    function replaceText(root=document.body){
        const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false);
        let nodes = [];
        while(walker.nextNode()) nodes.push(walker.currentNode);

        for(let node of nodes){
            if(node.parentElement.nodeName === "A"){
                node.parentElement.href = node.parentElement.href.replace("tenhou.net/0/", "tenhou.net/3/");
            }
            for(let key in firstTransData){
                node.nodeValue = node.nodeValue.replace(new RegExp(key,"g"), firstTransData[key]);
            }
        }
    }

    // MutationObserver 설정
    const observer = new MutationObserver((mutations)=>{
        for(let m of mutations){
            if(m.type === "childList" || m.type === "characterData"){
                replaceText(m.target);
            }
        }
    });

    function startObserver(){
        observer.observe(document.body, {childList:true, subtree:true, characterData:true});
    }

    // 로비 페이지 UI
    function E(idx,id,cls,tag,type,parent){
        el[idx] = document.createElement(tag);
        if(id) el[idx].id = id;
        if(cls) el[idx].className = cls;
        if(type) el[idx].type = type;
        parent.appendChild(el[idx]);
    }

    function makePage(){
        let match = document.body.innerText.match(/【天鳳 個室L(\d+)】/);
        if(!match) return;
        lobbyNumber = match[1];
        document.title = "천봉 L"+lobbyNumber;
        document.body.style = "background-color:#A6A6A6;text-align:center;padding-top:40px;";
        document.body.innerHTML = '';

        E(0,'startbtn','btn','button','button',document.body); el[0].innerText = `【생성된 천봉 로비 L${lobbyNumber}】`; document.body.innerHTML+='<br>';
        E(1,'sharebtn','btn','button','button',document.body); el[1].innerText = "【로비 접속 링크 공유】";
        E(3,'copybox','','div','',document.body); el[3].style.display='none'; el[3].innerHTML="클립보드로 복사되었습니다.<br>";
        E(4,'copytext','','textarea','',el[3]); el[4].value='https://tenhou.net/3/?L'+lobbyNumber;
        E(5,'wgbtn','btn','button','button',document.body); el[5].innerText="【관전 링크 공유】";

        window.addEventListener("click",(e)=>{
            if(e.target.id===el[1].id){
                el[4].value='https://tenhou.net/3/?L'+lobbyNumber; el[3].style.display='block'; el[4].select(); document.execCommand("copy");
            }else if(e.target.id===el[0].id){
                location.href='https://tenhou.net/3/?L'+lobbyNumber;
            }else if(e.target.id===el[5].id){
                el[4].value='https://tenhou.net/0/wg/?L'+lobbyNumber; el[3].style.display='block'; el[4].select(); document.execCommand("copy");
            }else{ el[3].style.display='none'; }
        });
    }

    // 관전 페이지
    function wgPage(){
        let ws = document.getElementsByClassName('w');
        for(let w of ws) w.remove();
        document.title="천봉 / 관전";
    }

    // 시작
    function startUp(){
        if(pageURL.includes('make_lobby')) makePage();
        else if(pageURL.includes('/wg/')) wgPage();
        replaceText();
        startObserver();
    }

    // 페이지 로딩 후 실행
    if(document.readyState==="loading"){
        window.addEventListener('DOMContentLoaded', startUp);
    }else{
        startUp();
    }

})();