Finish the base web doselog display
The issues are .. One can't load all the doses and then filter dynamically via search. One has to limit records. And it doesn't randomize. Signed-off-by: Pratyush Desai <pratyush.desai@liberta.casa>
This commit is contained in:
parent
77030f9092
commit
ea1814e166
223
plugin.py
223
plugin.py
@ -75,75 +75,101 @@ class TripsitServerCallback(httpserver.SupyHTTPServerCallback):
|
|||||||
self.plugin = plugin # to access db
|
self.plugin = plugin # to access db
|
||||||
|
|
||||||
def doGet(self, handler, path):
|
def doGet(self, handler, path):
|
||||||
# '/doses'
|
|
||||||
if path == '/doses':
|
if path == '/doses':
|
||||||
nick = 'mogad0n'
|
# Collect all dose logs from self.db
|
||||||
dose_logs = self.plugin.db.get(nick, {}).get('doses', [])
|
dose_logs = []
|
||||||
|
for nick, data in self.plugin.db.items():
|
||||||
|
for dose in data.get('doses', []):
|
||||||
|
dose_logs.append({
|
||||||
|
'nick': nick,
|
||||||
|
'time': dose['time'],
|
||||||
|
'dose': dose['dose'],
|
||||||
|
'drug': dose['drug'],
|
||||||
|
'method': dose['method'],
|
||||||
|
})
|
||||||
|
|
||||||
# HTML
|
# Create HTML response
|
||||||
response = """
|
html_response = """
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Dose Logs</title>
|
<title>Dose Logs</title>
|
||||||
|
<style>
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: 8px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
#filter {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 5px;
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Dose Logs for {}</h1>
|
<h1>Dose Logs</h1>
|
||||||
<table border="1">
|
<input type="text" id="filter" placeholder="Search for nicknames, drugs, etc.">
|
||||||
<tr>
|
<table id="doseTable">
|
||||||
<th>Time</th>
|
<thead>
|
||||||
<th>Dose</th>
|
<tr>
|
||||||
<th>Drug</th>
|
<th>Nick</th>
|
||||||
<th>Method</th>
|
<th>Time</th>
|
||||||
</tr>
|
<th>Dose</th>
|
||||||
""".format(nick)
|
<th>Drug</th>
|
||||||
|
<th>Method</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
"""
|
||||||
|
# Add rows for each dose log
|
||||||
for log in dose_logs:
|
for log in dose_logs:
|
||||||
response += """
|
html_response += f"""
|
||||||
<tr>
|
<tr>
|
||||||
<td>{}</td>
|
<td>{log['nick']}</td>
|
||||||
<td>{}</td>
|
<td>{log['time']}</td>
|
||||||
<td>{}</td>
|
<td>{log['dose']}</td>
|
||||||
<td>{}</td>
|
<td>{log['drug']}</td>
|
||||||
</tr>
|
<td>{log['method']}</td>
|
||||||
""".format(
|
</tr>
|
||||||
log['time'],
|
"""
|
||||||
log['dose'],
|
|
||||||
log['drug'],
|
|
||||||
log['method']
|
|
||||||
)
|
|
||||||
|
|
||||||
response += """
|
html_response += """
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<script>
|
||||||
|
// Filter table rows based on input
|
||||||
|
document.getElementById('filter').addEventListener('input', function() {
|
||||||
|
const filter = this.value.toLowerCase();
|
||||||
|
const rows = document.querySelectorAll('#doseTable tbody tr');
|
||||||
|
rows.forEach(row => {
|
||||||
|
const text = row.innerText.toLowerCase();
|
||||||
|
row.style.display = text.includes(filter) ? '' : 'none';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Response
|
# Send the HTML response
|
||||||
handler.send_response(200)
|
handler.send_response(200)
|
||||||
handler.send_header('Content-type', 'text/html')
|
handler.send_header('Content-type', 'text/html')
|
||||||
handler.end_headers()
|
handler.end_headers()
|
||||||
handler.wfile.write(response.encode('utf-8'))
|
handler.wfile.write(html_response.encode('utf-8'))
|
||||||
return
|
else:
|
||||||
|
# 404 response for unknown paths
|
||||||
# handle unknown paths
|
handler.send_response(404)
|
||||||
handler.send_response(404)
|
handler.send_header('Content-type', 'text/html')
|
||||||
handler.send_header('Content-type', 'text/html')
|
handler.end_headers()
|
||||||
handler.end_headers()
|
handler.wfile.write(b"<h1>404 Not Found</h1>")
|
||||||
handler.wfile.write(b"""
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>404 Not Found</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>404 Not Found</h1>
|
|
||||||
<p>The requested resource was not found on this server.</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
""")
|
|
||||||
|
|
||||||
class Tripsit(callbacks.Plugin):
|
class Tripsit(callbacks.Plugin):
|
||||||
"""Harm-Reduction tools from tripsit's tripbot and the tripsitwiki"""
|
"""Harm-Reduction tools from tripsit's tripbot and the tripsitwiki"""
|
||||||
@ -294,7 +320,102 @@ class Tripsit(callbacks.Plugin):
|
|||||||
This command takes no arguments.
|
This command takes no arguments.
|
||||||
|
|
||||||
Retrieves the number of doses logged for a given nick
|
Retrieves the number of doses logged for a given nick
|
||||||
"""
|
""" def doGet(self, handler, path):
|
||||||
|
if path == '/doses':
|
||||||
|
# Collect all dose logs from self.db
|
||||||
|
dose_logs = []
|
||||||
|
for nick, data in self.plugin.db.items():
|
||||||
|
for dose in data.get('doses', []):
|
||||||
|
dose_logs.append({
|
||||||
|
'nick': nick,
|
||||||
|
'time': dose['time'],
|
||||||
|
'dose': dose['dose'],
|
||||||
|
'drug': dose['drug'],
|
||||||
|
'method': dose['method'],
|
||||||
|
})
|
||||||
|
|
||||||
|
# Create HTML response
|
||||||
|
html_response = """
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Dose Logs</title>
|
||||||
|
<style>
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table, th, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: 8px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
#filter {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 5px;
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Dose Logs</h1>
|
||||||
|
<input type="text" id="filter" placeholder="Search for nicknames, drugs, etc.">
|
||||||
|
<table id="doseTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Nick</th>
|
||||||
|
<th>Time</th>
|
||||||
|
<th>Dose</th>
|
||||||
|
<th>Drug</th>
|
||||||
|
<th>Method</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
"""
|
||||||
|
# Add rows for each dose log
|
||||||
|
for log in dose_logs:
|
||||||
|
html_response += f"""
|
||||||
|
<tr>
|
||||||
|
<td>{log['nick']}</td>
|
||||||
|
<td>{log['time']}</td>
|
||||||
|
<td>{log['dose']}</td>
|
||||||
|
<td>{log['drug']}</td>
|
||||||
|
<td>{log['method']}</td>
|
||||||
|
</tr>
|
||||||
|
"""
|
||||||
|
|
||||||
|
html_response += """
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<script>
|
||||||
|
// Filter table rows based on input
|
||||||
|
document.getElementById('filter').addEventListener('input', function() {
|
||||||
|
const filter = this.value.toLowerCase();
|
||||||
|
const rows = document.querySelectorAll('#doseTable tbody tr');
|
||||||
|
rows.forEach(row => {
|
||||||
|
const text = row.innerText.toLowerCase();
|
||||||
|
row.style.display = text.includes(filter) ? '' : 'none';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Send the HTML response
|
||||||
|
handler.send_response(200)
|
||||||
|
handler.send_header('Content-type', 'text/html')
|
||||||
|
handler.end_headers()
|
||||||
|
handler.wfile.write(html_response.encode('utf-8'))
|
||||||
|
else:
|
||||||
|
# 404 response for unknown paths
|
||||||
|
handler.send_response(404)
|
||||||
|
handler.send_header('Content-type', 'text/html')
|
||||||
|
handler.end_headers()
|
||||||
|
handler.wfile.write(b"<h1>404 Not Found</h1>")
|
||||||
nick = msg.nick
|
nick = msg.nick
|
||||||
if nick in self.db:
|
if nick in self.db:
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user