사용자:Zhuny/common.js

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/* made by zhuny */
/* 왜 쓰는지 알았다?! */

window.addEventListener("load",function(){
    /* 오른쪽 상단 math태그 버튼 만들기 */
    var textarea = document.getElementById("wpTextbox1");
    if(!textarea) return;

    var div = document.createElement("div");
    div.style.position = "fixed";
    div.style.left = "0px";
    div.style.top = "50px";

    function add_button(value, func){
        var button = document.createElement("input");
        button.type = "button";
        button.classList.add("add_math_zhuny");
        button.value = value;
        button.onclick = func;
        div.appendChild(button);
    }

    add_button("Math", function(){
        var start = textarea.selectionStart, end = textarea.selectionEnd;
        if(start > end){
            start = textarea.selectionEnd;
            end = textarea.selectionStart;
        }
        textarea.value = textarea.value.substring(0,start) + "<math>"+textarea.value.substring(start,end)+"</math>" + textarea.value.substring(end);
        textarea.selectionEnd = textarea.selectionStart = start+6;
        textarea.focus();
    });

    add_button("Translate", function(){
        /* 본문에서 영어 찾기 */
        var re1 = /[a-zA-Z][a-zA-Z0-9' -]{2,}[a-zA-Z0-9]/g;
        /* 페이지에서 영어 번역 가져오기 */
        var re2 = /\|[^-].+\n\|[^-].+/g;
        /* python에서 str.strip() */
        function strip(string){
            return string.replace(/^\s+/,"").replace(/\s+$/,"");
        }

        /* 사용된 영어를 찾아보자 */
        var match = textarea.value.match(re1);
        var first = {};
        for(var i in match){
            match[i] = match[i].toLowerCase()
            first[match[i][0].toUpperCase()] = 0;
        }
        var pages = [];
        for(var ch in first){
            pages.push("리브레 위키:편집지침/수학 용어/"+ch);
        }
        /* 필요한 페이지 로드 */
        $.ajax({
            dateType: "json",
            url: ("/api.php" + 
                  "?action=query&prop=revisions&rvprop=content"+
                  "&format=json&titles="+
                  pages.join('|')),
        }).done(function(elem){
            /* 일단 영어명 -> 한국어명 단어사전 만든 뒤 */
            var word_map = {};
            var pages = elem.query.pages;
            for(var page in pages){
                var content = pages[page].revisions[0]['*'];
                var c_match = content.match(re2);
                for(var i in c_match){
                    var word_m = c_match[i].split('|');
                    var word_e = strip(word_m[1]);
                    var word_k = strip(word_m[2]);
                    word_map[word_e.toLowerCase()] = word_k;
                }
            }
            /* 바꿀 단어 정리하고 바꾸기 */
            var text_body = textarea.value;
            var rep_word_set = {};
            var rep_word_list = [];
            for(var i in match){
                if(word_map[match[i]]){
                    rep_word_set[match[i]] = 0;
                }
            }
            for(var i in rep_word_set)rep_word_list.push(i);
            rep_word_list.sort(function(e1,e2){
                if(e1.length > e2.length) return -1;
                if(e1.length < e2.length) return 1;
                return 0;
            });
            for(var i in rep_word_list){
                var word_e = rep_word_list[i];
                var word_k = word_map[word_e].split(',')[0];
                var word_r = new RegExp(word_e,'ig');
                text_body = text_body.replace(word_r,word_k);
            }
            textarea.value = text_body;
        });
    });

    document.body.appendChild(div);
});