「MediaWiki:Common.js」の版間の差分
ナビゲーションに移動
検索に移動
Hiratatomotaka (トーク | 投稿記録) 編集の要約なし |
Hiratatomotaka (トーク | 投稿記録) 編集の要約なし |
||
16行目: | 16行目: | ||
"nebula_switch: 入れ替えタグの解析に成功しました" | "nebula_switch: 入れ替えタグの解析に成功しました" | ||
); | ); | ||
nebula_run(parser.doc); | |||
}else{ | }else{ | ||
console.log("nebula_switch: 入れ替えタグがありません"); | console.log("nebula_switch: 入れ替えタグがありません"); | ||
75行目: | 77行目: | ||
return false; | return false; | ||
} | } | ||
this.doc = doc; | |||
return true; | return true; | ||
85行目: | 88行目: | ||
content_node.innerHTML = | content_node.innerHTML = | ||
"<h1>エラー: 男女入れ替えスイッチでエラー</h1>" + message | "<h1>エラー: 男女入れ替えスイッチでエラー</h1>" + message | ||
} | |||
function nebula_run(doc){ | |||
Array.from(doc.children[0].children).forEach(function(node){ | |||
console.log(node.nodeName); | |||
}); | |||
} | } | ||
my_switch(); | my_switch(); |
2024年5月2日 (木) 10:36時点における版
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ function my_switch(){ var uri = new URL(window.location.href); var is_switched = uri.searchParams.get("nebula_switch") != null; if (is_switched){ console.log("nebula_switch: 入れ替え後のページです"); if (is_view_mode(uri)){ console.log("nebula_switch: 閲覧モードです"); var parser = new Switch_parser(); if (parser.parse(document.getElementById("nebula_switch"))){ if (parser.tag_exists){ console.log( "nebula_switch: 入れ替えタグの解析に成功しました" ); nebula_run(parser.doc); }else{ console.log("nebula_switch: 入れ替えタグがありません"); } }else{ console.log("nebula_switch: 入れ替えタグが異常です"); nebula_write_error(parser.failed_message); } }else console.log( "nebula_switch: 閲覧モードでないため、入れ替えは行いません" ); } } function is_view_mode(uri){ var view_tab = document.getElementById("ca-view"); if (view_tab) var is_view_mode_selected = view_tab.classList.contains("selected"); else var is_view_mode_selected = false; var is_not_ve_edit_mode = uri.searchParams.get("veaction") == null; return is_view_mode_selected && is_not_ve_edit_mode; } // ES5 なので class 構文は使えない・・・ function Switch_parser(){ if (this === null) throw new TypeError(); } Switch_parser.prototype = { constructor: Switch_parser, parse: function(switch_tag){ // パース成功の真偽値を返却する if (switch_tag == null){ this.tag_exists = false; return true; } this.tag_exists = true; if (!window.DOMParser){ this.failed_message = "DOMParser が有効ではありません。" + "お使いのブラウザで DOMParser を有効にしてください。"; return false; } var dom_parser = new DOMParser(); var doc = dom_parser.parseFromString( "<root>" + switch_tag.innerText + "</root>", "text/xml" ); var parser_error = doc.querySelector("parsererror"); if (parser_error){ this.failed_message = "入れ替えタグに構文エラーがありました\n" + parser_error.innerHTML; return false; } this.doc = doc; return true; } }; function nebula_write_error(message){ var content_node = document.getElementsByClassName("mw-parser-output")[0]; content_node.innerHTML = "<h1>エラー: 男女入れ替えスイッチでエラー</h1>" + message } function nebula_run(doc){ Array.from(doc.children[0].children).forEach(function(node){ console.log(node.nodeName); }); } my_switch();