2
// Accepted URL parameters
3
// (except "imageLayers" and "eventLayers", handled separately)
5
'strings' => array('date', 'movieId', 'output'),
6
'floats' => array('centerX', 'centerY', 'imageScale'),
7
'bools' => array('debug', 'hideWatermark', 'eventLabels')
10
$urlSettings = array();
12
// Check for URL params and cast to appropriate types
13
foreach($params['strings'] as $str) {
14
if (isset($_GET[$str]))
15
$urlSettings[$str] = $_GET[$str];
17
foreach($params['floats'] as $float) {
18
if (isset($_GET[$float]))
19
$urlSettings[$float] = (float) $_GET[$float];
21
foreach($params['bools'] as $bool) {
22
if ( isset($_GET[$bool]) &&
23
(strtolower($_GET[$bool]) == 'true' || $_GET[$bool] == 1) ) {
25
$urlSettings[$bool] = true;
2
$ini = "settings/Config.ini";
3
if ((!file_exists($ini)) || (!$config = parse_ini_file($ini)))
4
die("Missing config file!");
5
// Remove variables that are not used on the client-side
6
unset($config['enable_statistics_collection']);
8
if (isset($_GET['debug']) && ((bool) $_GET['debug'] == true))
9
$config['compress_js'] = $config['compress_css'] = false;
14
<?php printf("<!-- Helioviewer 2.2.0 (rev. %s), %s -->\n", $config["build_num"], $config["last_update"]);?>
15
<title>Helioviewer - Solar and heliospheric image visualization tool</title>
16
<meta charset="utf-8" />
17
<meta name="description" content="Helioviewer - Solar and heliospheric image visualization tool" />
18
<meta name="keywords" content="Helioviewer, jpeg 2000, jp2, solar image viewer, sun, solar, heliosphere, solar physics, viewer, visualization, space, astronomy, SOHO, EIT, LASCO, SDO, MDI, coronagraph, " />
20
<?php if ($config["disable_cache"]) echo "<meta http-equiv=\"Cache-Control\" content=\"No-Cache\" />\n"; ?>
22
<link rel="shortcut icon" href="favicon.ico" />
25
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
28
<!-- YUI CSS Reset -->
29
<link rel="stylesheet" href="lib/yui-2.8.2r1/reset-fonts.css" />
31
<!-- Plugin Styles -->
32
<link rel="stylesheet" href="lib/jquery.ui-1.8/css/dot-luv-modified/jquery-ui-1.8.12.custom.css" />
33
<link rel="stylesheet" href="lib/jquery.jgrowl/jquery.jgrowl.css" />
34
<link rel="stylesheet" href="lib/jquery.imgareaselect-0.9.5/css/imgareaselect-default.css" />
35
<link rel="stylesheet" href="lib/jquery.qTip2/jquery.qtip.min.css" />
37
<!-- Helioviewer-Specific Styles -->
40
if ($config['disable_cache']) {
43
$signature = $config['build_num'];
27
else if ( isset($_GET[$bool]) &&
28
(strtolower($_GET[$bool]) == 'false' || $_GET[$bool] == 0) ) {
45
$version = "rev=$signature";
30
$urlSettings[$bool] = false;
48
if ($config["compress_css"]) {
49
echo "<link rel=\"stylesheet\" href=\"build/css/helioviewer.min.css?$version\" />\n ";
33
unset($urlSettings[$bool]);
37
// Process imageLayers separately if set
38
if (isset($_GET['imageLayers']) && $_GET['imageLayers'] != '') {
39
if ($_GET['imageLayers'][0] == '[') {
40
$imageLayersString = substr($_GET['imageLayers'],1,-1);
42
$imageLayersString = $_GET['imageLayers'];
44
$urlSettings['imageLayers'] = preg_split("/\],\[/", $imageLayersString);
47
$urlSettings['imageLayers'] = '';
50
// Process eventLayers separately if set
51
if (isset($_GET['eventLayers']) && $_GET['eventLayers'] != '') {
52
if ($_GET['eventLayers'][0] == '[') {
53
$eventLayersString = substr($_GET['eventLayers'],1,-1);
55
$eventLayersString = $_GET['eventLayers'];
57
$urlSettings['eventLayers'] = preg_split("/\],\[/", $eventLayersString);
60
$urlSettings['eventLayers'] = '';
63
// Default to HTML5 client
64
if ( !isset($urlSettings['output']) ) {
65
require_once 'src/php/HelioviewerWebClient.php';
66
$helioviewer = new HelioviewerWebClient($urlSettings);
68
else if ( $urlSettings['output'] == 'embed' ) {
69
// Embedded version of Helioviewer.org
70
require_once 'src/php/HelioviewerEmbeddedClient.php';
71
$helioviewer = new HelioviewerEmbeddedClient($urlSettings);
52
$css = array("main", "layout", "accordions", "dialogs",
53
"media-manager", "sliders", "timenav",
54
"video-gallery", "viewport");
55
foreach($css as $file)
56
printf("<link rel=\"stylesheet\" href=\"resources/css/%s.css?$version\" />\n ", $file);
60
<!-- Theme Modifications -->
61
<link rel="stylesheet" href="resources/css/dot-luv.css">
63
// Load Google Analytics if enabled
64
if ($config["google_analytics_id"]) {
67
<!-- Google Analytics -->
68
<script type="text/javascript">
69
var _gaq = _gaq || [];
70
_gaq.push(['_setAccount', '<?php echo $config["google_analytics_id"];?>']);
71
_gaq.push(['_trackPageview']);
72
_gaq.push(['_trackPageLoadTime']);
75
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
76
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
77
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
87
<div id="header"></div>
94
<!-- Middle Column -->
99
<div id="helioviewer-viewport-container-outer" class="ui-widget ui-widget-content ui-corner-all">
100
<div id="helioviewer-viewport-container-inner">
101
<div id="helioviewer-viewport">
102
<!-- Movement sandbox -->
103
<div id="sandbox" style="position: absolute;">
104
<div id="moving-container"></div>
107
<!-- Message console -->
108
<div id="message-console"></div>
110
<!-- Image area select boundary container -->
111
<div id="image-area-select-container"></div>
115
<!-- UI COMPONENTS -->
117
<!-- Zoom Controls -->
118
<div id="zoomControls">
119
<div id="zoomControlZoomIn" title="Zoom in.">+</div>
120
<div id="zoomSliderContainer">
121
<div id="zoomControlSlider"></div>
123
<div id="zoomControlZoomOut" title="Zoom out.">-</div>
126
<!-- Center button -->
127
<div id="center-button" title="Center the image on the screen.">
131
<!--Social buttons -->
132
<div id="social-buttons">
134
<div id="link-button" class="text-btn" title="Get a link to the current page.">
135
<span class="ui-icon ui-icon-link" style="float: left;"></span>
136
<span style="line-height: 1.6em">Link</span>
139
<!-- Email button -->
140
<!--<div id="email-button" class="text-btn">
141
<span class="ui-icon ui-icon-mail-closed" style="float: left;"></span>
142
<span style="line-height: 1.6em">Email</span>
145
<!-- Movie button -->
146
<div id="movie-button" class="text-btn">
147
<span class="ui-icon ui-icon-video" style="float: left;"></span>
148
<span style="line-height: 1.6em">Movie</span>
151
<!-- Screenshot button -->
152
<div id="screenshot-button" class="text-btn">
153
<span class="ui-icon ui-icon-image" style="float: left;"></span>
154
<span style="line-height: 1.6em">Screenshot</span>
157
<!-- Settings button -->
158
<div id="settings-button" class="text-btn" title="Open Helioviewer settings dialog.">
159
<span class="ui-icon ui-icon-gear" style="float: left;"></span>
160
<span style="line-height: 1.6em">Settings</span>
163
<!-- JHelioviewer -->
164
<!-- 2010/12/28: Disabling until JNLP launching is fixed -->
165
<!-- <div id="jhelioviewer-button" class="text-btn">
166
<span class="ui-icon ui-icon-arrowthickstop-1-s" style="float: left;"></span>
167
<span style="line-height: 1.6em">JHelioviewer</span>
171
<!-- Fullscreen toggle -->
172
<div id='fullscreen-btn' title="Toggle fullscreen display.">
173
<span class='ui-icon ui-icon-arrow-4-diag'></span>
176
<!-- Mouse coordinates display -->
177
<div id="mouse-coords" style="display: none;">
178
<div id="mouse-coords-x"></div>
179
<div id="mouse-coords-y"></div>
182
<!-- Screenshot Manager -->
183
<div id='screenshot-manager-container' class='media-manager-container glow'>
184
<div id='screenshot-manager-build-btns' class='media-manager-build-btns'>
185
<div id='screenshot-manager-full-viewport' class='text-btn'>
186
<span class='ui-icon ui-icon-arrowthick-2-se-nw' style='float:left;'></span>
187
<span style='line-height: 1.6em'>Full Viewport</span>
189
<div id='screenshot-manager-select-area' class='text-btn' style='float:right;'>
190
<span class='ui-icon ui-icon-scissors' style='float:left;'></span>
191
<span style='line-height: 1.6em'>Select Area</span>
194
<div id='screenshot-history-title' class='media-history-title'>
196
<div id='screenshot-clear-history-button' class='text-btn' style='float:right;'>
197
<span class='ui-icon ui-icon-trash' style='float:left;'></span>
198
<span style='font-weight:normal'><i>Clear</i></span>
201
<div id='screenshot-history'></div>
203
<!-- Movie Manager -->
204
<div id='movie-manager-container' class='media-manager-container glow'>
205
<div id='movie-manager-build-btns' class='media-manager-build-btns'>
206
<div id='movie-manager-full-viewport' class='text-btn'>
207
<span class='ui-icon ui-icon-arrowthick-2-se-nw' style='float:left;'></span>
208
<span style='line-height: 1.6em'>Full Viewport</span>
210
<div id='movie-manager-select-area' class='text-btn' style='float:right;'>
211
<span class='ui-icon ui-icon-scissors' style='float:left;'></span>
212
<span style='line-height: 1.6em'>Select Area</span>
215
<div id='movie-history-title' class='media-history-title'>
217
<div id='movie-clear-history-button' class='text-btn' style='float:right;'>
218
<span class='ui-icon ui-icon-trash' style='float:left;'></span>
219
<span style='font-weight:normal'><i>Clear</i></span>
222
<div id='movie-history'></div>
225
<!-- Image area select tool -->
226
<div id='image-area-select-buttons'>
227
<div id='done-selecting-image' class='text-btn'>
228
<span class='ui-icon ui-icon-circle-check'></span>
231
<div id='cancel-selecting-image' class='text-btn'>
232
<span class='ui-icon ui-icon-circle-close'></span>
235
<div id='help-selecting-image' class='text-btn' style='float:right;'>
236
<span class='ui-icon ui-icon-info'></span>
249
<div id="left-col-header">
250
<a href='http://www.helioviewer.org'>
251
<img src="resources/images/logos/simple.png" id="helioviewer-logo-main" alt="Helioviewer.org Logo">
255
<div class="section-header" style="margin-left:5px; margin-top: 15px;">Time</div>
256
<div id="observation-controls" class="ui-widget ui-widget-content ui-corner-all shadow">
257
<!-- Observation Date -->
258
<div id="observation-date-container">
259
<div id="observation-date-label">Date:</div>
260
<input type="text" id="date" name="date" value="" maxlength='10'>
261
<span id="timeNowBtn" title="Go to the time of the most recent available image for the currently loaded layers.">latest</span>
264
<!-- Observation Time -->
265
<div id="observation-time-container">
266
<div id="observation-time-label">Time:</div>
267
<input id="time" name="time" value="" style="width:80px" type="text" maxlength="8" pattern="[\d]{2}:[\d]{2}:[\d]{2}">
268
<span style='font-size: 11px; font-weight: 700; margin-left: 2px;'>UTC</span>
271
<!-- Time Navigation Buttons & Time Increment selector -->
273
<div id="time-navigation-buttons">Time-step:</div>
274
<select id="timestep-select" name="time-step"></select>
275
<span id="timeBackBtn" class="ui-icon ui-icon-circle-arrow-w" title="Move the Observation Date/Time backward one time-step"></span>
276
<span id="timeForwardBtn" class="ui-icon ui-icon-circle-arrow-e" title="Move the Observation Date/Time forward one time-step"></span>
281
<div id="tileLayerAccordion"></div>
286
<!-- Right Column -->
288
<div id="right-col-header" style='height: 11px'></div>
290
<!-- Recent Blog Entries -->
291
<div style="margin-left: 5px; margin-top: 15px;" class="section-header">News</div>
292
<div id="social-panel" class="ui-widget ui-widget-content ui-corner-all shadow"></div>
294
<!-- User-Submitted Videos -->
295
<div id="user-video-gallery-header" class="section-header">
296
<a href="http://www.youtube.com/user/Helioviewer" target="_blank" style='text-decoration: none;'>
297
<img id='youtube-logo' src='resources/images/Social.me/48 by 48 pixels/youtube.png' alt='YouTube Logo' />
299
<span style='position: absolute; bottom: 5px;'>Recently Shared</span>
301
<div id="user-video-gallery" class="ui-widget ui-widget-content ui-corner-all shadow">
302
<a id="user-video-gallery-next" href="#" title="Go to next page.">
303
<div class='ui-icon ui-icon-triangle-1-n'></div>
305
<div id="user-video-gallery-main">
306
<div id="user-video-gallery-spinner"></div>
308
<a id="user-video-gallery-prev" href="#" title="Go to previous page.">
309
<div class='ui-icon ui-icon-triangle-1-s'></div>
320
<div id="footer-container-outer">
321
<div id="footer-container-inner">
323
<div id="footer-links">
324
<a href="http://helioviewer.org/wiki/Helioviewer.org_User_Guide" class="light" target="_blank">Help</a>
325
<a id="helioviewer-about" class="light" href="dialogs/about.php">About</a>
326
<a id="helioviewer-usage" class="light" href="dialogs/usage.php">Usage Tips</a>
327
<a href="http://helioviewer.org/wiki/Main_Page" class="light" target="_blank">Wiki</a>
328
<a href="http://helioviewer.org/blog" class="light" target="_blank">Blog</a>
329
<a href="http://jhelioviewer.org" class="light" target="_blank">JHelioviewer</a>
330
<a href="api/" class="light" target="_blank">API</a>
331
<a href="mailto:contact@helioviewer.org" class="light">Contact</a>
332
<a href="https://bugs.launchpad.net/helioviewer.org/" class="light" style="margin-right:2px;" target="_blank">Report Problem</a>
339
<!-- Loading Indicator -->
340
<div id="loading" style="display: none">Loading...</div>
342
<!-- Viewport shadow -->
343
<div id='helioviewer-viewport-container-shadow' class='shadow'></div>
345
<!-- About dialog -->
346
<div id='about-dialog'></div>
348
<!-- Layer choice dialog -->
349
<div id='layer-choice-dialog'></div>
351
<!-- Settings dialog -->
352
<div id='settings-dialog' style='display:none; margin: 15px; font-size: 1em;'>
354
<select id='settings-movie-length' name='movie-length'>
355
<option value='10800'>3 hours</option>
356
<option value='21600'>6 hours</option>
357
<option value='43200'>12 hours</option>
358
<option value='86400'>1 day</option>
359
<option value='172800'>2 days</option>
360
<option value='604800'>1 week</option>
363
<span style='font-size: 0.8em;'><b>Note:</b> When making a movie, your current observation time will become the center
364
of the movie. For example, if your observation time is set to "12:00:00" and you
365
choose to make a 6 hour movie, then movie will start at "09:00:00" and end at "15:00:00".</span>
368
<!-- Usage Dialog -->
369
<div id='usage-dialog'></div>
372
<div id='url-dialog' style="display:none;">
373
<div id="helioviewer-url-box">
374
Use the following link to refer to current page:
375
<form style="margin-top: 5px;">
376
<input type="text" id="helioviewer-url-input-box" style="width:98%;" value="http://helioviewer.org" />
383
if (isset($_GET['fblite']) && ((bool) $_GET['fblite'] == true)) {
385
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
388
if ($config["compress_js"]) {
392
<script src="http://code.jquery.com/jquery-1.6.min.js" type="text/javascript"></script>
393
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>
394
<script src="lib/jquery.class/jquery.class.min.js" type="text/javascript"></script>
396
<!-- Mousewheel support -->
397
<script src="lib/jquery.mousewheel.3.0.2/jquery.mousewheel.min.js" type="text/javascript"></script>
400
<script src="lib/jquery.jgrowl/jquery.jgrowl_minimized.js" type="text/javascript"></script>
402
<!-- imgAreaSelect jQuery plugin -->
403
<script src="lib/jquery.imgareaselect-0.9.5/scripts/jquery.imgareaselect.pack.js" type="text/javascript"></script>
406
<script src="lib/date.js/date-en-US.js" type="text/javascript"></script>
409
<script src="lib/jquery.jfeed/build/jquery.jfeed.js" type="text/javascript"></script>
412
<script src="lib/jquery.qTip2/jquery.qtip.pack.js" type="text/javascript"></script>
415
<script src="lib/jquery.xml2json/jquery.xml2json.pack.js" type="text/javascript" language="javascript"></script>
422
<script src="http://code.jquery.com/jquery-1.6.js" type="text/javascript"></script>
423
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.js" type="text/javascript"></script>
424
<script src="lib/jquery.class/jquery.class.js" type="text/javascript"></script>
426
<!-- Mousewheel support -->
427
<script src="lib/jquery.mousewheel.3.0.2/jquery.mousewheel.js" type="text/javascript"></script>
430
<script src="lib/jquery.jgrowl/jquery.jgrowl.js" type="text/javascript"></script>
432
<!-- imgAreaSelect jQuery plugin -->
433
<script src="lib/jquery.imgareaselect-0.9.5/scripts/jquery.imgareaselect.js" type="text/javascript"></script>
436
<script src="lib/date.js/date-en-US.js" type="text/javascript"></script>
439
<script src="lib/jquery.jfeed/build/jquery.jfeed.js" type="text/javascript"></script>
442
<script src="lib/jquery.qTip2/jquery.qtip.js" type="text/javascript"></script>
445
<script src="lib/jquery.xml2json/jquery.xml2json.js" type="text/javascript" language="javascript"></script>
451
<script type="text/javascript" src="lib/jquery.json-2.2/jquery.json-2.2.min.js"></script>
452
<script type="text/javascript" src="lib/jquery.cookie/jquery.cookie.min.js"></script>
453
<script type="text/javascript" src="lib/Cookiejar/jquery.cookiejar.pack.js"></script>
456
<!--<script src="http://static.simile.mit.edu/timeline/api-2.2.0/timeline-api.js" type="text/javascript"></script>-->
459
<!-- $("img.tile[src!=resources/images/transparent_512.gif]"); -->
460
<!--<script src="lib/pixastic/pixastic.custom.js" type="text/javascript"></script>-->
462
<!-- Helioviewer JavaScript -->
465
if ($config["compress_js"]) {
466
$compressed = "build/helioviewer.min.js";
467
if (!file_exists($compressed)) {
468
$error = "<div style='position: absolute; width: 100%; text-align: center; top: 40%; font-size: 14px;'>
469
<img src='resources/images/logos/about.png' alt='helioviewer logo'></img><br>
470
<b>Configuration:</b> Unable to find compressed JavaScript files.
471
If you haven't already, use Apache Ant with the included build.xml file to generate
472
compressed files.</div></body></html>";
476
echo "<script src=\"$compressed?$version\" type=\"text/javascript\"></script>\n\t";
479
$js = array("Utility/Config.js", "Utility/HelperFunctions.js", "UI/IconPicker.js",
480
"Tiling/Layer/Layer.js", "Tiling/Layer/TileLoader.js", "Tiling/Layer/TileLayer.js",
481
"Tiling/Layer/HelioviewerTileLayer.js", "UI/TreeSelect.js", "UI/ImageSelectTool.js",
482
"Utility/KeyboardManager.js", "Tiling/Manager/LayerManager.js", "Events/EventManager.js",
483
"Tiling/Manager/TileLayerManager.js", "Tiling/Manager/HelioviewerTileLayerManager.js",
484
"Events/EventType.js", "Events/EventFeatureRecognitionMethod.js", "Media/MediaManagerUI.js",
485
"Media/MediaManager.js", "Media/MovieManager.js", "Media/MovieManagerUI.js",
486
"Media/ScreenshotManager.js", "Media/ScreenshotManagerUI.js",
487
"Image/JP2Image.js", "Tiling/Manager/TileLayerAccordion.js", "UI/MessageConsole.js",
488
"UI/TimeControls.js", "Utility/SettingsLoader.js", "Utility/UserSettings.js",
489
"Utility/FullscreenControl.js", "Viewport/Helper/MouseCoordinates.js", "Viewport/Viewport.js",
490
"Viewport/Helper/HelioviewerMouseCoordinates.js", "Viewport/Helper/SandboxHelper.js",
491
"Viewport/Helper/ViewportMovementHelper.js", "Viewport/HelioviewerViewport.js",
492
"Viewport/ViewportController.js", "Helioviewer.js", "UI/ZoomControls.js", "UI/UserVideoGallery.js",
493
"Utility/InputValidator.js", "UI/jquery.ui.dynaccordion.js");
494
foreach($js as $file)
495
printf("<script src=\"src/%s?$version\" type=\"text/javascript\"></script>\n", $file);
499
<script type="text/javascript">
500
var serverSettings, settingsJSON, urlSettings;
504
printf("settingsJSON = %s;\n", json_encode($config));
506
// Settings specified via URL parameters
507
$urlSettings = array();
509
//API Example: helioviewer.org/?date=2003-10-05T00:00:00Z&imageScale=2.4&imageLayers=[SOHO,AIA,AIA,171,1,70],[SOHO,LASCO,C2,white light,0,100]
510
if (isset($_GET['imageLayers'])) {
511
$imageLayersString = ($_GET['imageLayers'][0] == "[") ? substr($_GET['imageLayers'],1,-1) : $_GET['imageLayers'];
512
$imageLayers = preg_split("/\],\[/", $imageLayersString);
513
$urlSettings['imageLayers'] = $imageLayers;
516
if (isset($_GET['date']))
517
$urlSettings['date'] = $_GET['date'];
519
if (isset($_GET['imageScale']))
520
$urlSettings['imageScale'] = $_GET['imageScale'];
523
printf("\turlSettings = %s;\n", json_encode($urlSettings));
525
serverSettings = new Config(settingsJSON).toArray();
526
helioviewer = new Helioviewer(urlSettings, serverSettings);