User:Muhebbet/ForkAPage.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// <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");
// メッセージを追加
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]]的[[Special:PermanentLink/$3|$2版]] $4 ([[User:LTSB/ForkAPage|FAP]])",
"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("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
{
// 不明なエラー表示
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>