사용자:LiteHell2/keybaseInEmail.js

< 사용자:LiteHell2
LiteHell2 (토론 | 기여)님의 2015년 9월 13일 (일) 23:19 판

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

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
if (mw.config.get('wgPageName') == "특수:이메일보내기") {
    (function() {
        if (document.querySelector('p.error')) return;

        // Keybase id 입력 칸과 체크박스 추가
        mw.loader.load("jquery.ui.autocomplete")

        // id 입력칸
        var keybaseIdRow = document.createElement("tr");
        keybaseIdRow.className = "mw-htmlform-field-HTMLTextField";
        keybaseIdRow.innerHTML = '<td class="mw-label"><label for="input-keybase-id">Keybase 아이디</label></td><td class="mw-input"><input id="input-keybase-id" maxlength="100" title="암호화에 사용할 Keybase Id"></input></td>';
        document.querySelector('table tbody').insertBefore(keybaseIdRow, document.querySelector('table tr.mw-htmlform-field-HTMLTextAreaField'));

        // id 입력칸 자동입력
        $(keybaseIdRow.querySelector('input')).autocomplete({
            source: function(acreq, acres) {
                var req = new XMLHttpRequest();
                req.open('GET', 'https://keybase.io/_/api/1.0/user/lookup.json?user=' + encodeURIComponent(acreq.term));
                req.onreadystatechange = function(evt) {
                        if (req.readyState == 4 && req.status == 200) {
                            var obj = JSON.parse(req.responseText);
                            if (obj.status.code == 0) {
                                var result = [];
                                for (var i = 0; i < obj.them.length; i++) {
                                    result.push(obj.them[i].basics.username);
                                }
                                acres(result);
                            } // end of if (obj.status.code == .....
                        } // end of if (req.readyState == .....
                    } // end of onreadystatechanged handler
                req.send(null);
            }
        });

        // 체크박스
        var encryptWithKeybase = document.createElement("tr");
        encryptWithKeybase.className = "mw-htmlform-field-HTMLCheckField";
        encryptWithKeybase.innerHTML = '<td class="mw-label"><label></label></td><td class="mw-input"><input id="input-encrypt-with-gpg" type="checkbox" value="0"></input> <label for="input-encrypt-with-gpg">Keybase id로 얻은 공개키로 GPG 암호화</label></td>';
        document.querySelector('.mw-htmlform-field-HTMLCheckField').parentNode.insertBefore(encryptWithKeybase, document.querySelector('.mw-htmlform-field-HTMLCheckField'));

        // 이벤트 핸들러 추가
        document.querySelector('form.visualClear').addEventListener('submit', function() {
            if (encryptWithKeybase.querySelector('input').checked) {
                if (keybaseIdRow.querySelector('input').value.trim().length == 0) {
                    alert('Keybase Id를 입력해주세요.');
                    return false;
                }
                // 디버그용
                alert('!');
            }
            return true;
        });

    })();
}