Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
97 lines
2.4 KiB
JavaScript
Executable file
97 lines
2.4 KiB
JavaScript
Executable file
'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));
|