# nlフィルタ定義(文字コード判定用なのでこの行は削除しないこと)
# 2017/04/29
# 2017/05/01 再生終了後の画面での誤動作を解決
# 2017/05/14 ダブルクリック時には処理しない, フルスクリーン用の処理と共通化
# 2017/05/21 2017/05/14の修正をrevert．300msの遅延はストレスを与えることが分かったため．
#            ダブルクリックすると一瞬止まるけれどすぐに再開されるのでこの方が違和感が少ない．

[Script]
Name = 動画クリックで一時停止・再生(watchページ HTML5)
URL = www\.nicovideo\.jp/watch/
Require = "js-initial-watch-data"
Append<
window.addEventListener("load", function() {
var onClick = function(ret) {
  // クリック -> スペースキーで一時停止・再生
  ret.keycode = 0x20;
  ret.key = "Space";
};

var videoPlayer = document.getElementById("VideoPlayer");
videoPlayer.addEventListener("click", function(e) {
  var t = {};
  onClick(t);
  if (typeof KeyboardEvent === "function") {
    // Chrome, Firefox, Edge
    event = new KeyboardEvent("keydown", {bubbles: true, key: t.key, keyCode: t.keycode, which: t.keycode});
  } else {
    // IE
    event = document.createEvent("KeyboardEvent");
    event.initKeyboardEvent("keydown", true, false, window, t.key, 0, "", false, ""); 
  }
  // Chrome, IE Hack: http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key
  Object.defineProperty(event, 'keyCode', { get: function() { return t.keycode; } });
  Object.defineProperty(event, 'which', { get: function() { return t.keycode; } });
  this.dispatchEvent(event);
}); });
>


# ダブルクリック時にはクリックの処理しないバージョン
#   ダブルクリック判定のために300ms待機するのだけれど
#   そのクリックから一時停止までの300msがストレスになるので廃止
#[Script]
Name = 動画クリックで一時停止・再生(watchページ HTML5)
URL = www\.nicovideo\.jp/watch/
Require = "js-initial-watch-data"
Append<
window.addEventListener("load", function() {
var onClick = function(ret) {
  // クリック -> スペースキーで一時停止・再生
  ret.keycode = 0x20;
  ret.key = "Space";
  ret.press = true;
  return true;
};

var onDoubleClick = function(ret) {
  return false;
};

var mainRoutine = function(doubleClick) {
  var t = {};
  if (doubleClick) {
    if (!onDoubleClick(t)) return;
  } else {
    if (!onClick(t)) return;
  }
  ["keydown", "keypress", "keyup"].forEach(function(evname) {
    var event;
    if (evname == "keypress" && !t.press) return;
    if (typeof KeyboardEvent === "function") {
      // Chrome, Firefox, Edge
      event = new KeyboardEvent(evname, {bubbles: true, key: t.key, keyCode: t.keycode, which: t.keycode});
    } else {
      // IE
      event = document.createEvent("KeyboardEvent");
      event.initKeyboardEvent(evname, true, false, window, t.key, 0, "", false, ""); 
    }
    // Chrome, IE Hack: http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key
    Object.defineProperty(event, 'keyCode', { get: function() { return t.keycode; } });
    Object.defineProperty(event, 'which', { get: function() { return t.keycode; } });
    this.dispatchEvent(event);
  }.bind(this));
};

var videoPlayer = document.getElementById("VideoPlayer");
var clicked = null;
videoPlayer.addEventListener("click", function(e) {
  if (clicked) {
    clearTimeout(clicked);
    clicked = null;
    mainRoutine.bind(this)(true);
  } else {
    clicked = setTimeout(function() {
      clicked = null;
      mainRoutine.bind(this)(false);
    }.bind(this), 300);
  }
}); });
>

