コンテンツにスキップ

利用者:Yuukin0248/summaryTemplateLink.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/**
 * summaryTemplateLink.js
 * 編集要約欄の "{{sample}}" という文字列から [[Template:Sample]] にリンク
 */

$.when($.ready, mw.loader.using('mediawiki.Title')).then(makeTemplateLink);

function makeTemplateLink() {
  $('span.comment').each(function () {
    const cmt = $(this);
    let html = cmt.html();

    const autoComments = cmt.find('.autocomment');
    const replaceFieldName = 'tempReplaceField';

    // 自動挿入される要約欄を一時除去
    autoComments.each(function (index) {
      html = html.replace(this.innerHTML, replaceFieldName + index);
    });

    html.match(/\{\{.+?(\||\}\})/g)?.forEach(function (template) {
      // "#" はページ名には使えない文字 条件文専用なので処理しない
      if (template.includes('#')) return;

      // テンプレート名を解析
      const insideBrackets = template.replace(/\{|\||\}|subst:/g, '').trim();
      const title = insideBrackets.includes(':') ? new mw.Title(insideBrackets) : new mw.Title(insideBrackets, 10);

      // 参照読み込みしているページのリンクを追加
      const newString = template.replace(insideBrackets, `<a href="${title.getUrl()}">${insideBrackets}</a>`);
      html = html.replace(template, newString);
    });

    // 自動挿入される要約欄を復帰
    autoComments.each(function (index) {
      html = html.replace(replaceFieldName + index, this.innerHTML);
    });

    cmt.html(html);
  });
}