source: trunk/zoo-project/zoo-services/utils/open-api/templates/index.html

Last change on this file was 986, checked in by djay, 4 years ago

Move the execute endpoint to /processes/{processID}. Fixes in oas.cfg: use opengeospatial/ogcapi-processes github repo for schemas URLs.

File size: 22.6 KB
RevLine 
[962]1<!doctype html>
2#import zoo
3#import html,os
4#set removeCacheFile=False
5#set strUrl=$inputs["tmpl"]["xlink:href"]
6#set currentUrl=$strUrl.replace($openapi["openapi"]["rootUrl"],"")
7#if $currentUrl=="/"
8#set currentKey="root"
9#set $currentUrl="/index"
10#else
11#set currentKey=$currentUrl
12#end if
13#set urlCompnents=$currentUrl.split('/')
14#*
15* Load the JSON content from the API
16*#
17#try
18#import json
19#if "cache_file" in $inputs["tmpl"]
[984]20#set values=json.load(open($inputs["tmpl"]["cache_file"], encoding='utf-8'))
[962]21#else
[984]22#set values=json.loads($inputs["tmpl"]["value"])
[962]23#end if
24#except Exception as e
25$e
[984]26#set values={}
[962]27#end try
[986]28#def findLink($val,$key)
29#if "links" in $val
30#for i in range(len($val["links"]))
31#if $val["links"][$i]["rel"]==$key
32#return $val["links"][$i]["href"]
33#end if
34#end for
35#return None
36#else
37#return None
38#end if
39#end def
[962]40<html lang="en">
41  <head>
42    <!-- Required meta tags -->
43    <meta charset="utf-8">
44    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
45
46    <!-- Bootstrap CSS -->
47    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
48
49    <!-- Custom styles for this template -->
50    <link href="$openapi["openapi"]["rootUrl"]/../static/openapi.css" rel="stylesheet">
51
52    <title>#if "id" in $values#$values["id"]#else##if $currentKey in $openapi and "title" in $openapi[$currentKey]#$openapi[$currentKey]["title"]#else#Landing Page#end if##end if#</title>
53  </head>
54  <body itemscope itemtype="https://schema.org/DataCatalog">
55    <header>
56     <!-- Fixed navbar -->
57      <nav
58        class="navbar navbar-expand-md navbar-dark fixed-top bg-dark"
59        itemprop="creator"
60        itemscope itemtype="https://schema.org/Organization" >
61        <a class="navbar-brand" href="#">
62          <img itemprop="logo" src="http://zoo-project.org/img/zoo-sun-logo.png" width="55" height="30" class="d-inline-block align-top" alt="">
63           <span itemprop="name">$conf["provider"]["providerName"]</span>
64        </a>
65        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
66          <span class="navbar-toggler-icon"></span>
67        </button>
68        <div class="collapse navbar-collapse" id="navbarCollapse">
69          <ul class="navbar-nav mr-auto"
70            itemscope itemtype="https://schema.org/BreadcrumbList">
71            <li class="nav-item #if $currentKey=="root"# active#end if#"
72              itemprop="itemListElement" itemscope
73              itemtype="https://schema.org/ListItem">
74              <a itemprop="item" class="nav-link"
75                href="$openapi["openapi"]["rootUrl"]/index.html">
76                <span itemprop="name">Home #if $currentKey=="root"# <span class="sr-only">(current)</span>#end if#</span>
77                <meta itemprop="position" content="1" />
78              </a>
79            </li>
80            #if $currentKey!="root"
81            #for i in range(1,len($urlCompnents))
82            <li
83              itemprop="itemListElement" itemscope
84              itemtype="https://schema.org/ListItem"
85              class="nav-item #if $i+1==len($urlCompnents)#active#end if#">
86            #set prefix=""
87            #for j in range(1,$i)
88            #set $prefix+="/"+$urlCompnents[$j]
89            #end for
90              <a itemprop="item" class="nav-link" href="$openapi["openapi"]["rootUrl"]$(prefix)/$(urlCompnents[$i]).html">
91                <span itemprop="name">
92            #if $i==2
93            $(urlCompnents[$i])
94            #else
95            $(urlCompnents[$i].title())
96            #end if
97            #if $i+1==len($urlCompnents)
98            <span class="sr-only">(current)</span>
99            #end if
100                <meta itemprop="position" content="$(i+1)" />
101                </span>
102              </a>
103            </li>
104            #end for
105            #end if
106          </ul>
107        </div>
108       </nav>
109    </header>
110        <script>
111        var System={};
112        </script>
113
114#def printRel($o,$v)
115#if $v in $o
116$o[$v]
117#else
118View default (no title found for $v).
119#end if
120#end def
121#*
122       
123*#
124#def printControl(obj)
125#if "type" not in $obj
126#set oType="format"
127#else
128#set oType=$obj["type"]
129#end if
130        <div class="input-group">
131          <div class="input-group-prepend">
132            <div class="input-group-text">$obj["title"]</div>
133          </div>
134          #if "ph" in $obj 
135          <input type="text"
136            #if "value" in $obj#value="$obj["value"]""#end if#
137            #if "id" in $obj#data-id="$obj["id"]"#end if#
138            class="form-control" data-name="$obj["title"]" name="$(oType)_$obj["name"]" placeholder="$obj["ph"]" #if "required" in $obj#required#end if#/>
139          #else
140          <select name="$(oType)_$obj["name"]" class="form-control" #if "required" in $obj#required#end if#>
141          #for i in range(len($obj["options"]))
142            <option>$obj["options"][$i]</option>
143          #end for
144          </select>
145          #end if
146          #if "required" in $obj
147          <div class="invalid-feedback">
148            Please set a value for $obj["id"].
149          </div>
150          #end if
151        </div>
152#end def
153#def printCard(obj)
154      <div class="card" #if "attrs" in $obj#$obj["attrs"]#end if#>
155        <div class="card-header" id="heading$(obj["id"])">
156          <h4 class="mb-0">
157            <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapse$(obj["id"])" aria-expanded="true" aria-controls="collapse$(obj["id"])">
158              $obj["title"]
159            </button>
160          </h4>
161        </div>
162        <div id="collapse$(obj["id"])" class="collapse #if "class" in $obj#$obj["class"]#end if#" aria-labelledby="heading$(obj["id"])">
163          <div class="card-body">
164            $obj["content"]
165          </div>
166        </div>
167      </div>
168#end def
169#def printInputContent($obj)
170#set cName=$obj["id"].replace(".","_")
171#if "formats" in $obj["input"]
172 #set cFormats=[]
173  #for j in range(len($obj["input"]["formats"]))
[985]174  #set $cFormats+=[$obj["input"]["formats"][$j]["mediaType"]]
[962]175  #end for
176  $printControl({"title": "format","type": "input_format","name": $cName,"options":$cFormats})
177  #set largs={"id": $obj["id"],"title": "href","type": "input_value","name": $cName,"ph":"URL"}
178  #if $obj["minOccurs"]>0
179  #set $largs["required"]=True
180  #end if
181  $printControl($largs)
182#else
183 #if "literalDataDomains" in $obj["input"]
184  #set cDataDomain=$obj["input"]["literalDataDomains"][0]
185  #set largs={"id": $obj["id"],"title": $cDataDomain["dataType"]["name"],"type": "input_value", "name": $cName,}
186  #if $obj["minOccurs"]>0
187  #set $largs["required"]=True
188  #end if
189  #if "anyValue" in $cDataDomain["valueDefinition"]
190   #set $largs["ph"]="Value"
191      $printControl($largs)
192  #else
193   #if "allowedValues" in $cDataDomain["valueDefinition"]
194    #set $largs["options"]=$cDataDomain["valueDefinition"]["allowedValues"]
195    $printControl($largs)
196   #else
197    ELSE
198    $obj
199   #end if
200  #end if
201  #if "defaultValue" in $cDataDomain
202      <script>
203        System["function_$cName"]=function(){
204          try{
205            jQuery("input[name='input_value_$cName'],select[name='input_value_$cName]']").val($cDataDomain["defaultValue"]);
206          }catch(e){
207            jQuery("input[name='input_value_$cName'],select[name='input_value_$cName']").val("$cDataDomain["defaultValue"]");
208          }
209        }
210      </script>
211  #end if
212 #else
213  $obj
214  ELSE
215 #end if
216#end if
[984]217#if $obj["maxOccurs"]=="unbounded" or $obj["maxOccurs"]>1
[965]218        <div class="btn-group" role="group" aria-label="Basic example">
219          <button type="button" class="btn btn-secondary" onclick="addElementToList(\$(this));">Add</button>
220          <button type="button" class="btn btn-secondary" onclick="delElementToList(\$(this));">Delete</button>
221        </div>
222#end if
[962]223#end def
224#def printProvider(conf)
225#set provider=$conf["provider"]
226      <b itemprop="name">$provider["providerName"]</b>
227      <p><a itemprop="url" href="$provider["providerSite"]">$provider["providerSite"]</a></p>
228#end def
229#def printContact(conf)
230#set provider=$conf["provider"]
231#set alt=$openapi["provider_alt"]
232#set elements=list($alt.keys())
233      <b>Address</b>
234      #for i in ["addressDeliveryPoint","addressCity","addressAdministrativeArea","addressPostalCode","addressCountry","addressElectronicMailAddress","phoneVoice","phoneFacsimile"]
235      #if i!="addressElectronicMailAddress" and $provider[$i]!="False"
236      <p itemprop="$(alt[$i.lower()])">
237      #if i=="phoneVoice"
238      Phone
239      <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-telephone" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
240        <path fill-rule="evenodd" d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.568 17.568 0 0 0 4.168 6.608 17.569 17.569 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.678.678 0 0 0-.58-.122l-2.19.547a1.745 1.745 0 0 1-1.657-.459L5.482 8.062a1.745 1.745 0 0 1-.46-1.657l.548-2.19a.678.678 0 0 0-.122-.58L3.654 1.328zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.678.678 0 0 0 .178.643l2.457 2.457a.678.678 0 0 0 .644.178l2.189-.547a1.745 1.745 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.634 18.634 0 0 1-7.01-4.42 18.634 18.634 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877L1.885.511z"/>
241      </svg>
242      #end if
243      $provider[$i]
244      </p>
245      #else
246      #if i=="addressElectronicMailAddress"
247      <b>Email</b>
248      <p itemprop="$(alt[$i.lower()])">
249      $provider[$i]
250      </p>
251      #end if
252      #end if
253      #end for
254#end def     
255#def printIndentification(conf)
256#set provider=$conf["provider"]
257$printCard({"id": "provider","title": "Provider","content": $printProvider($conf),"class": "show"})
258$printCard({"id": "contact","title": "Contact","content": $printContact($conf),"class": "show","attrs":'itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"'})
259#end def
260     
261#if $currentKey=="root"
262  <div class="container-fluid">
263  <div class="row">
264      <div class="col-sm-8">
265#end if
266        <!-- $currentUrl -->
267      <!-- Begin page content -->     
268      <main #if $currentKey!="root"#class="container-fluid"#end if#>
269        <h1 itemprop="name">#if "id" in $values#$values["id"]: #end if##if "title" in $values#$html.escape($values["title"])#else##if len($urlCompnents)==2#$currentUrl[1:].title()#else#$currentUrl[1:]#end if##end if#</h1>
270        #if "description" in $values#<p itemprop="description">$html.escape($values["description"])</p>#end if#
271        #if $currentKey=="root"
272        <div class="keywords">
273          #for i in $conf["identification"]["keywords"].split(',')
274          <button type="button"
275            class="btn btn-outline-info">$i</button>
276          #end for
277        </div>
278        License:
279        <a itemprop="license" href="$openapi["openapi"]["license_url"]">$openapi["openapi"]["license_name"]</a>
280        #end if
281    #if "inputs" in $values
282#set $cid="JOBSOCKET-"+$conf["lenv"]["usid"]
283        <form class="needs-validation" data-id="$cid" novalidate>
[967]284          <input type="hidden" name="oapi_ioAsArray" value="#if "io_as_array" in $openapi["openapi"]#$openapi["openapi"]["io_as_array"]#else#false#end if#" />
285          <input type="hidden" name="oapi_wsUrl" value="$openapi["openapi"]["wsurl"]" />
[986]286          <input type="hidden" name="oapi_jobUrl" value="$findLink($values,"execute")" />
[967]287          <input type="hidden" name="oapi_reqID" value="$cid" />
288          <h3>Inputs</h3>
289          <div class="accordion" id="accordionInputExample">
290            #for i in range(len(values["inputs"]))
291            #set cInput=$values["inputs"][$i]
292            #set cName=$cInput["id"].replace(".","_")
293            $printCard({"id": $cName, "title": $cInput["id"],"content":'<p>'+$cInput["description"]+'</p>'+$printInputContent($cInput)})
294            #end for   
295          </div>
[962]296     
[967]297          <h3>Outputs</h3>
298          <div class="accordion" id="accordionOutputExample">
299            #for i in range(len(values["outputs"]))
300            #set cOutput=$values["outputs"][$i]
301            #set cName=$cOutput["id"].replace(".","_")
302            #set cFormats=[]
303            #if "formats" in $cOutput["output"]
304            #for j in range(len($cOutput["output"]["formats"]))
[985]305            #set cFormats+=[$cOutput["output"]["formats"][$j]["mediaType"]]
[967]306            #end for
307            #end if
308            #set cTransmissions=[]
309            #for j in range(len($values["outputTransmission"]))
310            #set cTransmissions+=[$values["outputTransmission"][$j]]
311            #end for
312            #set cContent="<p>"+$cOutput["description"]+"</p>"
313            #if len(cFormats)>0
314            #set $cContent+=$printControl({"id": $cOutput["id"], "title": "format","type": "format","name": $cName,"options":$cFormats})
315            #end if
316            #if len(cTransmissions)>0
317            #set $cContent+=$printControl({"id": $cOutput["id"], "title": "transmission","type": "transmission","name": $cName,"options":$cTransmissions})
318            #end if
319            $printCard({"id": $cName+"_"+str($i),"title": $cOutput["id"],"content": $cContent})
320            #end for
321          </div>
[962]322   
[967]323          <h3>Execution options</h3>
324          <div class="accordion" id="accordionExampleExecutionMode">
325            #set cContent=""
326            #set cUrl=$openapi["openapi"]["publisherurl"]+cid+"&type="
327            #for a in ["successUri","inProgressUri","failedUri"]
328            #set $cContent+=$printControl({"title": $a,"type": "main_value","name": $a,"ph":"URL","value":$cUrl+$a.replace("Uri","")})
329            #end for
330            $printCard({"id":"ModeOne","title":"Subscribers","content": $cContent})
331            $printCard({"id":"ModeTwo","title":"Response","content": $printControl({"title":"format","type": "main_value","name": "format","options":["document","raw"]})})
332            $printCard({"id":"ModeThree","title":"Mode","content": $printControl({"title":"mode","type": "main_value","name": "mode","options":["async","sync"]})})
333          </div>
334         
335          <button type="submit" class="btn btn-primary" >Submit</button>
336        </form>
[962]337    <div class="modal" tabindex="-1" id="exampleModal">
338      <div class="modal-dialog modal-xl">
339        <div class="modal-content">
340          <div class="modal-header">
341            <h5 class="modal-title">Your request</h5>
342            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
343              <span aria-hidden="true">&times;</span>
344            </button>
345          </div>
346          <div class="modal-body">
347            <textarea name="modalText" class="form-control" style="min-height:300px"></textarea>
348            <pre id="result"></pre>
349            <div id="progress_details" style="display:none">
350              <p id="prgress_description"></p>
351              <div class="progress">
352                <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div>
353              </div>
354            </div>
355          </div>
356          <div class="modal-footer">
357            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
358            <button type="button" class="btn btn-primary">Submit Job</button>
359          </div>
360        </div>
361      </div>
362    </div>
[967]363    <script src="$openapi["openapi"]["rootUrl"]/../static/openapi.js"></script>
[962]364    #end if
365   
366    #try
367    #if "links" in $values
368    #for i in range(len($values["links"]))
369    #if $i%2==0   
370    <h2>$values["links"][$i]["title"]</h2>
371    <p>
372      <a href="$values["links"][$i]["href"]">$printRel($openapi["links_title"],$values["links"][$i]["rel"])</a>
373    </p>
[986]374    #if $i+1<=len($values["links"]) and len($values["links"])>1 and ($values["links"][$i+1]["rel"]=="alternate" or $values["links"][$i+1]["rel"]=="service-doc")
[962]375    <p><a href="$values["links"][$i+1]["href"]">$printRel($openapi["links_title"],$values["links"][$i+1]["rel"])</a></p>
376    #end if
377    #end if
378    #end for
379    #end if
380    #except Exception as e
381    $e
382    #end try
383    #if "conformsTo" in $values
384    <ul>
385      #for i in range(len($values["conformsTo"]))
386      <li>
387      <a href="$values["conformsTo"][$i]">$values["conformsTo"][$i]</a>
388      </li>
389      #end for
390    </ul>
391    #end if
392    #if "jobs" in $urlCompnents
393    #set $removeCacheFile=True
394    #end if
395    #if hasattr($values, "__len__") and isinstance($values,list) and len($values)>0
396    <table class="table table-striped">
397      <thead>
398        <tr>
399          #if "jobs" not in $urlCompnents
400          #*
401          * Processes list
402          *#
403          <th scope="col">#</th>
404          <th scope="col">Title</th>
405          <th scope="col">Version</th>
406          #else
407          #*
408          * Jobs list
409          *#
410          <th scope="col">#</th>
411          <th scope="col">Message</th>
412          <th scope="col">Links</th>
413          #end if
414        </tr>
415      </thead>
416      <tbody>   
417        #for i in range(len($values))
418        <tr>
419          #if "jobs" not in $urlCompnents
420          #*
421          * Processes list
422          *#
423          <th scope="row">
[986]424            <a href="$(values[$i]["links"][0]["href"]).html">
[962]425              <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-link-45deg" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
426                <path d="M4.715 6.542L3.343 7.914a3 3 0 1 0 4.243 4.243l1.828-1.829A3 3 0 0 0 8.586 5.5L8 6.086a1.001 1.001 0 0 0-.154.199 2 2 0 0 1 .861 3.337L6.88 11.45a2 2 0 1 1-2.83-2.83l.793-.792a4.018 4.018 0 0 1-.128-1.287z"/>
427                <path d="M6.586 4.672A3 3 0 0 0 7.414 9.5l.775-.776a2 2 0 0 1-.896-3.346L9.12 3.55a2 2 0 0 1 2.83 2.83l-.793.792c.112.42.155.855.128 1.287l1.372-1.372a3 3 0 0 0-4.243-4.243L6.586 4.672z"/>
428              </svg>
429            $values[$i]["id"]
430            </a>
431          </th>
432          <td>$values[$i]["title"]</td>
433          <td>#if "version" in $values[$i]#$values[$i]["version"]#else#1.0.0#end if#</td>
434          #else
435          #*
436          * Jobs list
437          *#
[985]438          #set cValue=$values[$i]
[962]439          <th scope="row">
440            #if "status" in $cValue and $cValue["status"]=="successful"
441            <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-check-circle-fill text-success" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
442              <path fill-rule="evenodd" d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
443            </svg>
444            #else
445            #if "status" in $cValue and $cValue["status"]=="failed"
446            <svg width="1.0625em" height="1em" viewBox="0 0 17 16" class="bi bi-exclamation-triangle-fill text-error" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
447              <path fill-rule="evenodd" d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 5zm.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"/>
448            </svg>
449            #end if
450            #end if
451            $cValue["jobID"]
452          </th>
453          <td>$cValue["message"]</td>
454          <td>
455          <div class="dropdown">
456            <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
457            Action
458            </button>
459            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
460              #for j in range(len($cValue["links"]))
461              #set $cValueLink=$cValue["links"][$j]
462              #if $cValueLink["href"].count("result")==0
463              <a class="dropdown-item delete"
464                href="#"
465                data-value="$(cValueLink["href"])">Delete</a>
466              #end if
467              <a class="dropdown-item" href="$(cValueLink["href"]).html">$cValueLink["title"]</a>
468              #end for       
469            </div>
470          </div>
471          </td>
472          #end if
473        </tr>   
474        #end for
475      </tbody>
476    </table>
477    <script>
478    System["jobListDelete"]=function(){
479      \$(".delete").each(function(){
480        \$(this).off("click");
481        \$(this).click(function(){
482          console.log("OK");
483          \$.ajax({
484            url: \$(this).data("value"),
485            type: "DELETE",
486            success: function(){
487              console.log(arguments);
488            }
489          });
490        });
491      });
492    }
493    </script>
494    #end if
495
496      <div class="microlight">$json.dumps(values)</div>
497      <textarea class="form-control" style="height: 300px;"></textarea>
498      <script>
499      window.onload = function(){
500        var jsContent=\$(".microlight").html();
501        var tmpStr=js_beautify(jsContent);
502        \$("textarea").last().val(tmpStr);
503        \$(".microlight").remove();
504        for(var i in System){
505          System[i]();
506        }
[964]507        System["JSON_STR"]=JSON.parse(tmpStr);
508        var forms = document.getElementsByClassName('needs-validation');
509        // Loop over them and prevent submission
510        var validation = Array.prototype.filter.call(forms, function(form) {
511          form.addEventListener('submit', function(event) {
512            event.preventDefault();
513            event.stopPropagation();
514            if (form.checkValidity() === false) {
515              event.preventDefault();
516              event.stopPropagation();
517              for(var i=0;i<System["JSON_STR"]["inputs"].length;i++){
518                var cName=System["JSON_STR"]["inputs"][i]["id"].replace(/\./g,"_");
519                var selector=
520                  'input[name="input_value_'+cName+'"]:invalid,'+
521                  'select[name="input_value_'+cName+'"]:invalid';
522                if(\$(selector).length>0){
523                  \$(selector).each(function(){
[965]524                    if(!\$(this).parent().parent().parent().hasClass("show"))
525                      \$(this).parent().parent().parent().parent().find(".btn").first().click();
[964]526                  });
527                }
528              }             
529            }else{
530              loadRequest();
531            }
532            form.classList.add('was-validated');
533          }, false);
534        });
[962]535     
536      }
537      </script>
538      <hr>
539      <address>$openapi["openapi"]["rootUrl"]$(currentUrl).html</address>
[986]540      <!-- hhmts start -->Last modified: Tue Mar  9 16:33:11 CET 2021 <!-- hhmts end -->
[962]541    </main>
542#if $currentKey=="root"
543    </div> 
544    <div class="col-sm-4"
545      itemprop="provider"
546      itemscope itemtype="https://schema.org/Organization">
547      $printIndentification($conf)
548    </div>
549   </div>
550  </div>
551#end if
552     
553
554    <footer class="footer" itemscope itemtype="https://schema.org/SoftwareApplication">
555      <div class="container-fluid">
556        <span class="text-muted">
557          Powered by
558          <a target="_blank" itemprop="url"
559            href="http://www.zoo-project.org/"><span itemprop="name">ZOO-Project</span></a>
560          <span itemprop="version">$zoo.VERSION</span>.
561          <meta itemprop="applicationCategory" content="WebService" />
562        #try
563        #set sysname=$os.uname()
564        #except Exception as e
565        #set sysname=["Unknown"]
566        #end try
567          <meta itemprop="operatingSystem" content="$sysname[0]" />
568        </span>
569      </div>
570    </footer>
571
572    <!-- JS, Popper.js, and jQuery -->
573    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
574    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
575    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
576    <script src="https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.13.0/beautify.min.js" integrity="sha512-84xqGKD+OW9ElGeIq5RkXhsKveQx+kAjahn9r7f/Vm9J0bDrwEabW3MQNgYdTzLBnwfrTGs0nuPx3pZxh6itNg==" crossorigin="anonymous"></script>
577  </body>
578</html>
579#if "cache_file" in $inputs["tmpl"] and $removeCacheFile
580<!-- REMOVED ! -->     
581#import os
582$(os.remove($inputs["tmpl"]["cache_file"]))
583#end if
Note: See TracBrowser for help on using the repository browser.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png