사용자:하늘/common.js

< 사용자:하늘
하늘 (토론 | 기여)님의 2023년 1월 29일 (일) 15:15 판

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

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
// EditTools 커스텀
mw.loader.load('/index.php?title=사용자:하늘/EditTools.js&action=raw&ctype=text/javascript'); mw.loader.load('/index.php?title=사용자:하늘/EditTools-custom.js&action=raw&ctype=text/javascript');
//mw.loader.load('//commons.wikimedia.org/wiki/MediaWiki:Edittools.js?action=raw&ctype=text/javascript');

// 사용자 문서 상태
mw.loader.load('/index.php?title=사용자:하늘/userinfo.js&action=raw&ctype=text/javascript');

// Imagemap 에디터
if (mw.config.get('wgNamespaceNumber') == 6 && mw.config.get('wgAction') == 'view') {
    mw.loader.load('//imagemapedit.toolforge.org/ime.js');
}

//상용구 버튼 추가
mw.loader.load('/index.php?title=사용자:하늘/addbutton.js&action=raw&ctype=text/javascript');

//대용량 이미지 파일 나중에 오픈 스크립트
mw.loader.load('/index.php?title=사용자:하늘/mobile.js&action=raw&ctype=text/javascript');

// 로컬 파일 설명 안 보고 바로 공용으로 넘기기(영어 위키백과, 위키데이터에서 퍼옴)
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-imagelinks.js&action=raw&ctype=text/javascript');

//커스텀 navbar 리버티
mw.loader.load('/index.php?title=사용자:하늘/custom-navbar.js&action=raw&ctype=text/javascript');

//한자 사전 툴
mw.loader.load('/index.php?title=사용자:하늘/hanja-dict-tools.js&action=raw&ctype=text/javascript');

mw.loader.load('/index.php?title=사용자:하늘/addArticleMenuItem.js&action=raw&ctype=text/javascript');
mw.loader.load('/index.php?title=사용자:하늘/addArticleMenuItem-func.js&action=raw&ctype=text/javascript');

//분류 문서에 편집 링크 추가
document.querySelectorAll('.mw-category a:not(.image, .galleryfilename)').forEach(function (link) {
    var catLinksEdit = document.createElement('a');
    catLinksEdit.title = link.title + ' 편집하기';
    catLinksEdit.href = link.href + '?action=edit';
    catLinksEdit.style.paddingLeft = '0.2em';
    catLinksEdit.innerHTML = '편집';
    // 글자 살짝 작게 표시
    catLinksEdit.style.fontSize = '0.9em';
    // 스타일링을 위해 별도의 클래스 추가
    catLinksEdit.classList.add('fw-edit-link');
    link.after(catLinksEdit);
});

//최근 읽은 기록
mw.loader.load('//librewiki.net/index.php?title=사용자:하늘/BreadCrumb.js&action=raw&ctype=text/javascript');

//바로가기 키 추가, 페이지 정보
var pageinfo = document.querySelectorAll('a[href*="action=info"]');
if (pageinfo.length) {
    pageinfo[0].accessKey = 'i';
    pageinfo[0].title += ' [' + pageinfo[0].accessKey + ']';
}

//리버티-타임리스 스킨 전환
mw.loader.load('/index.php?title=사용자:하늘/switchskin.js&action=raw&ctype=text/javascript');

mw.loader.load('/index.php?title=사용자:하늘/addCopyButtonToCode.js&action=raw&ctype=text/javascript');

//코드 편집기 테마 적용.
mw.hook('codeEditor.configure').add(function () {
    const editarea = document.querySelector('.ace_editor');
    const aceInstance = ace.edit(editarea);
    aceInstance.setOptions({
        wrap: false,
        theme: './theme/tomorrow_night',
        enableLiveAutocompletion: true
    });
});
/*** 폰트 설정 ***/
/*var UserAgent = navigator.userAgent;
if (UserAgent.match(/iPhone|iPod|Android|Opera Mini|Opera Mobi|IEMobile/) !== null || UserAgent.match(/LG|SAMSUNG|Samsung/) !== null) {
} else {
    console.log('webfont');*/
