<!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>