利用者:ぽめらん/common.js
表示
< 利用者:ぽめらん
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
//
// このスクリプトは[[利用者:Sakoppi/aozora converter.js]](2016-03-15T14:52:29)をもとに作成しています。
//
// License: CC-0
// 2016/02/12 完成
// 2016/03/08 修正
//
mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScript") + "?action=raw&ctype=text/javascript&title=" + mw.util.wikiUrlencode("利用者:CES1596/jisx0213.js"), "text/javascript");
window.onload = function(){
var namespaceNumber = mw.config.get('wgNamespaceNumber');
if (namespaceNumber !== 0) return;
//
//編集画面の時にボタンを設置
//
if( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
$(".editButtons").append("<input id='aozora_btn' title='青空文庫方式の書式をウィキ記法に変換' type='button' value='青空文庫コンバーター(XHTML)'/>");
}
//
// 青空文庫コンバーター本体
//
$(document).on("click", ".editButtons #aozora_btn", function(){
var new_text = "";
var note_text = "";
var dialog_html = "";
$("#aozora_btn").val("青空文庫コンバーター(XHTML) 実行中...");
var book_info = [];
var original_text = $("#editform textarea").val();
//
// 必要のないheadタグ内、html、bodyタグを除去
//
new_text = replace_func(original_text, "^(\n|.)*</head>", "");
new_text = replace_func(new_text, "<(/|)body>", "");
new_text = replace_func(new_text, "<(/|)html>", "");
//
// XHTMLのルビタグをWiki記法のrubyテンプレートに変換
// [<ruby><rb>xx</rb><rp>(</rp><rt>yy</rt><rp>)</rp><ruby>] -> [{{r|xx|yy}}]
//
new_text = replace_func(new_text, "<ruby><rb>(.*?)</rb><rp>(</rp><rt>(.*?)</rt><rp>)</rp></ruby>", "{{r|$1|$2}}");
//
// XHTMLの改行記号を改行に変更
// [<br />] -> [\n]
//
new_text = replace_func(new_text, "<br(/|| /)>", "\n");
//
// Wiki記法の脚注に変更
// span.notes -> ref
//
new_text = replace_func(new_text, '<span class="notes">(.*?)</span>',"{{註|$1}}");
//
// Wiki記法の傍点に変更
//
new_text = replace_func(new_text, '<strong class="SESAME_DOT">(.*?)</strong>',"{{傍点|$1}}");
new_text = replace_func(new_text, '<em class="sesame_dot">(.*?)</em>',"{{傍点|$1}}");
//先頭行が改行になっているものを除去
new_text = replace_func(new_text, "^\n", "");
//aタグを除去
new_text = replace_func(new_text, "<a (.*?)>(.*?)</a>", "$2");
//h4タグを第2レベル節に変更(字下げ対策)
new_text = replace_func(new_text, "<div (.*?)>(.*?)<h4 (.*?)>(.*?)</h4>(.*?)</div>", "\n==$4==\n");
//h5タグを第3レベル節に変更(字下げ対策)
new_text = replace_func(new_text, "<div (.*?)>(.*?)<h5 (.*?)>(.*?)</h5>(.*?)</div>", "\n==$4==\n");
//h4タグを第2レベル節に変更
new_text = replace_func(new_text, "<h4 (.*?)>(.*?)</h4>", "\n==$2==\n");
//h5タグを第3レベル節に変更
new_text = replace_func(new_text, "<h5 (.*?)>(.*?)</h5>", "\n===$2===\n");
//外字が含まれているimgタグを数値参照に変換
var gaiji_exp = new RegExp("<img[ -~]*([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3}).*?>", "g");
new_text = new_text.replace(gaiji_exp, function(all, jis_code1, jis_code2, jis_code3){
var jis_text = ( "0" + jis_code1 ).slice( -1 ) + "-" + ( "0" + jis_code2 ).slice( -2 ) + "-" + ( "0" + jis_code3 ).slice( -2 );
return encodeUni(jis_text);
});
//タイトル・著者を取得
book_info.title = find_func(new_text, "<h1 class=\"title\">(.*?)</h1>",1);
book_info.translator = find_func(new_text, "<h2 class=\"translator\">(.*?)</h2>",1);
book_info.author = find_func(new_text, "<h2 class=\"author\">(.*?)</h2>",1);
//入力・校正者を取得
book_info.inputter = find_func(new_text, "\n入力:(.*?)\n",1);
book_info.proofreader = find_func(new_text, "\n校正:(.*?)\n",1);
//脚注を取得
var $new_elem = $(new_text);
book_info.info_notes = $new_elem.filter(".bibliographical_information").text() + $new_elem.filter(".notation_notes").text();
book_info.info_notes = replace_func(book_info.info_notes, "\n\n", "<br />\n");
//ノートに掲載する書誌情報を作成
note_text += "<!--書誌情報:ここから下をノートに転記-->\n";
note_text += "{{textinfo \n";
note_text += "|edition=" + book_info.info_notes + "\n";
note_text += "|source=https://www.aozora.gr.jp/cards/<!--ここを消して青空文庫図書カードのURLを入力-->\n";
note_text += "|contributors=[[User:CES1596]]<!--あなたの利用者名-->\n";
note_text += "|proofreaders=\n";
note_text += "|progress=100%\n";
note_text += "|notes={{青空文庫|inputter=" + book_info.inputter + "|proofreader=" + book_info.proofreader + "}}\n";
note_text += "}}\n";
note_text += "<!--ここから上をノートに転記-->\n\n";
//
//ヘッダと本文を出力
//
var pub_text = "{{header\n";
pub_text += "|title=" + book_info.title + "\n";
pub_text += "|year=" + "\n";
pub_text += "|author="+ book_info.author +"\n";
pub_text += "|translator=" + book_info.translator + "\n";
pub_text += "|edition=yes\n";
pub_text += "|notes=\n";
pub_text += "* 書誌情報の詳細は[[{{TALKPAGENAME}}|議論ページ]]をご覧ください。\n";
pub_text += "{{DEFAULTSORT:<!--ここを消してソートキーを入力-->}}\n";
//<includeonly>
pub_text += "[[Category:青空文庫からインポートしたテキスト]]\n";
pub_text += "{{Textquality|100%}}\n";
pub_text += "}}\n";
pub_text += $new_elem.filter("div.main_text")[0].innerHTML;
pub_text += "<!--著作権の状況に応じて以下のタグを適切なものに置き換えてください-->\n{{PD-old}}\n";
//</includeonly>
$("#editform textarea").val(note_text + pub_text);
$("#aozora_btn").val("青空文庫コンバーター(XHTML) 変換完了");
});
//
// テキストを置換する関数
//
function replace_func(original_text, regix_text, after_text){
var regix_exp = new RegExp(regix_text, 'g');
return original_text.replace(regix_exp, after_text);
}
//
// テキストを検索する関数
//
function find_func(find_text, regix_text, pos){
var regix_exp = new RegExp(regix_text);
var regix_ret = find_text.match(regix_exp);
if(regix_ret != null){
return regix_ret[pos];
}else{
return "";
}
}
};