freedom/layouts/interverse/list.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>