~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to src/js/HelioviewerClient.js

  • Committer: V. Keith Hughitt
  • Date: 2009-04-01 21:08:05 UTC
  • Revision ID: hughitt1@kore-20090401210805-372f7dgih07vxk42
nightly build 04-01-2009

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
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>
5
 
 */
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
10
 
 */
11
 
"use strict";
12
 
 
13
 
var Helioviewer = {}; // Helioviewer global namespace
14
 
 
15
 
var HelioviewerClient = Class.extend(
16
 
    /** @lends HelioviewerClient.prototype */
17
 
    {
18
 
    /**
19
 
     * Base Helioviewer client class
20
 
     * @constructs
21
 
     *
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
25
 
     */
26
 
    init: function (urlSettings, serverSettings, zoomLevels) {
27
 
        this._checkBrowser(); // Determines browser support
28
 
 
29
 
        this.serverSettings = serverSettings;
30
 
 
31
 
        Helioviewer.api          = serverSettings['backEnd'];
32
 
        Helioviewer.dataType     = "json";
33
 
        Helioviewer.userSettings = SettingsLoader.loadSettings(urlSettings, serverSettings);
34
 
 
35
 
        Helioviewer.root = serverSettings['rootURL'];
36
 
    },
37
 
 
38
 
    /**
39
 
     * @description Checks browser support for various features used in Helioviewer
40
 
     */
41
 
    _checkBrowser: function () {
42
 
        // Base support
43
 
        $.extend($.support, {
44
 
            "localStorage" : ('localStorage' in window) && window['localStorage'] !== null,
45
 
            "nativeJSON"   : typeof (JSON) !== "undefined",
46
 
            "video"        : !!document.createElement('video').canPlayType,
47
 
            "h264"         : false,
48
 
            "vp8"          : false
49
 
        });
50
 
 
51
 
        // HTML5 Video Support
52
 
        if ($.support.video) {
53
 
            var v = document.createElement("video");
54
 
 
55
 
            // VP8/WebM
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.
62
 
 
63
 
                //$.support.vp8 = true;
64
 
                $.support.vp8 = false;
65
 
            }
66
 
 
67
 
            // H.264
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
71
 
                // actually work.
72
 
 
73
 
                //$.support.h264 = true;
74
 
                $.support.h264 = false;
75
 
            }
76
 
        }
77
 
    },
78
 
 
79
 
    /**
80
 
     * Initializes Helioviewer's viewport
81
 
     */
82
 
    _initViewport: function (container, date, marginTop, marginBottom) {
83
 
        this.viewport = new HelioviewerViewport({
84
 
            id             : '#helioviewer-viewport',
85
 
            container      : container,
86
 
            requestDate    : date,
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')
101
 
        });
102
 
    },
103
 
 
104
 
    /**
105
 
     * Chooses an acceptible image scale to use based on the default or
106
 
     * requested imageScale the list of allowed increments
107
 
     */
108
 
    _chooseInitialImageScale: function (imageScale, increments) {
109
 
        // For exact match, use image scale as-is
110
 
        if ($.inArray(imageScale, increments) !== -1) {
111
 
            return imageScale;
112
 
        }
113
 
        // Otherwise choose closest acceptible image scale
114
 
        var diff, closestScale, bestMatch = Infinity;
115
 
 
116
 
        $.each(increments, function (i, scale) {
117
 
            diff = Math.abs(scale - imageScale);
118
 
 
119
 
            if (diff < bestMatch) {
120
 
                bestMatch = diff;
121
 
                closestScale = scale;
122
 
            }
123
 
        });
124
 
 
125
 
        // Store closest matched image scale
126
 
        Helioviewer.userSettings.set('state.imageScale', closestScale);
127
 
 
128
 
        return closestScale;
129
 
    }
130
 
});
 
 
b'\\ No newline at end of file'