マヨケーがポアされたため、現在はロシケーがメインとなっています。

「利用者:島田「にかい」/common.js」の版間の差分

提供:唐澤貴洋Wiki
ナビゲーションに移動 検索に移動
>島田「にかい」
編集の要約なし
>島田「にかい」
編集の要約なし
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
// 即時削除入力補助スクリプト
// ページ名の左に保護状態を表示する
// 最終更新:2019-12-22
$(function()
//
{
// 即時削除タグの基準番号を確認するのが煩わしいので、プルダウンメニューを使ってタグを貼り付けできるようにしたもの
    // 編集状態の規定値
// ツールボックスのリンクをクリックしたときのみ、ページ上部にプルダウンメニューが表示される
    var editptext = '無';
// 即時削除マシーン遊びをやられると困るので、既に即時削除タグが貼られている場合には反応しない
    var moveptext = '無';
    var editpcolor = 'cccccc';
    var editpcolor = 'cccccc';
    var protected = false;
    var wgRestrictionMove = mw.config.get( 'wgRestrictionMove', [] );
    var wgRestrictionEdit = mw.config.get('wgRestrictionEdit', []);


$(function() {
    // 編集保護状態
// 未作成のページに反応させない
    switch(wgRestrictionEdit[0])
if(mw.config.get("wgArticleId") != "0") {
    {
// 編集画面以外であれば反応する
        // 半保護
if(mw.config.get("wgAction") != "edit" && mw.config.get('wgRestrictionEdit')[0] != "sysop") {
        case 'autoconfirmed':
            editptext = '';
// 編集タブのURLを取得する
            editpcolor = 'ffff55';
if(mw.config.get("skin") !== "minerva") {
            protected = true;
$editlink = $("#ca-edit>a").attr("href");
            break;
}
       
        // 全保護
// ツールボックスに即時削除リンクを追加する
        case 'sysop':
if(mw.config.get("skin") !== "minerva") {
            editptext = '全';
mw.util.addPortletLink("p-tb", $editlink + "&csdhelper=true", "このページを即時削除依頼" , "t-csd", "編集画面を開き、即時削除タグを貼り付ける");
            editpcolor = 'ff5555';
}
            protected = true;
}
            break;
}
    }
 
// ツールボックスから編集画面を開いたときの処理、パラメータが渡された場合のみ処理を実行する
    // 移動保護状態
if(mw.config.get("wgAction") == "edit" && $(location).attr("search").indexOf("csdhelper=true") > -1 && mw.config.get("skin") !== "minerva") {
    switch(wgRestrictionMove[0])
    {
// 編集画面上部にプルダウンメニューを追加する
        // 半保護
$("#editform")
        case 'autoconfirmed':
.prepend(
            moveptext = '半';
$("\x3Cselect/\x3E")
            movepcolor = 'ffff55';
.attr({"name": "csdList"})
            protected = true;
.append(
            break;
$("\x3Coption/\x3E")
 
.attr({"value": ""})
        // 全保護
.append("選択してください"),
        case 'sysop':
$("\x3Coption/\x3E")
            moveptext = '全';
.attr({"value": "全般1"})
            movepcolor = 'ff5555';
.append("全般1 意味不明な内容のページ"),
            protected = true;
$("\x3Coption/\x3E")
            break;
.attr({"value": "全般2"})
    }
.append("全般2 テスト投稿"),
 
$("\x3Coption/\x3E")
 
.attr({"value": "全般3"})
    // 保護されていれば
.append("全般3 荒らしもしくはいたずら"),
    if(protected)
$("\x3Coption/\x3E")
    {
.attr({"value": "全般4"})
 
.append("全般4 露骨な宣伝・広告のみが目的"),
    // 表生成
$("\x3Coption/\x3E")
    var table = document.createElement('table');
.attr({"value": "全般5"})
 
.append("全般5 削除されたページの改善なき再作成"),
    // class, id およびスタイルを設定
$("\x3Coption/\x3E")
    table.setAttribute("class", "noprint");
.attr({"value": "全般6"})
    table.setAttribute("id", "protectionStatus");
.append("全般6 ウィキペディア内のコピペによる作成"),
    table.setAttribute("style", "font-size: 45%; float: left; line-height: 60%;");
$("\x3Coption/\x3E")
    table.setAttribute("cellspacing", 0);
.attr({"value": "全般8"})
 
.append("全般8 初版投稿者による依頼または白紙化"),
    // 中身を生成
$("\x3Coption/\x3E")
    table.innerHTML = '<tbody><tr style=\"background-color: #'
.attr({"value": "全般9"})
    + editpcolor
.append("全般9 明白な著作権侵害"),
    + '\" id=\"LWeditprtected\"><th style="padding: 4px; font-weight: normal;\">編集</th><td style=\"padding: 4px;\">'
$("\x3Coption/\x3E")
    + editptext
.attr({"value": "記事1"})
    + '</td></tr><tr style=\"background-color: #'
.append("記事1 定義なし"),
    + movepcolor
$("\x3Coption/\x3E")
    + '\" id=\"LWmoveprtected\"><th style=\"padding: 4px; font-weight: normal;\">移動</th><td style=\"padding: 4px;\">'
.attr({"value": "記事2"})
    + moveptext
.append("記事2 言語間リンク・カテゴリ・外部リンクのみ"),
    + '</td></tr></tbody></table>';
$("\x3Coption/\x3E")
 
.attr({"value": "リダイレクト1-1"})
 
.append("リダイレクト1-1 直接関係のないページへのリダイレクト"),
    // ページ名<h1>取得
$("\x3Coption/\x3E")
    var firstHeading = document.getElementById("firstHeading");
.attr({"value": "リダイレクト1-2"})
   
.append("リダイレクト1-2 単純な書き誤り"),
    // ページ名の左に表を表示
$("\x3Coption/\x3E")
    firstHeading.insertBefore(table, firstHeading.firstNode);
.attr({"value": "リダイレクト1-3"})
    }
.append("リダイレクト1-3 転送先がないリダイレクト"),
});
$("\x3Coption/\x3E")
 
.attr({"value": "リダイレクト1-4"})
/**
.append("リダイレクト1-4 他言語版へのリダイレクト"),
* サイドバーに表示中ページのサブページ一覧 ([[特別:前方一致ページ一覧]]) へのリンクを追加する。
$("\x3Coption/\x3E")
*/
.attr({"value": "リダイレクト2-1"})
 
.append("リダイレクト2-1 半角と全角の使い分け違反"),
$.when( mw.loader.using( ['mediawiki.util'] ), $.ready ).then(function() {
$("\x3Coption/\x3E")
if( mw.config.get( 'wgNamespaceNumber' ) !== -1 ) {
.attr({"value": "リダイレクト2-2"})
var url = mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace( '$1', 'Special:PrefixIndex/' ) + mw.config.get( 'wgPageName' ) + '/';
.append("リダイレクト2-2 作品名を鍵括弧等でくくったもの"),
mw.util.addPortletLink( 'p-tb', url, '前方一致ページ一覧', 't-prefixindexlink', 'このページのサブページ一覧' );
$("\x3Coption/\x3E")
}
.attr({"value": "リダイレクト2-3"})
.append("リダイレクト2-3 作品名以外の記事名における読み・別表記等の併記"),
$("\x3Coption/\x3E")
.attr({"value": "リダイレクト2-5"})
.append("リダイレクト2-5 曖昧さ回避括弧の使い方違反"),
$("\x3Coption/\x3E")
.attr({"value": "リダイレクト2-6"})
.append("リダイレクト2-6 漢字表記人名の姓名間の空白"),
$("\x3Coption/\x3E")
.attr({"value": "リダイレクト3-1"})
.append("リダイレクト3-1 改名提案を経た曖昧さ回避括弧付きの移動の残骸"),
$("\x3Coption/\x3E")
.attr({"value": "リダイレクト3-2"})
.append("リダイレクト3-2 移動依頼を経た曖昧さ回避括弧付きの移動の残骸"),
$("\x3Coption/\x3E")
.attr({"value": "リダイレクト4"})
.append("リダイレクト4 唯一の投稿者による移動の残骸で本人依頼のもの"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル1-2"})
.append("ファイル1-2 コモンズと重複(コピー)"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル1-3"})
.append("ファイル1-3 コモンズと重複(他プロジェクト由来)"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル1-4"})
.append("ファイル1-4 コモンズと重複(同一投稿者)"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル1-5"})
.append("ファイル1-5 コモンズへ移動"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル3"})
.append("ファイル3 重複ファイル"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル5"})
.append("ファイル5 出典またはライセンス不明のまま1週間経過"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル6"})
.append("ファイル6 自由利用できないファイル"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル7"})
.append("ファイル7 コモンズのファイルページ"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル8"})
.append("ファイル8 存在しないファイルのファイルページ"),
$("\x3Coption/\x3E")
.attr({"value": "ファイル9"})
.append("ファイル9 初版投稿後7日以内の投稿者による依頼"),
$("\x3Coption/\x3E")
.attr({"value": "カテゴリ1"})
.append("カテゴリ1 初版からリダイレクト"),
$("\x3Coption/\x3E")
.attr({"value": "カテゴリ3"})
.append("カテゴリ3 私的カテゴリ"),
$("\x3Coption/\x3E")
.attr({"value": "カテゴリ6"})
.append("カテゴリ6 改名提案を経て未使用となったカテゴリ"),
$("\x3Coption/\x3E")
.attr({"value": "利用者ページ1"})
.append("利用者ページ1 本人希望"),
$("\x3Coption/\x3E")
.attr({"value": "利用者ページ2"})
.append("利用者ページ2 登録されていない利用者の利用者ページ"),
$("\x3Coption/\x3E")
.attr({"value": "利用者ページ3"})
.append("利用者ページ3 IPユーザーの利用者ページ")
),
// 念のため、方針へのリンクも用意しておく
$("\x3Csmall/\x3E")
.append("(" ,
$("\x3Ca/\x3E")
.attr({"href": "/wiki/Wikipedia:%E5%8D%B3%E6%99%82%E5%89%8A%E9%99%A4%E3%81%AE%E6%96%B9%E9%87%9D", "target": "_blank", "title": "別画面で方針ページを開きます"})
.append("即時削除の方針")
, ")"),
// 2のパラメータ入力欄を無効化した状態で配置しておく
$("\x3Cbr/\x3E"),
$("\x3Cinput/\x3E")
.attr({"type": "text" , "name": "txtReason", "size": "65", "disabled": "disabled"}),
$("\x3Cinput/\x3E")
.attr({"type": "button", "name": "btnReason", "value": "入力完了!", "disabled": "disabled", "onclick": "$csdTagDone()"}),
$("\x3Cbr/\x3E")
);
}
});
});


// revisionShortener (カスタムJS/User script)
// 差分や過去版を表示した際に、ウィキペディアのノートページで使用できるそのページの短いリンクを生成する。
// This script generates a short diffPage address. Supported En.
// 使用説明(Usage) : [[User:タバコはマーダー/revisionShortener]]
// Date 2016-09-27


$(function() {
$(document).ready(function(){
//セレクトボックスが切り替わったら処理を実行する
  revisionShortener();
$("select[name=csdList]").change(function() {
// テキストエリアの内容を取得する
var $wikiTxt = $("textarea#wpTextbox1").val();
// 即時削除タグの有無を確認する
if($wikiTxt.indexOf("{{即時削除") > -1 || $wikiTxt.indexOf("{{sd") > -1) {
// 既にタグが貼られている場合、二段目のテキストボックスを無効化
$("input[name=btnReason]").prop("disabled", true);
$("input[name=txtReason]").prop("disabled", true);
$("input[name=txtReason]").val("");
// タグが貼られている場合は処理を抜ける
return false;
}
// 即時削除タグがなければ続行する
// 2のパラメータが必要な番号と、入力欄に出す説明
var $delReason = {
"全般4":"説明を記入してください",
"全般5":"削除依頼のサブページ名",
"全般6":"コピペ元ページ名",
"全般9":"コピー元URL",
"記事1":"説明を記入してください",
"リダイレクト1-2":"書き誤りの箇所を説明してください",
"リダイレクト2-1":"使い分けが間違っている文字を説明してください",
"リダイレクト2-5":"使い方の違反内容を説明してください",
"リダイレクト3-1":"改名提案へのリンクを記入してください",
"リダイレクト3-2":"移動依頼の該当節へのリンクを示してください",
"ファイル1-2":"コモンズのファイル名",
"ファイル1-3":"コモンズのファイル名",
"ファイル1-4":"コモンズのファイル名",
"ファイル1-5":"コモンズのファイル名",
"ファイル3":"コモンズのファイル名",
"ファイル5":"投稿者への通知先",
"ファイル6":"自由利用ができない根拠",
"カテゴリ6":"改名提案へのリンク"
};
// 選択肢が一番上だった場合、何もしない
if($("select[name=csdList]").val() === "") {
// 空白
}
// 2のパラメータが必要な場合の処理
else if(Object.keys($delReason).includes($(this).val())) {
// 二段目のテキストボックスとボタンを有効化する
$("input[name=btnReason]").prop("disabled", false);
$("input[name=txtReason]").prop("disabled", false);
// 配列からパラメータの説明を読み出して出力、全選択状態にする
$("input[name=txtReason]").val($delReason[$(this).val()]);
$("input[name=txtReason]").focus();
$("input[name=txtReason]").select();
}
// 2のパラメータが不要であれば、選択したvalue値を即時削除タグに含めた状態で出力
else {
$("textarea#wpTextbox1").val("\x7B\x7B即時削除|" + $(this).val() + "\x7D\x7D\r\n" + $("textarea#wpTextbox1").val());
// 年のためテキストボックスとボタンの無効化処理を行っておく
$("input[name=btnReason]").prop("disabled", true);
$("input[name=txtReason]").prop("disabled", true);
$("input[name=txtReason]").val("");
}
});
});
});


function revisionShortener(delTitle, delHour, viewAll) {
  if ( mw.config.get("wgAction") == "edit" ) return;
  var u = location;
  if (u.search === "") return;
 
  // variable by Mediawiki
  var sPageName = mw.config.get("wgRelevantPageName");
  var sWPLang = mw.config.get("wgContentLanguage");
  var currentSkinName = mw.config.get("skin");
 
  // class name by Mediawiki
  var classNameDiffPageTime = "diff-currentversion-title"; // newer time, have oldid and diff parameter.
  var idNameOldidSingleTime = "mw-revision-date"; // time, have oldid only.
  var classNameDiffMulti = "diff-multi"; // Detect there is a revision between oldid and diffid.
  var targetElementViewShortenerBox = "content";
  if (currentSkinName == "modern") {
    targetElementViewShortenerBox = "mw-content-text";
  }
  var sTime = getRevisionTime(classNameDiffPageTime, idNameOldidSingleTime);
  if (sTime == undefined) return; // bug fix report by User:MawaruNeko
   
  // for loacal setting
  var thisScriptTitle = "";
  var LocalSpecialDiff = "Special:Diff";
  var LocalTemplateDiff = "diff"; // in en, template:diff,
 
  if (sWPLang == "en") {
    if (sTime.indexOf(" of ") != -1)
      sTime = sTime.split(" of ")[1]; // Convert to time only. In en.
  }
  if (sWPLang == "ja") { // e.g.
    LocalSpecialDiff = "特別:差分";
    LocalTemplateDiff = "差分";
    if (sTime.indexOf("時点").indexOf != -1)
      sTime = sTime.split("時点")[0].replace(/ \(.\) /,""); // Convert to time only . In ja, delete day of week.
    document.title = document.title.slice(0, -9) +  sTime;
  }
  var colorViewer = "#ecf4fa", colorViewerBorder = "#a7d7f9";
  if (currentSkinName == "cologneblue")
  colorViewer = "#ffffff", colorViewerBorder = "#a9a9a9";
 
  function getRevisionTime(id1, id2) {
    id1 = "." + id1, id2 = "#" + id2;
    if ($(id1).length !== 0)
      return $(id1).text();
    if ($(id2).length !== 0)
      return $(id2).text();
  }
  function splitParam(objUrl) {
    var uParam = objUrl.search.slice(1); // delete "?"
    var aParam = uParam.split("&");
    var a = [];
    for (var i in aParam) {
      var t = aParam[i].split("=");
      a.push(t);
    }
    return a;
  }
  function pickupCell(a, index) {
    for (var i in a)
      if (a[i][0] == index)
        return a[i][1];
    return false;
  }
  function convParam(diffid, oldid, mode) {
    switch (mode){
    case "sp":
      if (diffid == "prev")
        return oldid;
      return oldid + "/" + diffid;
    case "tm":
      return diffid + "|" + oldid;
    case "uri":
      if (diffid == "prev")
        return "diff=" + oldid;
      return "diff=" + diffid + "&" + "oldid=" + oldid;
    }
  }
 
  var aParam = splitParam(u);
  var diffid = pickupCell(aParam, "diff");
  var oldid = pickupCell(aParam, "oldid");
 
  if (!oldid && !diffid) return;
  if (oldid === "prev") { // for diff page from noftication page. it's reversed.
    oldid = diffid;
    diffid = "prev";
  }
 
  if (delHour) {
    sTime = sTime.replace(/[012][0-9]:[0-6][0-9]/, "");
    if (sTime.indexOf(",").indexOf != -1)
      sTime = sTime.replace(/, /,"");
  }
  var uAll = u.href.split("?");
  var uAddres = uAll[0].replace("index.php", "");
 
  var isMultiRev = ($("." + classNameDiffMulti).length !== 0 ? true : false);
  if ( !isMultiRev && isNaN(diffid) === false){
    oldid = Math.max( diffid, oldid );
    diffid = "prev";
  } else if (!oldid && isNaN(diffid) === false) {
    oldid = diffid;
    diffid = "prev";
  } else if (!diffid) {
    diffid = "prev";
  }
 
  var sLabel = (delTitle ? "" : sPageName + "(") + sTime + (delTitle ? "" : ")");
  var sRevSpecial = "[[" + LocalSpecialDiff + "/" + convParam(diffid, oldid, "sp") + "|" + sLabel + "]]";
  var sRevTemplate = "{{" + LocalTemplateDiff + "|" + sPageName + "|" + convParam(diffid, oldid, "tm") + "|" + sLabel + "}}";
  var sRevURI = "[" + uAddres + "?" + convParam(diffid, oldid, "uri") + " " + sLabel + "]";
 
  var viewer = "<p><input id=\"rv_url1\" class=\"revisionShortener\"></p>" +
  (viewAll ? "<p><input id=\"rv_url2\" class=\"revisionShortener\"></p>" +
  "<p><input id=\"rv_url3\" class=\"revisionShortener\"></p>" : "" );
  var checkbox = thisScriptTitle + "<input type=\"checkbox\" id=\"view_title\" " + (delTitle ? "" : "checked=\"checked\"") + "><label for=\"view_title\">title</label>" +
  "<input type=\"checkbox\" id=\"view_time\" " + (delHour ? "" : "checked=\"checked\"") + "><label for=\"view_time\">time</label>" +
  "<input type=\"checkbox\" id=\"view_version\" " + (viewAll ? "" : "checked=\"checked\"") + "><label for=\"view_version\">simple</label>";
 
  if ($("#shortenerBox").length === 0)
    if (currentSkinName == "cologneblue")
      $("h1").before("<div id=\"shortenerBox\"></div>");
    else
      $("#" + targetElementViewShortenerBox).prepend("<div id=\"shortenerBox\"></div>");
  $("#shortenerBox").css({ "width" : "100%", "padding" : "10px 0", "margin-left":"20px" }).html(checkbox + viewer);
  $("#shortenerBox p").css({ "padding" : "0", "margin":"4px 0" });
  $("#shortenerBox label").css({ "font-size":"88%", "margin-right":"10px" });
  $("#view_title, #view_time, #view_version").css({ "vertical-align":"middle", "margin":"0 3px 0 0" });
  $("input.revisionShortener").css({ "width": "400px", "border":"1px solid " + colorViewerBorder, "background-color": colorViewer }).focus(function(){
    $(this).select();
  });
 
  function checkboxFunc() {
    var ck1 = ( $("#view_title").prop("checked") ? false : true);
    var ck2 = ( $("#view_time").prop("checked") ? false : true);
    var ck3 = ( $("#view_version").prop("checked") ? false : true);
    revisionShortener(ck1, ck2, ck3);
  }
  $("#view_title").click(checkboxFunc);
  $("#view_time").click(checkboxFunc);
  $("#view_version").click(checkboxFunc);


// 二段目のテキストボックスを使う場合、入力完了ボタンを押したときに出力
  $("#rv_url1").val(sRevSpecial);
function $csdTagDone() {
  if (viewAll) {
    $("#rv_url2").val(sRevTemplate);
// 全般6のみ3のパラメータ追加
    $("#rv_url3").val(sRevURI);
if($("select[name=csdList]").val() == "全般6") {
  }
$("textarea#wpTextbox1").val("\x7B\x7B即時削除|" + $("select[name=csdList]").val() + "|2=" + $("input[name=txtReason]").val() + "|3=\x3C!-- 言語コード --\x3E\x7D\x7D\r\n" + $("textarea#wpTextbox1").val());
}
// 全般6以外は一段目と二段目のvalue値を取得するだけ
else {
$("textarea#wpTextbox1").val("\x7B\x7B即時削除|" + $("select[name=csdList]").val() + "|2=" + $("input[name=txtReason]").val() + "\x7D\x7D\r\n" + $("textarea#wpTextbox1").val());
}
// 二段目のテキストボックスとボタンを空欄にして無効化する
$("input[name=btnReason]").prop("disabled", true);
$("input[name=txtReason]").prop("disabled", true);
$("input[name=txtReason]").val("");
}
}

2021年11月4日 (木) 10:17時点における最新版

// ページ名の左に保護状態を表示する
$(function()
{
    // 編集状態の規定値
    var editptext = '無';
    var moveptext = '無';
    var editpcolor = 'cccccc';
    var editpcolor = 'cccccc';
    var protected = false;
    var wgRestrictionMove = mw.config.get( 'wgRestrictionMove', [] );
    var wgRestrictionEdit = mw.config.get('wgRestrictionEdit', []);

    // 編集保護状態
    switch(wgRestrictionEdit[0])
    {
        // 半保護
        case 'autoconfirmed':
            editptext = '半';
            editpcolor = 'ffff55';
            protected = true;
            break;
        
        // 全保護
        case 'sysop':
            editptext = '全';
            editpcolor = 'ff5555';
            protected = true;
            break;
    }

    // 移動保護状態
    switch(wgRestrictionMove[0])
    {
        // 半保護
        case 'autoconfirmed':
            moveptext = '半';
            movepcolor = 'ffff55';
            protected = true;
            break;

        // 全保護
        case 'sysop':
            moveptext = '全';
            movepcolor = 'ff5555';
            protected = true;
            break;
    }


    // 保護されていれば
    if(protected)
    {

    // 表生成
    var table = document.createElement('table');

    // class, id およびスタイルを設定
    table.setAttribute("class", "noprint");
    table.setAttribute("id", "protectionStatus");
    table.setAttribute("style", "font-size: 45%; float: left; line-height: 60%;");
    table.setAttribute("cellspacing", 0);

    // 中身を生成
    table.innerHTML = '<tbody><tr style=\"background-color: #'
    + editpcolor
    + '\" id=\"LWeditprtected\"><th style="padding: 4px; font-weight: normal;\">編集</th><td style=\"padding: 4px;\">'
     + editptext
     + '</td></tr><tr style=\"background-color: #'
    + movepcolor
    + '\" id=\"LWmoveprtected\"><th style=\"padding: 4px; font-weight: normal;\">移動</th><td style=\"padding: 4px;\">'
    + moveptext
    + '</td></tr></tbody></table>';


    // ページ名<h1>取得
    var firstHeading = document.getElementById("firstHeading");
    
    // ページ名の左に表を表示
    firstHeading.insertBefore(table, firstHeading.firstNode);
    }
});

/**
 * サイドバーに表示中ページのサブページ一覧 ([[特別:前方一致ページ一覧]]) へのリンクを追加する。
 */

$.when( mw.loader.using( ['mediawiki.util'] ), $.ready ).then(function() {
	 if( mw.config.get( 'wgNamespaceNumber' ) !== -1 ) {
		 var url = mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace( '$1', 'Special:PrefixIndex/' ) + mw.config.get( 'wgPageName' ) + '/';
		 mw.util.addPortletLink( 'p-tb', url, '前方一致ページ一覧', 't-prefixindexlink', 'このページのサブページ一覧' );
	 }
});

// revisionShortener (カスタムJS/User script)
// 差分や過去版を表示した際に、ウィキペディアのノートページで使用できるそのページの短いリンクを生成する。
// This script generates a short diffPage address. Supported En.
// 使用説明(Usage) : [[User:タバコはマーダー/revisionShortener]]
// Date 2016-09-27

$(document).ready(function(){
  revisionShortener();
});

function revisionShortener(delTitle, delHour, viewAll) {
  if ( mw.config.get("wgAction") == "edit" ) return;
  var u = location;
  if (u.search === "") return;
  
  // variable by Mediawiki
  var sPageName = mw.config.get("wgRelevantPageName");
  var sWPLang = mw.config.get("wgContentLanguage");
  var currentSkinName = mw.config.get("skin");
  
  // class name by Mediawiki
  var classNameDiffPageTime = "diff-currentversion-title"; // newer time, have oldid and diff parameter.
  var idNameOldidSingleTime = "mw-revision-date"; // time, have oldid only.
  var classNameDiffMulti = "diff-multi"; // Detect there is a revision between oldid and diffid.
  var targetElementViewShortenerBox = "content";
  if (currentSkinName == "modern") {
    targetElementViewShortenerBox = "mw-content-text";
  }
  var sTime = getRevisionTime(classNameDiffPageTime, idNameOldidSingleTime);
  if (sTime == undefined) return; // bug fix report by User:MawaruNeko
    
  // for loacal setting
  var thisScriptTitle = "";
  var LocalSpecialDiff = "Special:Diff";
  var LocalTemplateDiff = "diff"; // in en, template:diff,
  
  if (sWPLang == "en") {
    if (sTime.indexOf(" of ") != -1)
      sTime = sTime.split(" of ")[1]; // Convert to time only. In en.
  }
  if (sWPLang == "ja") { // e.g.
    LocalSpecialDiff = "特別:差分";
    LocalTemplateDiff = "差分";
    if (sTime.indexOf("時点").indexOf != -1)
      sTime = sTime.split("時点")[0].replace(/ \(.\) /,""); // Convert to time only . In ja, delete day of week.
    document.title = document.title.slice(0, -9) +  sTime;
  }
  var colorViewer = "#ecf4fa", colorViewerBorder = "#a7d7f9";
  if (currentSkinName == "cologneblue")
   colorViewer = "#ffffff", colorViewerBorder = "#a9a9a9";
  
  function getRevisionTime(id1, id2) {
    id1 = "." + id1, id2 = "#" + id2;
    if ($(id1).length !== 0)
      return $(id1).text();
    if ($(id2).length !== 0)
      return $(id2).text();
  }
  function splitParam(objUrl) {
    var uParam = objUrl.search.slice(1); // delete "?"
    var aParam = uParam.split("&");
    var a = [];
    for (var i in aParam) {
      var t = aParam[i].split("=");
      a.push(t);
    }
    return a;
  }
  function pickupCell(a, index) {
    for (var i in a)
      if (a[i][0] == index)
        return a[i][1];
    return false;
  }
  function convParam(diffid, oldid, mode) {
    switch (mode){
    case "sp":
      if (diffid == "prev")
        return oldid;
      return oldid + "/" + diffid;
    case "tm":
      return diffid + "|" + oldid;
    case "uri":
      if (diffid == "prev")
        return "diff=" + oldid;
      return "diff=" + diffid + "&" + "oldid=" + oldid;
    }
  }
  
  var aParam = splitParam(u);
  var diffid = pickupCell(aParam, "diff");
  var oldid = pickupCell(aParam, "oldid");
  
  if (!oldid && !diffid) return;
  if (oldid === "prev") { // for diff page from noftication page. it's reversed.
    oldid = diffid;
    diffid = "prev";
  }
  
  if (delHour) {
    sTime = sTime.replace(/[012][0-9]:[0-6][0-9]/, "");
    if (sTime.indexOf(",").indexOf != -1)
      sTime = sTime.replace(/, /,"");
  }
  var uAll = u.href.split("?");
  var uAddres = uAll[0].replace("index.php", "");
  
  var isMultiRev = ($("." + classNameDiffMulti).length !== 0 ? true : false);
  if ( !isMultiRev && isNaN(diffid) === false){
    oldid = Math.max( diffid, oldid );
    diffid = "prev";
  } else if (!oldid && isNaN(diffid) === false) {
    oldid = diffid;
    diffid = "prev";
  } else if (!diffid) {
    diffid = "prev";
  }
  
  var sLabel = (delTitle ? "" : sPageName + "(") + sTime + (delTitle ? "" : ")");
  var sRevSpecial = "[[" + LocalSpecialDiff + "/" + convParam(diffid, oldid, "sp") + "|" + sLabel + "]]";
  var sRevTemplate = "{{" + LocalTemplateDiff + "|" + sPageName + "|" + convParam(diffid, oldid, "tm") + "|" + sLabel + "}}";
  var sRevURI = "[" + uAddres + "?" + convParam(diffid, oldid, "uri") + " " + sLabel + "]";
  
  var viewer = "<p><input id=\"rv_url1\" class=\"revisionShortener\"></p>" +
  (viewAll ? "<p><input id=\"rv_url2\" class=\"revisionShortener\"></p>" +
  "<p><input id=\"rv_url3\" class=\"revisionShortener\"></p>" : "" );
  var checkbox = thisScriptTitle + "<input type=\"checkbox\" id=\"view_title\" " + (delTitle ? "" : "checked=\"checked\"") + "><label for=\"view_title\">title</label>" +
  "<input type=\"checkbox\" id=\"view_time\" " + (delHour ? "" : "checked=\"checked\"") + "><label for=\"view_time\">time</label>" +
  "<input type=\"checkbox\" id=\"view_version\" " + (viewAll ? "" : "checked=\"checked\"") + "><label for=\"view_version\">simple</label>";
  
  if ($("#shortenerBox").length === 0)
    if (currentSkinName == "cologneblue")
      $("h1").before("<div id=\"shortenerBox\"></div>");
    else
      $("#" + targetElementViewShortenerBox).prepend("<div id=\"shortenerBox\"></div>");
  $("#shortenerBox").css({ "width" : "100%", "padding" : "10px 0", "margin-left":"20px" }).html(checkbox + viewer);
  $("#shortenerBox p").css({ "padding" : "0", "margin":"4px 0" });
  $("#shortenerBox label").css({ "font-size":"88%", "margin-right":"10px" });
  $("#view_title, #view_time, #view_version").css({ "vertical-align":"middle", "margin":"0 3px 0 0" });
  $("input.revisionShortener").css({ "width": "400px", "border":"1px solid " + colorViewerBorder, "background-color": colorViewer }).focus(function(){
    $(this).select();
  });
  
  function checkboxFunc() {
    var ck1 = ( $("#view_title").prop("checked") ? false : true);
    var ck2 = ( $("#view_time").prop("checked") ? false : true);
    var ck3 = ( $("#view_version").prop("checked") ? false : true);
    revisionShortener(ck1, ck2, ck3);
  }
  $("#view_title").click(checkboxFunc);
  $("#view_time").click(checkboxFunc);
  $("#view_version").click(checkboxFunc);

  $("#rv_url1").val(sRevSpecial);
  if (viewAll) {
    $("#rv_url2").val(sRevTemplate);
    $("#rv_url3").val(sRevURI);
  }
}