/*** 폰트 설정 ***/
/*if (window.getComputedStyle(document.querySelector('body')).fontFamily == "Noto Sans KR") {
    if (document.querySelectorAll('[lang="ja"], [lang="zh"], [lang="zh-hk"], [lang="zh-tw"]').length) {
        var link = document.createElement("link");
        link.href = "https://fonts.googleapis.com", link.rel = "preconnect", document.head.append(link);
        link = document.createElement("link");
        link.href = "https://fonts.gstatic.com", link.rel = "preconnect", link.setAttribute("crossorigin", ""), document.head.append(link);
        
        if (document.querySelectorAll('[lang="ja"]').length) {
            link = document.createElement("link")
            link.href = "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@100;300;400;500;700;900&display=swap";
            link.rel = "stylesheet";
            document.head.append(link)
        }
        if (document.querySelectorAll('[lang="zh"], [lang="zh-cn"]').length) {
            link = document.createElement("link")
            link.href = "https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@100;300;400;500;700;900&display=swap";
            link.rel = "stylesheet";
            document.head.append(link)
        }
        if (document.querySelectorAll('[lang="zh-hk"]').length) {
            link = document.createElement("link")
            link.href = "https://fonts.googleapis.com/css2?family=Noto+Serif+HK:wght@100;300;400;500;700;900&display=swap";
            link.rel = "stylesheet";
            document.head.append(link)
        }
        if (document.querySelectorAll('[lang="zh-tw"]').length) {
            link = document.createElement("link")
            link.href = "https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@100;300;400;500;700;900&display=swap";
            link.rel = "stylesheet";
            document.head.append(link)
        }
    }
}}*/

mw.hook('wikiEditor.toolbarReady').add(function ($textarea) {
    $textarea.wikiEditor('addToToolbar', {
        section: 'main',
        group: 'format',
        tools: {
            "strikethrough": {
                label: '취소선',
                type: 'button',
                oouiIcon: 'strikethrough',
                action: {
                    type: 'encapsulate',
                    options: {
                        pre: "<del>", post: "</del>"
                    }
                }
            }
        }
    });
    $textarea.wikiEditor('addToToolbar', {
        section: 'advanced',
        group: 'format',
        tools: [
            {
                label: '수평선',
                type: 'button',
                oouiIcon: 'subtract',
                action: {
                    type: 'encapsulate',
                    options: {
                        pre: '----',
                        ownline: true
                    }
                }
            },
            {
                label: '인라인 코드 (nowiki)',
                type: 'button',
                oouiIcon: 'code',
                action: {
                    type: 'encapsulate',
                    options: { pre: "<code><nowiki>", post: "</nowiki></code>" }
                }
            },
            {
                label: '인라인 코드',
                type: 'button',
                oouiIcon: 'code',
                action: { type: 'encapsulate', options: { pre: "<code>", post: "</code>" } }
            }
        ]
    });
});

function getRaw(title) {
    var raw;
    $.ajax({
        async: false,
        url: location.origin + mw.util.getUrl(title || mw.title, { action: 'raw' }),
        success: function (data) { raw = data; }
    });
    return raw;
}

var mw_parser_output = document.querySelector('.mw-parser-output');
if (mw_parser_output && mw.config.get('wgPageContentModel') == 'wikitext')
    console.log(mw_parser_output.innerHTML.match('<!\-\-[^\]*\-\->')[0]);

if (location.search.includes('html2wikitext') && mw.config.get('wgAction') == 'edit') {
    mw.hook('ext.CodeMirror').add(function () {
        var codemirrorSwitcher = document.querySelector('[rel="codemirror"] a[role="button"]');
        if (codemirrorSwitcher.getAttribute('aria-pressed') == 'true') {
            codemirrorSwitcher.click();
        }
    });
    document.getElementById('wpTextbox1').addEventListener('paste',
        function (event) {
            var htmlcode = (event.clipboardData || window.clipboardData).getData('text');
            html2wikitext(htmlcode)
        });
}

