diff --git a/plugins/precise-volume/back.js b/plugins/precise-volume/back.js index 9546e077f5..93ebea9f61 100644 --- a/plugins/precise-volume/back.js +++ b/plugins/precise-volume/back.js @@ -13,6 +13,7 @@ module.exports = (win) => { // did-finish-load is called after all elements finished loading, including said listeners // Thats the reason the timing is controlled from main win.webContents.once("did-finish-load", () => { + win.webContents.send("restoreAddEventListener"); win.webContents.send("setupVideoPlayerVolumeMousewheel", !isEnabled("hide-video-player")); }); }; diff --git a/plugins/precise-volume/front.js b/plugins/precise-volume/front.js index 38fd5fc251..a1b30fe473 100644 --- a/plugins/precise-volume/front.js +++ b/plugins/precise-volume/front.js @@ -5,7 +5,6 @@ const { setOptions } = require("../../config/plugins"); function $(selector) { return document.querySelector(selector); } module.exports = (options) => { - overrideAddEventListener(); setupPlaybar(options); @@ -23,35 +22,9 @@ module.exports = (options) => { ipcRenderer.once("setupVideoPlayerVolumeMousewheel", (_event, toEnable) => { if (toEnable) setupVideoPlayerOnwheel(options); - // Restore original function after did-finish-load to avoid keeping Element.prototype altered - Element.prototype.addEventListener = Element.prototype._addEventListener; }); }; -// Override specific listeners of volume-slider by modifying Element.prototype -function overrideAddEventListener() { - // Events to ignore - const nativeEvents = ["mousewheel", "keydown", "keyup"]; - // Save native addEventListener - Element.prototype._addEventListener = Element.prototype.addEventListener; - // Override addEventListener to Ignore specific events in volume-slider - Element.prototype.addEventListener = function ( - type, - listener, - useCapture = false - ) { - if (this.tagName === "TP-YT-PAPER-SLIDER") { - // tagName of #volume-slider - for (const eventType of nativeEvents) { - if (eventType === type) { - return; - } - } - } //else - this._addEventListener(type, listener, useCapture); - }; -} - /** Add onwheel event to video player */ function setupVideoPlayerOnwheel(options) { $("#main-panel").addEventListener("wheel", event => { diff --git a/plugins/precise-volume/preload.js b/plugins/precise-volume/preload.js new file mode 100644 index 0000000000..bfd6a01c0c --- /dev/null +++ b/plugins/precise-volume/preload.js @@ -0,0 +1,28 @@ +const { ipcRenderer } = require("electron"); + +// Override specific listeners of volume-slider by modifying Element.prototype +function overrideAddEventListener() { + // Events to ignore + const nativeEvents = ["mousewheel", "keydown", "keyup"]; + // Save native addEventListener + Element.prototype._addEventListener = Element.prototype.addEventListener; + // Override addEventListener to Ignore specific events in volume-slider + Element.prototype.addEventListener = function (type, listener, useCapture = false) { + if (this.tagName === "TP-YT-PAPER-SLIDER") { // tagName of #volume-slider + for (const eventType of nativeEvents) { + if (eventType === type) { + return; + } + } + }//else + this._addEventListener(type, listener, useCapture); + }; +} + +module.exports = () => { + overrideAddEventListener(); + // Restore original function after did-finish-load to avoid keeping Element.prototype altered + ipcRenderer.once("restoreAddEventListener", () => { //called from Main to make sure page is completly loaded + Element.prototype.addEventListener = Element.prototype._addEventListener; + }); +}; diff --git a/preload.js b/preload.js index 1b9555e554..6cdaebdd10 100644 --- a/preload.js +++ b/preload.js @@ -9,6 +9,12 @@ const setupFrontLogger = require("./providers/front-logger"); const plugins = config.plugins.getEnabled(); plugins.forEach(([plugin, options]) => { + const preloadPath = path.join(__dirname, "plugins", plugin, "preload.js"); + fileExists(preloadPath, () => { + const run = require(preloadPath); + run(options); + }); + const actionPath = path.join(__dirname, "plugins", plugin, "actions.js"); fileExists(actionPath, () => { const actions = require(actionPath).actions || {};