Get the nethack page looking good again

Update all the CSS classes and fix the layout so it looks good in the new theme.
Convert a bunch of CSS classes to BEM style.
This commit is contained in:
Eryn Wells 2024-10-27 09:56:46 -06:00
parent 2b613de769
commit d5296995de
10 changed files with 206 additions and 45 deletions

100
assets/css/099_nethack.css Normal file
View file

@ -0,0 +1,100 @@
/******************
* NETHACK LOGFILE
******************/
#dungeon-background {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: -1;
filter: brightness(0.3);
}
.nethack-logfile {
margin-inline-start: 0;
padding-inline-start: 0;
.nethack-logentry {
align-items: first baseline;
display: grid;
grid-template-columns: min-content min-content auto min-content;
grid-template-areas:
"list-marker entry-marker entry-date entry-character-descriptor"
". . entry-description entry-description"
". . entry-stats entry-stats";
gap: var(--space-xs);
margin-inline-start: 0;
}
}
.nethack-logentry {
&:not(:last-child) {
margin-block-end: var(--space-l);
}
&::before {
grid-area: list-marker;
}
.nethack-logentry__marker {
grid-area: entry-marker;
}
.nethack-logentry__date {
grid-area: entry-date;
line-height: 1;
margin: 0;
padding: 0;
}
.nethack-logentry__character-descriptor {
font-family: var(--font-family-monospace);
font-size: var(--text-s);
grid-area: entry-character-descriptor;
line-height: 1;
white-space: nowrap;
}
.nethack-logentry__description {
grid-area: entry-description;
margin: 0;
}
.nethack-logentry__stats {
border: 0;
color: var(--text-color-secondary);
font-family: var(--font-family-monospace);
font-size: var(--text-s);
grid-area: entry-stats;
margin-block: 0;
width: 100%;
-webkit-border-horizontal-spacing: 0;
-webkit-border-vertical-spacing: 0;
}
.nethack-logentry__stats {
padding: 0;
text-transform: uppercase;
vertical-align: bottom;
white-space: nowrap;
thead {
font-weight: bolder;
}
.nethack-logentry__score,
.nethack-logentry__hp,
.nethack-logentry__level {
width: 16rem;
text-align: right;
}
}
}

View file

