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,73 +1,63 @@
/*global chrome*/ /*global chrome*/
/*jslint browser: true */ /*jslint browser: true */
var launchBtn, disabledBtn, stopBtn; var castModule = (function () {
var session;
function receiverListener(e) {
'use strict'; 'use strict';
var launchBtn, disabledBtn, stopBtn, session;
function receiverListener(e) {
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');
} }
} }
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));
if (session.media.length !== 0) { if (session.media.length !== 0) {
onMediaDiscovered('onRequestSessionSuccess', session.media[0]); onMediaDiscovered('onRequestSessionSuccess', session.media[0]);
} }
} }
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');
@ -77,35 +67,34 @@ function onInitSuccess() {
launchBtn.addEventListener('click', launchCast, false); launchBtn.addEventListener('click', launchCast, false);
stopBtn.addEventListener('click', stopCast, false); stopBtn.addEventListener('click', stopCast, false);
} }
} }
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 {
throw errorInfo; throw 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);