跳转到内容

User:WiTo7946/Gadget/DraftInserter/main.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
(function () {
    'use strict';
    // --- 在這裡新增或修改 --- //
    var skeletons = {
        'Bird': 'User:WiTo7946/Gadget/DraftInserter/1',
        'Genus': 'User:WiTo7946/Gadget/DraftInserter/2',
    };
    // ------------------------------- //

    var action = mw.config.get('wgAction');
    if (action !== 'edit' && action !== 'submit') return;

    mw.loader.using('mediawiki.api', function () {
        var api = new mw.Api();
        // 決定要加在哪個 portlet
        var area;
        switch (mw.config.get('skin')) {
            case 'vector2022':
                area = 'mw-editTools'; break;
            case 'minerva':
                area = 'p-tb'; break;
            default:
                area = 'p-views'; break;
        }
        // 新增連結
        mw.util.addPortletLink(
            area,
            '#',
            '插入草稿',
            'ca-insertskel',
            '在編輯框插入選定的草稿'
        );
        $('#ca-insertskel').on('click', function (e) {
            e.preventDefault();
            var keys = Object.keys(skeletons);
            var list = keys.map(function (k, i) { return (i + 1) + '. ' + k; }).join('\n');
            var idx = prompt('請輸入要插入的草稿編號:\n' + list);
            var num = parseInt(idx, 10);
            if (!num || num < 1 || num > keys.length) {
                alert('無效的編號,操作已取消');
                return;
            }
            var pageTitle = skeletons[keys[num - 1]];
            var $txt = $('#wpTextbox1');
            if (!$txt.length) {
                alert('找不到編輯框'); return;
            }
            if ($txt.val().length > 0 && !confirm('編輯框已有內容,確定要插入?')) return;
            api.get({ action: 'query', prop: 'revisions', rvprop: 'content', titles: pageTitle })
                .done(function (data) {
                    var pages = data.query.pages, content = '';
                    Object.values(pages).forEach(function (p) {
                        if (p.revisions) content = p.revisions[0]['*'];
                    });
                    insertAtCursor($txt[0], content);
                })
                .fail(function () { alert('無法取得內容'); });
        });

        function insertAtCursor(textarea, text) {
            var scroll = textarea.scrollTop;
            var start = textarea.selectionStart;
            var end = textarea.selectionEnd;
            textarea.value = textarea.value.slice(0, start) + text + textarea.value.slice(end);
            textarea.selectionStart = textarea.selectionEnd = start + text.length;
            textarea.focus(); textarea.scrollTop = scroll;
        }
    });
})();