User:Chqaz/Fork-Page.js
Appearance
From Meta, a Wikimedia project coordination wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//************************************************************************/ // 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-helplink":"https://ja.wikipedia.org/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ドル]]の[[Special:PermanentLink/3ドル|2ドル版]]より複製 (スクリプトによる) 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); // 複製先タイトルを取得 varforkToTitle=$dialog.find("#forkapage-forkto").val(); // ページを編集するメソッド vareditPage=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(varkeyinresult.query.pages) { // 複製元の最終版の中身を取得 varlastRevision=result.query.pages[key].revisions[0]; // ダイアログに編集中を追加 $dialog .append($("<h2 />").text(mw.msg("forkapage-edit-header"))) .append($("<p />").text(mw.msg("forkapage-edit-move",forkToTitle))); // 複製先を編集 varreason=$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); } // エラーが返ってきたら elseif(result&&result.error) { // エラー表示 alert(mw.msg("forkapage-edit-error",result.error.code,result.error.info)); } // キャプチャの手動入力を求められ編集に失敗したら elseif(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(varkeyinresult.query.pages) { // 複製先が存在していれば if(key!=-1) { // 複製先の最終更新版を取得 varlastRevision=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"); } } ); } }] }); }); } });