コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Syunsyunminmin/script/AFDstarter.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

// <nowiki>
var pageid = mw.config.get('wgArticleId');
var nsNum = mw.config.get('wgNamespaceNumber');
var pageName = mw.config.get('wgPageName');
var contentModel = mw.config.get('wgPageContentModel');
var api = new mw.Api();
var ad = ' ([[User:Syunsyunminmin/script/AFDstarter|AFDstarter]])';

if (pageid != 0 && (nsNum != -1 || nsNum != 2 || nsNum != 3) && (contentModel == 'wikitext' || contentModel == 'Scribunto')) {
  var link = mw.util.addPortletLink("p-cactions", "#", '削除依頼', "ca-afd-start", '削除依頼を開始する');
  $(link).click(function (e) {
    e.preventDefault();

    var content = document.createElement('div');
    content.setAttribute('id', 'afdstarter');


    // 検索ボックス
    var findSources = document.createElement('div');

    var findSourcesBox = document.createElement('div');
    findSourcesBox.setAttribute('id', 'findsources');
    findSourcesBox.textContent = '記事名前空間の場合は、しばらくすると出典検索リンクが表示されます。';
    findSources.appendChild(findSourcesBox);


    // ページ名を隠すのかのチェックボックス
    var hideTitleCheckBox = document.createElement('div');

    var ifHideTitle = document.createElement('input');
    ifHideTitle.setAttribute('type', 'checkbox');
    ifHideTitle.setAttribute('id', 'hidetitle');
    ifHideTitle.setAttribute('name', 'hidetitle');
    hideTitleCheckBox.appendChild(ifHideTitle);

    var hideTitleLabel = document.createElement('label');
    hideTitleLabel.setAttribute('for', 'hidetitle');
    hideTitleLabel.textContent = 'ページ名を隠す。選択した場合代わりにページIDで作成されます。';
    hideTitleCheckBox.appendChild(hideTitleLabel);


    // <noinclude>を追加するか
    var noincludeCheckBox = document.createElement('div');

    var noincludeTitle = document.createElement('input');
    noincludeTitle.setAttribute('type', 'checkbox');
    noincludeTitle.setAttribute('id', 'noinclude');
    noincludeTitle.setAttribute('name', 'noinclude');
    noincludeCheckBox.appendChild(noincludeTitle);

    var noincludeLabel = document.createElement('label');
    noincludeLabel.setAttribute('for', 'noinclude');
    noincludeLabel.textContent = '<noinclude>タグを追加する。モジュールの場合は/docページに削除依頼タグを貼り付けるので無効となります。';
    noincludeCheckBox.appendChild(noincludeLabel);


    // 著作権侵害か
    var copyrightsCheckBox = document.createElement('div');

    var copyrightsTitle = document.createElement('input');
    copyrightsTitle.setAttribute('type', 'checkbox');
    copyrightsTitle.setAttribute('id', 'copyrights');
    copyrightsTitle.setAttribute('name', 'copyrights');
    copyrightsCheckBox.appendChild(copyrightsTitle);

    var copyrightsLabel = document.createElement('label');
    copyrightsLabel.setAttribute('for', 'copyrights');
    copyrightsLabel.textContent = '著作権侵害';
    copyrightsCheckBox.appendChild(copyrightsLabel);


    // 特記号入力
    var markCheck = document.createElement('div');

    var markCheckLabel = document.createElement('label');
    markCheckLabel.setAttribute('for', 'mark');
    markCheckLabel.textContent = '特記号を必要があれば選択してください';
    markCheck.appendChild(markCheckLabel);
    markCheck.appendChild(document.createElement('br'));

    var markCheckBox = document.createElement('div');
    markCheckBox.setAttribute('style', 'display: inline-block');
    markCheckBox.setAttribute('id', 'mark');
    markCheckBox.setAttribute('name', 'mark');

    var right = document.createElement('span');

      var rightBox = document.createElement('input');
      rightBox.setAttribute('type', 'checkbox');
      rightBox.setAttribute('id', 'right');
      rightBox.setAttribute('name', 'right');
      right.appendChild(rightBox);

      var rightLabel = document.createElement('label');
      rightLabel.setAttribute('for', 'right');
      rightLabel.textContent = '権利侵害';
      right.appendChild(rightLabel);

      markCheckBox.appendChild(right);

    var emergency = document.createElement('span');

      var emergencyBox = document.createElement('input');
      emergencyBox.setAttribute('type', 'checkbox');
      emergencyBox.setAttribute('id', 'emergency');
      emergencyBox.setAttribute('name', 'emergency');
      emergency.appendChild(emergencyBox);

      var emergencyLabel = document.createElement('label');
      emergencyLabel.setAttribute('for', 'emergency');
      emergencyLabel.textContent = '緊急案件';
      emergency.appendChild(emergencyLabel);

      markCheckBox.appendChild(emergency);

    var revision = document.createElement('span');

      var revisionBox = document.createElement('input');
      revisionBox.setAttribute('type', 'checkbox');
      revisionBox.setAttribute('id', 'revision');
      revisionBox.setAttribute('name', 'revision');
      revision.appendChild(revisionBox);

      var revisionLabel = document.createElement('label');
      revisionLabel.setAttribute('for', 'revision');
      revisionLabel.textContent = '版指定削除';
      revision.appendChild(revisionLabel);

      markCheckBox.appendChild(revision);

    markCheck.appendChild(markCheckBox);


    //要約欄にコメント追加
    var summarycmt = document.createElement('div');

    var summarycmtLabel = document.createElement('label');
    summarycmtLabel.setAttribute('for', 'comment');
    summarycmtLabel.textContent = '要約欄にコメントを追加する。(履歴補遺など)';
    summarycmt.appendChild(summarycmtLabel);

    summarycmt.appendChild(document.createElement('br'));

    var summarycmtBox = document.createElement('input');
    summarycmtBox.setAttribute('type', 'text');
    summarycmtBox.setAttribute('style', 'width: 80%');
    summarycmtBox.setAttribute('id', 'comment');
    summarycmtBox.setAttribute('name', 'comment');
    summarycmt.appendChild(summarycmtBox);



    // 依頼者票入力
    var reqerVote = document.createElement('div');

    var reqerVoteLabel = document.createElement('label');
    reqerVoteLabel.setAttribute('for', 'reqvote');
    reqerVoteLabel.textContent = '依頼者票';
    reqerVote.appendChild(reqerVoteLabel);
    reqerVote.appendChild(document.createElement('br'));

    var reqerVoteSelect = document.createElement('select');
    reqerVoteSelect.setAttribute('id', 'reqvote');
    reqerVoteSelect.setAttribute('name', 'reqvote');

      var defaultoption = document.createElement('option');
      defaultoption.setAttribute('disabled', true);
      defaultoption.setAttribute('selected', true);
      defaultoption.textContent = '依頼者票を選択してください';
      reqerVoteSelect.appendChild(defaultoption);

      var option1 = document.createElement('option');
      option1.setAttribute('value', 'vd');
      option1.textContent = '削除';
      reqerVoteSelect.appendChild(option1);

      var option2 = document.createElement('option');
      option2.setAttribute('value', 'vrvd');
      option2.textContent = '版指定削除';
      reqerVoteSelect.appendChild(option2);

      var option3 = document.createElement('option');
      option3.setAttribute('value', 'ved');
      option3.textContent = '緊急削除';
      reqerVoteSelect.appendChild(option3);

      var option4 = document.createElement('option');
      option4.setAttribute('value', 'vervd');
      option4.textContent = '緊急版指定削除';
      reqerVoteSelect.appendChild(option4);

      var option5 = document.createElement('option');
      option5.setAttribute('value', 'srvd');
      option5.textContent = '特定版削除(非推奨)';
      reqerVoteSelect.appendChild(option5);

    reqerVote.appendChild(reqerVoteSelect);


    //理由入力欄
    var inputReason = document.createElement('div');

    var reasonLabel = document.createElement('label');
    reasonLabel.setAttribute('for', 'reason');
    reasonLabel.textContent = '削除理由';
    inputReason.appendChild(reasonLabel);

    var reasonArea = document.createElement('textarea');
    reasonArea.setAttribute('id', 'reason');
    reasonArea.setAttribute('name', 'reason');
    reasonArea.setAttribute('rows', '5');
    reasonArea.setAttribute('cols', '40');
    inputReason.appendChild(reasonArea);


    // 入力欄追加
    content.appendChild(findSources);
    content.appendChild(document.createElement('hr'));
    content.appendChild(hideTitleCheckBox);
    content.appendChild(noincludeCheckBox);
    content.appendChild(copyrightsCheckBox);
    content.appendChild(document.createElement('hr'));
    content.appendChild(summarycmt);
    content.appendChild(document.createElement('hr'));
    content.appendChild(markCheck);
    content.appendChild(document.createElement('hr'));
    content.appendChild(reqerVote);
    content.appendChild(document.createElement('hr'));
    content.appendChild(inputReason);

    document.body.appendChild(content);
    $( '#afdstarter' ).dialog({
      title:"削除依頼の開始",
      width: 500,
      buttons: {
        "プレビュー": function() {
          $('#drpreview').remove();
          subpage(true);
        },
        "提出": function() {subpage(false);}
      }
    });
    findSourcesLinks();
  });
}

