jQuery(function($){
var spinnerCount=0;
function showSpinner(){
spinnerCount++;
$("#wp-h5p-xapi-spinner").show();
}
function hideSpinner(){
spinnerCount--;
if(!spinnerCount)
$("#wp-h5p-xapi-spinner").fadeOut(500);
}
function showError(message, code){
console.error("Unable to save xAPI statement");
alert("Unable to save result data.\n\nMessage: " + message + "\n" + "Code: " + code);
}
function onXapiPostError(xhr, message, error){
hideSpinner();
console.log("xapi post error");
console.log(xhr.responseText);
showError(message, xhr.status);
}
function onXapiPostSuccess(res, textStatus, xhr){
hideSpinner();
if(!res.hasOwnProperty("ok")){
console.log("xapi post error");
console.log(xhr.responseText);
showError("Got bad response back...", 500);
}
if(!res.ok){
console.log("xapi post error");
console.log(xhr.responseText);
showError(res.message, res.code);
}
if(res.ok){
$.event.trigger({
type: "h5pXapiStatementSaved",
message: res.message
});
}}
function onXapi(event){
if(!WP_H5P_XAPI_STATEMENT_URL)
return;
showSpinner();
var data={};
if(typeof event.data.statement.context=='undefined'){
event.data.statement.context={};}
if(typeof event.data.statement.context.contextActivities=='undefined'){
event.data.statement.context.contextActivities={};}
if(typeof event.data.statement.context.contextActivities.grouping=='undefined'){
event.data.statement.context.contextActivities.grouping=[];
}
if(WP_H5P_XAPI_CONTEXTACTIVITY)
event.data.statement.context.contextActivities.grouping.push(WP_H5P_XAPI_CONTEXTACTIVITY);
data.statement=JSON.stringify(event.data.statement);
$.ajax({
type: "POST",
url: WP_H5P_XAPI_STATEMENT_URL,
data: data,
dataType: "json",
success: onXapiPostSuccess,
error: onXapiPostError
});
}
var has_attachment_attempted=false;
$(document).ready(function(){
if(typeof H5P!=='undefined'&&H5P.externalDispatcher)
H5P.externalDispatcher.on('xAPI', onXapi);
$("body").append("<div id='wp-h5p-xapi-spinner'>Saving...</div>");
$("#wp-h5p-xapi-spinner").hide();
window.addEventListener('message', function receiveMessage(event){
if(event.data.context!=='h5p'){
return;
}
if(! has_attachment_attempted){
var iframe, iframes=document.getElementsByTagName('iframe');
for (var i=0; i < iframes.length; i++){
if(iframes[i].contentWindow.H5P){
iframes[i].contentWindow.H5P.externalDispatcher.on('xAPI', onXapi);
has_attachment_attempted=true;
}}
}}, false);
});
});