利用者:Syunsyunminmin/script/newsArchive.js

出典:『ウィキニュース』(ベータ版)

注意: 保存した後、ブラウザのキャッシュをクリアする必要があります。Mozilla / Firefox / Safari: [Shift] を押しながら [再読み込み] をクリック、または [Shift]-[Ctrl]-[R] (Macでは [Cmd]-[Shift]-[R]); IE: [Ctrl] を押しながら [更新] をクリック、または [Ctrl]-[F5]; Konqueror: [再読み込み] をクリック、または [F5]; Opera: 「ツール」→「設定」からキャッシュをクリア。

//<nowiki>
if (typeof Syunmin === "undefined") Syunmin = {};

Syunmin.newsArchive = {};

Syunmin.newsArchive.doArchive = async function (e) {
  var wgEditSummary = '[[ウィキニュース:記事のアーカイブ|記事のアーカイブ化]]';
  var wgProtectSummary = wgEditSummary;
  var content = await new mw.Api().get({
	 action: "parse",
	 format: "json",
	 pageid: mw.config.get('wgArticleId'),
	 prop: "wikitext",
	 formatversion: "2"
  });
  content = content.parse.wikitext;
  if (content.match(/\{\{\s*アーカイブ済\s*\}\}/) == null) {
    if (content.match(/^(\{\{\s*公開中\s*\}\})/m) == null) {
      alert('{{公開中}}のみが書かれた行を見つけられませんでした。アーカイブ化を中止します。');
      return;
    }
    content = content.replace(/^(\{\{\s*公開中\s*\}\})/m, '$1\n{{アーカイブ済}}');
    var editdata = await new mw.Api().postWithToken("csrf", {
      action: "edit",
      format: "json",
      watchlist: "nochange",
      pageid: mw.config.get('wgArticleId'),
      summary: wgEditSummary + ' ([[User:Syunsyunminmin/script/newsArchive.js|newsArchive.js]])',
      text: content
    });
  }
  if (JSON.stringify(mw.config.get('wgRestrictionEdit')) != JSON.stringify(['sysop'])) {
    var protectdata = await new mw.Api().postWithToken("csrf", {
      action: "protect",
      expiry: "infinite",
      protections: 'edit=sysop|move=sysop',
      pageid: mw.config.get('wgArticleId'),
      reason: wgProtectSummary,
      watchlist: "nochange",
      format: "json",
    });
  }
  document.location.reload();
};
Syunmin.newsArchive.addPortletLink = function() {
  $(mw.util.addPortletLink(
    'p-cactions',
    '#',
    'アーカイブ化',
    'ca-newsops'
  )).click(function (e){
    e.preventDefault();
    var ifDo = confirm('アーカイブ化を実行しますか?');
    if (ifDo) {
      Syunmin.newsArchive.doArchive(e);
    }
    else {
      alert('中止しました。');
    }
  });
};
mw.loader.using(['mediawiki.util', 'mediawiki.api'] ).done( function () {
  if (mw.config.get('wgNamespaceNumber') == 0 && mw.config.get('wgArticleId') != 0) {
    Syunmin.newsArchive.addPortletLink();
  }
} );
//</nowiki>