/** * @module Container * @namespace springroll.pbskids */ (function() { /** * Utility class for detecting platform. * @class Platform */ var Platform = function() { /** * The name of the browser * @property {string} browser */ this.browser = this.searchString(BROWSERS) || "unknown browser"; /** * The version of the user agent or app * @property {string} version */ this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "unknown version"; /** * The version search string * @property {string} versionSearchString * @private */ this.versionSearchString = null; /** * The current verison of the operating system * @property {string} OS */ this.OS = this.searchString(OSES) || "unknown OS"; }; // reference to the prototype var p = Platform.prototype; /** * Search a string * @method searchString * @param {string|Array} data The collection of dat ato search * @return {null|String} The result or null */ p.searchString = function(data) { for (var i = 0; i < data.length; i++) { var dataString = data[i].string; var dataProp = data[i].prop; this.versionSearchString = data[i].versionSearch || data[i].identity; if (dataString) { if (dataString.indexOf(data[i].subString) != -1) { return data[i].identity; } } else if (dataProp) { return data[i].identity; } } }; /** * Get the version for a string * @method searchVersion * @param {string} dataString The version to search for * @return {null|number} The version number */ p.searchVersion = function(dataString) { var index = dataString.indexOf(this.versionSearchString); if (index == -1) return; return parseFloat(dataString.substring(index + this.versionSearchString.length + 1)); }; /** * The collection of BROWSERS types * @property {array} BROWSERS * @static * @readOnly * @private */ var BROWSERS = [ { string: navigator.userAgent, subString: "Chrome", identity: "Chrome" }, { string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb" }, { string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version" }, { prop: window.opera, identity: "Opera", versionSearch: "Version" }, { string: navigator.vendor, subString: "iCab", identity: "iCab" }, { string: navigator.vendor, subString: "KDE", identity: "Konqueror" }, { string: navigator.userAgent, subString: "Firefox", identity: "Firefox" }, { string: navigator.vendor, subString: "Camino", identity: "Camino" }, { // for newer Netscapes (6+) string: navigator.userAgent, subString: "Netscape", identity: "Netscape" }, { string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE" }, { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" }, { // for older Netscapes (4-) string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" }]; /** * The collection of OS types * @property {array} OSES * @static * @readOnly * @private */ var OSES = [ { string: navigator.platform, subString: "Win", identity: "WindowsPC" }, { string: navigator.platform, subString: "Mac", identity: "Mac" }, { string: navigator.userAgent, subString: "iPhone", identity: "iPhone/iPod" }, { string: navigator.userAgent, subString: "iPad", identity: "iPad" }, { string: navigator.userAgent, subString: "Android", identity: "Android" }, { string: navigator.platform, subString: "Linux", identity: "LinuxPC" }, { string: navigator.userAgent, subString: "apple-phone-audio-bug", identity: "iPhone/iPod" }, { string: navigator.userAgent, subString: "apple-tablet-audio-bug", identity: "iPad" }]; // assign to namespace namespace('springroll.pbskids').Platform = Platform; }());