Handle posts with no tags
This commit is contained in:
parent
80b7721f19
commit
af38b88458
3 changed files with 34 additions and 14 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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([], [
|
||||
|
|
Loading…
Reference in a new issue