Jump to content
Wikimedia Meta-Wiki

User:Chqaz/Fork-Page.js

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");
 }
 }
 );
 }
 }]
 });
 });
 }
 });

AltStyle によって変換されたページ (->オリジナル) /