2 * (C) Copyright 2012 Scott Jaderholm
3 * (C) Copyright 2013 Joren Van Onder
5 * Use, modification, and distribution are subject to the terms specified in the
9 require("content-buffer.js");
11 define_keymap("youtube_player_keymap", $display_name = "youtube-player");
13 function youtube_player_display_error_message (I, error_message) {
14 I.minibuffer.message(error_message + ", ensure html5 is enabled for youtube by visiting http://youtube.com/html5");
17 function youtube_player_change_speed (slower) {
21 // get settings control rows
22 var settings_control_rows = buf.document.querySelectorAll(".ytp-menu-row");
24 var speed_buttons = null;
26 for (var i = 0, n = settings_control_rows.length; i < n && ! speed_buttons; ++i) {
27 if (settings_control_rows[i].innerHTML.indexOf("Speed") != -1) {
28 speed_buttons = settings_control_rows[i].querySelectorAll(
29 ".ytp-drop-down-menu-content .ytp-drop-down-menu-button");
33 if (! speed_buttons) {
34 youtube_player_display_error_message(I, "No speed buttons found");
38 var current_speed_found = false;
39 for (var i = 0, n = speed_buttons.length; i < n; ++i) {
40 if (speed_buttons[i].className.indexOf("ytp-drop-down-menu-button-checked") != -1) {
42 current_speed_found = true;
44 if (slower && i != 0) {
45 dom_node_click(speed_buttons[i - 1], 1, 1);
46 } else if (! slower && i != speed_buttons.length - 1) {
47 dom_node_click(speed_buttons[i + 1], 1, 1);
54 if (! current_speed_found) {
55 youtube_player_display_error_message(I, "Current speed button not found");
60 function youtube_player_click_command (selector, error_message) {
63 var elem = buf.document.querySelector(selector);
65 dom_node_click(elem, 1, 1);
67 youtube_player_display_error_message(I, error_message);
71 interactive("youtube-player-play-or-pause",
72 "Click the Youtube html5 player play/pause button.",
73 youtube_player_click_command(".ytp-button-pause, .ytp-button-play",
74 "No play or pause button found"));
76 interactive("youtube-player-mute",
77 "Click the Youtube html5 player mute button.",
78 youtube_player_click_command("button.html5-volume-button",
79 "No mute button found"));
81 interactive("youtube-player-fullscreen",
82 "Click the Youtube html5 player fullscreen button.",
83 youtube_player_click_command(".ytp-button-fullscreen-enter, .ytp-button-fullscreen-exit",
84 "No fullscreen button found"));
86 interactive("youtube-player-speed-down",
87 "Slow down the Youtube html5 player.",
88 youtube_player_change_speed(true));
90 interactive("youtube-player-speed-up",
91 "Speed up the Youtube html5 player.",
92 youtube_player_change_speed(false));
94 define_key(youtube_player_keymap, "C-c return", "youtube-player-play-or-pause");
95 define_key(youtube_player_keymap, "C-c C-m", "youtube-player-mute");
96 define_key(youtube_player_keymap, "C-c C-f", "youtube-player-fullscreen");
97 define_key(youtube_player_keymap, "C-c C-[", "youtube-player-speed-down");
98 define_key(youtube_player_keymap, "C-c C-]", "youtube-player-speed-up");
100 define_keymaps_page_mode("youtube-player-mode",
101 build_url_regexp($domain = "youtube", $allow_www = true),
102 { normal: youtube_player_keymap },
103 $display_name = "Youtube-Player");
105 page_mode_activate(youtube_player_mode);
107 provide("youtube-player");