From 5495a37991e22429aebbdd79f6045efafa486f1b Mon Sep 17 00:00:00 2001 From: rizaldy Date: Sun, 19 May 2024 00:52:18 +0700 Subject: [PATCH] feat: v0.1.0 --- client/video-watch-client-plugin.js | 112 ++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 client/video-watch-client-plugin.js diff --git a/client/video-watch-client-plugin.js b/client/video-watch-client-plugin.js new file mode 100644 index 0000000..2e37dfd --- /dev/null +++ b/client/video-watch-client-plugin.js @@ -0,0 +1,112 @@ +function register({ registerHook }) { + registerHook({ + target: 'action:video-watch.player.loaded', + handler: ({ peertubeHelpers, player, video }) => { + setup({ peertubeHelpers, player, video }) + } + }) +} + +function setup({ player, video }) { + const doc = document + const trakteerIframe = doc.querySelector('#trakteer-overlay iframe') + + let iframeLoaded = false + + // probably users navigate to a new page + if (trakteerIframe && !iframeLoaded) { + const oldTrakteerOverlay = doc.getElementById('trakteer-overlay') + + if (oldTrakteerOverlay) { + oldTrakteerOverlay.remove() + } + } + + // FIXME(@fariz): as of v0.1.0 :) + let trakteerTo = 'fariz' + + if (video.byAccount === 'root') { + trakteerTo = 'evilfactorylabs' + } + + const videoActionsMatches = doc.getElementsByClassName('video-actions') + + if (videoActionsMatches.length < 1) { + console.error('[peertube-plugin-trakteer]', videoActionsMatches) + } else { + const actions = videoActionsMatches[0] + + const trakteerButton = doc.createElement('button') + trakteerButton.title = 'Dukung Saya di Trakteer!' + trakteerButton.innerText = 'Trakteer' + trakteerButton.classList.add('action-button') + + const trakteerIcon = doc.createElement('img') + trakteerIcon.src = 'https://trakteer-assets.sgp1.digitaloceanspaces.com/images/embed/trbtn-icon.png?date=18-11-2023' + trakteerIcon.style.filter = 'contrast(0)' + trakteerIcon.style.paddingRight = '10px' + trakteerIcon.style.paddingBottom = '5px' + + trakteerIcon.setAttribute('height', 30) + + trakteerButton.prepend(trakteerIcon) + + trakteerButton.addEventListener('click', function() { + player.pause() + + const embedUrl = 'https://trakteer.id/' + trakteerTo + '/tip/embed/modal' + + if (!iframeLoaded) { + const trakteerOverlay = doc.createElement('div') + + trakteerOverlay.setAttribute('id', 'trakteer-overlay') + trakteerOverlay.style.display = 'none' + trakteerOverlay.style.position = 'fixed' + trakteerOverlay.style.width = '100%' + trakteerOverlay.style.height = '100%' + trakteerOverlay.style.top = 0 + trakteerOverlay.style.left = 0 + trakteerOverlay.style.zIndex = 666666 + + const trakteerModal = doc.createElement('iframe') + + trakteerModal.src = embedUrl + '?ref=' + window.location.href + trakteerModal.style.width = '100%' + trakteerModal.style.height = '100%' + trakteerModal.style.border = 0 + + trakteerOverlay.appendChild(trakteerModal) + + doc.body.appendChild(trakteerOverlay) + + iframeLoaded = true + + window.addEventListener('message', function(event) { + if (event.data.type === 'embed.modalClosed') { + setTimeout(function() { + if (player.hasStarted()) { + player.play() + } + + trakteerOverlay.style.display = 'none' + }, 69) + } + }) + } + + const trakteerIframe = doc.querySelector('#trakteer-overlay iframe') + + if (trakteerIframe) { + doc.getElementById('trakteer-overlay').style.display = 'block' + + trakteerIframe.contentWindow.postMessage({ type: 'embed.openModal' }, '*') + } + }) + + actions.prepend(trakteerButton) + } +} + +export { + register +}