2
* ScreenshotManagerUI class definition
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,
7
eqeqeq: true, plusplus: true, bitwise: true, regexp: false, strict: true,
8
newcap: true, immed: true, maxlen: 80, sub: true */
9
/*global $, window, Helioviewer, helioviewer, MediaManagerUI, ScreenshotManager
12
var ScreenshotManagerUI = MediaManagerUI.extend(
13
/** @lends ScreenshotManagerUI */
17
* Creates a new ScreenshotManagerUI instance
19
* @param {ScreenshotManager} model ScreenshotManager instance
22
var screenshots = Helioviewer.userSettings.get('history.screenshots');
23
this._manager = new ScreenshotManager(screenshots);
25
this._super("screenshot");
32
* Returns a URL to generate a screenshot of the current viewport
34
* Used to generate thumbnails for the current page
36
getScreenshotURL: function () {
37
var roi, imageScale, layers, params;
39
imageScale = helioviewer.getImageScale();
40
roi = helioviewer.getViewportRegionOfInterest();
42
// Remove any layers which do not lie in the reguested region
43
layers = this._checkLayers(helioviewer.getLayers());
45
// Make sure selection region and number of layers are acceptible
46
if (!this._validateRequest(roi, layers)) {
51
action : "takeScreenshot",
52
imageScale : imageScale,
54
date : helioviewer.getDate().toISOString(),
56
}, this._toArcsecCoords(roi, imageScale));
58
return Helioviewer.api + "?" + $.param(params);
62
* Displays a jGrowl notification to the user informing them that their
63
* download has completed
65
_displayDownloadNotification: function (screenshot) {
66
var jGrowlOpts, body, self = this;
68
// Options for the jGrowl notification
75
body = "<a href='" + Helioviewer.api +
76
"?action=downloadScreenshot&id=" +
77
screenshot.id + "'>Your " + screenshot.name +
78
" screenshot is ready! Click here to download. </a>";
80
// Create the jGrowl notification.
81
$(document).trigger("message-console-log",
82
[body, jGrowlOpts, true, true]);
86
* Initializes ScreenshotManager-related event handlers
88
_initEvents: function () {
93
// Screenshot ROI selection buttons
94
this._fullViewportBtn.click(function () {
95
self._takeScreenshot();
98
this._selectAreaBtn.click(function () {
99
$(document).trigger("enable-select-tool",
100
$.proxy(self._takeScreenshot, self));
103
// Setup click handler for history items
104
$("#screenshot-history .history-entry")
105
.live('click', $.proxy(this._onScreenshotClick, this));
109
* Creates HTML for a preview tooltip with a preview thumbnail,
110
* if available, and some basic information about the screenshot or movie
112
_buildPreviewTooltipHTML: function (screenshot) {
113
var width, height, date, html;
115
width = Math.round((screenshot.x2 - screenshot.x1) /
116
screenshot.imageScale);
117
height = Math.round((screenshot.y2 - screenshot.y1) /
118
screenshot.imageScale);
120
date = screenshot.date.substr(0, 19).replace(/T/, " ");
122
html = "<div style='text-align: center;'>" +
123
"<img src='" + Helioviewer.api + "?action=downloadScreenshot&id=" + screenshot.id +
124
"' alt='preview thumbnail' class='screenshot-preview' /></div>" +
125
"<table class='preview-tooltip'>" +
126
"<tr><td><b>Date:</b></td><td>" + date + "</td></tr>" +
127
"<tr><td><b>Scale:</b></td><td>" +
128
screenshot.imageScale.toFixed(2) +
129
" arcsec/px</td></tr>" +
130
"<tr><td><b>Dimensions:</b></td><td>" + width +
131
"x" + height + " px</td></tr>" +
138
* When a screenshot history entry is clicked, and the screenshot has
139
* finished processing, download the screenshot. Otherwise do nothing.
141
_onScreenshotClick: function (event) {
142
var id = $(event.currentTarget).data('id'),
143
url = Helioviewer.api + "?action=downloadScreenshot&id=" + id;
144
window.open(url, '_parent');
150
* Gathers all necessary information to generate a screenshot, and then
151
* displays the image when it is ready.
153
* @param {Object} roi Region of interest to use in place of the current \
156
_takeScreenshot: function (roi) {
157
var params, dataType, imageScale, layers, events, eventLabels, scale, scaleType, scaleX, scaleY, screenshot, self = this;
159
if (typeof roi === "undefined") {
160
roi = helioviewer.getViewportRegionOfInterest();
163
imageScale = helioviewer.getImageScale();
164
layers = helioviewer.getVisibleLayers(roi);
165
events = helioviewer.getEvents();
167
if ( Helioviewer.userSettings.get("state.eventLayerVisible") === false ) {
172
// Make sure selection region and number of layers are acceptible
173
if (!this._validateRequest(roi, layers)) {
178
action : "takeScreenshot",
179
imageScale : imageScale,
182
eventLabels : Helioviewer.userSettings.get("state.eventLabels"),
183
scale : Helioviewer.userSettings.get("state.scale"),
184
scaleType : Helioviewer.userSettings.get("state.scaleType"),
185
scaleX : Helioviewer.userSettings.get("state.scaleX"),
186
scaleY : Helioviewer.userSettings.get("state.scaleY"),
187
date : helioviewer.getDate().toISOString(),
189
}, this._toArcsecCoords(roi, imageScale));
192
$.get(Helioviewer.api, params, function (response) {
193
if ((response === null) || response.error) {
194
$(document).trigger("message-console-info",
195
"Unable to create screenshot. Please try again later.");
199
screenshot = self._manager.add(
200
response.id, params.imageScale, params.layers,
201
new Date().toISOString(), params.date,
202
params.x1, params.x2, params.y1, params.y2
204
self._addItem(screenshot);
205
self._displayDownloadNotification(screenshot);
206
}, Helioviewer.dataType);