Handle posts with no tags

This commit is contained in:
Mikko Ahlroth 2024-04-14 00:34:52 +03:00
parent 80b7721f19
commit af38b88458
3 changed files with 34 additions and 14 deletions

View file

@ -27,7 +27,7 @@ pub fn parse_headers(headers: List(String)) -> Result(List(Header), ParseError)
|> result.all()
}
fn parse_header(header: String) -> Result(Header, ParseError) {
pub fn parse_header(header: String) -> Result(Header, ParseError) {
let header_parts = string.split(header, header_separator)
let parts_amount = list.length(header_parts)

View file

@ -31,14 +31,6 @@ type FilenameMeta {
}
pub fn parse(filename: String, contents: String) -> Result(Post, ParseError) {
let lines = string.split(contents, "\n")
use title <- try(list.first(lines), EmptyFile)
use rest <- try(list.rest(lines), HeaderMissing)
use tags <- try(list.first(rest), HeaderMissing)
use rest <- try(list.rest(rest), HeaderMissing)
let filename = case string.ends_with(filename, filename_postfix) {
True ->
string.slice(
@ -50,9 +42,23 @@ pub fn parse(filename: String, contents: String) -> Result(Post, ParseError) {
}
use meta <- result.try(parse_filename_meta(filename))
let lines = string.split(contents, "\n")
use title <- try(list.first(lines), EmptyFile)
use rest <- try(list.rest(lines), HeaderMissing)
let #(headers, body) =
list.split_while(rest, fn(line) { !string.is_empty(line) })
let #(tags, headers) = case headers {
[] -> #("", [])
[tags, ..headers] ->
case common.parse_header(tags) {
Ok(_) -> #("", [tags, ..headers])
Error(_) -> #(tags, headers)
}
}
let tags = parse_tags(tags)
use headers <- result.try(common.parse_headers(headers))
let body = string.join(body, "\n")
@ -134,9 +140,15 @@ fn parse_order_slug(
}
fn parse_tags(tags: String) -> List(Tag) {
tags
|> string.split(tag_separator)
|> list.map(string.trim)
let tags =
tags
|> string.split(tag_separator)
|> list.map(string.trim)
case tags {
[""] -> []
other -> other
}
}
fn parse_short_content(body: String) -> option.Option(String) {

View file

@ -88,8 +88,16 @@ fn view(
]),
main([], [inner]),
section([id("sidebar")], [
nav([id("tags")], [pre_rendered.tags]),
nav([id("archives")], [pre_rendered.archives]),
case dict.size(database.tags(db)) {
0 -> element.none()
_ ->
nav([id("tags"), attribute("aria-label", "Tags")], [
pre_rendered.tags,
])
},
nav([id("archives"), attribute("aria-label", "Archives")], [
pre_rendered.archives,
]),
]),
footer([], [
p([], [