source: genappalpha/languages/html5/types/input.footer @ 937

Last change on this file since 937 was 937, checked in by ehb, 6 years ago

html5 : removed repeater restrictions, now general repeater structures allowed. Still alpha

File size: 16.9 KB
Line 
1if( skipped_row == 1 ){ input_html += "</tr>"; }
2input_html += '</table>';
3$( '#__moduleid___input_area' ).html( input_html );
4eval( input_eval );
5</script>
6<p><button id="__moduleid___submit" class="help_link"><span class="buttontext">Submit</span></button>
7__~help:submit{<span class="help">__help:submit__</span>}
8<button id="__moduleid___reset" class="help_link"><span class="buttontext">Reset to default values</span></button>
9__~help:reset{<span class="help">__help:reset__</span>}
10__~newsession{<button id="__moduleid___newsession"><span class="buttontext">Start new session</span></button>}
11</p>
12<span id="__moduleid___progress"></span>
13<script>
14__~noreset{$( "#__moduleid___reset" ).remove();}
15__~submit_label{$( "#__moduleid___submit .buttontext" ).html( "__submit_label__" );}
16__~nosubmit{$( "#__moduleid___submit" ).remove();}
17__~hideifnotlogon{if(!$( "#_state" ).data( "_logon" ).length){$( "#__moduleid___submit" ).hide();$( "#__moduleid___reset" ).hide();}}
18__~newsession{$( "#__moduleid___newsession" ).click( function() { getSid(); return false; });}
19
20var __moduleid___output_msgs = $("#__moduleid___output_msgs");
21__moduleid___output_msgs.text( "" );
22
23var __moduleid___timeout_handler = "unset";
24var __moduleid___timeout_handler_uuid;
25
26function get_results___moduleid__( id, last_timeout, getlastmsg, getinput )
27{
28__~debug:job{    console.log( "get results 1 id " + id );}
29//             url:"ajax/get_results.php?_window=" +  window.name + "&_logon=" +$( "#_state" ).data( "_logon" ) + '&_uuid=' + id,
30    var job_status = "";
31    __~debug:getinput{console.log( "get_results___moduleid__( " + id + " , " + last_timeout + " , " + getlastmsg + " , " + getinput + " )" );}
32    $.getJSON(
33             "ajax/get_results.php",
34             {
35                tagmode: "any",
36                format: "json",
37                _window : window.name,
38                _logon : $( "#_state" ).data( "_logon" ),
39                _uuid : id,
40                _getlastmsg : getlastmsg,
41                _getinput : getinput ? true : false
42             } )
43    .done( function( data, status, xhr ) {
44__~debug:job{        console.log( "get results 2" );}
45           var do_refresh = 1;
46__~nojobcontrol{           do_refresh = 0;}
47           if ( do_refresh ) {
48              ga.fc.clear( $.base64.encode( "./" + $( "#_state" ).data( "_project" ) ) );
49              ga.jc.clear_leaf( id );
50           }
51
52           job_status = ga.data.update( "__moduleid__", data ).job_status;
53           if ( job_status == "complete" ||
54                job_status == "cancelled" ||
55                job_status == "failed" )
56           {
57              if ( __moduleid___timeout_handler != "unset" )
58              {
59                  clearTimeout( __moduleid___timeout_handler );
60                  __moduleid___timeout_handler = "unset";
61              }
62              unsubMsging( id, "__moduleid__" );
63              eval( __moduleid___done_eval );
64           } else {
65               if ( !last_timeout || last_timeout < 2000 )
66               {
67                  last_timeout = 2000;
68               } else {
69                  if ( last_timeout < 16000 )
70                  {
71                      last_timeout *= 2;
72                  } else {
73                      last_timeout = 16000;
74                  }
75               }
76__~debug:job{               console.log( "another set timeout " + last_timeout );}
77               __moduleid___timeout_handler =  setTimeout( get_results___moduleid__, last_timeout, id, last_timeout, 0 );
78               __moduleid___timeout_handler_uuid = id;
79           }
80          } )
81    .fail( function( xhr, status, errorThrown ) {
82__~debug:job{        console.log( "get results fail" );}
83           $( "#__moduleid___results" ).html( "<span class=\"warning\"> Failed: " + status + " : '" + xhr.status + ":" + errorThrown + "' on URL ajax/tools/center.php </span>" );
84           $('#__moduleid___progress').html( "" );
85           if ( __moduleid___timeout_handler != "unset" )
86           {
87               clearTimeout( __moduleid___timeout_handler );
88               __moduleid___timeout_handler = "unset";
89           }
90           unsubMsging( id, "__moduleid__" );
91           eval( __moduleid___done_eval );
92          } );
93    return false;
94};
95
96function msg___moduleid__ ( id, data )
97{
98   ga.data.update( "__moduleid__", data, get_results___moduleid__, id );
99};
100
101$( "#__moduleid___submit" ).click( function( e ) {
102   e.preventDefault();
103   e.returnValue = false;
104   if ( __moduleid___timeout_handler != "unset" ) {
105       __~debug:jobtimeout{console.log( "Unsetting previous handler uuid " + __moduleid___timeout_handler_uuid );}
106       clearTimeout( __moduleid___timeout_handler );
107       if ( __moduleid___timeout_handler_uuid ) {
108           unsubMsging( __moduleid___timeout_handler_uuid, "__moduleid__" );
109       }
110       __moduleid___timeout_handler = "unset";
111   }
112   ga.value.resetDefaultValues( "__moduleid___output", true );
113
114   __~captcha{ga.captcha( do___moduleid___submit, $(this) ); return false;}
115   return do___moduleid___submit( $(this) );
116});
117
118function do___moduleid___submit( $form, airavataresource, skipcached ) {
119
120   var $ok = 0;
121   __~nojobcontrol{   $ok = 1;}
122   __~debug:valuenx{ga.valuen.save( "__moduleid__" ); if (!$ok) {return false;};}
123
124   ga.event( "", "__moduleid__", "submit clicked" );
125
126   __~license{if(!ga.license("__license__")){return false;}}
127
128__~submit_cb{   ga.altfile.bdata[ "__moduleid__" ].cb("#__submit_cb__"); ga.altfile.button.cb(); return false;}
129
130__~debug:job{   console.log( "you clicked" );}
131
132   if ( !ga.valid.checksubmit( "__moduleid__" ) ) {
133       ga.valid.showerrormessage();
134       return false;
135   }
136
137   if ( ga.specproj.data.length ) {
138      if ( $( "#_state" ).data( '_logon' ) &&
139           $( "#_state" ).data( '_logon' ).length ) {
140          $( "#sel_project" ).html( ga.specproj.gname() );
141          $( "#_state" ).data( '_project', ga.specproj.gname() );
142          __~debug:specproj{console.log( "setting specproject" );}
143      }
144   } 
145
146   if ( !airavataresource ) {
147      __~debug:airavata{console.log( "airavataresource not defined" );}
148      switch( airavataresource = ga.airavata.select( "__resource__", "__airavataselect__", do___moduleid___submit, $form ) ) {
149      case "deferred" : __~debug:airavata{console.log( "airavata submit deffered" ); }return false; break;
150      case "abort"    : __~debug:airavata{console.log( "airavata submit aborted" ); }return false; break;
151      case "notused"  : __~debug:airavata{console.log( "not airavata" ); }break;
152      }
153      __~debug:airavata{console.log( "airavata resource is " + airavataresource );}
154   }
155   __~debug:airavata{console.log( "airavata resource is " + airavataresource );}
156
157   $.ajax({
158       type: 'get'
159       ,url: "ajax/sys_config/sys_joblocked.php?_window=" +  window.name + "&_logon=" + $( "#_state" ).data( "_logon" )
160__~submitpolicy{ + "&_submitpolicy=__submitpolicy__"}
161__~cache{ + "&_cache_module=" + encodeURIComponent( "__moduleid__/" + $( "#_state" ).data( "_project" ) ) }
162__~jobweight{ + "&_jobweight=" + "__jobweight__"}
163       ,context: $form
164       ,success: function( data ) { // your success handler
165__~debug:job{                 console.log( "joblocked returned:" + data );}
166          if ( !$ok )
167          {
168          switch ( data )
169          {
170             case "1" :
171             {
172                 messagebox( { icon:"warning.png", text:"This project directory is currently locked by another project.\nYou can wait until it completes, change the project in user configuration or clear the lock in the job manager." } );
173                 return;
174             } break;
175             case "2" :
176             {
177                 messagebox( { icon:"warning.png", text:"You must be logged in to submit this module." } );
178                 return;
179             } break;
180             case "0" :
181             {
182__~debug:job{                 console.log( "ok, but we are not submitting yet" );}
183                 $ok = 1;
184             } break;
185             default :
186             {
187                if ( /^Your job/.test( data ) ) {
188                   messagebox( { icon : "warning.png",
189                                 text : data } );
190                   return;
191                }
192                __~debug:cache{console.log( "cache check found uuid " + data );}
193                if ( skipcached ) {
194                    $ok = 1;
195                } else {
196                    return ga.cache.msg( "__~cachefound{__cachefound__}", "__~cachedelete{__cachedelete__}", get_results___moduleid__, do___moduleid___submit, data, $form, airavataresource );
197                }
198             } break;
199          }
200          }
201       }
202       ,error: function() { // your error handler
203          messagebox( { icon:"toast.png", text:"Checking the project lock failed. This is possibly a server or network issue" } );
204       }
205       ,complete: function() {
206          this.off('submit');
207          if ( $ok )
208          {
209__~debug:job{              console.log( "complete, we could submit here" );}
210
211              $( "#__moduleid___results" ).text( "" );
212__~debug:ajax{    console.log( $( "#__moduleid__" ).serializeArray() );}
213              ga.value.saveLastValues( "__moduleid__" );
214              ga.value.resetDefaultValues( "__moduleid___output", true );
215
216              var found_errors = 0;
217              $("#__moduleid__").find("input").each(function(i){
218                 if ( $(this).attr( 'required' ) && $(this).val().length == 0 )
219                 {
220                    var tag =  "#__moduleid__ " + "#" + $(this).attr('id') + "_msg";
221__~debug:ajax{          console.log( "missing: " + tag );}
222                    $( tag ).html( "missing required field" );
223                    found_errors = 1;
224                 }
225              });
226              if ( found_errors ) {
227                  return;
228              }
229
230    var tree_html = "";
231    $( "._hidden_tree_selects" ).remove( );
232    $.each( input_trees, function( k, v ){
233__~debug:_tree{        console.log( "input_trees k " + k + " v " + v );}
234        $( 'input[type=hidden][name="' + v + '[]"]' ).remove();
235        var selectedElms = $('#' + v).jstree("get_selected", true);
236        var i = 0;
237        $.each(selectedElms, function() {
238           tree_html += '<input type="hidden" name="' + v + '[]" value="' + this.id + '" class="_hidden_tree_selects"/>';
239__~debug:_tree{           console.log( "this.id:" + this.id );}
240        });
241    });
242__~debug:_tree{    console.log( tree_html );}
243    $( this ).append( tree_html );
244
245__~session{   var input = $("<input>").attr("type", "hidden").attr("name", "_sid").val( $( "#global_data" ).data( "sid" ) );$( this ).append($(input)); }
246    var logonadd = $("<input>").attr("type", "hidden").attr("name", "_logon").val( $( "#_state" ).data( "_logon" ) );$( this ).append($(logonadd));
247    var projectadd = $("<input>").attr("type", "hidden").attr("name", "_project").val( $( "#_state" ).data( "_project" ) );$( this ).append($(projectadd));
248    var windowadd = $("<input>").attr("type", "hidden").attr("name", "_window").val( window.name );$( this ).append($(windowadd));
249    var vuuid = uuid.v1();
250__~debug:job{    console.log( "uuid:" + vuuid );}
251__~debug:jc{    console.log( "uuid: " + vuuid );}
252
253__~navigator{       $( this ).append( $("<input>").attr("type", "hidden").attr("name", "_navigator").val( navigator.userAgent ) );}
254__~eventlog{        $( this ).append( $("<input>").attr("type", "hidden").attr("name", "_eventlog").val( ga.event.list() ) );}
255__~docrootexecutable{$( this ).append( $("<input>").attr("type", "hidden").attr("name", "_docrootexecutable").val( "__docrootexecutable__" ) );}
256
257    if ( airavataresource != "notused" ) {
258        $( this ).append( $("<input>").attr("type", "hidden").attr("name", "_airavataresource").val( airavataresource ) );
259    }
260
261    var uuidadd = $("<input>").attr("type", "hidden").attr("name", "_uuid").val( vuuid );$( this ).append($(uuidadd));
262//    ga.altfile.add( "__moduleid__" );
263    ga.valuen.addhtml( "__moduleid__" );
264
265    subMsging( vuuid, msg___moduleid__, "__moduleid__" );
266
267    var formData = new FormData($('form')[0]);
268__~debug:ajax{    console.log( "calling ajax" );}
269
270    $('#__moduleid___progress').html( "Uploading:<progress></progress>" );
271
272    var job_status = "";
273
274    ga.event( "", "__moduleid__", "submit: passed submit checks, submitting" );
275
276    $.ajax( {
277             dataType: "json",
278             cache:false,
279//             timeout:3000,  // for testing
280             type:"POST",
281             url:"ajax/__menu:id__/__moduleid__.php",
282             data: formData,
283             xhr: function() {  // Custom XMLHttpRequest
284                 var myXhr = $.ajaxSettings.xhr();
285                 if(myXhr.upload){ // Check if upload property exists
286                     myXhr.upload.addEventListener('progress',
287                         function(e) {
288                         if(e.lengthComputable){
289                           $('#__moduleid___progress progress').attr({value:e.loaded,max:e.total});
290                         } }
291//                     progressHandlingFunction
292                    , false);
293                 }
294                 return myXhr;
295             },
296             contentType: false,
297             processData: false
298            } )
299    .done( function( data, status, xhr ) {
300__~debug:ajax{           console.log( "data, status, xhr" );}
301__~debug:ajax{           console.log( data );}
302__~debug:ajax{           console.log( status );}
303__~debug:ajax{           console.log( xhr );}
304// refresh cache for this project
305           $('#__moduleid___progress').html( "" );
306   
307           var do_refresh = 1;
308__~nojobcontrol{           do_refresh = 0;}
309           if ( do_refresh ) {
310              ga.fc.clear( $.base64.encode( "./" + $( "#_state" ).data( "_project" ) ) );
311              ga.jc.clear_leaf( vuuid );
312           }
313           
314// loop through data pairs
315           __moduleid___output_msgs.text( "" );
316           job_status = ga.data.update( "__moduleid__", data ).job_status;
317
318           if ( job_status == "complete" ||
319                job_status == "cancelled" ||
320                job_status == "failed" )
321           {
322               if ( __moduleid___timeout_handler != "unset" )
323               {
324                   clearTimeout( __moduleid___timeout_handler );
325                   __moduleid___timeout_handler = "unset";
326               }
327               unsubMsging( vuuid, "__moduleid__" );
328               eval( __moduleid___done_eval );
329           } else {
330               __moduleid___timeout_handler = setTimeout( get_results___moduleid__, 2000, vuuid, 2000, 0 );
331               __moduleid___timeout_handler_uuid = vuuid;
332__~debug:job{               console.log( "set timeout 2000" );}
333           }
334          } )
335    .fail( function( xhr, status, errorThrown ) {
336__~debug:ajax{           console.log( "xhr, status, errorThrown" );}
337__~debug:ajax{           console.log( xhr );}
338__~debug:ajax{           console.log( status );}
339__~debug:ajax{           console.log( errorThrown );}
340           $( "#__moduleid___results" ).html( "<span class=\"warning\"> Failed: " + status + " : '" + xhr.status + ":" + errorThrown + "' on URL ajax/__menu:id__/__moduleid__.php </span>" );
341           $('#__moduleid___progress').html( "" );
342           if ( __moduleid___timeout_handler != "unset" )
343           {
344               clearTimeout( __moduleid___timeout_handler );
345               __moduleid___timeout_handler = "unset";
346           }
347           unsubMsging( vuuid, "__moduleid__" );
348           eval( __moduleid___done_eval );
349          } );
350          } else {
351__~debug:job{              console.log( "complete but locked" );}
352          }
353       }
354   });
355}
356
357__moduleid___reset = function() {
358    __~debug:valuenx{ga.valuen.restore( "__moduleid__" ); return false;}
359    if ( !__~textarea:rows{1}0 ) {
360        // required to reset scrollheight ...
361        document.getElementById( "__moduleid___output_textarea" ).style.height = 0;
362    }
363
364    if ( __moduleid___timeout_handler != "unset" ) {
365       __~debug:jobtimeout{console.log( "Unsetting previous handler uuid " + __moduleid___timeout_handler_uuid );}
366       clearTimeout( __moduleid___timeout_handler );
367       if ( __moduleid___timeout_handler_uuid ) {
368           unsubMsging( __moduleid___timeout_handler_uuid, "__moduleid__" );
369       }
370       __moduleid___timeout_handler = "unset";
371    }
372    ga.event( "", "__moduleid__", "reset clicked" );
373    ga.valid.clearerrorcounter();
374    //    ga.value.resetDefaultValues( "__moduleid__" );
375    ga.valuen.restore.dflt(  "__moduleid__" );
376    ga.value.resetDefaultValues( "__moduleid___output", true );
377    __~debug:repeat{console.log( "input_repeats:" + input_repeats );}
378    eval( input_repeats );
379    return false;
380}
381
382$( "#__moduleid___reset" ).click( function() {
383   return __moduleid___reset();
384});
385
386setHoverHelp();
387__~resetonload{ga.value.resetDefaultValues( "__moduleid__" );ga.value.resetDefaultValues( "__moduleid___output" ); ga.value.resetDefaultValue( "__moduleid___output", "__moduleid___output_msgs" );}
388__~resetoutonload{ga.value.resetDefaultValues( "__moduleid___output" ); ga.value.resetDefaultValue( "__moduleid___output", "#__moduleid___output_msgs" );}
389eval( input_repeats );
390ga.pull.doPull();
391</script>
392</form>
393<div id="__moduleid___results"></div>
Note: See TracBrowser for help on using the repository browser.