Testing my forge

This commit is contained in:
Steven 2025-03-06 00:33:46 -05:00
parent 4cc7fba772
commit c42420de1e
8 changed files with 599 additions and 0 deletions

109
templates/event.html Normal file
View file

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ data.event_name }}</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="44live" property="og:site_name">
<meta content="{{ data.event_name }}{{ " ("+data.event_title+")" if data.event_title }}" property="og:title">
{%- if data.event_text %}
{%- if data.event_text.append is defined %}
{%- for i in data.event_text %}
{%- if i.text_type_id == 1 %}
<meta content="{{ i.text }}" property="og:description">
{%- endif %}
{%- endfor %}
{%- elif data.event_text.text_type_id == 1 %}
<meta content="{{ data.event_text.text }}" property="og:description">
{%- endif %}
{%- endif %}
<meta content='https://44live.stevenalexander.org/clock.svg' property='og:image'>
<link rel="icon" type="image/x-icon" href="/clock.svg">
<style>
* {
font-family: monospace;
}
footer {
display: flex;
background-color: lightblue;
padding: 5px;
justify-content: center;
}
</style>
</head>
<body>
<h1><a href="https://25live.collegenet.com/pro/louisville#!/home/event/{{ data.event_id }}/details">{{ data.event_name }}</a>{{ " ("+data.event_title+")" if data.event_title }}</h1>
<h2>
{%- if "Rsrv" in data.profile.profile_name %}
{%- if data.profile.reservation.append is defined %}
Start: {{ data.profile.reservation[0].event_start_dt }}<br>
Until: {{ data.profile.reservation[-1].event_end_dt }}
{%- else %}
Start: {{ data.profile.reservation.event_start_dt }}<br>
Until: {{ data.profile.reservation.event_end_dt }}
{%- endif %}
{%- else %}
{{ data.profile.profile_name }}
{%- endif %}
</h2>
{%- if data.profile.append is not defined %}
<h2>
{%- if data.profile.reservation.append is defined %}
{%- if data.profile.reservation[0].space_reservation.append is defined %}
{%- for space in data.profile.reservation[0].space_reservation %}
<a href="/{{ space.space.space_id }}">{{ space.space.formal_name }}</a><br>
{%- endfor %}
{%- else %}
<a href="/{{ data.profile.reservation[0].space_reservation.space_id }}">{{ data.profile.reservation[0].space_reservation.space.formal_name }}</a>
{%- endif %}
{%- else %}
{%- if data.profile.reservation.space_reservation.append is defined %}
{%- for space in data.profile.reservation.space_reservation %}
<a href="/{{ space.space.space_id }}">{{ space.space.formal_name }}</a><br>
{%- endfor %}
{%- else %}
<a href="/{{ data.profile.reservation.space_reservation.space_id }}">{{ data.profile.reservation.space_reservation.space.formal_name }}</a>
{%- endif %}
{%- endif %}
</h2>
{%- endif %}
{%- if data.event_text %}
<h2>Description</h2>
{%- if data.event_text.append is defined %}
{%- for i in data.event_text %}
{%- if i.text_type_id == 1 %}
<h3>{{ i.text | safe }}</h3>
{%- endif %}
{%- endfor %}
{%- elif data.event_text.text_type_id == 1 %}
<h3>{{ data.event_text.text | safe }}</h3>
{%- endif %}
{%- endif %}
<h2>Contact(s)</h2>
{%- for i in data.role %}
<h3>{{ i.role_name }}: {{ i.contact.contact_first_name }} {{ i.contact.contact_middle_name }} {{ i.contact.contact_last_name }}</h3>
{%- if i.contact.email %}
<p>Email: {{ i.contact.email }}</p>
{%- endif %}
{%- if i.contact.phone %}
<p>Phone: {{ i.contact.phone }}</p>
{%- endif %}
{%- if i.contact.formatted_address %}
<p>Address: {{ i.contact.formatted_address }}</p>
{%- endif %}
{%- endfor %}
{%- if data.custom_attribute %}
<h2>Custom Attribute(s)</h2>
{%- if data.custom_attribute.append is defined %}
{%- for i in data.custom_attribute %}
<h3>{{ i.attribute_name }}</h3>
<p>{{ i.attribute_value }}</p>
{%- endfor %}
{%- else %}
<h3>{{ data.custom_attribute.attribute_name }}</h3>
<p>{{ data.custom_attribute.attribute_value }}</p>
{%- endif %}
{%- endif %}
<footer>Last modified at {{ data.last_mod_dt }} by {{ data.last_mod_user }}</footer>
</body>
</html>

