From 8d44c9f21e1e098b42011ea2854671bfb4f294f0 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Wed, 31 Mar 2021 18:38:32 +0200 Subject: [PATCH] Adding aprils fools theme. --- META.json | 7 + .../public/dist/css/index.css | 327 ++++++++++++++++++ .../dist/img/peertube-dl-logo-fullsize.png | Bin 0 -> 67032 bytes .../public/dist/img/peertube-dl-logo.png | Bin 0 -> 3701 bytes .../public/dist/index.html | 76 ++++ .../public/src/application.js | 106 ++++++ .../new_look_aprils_fools/public/src/index.js | 10 + .../public/src/view/download_form.js | 35 ++ .../public/src/view/format_selector.js | 120 +++++++ .../public/src/view/loading_modal.js | 25 ++ .../public/src/view/poping_notice.js | 56 +++ .../public/src/view/video_container.js | 113 ++++++ .../public/webpack.config.js | 10 + 13 files changed, 885 insertions(+) create mode 100644 META.json create mode 100644 themes/new_look_aprils_fools/public/dist/css/index.css create mode 100644 themes/new_look_aprils_fools/public/dist/img/peertube-dl-logo-fullsize.png create mode 100644 themes/new_look_aprils_fools/public/dist/img/peertube-dl-logo.png create mode 100644 themes/new_look_aprils_fools/public/dist/index.html create mode 100644 themes/new_look_aprils_fools/public/src/application.js create mode 100644 themes/new_look_aprils_fools/public/src/index.js create mode 100644 themes/new_look_aprils_fools/public/src/view/download_form.js create mode 100644 themes/new_look_aprils_fools/public/src/view/format_selector.js create mode 100644 themes/new_look_aprils_fools/public/src/view/loading_modal.js create mode 100644 themes/new_look_aprils_fools/public/src/view/poping_notice.js create mode 100644 themes/new_look_aprils_fools/public/src/view/video_container.js create mode 100644 themes/new_look_aprils_fools/public/webpack.config.js diff --git a/META.json b/META.json new file mode 100644 index 0000000..4853289 --- /dev/null +++ b/META.json @@ -0,0 +1,7 @@ +{ + "version" : "0.0.1", + "name" : "Peertube-DL", + "author" : "sergiotarxz", + "abstract" : "A module for downloading videos from various webpages", + "license" : "AGPLv3" +} diff --git a/themes/new_look_aprils_fools/public/dist/css/index.css b/themes/new_look_aprils_fools/public/dist/css/index.css new file mode 100644 index 0000000..e3344ae --- /dev/null +++ b/themes/new_look_aprils_fools/public/dist/css/index.css @@ -0,0 +1,327 @@ +body { + height: 98vh; + + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + + background-color: #FF69B4; +} + +.application-container { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + + border-radius: 0.3rem; + + background-color: #C71585; + + padding: 1.5rem 3rem 1.5rem 3rem; +} + +.application-container form { + display: flex; + flex-flow: column; + justify-content: center; + + width: 100%; + padding: 1rem; +} + +.application-container h2 { + color: #ffffff; + font-weight: 400; + font-size: 1.6rem; +} + +.application-container input { + padding: 1rem; + + color: #C71585; + background-color: #FFB6C1; + + border-radius: 0.2rem; + border: 1px solid transparent; +} + +.application-container button { + margin-top: 1rem; + + color: #ffffff; + font-weight: bold; + + background-color: #059669; + + border-radius: 0.2rem; + border: 1px solid transparent; + + padding: 0.5rem 1rem 0.5rem 1rem; +} + +.application-container button:hover,.application-container button:focus { + background-color: #059; +} + +.application-container button, +.application-container input { + font-size: 0.9rem; +} + +.application-container.active { + display: flex; +} + +#poping-notice-content a { + text-decoration: none; + color: lime; +} + +#poping-notice-content a:hover,#poping-notice-content a:focus { + color: aqua; +} + +#poping-notice-container-bar { + display: flex; + justify-content: center; +} + +#close-poping-notice { + background-color: #059669; + padding: 0.5rem 5rem 0.5rem 5rem; + border-radius: 0.3rem; + text-decoration: none; + font-weight: bolder; + color: white; +} + +#close-poping-notice:hover,#close-poping-notice:focus { + background-color: #059; +} + +.modal { + position: fixed; + display: none; + color: white; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +#poping-notice { + padding: 3rem; + border-radius: 0.3rem; + background-color: #C71585; + color: white; + overflow-y: scroll; + width: 94%; + max-height: 70%; + flex-direction: column; + scrollbar-width: none; +} + +#modal-video-container,#modal-format-selector { + height: 100%; + width: 100%; + flex-flow: column; + align-items: center; + background-color: #FF69B4; +} + +#modal-format-selector h2 { + width: 100%; +} + +#modal-format-selector p { + width: 100%; +} + +.video-container-bar { + width: 99%; + height: 2rem; + padding-top: 1rem; + padding-bottom: 1rem; + display: flex; + justify-content: end; + margin-bottom: 1rem; +} + +.video-container-bar a { + padding: 1rem; + margin-right: 1rem; + border-radius: 0.3rem; + + display: flex; + align-items: center; + justify-content: center; + + background-color: #dc2626; +} + +.video-container-bar a:hover,.video-container-bar a:focus { + color: white; + background-color: grey; +} + + +#modal-video-container > #block { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; +} + +#download-video-container { + padding: 2rem; + + display: flex; + align-items: center; + justify-content: center; +} + +.button-download { + display: none; + border-radius: 0.3rem; + background-color: #059669; + text-decoration: none; + color: white; + user-select: none; + cursor: pointer; + height: 30px; + padding: 0 2rem; +} + +.button-download:hover,.button-download:focus { + background-color: #059; +} + +.button-download embed { + height: 100%; +} + +#download-video-loading.active { + height: 2rem; +} + +#download-video-container .button-download.active { + display: flex; + align-items: center; +} + +#modal-loading { + display: none; +} + +.modal { + --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), + 0 4px 6px -2px rgba(0, 0, 0, 0.05); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + overflow-y: scroll; +} + +#poping-notice.active { + display: flex; +} + +.modal.active { + display: flex; + scrollbar-width: none; +} + +.modal.active.active::-webkit-scrollbar { + display: none; +} + +#modal-loading { + display: none; + position: fixed; + top: 50%; + left: 50%; + height: 100%; + width: 100%; + transform: translate(-50%, -50%); + border: black 1px solid; + justify-content: right; + align-items: center; +} + +#modal-loading.active { + display: flex; +} + +#modal-loading embed { + width: 10%; +} + +#video { + width: 100%; + max-width: 636px; +} + +#video-container { + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; +} + +.format-list > div { + display: grid; + grid-column-gap: 10px; + grid-row-gap: 10px; + grid-template-areas: "a"; + grid-auto-columns: 99%; + margin: 1rem; +} + +.format-list > div > a { + border: 1px solid black; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.5rem; + padding-right: 5%; + padding-left: 5%; + text-decoration: none; + border-radius: 0.5rem; + background-color: #059669; + overflow-wrap: anywhere; +} + +.format-list > div > a:focus,.format-list > div > a:hover { + background-color: #059; +} + +.format-list > div > a:after { + padding-bottom: 100%; + display: block; + content: ""; +} + +.scale { + height: 1em; + width; 1em; +} + +@media (min-width: 600px) { + .format-list > div { + grid-template-areas: "a a"; + grid-auto-columns: 49.75%; + } +} + +@media (min-width: 805px) { + .format-list > div { + grid-template-areas: "a a a"; + grid-auto-columns: 33%; + } +} + +@media (min-width: 812px) { + #poping-notice { + width: 40%; + } +} diff --git a/themes/new_look_aprils_fools/public/dist/img/peertube-dl-logo-fullsize.png b/themes/new_look_aprils_fools/public/dist/img/peertube-dl-logo-fullsize.png new file mode 100644 index 0000000000000000000000000000000000000000..e52a8129d301760247396e84eb5ce4eba18f2315 GIT binary patch literal 67032 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 NSl?W)Oy^4YKLD4{YIXns literal 0 HcmV?d00001 diff --git a/themes/new_look_aprils_fools/public/dist/index.html b/themes/new_look_aprils_fools/public/dist/index.html new file mode 100644 index 0000000..6047c55 --- /dev/null +++ b/themes/new_look_aprils_fools/public/dist/index.html @@ -0,0 +1,76 @@ + + + + + + + Peertube-dl Web + + + + + + + + +
+

Peertube-dl Web Application

+
+ + +
+
+
+ + + + + diff --git a/themes/new_look_aprils_fools/public/src/application.js b/themes/new_look_aprils_fools/public/src/application.js new file mode 100644 index 0000000..2509e11 --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/application.js @@ -0,0 +1,106 @@ +"use strict"; + +import { PopingNotice } from './view/poping_notice.js'; +import { DownloadForm } from './view/download_form.js'; +import { LoadingModal } from './view/loading_modal.js'; +import { VideoContainer } from './view/video_container.js'; +import { FormatSelector } from './view/format_selector.js'; + +class Application { + constructor() { + this.poping_notice = new PopingNotice(); + this.download_form = new DownloadForm(this.onDownloadFormGot.bind(this)); + this.loading_modal = new LoadingModal(); + this.video_container = new VideoContainer(); + this.format_selector = new FormatSelector(); + } + + init() { + this.popingNotice.setVisible(true); + } + + onDownloadFormGot(url) { + this.dispatchURL(url); + } + + dispatchURL(url, format) { + this.loadingModal.setVisible(true); + let error_str; + let success = this.queryAPI(url, format).then( (response) => { + if ( response.options !== undefined && response.options.list_formats !== undefined && response.options.list_formats ) { + if ( response.formats === undefined + || response.formats.audio_formats === undefined + || response.formats.video_formats === undefined ) { + throw 'Format object is not valid.'; + } + this.formatSelector.prepareFormatSelector( + response.title, response.description, + response.formats.audio_formats, response.formats.video_formats, + ( id ) => { + this.loadingModal.setVisible(true); + this.dispatchURL(url, id); + }); + this.formatSelector.setVisible(true); + this.loadingModal.setVisible(false); + } else { + this.videoContainer.onCanPlay(this.onCanPlayVideoContainer.bind(this)); + this.videoContainer.setURLVideo(response.url); + this.videoContainer.setFilename(response.filename); + } + }).catch( (error) => { + error_str = error.toString(); + this.loadingModal.setVisible(false); + let input_url = document.createElement('a'); + input_url.href = url; + input_url.innerText = url; + let issues_url = document.createElement('a'); + issues_url.href = 'https://gitea.sergiotarxz.freemyip.com/sergiotarxz/Peertube-dl/issues'; + issues_url.innerText = 'here'; + this.popingNotice.setMessage( [ 'The url ', input_url, ' is not supported, the error was: ', error_str , ' if you think this is an error, report it ', issues_url, '.' ]); + this.popingNotice.setVisible(true); +}); + } + + onCanPlayVideoContainer() { + this.videoContainer.setVisible(true); + this.loadingModal.setVisible(false); + } + + async queryAPI(url, format) { + let request = { url: url }; + if (format !== undefined) + request.format = format; + const response = await fetch('/api', { + method: 'POST', + mode: 'cors', + cache: 'no-cache', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request), + }); + return response.json(); + } + + get formatSelector() { + return this.format_selector; + } + + get videoContainer() { + return this.video_container; + } + + get downloadForm() { + return this.download_form; + } + + get popingNotice() { + return this.poping_notice; + } + + get loadingModal() { + return this.loading_modal; + } +} + +export { Application }; diff --git a/themes/new_look_aprils_fools/public/src/index.js b/themes/new_look_aprils_fools/public/src/index.js new file mode 100644 index 0000000..6ea3341 --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/index.js @@ -0,0 +1,10 @@ +"use strict"; + +import { Application } from './application.js'; + +window.addEventListener('load', (event) => { + let application = new Application(); + application.init(); +}); + + diff --git a/themes/new_look_aprils_fools/public/src/view/download_form.js b/themes/new_look_aprils_fools/public/src/view/download_form.js new file mode 100644 index 0000000..74f1e55 --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/view/download_form.js @@ -0,0 +1,35 @@ +"use strict"; + +class DownloadForm { + constructor(callback) { + this.query_selector = '#download-form'; + this.callback = (event) => { + event.preventDefault(); + callback(this.downloadFormUrl.value); + }; + this.addEventListeners(); + } + + addEventListeners() { + this.downloadFormButton.addEventListener('click', this.callback); + this.element.addEventListener('submit', this.callback); + } + + get downloadFormButton() { + return this.element.querySelector('#download-form-button'); + } + + get downloadFormUrl() { + return this.element.querySelector('#download-form-url'); + } + + get querySelector() { + return this.query_selector; + } + + get element() { + return document.querySelector(this.querySelector); + } +} + +export { DownloadForm }; diff --git a/themes/new_look_aprils_fools/public/src/view/format_selector.js b/themes/new_look_aprils_fools/public/src/view/format_selector.js new file mode 100644 index 0000000..fb51107 --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/view/format_selector.js @@ -0,0 +1,120 @@ +"use strict"; + +class FormatSelector { + constructor() { + this.query_selector = '#modal-format-selector'; + this.addEventListeners(); + } + + appendFormat(container, object, is_video, callback) { + let a = document.createElement('a'); + let br = function() { return document.createElement('br') }; + let inner_text = []; + let muted_video = false; + if ( is_video ) { + if ( object.audioSampleRate === undefined ) { + muted_video = true; + } + inner_text.push('Id: ' + object.id); + inner_text.push(br()); + inner_text.push('Format: ' + object.mimeType); + inner_text.push(br()); + inner_text.push('QualityLabel: ' + object.qualityLabel + "p"); + inner_text.push(br()); + inner_text.push('Bitrate: ' + object.bitrate); + inner_text.push(br()); + inner_text.push( ( muted_video) ? + "No audio. " : + 'AudioSampleRate: ' + object.audioSampleRate + ); + } else { + inner_text.push('Id: ' + object.id + "\n"); + inner_text.push(br()); + inner_text.push('Format: ' + object.mimeType); + inner_text.push(br()); + inner_text.push('AudioSampleRate: ' + object.audioSampleRate); + inner_text.push(br()); + inner_text.push('Bitrate: ' + object.bitrate); + } + + a.addEventListener( 'click', (event) => { + callback(object.id); + }); + if (muted_video) { + let img_muted_video = document.createElement('img'); + img_muted_video.classList.add('mute_img'); + img_muted_video.classList.add('scale'); + img_muted_video.src = 'img/audio_muted.svg'; + inner_text.push(img_muted_video); + } + + for (let text of inner_text) { + if (typeof text === "string" + || text instanceof String) { + text = document.createTextNode(text); + a.appendChild(text); + } else if ( text instanceof Node) { + a.appendChild(text); + } else { + throw ('Text is not a instance of Node nor a String'); + } + } + + container.appendChild(a); + } + + prepareFormatSelector(title, description, audio_formats, video_formats, callback) { + this.titleFormatSelector.innerText = title; + this.descriptionFormatSelector.innerText = description; + this.videoFormats.innerHTML = ''; + this.audioFormats.innerHTML = ''; + for ( let x of audio_formats) { + this.appendFormat(this.audioFormats, x, false, callback); + } + for ( let x of video_formats ) { + this.appendFormat(this.videoFormats, x, true, callback); + } + } + + setVisible(option) { + if (option) { + this.element.classList.add('active'); + } else { + this.element.classList.remove('active'); + } + } + + addEventListeners() { + this.closeFormatSelector.addEventListener('click', (event) => { this.setVisible(false); }); + } + + get videoFormats() { + return this.element.querySelector('.video-formats'); + } + + get audioFormats() { + return this.element.querySelector('.audio-formats'); + } + + get titleFormatSelector() { + return this.element.querySelector('h2'); + } + + get descriptionFormatSelector() { + return this.element.querySelector('p'); + } + + get closeFormatSelector() { + return this.element.querySelector('#close-modal-format-selector'); + } + + get element() { + return document.querySelector(this.querySelector); + } + + get querySelector() { + return this.query_selector; + } +} + +export { FormatSelector }; diff --git a/themes/new_look_aprils_fools/public/src/view/loading_modal.js b/themes/new_look_aprils_fools/public/src/view/loading_modal.js new file mode 100644 index 0000000..10ae7bc --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/view/loading_modal.js @@ -0,0 +1,25 @@ +"use strict"; + +class LoadingModal { + constructor() { + this.query_selector = '#modal-loading'; + } + + setVisible(option) { + if (option) { + this.element.classList.add('active'); + } else { + this.element.classList.remove('active'); + } + } + + get element() { + return document.querySelector(this.querySelector); + } + + get querySelector() { + return this.query_selector; + } +} + +export { LoadingModal }; diff --git a/themes/new_look_aprils_fools/public/src/view/poping_notice.js b/themes/new_look_aprils_fools/public/src/view/poping_notice.js new file mode 100644 index 0000000..69156af --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/view/poping_notice.js @@ -0,0 +1,56 @@ +"use strict"; + +class PopingNotice { + constructor() { + this.query_selector = '#poping-notice'; + this.closePopingNotice.addEventListener('click', (event) => { + this.setVisible(false); + }); + } + + setVisible(option) { + if (option) { + this.element.classList.add('active'); + } else { + this.element.classList.remove('active'); + } + } + + setMessage(message) { + if (!message instanceof Array) + throw 'Message is not instance of Array.'; + let p = document.createElement('p'); + for (let node of message) { + if (typeof node === "string" + || node instanceof String) { + node = document.createTextNode(node); + p.appendChild(node); + } else if ( node instanceof Node) { + p.appendChild(node); + } else { + throw ('Node is not a instance of Node nor a String'); + } + } + this.popingNoticeContent.innerHTML = ''; + this.popingNoticeContent.appendChild(p); + + } + + get querySelector() { + return this.query_selector; + } + + get element() { + return document.querySelector(this.querySelector); + } + + get popingNoticeContent() { + return this.element.querySelector('#poping-notice-content'); + } + + get closePopingNotice() { + return this.element.querySelector('#close-poping-notice'); + } +} + +export { PopingNotice }; diff --git a/themes/new_look_aprils_fools/public/src/view/video_container.js b/themes/new_look_aprils_fools/public/src/view/video_container.js new file mode 100644 index 0000000..d29f4b5 --- /dev/null +++ b/themes/new_look_aprils_fools/public/src/view/video_container.js @@ -0,0 +1,113 @@ +"use strict"; + +class VideoContainer { + constructor() { + this.query_selector = '#modal-video-container'; + this.addEventListeners(); + } + + setVisible(option) { + if (option) { + this.element.classList.add('active'); + } else { + this.video.pause(); + this.element.classList.remove('active'); + this.downloadVideoPrepare.classList.add('active'); + this.downloadVideoLoading.classList.remove('active'); + this.downloadVideo.classList.remove('active'); + } + } + + addEventListeners() { + this.downloadVideoPrepare.addEventListener('click', this.downloadPrepareHandler.bind(this)); + this.closeAndResetVideoContainer.addEventListener('click', (event) => { + this.setVisible(false); + }); + } + + downloadPrepareHandler(event) { + this.downloadVideoPrepare.classList.remove('active'); + this.downloadVideoLoading.classList.add('active'); + this.generateBlobVideo(this.URLVideo).then( blob => { + this.downloadVideo.href = URL.createObjectURL(blob); + this.downloadVideo.download = this.filename; + this.downloadVideoLoading.classList.remove('active'); + this.downloadVideo.classList.add('active'); + }); + + } + + async generateBlobVideo(url) { + const blob = await fetch(url, { mode: 'cors', }) + .then(res => res.blob()) + .catch( err => this.generateBlobVideoByProxy(url) ); + return blob; + } + + async generateBlobVideoByProxy(url) { + const blob = await fetch( '/proxy_to_get', { + method: 'POST', + mode: 'cors', + cache: 'no-cache', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({url: url}), + } + ).then(res => res.blob()); + return blob; + } + + onCanPlay(callback) { + video.addEventListener('canplay', (event) => { + callback(); + }); + } + + setURLVideo(url) { + this.url_video = url; + video.src = url; + } + + setFilename(filename) { + this.filename = filename; + } + + get closeAndResetVideoContainer() { + return this.element.querySelector('#close-and-reset-video-container'); + } + + get downloadVideo() { + return this.element.querySelector('#download-video'); + } + + get URLVideo() { + return this.url_video; + } + + get closeAndResetVideoContainer() { + return this.element.querySelector('#close-and-reset-video-container'); + } + + get downloadVideoLoading() { + return this.element.querySelector('#download-video-loading'); + } + + get downloadVideoPrepare() { + return this.element.querySelector('#download-video-prepare'); + } + + get video() { + return this.element.querySelector('#video'); + } + + get element() { + return document.querySelector(this.querySelector); + } + + get querySelector() { + return this.query_selector; + } +} + +export { VideoContainer }; diff --git a/themes/new_look_aprils_fools/public/webpack.config.js b/themes/new_look_aprils_fools/public/webpack.config.js new file mode 100644 index 0000000..bc82144 --- /dev/null +++ b/themes/new_look_aprils_fools/public/webpack.config.js @@ -0,0 +1,10 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.js', + devtool: 'source-map', + output: { + filename: 'peertube-dl-web.js', + path: path.resolve(__dirname, 'dist/js'), + }, +};