function subpage (preview) {
  //タイトル表示の有無
  var isHideTitle = false;
  var page = pageName;
  if (document.getElementById('hidetitle').checked == true) {
    isHideTitle = true;
    page = pageid;
  }

  //理由取得
  var reason = document.getElementById("reason").value;

  //依頼者票取得
  var vote = document.getElementById("reqvote").value;

  //処理
  var temp = '{{subst:新規削除依頼サブページ' + '|理由=' + reason + '--~~~~';
  if (isHideTitle == true) {
    temp += '|ID=' + page;
  } else {
    temp += '|ページ名=' + page;
  }

  var mark = '|特記号=';
  if (document.getElementById('right').checked) {
    mark += '*';
  }
  if (document.getElementById('emergency').checked) {
    mark += '緊';
  }
  if (document.getElementById('revision').checked) {
    mark += '特';
  }
  temp += mark;
  switch (vote) {
    case 'vd':
      temp += '|依頼者票={{AFD|削除}} 依頼者票。--~~~~';
      break;

    case 'vrvd':
      temp += '|依頼者票={{AFD|版指定削除}} 依頼者票。--~~~~';
      break;

    case 'ved':
      temp += '|依頼者票={{AFD|緊急削除}} 依頼者票。--~~~~';
      break;

    case 'vervd':
      temp += '|依頼者票={{AFD|緊急版指定削除}} 依頼者票。--~~~~';
      break;

    case 'srvd':
      temp += '|依頼者票={{AFD|特定版削除}} 依頼者票。--~~~~';
      break;

    default:

  }
  temp += '}}';
  if (preview == true) {


    var params = {
      action: 'parse',
      title: 'Wikipedia:削除依頼/' + pageName,
      text: temp,
      prop: 'text',
      pst: true,
      disablelimitreport: true,
      contentmodel: 'wikitext',
      formatversion: '2'
    };
    api.get( params ).done( function ( data ) {
      var parsecont = data.parse.text;
      var prePage = document.createElement('div');
      prePage.setAttribute('id', 'drpreview');
      prePage.setAttribute('style', 'background-color: white');
      prePage.setAttribute('style', 'border:solid 1px black');
      prePage.innerHTML = parsecont;
      document.body.appendChild(prePage);

      $('#drpreview').dialog({
        title: "プレビュー",
        width: 600,
        close: function(event) {
          $(this).dialog('destroy');
        }
      });
    });
    return;
  } else {
    if (reason == '') {
      window.alert('削除理由を入力してください。');
    }
    //サブページ名生成
    var title = page;
    if (isHideTitle == true) {
      title = 'ページID ' + page;
    }
    title = 'Wikipedia:削除依頼/' + title;
    var time = new Date();
    //要約欄
    var summary = '[[' + pageName + ']]';
    if (isHideTitle == true) {
      summary = '[[Special:Redirect/page/' + pageid + '|ページID ' + pageid +']]';
    }
    summary += 'に対する削除依頼を開始' + ad;

    // 削除依頼タグ貼り付け処理
    if (contentModel != 'wikitext') {
      targetPageName = pageName + '/doc';
    } else {
      targetPageName = pageName;
    }
    var targetparams = {
      action: "query",
      format: "json",
      prop: "revisions",
      titles: targetPageName,
      formatversion: "2",
      rvprop: "content",
      rvslots: "main"
    };
    api.get( targetparams ).done( function ( targetdata ) {
      var targetpage = targetdata.query.pages,t;
      var tagReg = new RegExp('\\{\\{Sakujo\\/本体\\|');
      var tagReg2 = new RegExp('\\{\\{Sakujo\\/本体\\|' + time.getFullYear() + '年' + (time.getMonth()+1) + '月' + time.getDate() +'日\\|([^\\}]*)\\}\\}');
      for (t in targetpage) {
        if ('missing' in targetpage[t] === false) {
          var pagecontent = targetpage[t].revisions[t].slots.main.content; //対象ページの内容

          if (tagReg.test(pagecontent) && tagReg2.test(pagecontent)) {
            var chckAfdtag = pagecontent.match(tagReg2);
            showmsg ('本日既に削除依頼が提出されています。', true, 'Wikipedia:削除依頼/' + chckAfdtag[1].replace(/[\s\S]*\|(.*)$/, '$1'));
            return;
          }
        }
        // サブページ作成

        var subparams = {
          action: 'query',
          format: 'json',
          titles: title,
          prop: 'info'
        };
        api.get( subparams ).done( function ( subdata ) {
          var pages = subdata.query.pages, p;
          for (p in pages) {
            if ('missing' in pages[p]) {

              //ページに削除依頼タグ追加
              addTag(targetPageName, title);
              var editparams = {
                action: 'edit',
                title: title,
                text: temp,
                createonly: true,
                summary: summary,
                format: 'json'
              };
              api.postWithToken( 'csrf', editparams ).done( function ( editdata ) {
                if ( editdata.error && editdata.error.info ) {
                  showmsg('削除依頼サブページ作成中にエラーが発生しました: ' + editdata.error.info, true);
                } else {
                  showmsg('削除依頼サブページが作成されました。', false, title);
                  //日次ログに追加
                  addLog(title);
                }

              });
            } else {
              var yy = time.getFullYear();
              var mm = ('00' + (time.getMonth()+1)).slice(-2);
              var dd = ('00' + time.getDate()).slice(-2);
              var title2 = title + ' ' + yy + mm + dd;
              var subparams2 = {
                action: 'query',
                format: 'json',
                titles: title2,
                prop: 'info'
              };
              api.get( subparams2 ).done( function ( data2 ) {
                var pages2 = data2.query.pages, p2;
                for (p2 in pages2) {
                  if ('missing' in pages2[p2]) {

                    //ページに削除依頼タグ追加
                    addTag(targetPageName, title2);

                    var editparams2 = {
                      action: 'edit',
                      title: title2,
                      text: temp,
                      createonly: true,
                      summary: summary,
                      format: 'json'
                    };
                    api.postWithToken( 'csrf', editparams2 ).done( function ( editdata2 ) {
                      if ( editdata2.error && editdata2.error.info ) {
                        showmsg('削除依頼サブページ作成中にエラーが発生しました: ' + editdata2.error.info, true);
                      } else {
                        showmsg('削除依頼サブページが作成されました。', false, title2);
                        //日次ログに追加
                        addLog(title2);
                      }
                    });
                  } else {
                    showmsg('本日既に削除依頼が提出されているようです。', true);
                  }
                }
              });
            }
          }


        });
      }
    });
    return;
  }
}

