Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cms/static/coffee/spec/main.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ requirejs.config({
"underscore.string": "xmodule_js/common_static/js/vendor/underscore.string.min",
"backbone": "xmodule_js/common_static/js/vendor/backbone-min",
"backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min",
"youtube": "xmodule_js/common_static/js/load_youtube",
"youtube": "//www.youtube.com/player_api?noext",
"tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/tiny_mce",
"jquery.tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/jquery.tinymce",
"mathjax": "https://edx-static.s3.amazonaws.com/mathjax-MathJax-727332c/MathJax.js?config=TeX-MML-AM_HTMLorMML-full",
Expand Down Expand Up @@ -102,6 +102,9 @@ requirejs.config({
deps: ["backbone"],
exports: "Backbone.Associations"
},
"youtube": {
exports: "YT"
},
"codemirror": {
exports: "CodeMirror"
},
Expand Down
5 changes: 4 additions & 1 deletion cms/static/coffee/spec/main_squire.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ requirejs.config({
"underscore.string": "xmodule_js/common_static/js/vendor/underscore.string.min",
"backbone": "xmodule_js/common_static/js/vendor/backbone-min",
"backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min",
"youtube": "xmodule_js/common_static/js/load_youtube",
"youtube": "//www.youtube.com/player_api?noext",
"tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/tiny_mce",
"jquery.tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/jquery.tinymce",
"mathjax": "https://edx-static.s3.amazonaws.com/mathjax-MathJax-727332c/MathJax.js?config=TeX-MML-AM_HTMLorMML-full",
Expand Down Expand Up @@ -100,6 +100,9 @@ requirejs.config({
deps: ["backbone"],
exports: "Backbone.Associations"
},
"youtube": {
exports: "YT"
},
"codemirror": {
exports: "CodeMirror"
},
Expand Down
14 changes: 11 additions & 3 deletions cms/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,18 @@
"underscore.string": "js/vendor/underscore.string.min",
"backbone": "js/vendor/backbone-min",
"backbone.associations": "js/vendor/backbone-associations-min",
"youtube": "js/load_youtube",
"tinymce": "js/vendor/tiny_mce/tiny_mce",
"jquery.tinymce": "js/vendor/tiny_mce/jquery.tinymce",
"mathjax": "https://edx-static.s3.amazonaws.com/mathjax-MathJax-727332c/MathJax.js?config=TeX-MML-AM_HTMLorMML-full",
"xmodule": "/xmodule/xmodule",
"utility": "js/src/utility",
"draggabilly": "js/vendor/draggabilly.pkgd"
"draggabilly": "js/vendor/draggabilly.pkgd",

// externally hosted files
"mathjax": "//edx-static.s3.amazonaws.com/mathjax-MathJax-727332c/MathJax.js?config=TeX-MML-AM_HTMLorMML-full",
// youtube URL does not end in ".js". We add "?noext" to the path so
// that require.js adds the ".js" to the query component of the URL,
// and leaves the path component intact.
"youtube": "//www.youtube.com/player_api?noext"
},
shim: {
"gettext": {
Expand Down Expand Up @@ -138,6 +143,9 @@
deps: ["backbone"],
exports: "Backbone.Associations"
},
"youtube": {
exports: "YT"
},
"codemirror": {
exports: "CodeMirror"
},
Expand Down
2 changes: 2 additions & 0 deletions common/lib/xmodule/xmodule/js/spec/helper.coffee
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# Stub Youtube API
window.YT =
Player: ->
PlayerState:
UNSTARTED: -1
ENDED: 0
PLAYING: 1
PAUSED: 2
BUFFERING: 3
CUED: 5
ready: (f) -> f()

window.STATUS = window.YT.PlayerState

Expand Down
17 changes: 12 additions & 5 deletions common/lib/xmodule/xmodule/js/spec/video/general_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@

afterEach(function () {
window.OldVideoPlayer = undefined;
window.onYouTubePlayerAPIReady = undefined;
window.onHTML5PlayerAPIReady = undefined;
$('source').remove();
});

Expand Down Expand Up @@ -214,14 +212,23 @@
// Total ajax calls made.
numAjaxCalls = $.ajax.calls.length;

// Subtract ajax calls to get captions.
// Subtract ajax calls to get captions via
// state.videoCaption.fetchCaption() function.
numAjaxCalls -= $.ajaxWithPrefix.calls.length;

// Subtract ajax calls to get metadata for each video.
// Subtract ajax calls to get metadata for each video via
// state.getVideoMetadata() function.
numAjaxCalls -= 3;

// Subtract ajax calls to log event 'pause_video' via
// state.videoPlayer.log() function.
numAjaxCalls -= 3;

// This should leave just one call. It was made to check
// for YT availability.
// for YT availability. This is done in state.initialize()
// function. SPecifically, with the statement
//
// this.youtubeXhr = this.getVideoMetadata();
expect(numAjaxCalls).toBe(1);
});
});
Expand Down
12 changes: 6 additions & 6 deletions common/lib/xmodule/xmodule/js/spec/video/html5_video_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
spyOn(player, 'callStateChangeCallback').andCallThrough();
});

