@gobistories/gobi-web-integration
Version:
Welcome to Gobi Web Integration. This library will let you put your Gobi stories on your site.
155 lines (152 loc) • 5.1 kB
text/coffeescript
event_emitter_1 = require('@/utils/event-emitter')
Function::property = (name, getset) -> Object.defineProperty , name, getset
isInViewport = require('@/utils/utils').isInViewport
makeQueryString = (parameters) ->
Object.keys(parameters).map (key) ->
value = parameters[key]
encodeURIComponent(key) + '=' + encodeURIComponent(value)
.join '&'
class Player
constructor: (options) ->
_this = this
=
autoStart: false
hideOverlay: false
loop: false
width: 0
height: 0
roundedCorners: true
shadow: true
checkViewPort: true
autoStart: false
hideWatermark: false
isFullHeight: false
= new event_emitter_1()
= .on.bind()
= .off.bind()
= ->
= ->
= ->
return if not
if !isInViewport
_this.pause()
_this._removeIsOutOfScreenChecker()
_this._addIsOnScreenChecker()
= ->
if isInViewport
_this.play()
_this._removeIsOnScreenChecker()
_this._addIsOutOfScreenChecker()
= Object.assign({}, , options)
= .container?.clientWidth
if .container
.container.appendChild
window.addEventListener 'message', (event) ->
if _this.rootElement.contentWindow != event.source
return
data = event.data
if data.event
_this._eventEmitter.emit data.event, data.value, _this
if _this._options.checkViewPort
_this._viewPortChecker data.event, _this.rootElement
'storyUrl',
get: ->
parameters =
autoStart: .autoStart
addLooping: .loop
hideOverlay: .hideOverlay
roundedCorners: .roundedCorners
hideWatermark: .hideWatermark
queryString = makeQueryString parameters
url = undefined
if !!.viewKey
url = 'https://live.gobiapp.com/next/story/viewKey/'
url += .viewKey
else
url = 'https://live.gobiapp.com/next/story/id/'
url += .storyName
url + '?' + queryString
load: (options, callback) ->
Object.assign , options
.onload = callback
.src =
hide: ->
.container?.style['display'] = 'none'
show: ->
.container?.style['display'] = ''
play: ->
'play'
pause: ->
'pause'
reload: ->
'reset'
setMute: (flag) ->
'setMute', flag
_callPlayerMethod: (name, arg) ->
if arg == undefined
arg = undefined
method: name
value: arg
_sendMessage: (message) ->
target = .contentWindow
if target
target.postMessage message, '*'
_createIframe: (clientWidth) ->
iframe = document.createElement('iframe')
size = clientWidth
iframe.src =
iframe.width = size.width.toString()
iframe.height = size.height.toString()
iframe.frameBorder = '0'
iframe.scrolling = 'no'
iframe.style.overflow = 'hidden'
iframe.style.background = '#000'
iframe.style.border = '0'
if .shadow
iframe.classList.add 'gobi-player-shadow'
if .roundedCorners
iframe.style.borderRadius = '10px'
iframe.setAttribute 'allow', 'autoplay;'
iframe
_viewPortChecker: (playerEventName, element) ->
switch playerEventName
when 'play'
when 'pause'
if isInViewport element
when 'ended'
_addIsOutOfScreenChecker: ->
_this = this
window.addEventListener 'scroll',
= ->
window.removeEventListener 'scroll', _this._isOutOfScreenChecker
_addIsOnScreenChecker: ->
_this = this
window.addEventListener 'scroll',
= ->
window.removeEventListener 'scroll', _this._isOnScreenChecker
_calculatePlayerSize: (clientWidth) ->
width = clientWidth or 612
aspectRatio = 0.5625
height = width/aspectRatio
# 9/16
if .width and .height
width = .width
height = .height
else if .width
width = .width
height = width / aspectRatio
else if .height
height = .height
width = height * aspectRatio
{width: width, height: height}
module.exports = Player