2
* @fileOverview Contains base Helioviewer client JavaScript
3
* @author <a href="mailto:jeff.stys@nasa.gov">Jeff Stys</a>
4
* @author <a href="mailto:keith.hughitt@nasa.gov">Keith Hughitt</a>
6
/*jslint browser: true, white: true, onevar: true, undef: true, nomen: false, eqeqeq: true, plusplus: true,
7
bitwise: true, regexp: true, strict: true, newcap: true, immed: true, maxlen: 120, sub: true */
8
/*global document, window, $, Class, TooltipHelper, HelioviewerViewport,
9
KeyboardManager, SettingsLoader, ZoomControls, assignTouchHandlers
13
var Helioviewer = {}; // Helioviewer global namespace
15
var HelioviewerClient = Class.extend(
16
/** @lends HelioviewerClient.prototype */
19
* Base Helioviewer client class
22
* @param {Object} urlSettings Client-specified settings to load.
23
* Includes imageLayers, date, and imageScale. May be empty.
24
* @param {Object} serverSettings Server settings loaded from Config.ini
26
init: function (urlSettings, serverSettings, zoomLevels) {
27
this._checkBrowser(); // Determines browser support
29
this.serverSettings = serverSettings;
31
Helioviewer.api = serverSettings['backEnd'];
32
Helioviewer.dataType = "json";
33
Helioviewer.userSettings = SettingsLoader.loadSettings(urlSettings, serverSettings);
35
Helioviewer.root = serverSettings['rootURL'];
39
* @description Checks browser support for various features used in Helioviewer
41
_checkBrowser: function () {
44
"localStorage" : ('localStorage' in window) && window['localStorage'] !== null,
45
"nativeJSON" : typeof (JSON) !== "undefined",
46
"video" : !!document.createElement('video').canPlayType,
51
// HTML5 Video Support
52
if ($.support.video) {
53
var v = document.createElement("video");
56
if (v.canPlayType('video/webm; codecs="vp8"')) {
57
// 2011/11/07: Disabling vp8 support until encoding time
58
// can be greatly reduced. WebM/VP8 movies will still be
59
// generated on the back-end when resources are available,
60
// but Flash/H.264 will be used in the mean-time to decrease
61
// response time and queue waits.
63
//$.support.vp8 = true;
64
$.support.vp8 = false;
68
if (v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')) {
69
// 2011/11/07: Also disabling H.264 in-browser video for now:
70
// some versions of Chrome report support when it does not
73
//$.support.h264 = true;
74
$.support.h264 = false;
80
* Initializes Helioviewer's viewport
82
_initViewport: function (container, date, marginTop, marginBottom) {
83
this.viewport = new HelioviewerViewport({
84
id : '#helioviewer-viewport',
85
container : container,
87
maxTileLayers : this.serverSettings.maxTileLayers,
88
minImageScale : this.serverSettings.minImageScale,
89
maxImageScale : this.serverSettings.maxImageScale,
90
prefetch : this.serverSettings.prefetchSize,
91
tileLayers : Helioviewer.userSettings.get('state.tileLayers'),
92
eventLayers : Helioviewer.userSettings.get('state.eventLayers'),
93
eventLabels : Helioviewer.userSettings.get('state.eventLabels'),
94
imageScale : Helioviewer.userSettings.get('state.imageScale'),
95
centerX : Helioviewer.userSettings.get('state.centerX'),
96
centerY : Helioviewer.userSettings.get('state.centerY'),
97
marginTop : marginTop,
98
marginBottom : marginBottom,
99
warnMouseCoords: Helioviewer.userSettings.get(
100
'notifications.coordinates')
105
* Chooses an acceptible image scale to use based on the default or
106
* requested imageScale the list of allowed increments
108
_chooseInitialImageScale: function (imageScale, increments) {
109
// For exact match, use image scale as-is
110
if ($.inArray(imageScale, increments) !== -1) {
113
// Otherwise choose closest acceptible image scale
114
var diff, closestScale, bestMatch = Infinity;
116
$.each(increments, function (i, scale) {
117
diff = Math.abs(scale - imageScale);
119
if (diff < bestMatch) {
121
closestScale = scale;
125
// Store closest matched image scale
126
Helioviewer.userSettings.set('state.imageScale', closestScale);
b'\\ No newline at end of file'