MediaWiki:Gadget-ForkAPage.js
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: メニュー → 設定 (Mac では Opera → 環境設定) に移動し、プライバシーとセキュリティ → 閲覧データを消去 → キャッシュされた画像およびファイル からキャッシュをクリアしてください。
// <source lang="javascript">
//************************************************************************/
// ja> = Fork A Page =
// > ウィキペディア内のページを別のページへ複製する
// > ;作者: 青子守歌
// > ;URL: https://ja.wikipedia.org/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.wikipedia.org/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.dialog");
// メッセージを追加
mw.messages.set({
"forkapage-tab-label" : "複製",
"forkapage-tab-tooltip" : "このページを複製する",
"forkapage-dialog-title" : "ページを複製",
"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-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($("<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)));
// 複製先を編集
$.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,
$dialog.find("#forkapage-reason").val()),
text: lastRevision["*"],
token: mw.user.tokens.get("editToken")
},
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
{
// 不明なエラー表示
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");
}
}
);
}
}]
});
});
}
});
// </source>