48
templates/index.html Normal file
View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>UofL Events</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="44live" property="og:site_name">
<meta content="44live - find rooms at UofL" property="og:title">
<meta content="Work in progress. Don't expect much." property="og:description">
<meta content='https://44live.stevenalexander.org/calendar.svg' property='og:image'>
<link rel="icon" type="image/x-icon" href="/calendar.svg">
<style>
*{font-family:monospace;font-size:0.8cm;}
input[type="checkbox"],input[type="radio"]{width:0.7cm;height:0.7cm;}
</style>
</head>
<body>
<h1>Choose a day:</h1>
<input id="today" type="radio" name="date" checked>
<label for="today">today</label><br>
<input id="tomorrow" type="radio" name="date">
<label for="tomorrow">tomorrow</label><br>
<input id="custom" type="radio" name="date">
<label for="custom"><input id="date" type="date" min="{{today}}" max="{{later}}" value="{{dayafter}}" onchange="noClear(event)"></label>
<h1>[Optional] Select types of events to find:</h1>
{%- for i in ["available","class","exam","booked","food"] %}
<input id="{{i}}" type="checkbox">
<label for="{{i}}">{{i}}</label><br>
{%- endfor %}
<p><button onclick="changeURL()">Show me the events!</button></p>
<script>
function noClear(e) {
val=e.target.value
if(val===""||val<"{{today}}"||val>"{{later}}"){e.target.value="{{dayafter}}"}
document.getElementById("custom").click()
}
function changeURL(){
has=[]
document.querySelectorAll('input[type="checkbox"]:checked').forEach(i=>has.push(i.id))
if(has.length>0){has="?has="+has.join(",")
}else{has=""}
date=document.querySelector('input[type="radio"]:checked').id
if(date=="custom"){date=document.querySelector('input[type="date"]').value}
document.location.href=date+has
}
</script>
</body>
</html>

192
templates/list.html Normal file
View file

@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>44live</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="44live" property="og:site_name">
<meta content="44live - find rooms at UofL" property="og:title">
<meta content="Work in progress. Don't expect much." property="og:description">
<meta content='https://44live.stevenalexander.org/calendar.svg' property='og:image'>
<link rel="icon" type="image/x-icon" href="/calendar.svg">
<base target="_blank">
<style>
* {
margin: 0;
padding: 0;
scrollbar-width: none;
}
body, html {
-webkit-text-size-adjust: 100%;
font: 12px monospace;
width: 100%;
height: 100%;
overflow: auto;
}
table {
background-color: black;
min-width: 100%;
width: 1600px;
max-width: 400%;
border-collapse: separate;
border-spacing: 0;
table-layout: fixed;
overflow-x: clip;
}
th, td {
background-color: white;
box-sizing: border-box;
border-bottom: 2px solid black;
border-right: 2px solid black;
overflow: hidden;
text-overflow: ellipsis;
}
th, td:first-child {
position: sticky;
}
th:first-child, td:first-child {
left: 0;
}
th {
top: 0;
text-align: center;
font-weight: bold;
}
th:first-child {
z-index: 1;
}
a, span {
white-space: nowrap;
padding: 2px;
overflow: hidden;
text-overflow: ellipsis;
}
a {
display: block;
text-decoration: none;
color: black;
}
.closed > a {color:white;}
a:hover{background-color:lightgray;color:black;}
.closed{background-color:black;color:white;}
.available{background-color:lightgreen;}
.other{background-color:white;}
.class{background-color:darkgray;}
.exam{background-color:gray;}
.booked{background-color:coral;}
.food{background-color:mediumpurple;}
</style>
</head>
<body>
<table>
<thead><tr>
<th colspan=60><a href="https://25live.collegenet.com/pro/louisville#!/home/event/form">Updating...</a></th>
</tr></thead>
<tbody></tbody>
</table>
<script>
const headRow = document.querySelector('tr');
const bookBtn = headRow.querySelector('a');
const tbody = document.querySelector('tbody');
for (let hour = 8; hour < 23; hour++) {
const th = document.createElement('th');
th.setAttribute("colspan", 60);
th.textContent = hour;
headRow.appendChild(th)
}
let json=localStorage.getItem("{{ day }}");
if (json) displayEvents(JSON.parse(json))
fetch("{{ day }}.json").then(r => {
bookBtn.innerText = "Book a Space";
return r.json()
}).then(json => {
tbody.innerHTML="";
displayEvents(json);
try {
localStorage.setItem("{{ day }}",JSON.stringify(json))
} catch {
localStorage.clear();
localStorage.setItem("{{ day }}",JSON.stringify(json))
}
})
function createBox(row, length, type, name, link) {
const td = document.createElement("td");
if (link) {
var e = document.createElement("a");
e.href = link
}
if (name) {
if (!e) var e = document.createElement("span")
e.textContent = name;
e.title = name;
td.appendChild(e)
}
if (type) {
if (type != "closed" || length == 900) {row.firstChild.classList.add(type)}
td.classList.add(type);
}
td.setAttribute("colspan", length);
row.appendChild(td);
}
function displayEvents(json) {
if (window.location.search) var has=new Set(new URLSearchParams(window.location.search).get("has").split(","))
for (space in json) {
const row = document.createElement("tr");
let link = json[space].i;
let defaultEmpty = "available";
let defaultType = null;
if (!json[space].i) {
link = "https://louisville.campusdish.com/LocationsAndMenus/"+space;
defaultEmpty = "closed";
defaultType = "food"
}
createBox(row, 60, null, space, link);
let now = 0;
if (json[space].l) {
for (e of json[space].l) {
start=e.s
end=e.e
if (now < start) {
createBox(row, start-now, defaultEmpty);
now = start
}
if (now <= start && now < end) {
type = defaultType ? defaultType : (e.i ? (e.t ? e.t : "other") : "closed");
link = e.i ? "event/" + e.i : null;
createBox(row, end-start, type, e.n, link)
now = end
}
}
}
if (now < 900) {
createBox(row, 900-now, defaultEmpty)
}
if (typeof has === "undefined") {
tbody.appendChild(row)
} else {
for (let i of row.firstChild.className.split(" ")) {
if (has.has(i)) {
tbody.appendChild(row)
}
}
}
}
};
document.querySelector("script").remove();
</script>
</body>
</html>

