Use module pattern

This commit is contained in:
Pierre Rudloff 2016-06-22 12:53:16 +02:00
parent e20ab6b708
commit 22b2c10e0c

View file

@ -1,15 +1,14 @@
/*global chrome*/ /*global chrome*/
/*jslint browser: true */ /*jslint browser: true */
var launchBtn, disabledBtn, stopBtn; var castModule = (function () {
var session; 'use strict';
var launchBtn, disabledBtn, stopBtn, session;
function receiverListener(e) { function receiverListener(e) {
'use strict';
return (e === chrome.cast.ReceiverAvailability.AVAILABLE); return (e === chrome.cast.ReceiverAvailability.AVAILABLE);
} }
function onMediaDiscovered() { function onMediaDiscovered() {
'use strict';
if (launchBtn) { if (launchBtn) {
stopBtn.classList.remove('cast_hidden'); stopBtn.classList.remove('cast_hidden');
launchBtn.classList.add('cast_hidden'); launchBtn.classList.add('cast_hidden');
@ -17,20 +16,17 @@ function onMediaDiscovered() {
} }
function onStopCast() { function onStopCast() {
'use strict';
stopBtn.classList.add('cast_hidden'); stopBtn.classList.add('cast_hidden');
launchBtn.classList.remove('cast_hidden'); launchBtn.classList.remove('cast_hidden');
} }
function updateListener() { function updateListener() {
'use strict';
if (session.status !== chrome.cast.SessionStatus.CONNECTED) { if (session.status !== chrome.cast.SessionStatus.CONNECTED) {
onStopCast(); onStopCast();
} }
} }
function sessionListener(e) { function sessionListener(e) {
'use strict';
session = e; session = e;
session.addMediaListener(onMediaDiscovered.bind(this, 'addMediaListener')); session.addMediaListener(onMediaDiscovered.bind(this, 'addMediaListener'));
session.addUpdateListener(updateListener.bind(this)); session.addUpdateListener(updateListener.bind(this));
@ -40,34 +36,28 @@ function sessionListener(e) {
} }
function stopCast() { function stopCast() {
'use strict';
session.stop(onStopCast); session.stop(onStopCast);
} }
function onMediaError() { function onMediaError() {
'use strict';
stopCast(); stopCast();
} }
function onRequestSessionSuccess(e) { function onRequestSessionSuccess(e) {
'use strict';
session = 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); 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); session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), onMediaError);
} }
function onLaunchError(e) { function onLaunchError(e) {
'use strict';
throw e.description; throw e.description;
} }
function launchCast() { function launchCast() {
'use strict';
chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError); chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError);
} }
function onInitSuccess() { function onInitSuccess() {
'use strict';
launchBtn = document.getElementById('cast_btn_launch'); launchBtn = document.getElementById('cast_btn_launch');
disabledBtn = document.getElementById('cast_disabled'); disabledBtn = document.getElementById('cast_disabled');
stopBtn = document.getElementById('cast_btn_stop'); stopBtn = document.getElementById('cast_btn_stop');
@ -80,18 +70,15 @@ function onInitSuccess() {
} }
function onError(e) { function onError(e) {
'use strict';
throw e.code; throw e.code;
} }
function initializeCastApi() { 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); 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); chrome.cast.initialize(apiConfig, onInitSuccess, onError);
} }
function loadCastApi(loaded, errorInfo) { function loadCastApi(loaded, errorInfo) {
'use strict';
if (loaded) { if (loaded) {
initializeCastApi(); initializeCastApi();
} else { } else {
@ -99,13 +86,15 @@ function loadCastApi(loaded, errorInfo) {
} }
} }
function initCast() { return {
'use strict'; init: function () {
var intro = document.getElementById('download_intro'); var intro = document.getElementById('download_intro');
if (intro) { if (intro) {
intro.insertAdjacentHTML('beforeend', '<img class="cast_icon" id="cast_disabled" src="img/ic_media_route_disabled_holo_light.png" alt="" title="Google Cast is not supported on this browser." /> <img class="cast_btn cast_hidden cast_icon" id="cast_btn_launch" src="img/ic_media_route_off_holo_light.png" title="Cast to ChromeCast" alt="Google Cast™" /> <img src="img/ic_media_route_on_holo_light.png" alt="Casting to ChromeCast…" title="Stop casting" id="cast_btn_stop" class="cast_btn cast_hidden cast_icon" />'); intro.insertAdjacentHTML('beforeend', '<img class="cast_icon" id="cast_disabled" src="img/ic_media_route_disabled_holo_light.png" alt="" title="Google Cast is not supported on this browser." /> <img class="cast_btn cast_hidden cast_icon" id="cast_btn_launch" src="img/ic_media_route_off_holo_light.png" title="Cast to ChromeCast" alt="Google Cast™" /> <img src="img/ic_media_route_on_holo_light.png" alt="Casting to ChromeCast…" title="Stop casting" id="cast_btn_stop" class="cast_btn cast_hidden cast_icon" />');
window.__onGCastApiAvailable = loadCastApi; window.__onGCastApiAvailable = loadCastApi;
} }
} }
};
}());
window.addEventListener('load', initCast, false); window.addEventListener('load', castModule.init, false);