「MediaWiki:Common.js」の版間の差分
ナビゲーションに移動
検索に移動
Hiratatomotaka (トーク | 投稿記録) 編集の要約なし |
Hiratatomotaka (トーク | 投稿記録) 編集の要約なし |
||
| 53行目: | 53行目: | ||
return !["replace", "swap"].includes(node.nodeName.toLowerCase()); | return !["replace", "swap"].includes(node.nodeName.toLowerCase()); | ||
}; | }; | ||
var | var invalid_nodes = Array.from( | ||
dom_parsed.children[0].children | dom_parsed.children[0].children | ||
).filter(is_invalid_node); | ).filter(is_invalid_node); | ||
if ( | if (invalid_nodes.length){ | ||
this.failure_message = "\n不明な指示がありました\n" + | this.failure_message = "\n不明な指示がありました\n" \ | ||
+ invalid_nodes.map( | |||
function(node){return node.nodeName;} | |||
).toString(); | |||
console.log(this.failure_message); | console.log(this.failure_message); | ||
} | } | ||
2024年5月1日 (水) 22:10時点における版
/* ここにあるすべての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: 入れ替え後のページです");
var view_tab = document.getElementById("ca-view");
if (view_tab)
var is_view_mode = view_tab.classList.contains("selected");
else
var is_view_mode = false;
var is_not_ve_edit_mode = uri.searchParams.get("veaction") == null;
if (is_view_mode && is_not_ve_edit_mode){
console.log("nebula_switch: 閲覧モードです");
var switch_tag = document.getElementById("nebula_switch");
if (switch_tag){
var parser = new Parser(switch_tag); // 未定義
parser.parse();
if (parser.is_failed)
write_error("入れ替えタグが異常です。" + parser.failure_message);
// 未定義
}
else
console.log(
"nebula_switch: 入れ替えタグが見つかりませんでした"
);
}else
console.log(
"nebula_switch: 閲覧モードでないため、入れ替えは行いません"
);
}
}
// ECMAScript 5 の構文で書かなければならないため、
// class キーワードが使えない...
function Parser(switch_tag){
if (this === undefined)
throw new TypeError();
this.switch_tag = switch_tag;
}
Parser.prototype = {
constructor: Parser,
parse: function(){
var dom_parsed = (new DOMParser()).parseFromString(
"<root>" + this.switch_tag.innerText + "</root>",
"application/xml"
);
var is_invalid_node = function(node){
return !["replace", "swap"].includes(node.nodeName.toLowerCase());
};
var invalid_nodes = Array.from(
dom_parsed.children[0].children
).filter(is_invalid_node);
if (invalid_nodes.length){
this.failure_message = "\n不明な指示がありました\n" \
+ invalid_nodes.map(
function(node){return node.nodeName;}
).toString();
console.log(this.failure_message);
}
this.is_failed = false;
}
};
my_switch();