| [21337] | 1 | Index: ../trunk-jpl/src/m/classes/clusters/generic.js
|
|---|
| 2 | ===================================================================
|
|---|
| 3 | --- ../trunk-jpl/src/m/classes/clusters/generic.js (revision 20822)
|
|---|
| 4 | +++ ../trunk-jpl/src/m/classes/clusters/generic.js (revision 20823)
|
|---|
| 5 | @@ -45,18 +45,18 @@
|
|---|
| 6 | fprintf(fid,'mpiexec -np %i %s/%s %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,executable,EnumToString(solution),cluster.executionpath+'/'+dirname,modelname,modelname,modelname);
|
|---|
| 7 | fclose(fid);
|
|---|
| 8 | } //}}}
|
|---|
| 9 | - this.UploadAndRun = function (md,callbackfunction,fid,toolkitsstring,solutionstring,name,runtimename) { //{{{
|
|---|
| 10 | + this.UploadAndRun = function (md,callbackfunction,callbackid,fid,toolkitsstring,solutionstring,name,runtimename) { //{{{
|
|---|
| 11 |
|
|---|
| 12 | var request = new XMLHttpRequest();
|
|---|
| 13 | - $(".run-button").html(sprintf("%-16s", "CONNECTING...")).prop("disabled", true);
|
|---|
| 14 | + $(callbackid).html(sprintf("%-16s", "CONNECTING...")).prop("disabled", true);
|
|---|
| 15 | request.position = 0; //Keep track of current parsing position in repsonseText
|
|---|
| 16 | request.timeout = 30000;
|
|---|
| 17 | request.ontimeout = function (event) { //{{{
|
|---|
| 18 | - $(".run-button").html(sprintf("%-16s", "RUN")).prop("disabled", false);
|
|---|
| 19 | + $(callbackid).html(sprintf("%-16s", "RUN")).prop("disabled", false);
|
|---|
| 20 | } //}}}
|
|---|
| 21 | request.upload.onprogress = function(event) { //{{{
|
|---|
| 22 | var progress = (event.loaded / event.total * 100).toFixed(0);
|
|---|
| 23 | - $(".run-button").html(sprintf("%-20s", "UPLOADING: " + progress + "%"));
|
|---|
| 24 | + $(callbackid).html(sprintf("%-20s", "UPLOADING: " + progress + "%"));
|
|---|
| 25 | } //}}}
|
|---|
| 26 | request.onprogress = function (event) { //{{{
|
|---|
| 27 | //Receive updates by parsing message length as a 32-bit hex string of form 0x*09ABCDEF))
|
|---|
| 28 | @@ -67,11 +67,11 @@
|
|---|
| 29 | startIndex = endIndex;
|
|---|
| 30 | endIndex = startIndex + chunkSize;
|
|---|
| 31 | if (chunkSize >= 1024) { //Arbitrary maximium size of message (Must be below minimium size of model results)
|
|---|
| 32 | - $(".run-button").html(sprintf("%-20s", "DOWNLOADING: " + ((request.responseText.length - request.position) / chunkSize * 100).toFixed(0) + "%")).prop("disabled", true);
|
|---|
| 33 | + $(callbackid).html(sprintf("%-20s", "DOWNLOADING: " + ((request.responseText.length - request.position) / chunkSize * 100).toFixed(0) + "%")).prop("disabled", true);
|
|---|
| 34 | }
|
|---|
| 35 | else if (request.responseText.length >= endIndex) { //Ensure entire chunk is loaded
|
|---|
| 36 | var responseChunk = request.responseText.slice(startIndex, endIndex);
|
|---|
| 37 | - $(".run-button").html(responseChunk);
|
|---|
| 38 | + $(callbackid).html(responseChunk);
|
|---|
| 39 | request.position = endIndex;
|
|---|
| 40 | }
|
|---|
| 41 | }
|
|---|
| 42 | @@ -95,7 +95,7 @@
|
|---|
| 43 | catch (e) {
|
|---|
| 44 | console.log(e);
|
|---|
| 45 | }
|
|---|
| 46 | - $(".run-button").html(sprintf("%-16s", "RUN")).prop("disabled", false);
|
|---|
| 47 | + $(callbackid).html(sprintf("%-16s", "RUN")).prop("disabled", false);
|
|---|
| 48 | callbackfunction();
|
|---|
| 49 | }; //}}}
|
|---|
| 50 |
|
|---|
| 51 | Index: ../trunk-jpl/src/m/plot/slider.js
|
|---|
| 52 | ===================================================================
|
|---|
| 53 | --- ../trunk-jpl/src/m/plot/slider.js (revision 20822)
|
|---|
| 54 | +++ ../trunk-jpl/src/m/plot/slider.js (revision 20823)
|
|---|
| 55 | @@ -1,143 +1,179 @@
|
|---|
| 56 | -function slider() {
|
|---|
| 57 | - //SLIDER - Slider bar with initial value, callback on change, unique name, min/max value range, description message, fill color, widht/height, value precision, value step, and the id of the div to create the slider in.
|
|---|
| 58 | - //
|
|---|
| 59 | - // Usage:
|
|---|
| 60 | - // slider('value',0,'callback',function(value){PlotGreenland(value,0);PlotSlr()},'name','greenland','min',0,'max',100,'message',['Remove ice: ','%'],'color','#BBBBBB','width','100%','height','24px','precision',2,'step',5,'slidersdiv','greenland-sliders');
|
|---|
| 61 | +/*
|
|---|
| 62 | + Name:
|
|---|
| 63 | + sliderInit
|
|---|
| 64 | +
|
|---|
| 65 | + Description:
|
|---|
| 66 | + Initialize slider corresponding to passed selector with passed value,
|
|---|
| 67 | + minimum and maximum values, step (which is the increment for the
|
|---|
| 68 | + slider), and callback function (which is called when slider is changed).
|
|---|
| 69 | +
|
|---|
| 70 | + Options are passed as pairs to the function according to the usage
|
|---|
| 71 | + example below.
|
|---|
| 72 | +
|
|---|
| 73 | + Usage:
|
|---|
| 74 | + sliderInit(
|
|---|
| 75 | + 'selector', #some-element,
|
|---|
| 76 | + 'value', 0,
|
|---|
| 77 | + 'min', -1,
|
|---|
| 78 | + 'max', 1,
|
|---|
| 79 | + 'step', 0.1,
|
|---|
| 80 | + 'callback', function(value){someEngineFunction(value)}
|
|---|
| 81 | + );
|
|---|
| 82 | +
|
|---|
| 83 | + NOTE: jQuery Mobile will reflect changes to slider in its input "label"
|
|---|
| 84 | + based on the width of the slider. For example, step might be set to
|
|---|
| 85 | + 0.1, but if the width of the slider is too narrow, changes to the
|
|---|
| 86 | + slider will only be reflected in whole numeral increments in the
|
|---|
| 87 | + slider' label. That said, *all* sliders can be adjusted via the
|
|---|
| 88 | + "up" and "down" keys by whatever increment step is set to.
|
|---|
| 89 | +*/
|
|---|
| 90 | +function sliderInit(){
|
|---|
| 91 | +
|
|---|
| 92 | + // Convert arguments to options
|
|---|
| 93 | + var args = Array.prototype.slice.call(arguments);
|
|---|
| 94 | + var options = new pairoptions(args.slice());
|
|---|
| 95 |
|
|---|
| 96 | - //Convert arguments to options
|
|---|
| 97 | - var args = Array.prototype.slice.call(arguments);
|
|---|
| 98 | - var options = new pairoptions(args.slice());
|
|---|
| 99 | + // Recover option values
|
|---|
| 100 | + var selector = options.getfieldvalue('selector', '');
|
|---|
| 101 | + var value = options.getfieldvalue('value', 0);
|
|---|
| 102 | + var callback = options.getfieldvalue('callback', function(event, ui){});
|
|---|
| 103 | + var min = options.getfieldvalue('min', 0.6 * value);
|
|---|
| 104 | + var max = options.getfieldvalue('max', 1.4 * value);
|
|---|
| 105 | + var step = options.getfieldvalue('step', 1);
|
|---|
| 106 |
|
|---|
| 107 | - //Recover option values:
|
|---|
| 108 | - var value = options.getfieldvalue('value',0);
|
|---|
| 109 | - var callback = options.getfieldvalue('callback',function(){});
|
|---|
| 110 | - var name = options.getfieldvalue('name','');
|
|---|
| 111 | - var min = options.getfieldvalue('min',0.6*value);
|
|---|
| 112 | - var max = options.getfieldvalue('max',1.4*value);
|
|---|
| 113 | - var width = options.getfieldvalue('width','auto');
|
|---|
| 114 | - var height = options.getfieldvalue('height',32);
|
|---|
| 115 | - var message = options.getfieldvalue('message','');
|
|---|
| 116 | - var startmessage = options.getfieldvalue('startmessage',message);
|
|---|
| 117 | - var middlemessage = options.getfieldvalue('middlemessage',message);
|
|---|
| 118 | - var endmessage = options.getfieldvalue('endmessage',message);
|
|---|
| 119 | - var color = options.getfieldvalue('color','#bbbbbb');
|
|---|
| 120 | - var precision = options.getfieldvalue('precision',3);
|
|---|
| 121 | - var step = options.getfieldvalue('step',1);
|
|---|
| 122 | - var slidersdiv = options.getfieldvalue('slidersdiv','slidersdiv');
|
|---|
| 123 | + /*
|
|---|
| 124 | + Update slider attributes.
|
|---|
| 125 | +
|
|---|
| 126 | + NOTE: Although slider has already been created, need to call slider()
|
|---|
| 127 | + in order to avoid:
|
|---|
| 128 | +
|
|---|
| 129 | + Error: cannot call methods on slider prior to
|
|---|
| 130 | + initialization; attempted to call method 'refresh'
|
|---|
| 131 | +
|
|---|
| 132 | + Attempted all other methods for intialization of slider widget
|
|---|
| 133 | + from jQuery Mobile, and this is the only one that seemed to work
|
|---|
| 134 | + (see index.php for related markup).
|
|---|
| 135 | + */
|
|---|
| 136 | + $(selector).slider();
|
|---|
| 137 | + $(selector).val(value);
|
|---|
| 138 | + $(selector).attr('min', min);
|
|---|
| 139 | + $(selector).attr('max', max);
|
|---|
| 140 | + $(selector).attr('step', step);
|
|---|
| 141 | + $(selector).on('slidestop', function(event, ui){
|
|---|
| 142 | + callback(parseFloat($(selector).val()));
|
|---|
| 143 | + });
|
|---|
| 144 |
|
|---|
| 145 | - $('<div class="'+name+'-slider"></div>').appendTo('#'+slidersdiv);
|
|---|
| 146 | - $('<div class="info'+name+'">'+startmessage[0]+value.toFixed(precision)+startmessage[1]+'</div>').appendTo('#'+slidersdiv);
|
|---|
| 147 | - var info=$('.info'+name);
|
|---|
| 148 | - $('.'+name+'-slider').slider({
|
|---|
| 149 | - range:'min',
|
|---|
| 150 | - value:value,
|
|---|
| 151 | - min:min,
|
|---|
| 152 | - max:max,
|
|---|
| 153 | - step:step,
|
|---|
| 154 | - slide:function(event,ui){
|
|---|
| 155 | - info.text(middlemessage[0]+ui.value.toFixed(precision)+middlemessage[1]);
|
|---|
| 156 | - },
|
|---|
| 157 | - stop:function(event,ui){
|
|---|
| 158 | - info.text(middlemessage[0]+ui.value.toFixed(precision)+middlemessage[1]);
|
|---|
| 159 | - callback(ui.value);
|
|---|
| 160 | - info.text(endmessage[0]+ui.value.toFixed(precision)+endmessage[1]);
|
|---|
| 161 | - }
|
|---|
| 162 | - });
|
|---|
| 163 | - $('.'+name+'-slider.ui-slider').css({
|
|---|
| 164 | - width:'auto',
|
|---|
| 165 | - height:height,
|
|---|
| 166 | - background:color,
|
|---|
| 167 | - margin:'8px'
|
|---|
| 168 | - });
|
|---|
| 169 | - $('.'+name+'-slider .ui-slider-handle').css({
|
|---|
| 170 | - background:color,
|
|---|
| 171 | - height:parseInt(height)+8
|
|---|
| 172 | - });
|
|---|
| 173 | - $('.'+name+'-slider .ui-slider-range').css({
|
|---|
| 174 | - background:color
|
|---|
| 175 | - });
|
|---|
| 176 | + /*
|
|---|
| 177 | + NOTE: Slider must be "refreshed" after any JavaScript change to it, as
|
|---|
| 178 | + it is an AJAX object.
|
|---|
| 179 | + */
|
|---|
| 180 | + $(selector).slider('refresh');
|
|---|
| 181 | }
|
|---|
| 182 | +/* exported sliderInit, refreshErrorMessages */
|
|---|
| 183 |
|
|---|
| 184 | -function progress() {
|
|---|
| 185 | - //PROGRESS - Progress bar with initial value, unique name, width/height, and the id of the div to create the slider in. One progress per canvas, value/label updated by node transient runs in plot_unit.
|
|---|
| 186 | - //
|
|---|
| 187 | - // Usage:
|
|---|
| 188 | - // progress('value',0,'name','hma','width','100%','height',sliderheight,'progressdiv','hma-progressdiv');
|
|---|
| 189 | - //
|
|---|
| 190 | - // See also: PLOT_UNIT
|
|---|
| 191 | +
|
|---|
| 192 | +/*
|
|---|
| 193 | + Name:
|
|---|
| 194 | + sliderMoveInput
|
|---|
| 195 |
|
|---|
| 196 | - //Convert arguments to options
|
|---|
| 197 | - var args = Array.prototype.slice.call(arguments);
|
|---|
| 198 | - var options = new pairoptions(args.slice());
|
|---|
| 199 | + Description:
|
|---|
| 200 | + Appends a jQuery Mobile slider input to an element whose selector
|
|---|
| 201 | + adheres to the following protocol,
|
|---|
| 202 | +
|
|---|
| 203 | + destination = sliderSelector + '-value'
|
|---|
| 204 | +
|
|---|
| 205 | + Usage:
|
|---|
| 206 | + sliderMoveInput('#someSliderSelector');
|
|---|
| 207 | +
|
|---|
| 208 | + NOTE: Destination element must, obviously, be hardcoded into markup for a
|
|---|
| 209 | + call to this function to work as expected.
|
|---|
| 210 | +*/
|
|---|
| 211 | +function sliderMoveInput(selector){
|
|---|
| 212 |
|
|---|
| 213 | - var value = options.getfieldvalue('value',0);
|
|---|
| 214 | - var name = options.getfieldvalue('name','hma');
|
|---|
| 215 | - var min = options.getfieldvalue('min',0.6*value);
|
|---|
| 216 | - var max = options.getfieldvalue('max',1.4*value);
|
|---|
| 217 | - var width = options.getfieldvalue('width','auto');
|
|---|
| 218 | - var height = options.getfieldvalue('height',32);
|
|---|
| 219 | - var color = options.getfieldvalue('color','#bbbbbb');
|
|---|
| 220 | - var progressdiv = options.getfieldvalue('progressdiv','progressdiv');
|
|---|
| 221 | + $(selector).appendTo(selector + '-value');
|
|---|
| 222 | + $(selector).slider('refresh');
|
|---|
| 223 | +}
|
|---|
| 224 | +
|
|---|
| 225 | +/*
|
|---|
| 226 | + value/label updated by node transient runs in plot_unit.
|
|---|
| 227 | +*/
|
|---|
| 228 | +function progressInit(){
|
|---|
| 229 |
|
|---|
| 230 | - var canvas = $('#'+name)[0];
|
|---|
| 231 | - var progressbar = $('#'+name+'-progressbar');
|
|---|
| 232 | - var playbutton = $('#'+name+'-playbutton');
|
|---|
| 233 | - var reversebutton = $('#'+name+'-reversebutton');
|
|---|
| 234 | - var timelabel = $('#'+name+'-timelabel');
|
|---|
| 235 | + // Convert arguments to options.
|
|---|
| 236 | + var args = Array.prototype.slice.call(arguments);
|
|---|
| 237 | + var options = new pairoptions(args.slice());
|
|---|
| 238 | +
|
|---|
| 239 | + // Recover option values
|
|---|
| 240 | + var sim = options.getfieldvalue('sim', '');
|
|---|
| 241 | +
|
|---|
| 242 | + var canvas = $(sim + '-canvas')[0];
|
|---|
| 243 | + var progressBar = $(sim + '-controls-slider-progress');
|
|---|
| 244 | + var playButton = $(sim + '-controls-button-play');
|
|---|
| 245 | + var reverseButton = $(sim + '-controls-button-reverse');
|
|---|
| 246 | + var timeText = $(sim + '-controls-text-time');
|
|---|
| 247 | +
|
|---|
| 248 | + /*
|
|---|
| 249 | + Update progress bar slider attributes.
|
|---|
| 250 | +
|
|---|
| 251 | + NOTE: Although slider has already been created, need to call slider()
|
|---|
| 252 | + in order to avoid:
|
|---|
| 253 | +
|
|---|
| 254 | + Error: cannot call methods on slider prior to
|
|---|
| 255 | + initialization; attempted to call method 'refresh'
|
|---|
| 256 | +
|
|---|
| 257 | + Attempted all other methods for intialization of slider widget
|
|---|
| 258 | + from jQuery Mobile, and this is the only one that seemed to work
|
|---|
| 259 | + (see index.php for related markup).
|
|---|
| 260 | + */
|
|---|
| 261 | + $(progressBar).slider();
|
|---|
| 262 | + $(progressBar).val(value);
|
|---|
| 263 | + $(progressBar).attr('min', 0);
|
|---|
| 264 | + $(progressBar).attr('max', 1);
|
|---|
| 265 | + $(progressBar).attr('step', 1);
|
|---|
| 266 | + $(progressBar).on('slidestop', function(event, ui){
|
|---|
| 267 | + canvas.movieIncrement = true;
|
|---|
| 268 | + canvas.movieFrame = parseInt($(progressBar).val());
|
|---|
| 269 | + });
|
|---|
| 270 | + $(progressBar).on('change', function(event, ui){
|
|---|
| 271 | + canvas.movieFrame = parseInt($(progressBar).val());
|
|---|
| 272 | + });
|
|---|
| 273 | + $(progressBar).on('slidestart', function(event, ui){
|
|---|
| 274 | + canvas.movieIncrement = false;
|
|---|
| 275 | + canvas.movieFrame = parseInt($(progressBar).val());
|
|---|
| 276 | + });
|
|---|
| 277 |
|
|---|
| 278 | + /*
|
|---|
| 279 | + NOTE: Slider must be "refreshed" after any JavaScript change to it, as
|
|---|
| 280 | + it is an AJAX object.
|
|---|
| 281 | + */
|
|---|
| 282 | + $(progressBar).slider('refresh');
|
|---|
| 283 |
|
|---|
| 284 | - playbutton.click(function() {
|
|---|
| 285 | + // Attach progress bar slider to simulation.
|
|---|
| 286 | + canvas.progressBar = progressBar;
|
|---|
| 287 | +
|
|---|
| 288 | + playButton.click(function(){
|
|---|
| 289 | canvas.moviePlay = !canvas.moviePlay;
|
|---|
| 290 | - if (canvas.moviePlay) {
|
|---|
| 291 | - $("#playButton").html("❚❚");
|
|---|
| 292 | + if (canvas.moviePlay){
|
|---|
| 293 | + playButton.find("span").removeClass("fa-play");
|
|---|
| 294 | + playButton.find("span").addClass("fa-pause");
|
|---|
| 295 | }
|
|---|
| 296 | - else {
|
|---|
| 297 | - $("#playButton").html("▶");
|
|---|
| 298 | + else{
|
|---|
| 299 | + playButton.find("span").removeClass("fa-pause");
|
|---|
| 300 | + playButton.find("span").addClass("fa-play");
|
|---|
| 301 | }
|
|---|
| 302 | });
|
|---|
| 303 | - reversebutton.click(function() {
|
|---|
| 304 | +
|
|---|
| 305 | + reverseButton.click(function(){
|
|---|
| 306 | canvas.movieReverse = !canvas.movieReverse;
|
|---|
| 307 | if (canvas.movieReverse) {
|
|---|
| 308 | - reversebutton.html("◀◀");
|
|---|
| 309 | + reverseButton.find("span").removeClass("fa-backward");
|
|---|
| 310 | + reverseButton.find("span").addClass("fa-forward");
|
|---|
| 311 | }
|
|---|
| 312 | else {
|
|---|
| 313 | - reversebutton.html("▶▶");
|
|---|
| 314 | + reverseButton.find("span").removeClass("fa-forward");
|
|---|
| 315 | + reverseButton.find("span").addClass("fa-backward");
|
|---|
| 316 | }
|
|---|
| 317 | });
|
|---|
| 318 | - canvas.timeLabel = timelabel;
|
|---|
| 319 |
|
|---|
| 320 | - $('<div class="'+name+'-progressbar bordered margin-8 padding-8"></div>').prependTo('#'+progressdiv);
|
|---|
| 321 | - $('.'+name+'-progressbar').slider({
|
|---|
| 322 | - range:'min',
|
|---|
| 323 | - value:0,
|
|---|
| 324 | - min:0,
|
|---|
| 325 | - max:1,
|
|---|
| 326 | - step:1,
|
|---|
| 327 | - start:function(event,ui){
|
|---|
| 328 | - canvas.movieFrame = ui.value;
|
|---|
| 329 | - canvas.movieIncrement = false;
|
|---|
| 330 | - },
|
|---|
| 331 | - slide:function(event,ui){
|
|---|
| 332 | - canvas.movieFrame = ui.value;
|
|---|
| 333 | - },
|
|---|
| 334 | - stop:function(event,ui){
|
|---|
| 335 | - canvas.movieFrame = ui.value;
|
|---|
| 336 | - canvas.movieIncrement = true;
|
|---|
| 337 | - }
|
|---|
| 338 | - });
|
|---|
| 339 | - $('.'+name+'-progressbar.ui-slider').css({
|
|---|
| 340 | - width:'auto',
|
|---|
| 341 | - height:height,
|
|---|
| 342 | - background:color,
|
|---|
| 343 | - margin:'8px'
|
|---|
| 344 | - });
|
|---|
| 345 | - $('.'+name+'-progressbar .ui-slider-handle').css({
|
|---|
| 346 | - background:color,
|
|---|
| 347 | - height:parseInt(height)+8
|
|---|
| 348 | - });
|
|---|
| 349 | - $('.'+name+'-progressbar .ui-slider-range').css({
|
|---|
| 350 | - background:'red'
|
|---|
| 351 | - });
|
|---|
| 352 | -
|
|---|
| 353 | - canvas.progressBar = $('.'+name+'-progressbar');
|
|---|
| 354 | -}
|
|---|
| 355 | + canvas.timeLabel = timeText;
|
|---|
| 356 | +}
|
|---|
| 357 | \ No newline at end of file
|
|---|
| 358 | Index: ../trunk-jpl/src/m/plot/plot_unit.js
|
|---|
| 359 | ===================================================================
|
|---|
| 360 | --- ../trunk-jpl/src/m/plot/plot_unit.js (revision 20822)
|
|---|
| 361 | +++ ../trunk-jpl/src/m/plot/plot_unit.js (revision 20823)
|
|---|
| 362 | @@ -245,7 +245,7 @@
|
|---|
| 363 | if (canvas["movieHandler"]) clearInterval(canvas["movieHandler"]);
|
|---|
| 364 | canvas["movieHandler"] = setInterval(function () {
|
|---|
| 365 | node["movieFrame"] = canvas["movieFrame"];
|
|---|
| 366 | - if (canvas["moviePlay"]) {
|
|---|
| 367 | + if (canvas["moviePlay"] && canvas["movieIncrement"]) {
|
|---|
| 368 | if (canvas["movieReverse"]) {
|
|---|
| 369 | node["movieFrame"] = (((node["movieFrame"] - 1) % node["movieLength"]) + node["movieLength"]) % node["movieLength"]; //Handle negative modulus
|
|---|
| 370 | }
|
|---|
| 371 | @@ -253,15 +253,21 @@
|
|---|
| 372 | node["movieFrame"] = (((node["movieFrame"] + 1) % node["movieLength"]) + node["movieLength"]) % node["movieLength"]; //Handle negative modulus
|
|---|
| 373 | }
|
|---|
| 374 | }
|
|---|
| 375 | - if (canvas["timeLabel"]) canvas["timeLabel"].html(node["movieTimestamps"][node["movieFrame"]].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
|
|---|
| 376 | - if (canvas["progressBar"]) canvas["progressBar"].slider("value", node["movieFrame"]);
|
|---|
| 377 | + if (canvas["timeLabel"]) {
|
|---|
| 378 | + canvas["timeLabel"].html(node["movieTimestamps"][node["movieFrame"]].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
|
|---|
| 379 | + }
|
|---|
| 380 | + if (canvas["progressBar"]) {
|
|---|
| 381 | + canvas["progressBar"].val(node["movieFrame"]);
|
|---|
| 382 | + canvas["progressBar"].slider('refresh');
|
|---|
| 383 | + }
|
|---|
| 384 | node["buffers"] = initBuffers(gl,[node["arrays"][0],node["arrays"][1][node["movieFrame"]],node["arrays"][2]]);
|
|---|
| 385 | canvas["movieFrame"] = node["movieFrame"];
|
|---|
| 386 | }, node["movieInterval"]);
|
|---|
| 387 | if (canvas["progressBar"]) {
|
|---|
| 388 | canvas["movieFrame"] = 0;
|
|---|
| 389 | - canvas["progressBar"].slider("value", 0);
|
|---|
| 390 | - canvas["progressBar"].slider("option", {max: node["movieLength"]-1});
|
|---|
| 391 | + canvas["progressBar"].val(0);
|
|---|
| 392 | + canvas["progressBar"].attr('max', node["movieLength"]-1);
|
|---|
| 393 | + canvas["progressBar"].slider('refresh');
|
|---|
| 394 | }
|
|---|
| 395 | }
|
|---|
| 396 |
|
|---|
| 397 | Index: ../trunk-jpl/src/m/solve/solve.js
|
|---|
| 398 | ===================================================================
|
|---|
| 399 | --- ../trunk-jpl/src/m/solve/solve.js (revision 20822)
|
|---|
| 400 | +++ ../trunk-jpl/src/m/solve/solve.js (revision 20823)
|
|---|
| 401 | @@ -102,10 +102,16 @@
|
|---|
| 402 | toolkitsstring= md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits'); // toolkits file
|
|---|
| 403 |
|
|---|
| 404 | //callback function:
|
|---|
| 405 | - function callbackfunction(){}; //default, do nothing if no callback requested.
|
|---|
| 406 | - if (options.getfieldvalue('callback',false)){
|
|---|
| 407 | - callbackfunction=options.getfieldvalue('callback');
|
|---|
| 408 | + function callbackfunction(){}; //default, do nothing if no callback function requested.
|
|---|
| 409 | + if (options.getfieldvalue('callbackfunction',false)){
|
|---|
| 410 | + callbackfunction=options.getfieldvalue('callbackfunction');
|
|---|
| 411 | }
|
|---|
| 412 | +
|
|---|
| 413 | + //callback id:
|
|---|
| 414 | + var callbackid = '.run-button'; //default, update .run-button elements with progress updates.
|
|---|
| 415 | + if (options.getfieldvalue('callbackid',false)){
|
|---|
| 416 | + callbackid=options.getfieldvalue('callbackid');
|
|---|
| 417 | + }
|
|---|
| 418 |
|
|---|
| 419 | if (cluster.classname() == 'local'){ //{{{
|
|---|
| 420 |
|
|---|
| 421 | @@ -130,7 +136,7 @@
|
|---|
| 422 | else { //{{{
|
|---|
| 423 |
|
|---|
| 424 | /*We are running somewhere else on a computational server. Send the buffer to that server and retrieve output: */
|
|---|
| 425 | - cluster.UploadAndRun(md,callbackfunction,fid,toolkitsstring,solutionstring,md.miscellaneous.name,md.priv.runtimename);
|
|---|
| 426 | + cluster.UploadAndRun(md,callbackfunction,callbackid,fid,toolkitsstring,solutionstring,md.miscellaneous.name,md.priv.runtimename);
|
|---|
| 427 |
|
|---|
| 428 | return md;
|
|---|
| 429 |
|
|---|