MediaWiki:Common.js

提供:WikiNebula
2024年5月2日 (木) 09:35時点におけるHiratatomotaka (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
/* ここにあるすべての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: 入れ替えタグの解析に成功しました"
          );
        }else
          console.log("nebula_switch: 入れ替えタグがありません");
      }else
        console.log(
          "nebula_switch: 入れ替えタグが異常です"
          + 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 + "</root>", "text/xml"
      );
      var parser_error = doc.querySelector("parsererror");
      if (parser_error){
        this.failed_message = "構文エラーがありました。"
        + parser_error.innerText;
        return false;
      }

    }
  };

my_switch();