コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:SunAfterRain/translate/zh/ForkAPage.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/**
////これは特別なjavascriptページです。 あなたが次のテキストを理解していない場合。 このJavaScriptページを引用しないでください。
////改寫自[[User:Muhebbet/ForkAPage.js]]
////翻譯說明
////這是繁體中文版本
//   > 複製維基百科之頁面
//   > 作者:[[:ja:利用者:青子守歌]]
//   > URL: https://ja-two.iwiki.icu/wiki/青子守歌
//   >
//   > 有關詳細用法,請參閱[[:zh:User:Muhebbet/ForkAPage]]。
**/
window.wgUXS = function (wg, hans, hant, cn, tw, hk, sg, zh, mo, my) {
    var ret = {
        'zh': zh || hans || hant || cn || tw || hk || sg || mo || my,
        'zh-hans': hans || cn || sg || my,
        'zh-hant': hant || tw || hk || mo,
        'zh-cn': cn || hans || sg || my,
        'zh-sg': sg || hans || cn || my,
        'zh-tw': tw || hant || hk || mo,
        'zh-hk': hk || hant || mo || tw,
        'zh-mo': mo || hant || hk || tw
    }
    return ret[wg] || zh || hans || hant || cn || tw || hk || sg || mo || my; //保證每一語言有值
}

window.wgULS = function (hans, hant, cn, tw, hk, sg, zh, mo, my) {
    return wgUXS(mw.config.get('wgUserLanguage'), hans, hant, cn, tw, hk, sg, zh, mo, my);
};

jQuery(function($)
{
	// 如果它不是特殊頁面
	if(mw.config.get("wgNamespaceNumber") != -1)
	{
		// 使用jQueryUI
		mw.loader.load("jquery.ui");
		
		// 添加訊息
		mw.messages.set(
			wgULS({
			"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-error"      : "编辑发生错误!!\n(错误代码:$1,详细信息:$2)",
			"forkapage-edit-unknown"    : "编辑发生未知错误。"
			
			},{
			"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-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.config.get("wgPageName") + "]]的[[Special:diff/" + lastRevision.revid + "|" + lastRevision.timestamp  + "版]] " + $dialog.find("#forkapage-reason").val() + " ([[w:zh:User:Sunny00217/ForkAPage|FAP]]|[[w:ja:利用者:Sunny00217/translate/zh/ForkAPage.js|source]])",
												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");
								}
							}
						);
					}
				}]
			});
		});
	}
});