Skip to content

Commit

Permalink
Merge pull request #1 from otacke/add-xapi-video-verbs
Browse files Browse the repository at this point in the history
Add xapi video verbs
  • Loading branch information
figureone authored Mar 23, 2018
2 parents 2224edd + 83c472a commit f132369
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 267 deletions.
52 changes: 13 additions & 39 deletions scripts/html5.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,12 @@ H5P.VideoHtml5 = (function ($) {
}
}

return videoXAPI.getArgsXAPIInitialized(video.currentTime, video.videoWidth, video.videoHeight, video.playbackRate, video.volume, ccEnabled, ccLanguage);
return videoXAPI.getArgsXAPIInitialized(video.videoWidth, video.videoHeight, video.playbackRate, video.volume, ccEnabled, ccLanguage);

};

// Set duration used for xAPI statements.
videoXAPI.duration = video.duration;
self.duration = video.duration;

/**
* Helps registering events.
Expand All @@ -194,11 +194,11 @@ H5P.VideoHtml5 = (function ($) {
}

if (arg === H5P.Video.PLAYING) {
if (videoXAPI.seeking === true) {
extraArg = videoXAPI.getArgsXAPISeeked(videoXAPI.seekedTo);
if (self.seeking === true) {
extraArg = videoXAPI.getArgsXAPISeeked(self.seekedTo);
extraTrigger = 'seeked';
lastSend = 'seeked';
videoXAPI.seeking = false;
self.seeking = false;
}
else if (lastSend !== 'play') {
extraArg = videoXAPI.getArgsXAPIPlayed(video.currentTime);
Expand All @@ -209,7 +209,7 @@ H5P.VideoHtml5 = (function ($) {

if (arg === H5P.Video.PAUSED) {
// Put together extraArg for sending to xAPI statement.
if (!video.seeking && videoXAPI.seeking === false && video.currentTime !== video.duration) {
if (!video.seeking && self.seeking === false && video.currentTime !== video.duration) {
extraTrigger = 'paused';
extraArg = videoXAPI.getArgsXAPIPaused(video.currentTime, video.duration);
lastSend = 'paused';
Expand Down Expand Up @@ -241,14 +241,14 @@ H5P.VideoHtml5 = (function ($) {
lastSend = 'volumechange';
break;
case 'play':
if (videoXAPI.seeking === false && lastSend !== h5p) {
if (self.seeking === false && lastSend !== h5p) {
arg = videoXAPI.getArgsXAPIPlayed(video.currentTime);
lastSend = h5p;
}
else {
arg = videoXAPI.getArgsXAPISeeked(videoXAPI.seekedTo);
arg = videoXAPI.getArgsXAPISeeked(self.seekedTo);
lastSend = 'seeked';
videoXAPI.seeking = false;
self.seeking = false;
h5p = 'seeked';
}
break;
Expand Down Expand Up @@ -523,12 +523,12 @@ H5P.VideoHtml5 = (function ($) {
video.play();
video.pause();
}
if (videoXAPI.seeking === false) {
videoXAPI.previousTime = video.currentTime;
if (self.seeking === false) {
self.previousTime = video.currentTime;
}
video.currentTime = time;
videoXAPI.seeking = true;
videoXAPI.seekedTo = time;
self.seeking = true;
self.seekedTo = time;
};

/**
Expand Down Expand Up @@ -735,32 +735,6 @@ H5P.VideoHtml5 = (function ($) {
});
});

// xAPI extension events for video.
self.on('seeked', function (event) {
this.triggerXAPI('seeked', event.data);
});
self.on('volumechange', function (event) {
this.triggerXAPI('interacted', event.data);
});
self.on('finished', function (event) {
// Triggered as finished to be seperate from H5Ps completed,
// but statement is sent as completed and differentiated by object.id
this.triggerXAPI('completed', event.data);
});
self.on('fullscreen', function (event) {
// @todo: Not currently used.
this.triggerXAPI('interacted', event.data);
});
self.on('play', function (event) {
this.triggerXAPI('played', event.data);
});
self.on('xAPIloaded', function (event) {
this.triggerXAPI('initialized', event.data);
});
self.on('paused', function (event) {
this.triggerXAPI('paused', event.data);
});

// Video controls are ready
nextTick(function () {
self.trigger('ready');
Expand Down
31 changes: 31 additions & 0 deletions scripts/video.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ H5P.Video = (function ($, ContentCopyrights, MediaCopyright, handlers) {
// Ref youtube.js - ipad & youtube - issue
self.pressToPlay = false;

// Values needed for xAPI triggering
self.previousTime = 0;
self.seeking = false;
self.seekedTo = 0;
self.duration = 0;

// Initialize event inheritance
H5P.EventDispatcher.call(self);

Expand Down Expand Up @@ -115,6 +121,31 @@ H5P.Video = (function ($, ContentCopyrights, MediaCopyright, handlers) {
self.on('loaded', function () {
self.trigger('resize');
});
// xAPI extension events for video.
self.on('seeked', function (event) {
self.triggerXAPI('seeked', event.data);
});
self.on('volumechange', function (event) {
self.triggerXAPI('interacted', event.data);
});
self.on('finished', function (event) {
// Triggered as finished to be seperate from H5Ps completed,
// but statement is sent as completed and differentiated by object.id
self.triggerXAPI('completed', event.data);
});
self.on('fullscreen', function (event) {
self.triggerXAPI('interacted', event.data);
});
self.on('play', function (event) {
self.triggerXAPI('played', event.data);
});
self.on('xAPIloaded', function (event){
self.duration = self.getDuration();
self.triggerXAPI('initialized', event.data);
});
self.on('paused', function (event) {
self.triggerXAPI('paused', event.data);
});

// Find player for video sources
if (sources.length) {
Expand Down
Loading

0 comments on commit f132369

Please sign in to comment.