describe('click', function () {
describe('[click]', function () {
describe('when player is paused', function () {
beforeEach(function () {
spyOn(player.video, 'play').andCallThrough();
Expand Down Expand Up @@ -61,7 +61,7 @@
});
});

describe('when player is playing', function () {
describe('[player is playing]', function () {
beforeEach(function () {
spyOn(player.video, 'pause').andCallThrough();
player.playerState = STATUS.PLAYING;
Expand Down Expand Up @@ -94,7 +94,7 @@
});
});

describe('play', function () {
describe('[play]', function () {
beforeEach(function () {
spyOn(player.video, 'play').andCallThrough();
player.playerState = STATUS.PAUSED;
Expand Down Expand Up @@ -126,7 +126,7 @@
});
});

describe('pause', function () {
describe('[pause]', function () {
beforeEach(function () {
spyOn(player.video, 'pause').andCallThrough();
player.playerState = STATUS.UNSTARTED;
Expand Down Expand Up @@ -161,7 +161,7 @@
});
});

describe('canplay', function () {
describe('[canplay]', function () {
beforeEach(function () {
waitsFor(function () {
return player.getPlayerState() !== STATUS.UNSTARTED;
Expand Down Expand Up @@ -193,7 +193,7 @@
});
});

describe('ended', function () {
describe('[ended]', function () {
beforeEach(function () {
waitsFor(function () {
return player.getPlayerState() !== STATUS.UNSTARTED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@

window.YT = {
Player: function () { },
PlayerState: oldYT.PlayerState
PlayerState: oldYT.PlayerState,
ready: function(f){f();}
};

spyOn(window.YT, 'Player');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,38 @@
});

describe('constructor', function() {
var oldYT = window.YT;

beforeEach(function() {
window.YT = {
Player: function () { },
PlayerState: oldYT.PlayerState,
ready: function(f){f();}
};

initialize();
});

// Disabled when ARIA markup was added to the anchor
xit('render the quality control', function() {
expect(videoControl.secondaryControlsEl.html()).toContain("<a href=\"#\" class=\"quality_control\" title=\"HD\">");
afterEach(function () {
window.YT = oldYT;
});

it('render the quality control', function() {
expect(videoControl.secondaryControlsEl.html())
.toContain(
'<a ' +
'href="#" ' +
'class="quality_control" ' +
'title="HD" ' +
'role="button" ' +
'aria-disabled="false"' +
'>HD</a>'
);
});

it('bind the quality control', function() {
expect($('.quality_control')).toHandleWith('click', videoQualityControl.toggleQuality);
expect($('.quality_control'))
.toHandleWith('click', videoQualityControl.toggleQuality);
});
});
});
Expand Down
21 changes: 5 additions & 16 deletions common/lib/xmodule/xmodule/js/src/video/01_initialize.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,23 +92,12 @@ function (VideoPlayer) {
// Require JS. At the time when we reach this code, the stand alone
// HTML5 player is already loaded, so no further testing in that case
// is required.
var onPlayerReadyFunc;
if (
(
(state.videoType === 'youtube') &&
(window.YT) &&
(window.YT.Player)
) ||
(state.videoType === 'html5')
) {
VideoPlayer(state);
if(state.videoType === 'youtube') {
YT.ready(function() {
VideoPlayer(state);
})
} else {
if (state.videoType === 'youtube') {
onPlayerReadyFunc = 'onYouTubePlayerAPIReady';
} else {
onPlayerReadyFunc = 'onHTML5PlayerAPIReady';
}
window[onPlayerReadyFunc] = _.bind(VideoPlayer, window, state);
VideoPlayer(state);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ function (HTML5Video) {
this.videoPlayer.player.setPlaybackRate(this.speed);
}

/* The following has been commented out to make sure autoplay is
/* The following has been commented out to make sure autoplay is
disabled for students.
if (
!onTouchBasedDevice() &&
Expand Down
5 changes: 0 additions & 5 deletions common/static/js/load_youtube.js

This file was deleted.