mirror of
https://github.com/iv-org/invidious.git
synced 2024-10-01 05:25:56 +00:00
Add configuration option for user to toggle scrollable playback speed
Give user ability to select in preferencesif they want to control speed granually using scrollwheel.
This commit is contained in:
parent
3512a3fe2b
commit
c3c73cd672
@ -579,7 +579,7 @@ function toggle_fullscreen() {
|
|||||||
player.isFullscreen() ? player.exitFullscreen() : player.requestFullscreen();
|
player.isFullscreen() ? player.exitFullscreen() : player.requestFullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
function increase_playback_rate(steps) {
|
function increase_playback_rate(steps, scrollAction=false) {
|
||||||
let speed = player.playbackRate();
|
let speed = player.playbackRate();
|
||||||
|
|
||||||
// Considering 1/-1 as step against pre-defined speeds,
|
// Considering 1/-1 as step against pre-defined speeds,
|
||||||
@ -592,9 +592,15 @@ function increase_playback_rate(steps) {
|
|||||||
else {
|
else {
|
||||||
const maxIndex = options.playbackRates.length - 1;
|
const maxIndex = options.playbackRates.length - 1;
|
||||||
const curIndex = options.playbackRates.indexOf(player.playbackRate());
|
const curIndex = options.playbackRates.indexOf(player.playbackRate());
|
||||||
let newIndex = curIndex + steps;
|
// Reset speed if maximum selected
|
||||||
newIndex = helpers.clamp(newIndex, 0, maxIndex);
|
if (curIndex == maxIndex) {
|
||||||
speed = options.playbackRates[newIndex]
|
speed = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
let newIndex = curIndex + steps;
|
||||||
|
newIndex = helpers.clamp(newIndex, 0, maxIndex);
|
||||||
|
speed = options.playbackRates[newIndex];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -744,16 +750,17 @@ addEventListener('keydown', function (e) {
|
|||||||
|
|
||||||
var speedHover = false;
|
var speedHover = false;
|
||||||
var speedSelector = pEl.querySelector('.vjs-playback-rate');
|
var speedSelector = pEl.querySelector('.vjs-playback-rate');
|
||||||
|
var allowscroll = video_data.preferences.toggle_speed_onscroll;
|
||||||
if (speedSelector !== null) {
|
if (speedSelector !== null) {
|
||||||
speedSelector.onmouseover = function () { speedHover = true; };
|
speedSelector.onmouseover = function () { speedHover = true; };
|
||||||
speedSelector.onmouseout = function () { speedHover = false; };
|
speedSelector.onmouseout = function () { speedHover = false; };
|
||||||
// Increase speed by a single step when pre-defined, or reset
|
// Increase speed by a single step, or reset when scrollable
|
||||||
speedSelector.onclick = function() { increase_playback_rate(1); };
|
speedSelector.onclick = function() { allowscroll ? player.playbackRate(video_data.preferences.speed) : increase_playback_rate(1); };
|
||||||
}
|
}
|
||||||
|
|
||||||
function mouseScroll(event) {
|
function mouseScroll(event) {
|
||||||
// When controls are disabled, hotkeys will be disabled as well
|
// When controls are disabled, hotkeys will be disabled as well
|
||||||
if (!player.controls() || !speedHover) return;
|
if (!player.controls() || !speedHover || !allowscroll) return;
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var wheelMove = event.wheelDelta || -event.detail;
|
var wheelMove = event.wheelDelta || -event.detail;
|
||||||
@ -762,8 +769,8 @@ addEventListener('keydown', function (e) {
|
|||||||
increase_playback_rate(speedSign * 0.10); // increase speed by .10
|
increase_playback_rate(speedSign * 0.10); // increase speed by .10
|
||||||
}
|
}
|
||||||
|
|
||||||
player.on('mousewheel', mouseScroll);
|
player.on('mousewheel', mouseScroll);
|
||||||
player.on('DOMMouseScroll', mouseScroll);
|
player.on('DOMMouseScroll', mouseScroll);
|
||||||
}());
|
}());
|
||||||
|
|
||||||
// Since videojs-share can sometimes be blocked, we defer it until last
|
// Since videojs-share can sometimes be blocked, we defer it until last
|
||||||
|
@ -36,6 +36,7 @@ struct ConfigPreferences
|
|||||||
property related_videos : Bool = true
|
property related_videos : Bool = true
|
||||||
property sort : String = "published"
|
property sort : String = "published"
|
||||||
property speed : Float32 = 1.0_f32
|
property speed : Float32 = 1.0_f32
|
||||||
|
property toggle_speed_onscroll : Bool = false
|
||||||
property thin_mode : Bool = false
|
property thin_mode : Bool = false
|
||||||
property unseen_only : Bool = false
|
property unseen_only : Bool = false
|
||||||
property video_loop : Bool = false
|
property video_loop : Bool = false
|
||||||
|
@ -54,6 +54,10 @@ module Invidious::Routes::PreferencesRoute
|
|||||||
speed = env.params.body["speed"]?.try &.as(String).to_f32?
|
speed = env.params.body["speed"]?.try &.as(String).to_f32?
|
||||||
speed ||= CONFIG.default_user_preferences.speed
|
speed ||= CONFIG.default_user_preferences.speed
|
||||||
|
|
||||||
|
toggle_speed_onscroll = env.params.body["toggle_speed_onscroll"]?.try &.as(String)
|
||||||
|
toggle_speed_onscroll ||= "off"
|
||||||
|
toggle_speed_onscroll = toggle_speed_onscroll == "on"
|
||||||
|
|
||||||
player_style = env.params.body["player_style"]?.try &.as(String)
|
player_style = env.params.body["player_style"]?.try &.as(String)
|
||||||
player_style ||= CONFIG.default_user_preferences.player_style
|
player_style ||= CONFIG.default_user_preferences.player_style
|
||||||
|
|
||||||
@ -167,6 +171,7 @@ module Invidious::Routes::PreferencesRoute
|
|||||||
related_videos: related_videos,
|
related_videos: related_videos,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
speed: speed,
|
speed: speed,
|
||||||
|
toggle_speed_onscroll: toggle_speed_onscroll,
|
||||||
thin_mode: thin_mode,
|
thin_mode: thin_mode,
|
||||||
unseen_only: unseen_only,
|
unseen_only: unseen_only,
|
||||||
video_loop: video_loop,
|
video_loop: video_loop,
|
||||||
|
@ -49,6 +49,7 @@ struct Preferences
|
|||||||
@[JSON::Field(converter: Preferences::ProcessString)]
|
@[JSON::Field(converter: Preferences::ProcessString)]
|
||||||
property sort : String = CONFIG.default_user_preferences.sort
|
property sort : String = CONFIG.default_user_preferences.sort
|
||||||
property speed : Float32 = CONFIG.default_user_preferences.speed
|
property speed : Float32 = CONFIG.default_user_preferences.speed
|
||||||
|
property toggle_speed_onscroll : Bool = CONFIG.default_user_preferences.toggle_speed_onscroll
|
||||||
property thin_mode : Bool = CONFIG.default_user_preferences.thin_mode
|
property thin_mode : Bool = CONFIG.default_user_preferences.thin_mode
|
||||||
property unseen_only : Bool = CONFIG.default_user_preferences.unseen_only
|
property unseen_only : Bool = CONFIG.default_user_preferences.unseen_only
|
||||||
property video_loop : Bool = CONFIG.default_user_preferences.video_loop
|
property video_loop : Bool = CONFIG.default_user_preferences.video_loop
|
||||||
|
@ -46,6 +46,11 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="pure-control-group">
|
||||||
|
<label for="toggle_speed_onscroll"><%= translate(locale, "preferences_toggle_speed_onscroll_label") %></label>
|
||||||
|
<input name="toggle_speed_onscroll" id="toggle_speed_onscroll" type="checkbox" <% if preferences.toggle_speed_onscroll %>checked<% end %>>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="pure-control-group">
|
<div class="pure-control-group">
|
||||||
<label for="quality"><%= translate(locale, "preferences_quality_label") %></label>
|
<label for="quality"><%= translate(locale, "preferences_quality_label") %></label>
|
||||||
<select name="quality" id="quality">
|
<select name="quality" id="quality">
|
||||||
|
Loading…
Reference in New Issue
Block a user