feat: v0.1.0
This commit is contained in:
parent
f0d31a097b
commit
5495a37991
112
client/video-watch-client-plugin.js
Normal file
112
client/video-watch-client-plugin.js
Normal file
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user