Sanjay Bhangar
6 years ago
3 changed files with 106 additions and 2 deletions
@ -0,0 +1,29 @@ |
|||
<!doctype html> |
|||
<html> |
|||
<head> |
|||
<title>Example using PandoraEmbed class</title> |
|||
<script src="lib/PandoraEmbed.js"></script> |
|||
</head> |
|||
<body> |
|||
<div id="iframeContainer"></div> |
|||
<script> |
|||
var container = document.getElementById('iframeContainer'); |
|||
var embed = new PandoraEmbed({ |
|||
id: 'test', |
|||
url: 'https://pad.ma/A/editor/C#embed', |
|||
container: container |
|||
}); |
|||
embed.on('init', function(data) { |
|||
console.log('embed initted'); |
|||
}); |
|||
embed.on('playing', function(data) { |
|||
console.log('playing callback called'); |
|||
}); |
|||
embed.on('paused', function(data) { |
|||
console.log('pause fired', data); |
|||
}); |
|||
|
|||
</script> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,75 @@ |
|||
|
|||
|
|||
/* |
|||
@param {Object} options |
|||
@param {String} options.id -- id of embed |
|||
@param {String} options.url - URL of pan.do/ra embed |
|||
@param {DOMNode} options.container -- DOM element in which to put embed |
|||
@param {Number} options.width - width of iframe |
|||
@param {Number} options.height - height of iframe |
|||
|
|||
*/ |
|||
var PandoraEmbed = function(options) { |
|||
var that = this; |
|||
this.id = options.id || 'padmaembed'; |
|||
this.isInitted = false; |
|||
this.boundFns = {}; |
|||
var width = options.width || 640; |
|||
var height = options.height || 360; |
|||
var container = options.container || document; |
|||
if (!options.url) { |
|||
alert('no embed url specified'); |
|||
return; |
|||
} |
|||
var $iframe = this.iframe = document.createElement('iframe'); |
|||
$iframe.width = width; |
|||
$iframe.height = height; |
|||
$iframe.src = options.url; |
|||
$iframe.addEventListener('load', function() { |
|||
var timeout; |
|||
function init() { |
|||
if (that.isInitted) { |
|||
clearTimeout(timeout); |
|||
return; |
|||
} |
|||
that.postMessage('init', { |
|||
oxid: that.id |
|||
}); |
|||
timeout = setTimeout(init, 250); |
|||
} |
|||
init(); |
|||
}); |
|||
|
|||
window.addEventListener('message', that.listener.bind(this), false); |
|||
container.appendChild($iframe); |
|||
return this; |
|||
}; |
|||
|
|||
|
|||
PandoraEmbed.prototype.listener = function(event) { |
|||
var data = JSON.parse(event.data); |
|||
if (data.target !== this.id) return; // this message is not for us
|
|||
if (data.event === 'init') this.isInitted = true; |
|||
this.trigger(data.event, data); |
|||
}; |
|||
|
|||
PandoraEmbed.prototype.on = function(event, fn) { |
|||
if (!this.boundFns.hasOwnProperty(event)) this.boundFns[event] = []; |
|||
this.boundFns[event].push(fn); |
|||
return this; |
|||
} |
|||
|
|||
PandoraEmbed.prototype.postMessage = function(event, data) { |
|||
this.iframe.contentWindow.postMessage(JSON.stringify({ |
|||
data: data, |
|||
event: event |
|||
}), '*'); |
|||
} |
|||
|
|||
PandoraEmbed.prototype.trigger = function(event, data) { |
|||
if (this.boundFns.hasOwnProperty(event)) { |
|||
this.boundFns[event].forEach(function(fn) { |
|||
fn(data); |
|||
}) |
|||
} |
|||
} |
Loading…
Reference in new issue