@ -402,11 +402,11 @@ class TunnelGenerator {
}
/**
* Dig a corridor from fromPoint to toPoint, assuming that both points are adjacent to valid locations for doors on
* the map.
* Dig a corridor from fromPoint to toPoint, assuming that both points are
* adjacent to valid locations for doors on the map.
*
* This is as close a copy of dig_corridor in the Nethack source as I could muster. It's not exactly pretty. This
* method assumed
* This is as close a copy of dig_corridor in the Nethack source as I could
* muster. It's not exactly pretty. This method assumed
*/
#digCorridorFromPointToPoint(p, fromPoint, toPoint) {
const MAX_STEPS = 500;
@ -711,6 +711,8 @@ new p5(p => {
p.setup = () => {
const container = document.querySelector('#dungeon-background');
console.assert(container, "Missing #dungeon-background element");
canvasWidth = parseFloat(getComputedStyle(container).width);
canvasHeight = parseFloat(getComputedStyle(container).height);
@ -731,9 +733,11 @@ new p5(p => {
grid = new Grid(gridBounds.size.width, gridBounds.size.height);
grid.generate(p, NRandomRoomsGenerator, TunnelGenerator);
}
};
p.draw = () => {
console.log("Drawing");
p.textSize(CELL_HEIGHT);
for (let y = 0; y < grid.height; y++) {

View file

@ -1,7 +1,6 @@
---
title: "Nethack"
title: Nethack
description: In which I play way too much of a silly command line Roguelike game.
date: 2022-04-13T08:43:46-07:00
type: nethack
---

View file

@ -4,3 +4,10 @@ blackLivesMatter:
other: "Black lives matter."
getVaccinated:
other: "Get vaccinated."
nethackBegan: Began
nethackScore: Score
nethackDungeonLevel: Dungeon Level
nethackCharacterLevel: Character Level
nethackHP: HP

View file

@ -0,0 +1,28 @@
{{ define "main" }}
<main class="main--single main--nethack">
{{ if .Title -}}
<header class="page-header">
{{ partial "page_header.html" (dict "page" .) }}
</header>
{{ end }}
{{- .Content -}}
<footer class="page-footer">
{{ partial "page/footer.html" . }}
</footer>
</main>
<div id="dungeon-background"></div>
{{ end }}
{{ define "after_js" }}
{{/* TODO: Get the dungon script working again. :( */}}
{{/*
{{ with resources.Get "scripts/lib/p5-1.5.0.js" }}
<script defer src="{{ .Permalink }}"></script>
{{ end }}
{{ with resources.Get "scripts/nethack/dungeon.js" }}
<script defer src="{{ .Permalink }}"></script>
{{ end }}
*/}}
{{ end }}

View file

@ -1,6 +1,6 @@
{{ $nethack_data := $.Site.Data.nethack.logfile }}
{{ $nethackData := $.Site.Data.nethack.logfile }}
{{ $logfile := slice }}
{{ range $nethack_data }}
{{ range $nethackData }}
{{ $logfile = $logfile | append .logfile }}
{{ end }}
{{ return $logfile }}

View file

@ -1,10 +1,12 @@
{{- $cause := .death.cause -}}
{{- $didAscend := eq $cause "ascended" -}}
{{- $level := (cond (gt .dungeon.level.n 0) (.dungeon.level.descriptive | lower) .dungeon.level.descriptive) -}}
<div>{{- if $didAscend -}}✨{{- else -}}🪦{{- end -}}</div>
<h4 class="date">{{ time.Format "January 2, 2006" .end_date }}</h4>
<div class="character-descriptor">{{ .character.abbreviated }}</div>
<p>
<div class="nethack-logentry__marker">{{- if $didAscend -}}✨{{- else -}}🪦{{- end -}}</div>
<h4 class="nethack-logentry__date">{{ time.Format "January 2, 2006" .end_date }}</h4>
{{ with .character.descriptor -}}
<p class="nethack-logentry__character-descriptor">{{ . }}</p>
{{ end }}
<p class="nethack-logentry__description">
{{- $name := .character.name -}}
{{- $descriptiveAlignment := .character.alignment.descriptive | lower -}}
{{- $descriptiveRace := .character.race.descriptive | lower -}}
@ -19,30 +21,52 @@
She was {{ .death.cause }}.
{{- end -}}
</p>
<table class="stats">
<table class="nethack-logentry__stats">
<thead>
<tr>
{{- $startDate := time.Format "January, 02 2006" .start_date -}}
{{- $startDatetime := time.Format "2006-01-02" .start_date -}}
<td class="began">Began <time class="nobreak" datetime="{{ $startDatetime }}">{{ $startDate }}</time></td>
<td class="score">{{ .score | lang.FormatNumber 0 }} points</td>
{{/*
When I first wrote the importer script, I read about the log file
format on the Nethackwiki. It labeled a field as "maximum level",
which I interpreted as maximum character level. Turns out it's
actually maximum *dungeon* level. The script has been updated, but I
won't be able to update all the imported logfiles.
https://nethackwiki.com/wiki/Logfile
*/}}
{{ with .dungeon.max_level }}
<td class="level">{{ .descriptive }}</td>
<td class="nethack-logentry__began">{{ i18n "nethackBegan" }}</td>
<td class="nethack-logentry__score">{{ i18n "nethackScore" }}</td>
<td class="nethack-logentry__level">
{{ if .dungeon.max_level }}
{{ i18n "nethackDungeonLevel" }}
{{ else }}
{{ with .character.max_level }}<td class="level">Level {{ . }}</td>{{ end }}
{{ i18n "nethackCharacterLevel" }}
{{ end }}
<td class="hp">
{{- $hp := float .character.hp.n -}}
{{- $hpMax := .character.hp.max -}}
{{- if gt $hp 0 }}{{ $hp }} / {{ $hpMax }}{{ else }}{{ $hp }}{{ end }} hp
</td>
</td>
<td class="nethack-logentry__hp">{{ i18n "nethackHP" }}</td>
</tr>
</thead>
<tbody>
<tr>
<td class="nethack-logentry__began">
{{- $startDate := time.Format "2006-01-02" .start_date -}}
{{- $startDatetime := time.Format "2006-01-02" .start_date -}}
<time class="nobreak" datetime="{{ $startDatetime }}">{{ $startDate }}</time>
</td>
<td class="nethack-logentry__score">
{{- .score | lang.FormatNumber 0 -}}
</td>
{{/*
When I first wrote the importer script, I read about the log file
format on the Nethackwiki. It labeled a field as "maximum level",
which I interpreted as maximum character level. Turns out it's
actually maximum *dungeon* level. The script has been updated, but I
won't be able to update all the imported logfiles.
https://nethackwiki.com/wiki/Logfile
*/}}
{{ with .dungeon.max_level -}}
<td class="nethack-logentry__level">{{ .n }}</td>
{{ else -}}
{{ with .character.max_level -}}
<td class="nethack-logentry__level">{{ . }}</td>
{{ end }}
{{ end }}
<td class="nethack-logentry__hp">
{{- $hp := float .character.hp.n -}}
{{- $hpMax := .character.hp.max -}}
{{- if gt $hp 0 }}{{ $hp }} / {{ $hpMax }}{{ else }}{{ $hp }}{{ end }}
</td>
</tr>
</tbody>
</table>

View file

@ -3,7 +3,7 @@
{{ range $nethack_data }}
{{ $logfile = $logfile | append .logfile }}
{{ end }}
<ol class="logfile">
<ol class="nethack-logfile">
<li>
{{ partial "nethack/logentry.html" (index (sort $logfile "score" "desc") 0) }}
</li>

View file

@ -1,10 +1,9 @@
{{- $logfile := partial "nethack/log.html" . -}}
<ol class="logfile">
{{ range sort $logfile "end_date" "desc" }}
{{ if ne .death.cause "quit" }}
<li>
{{ partial "nethack/logentry.html" .}}
</li>
{{ end }}
{{- $logfile = where $logfile "death.cause" "ne" "quit" -}}
<ol class="nethack-logfile">
{{ range sort $logfile "end_date" "desc" -}}
<li class="nethack-logfile__entry">
{{ partial "nethack/logentry.html" .}}
</li>
{{ end }}
</ol>

View file

@ -1,7 +1,7 @@
{{- $n := .Get 0 -}}
{{- $logfile := partial "nethack/log.html" . -}}
<ol class="logfile topn">
<ol class="nethack-logfile nethack-topn">
{{ range first $n (sort $logfile "score" "desc") -}}
<li>{{ partial "nethack/logentry.html" . }}</li>
<li class="nethack-logentry">{{ partial "nethack/logentry.html" . }}</li>
{{- end }}
</ol>