61
templates/space.html Normal file
View file

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ data.space_name }}</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="44live" property="og:site_name">
<meta content="{{ data.space_name }}{{ " ("+data.building_name+")" if data.building_name }}" property="og:title">
<meta content='https://44live.stevenalexander.org/location.svg' property='og:image'>
<link rel="icon" type="image/x-icon" href="/location.svg">
<style>
* {
font-family: monospace;
}
b {
white-space: pre-wrap;
}
img {
max-width:100%;
}
footer {
display: flex;
background-color: lightblue;
padding: 5px;
justify-content: center;
}
</style>
</head>
<body>
<h1><a href="https://25live.collegenet.com/pro/louisville#!/home/location/{{ data.space_id }}/availability/daily">{{ data.space_name }}</a>{{ " ("+data.building_name+")" if data.building_name }}</h1>
<h2>Hours</h2>
<h3>
{%- for i in data.hours %}
{{ i.day_name[:3] }}: {{ i.open }} - {{ i.close }}<br>
{%- endfor %}
</h3>
{% if data.instructions %}
<h2>Instructions</h2>
<h3>{{ data.instructions|safe }}</h3>
{% endif %}
{%- if data.comments %}
<h2>Comments</h2>
<h3>{{ data.comments|safe }}</h3>
{%- endif %}
<h2>Layout(s)</h2>
{%- if data.layout %}
{%- if data.layout.append is defined %}
{%- for i in data.layout %}
{%- if i.layout_photo_id %}
<h3>{{ i.layout_name }} ({{ i.layout_capacity }} capacity)</h3>
<img src="https://25live.collegenet.com/25live/data/louisville/run/image?image_id={{ i.layout_photo_id }}">
{%- endif %}
{%- endfor %}
{%- elif data.layout.layout_photo_id %}
<h3>{{ data.layout.layout_name }} ({{ data.layout.layout_capacity }} capacity)</h3>
<img src="https://25live.collegenet.com/25live/data/louisville/run/image?image_id={{ data.layout.layout_photo_id }}">
{%- endif %}
{%- endif %}
<footer>Last modified at {{ data.last_mod_dt }} by {{ data.last_mod_user }}</footer>
</body>
</html>