コンテンツにスキップ

利用者:Yuukin0248/checkSignature.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/**
 * checkSignature.js
 * 署名忘れ防止スクリプト
 * [[利用者:Cpro]] さんによる作成。[[利用者:Yuukin0248]] が一部改変
 *
 * "以下のスクリプトはパブリックドメインとします。
 * 改変・再配布を含め自由にお使いいただけますが、自己責任でお願いします。
 * These scripts below are under public domain.
 * You can freely use, modify or redistribute, at your own risk." --[[利用者:Cpro|cpro]]
 */

mw.loader.using('oojs-ui').then(function () {
  /** 署名の文字列。必要に応じて各自で定義 */
  const SIGNATURE_STRING = '\u007E\u007E\u007E\u007E'; // \u007Eはチルダ

  //すべてのノート名前空間と、Wikipedia名前空間の一部を対象とする
  const ns = mw.config.get('wgNamespaceNumber');
  if (ns % 2 === 0 && ns !== 4) return;

  /** Wikipedia名前空間で署名が必要なページのリスト */
  const pageNamesRequireSignature = [
    '^井戸端($|/subj/)',
    '^お知らせ$',
    '^利用案内$',
    '^削除依頼/(?!ログ/)',
    '^投稿ブロック依頼/',
    '^保護(解除)?依頼$',
    '^リダイレクトの削除依頼/d+年d+月$',
    '^削除の復帰依頼($|/)',
    '^チェックユーザー依頼/',
    '^移動依頼$',
    '^改名提案$',
    '^管理者伝言板/(荒らし|投稿ブロック|保護ページ編集|その他の伝言)/',
    '^利用者ページの削除依頼$',
    '^利用者名変更依頼$',
    '^著作権問題調査依頼$',
    '^Bot作業依頼$',
    '^Bot/使用申請$',
    '^バグの報告$',
  ];

  // リストに含まれない場合は終了
  if (ns === 4 && mw.config.get('wgTitle').search(pageNamesRequireSignature.join('|')) === -1) return;

  const saveButton = $('#wpSave');
  if (!saveButton.length) return;

  saveButton.on('click', function (e) {
    // 細部の編集の際は終了
    if ($('#wpMinoredit').prop('checked')) return;

    /** @type {string} */
    const text = $('#wpTextbox1').val();
    let pos = text.indexOf(SIGNATURE_STRING);

    while (pos !== -1) {
      // nowikiされていないかチェック
      const nowiki = text.substring(0, pos).match(/<\/?nowiki>/gi);
      if (!nowiki) return; //nowikiが見つからなければ抜ける

      if (nowiki[nowiki.length - 1].toLowerCase() === '</nowiki>') return; // nowikiが閉じられていれば抜ける

      pos = text.indexOf(SIGNATURE_STRING, pos + SIGNATURE_STRING.length);
    }

    if (!window.confirm('署名が入力されていません。\nこのまま投稿しますか?')) e.preventDefault();
  });
});