aboutsummaryrefslogtreecommitdiff
path: root/src/services/ruffle_service/ruffle_service.js
blob: 7411dd962d22c90406d3f9dd091d3ee9a574924b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const createRuffleService = () => {
  let ruffleInstance = null

  const getRuffle = () => new Promise((resolve, reject) => {
    if (ruffleInstance) {
      resolve(ruffleInstance)
      return
    }
    // Ruffle needs these to be set before it's loaded
    // https://github.com/ruffle-rs/ruffle/issues/3952
    window.RufflePlayer = {}
    window.RufflePlayer.config = {
      polyfills: false,
      publicPath: '/static/ruffle'
    }

    // Currently it's seems like a better way of loading ruffle
    // because it needs the wasm publically accessible, but it needs path to it
    // and filename of wasm seems to be pseudo-randomly generated (is it a hash?)
    const script = document.createElement('script')
    // see webpack config, using CopyPlugin to copy it from node_modules
    // provided via ruffle-mirror
    script.src = '/static/ruffle/ruffle.js'
    script.type = 'text/javascript'
    script.onerror = (e) => { reject(e) }
    script.onabort = (e) => { reject(e) }
    script.oncancel = (e) => { reject(e) }
    script.onload = () => {
      ruffleInstance = window.RufflePlayer
      resolve(ruffleInstance)
    }
    document.body.appendChild(script)
  })

  return { getRuffle }
}

const RuffleService = createRuffleService()

export default RuffleService