Software /
code /
prosody-modules
Changeset
4182:1890115b2773
mod_http_muc_log: Move template into a directory to ease packaging
There's no LuaRocks directive like `copy_directories` for individual
files, short of writing a whole custom installation method.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 08 Oct 2020 16:39:19 +0200 |
parents | 4181:fcc6b92869d4 |
children | 4183:ad9ce6750880 |
files | mod_http_muc_log/README.markdown mod_http_muc_log/http_muc_log.html mod_http_muc_log/mod_http_muc_log.lua mod_http_muc_log/res/http_muc_log.html |
diffstat | 4 files changed, 154 insertions(+), 150 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_http_muc_log/README.markdown Thu Oct 08 13:49:08 2020 +0200 +++ b/mod_http_muc_log/README.markdown Thu Oct 08 16:39:19 2020 +0200 @@ -2,6 +2,10 @@ labels: - 'Stage-Beta' summary: Provides a web interface to stored chatroom logs +rockspec: + build: + copy_directories: + - res ... Introduction
--- a/mod_http_muc_log/http_muc_log.html Thu Oct 08 13:49:08 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> -<meta charset="utf-8"> -<meta name="viewport" content="width=device-width, initial-scale=1"> -{date&<meta name="dcterms.date" content="{date}">} -<title>{title?{room.name?{jid_node}}{date& - {date}}}</title> -<style> -:link,:visited{color:#3465a4;text-decoration:none;} -:link:hover,:visited:hover{color:#6197df;} -body{background-color:#eeeeec;margin:1ex 0;padding-bottom:3em;font-family:Arial,Helvetica,sans-serif;} -ul,ol{padding:0;} -li{list-style:none;} -hr{visibility:hidden;clear:both;} -br{clear:both;} -header,footer{margin:1ex 1em;} -footer{font-size:smaller;color:#babdb6;} -nav{font-size:large;margin:1ex 1ex;clear:both;line-height:1.5em;} -footer nav .up{display:none;} -@media screen and (min-width: 460px) { -nav {font-size:x-large;margin:1ex 1em;} -} -nav a{padding: 1ex;} -nav .up{font-size:smaller;display:block;clear:both;} -nav .up::before{content:"↑ ";} -nav .prev{float:left;} -nav .next{float:right;} -nav .next::after{content:" →";} -nav .prev::before{content:"← ";} -nav .last::after{content:" ⇥";} -nav :empty::after,nav :empty::before{content:""} -table{display:inline-block; margin:1ex 1em;vertical-align:top;} -th{font-size:x-small} -td{text-align:right;color:#bababa} -td > a, td > span{padding:0.4em} -.content{background-color:white;padding:1em;list-style-position:inside;} -.time{float:right;font-size:small;opacity:0.2;} -li:hover .time{opacity:1;} -.description{font-size:smaller;} -.body{white-space:pre-line;} -.body::before,.body::after{content:"";} -.presence .verb{font-style:normal;color:#30c030;} -.unavailable .verb{color:#c03030;} -.button{display:inline-block} -.button>a{color:white;background-color:orange;border-radius:4px} -form{text-align:right} -@media (prefers-color-scheme: dark) { -html{color:#eee} -body{background-color:#161616} -.content{background-color:#1c1c1c} -footer{color:#444} -td{color:#444} -.button>a{background-color:#282828} -} -</style> -</head> -<body> -<header> -<h1 {lang&lang="{lang}"} title="xmpp:{jid?}">{title?{room.name?{jid_node}}{date& - {date}}}</h1> -<nav> -<ul> -{jid_node& -<li class="button"><a href="xmpp:{jid?}?join">Join using a client</a></li> -} -{room.webchat_url& -<li class="button"><a href="{room.webchat_url}">Join via web</a></li> -} -{links# -<li><a class="{item.rel?}" href="{item.href}{hide_presence&?p=h}" rel="{item.rel?}">{item.text}</a></li>} -</ul> -</nav> -</header> -<hr> -<main {lang&lang="{lang}"} class="content"> -<nav> -<dl class="room-list"> -{rooms# -<dt {item.lang&lang="{item.lang}"} class="name"><a href="{item.href}{hide_presence&?p=h}">{item.name}</a></dt> -<dd {item.lang&lang="{item.lang}"} class="description">{item.description?}</dd>} -</dl> -{dates|calendarize# -<h2 id="{item.year}">{item.year}</h2> -{item.months# -<table id="{item.month}-{item.year}"> -<caption>{item.month}</caption> -<thead><tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr></thead> -<tbody>{item.weeks# -<tr>{item.days#<td>{item.href&<a href="{item.href}{hide_presence&?p=h}">}<span>{item.day? }</span>{item.href&</a>}</td>}</tr>} -</tbody> -</table> -} -} -</nav> - -<div> -{presence_available&<form> -<label> -<input name="p" value="h" type="checkbox"{hide_presence& checked}> -<span>Hide joins and parts</span> -</label> -<noscript> -<button type="submit">Apply</button> -</noscript> -</form>} -</div> - -<ol class="chat-logs">{lines# -<li {item.lang&lang="{item.lang}"} class="{item.st_name} {item.st_type?}" id="{item.key}"> -<a class="time" href="#{item.key}"><time id="{item.time}" datetime="{item.datetime}">{item.time}</time></a> -<b class="nick">{item.nick}</b> -<em class="verb">{item.verb?}</em> -<q class="body">{item.body?}</q> -{item.oob.url&<figure><a rel="nofollow" href="{item.oob.url?}"><img style="max-height:9em;max-width:16em" alt="{item.oob.desc?}" src="{item.oob.url?}"/></a><figcaption>{item.oob.desc?}</figcaption></figure>} -</li>} -</ol> -</main> -<hr> -<footer> -<nav> -<ul>{links# -<li><a class="{item.rel?}" href="{item.href}{hide_presence&?p=h}" rel="{item.rel?}">{item.text}</a></li>} -</ul> -</nav> -<br> -<div class="powered-by">Prosody</div> -</footer> -<script> -/* -* Local timestamps -*/ -(function () { -var timeTags = document.getElementsByTagName("time"); -var i = 0, tag, date; -while(timeTags[i]) { -tag = timeTags[i++]; -if(date = tag.getAttribute("datetime")) { -date = new Date(date); -tag.textContent = date.toLocaleTimeString(navigator.language); -tag.setAttribute("title", date.toString()); -} -} -document.forms[0].elements.p.addEventListener("change", function() { -document.forms[0].submit(); -}); -})(); -</script> -</body> -</html>
--- a/mod_http_muc_log/mod_http_muc_log.lua Thu Oct 08 13:49:08 2020 +0200 +++ b/mod_http_muc_log/mod_http_muc_log.lua Thu Oct 08 16:39:19 2020 +0200 @@ -34,7 +34,7 @@ local template; do - local template_filename = module:get_option_string(module.name .. "_template", module.name .. ".html"); + local template_filename = module:get_option_string(module.name .. "_template", "res/" .. module.name .. ".html"); local template_file, err = module:load_resource(template_filename); if template_file then template, err = template_file:read("*a"); @@ -418,7 +418,7 @@ jid = room.jid; localpart = localpart; href = get_link(localpart, default_view); - name = room:get_name(); + name = room:get_name() or localpart; lang = room.get_language and room:get_language(); description = room:get_description(); }, i + 1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_http_muc_log/res/http_muc_log.html Thu Oct 08 16:39:19 2020 +0200 @@ -0,0 +1,148 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +{date&<meta name="dcterms.date" content="{date}">} +<title>{title?{room.name?{jid_node}}{date& - {date}}}</title> +<style> +:link,:visited{color:#3465a4;text-decoration:none;} +:link:hover,:visited:hover{color:#6197df;} +body{background-color:#eeeeec;margin:1ex 0;padding-bottom:3em;font-family:Arial,Helvetica,sans-serif;} +ul,ol{padding:0;} +li{list-style:none;} +hr{visibility:hidden;clear:both;} +br{clear:both;} +header,footer{margin:1ex 1em;} +footer{font-size:smaller;color:#babdb6;} +nav{font-size:large;margin:1ex 1ex;clear:both;line-height:1.5em;} +footer nav .up{display:none;} +@media screen and (min-width: 460px) { +nav {font-size:x-large;margin:1ex 1em;} +} +nav a{padding: 1ex;} +nav .up{font-size:smaller;display:block;clear:both;} +nav .up::before{content:"↑ ";} +nav .prev{float:left;} +nav .next{float:right;} +nav .next::after{content:" →";} +nav .prev::before{content:"← ";} +nav .last::after{content:" ⇥";} +nav :empty::after,nav :empty::before{content:""} +table{display:inline-block; margin:1ex 1em;vertical-align:top;} +th{font-size:x-small} +td{text-align:right;color:#bababa} +td > a, td > span{padding:0.4em} +.content{background-color:white;padding:1em;list-style-position:inside;} +.time{float:right;font-size:small;opacity:0.2;} +li:hover .time{opacity:1;} +.description{font-size:smaller;} +.body{white-space:pre-line;} +.body::before,.body::after{content:"";} +.presence .verb{font-style:normal;color:#30c030;} +.unavailable .verb{color:#c03030;} +.button{display:inline-block} +.button>a{color:white;background-color:orange;border-radius:4px} +form{text-align:right} +@media (prefers-color-scheme: dark) { +html{color:#eee} +body{background-color:#161616} +.content{background-color:#1c1c1c} +footer{color:#444} +td{color:#444} +.button>a{background-color:#282828} +} +</style> +</head> +<body> +<header> +<h1 {lang&lang="{lang}"} title="xmpp:{jid?}">{title?{room.name?{jid_node}}{date& - {date}}}</h1> +<nav> +<ul> +{jid_node& +<li class="button"><a href="xmpp:{jid?}?join">Join using a client</a></li> +} +{room.webchat_url& +<li class="button"><a href="{room.webchat_url}">Join via web</a></li> +} +{links# +<li><a class="{item.rel?}" href="{item.href}{hide_presence&?p=h}" rel="{item.rel?}">{item.text}</a></li>} +</ul> +</nav> +</header> +<hr> +<main {lang&lang="{lang}"} class="content"> +<nav> +<dl class="room-list"> +{rooms# +<dt {item.lang&lang="{item.lang}"} class="name"><a href="{item.href}{hide_presence&?p=h}">{item.name}</a></dt> +<dd {item.lang&lang="{item.lang}"} class="description">{item.description?}</dd>} +</dl> +{dates|calendarize# +<h2 id="{item.year}">{item.year}</h2> +{item.months# +<table id="{item.month}-{item.year}"> +<caption>{item.month}</caption> +<thead><tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr></thead> +<tbody>{item.weeks# +<tr>{item.days#<td>{item.href&<a href="{item.href}{hide_presence&?p=h}">}<span>{item.day? }</span>{item.href&</a>}</td>}</tr>} +</tbody> +</table> +} +} +</nav> + +<div> +{presence_available&<form> +<label> +<input name="p" value="h" type="checkbox"{hide_presence& checked}> +<span>Hide joins and parts</span> +</label> +<noscript> +<button type="submit">Apply</button> +</noscript> +</form>} +</div> + +<ol class="chat-logs">{lines# +<li {item.lang&lang="{item.lang}"} class="{item.st_name} {item.st_type?}" id="{item.key}"> +<a class="time" href="#{item.key}"><time id="{item.time}" datetime="{item.datetime}">{item.time}</time></a> +<b class="nick">{item.nick}</b> +<em class="verb">{item.verb?}</em> +<q class="body">{item.body?}</q> +{item.oob.url&<figure><a rel="nofollow" href="{item.oob.url?}"><img style="max-height:9em;max-width:16em" alt="{item.oob.desc?}" src="{item.oob.url?}"/></a><figcaption>{item.oob.desc?}</figcaption></figure>} +</li>} +</ol> +</main> +<hr> +<footer> +<nav> +<ul>{links# +<li><a class="{item.rel?}" href="{item.href}{hide_presence&?p=h}" rel="{item.rel?}">{item.text}</a></li>} +</ul> +</nav> +<br> +<div class="powered-by">Prosody</div> +</footer> +<script> +/* +* Local timestamps +*/ +(function () { +var timeTags = document.getElementsByTagName("time"); +var i = 0, tag, date; +while(timeTags[i]) { +tag = timeTags[i++]; +if(date = tag.getAttribute("datetime")) { +date = new Date(date); +tag.textContent = date.toLocaleTimeString(navigator.language); +tag.setAttribute("title", date.toString()); +} +} +document.forms[0].elements.p.addEventListener("change", function() { +document.forms[0].submit(); +}); +})(); +</script> +</body> +</html>