aboutsummaryrefslogblamecommitdiffhomepage
path: root/client/src/standalone/videos/embed.html
blob: f7208093747d9ed4ff880f994b1f723d2f283195 (plain) (tree)



































                                                                           












                                  























                                                                                      
                                                 






                                              












                                                                                 




                                                


                                                 
                                                                   
                                                                    
                                      



                                                                                 











                                                                    
                                

                     



                                  







                                                                                    




                                                                                            
                                           





               
      
<!DOCTYPE html>
<html>
  <head>
    <title>PeerTube</title>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="icon" type="image/png" href="/client/assets/favicon.png" />

    <link rel="stylesheet" href="/client/assets/video-js/video-js.min.css">
    <link rel="stylesheet" href="/client/assets/video-js/videojs-dock.css">

    <script src="/client/assets/webtorrent/webtorrent.min.js"></script>
    <script src="/client/assets/video-js/video.min.js"></script>
    <script src="/client/assets/video-js/videojs-dock.min.js"></script>

    <style>
      video {
        width: 99%;
      }

      /* fill the entire space */
      html, body {
        height: 100%;
        margin: 0;
      }

      .video-js {
        width: 100%;
        height: 100%;
      }

      .vjs-poster {
        background-size: 100% auto;
      }

      .vjs-peertube-link {
        color: white;
        text-decoration: none;
        font-size: 1.3em;
        line-height: 2.20;
        transition: all .4s;
      }

      .vjs-peertube-link:hover {
        text-shadow: 0 0 1em #fff;
      }

    </style>
  </head>

  <body>

  <video id="video-container" class="video-js vjs-default-skin vjs-big-play-centered">
  </video>


  <script>
  function loadVideoInfos (videoId, callback) {
    var xhttp = new XMLHttpRequest()
    xhttp.onreadystatechange = function () {
      if (this.readyState === 4 && this.status === 200) {
        var json = JSON.parse(this.responseText)
        return callback(json)
      }
    }

    var url = window.location.origin + '/api/v1/videos/' + videoId
    xhttp.open('GET', url, true)
    xhttp.send()
  }

  function loadVideoTorrent (magnetUri, player) {
    console.log('Loading video ' + videoId)
    var client = new window.WebTorrent()

    console.log('Adding magnet ' + magnetUri)
    client.add(magnetUri, function (torrent) {
      var file = torrent.files[0]

      file.renderTo('video', function (err) {
        if (err) {
          console.error(err)
          return
        }

        // Hack to "simulate" src link in video.js >= 6
        // If no, we can't play the video after pausing it
        // https://github.com/videojs/video.js/blob/master/src/js/player.js#L1633
        player.src = function () { return true }

        player.play()
      })
    })
  }

  var urlParts = window.location.href.split('/')
  var videoId = urlParts[urlParts.length - 1]

  loadVideoInfos(videoId, function (videoInfos) {
    var magnetUri = videoInfos.magnetUri
    var videoContainer = document.getElementById('video-container')
    var previewUrl = window.location.origin + videoInfos.previewPath
    videoContainer.poster = previewUrl

    videojs('video-container', { controls: true, autoplay: false }, function () {
      var player = this

      var Button = videojs.getComponent('Button')
      var peertubeLinkButton = videojs.extend(Button, {
        constructor: function () {
          Button.apply(this, arguments)
        },

        createEl: function () {
          var link = document.createElement('a')
          link.href = window.location.href.replace('embed', 'watch')
          link.innerHTML = 'PeerTube'
          link.title = 'Go to the video page'
          link.className = 'vjs-peertube-link'
          link.target = '_blank'

          return link
        },

        handleClick: function () {
          player.pause()
        }
      })
      videojs.registerComponent('PeerTubeLinkButton', peertubeLinkButton)

      var controlBar = player.getChild('controlBar')
      var addedLink = controlBar.addChild('PeerTubeLinkButton', {})
      controlBar.el().insertBefore(addedLink.el(), controlBar.fullscreenToggle.el())

      player.dock({
        title: videoInfos.name
      })

      document.querySelector('.vjs-big-play-button').addEventListener('click', function () {
        loadVideoTorrent(magnetUri, player)
      }, false)
    })
  })

  </script>
  </body>
</html