function showmsg (text, isError, link) {
  if (document.getElementById("afdmsg") == null) {
    var msgarealine = document.createElement('hr');
    var msgarea = document.createElement('div');
    msgarea.setAttribute('style', 'font-weight: bold');
    msgarea.setAttribute('id', 'afdmsg');
    msgarea.textContent = 'メッセージ';
    document.getElementById("afdstarter").appendChild(msgarealine);
    document.getElementById("afdstarter").appendChild(msgarea);
  }
  var newmsg = document.createElement('div');
  var newmsgtext = document.createElement('span');
  if (isError == true) {
    newmsgtext.setAttribute('style', 'color:red');
  } else {
    newmsgtext.setAttribute('style', 'color:blue');
  }
  newmsgtext.textContent = text;
  newmsg.appendChild(newmsgtext);
  if (link != undefined) {
    var addlink = document.createElement('a');
    addlink.setAttribute('href', mw.util.getUrl(link));
    addlink.setAttribute('target', '_blank');
    addlink.textContent = link;
    newmsg.appendChild(addlink);
  }
  document.getElementById("afdstarter").appendChild(newmsg);
}

function findSourcesLinks() {
  if (mw.config.get('wgNamespaceNumber') == 0) {
    var params = {
      action: "parse",
      format: "json",
      title: mw.config.get('wgPageName'),
      text: "{{Find sources mainspace}}",
      prop: "text",
      disablelimitreport: 1,
      formatversion: "2"
    };
    var api = new mw.Api();
    api.get(params).done(function (data) {
      console.log(data);
      console.log(data.parse.text);
      document.getElementById("findsources").innerHTML = data.parse.text;
    });
  }
}

