214 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html>
 | |
| 
 | |
| <head>
 | |
|     {{partial "head" .}}
 | |
|     <script defer src="/alpine.js" type="text/javascript"></script>
 | |
|     <script src="/helper.js"></script>
 | |
|     <style>
 | |
|         .interverse {
 | |
|             display: flex;
 | |
|             flex-direction: column;
 | |
|             align-items: center;
 | |
|         }
 | |
| 
 | |
|         .interverse h1 {
 | |
|             text-align: center;
 | |
|         }
 | |
| 
 | |
|         .interverse img {
 | |
|             max-width: 15rem;
 | |
|             max-height: 15rem;
 | |
|         }
 | |
| 
 | |
|         .interverse section {
 | |
|             display: flex;
 | |
|             flex-direction: row;
 | |
|             align-items: center;
 | |
|             justify-content: center;
 | |
|             flex-wrap: wrap;
 | |
|             box-shadow: none;
 | |
|         }
 | |
| 
 | |
|         .interverse-connection-preview {
 | |
|             display: flex;
 | |
|             flex-direction: column;
 | |
|             padding: 1rem;
 | |
|             margin: 0.5rem;
 | |
|             align-items: center;
 | |
|         }
 | |
| 
 | |
|         .interverse-connection {
 | |
|             margin: 0.25rem;
 | |
|             padding: 0.25rem;
 | |
|             display: flex;
 | |
|             flex-direction: column;
 | |
|             align-items: center;
 | |
|             justify-items: center;
 | |
|         }
 | |
| 
 | |
|         .interverse-resource {
 | |
|             margin: 2rem;
 | |
|         }
 | |
| 
 | |
|         #interverse-resource-groups {
 | |
|             align-items: flex-start;
 | |
|         }
 | |
|     </style>
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
|     {{partial "header" .}}
 | |
|     <main class="interverse" x-data x-if="Alpine.store('data')">
 | |
|         <section>{{.Content}}</section>
 | |
|         <section id="interverse-details">
 | |
|             <img x-bind:src="Alpine.store('data')['image']">
 | |
|             <div style="margin-left:3rem;">
 | |
|                 <h1 x-text="Alpine.store('data')['name']"></h1>
 | |
|                 <a x-bind:href="Alpine.store('data')['location']" x-text="Alpine.store('data')['location']"></a>
 | |
|             </div>
 | |
|         </section>
 | |
|         <section id="interverse-resource-groups">
 | |
|             <template x-for="(group,name) in Alpine.store('data')['resource_groups']">
 | |
|                 <div>
 | |
|                     <h1 x-text="name"></h1>
 | |
|                     <div class="interverse-group">
 | |
|                         <template x-for="resource in group">
 | |
|                             <a x-bind:href="resource['location']">
 | |
|                                 <div class="interverse-resource">
 | |
|                                     <template x-if="resource['icon'] !=''">
 | |
|                                         <img class="interverse-resource-icon" x-bind:src="resource['icon']">
 | |
|                                     </template>
 | |
|                                     <h2 x-text="resource['label']"></h2>
 | |
|                                     <p x-text="resource['description']"></p>
 | |
|                                 </div>
 | |
|                             </a>
 | |
|                         </template>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </template>
 | |
|         </section>
 | |
|         <section id="interverse-resources">
 | |
|             <template x-for="resource in Alpine.store('data')['resources']">
 | |
|                 <a x-bind:href="resource['location']">
 | |
|                     <div class="interverse-resource">
 | |
|                         <template x-if="resource['icon'] !=''">
 | |
|                             <img class="interverse-resource-icon" x-bind:src="resource['icon']">
 | |
|                         </template>
 | |
|                         <h2 x-text="resource['label']"></h2>
 | |
|                         <p x-text="resource['description']"></p>
 | |
|                     </div>
 | |
|                 </a>
 | |
|             </template>
 | |
|         </section>
 | |
|         <div id="interverse-groups">
 | |
|             <template x-for="(group,name) in Alpine.store('data')['connection_groups']">
 | |
|                 <div>
 | |
|                     <h1 x-text="name"></h1>
 | |
|                     <section class="interverse-group">
 | |
|                         <template x-for="link in group">
 | |
|                             <div class="interverse-connection" x-data="{connected:false">
 | |
|                                 <template x-if="Alpine.store(link)['name'] !=''">
 | |
|                                     <div class='interverse-connection-preview'
 | |
