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()
|
|> 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 header_parts = string.split(header, header_separator)
|
||||||
let parts_amount = list.length(header_parts)
|
let parts_amount = list.length(header_parts)
|
||||||
|
|
||||||
|
|
|
@ -31,14 +31,6 @@ type FilenameMeta {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(filename: String, contents: String) -> Result(Post, ParseError) {
|
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) {
|
let filename = case string.ends_with(filename, filename_postfix) {
|
||||||
True ->
|
True ->
|
||||||
string.slice(
|
string.slice(
|
||||||
|
@ -50,9 +42,23 @@ pub fn parse(filename: String, contents: String) -> Result(Post, ParseError) {
|
||||||
}
|
}
|
||||||
use meta <- result.try(parse_filename_meta(filename))
|
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) =
|
let #(headers, body) =
|
||||||
list.split_while(rest, fn(line) { !string.is_empty(line) })
|
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)
|
let tags = parse_tags(tags)
|
||||||
use headers <- result.try(common.parse_headers(headers))
|
use headers <- result.try(common.parse_headers(headers))
|
||||||
let body = string.join(body, "\n")
|
let body = string.join(body, "\n")
|
||||||
|
@ -134,9 +140,15 @@ fn parse_order_slug(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_tags(tags: String) -> List(Tag) {
|
fn parse_tags(tags: String) -> List(Tag) {
|
||||||
tags
|
let tags =
|
||||||
|> string.split(tag_separator)
|
tags
|
||||||
|> list.map(string.trim)
|
|> string.split(tag_separator)
|
||||||
|
|> list.map(string.trim)
|
||||||
|
|
||||||
|
case tags {
|
||||||
|
[""] -> []
|
||||||
|
other -> other
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_short_content(body: String) -> option.Option(String) {
|
fn parse_short_content(body: String) -> option.Option(String) {
|
||||||
|
|
|
@ -88,8 +88,16 @@ fn view(
|
||||||
]),
|
]),
|
||||||
main([], [inner]),
|
main([], [inner]),
|
||||||
section([id("sidebar")], [
|
section([id("sidebar")], [
|
||||||
nav([id("tags")], [pre_rendered.tags]),
|
case dict.size(database.tags(db)) {
|
||||||
nav([id("archives")], [pre_rendered.archives]),
|
0 -> element.none()
|
||||||
|
_ ->
|
||||||
|
nav([id("tags"), attribute("aria-label", "Tags")], [
|
||||||
|
pre_rendered.tags,
|
||||||
|
])
|
||||||
|
},
|
||||||
|
nav([id("archives"), attribute("aria-label", "Archives")], [
|
||||||
|
pre_rendered.archives,
|
||||||
|
]),
|
||||||
]),
|
]),
|
||||||
footer([], [
|
footer([], [
|
||||||
p([], [
|
p([], [
|
||||||
|
|
Loading…
Reference in a new issue