function html2wikitext(htmlcode) {
    new mw.Api().postWithEditToken({
        "action": "visualeditoredit",
        "uselang": "user",
        "paction": "serialize",
        "page": "사용자:하늘/테스트",//document.title.split(' - ')[0],
        "html": htmlcode,
        "utf8": 1,
        "format": "json",
        "formatversion": "latest"
    }).done(function (json) {
        var generated_wikitext = json.visualeditoredit.content;
        document.getElementById('wpTextbox1').value = generated_wikitext;
    }).catch(function (data) {
        console.log(data);
    });
}

/*mw.hook('wikiEditor.toolbarReady').add(function ($textarea) {
    $textarea.wikiEditor('addToToolbar', {
        section: 'main',
        group: 'insert',
        tools: {
            "markup": {
                label: 'html을 위키텍스트로 변환',
                type: 'button',
                oouiIcon: 'markup',
                action: {
                    type: 'callback',
                    execute: function (context) {
                        console.log(context);
                        html2wikitext(context.$textarea[0].value);
                    }
                }
            }
        }
    });
});*/

mw.loader.getScript('/index.php?title=사용자:하늘/page.js&action=raw&ctype=text/javascript');

/**
 * 리브레 맵스
**/
/* 리브레 맵스에서 편집 버튼 새 창으로 */
if (location.search.includes('curid')) {
    document.querySelector('#ca-edit').onclick = function (e) {
        e.preventDefault();
        window.open(this.href);
    };
}

/* 오픈스트리트맵으로 확인 (잘못된 경우 편집) */
var libremaps_marker = document.querySelector('.libremaps-marker');
if (libremaps_marker) {
	var markerinfo = libremaps_marker.dataset;
	
	var libremaps_marker_link = document.createElement('a'); // Continent, nation ..
	libremaps_marker_link.href = 'https://www.openstreetmap.org/#map=' + (markerinfo.zoom < 8 ? 0 : 5 + markerinfo.zoom) + 
	'/' + markerinfo.lat + '/' + markerinfo.lng;
	libremaps_marker_link.innerText = '오픈스트리트맵 - ' + markerinfo.name;
	libremaps_marker.append(libremaps_marker_link);
}

// 찾아바꾸기 프리셋
mw.hook('wikiEditor.toolbarReady').add(function ($textarea) {
document.querySelector('#wikiEditor-section-advanced .group.group-search a').addEventListener('click', function (e) {
    if (document.querySelector('select[for*=wikieditor-toolbar-replace-preset]')) return;
    var dialog = document.getElementById('wikieditor-toolbar-replace-dialog');
    if (dialog) {
        var toinput = '\
        <select for="wikieditor-toolbar-replace-preset">\
        <option>정규식 프리셋</option>\
        <option data-format="<ref>\\[([^ ]*) ([^\\]]*)\\], ([^,]*), ([0-9]*)\\.([0-9]*)\\.([0-9]*)[^<]*</ref>" data-replace="<ref>{{뉴스 인용|url=$1|제목=$2|뉴스=$3|날짜=$4-$5-$6}}</ref>">[url title], news, date -> {{뉴스 인용}}</option>\
        </select>';

        dialog.innerHTML = toinput + dialog.innerHTML;

        var searchtool_search = document.getElementById('wikieditor-toolbar-replace-search');
        var searchtool_replace = document.getElementById('wikieditor-toolbar-replace-replace');

        document.querySelector('select[for*=wikieditor-toolbar-replace-preset]').addEventListener('change', function (e) {
            data = this.selectedOptions[0].dataset;
            searchtool_search.value = data.format || '';
            searchtool_replace.value = data.replace || '';
        });
    }
});
});