diff --git a/js/cast.js b/js/cast.js
index 733b6fd..a065013 100644
--- a/js/cast.js
+++ b/js/cast.js
@@ -1,111 +1,100 @@
/*global chrome*/
/*jslint browser: true */
-var launchBtn, disabledBtn, stopBtn;
-var session;
-
-function receiverListener(e) {
+var castModule = (function () {
'use strict';
- return (e === chrome.cast.ReceiverAvailability.AVAILABLE);
-}
+ var launchBtn, disabledBtn, stopBtn, session;
-function onMediaDiscovered() {
- 'use strict';
- if (launchBtn) {
- stopBtn.classList.remove('cast_hidden');
- launchBtn.classList.add('cast_hidden');
+ function receiverListener(e) {
+ return (e === chrome.cast.ReceiverAvailability.AVAILABLE);
}
-}
-function onStopCast() {
- 'use strict';
- stopBtn.classList.add('cast_hidden');
- launchBtn.classList.remove('cast_hidden');
-}
-
-function updateListener() {
- 'use strict';
- if (session.status !== chrome.cast.SessionStatus.CONNECTED) {
- onStopCast();
+ function onMediaDiscovered() {
+ if (launchBtn) {
+ stopBtn.classList.remove('cast_hidden');
+ launchBtn.classList.add('cast_hidden');
+ }
}
-}
-function sessionListener(e) {
- 'use strict';
- session = e;
- session.addMediaListener(onMediaDiscovered.bind(this, 'addMediaListener'));
- session.addUpdateListener(updateListener.bind(this));
- if (session.media.length !== 0) {
- onMediaDiscovered('onRequestSessionSuccess', session.media[0]);
- }
-}
-
-function stopCast() {
- 'use strict';
- session.stop(onStopCast);
-}
-
-function onMediaError() {
- 'use strict';
- stopCast();
-}
-
-function onRequestSessionSuccess(e) {
- 'use strict';
- session = e;
- var videoLink = document.getElementById('video_link'), videoURL = videoLink.dataset.video, mediaInfo = new chrome.cast.media.MediaInfo(videoURL, 'video/' + videoLink.dataset.ext), request = new chrome.cast.media.LoadRequest(mediaInfo);
- session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), onMediaError);
-}
-
-function onLaunchError(e) {
- 'use strict';
- throw e.description;
-}
-
-function launchCast() {
- 'use strict';
- chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError);
-}
-
-function onInitSuccess() {
- 'use strict';
- launchBtn = document.getElementById('cast_btn_launch');
- disabledBtn = document.getElementById('cast_disabled');
- stopBtn = document.getElementById('cast_btn_stop');
- if (launchBtn) {
- disabledBtn.classList.add('cast_hidden');
+ function onStopCast() {
+ stopBtn.classList.add('cast_hidden');
launchBtn.classList.remove('cast_hidden');
- launchBtn.addEventListener('click', launchCast, false);
- stopBtn.addEventListener('click', stopCast, false);
}
-}
-function onError(e) {
- 'use strict';
- throw e.code;
-}
-
-function initializeCastApi() {
- 'use strict';
- var sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID), apiConfig = new chrome.cast.ApiConfig(sessionRequest, sessionListener, receiverListener, chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED);
- chrome.cast.initialize(apiConfig, onInitSuccess, onError);
-}
-
-function loadCastApi(loaded, errorInfo) {
- 'use strict';
- if (loaded) {
- initializeCastApi();
- } else {
- throw errorInfo;
+ function updateListener() {
+ if (session.status !== chrome.cast.SessionStatus.CONNECTED) {
+ onStopCast();
+ }
}
-}
-function initCast() {
- 'use strict';
- var intro = document.getElementById('download_intro');
- if (intro) {
- intro.insertAdjacentHTML('beforeend', '
');
- window.__onGCastApiAvailable = loadCastApi;
+ function sessionListener(e) {
+ session = e;
+ session.addMediaListener(onMediaDiscovered.bind(this, 'addMediaListener'));
+ session.addUpdateListener(updateListener.bind(this));
+ if (session.media.length !== 0) {
+ onMediaDiscovered('onRequestSessionSuccess', session.media[0]);
+ }
}
-}
-window.addEventListener('load', initCast, false);
+ function stopCast() {
+ session.stop(onStopCast);
+ }
+
+ function onMediaError() {
+ stopCast();
+ }
+
+ function onRequestSessionSuccess(e) {
+ session = e;
+ var videoLink = document.getElementById('video_link'), videoURL = videoLink.dataset.video, mediaInfo = new chrome.cast.media.MediaInfo(videoURL, 'video/' + videoLink.dataset.ext), request = new chrome.cast.media.LoadRequest(mediaInfo);
+ session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), onMediaError);
+ }
+
+ function onLaunchError(e) {
+ throw e.description;
+ }
+
+ function launchCast() {
+ chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError);
+ }
+
+ function onInitSuccess() {
+ launchBtn = document.getElementById('cast_btn_launch');
+ disabledBtn = document.getElementById('cast_disabled');
+ stopBtn = document.getElementById('cast_btn_stop');
+ if (launchBtn) {
+ disabledBtn.classList.add('cast_hidden');
+ launchBtn.classList.remove('cast_hidden');
+ launchBtn.addEventListener('click', launchCast, false);
+ stopBtn.addEventListener('click', stopCast, false);
+ }
+ }
+
+ function onError(e) {
+ throw e.code;
+ }
+
+ function initializeCastApi() {
+ var sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID), apiConfig = new chrome.cast.ApiConfig(sessionRequest, sessionListener, receiverListener, chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED);
+ chrome.cast.initialize(apiConfig, onInitSuccess, onError);
+ }
+
+ function loadCastApi(loaded, errorInfo) {
+ if (loaded) {
+ initializeCastApi();
+ } else {
+ throw errorInfo;
+ }
+ }
+
+ return {
+ init: function () {
+ var intro = document.getElementById('download_intro');
+ if (intro) {
+ intro.insertAdjacentHTML('beforeend', '
');
+ window.__onGCastApiAvailable = loadCastApi;
+ }
+ }
+ };
+}());
+
+window.addEventListener('load', castModule.init, false);