download_shorts.js
· 2.7 KiB · JavaScript
Raw
(function() {
'use strict';
function addButton() {
// Убираем дубликаты
if ($('.download-shorts-button').length) return;
// Создаём кнопку вручную с иконкой скачивания
var button = $(`
<div class="player-control__button selector download-shorts-button">
<svg width="38" height="38" viewBox="0 0 38 38" aria-hidden="true">
<path d="M19 6v13m-7-7l7 7 7-7m-14 14c0 4.97 4.03 9 9 9s9-4.03 9-9-4.03-9-9-9-9 4.03-9 9z" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Скачать</span>
</div>
`);
// Обработчик нажатия (hover:enter — стандарт для Lampa, работает и на ПК, и на ТВ)
button.on('hover:enter', function() {
// Получаем URL видео из тега <video>
var video = $('video')[0];
var url = video ? (video.currentSrc || video.src) : null;
// Запасной вариант через API Lampa
if (!url && Lampa.Player && Lampa.Player.video && Lampa.Player.video().url) {
url = Lampa.Player.video().url;
}
if (url && url.startsWith('http') && !url.includes('blob:')) {
var a = document.createElement('a');
a.href = url;
a.download = 'shorts_video.mp4';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
Lampa.Noty && Lampa.Noty.show('Скачивание начато!');
} else {
Lampa.Noty && Lampa.Noty.show('Прямой URL не найден (YouTube или защищённый поток)');
}
});
// Добавляем кнопку в правую часть панели плеера
$('.player-panel__right').append(button);
}
function removeButton() {
$('.download-shorts-button').remove();
}
// Основной listener на открытие/закрытие полноэкранного плеера
Lampa.Listener.follow('full', function(e) {
if (e.type === 'start') {
setTimeout(addButton, 1000); // Задержка, чтобы панель успела отрисоваться
} else {
removeButton();
}
});
// Если плеер уже открыт (для теста в консоли)
if ($('.player-panel').length) {
setTimeout(addButton, 1000);
}
})();
| 1 | (function() { |
| 2 | 'use strict'; |
| 3 | |
| 4 | function addButton() { |
| 5 | // Убираем дубликаты |
| 6 | if ($('.download-shorts-button').length) return; |
| 7 | |
| 8 | // Создаём кнопку вручную с иконкой скачивания |
| 9 | var button = $(` |
| 10 | <div class="player-control__button selector download-shorts-button"> |
| 11 | <svg width="38" height="38" viewBox="0 0 38 38" aria-hidden="true"> |
| 12 | <path d="M19 6v13m-7-7l7 7 7-7m-14 14c0 4.97 4.03 9 9 9s9-4.03 9-9-4.03-9-9-9-9 4.03-9 9z" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/> |
| 13 | </svg> |
| 14 | <span>Скачать</span> |
| 15 | </div> |
| 16 | `); |
| 17 | |
| 18 | // Обработчик нажатия (hover:enter — стандарт для Lampa, работает и на ПК, и на ТВ) |
| 19 | button.on('hover:enter', function() { |
| 20 | // Получаем URL видео из тега <video> |
| 21 | var video = $('video')[0]; |
| 22 | var url = video ? (video.currentSrc || video.src) : null; |
| 23 | |
| 24 | // Запасной вариант через API Lampa |
| 25 | if (!url && Lampa.Player && Lampa.Player.video && Lampa.Player.video().url) { |
| 26 | url = Lampa.Player.video().url; |
| 27 | } |
| 28 | |
| 29 | if (url && url.startsWith('http') && !url.includes('blob:')) { |
| 30 | var a = document.createElement('a'); |
| 31 | a.href = url; |
| 32 | a.download = 'shorts_video.mp4'; |
| 33 | document.body.appendChild(a); |
| 34 | a.click(); |
| 35 | document.body.removeChild(a); |
| 36 | Lampa.Noty && Lampa.Noty.show('Скачивание начато!'); |
| 37 | } else { |
| 38 | Lampa.Noty && Lampa.Noty.show('Прямой URL не найден (YouTube или защищённый поток)'); |
| 39 | } |
| 40 | }); |
| 41 | |
| 42 | // Добавляем кнопку в правую часть панели плеера |
| 43 | $('.player-panel__right').append(button); |
| 44 | } |
| 45 | |
| 46 | function removeButton() { |
| 47 | $('.download-shorts-button').remove(); |
| 48 | } |
| 49 | |
| 50 | // Основной listener на открытие/закрытие полноэкранного плеера |
| 51 | Lampa.Listener.follow('full', function(e) { |
| 52 | if (e.type === 'start') { |
| 53 | setTimeout(addButton, 1000); // Задержка, чтобы панель успела отрисоваться |
| 54 | } else { |
| 55 | removeButton(); |
| 56 | } |
| 57 | }); |
| 58 | |
| 59 | // Если плеер уже открыт (для теста в консоли) |
| 60 | if ($('.player-panel').length) { |
| 61 | setTimeout(addButton, 1000); |
| 62 | } |
| 63 | })(); |