|                                         x-on:click="initialize(link+'/.well-known/interverse')">
 | |
|                                         <h3 x-text="Alpine.store(link)['name']"></h3>
 | |
|                                         <img x-bind:src="Alpine.store(link)['image']">
 | |
|                                         <a x-bind:href="link" x-text="link"></a>
 | |
|                                     </div>
 | |
|                                 </template>
 | |
|                                 <template x-if="Alpine.store(link) == undefined">
 | |
|                                     <div>
 | |
|                                         <a x-bind:href="link">
 | |
|                                             <p x-text="link"></p>
 | |
|                                         </a>
 | |
|                                     </div>
 | |
| 
 | |
|                                 </template>
 | |
|                             </div>
 | |
|                         </template>
 | |
|                     </section>
 | |
| 
 | |
|                 </div>
 | |
|             </template>
 | |
|         </div>
 | |
|         <h3 style="text-align:center"></h3>
 | |
|         <section id="interverse-connections">
 | |
|             <template x-for="connection in Alpine.store('data')['connections']">
 | |
|                 <div class="interverse-connection">
 | |
|                     <template x-if="Alpine.store(connection)['version'] >=0">
 | |
|                         <div x-on:click="initialize(connection+'/.well-known/interverse')">
 | |
|                             <h3 x-text="Alpine.store(connection)['name']"></h3>
 | |
|                             <template x-if="Alpine.store(connection)['image']!=''">
 | |
|                                 <img x-bind:src="Alpine.store(connection)['image']">
 | |
|                             </template>
 | |
|                         </div>
 | |
| 
 | |
|                     </template>
 | |
|                     <template x-if="name == ''">
 | |
|                         <div>
 | |
|                             <a x-bind:href="connection" x-text="connection"></a>
 | |
|                     </template>
 | |
| 
 | |
|                 </div>
 | |
|             </template>
 | |
|             </div>
 | |
|             <div id="interverse-contact">
 | |
|                 <template x-for="contact in Alpine.store('data')['contact']">
 | |
|                     <div class="interverse-contact">
 | |
| 
 | |
|                     </div>
 | |
| 
 | |
|                 </template>
 | |
|             </div>
 | |
| 
 | |
|     </main>
 | |
|     <script>
 | |
|         var t = new Date();
 | |
|         var timestamp = t.getTime();
 | |
|         var main_url = "/.well-known/interverse";
 | |
|         if (getUrlParameter('s') && getUrlParameter("url")) {
 | |
|             var uri = "";
 | |
|             main_url = getUrlParameter('s') + "://" + getUrlParameter("url") + '/.well-known/interverse?t=' + timestamp;
 | |
|         } else {
 | |
|             if (getUrlParameter('url')) {
 | |
|                 main_url = "https://" + getUrlParameter('url') + '/.well-known/interverse?t=' + timestamp;
 | |
|             }
 | |
|         }
 | |
|         document.addEventListener('alpine:init', function () {
 | |
| 
 | |
|             initialize(main_url);
 | |
|         });
 | |
| 
 | |
|         function initialize(url) {
 | |
|             Alpine.store("data", {});
 | |
|             fetchdata(url, function (e) {
 | |
|                 data = JSON.parse(e.target.response);
 | |
|                 raw_data = JSON.parse(e.target.response);
 | |
|                 Alpine.store("data", data);
 | |
|                 var connections = raw_data['connections'];
 | |
|                 for (group in data['connection_groups']) {
 | |
|                     for (link in data['connection_groups'][group]) {
 | |
|                         connections.push(data['connection_groups'][group][link]);
 | |
|                     }
 | |
|                 }
 | |
|                 var t = new Date();
 | |
|                 var timestamp = t.getTime();
 | |
|                 for (var i = 0; i < connections.length; i++) {
 | |
|                     fetchdata(connections[i] + '/.well-known/interverse?t=' + timestamp, function (e) {
 | |
|                         try {
 | |
|                             dat = JSON.parse(e.target.response);
 | |
|                             console.log(dat);
 | |
|                             Alpine.store(dat['location'], dat);
 | |
|                         } catch {
 | |
|                             console.log("Failed to parse connection JSON");
 | |
|                         }
 | |
|                     });
 | |
|                 }
 | |
| 
 | |
|             });
 | |
|         }
 | |
|     </script>
 | |
| </body>
 | |
| {{partial "footer" .}}
 | |
| 
 | |
| </html> |