Created
December 25, 2020 12:29
-
-
Save vakho10/955bd9906fa8b2e44688b263cce1ffbd to your computer and use it in GitHub Desktop.
Creates a button to widen and shorten the video container on IMovies.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name imovies_video_widener | |
// @namespace Violentmonkey Scripts | |
// @match https://www.imovies.cc/ka/movies/** | |
// @grant none | |
// @version 1.0 | |
// @author Vakho10 | |
// @description Creates a button to widen and shorten the video container on IMovies.cc | |
// ==/UserScript== | |
(function () { | |
'use strict'; | |
function waitForElement(query, maxTries = 10, intervalTime = 500, delayTime = 250) { | |
return new Promise((resolve, reject) => { | |
let tryNumber = 1; | |
let handle = setInterval(() => { | |
const element = document.querySelector(query); | |
if (element) { | |
console.log(`Found query: '${query}', after ${tryNumber} tries.`); | |
clearInterval(handle); | |
handle = 0; | |
setTimeout(() => resolve(element), delayTime); | |
} else if (tryNumber >= maxTries) { | |
console.log(`End of ${tryNumber} tries.`); | |
clearInterval(handle); | |
handle = 0; | |
reject(new Error(`Couldn't locate the query: '${query}', after ${tryNumber} tries!`)); | |
} else { | |
tryNumber += 1; | |
console.log(`Increased try number for: '${query}', to ${tryNumber}.`); | |
} | |
}, intervalTime); | |
}); | |
} | |
// Updates the button styles when the mode changes | |
function updateToggleButtonStyle(btn) { | |
const htmlElement = document.querySelector('html'); | |
if (htmlElement && htmlElement.classList.contains('dark')) { | |
btn.classList.remove('btn-light'); | |
btn.classList.add('btn-outline-light', 'border-0'); | |
} else { | |
btn.classList.remove('btn-outline-light', 'border-0'); | |
btn.classList.add('btn-light'); | |
} | |
} | |
function process(elements) { | |
const moviePlayerContainer = elements[0]; | |
const movieActionsList = elements[1]; | |
const nightModeSwitch = elements[2]; | |
// Create and add button to movie actions' list | |
const div = document.createElement('div'); | |
div.className = 'mr-3'; | |
const btnToggle = document.createElement('button'); | |
btnToggle.setAttribute('type', 'button'); | |
btnToggle.classList.add('btn'); | |
updateToggleButtonStyle(btnToggle); | |
const btnToggleContent = document.createTextNode('გაგანიერება'); | |
btnToggle.appendChild(btnToggleContent); | |
div.appendChild(btnToggle); | |
movieActionsList.firstChild.prepend(div); | |
// Attach event listener to the newly created toggle button | |
btnToggle.addEventListener('click', e => { | |
const containerToChange = moviePlayerContainer.querySelector('.row > .player-column'); | |
let classFrom = 'col-md-8', classTo = 'col-md-12'; | |
if (containerToChange.classList.contains(classTo)) { | |
const tmpClassName = classFrom; | |
classFrom = classTo; | |
classTo = tmpClassName; | |
} | |
containerToChange.classList.replace(classFrom, classTo); | |
let textTo = 'გაგანიერება'; | |
if (classTo == 'col-md-12') { | |
textTo = 'დაპატარავება'; | |
} | |
e.target.innerText = textTo; | |
}); | |
// Attach event listener to nightmode switch | |
nightModeSwitch.addEventListener('click', e => { | |
setTimeout(() => updateToggleButtonStyle(btnToggle), 250); // Delayed execution... | |
}); | |
} | |
Promise.all([ | |
waitForElement('div.player-container.movie-player-container'), | |
waitForElement('div.movie-actions-list'), | |
waitForElement('div.night-mode-switch') | |
]).then((elements) => process(elements)).catch(err => console.error('Error resolving promises!', err)); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment