'use strict'; (function(exports) { /** * LogoLoader loads either a video or image for display during phone boot. * Only a single resource will be selected depending on what is availble * on the filesystem. * @class LogoLoader * @param {Object} logoPath Contains file paths for both a video and image. */ function LogoLoader(logoPath) { // Load video / image if exist. // Only one of them should success. We load both of them at the same time. this.videoPath = logoPath.video; this.imagePath = logoPath.image; this._noImage = false; this._noVideo = false; //Statuses this.ready = false; this.found = false; this.element = null; //Callback functions this.onnotfound = null; this.onload = null; this._initVideo(); this._initImage(); } LogoLoader.prototype = { /** * Tries to initialize a video if we can load it from disk. * @memberof LogoLoader.prototype */ _initVideo: function() { var video = document.createElement('video'); video.preload = 'auto'; video.src = this.videoPath; var self = this; video.onloadeddata = function() { self._onLogoLoaded(video); }; video.onerror = function() { self._noVideo = true; if (self._noImage && (typeof self.onnotfound == 'function')) { self.ready = true; self.onnotfound(); } }; }, /** * Tries to initialize an image if we can load it from disk. * @memberof LogoLoader.prototype */ _initImage: function() { var self = this; var img = new Image(); img.src = this.imagePath; img.onload = function() { self._onLogoLoaded(img); }; img.onerror = function() { self._noImage = true; if (self._noVideo && (typeof self.onnotfound == 'function')) { self.ready = true; self.onnotfound(); } }; }, /** * Called when we have a logo resource ready. * @memberof LogoLoader.prototype * @param {HtmlElement} element An image or video element. */ _onLogoLoaded: function(element) { this.found = true; if (!this.ready) { this.ready = true; this.element = element; if (this.onload) { this.onload(element); } } } }; exports.LogoLoader = LogoLoader; }(window));