2
2
* MovieManagerUI class definition
3
* @author <a href="mailto:jeff.stys@nasa.gov">Jeff Stys</a>
4
3
* @author <a href="mailto:keith.hughitt@nasa.gov">Keith Hughitt</a>
6
/*jslint browser: true, white: true, onevar: true, undef: true, nomen: false,
5
/*jslint browser: true, white: true, onevar: true, undef: true, nomen: false,
7
6
eqeqeq: true, plusplus: true, bitwise: true, regexp: false, strict: true,
8
7
newcap: true, immed: true, maxlen: 80, sub: true */
9
8
/*global $, window, MovieManager, MediaManagerUI, Helioviewer, helioviewer,
10
layerStringToLayerArray, humanReadableNumSeconds
9
layerStringToLayerArray, humanReadableNumSeconds, addthis */
13
11
var MovieManagerUI = MediaManagerUI.extend(
14
12
/** @lends MovieManagerUI */
57
* Uses the layers passed in to send an Ajax request to api.php, to have it
51
* Uses the layers passed in to send an Ajax request to api.php, to have it
58
52
* build a movie. Upon completion, it displays a notification that lets the
59
* user click to view it in a popup.
53
* user click to view it in a popup.
61
55
_buildMovieRequest: function (serializedFormParams) {
62
56
var formParams, baseParams, params, frameRate;
64
58
// Convert to an associative array for easier processing
67
61
$.each(serializedFormParams, function (i, field) {
68
formParams[field.name] = field.value;
62
formParams[field.name] = field.value;
71
65
this.building = true;
73
if ( Helioviewer.userSettings.get("state.eventLayerVisible") === false ) {
74
this._movieEvents = '';
75
this._movieEventsLabels = false;
78
67
// Movie request parameters
80
action : "queueMovie",
81
imageScale : this._movieScale,
82
layers : this._movieLayers,
83
events : this._movieEvents,
84
eventsLabels : this._movieEventsLabels,
85
scale : Helioviewer.userSettings.get("state.scale"),
86
scaleType : Helioviewer.userSettings.get("state.scaleType"),
87
scaleX : Helioviewer.userSettings.get("state.scaleX"),
88
scaleY : Helioviewer.userSettings.get("state.scaleY"),
89
format : this._manager.format
69
action : "queueMovie",
70
imageScale : this._movieScale,
71
layers : this._movieLayers,
72
format : this._manager.format
92
75
// Add ROI and start and end dates
93
params = $.extend(baseParams, this._movieROI,
94
this._getMovieTimeWindow());
76
params = $.extend(baseParams, this._movieROI, this._getMovieTimeWindow());
96
78
// (Optional) Frame-rate or movie-length
97
79
if (formParams['speed-method'] === "framerate") {
102
84
baseParams['frameRate'] = formParams['framerate'];
105
if (formParams['movie-length'] < 5 ||
106
formParams['movie-length'] > 100) {
87
if (formParams['movie-length'] < 5 || formParams['movie-length'] > 100) {
107
88
throw "Movie length must be between 5 and 100 seconds.";
109
90
baseParams['movieLength'] = formParams['movie-length'];
93
//console.dir(params);
113
97
this._queueMovie(params);
115
99
this._advancedSettings.hide();
116
100
this._settingsDialog.hide();
102
//this.hideDialogs();
120
103
this.building = false;
124
107
* Determines the start and end dates to use when requesting a movie
126
109
_getMovieTimeWindow: function () {
127
var movieLength, currentTime, endTime, startTimeStr, endTimeStr,
110
var movieLength, currentTime, endTime, startTimeStr, endTimeStr, now, diff;
130
112
movieLength = Helioviewer.userSettings.get("options.movies.duration");
132
114
// Webkit doesn't like new Date("2010-07-27T12:00:00.000Z")
133
115
currentTime = helioviewer.getDate();
135
117
// We want shift start and end time if needed to ensure that entire
136
118
// duration will be used. For now, we will assume that the most
137
119
// recent data available is close to now() to make things simple
159
141
var layers = helioviewer.getVisibleLayers(roi);
160
var events = helioviewer.getEvents();
162
143
// Make sure selection region and number of layers are acceptible
163
144
if (!this._validateRequest(roi, layers)) {
167
148
// Store chosen ROI and layers
168
149
this._movieScale = helioviewer.getImageScale();
169
150
this._movieROI = this._toArcsecCoords(roi, this._movieScale);
170
151
this._movieLayers = layers;
171
this._movieEvents = events;
172
this._movieEventsLabels = helioviewer.getEventsLabels();
175
154
this._settingsConsole.hide();
176
155
this._settingsDialog.show();
177
this._advancedSettings.show();
181
159
* Queues a movie request
183
161
_queueMovie: function (params) {
184
162
var callback, self = this;
186
164
// AJAX Responder
187
165
callback = function (response) {
188
166
var msg, movie, waitTime;
190
168
if ((response === null) || response.error) {
192
if (response.errno === 40) {
170
if (response.errno == 40) {
193
171
msg = response.error;
196
174
msg = "We are unable to create a movie for the time you " +
197
"requested. Please select a different time range " +
175
"requested. Please select a different time range and try " +
200
178
$(document).trigger("message-console-info", msg);
207
185
movie = self._manager.queue(
208
response.id, response.eta, response.token,
209
params.imageScale, params.layers, params.events,
210
params.eventsLabels, params.scale, params.scaleType,
211
params.scaleX, params.scaleY, new Date().toISOString(),
212
params.startTime, params.endTime, params.x1, params.x2,
186
response.id, response.eta, response.token,
187
params.imageScale, params.layers,
188
new Date().toISOString(), params.startTime, params.endTime,
189
params.x1, params.x2, params.y1, params.y2
215
191
self._addItem(movie);
217
193
waitTime = humanReadableNumSeconds(response.eta);
218
msg = "Your video is processing and will be available in " +
194
msg = "Your video is processing and will be available in " +
219
195
"approximately " + waitTime + ". You may view it at any " +
220
196
"time after it is ready by clicking the 'Movie' button";
221
197
$(document).trigger("message-console-info", msg);
225
201
$.get(Helioviewer.api, params, callback, Helioviewer.dataType);
230
206
* Initializes MovieManager-related event handlers
232
208
_initEvents: function () {
233
209
var timer, self = this;
237
213
// ROI selection buttons
238
214
this._fullViewportBtn.click(function () {
239
216
self._showMovieSettings();
242
219
this._selectAreaBtn.click(function () {
243
$(document).trigger("enable-select-tool",
221
$(document).trigger("enable-select-tool",
244
222
$.proxy(self._showMovieSettings, self));
247
225
// Setup hover and click handlers for movie history items
248
226
$("#movie-history .history-entry")
249
227
.live('click', $.proxy(this._onMovieClick, this))
250
228
.live('mouseover mouseout', $.proxy(this._onMovieHover, this));
253
231
// Download completion notification link
254
232
$(".message-console-movie-ready").live('click', function (event) {
255
var movie = $(event.currentTarget).data('movie');
233
var movie = $(event.currentTarget).data('movie');
256
234
self._createMoviePlayerDialog(movie);
259
237
// Update tooltip when movie is finished downloading
260
238
$(document).bind("movie-ready", function (event, movie) {
261
239
$("#" + self._type + "-" + movie.id).qtip("destroy");
262
240
self._buildPreviewTooltip(movie);
265
243
// Upload form submission
266
244
$("#youtube-video-info").submit(function () {
267
245
self.submitVideoUploadForm();
271
249
// Toggle advanced settings display
272
250
$("#movie-settings-toggle-advanced").click(function () {
273
251
// If help is visible, simply hide
292
270
// Toggle help display
293
271
$("#movie-settings-toggle-help").click(function () {
294
272
self._settingsForm.toggle();
295
273
self._settingsHelp.toggle();
300
278
* Initializes movie settings events
302
280
_initSettings: function () {
303
var length, lengthInput, duration, durationSelect,
304
frameRateInput, settingsForm, self = this;
281
var length, lengthInput, duration, durationSelect,
282
frameRateInput, lengthInput, settingsForm, self = this;
306
284
// Advanced movie settings
307
frameRateInput = $("#frame-rate");
308
lengthInput = $("#movie-length");
309
durationSelect = $("#movie-duration");
285
frameRateInput = $("#frame-rate");
286
lengthInput = $("#movie-length");
287
durationSelect = $("#movie-duration");
311
289
// Speed method enable/disable
312
290
$("#speed-method-f").change(function () {
313
291
lengthInput.attr("disabled", true);
314
292
frameRateInput.attr("disabled", false);
315
293
}).attr("checked", "checked").change();
317
295
$("#speed-method-l").change(function () {
318
296
frameRateInput.attr("disabled", true);
319
lengthInput.attr("disabled", false);
297
lengthInput.attr("disabled", false);
323
301
$("#movie-settings-cancel-btn").button().click(function (e) {
324
302
self._advancedSettings.hide();
325
303
self._settingsDialog.hide();
330
308
settingsForm = $("#movie-settings-form");
391
369
* Shows movie details and preview.
393
371
_onMovieHover: function (event) {
394
372
if (event.type === 'mouseover') {
395
//console.log('hover on');
373
//console.log('hover on');
397
//console.log('hover off');
375
//console.log('hover off');
402
* Creates HTML for a preview tooltip with a preview thumbnail,
380
* Creates HTML for a preview tooltip with a preview thumbnail,
403
381
* if available, and some basic information about the screenshot or movie
405
383
_buildPreviewTooltipHTML: function (movie) {
406
384
var width, height, thumbnail, html = "";
408
386
if (movie.status === 2) {
409
thumbnail = movie.thumbnail;
387
// Use relative paths for thumbnails (helps with debugging in VM)
388
if (Helioviewer.api === "api/index.php") {
389
thumbnail = movie.thumbnail.substr(movie.thumbnail.search("cache"));
391
thumbnail = movie.thumbnail;
411
html += "<div style='text-align: center;'>" +
394
html += "<div style='text-align: center;'>" +
412
395
"<img src='" + thumbnail +
413
396
"' width='95%' alt='preview thumbnail' /></div>";
415
398
width = movie.width;
416
399
height = movie.height;
422
405
html += "<table class='preview-tooltip'>" +
423
406
"<tr><td><b>Start:</b></td><td>" + movie.startDate + "</td></tr>" +
424
"<tr><td><b>End:</b></td><td>" + movie.endDate + "</td></tr>" +
425
"<tr><td><b>Scale:</b></td><td>" + movie.imageScale.toFixed(2) +
407
"<tr><td><b>End:</b></td><td>" + movie.endDate + "</td></tr>" +
408
"<tr><td><b>Scale:</b></td><td>" + movie.imageScale.toFixed(2) +
426
409
" arcsec/px</td></tr>" +
427
"<tr><td><b>Dimensions:</b></td><td>" + width +
410
"<tr><td><b>Dimensions:</b></td><td>" + width +
429
412
" px</td></tr>" +
436
419
* @description Opens a pop-up with the movie player in it.
438
421
_createMoviePlayerDialog: function (movie) {
439
var dimensions, title, uploadURL, flvURL, swfURL, html, dialog,
422
var dimensions, title, uploadURL, flvURL, swfURL, html, dialog,
440
423
screenshot, callback, self = this;
442
425
// Make sure dialog fits nicely inside the browser window
443
426
dimensions = this.getVideoPlayerDimensions(movie.width, movie.height);
445
428
// Movie player HTML
446
html = self.getVideoPlayerHTML(movie, dimensions.width,
429
html = self.getVideoPlayerHTML(movie.id, dimensions.width,
430
dimensions.height, movie.url);
449
432
// Movie player dialog
451
"<div id='movie-player-" + movie.id + "' " +
434
"<div id='movie-player-" + movie.id + "' " +
452
435
"class='movie-player-dialog'></div>"
455
438
dialog.find(".video-download-icon").click(function () {
456
439
// Google analytics event
457
440
if (typeof(_gaq) != "undefined") {
458
441
_gaq.push(['_trackEvent', 'Movies', 'Download']);
462
445
// Movie dialog title
463
title = movie.name + " (" + movie.startDate + " - " +
446
title = movie.name + " (" + movie.startDate + " - " +
464
447
movie.endDate + " UTC)";
466
449
// Have to append the video player here, otherwise adding it to the div
467
// beforehand results in the browser attempting to download it.
450
// beforehand results in the browser attempting to download it.
469
452
title : "Movie Player: " + title,
470
width : ((dimensions.width < 575)?600:dimensions.width+25),
471
height : dimensions.height + 80,
453
width : dimensions.width + 34,
454
height : dimensions.height + 104,
472
455
resizable : $.support.h264 || $.support.vp8,
473
456
close : function () {
495
478
helioviewer.displayMovieURL(movie.id);
483
$("#bbcode-" + movie.id).click(function () {
484
// Hide flash movies to prevent blocking
485
if (!($.support.h264 || $.support.vp8)) {
486
$(".movie-player-dialog").dialog("close");
488
self._showBBCode(movie.id, dimensions.width, dimensions.height);
499
492
// Flash video URL
500
flvURL = Helioviewer.api +
493
flvURL = Helioviewer.api +
501
494
"/?action=downloadMovie&format=flv&id=" + movie.id;
503
496
// SWF URL (The flowplayer SWF directly provides best Facebook support)
504
swfURL = Helioviewer.root +
505
"/lib/flowplayer/flowplayer-3.2.8.swf?config=" +
506
encodeURIComponent("{'clip':{'url': '../../" + flvURL + "'}}");
508
screenshot = movie.thumbnail.substr(0, movie.thumbnail.length - 9) +
497
swfURL = Helioviewer.root +
498
"/lib/flowplayer/flowplayer-3.2.8.swf?config=" +
499
encodeURIComponent("{'clip':{'url':'" + flvURL + "'}}");
501
screenshot = movie.thumbnail.substr(0, movie.thumbnail.length - 9) +
504
// If AddThis is not supported, skip toolbox initialization
505
if (typeof(addthis) == "undefined") {
509
// First get a shortened version of the movie URL
510
callback = function (response) {
511
// Then initialize AddThis toolbox
512
addthis.toolbox('#add-this-' + movie.id, {}, {
513
url: response.data.url,
514
title: "Helioviewer.org",
516
screenshot: screenshot,
523
// Initialize AddThis toolbox once a shortened URL has been requested
525
url: Helioviewer.api,
526
dataType: Helioviewer.dataType,
528
"action": "shortenURL",
529
"queryString": "movieId=" + movie.id
513
536
* Opens YouTube uploader either in a separate tab or in a dialog
515
538
showYouTubeUploadDialog: function (movie) {
516
539
var title, tags, url1, url2, description;
518
541
// Suggested movie title
519
title = movie.name + " (" + movie.startDate + " - " +
542
title = movie.name + " (" + movie.startDate + " - " +
520
543
movie.endDate + " UTC)";
522
// Suggested YouTube tags
545
// Suggested YouTube tags
525
548
$.each(movie.layers.split("],["), function (i, layerStr) {
526
alert('MovieManagerUI.showYouTubeUploadDialog() assumes 4-level hierarchy in layerStr');
527
549
var parts = layerStr.replace(']', "").replace('[', "")
528
550
.split(",").slice(0, 4);
530
552
// Add observatories, instruments, detectors and measurements
531
553
$.each(parts, function (i, item) {
532
554
if ($.inArray(item, tags) === -1) {
539
url1 = Helioviewer.api + "/?action=playMovie&id=" + movie.id +
540
"&format=mp4&hq=true";
541
url2 = Helioviewer.api + "/?action=downloadMovie&id=" + movie.id +
542
"&format=mp4&hq=true";
561
url1 = Helioviewer.root + "/?movieId=" + movie.id;
562
url2 = Helioviewer.root + "/api/?action=downloadMovie&id=" + movie.id + "&format=mp4&hq=true";
544
564
// Suggested Description
545
description = "This movie was produced by Helioviewer.org. See the " +
546
"original at " + url1 + " or download a high-quality " +
565
description = "This movie was produced by Helioviewer.org. See the " +
566
"original at " + url1 + " or download a high-quality " +
547
567
"version from " + url2;
549
569
// Update form defaults
550
570
$("#youtube-title").val(title);
551
571
$("#youtube-tags").val(tags);
645
662
var keywords = $("#youtube-tags").val(),
646
663
keywordMinLength = 2,
647
664
keywordMaxLength = 30;
649
666
// Make sure the title field is not empty
650
667
if ($("#youtube-title").val().length === 0) {
651
668
throw "Please specify a title for the movie.";
654
671
// User must specify at least one keyword
655
672
if (keywords.length === 0) {
656
673
throw "You must specifiy at least one tag for your video.";
659
676
// Make sure each keywords are between 2 and 30 characters each
660
677
$.each(keywords.split(","), function (i, keyword) {
661
678
var len = $.trim(keyword).length;
663
680
if (len > keywordMaxLength) {
664
throw "YouTube tags must not be longer than " +
681
throw "YouTube tags must not be longer than " +
665
682
keywordMaxLength + " characters each.";
666
683
} else if (len < keywordMinLength) {
667
throw "YouTube tags must be at least " + keywordMinLength +
684
throw "YouTube tags must be at least " + keywordMinLength +
668
685
" characters each.";
673
690
// < and > are not allowed in title, description or keywords
674
$.each($("#youtube-video-info input[type='text'], " +
691
$.each($("#youtube-video-info input[type='text'], " +
675
692
"#youtube-video-info textarea"), function (i, input) {
676
693
if ($(input).val().match(/[<>]/)) {
677
694
throw "< and > characters are not allowed";
735
748
var maxWidth = $(window).width() * 0.80,
736
749
maxHeight = $(window).height() * 0.80,
737
750
scaleFactor = Math.max(1, width / maxWidth, height / maxHeight);
740
753
"width" : Math.floor(width / scaleFactor),
741
754
"height" : Math.floor(height / scaleFactor)
746
* Decides how to display video and returns HTML corresponding to that
759
* Decides how to display video and returns HTML corresponding to that
749
getVideoPlayerHTML: function (movie, width, height) {
750
var downloadURL, downloadLink, youtubeBtn,
751
linkBtn, linkURL, tweetBtn, facebookBtn;
754
downloadURL = Helioviewer.api + "?action=downloadMovie&id=" + movie.id +
762
getVideoPlayerHTML: function (id, width, height, url) {
763
var downloadURL, downloadLink, youtubeBtn, bbcodeBtn, addthisBtn,
766
downloadURL = Helioviewer.api + "?action=downloadMovie&id=" + id +
755
767
"&format=mp4&hq=true";
757
downloadLink = "<div style='float:left;'><a target='_parent' href='" + downloadURL +
758
"' title='Download high-quality video'>" +
759
"<img style='width:93px; height:32px;' class='video-download-icon' " +
760
"src='resources/images/download_93x32.png' /></a></div>";
763
youtubeBtn = '<div style="float:left;"><a id="youtube-upload-' + movie.id + '" href="#" ' +
764
'target="_blank"><img class="youtube-icon" ' +
765
'title="Upload video to YouTube" style="width:79px;height:32px;" ' +
766
'src="resources/images/youtube_79x32.png" /></a></div>';
769
linkURL = helioviewer.serverSettings.rootURL + "/?movieId=" + movie.id;
771
linkBtn = "<div style='float:left;'><a id='video-link-" + movie.id + "' href='" + linkURL +
772
"' title='Get a link to the movie' " +
773
"target='_blank'><img class='video-link-icon' " +
774
"style='width:79px; height:32px;' " +
775
"src='resources/images/link_79x32.png' /></a></div>";
777
// Tweet Movie Button
778
tweetBtn = '<div style="float:right;"><a href="https://twitter.com/share" class="twitter-share-button" data-related="helioviewer" data-lang="en" data-size="medium" data-count="horizontal" data-url="http://'+document.domain+'/?movieId='+movie.id+'" data-text="Movie of the Sun created on Helioviewer.org:" data-hashtags="helioviewer" data-related="helioviewer">Tweet</a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></div>';
780
// Like Movie on Facebook Button
781
facebookBtn = '<div style="float:right;"><iframe src="//www.facebook.com/plugins/like.php?href='+encodeURIComponent('http://'+document.domain+'/?movieId='+movie.id)+'&width=90&height=21&colorscheme=dark&layout=button_count&action=like&show_faces=false&send=false&appId=6899099925" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:21px; width:90px;" allowTransparency="false"></iframe></div>';
769
downloadLink = "<a target='_parent' href='" + downloadURL +
770
"' title='Download high-quality video'>" +
771
"<img class='video-download-icon' " +
772
"src='resources/images/Tango/1321375855_go-bottom.png' /></a>";
774
youtubeBtn = "<a id='youtube-upload-" + id + "' href='#' " +
775
"target='_blank'><img class='youtube-icon' " +
776
"title='Upload video to YouTube' " +
777
"src='resources/images/Social.me/48 " +
778
"by 48 pixels/youtube.png' /></a>";
780
linkURL = helioviewer.serverSettings.rootURL + "/?movieId=" + id;
782
linkBtn = "<a id='video-link-" + id + "' href='" + linkURL +
783
"' title='Get a link to the movie' " +
784
"target='_blank'><img class='video-link-icon' " +
785
"style='margin-left: 3px' " +
786
"src='resources/images/berlin/32x32/link.png' /></a>";
788
bbcodeBtn = "<img class='bbcode-btn' id='bbcode-" + id + "' src='resources/images/codefisher/bbcode_32.png' alt='Helioviewer.org Community Forums BBCode link string' />";
790
addthisBtn = "<div style='display:inline; " +
791
"float: right;' id='add-this-" + id +
792
"' class='addthis_default_style addthis_32x32_style'>" +
793
"<a class='addthis_button_facebook addthis_32x32_style'></a>" +
794
"<a class='addthis_button_twitter addthis_32x32_style'></a>" +
795
"<a class='addthis_button_email addthis_32x32_style'></a>" +
796
"<a class='addthis_button_google addthis_32x32_style'></a>" +
797
"<a class='addthis_button_compact addthis_32x32_style'></a>" +
783
800
// HTML5 Video (H.264 or WebM)
784
801
if ($.support.vp8 || $.support.h264) {
785
802
// Work-around: use relative paths to simplify debugging
786
url = movie.url.substr(movie.url.search("cache"));
803
url = url.substr(url.search("cache"));
788
805
// IE9 only supports relative dimensions specified using CSS
789
return '<div><video id="movie-player-' + movie.id + '" src="' + url +
790
'" controls preload autoplay' +
791
' style="width:100%; height: 90%;"></video></div>' +
792
'<div style="width:100%"><div style="float:left;" class="video-links">' +
793
youtubeBtn + linkBtn + downloadLink +
794
'</div> <div style="float:right;">' + facebookBtn +
795
tweetBtn + '</div></div>';
806
return "<video id='movie-player-" + id + "' src='" + url +
807
"' controls preload autoplay" +
808
" style='width:100%; height: 90%;'></video>" +
809
"<span class='video-links'>" + downloadLink + youtubeBtn +
810
linkBtn + addthisBtn + "</span>";
798
813
// Fallback (flash player)
800
var url = Helioviewer.api + '?action=playMovie&id=' + movie.id +
801
'&width=' + width + "&height=" + height +
815
url = Helioviewer.api + '?action=playMovie&id=' + id +
816
'&width=' + width + "&height=" + height +
804
return '<div id="movie-player-' + movie.id + '">' +
805
'<iframe src="' + url + '" width="' + width +
806
'" height="' + height + '" marginheight="0" marginwidth="0" ' +
807
'scrolling="no" frameborder="0" style="width: 100%; margin-bottom: 2px;" />' +
809
'<div style="width:100%;">' +
810
'<div style="float:left;" class="video-links">' +
811
youtubeBtn + linkBtn + downloadLink +
813
'<div style="float:right;">' + facebookBtn + tweetBtn +
819
return "<div id='movie-player-" + id + "'>" +
820
"<iframe src=" + url + " width='" + width +
821
"' height='" + height + "' marginheight=0 marginwidth=0 " +
822
"scrolling=no frameborder=0 style='margin-bottom: 2px;' />" +
824
"<span class='video-links'>" + downloadLink + youtubeBtn +
825
linkBtn + bbcodeBtn + addthisBtn + "</span></div>";
829
_showBBCode: function(id, width, height) {
830
var bbcode = "[hvmovie width=" + width + " height=" + height +
831
"]" + id + "[/hvmovie]";
834
$("#bbcode-dialog").dialog({
835
//dialogClass: 'helioviewer-modal-dialog',
837
width : $('html').width() * 0.5,
840
title : "Helioviewer.org Movie BBCode",
841
open : function (e) {
842
//$('.ui-widget-overlay').hide().fadeIn();
843
$(this).find('input').attr('value', bbcode).select();
819
849
* Refreshes status information for movies in the history
821
851
_refresh: function () {
822
852
var status, elapsedTime;
824
854
// Update the status information for each row in the history
825
855
$.each(this._manager.toArray(), function (i, item) {
826
856
status = $("#movie-" + item.id).find(".status");