Vimeo Download

Adds a download button to the Vimeo video player. This is a rewrite of "Vimeo Embed Download" originally created by aleixdev (https://greasyfork.org/en/scripts/376551).

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        Vimeo Download
// @namespace   http://tampermonkey.net/
// @version     3.2
// @description Adds a download button to the Vimeo video player. This is a rewrite of "Vimeo Embed Download" originally created by aleixdev (https://greasyfork.org/en/scripts/376551).
// @author      You
// @match       https://vimeo.com/*
// @match       https://player.vimeo.com/video/*
// @icon        https://www.google.com/s2/favicons?sz=64&domain=vimeo.com
// @unwrap
// ==/UserScript==
(function() {
    if (document.title === 'VimeUhOh') {
        return;
    }

    // function getPlayer() {
    //     if (window.playerConfig) {
    //         return window.playerConfig;
    //     }
    //     const clips = window.vimeo.clips;
    //     const videoId = Object.keys(clips).at();
    //     if (!videoId) {
    //         throw new Error('[Vimeo Download] Error retrieving video meta data:', clips);
    //     }
    //     return clips[videoId]
    // }
    // const { request, video } = getPlayer();
    // console.log(request.files);
    // const streams = request.files.progressive.sort((a, b) => b.width - a.width);
    // console.log(streams);
    // const { url, quality } = streams[0];
    const div = document.createElement('div');
    document.querySelectorAll('track[srclang]').forEach(subtitle => {
        const element = Object.assign(document.createElement('button'), {
            innerHTML: subtitle.srclang,
            title: subtitle.srclang,
            style: 'display: inline-block; font-size: 1.75em; margin: -0.25em 0 0 0.3em; color: rgb(68,187,255)',
            onclick: function() {
                this.disabled = true;
                this.innerText = 'Wait';
                fetch(subtitle.src)
                    .then(response => response.blob())
                    .then(file => {
                    const tempUrl = URL.createObjectURL(file);
                    const aTag = document.createElement("a");
                    aTag.href = tempUrl;
                    aTag.download = 'Subtitle ' + subtitle.srclang + '.vtt'
                    document.body.appendChild(aTag);
                    aTag.click();
                    URL.revokeObjectURL(tempUrl);
                    aTag.remove();
                }).finally(() => {
                    this.disabled = false;
                    this.innerText = subtitle.srclang
                });
            }
        })
        div.append(element);
    })

    // const button = Object.assign(document.createElement('button'), {
    //     innerHTML: 'Download',
    //     title: 'Download ' + quality,
    //     style: 'display: inline-block; font-size: 1.75em; margin: -0.25em 0 0 0.3em; color: rgb(68,187,255)',
    //     onclick: function() {
    //         console.log(url, quality);
    //         this.disabled = true;
    //         this.innerText = 'Wait';
    //         fetch(url)
    //             .then(response => response.blob())
    //             .then(file => {
    //             const tempUrl = URL.createObjectURL(file);
    //             const aTag = document.createElement("a");
    //             aTag.href = tempUrl;
    //             aTag.download = name
    //             document.body.appendChild(aTag);
    //             aTag.click();
    //             URL.revokeObjectURL(tempUrl);
    //             aTag.remove();
    //         }).finally(() => {
    //             this.disabled = false;
    //             this.innerText = 'Download'
    //         });
    //     }
    // })
    const interval = setInterval(function() {
        if (!document.querySelector('.vp-controls')) return;
        clearInterval(interval)
        document.querySelector('.vp-controls').append(/*button,*/ div);
    }, 100);
})();