function addLog (subpage) {
  var time = new Date();
  var logtitle = 'Wikipedia:削除依頼/ログ/' + time.getFullYear() + '年' + (time.getMonth()+1) + '月' + time.getDate() +'日';
  var logsummary = '[[' + subpage + ']]を追加' + ad;
  var logparam = {
    action: 'edit',
    title: logtitle,
    nocreate: true,
    appendtext: '\n{{' + subpage + '}}',
    summary: logsummary,
    format: 'json'
  };
  api.postWithToken( 'csrf', logparam ).done( function ( logdata ) {
    if ( logdata.error && logdata.error.info ) {
      showmsg('日次ログへ追加中にエラーが発生しました: ' + logdata.error.info, true);
    } else {
      showmsg('日次ログへ追加されました。', false, logtitle);
    }
  });
}

function addTag (pagetitle, subpagetitle) {
  subpagetitle = subpagetitle.replace(/Wikipedia:削除依頼\/(.*)/, '$1');
  var summarycomment = document.getElementById("comment").value;
  var tagsummary = '削除依頼タグを貼り付け';
  tagsummary += (summarycomment != '') ? ': ' + summarycomment : '';
  tagsummary += ad;
  var addingtag = '{{subst:Sakujo|' + subpagetitle + '}}\n';
  addingtag += (document.getElementById('copyrights').checked) ? '{{Copyrights}}\n' : '';
  addingtag = (contentModel == 'Scribunto') ? '<includeonly>' + addingtag + '</includeonly>' : addingtag;
  addingtag = (document.getElementById('noinclude').checked == true && contentModel != 'Scribunto') ? '<noinclude>' + addingtag + '</noinclude>' : addingtag;
  var addtagparams = {
    action: 'edit',
    title: pagetitle,
    nocreate: true,
    prependtext: addingtag,
    summary: tagsummary,
    format: 'json'
  };
  api.postWithToken( 'csrf', addtagparams ).done( function ( addtagdata ) {
    if ( addtagdata.error && addtagdata.error.info ) {
      showmsg('削除依頼タグ追加中にエラーが発生しました: ' + addtagdata.error.info, true);
    } else {
      showmsg('ページに削除依頼タグが追加されました。', false);
    }
  });
}
//</nowiki>