利用者:1108-Kiju/AddCatsort.js

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
/* 
デフォルトソート、カテゴリを 追加するためのスクリプト。HotCatとの併用推奨。
create by 1108-Kiju
*/
var pageTitle = mw.config.get('wgPageName');
var namespaceNumber = mw.config.get('wgNamespaceNumber');

if ([0, 4, 14, 10, 12].includes(namespaceNumber)) {
    var container = $('<div>').css({
        'display': 'none',
        'background-color': '#F0F0F0',
        'padding': '10px',
        'margin': '10px',
        'border': '1px solid #CCC'
    });

    var defaultSortInput = $('<input>').attr('type', 'text').attr('placeholder', 'デフォルトソート');
    var categoryInput = $('<input>').attr('type', 'text').attr('placeholder', 'カテゴリ');
    var summaryInput = $('<input>').attr('type', 'text').attr('placeholder', '要約');

    var editButton = $('<button>').text('保存').click(function() {
        var defaultSortValue = defaultSortInput.val().trim();
        var categoryValue = categoryInput.val().trim();
        var summaryValue = summaryInput.val().trim();
    if (summaryValue === '') {
      summaryValue = 'カテゴリ/デフォルトソートを追加';
    }
        var newText = '';

        if (defaultSortValue !== '') {
            newText += '{{デフォルトソート:' + defaultSortValue + '}}\n';
        }

        if (categoryValue !== '') {
            var categories = categoryValue.split('|');
            var categoryText = categories.map(function(category) {
                return '[[Category:' + category.trim() + ']]';
            }).join('\n');
            newText += categoryText + '\n';
        }

        if (newText !== '') {
            summaryValue += ', using AddCatsort';

            var postData = {
                action: 'edit',
                title: pageTitle,
                token: mw.user.tokens.get('csrfToken'),
                format: 'json',
                summary: summaryValue
            };

            $.get(mw.util.wikiScript('api'), {
                action: 'query',
                prop: 'revisions',
                rvprop: 'content',
                titles: pageTitle,
                format: 'json'
            }).done(function(data) {
                var pages = data.query.pages;
                var page = pages[Object.keys(pages)[0]];
                var content = page.revisions[0]['*'];

                var defaultSortPattern = /\{\{\s*デフォルトソート:[^\}]*\}\}/i;
                if (defaultSortPattern.test(content)) {
                    content = content.replace(defaultSortPattern, newText);
                } else {
                    content += '\n' + newText;
                }

                postData.text = content;

                $.post(mw.util.wikiScript('api'), postData, function(data) {
                    if (data.edit && data.edit.result == 'Success') {
                        alert('追加しました。');
                        location.reload();
                    } else if (data.error) {
                        alert('エラーが発生しました。エラーコードを控え、作成者に連絡してください。: ' + data.error.info);
                    } else {
                        alert('エラーが発生しました。');
                    }
                });
            });
        } else {
            alert('デフォルトソートまたはカテゴリを少なくとも1つ入力してください。');
        }
    });

    var editStartButton = $('<button>').text('フォームを表示').click(function() {
        container.show();
        editStartButton.hide();
        closeButton.show();
    });

    var closeButton = $('<button>').text('閉じる').click(function() {
        container.hide();
        editStartButton.show();
        closeButton.hide();
    });

    container.insertAfter('.firstHeading');
    container.append(defaultSortInput);
    container.append(categoryInput);
    container.append(summaryInput);
    container.append(editButton);
    editStartButton.insertAfter('.firstHeading');
    closeButton.insertAfter('.firstHeading');
    closeButton.hide();
}