Bump to Gleam 1.1.0
This commit is contained in:
parent
b7a910a2f6
commit
e01ddec336
28 changed files with 113 additions and 112 deletions
|
@ -1,2 +1,2 @@
|
|||
gleam 1.0.0
|
||||
gleam 1.1.0
|
||||
nodejs 20.10.0
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
name = "gloss"
|
||||
version = "1.0.0"
|
||||
target = "javascript"
|
||||
gleam = "~> 1.1"
|
||||
|
||||
# Fill out these fields if you intend to generate HTML documentation or publish
|
||||
# your project to the Hex package manager.
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
//// parts of gloss, using the configuration to control what is done.
|
||||
|
||||
import gleam/result
|
||||
import gloss/rendering/database as render_database
|
||||
import gloss/compiler.{type CompileDatabase}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/compiler.{type CompileDatabase}
|
||||
import gloss/rendering/database as render_database
|
||||
|
||||
/// Something failed when building the blog.
|
||||
pub type BuildError {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
//// Compiling means turning post and page content into HTML. By default this
|
||||
//// content is Markdown that is compiled with Marked.js.
|
||||
|
||||
import gleam/option
|
||||
import gleam/dict.{type Dict}
|
||||
import gleam/list
|
||||
import gloss/utils/ordered_tree
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/models/page.{type Page}
|
||||
import gleam/option
|
||||
import gloss/models/database.{type Database, type PostID}
|
||||
import gloss/models/page.{type Page}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/utils/marked
|
||||
import gloss/utils/ordered_tree
|
||||
|
||||
/// Compiled post content: strings that contain HTML.
|
||||
pub type PostContent {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
//// The configuration is the main way to customize Gloss's behaviour.
|
||||
|
||||
import gleam/option
|
||||
import gloss/compiler.{type CompileDatabase, type Compiler}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/paths.{type PathConfiguration}
|
||||
import gloss/rendering/database.{type RenderDatabase} as _
|
||||
import gloss/rendering/views.{
|
||||
type BaseView, type FeedView, type ListPageView, type MetaView, type PageView,
|
||||
type SinglePostView,
|
||||
}
|
||||
import gloss/compiler.{type CompileDatabase, type Compiler}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/rendering/database.{type RenderDatabase} as _
|
||||
|
||||
/// An error occurred when writing the rendered results into files.
|
||||
pub type WriteError {
|
||||
|
|
|
@ -2,18 +2,18 @@
|
|||
//// blog quickly.
|
||||
|
||||
import gleam/uri
|
||||
import gloss/config.{type Configuration, Compiling, Configuration, Rendering}
|
||||
import gloss/rendering/views/single_post
|
||||
import gloss/rendering/views/base
|
||||
import gloss/rendering/views/list_page
|
||||
import gloss/rendering/views/page
|
||||
import gloss/rendering/views/feed
|
||||
import gloss/rendering/views/meta
|
||||
import gloss/renderer
|
||||
import gloss/paths
|
||||
import gloss/parser
|
||||
import gloss/writer
|
||||
import gloss/compiler
|
||||
import gloss/config.{type Configuration, Compiling, Configuration, Rendering}
|
||||
import gloss/parser
|
||||
import gloss/paths
|
||||
import gloss/renderer
|
||||
import gloss/rendering/views/base
|
||||
import gloss/rendering/views/feed
|
||||
import gloss/rendering/views/list_page
|
||||
import gloss/rendering/views/meta
|
||||
import gloss/rendering/views/page
|
||||
import gloss/rendering/views/single_post
|
||||
import gloss/writer
|
||||
|
||||
/// View generators that use the Gloss builtin views.
|
||||
const default_views = config.Views(
|
||||
|
|
|
@ -5,9 +5,9 @@ import gleam/dict.{type Dict}
|
|||
import gleam/list
|
||||
import gleam/option.{None, Some}
|
||||
import gleam/order.{type Order}
|
||||
import gloss/models/post.{type Post, type Tag}
|
||||
import gloss/models/page.{type Page}
|
||||
import gloss/models/menu.{type MenuItem}
|
||||
import gloss/models/page.{type Page}
|
||||
import gloss/models/post.{type Post, type Tag}
|
||||
import gloss/utils/date.{type Month}
|
||||
import gloss/utils/ordered_tree.{type OrderedTree}
|
||||
import gloss/utils/uniqid.{type Generator, type UniqID}
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
import gleam/int
|
||||
import gleam/option.{type Option}
|
||||
import gleam/order.{type Order, Eq}
|
||||
import gloss/utils/date.{type Date}
|
||||
import gloss/utils/time.{type Time, Time}
|
||||
import gloss/utils/luxon.{type DateTime}
|
||||
import gloss/models/header.{type Header}
|
||||
import gloss/utils/date.{type Date}
|
||||
import gloss/utils/luxon.{type DateTime}
|
||||
import gloss/utils/time.{type Time, Time}
|
||||
|
||||
pub type PostedAt {
|
||||
/// The post only had date information.
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
//// Parsing reads the input files into the database.
|
||||
|
||||
import gleam/result
|
||||
import gleam/list
|
||||
import gleam/regex
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import simplifile
|
||||
import gloss/config.{type ParseError, ParseError}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/parser/common
|
||||
import gloss/parser/post
|
||||
import gloss/parser/page
|
||||
import gloss/parser/menu
|
||||
import gloss/config.{type ParseError, ParseError}
|
||||
import gloss/parser/page
|
||||
import gloss/parser/post
|
||||
import simplifile
|
||||
|
||||
/// The default path where input files are read from.
|
||||
const default_data_path = "./data"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import gleam/bool
|
||||
import gleam/list
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gleam/list
|
||||
import gleam/bool
|
||||
import gloss/models/header.{type Header}
|
||||
|
||||
/// The default file extension for source files.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import gleam/list
|
||||
import gleam/string
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gloss/models/menu.{MenuItem}
|
||||
|
||||
/// Parse the content and return menu items.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import gleam/string
|
||||
import gleam/result
|
||||
import gleam/list
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gloss/models/page.{type Page, Page}
|
||||
import gloss/parser/common.{type ParseError, EmptyFile, HeaderMissing, try}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import gleam/string
|
||||
import gleam/result
|
||||
import gleam/bool
|
||||
import gleam/int
|
||||
import gleam/list
|
||||
import gleam/option
|
||||
import gleam/int
|
||||
import gleam/bool
|
||||
import gleam/regex
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gloss/models/header.{type Header}
|
||||
import gloss/models/post.{type Post, type PostedAt, type Tag, Post}
|
||||
import gloss/utils/date.{Date}
|
||||
import gloss/utils/time.{type Time, Time}
|
||||
import gloss/utils/ints/day
|
||||
import gloss/utils/luxon
|
||||
import gloss/parser/common.{
|
||||
type ParseError, DayNotInt, EmptyFile, HeaderMissing, InvalidDate,
|
||||
MalformedFilename, MalformedHeader, MonthNotInt, YearNotInt, try,
|
||||
}
|
||||
import gloss/utils/date.{Date}
|
||||
import gloss/utils/ints/day
|
||||
import gloss/utils/luxon
|
||||
import gloss/utils/time.{type Time, Time}
|
||||
|
||||
/// Post filenames must match this regex.
|
||||
pub const filename_regex = "^\\d{4}-\\d\\d-\\d\\d-.*\\.md$"
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
//// formed.
|
||||
|
||||
import gleam/int
|
||||
import gleam/string
|
||||
import gleam/list
|
||||
import gloss/models/post.{type Post}
|
||||
import gleam/string
|
||||
import gloss/models/page.{type Page}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/utils/date.{type Month}
|
||||
import gloss/utils/ints/day
|
||||
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
//// The renderer's job is to render compiled content into HTML. By default this
|
||||
//// means Lustre elements that can be later stringified.
|
||||
|
||||
import gleam/list
|
||||
import gleam/dict.{type Dict}
|
||||
import gleam/result
|
||||
import gleam/int
|
||||
import lustre/element.{type Element}
|
||||
import gloss/rendering/views.{
|
||||
type BaseView, type FeedView, type ListPageView, type MetaView, type PageView,
|
||||
type SinglePostView, ListInfo,
|
||||
import gleam/list
|
||||
import gleam/result
|
||||
import gloss/compiler.{
|
||||
type CompileDatabase, type CompiledPage, type CompiledPost,
|
||||
}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database, type PostID, type PostWithID}
|
||||
import gloss/rendering/database.{
|
||||
type RenderDatabase, type RenderedSinglePost, ListPage, RenderDatabase,
|
||||
RenderedPage, RenderedSinglePost,
|
||||
} as _
|
||||
import gloss/compiler.{
|
||||
type CompileDatabase, type CompiledPage, type CompiledPost,
|
||||
import gloss/rendering/views.{
|
||||
type BaseView, type FeedView, type ListPageView, type MetaView, type PageView,
|
||||
type SinglePostView, ListInfo,
|
||||
}
|
||||
import gloss/models/database.{type Database, type PostID, type PostWithID}
|
||||
import gloss/utils/ordered_tree
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/utils/date
|
||||
import gloss/utils/ordered_tree
|
||||
import lustre/element.{type Element}
|
||||
|
||||
/// Helper struct to pass all the used views to the rendering functions.
|
||||
pub type Views {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
//// The render database stores the rendered posts and pages.
|
||||
|
||||
import gleam/dict.{type Dict}
|
||||
import lustre/element.{type Element}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/models/page.{type Page}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/utils/date.{type Month}
|
||||
import lustre/element.{type Element}
|
||||
|
||||
/// A post and its rendered content.
|
||||
pub type RenderedSinglePost {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import lustre/element.{type Element}
|
||||
import gloss/compiler.{type CompiledPage, type CompiledPost}
|
||||
import gloss/models/post
|
||||
import gloss/models/page
|
||||
import gloss/models/post
|
||||
import lustre/element.{type Element}
|
||||
|
||||
/// The base view renders the base page layout.
|
||||
///
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import gleam/dict
|
||||
import gleam/list
|
||||
import gleam/int
|
||||
import gleam/float
|
||||
import gleam/string
|
||||
import gleam/int
|
||||
import gleam/list
|
||||
import gleam/option
|
||||
import gleam/string
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/menu.{type MenuItem}
|
||||
import gloss/utils/date
|
||||
import gloss/utils/ordered_tree
|
||||
import lustre/attribute.{attribute, href, id, name, rel, role, style, type_}
|
||||
import lustre/element.{type Element, text}
|
||||
import lustre/element/html.{
|
||||
a, body, footer, h1, head, header, html, li, link, main, meta, nav, p, section,
|
||||
title, ul,
|
||||
}
|
||||
import lustre/attribute.{attribute, href, id, name, rel, role, style, type_}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/menu.{type MenuItem}
|
||||
import gloss/utils/ordered_tree
|
||||
import gloss/utils/date
|
||||
import gloss/config.{type Configuration}
|
||||
|
||||
const tag_min_size = 0.5
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import gleam/list
|
||||
import gleam/option
|
||||
import lustre/element
|
||||
import gloss/compiler.{type CompiledPost}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/post
|
||||
import gloss/utils/luxon
|
||||
import lustre/attribute.{attribute}
|
||||
import lustre/element
|
||||
import lustre/ssg/atom.{
|
||||
author, content, email, entry, feed, generator, id, link, name, rights,
|
||||
summary, title, updated, uri,
|
||||
}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/post
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/compiler.{type CompiledPost}
|
||||
import gloss/utils/luxon
|
||||
|
||||
pub fn generate(_db: Database, config: Configuration) {
|
||||
fn(posts: List(CompiledPost)) {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import gleam/list
|
||||
import lustre/element
|
||||
import lustre/element/html.{footer, nav}
|
||||
import lustre/attribute.{attribute, class}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/rendering/views.{type ListInfo}
|
||||
import gloss/rendering/views/nav
|
||||
import gloss/config.{type Configuration}
|
||||
import lustre/attribute.{attribute, class}
|
||||
import lustre/element
|
||||
import lustre/element/html.{footer, nav}
|
||||
|
||||
pub fn generate(db: Database, config: Configuration) {
|
||||
let single_post_renderer = config.rendering.views.single_post_list(db, config)
|
||||
|
|
|
@ -2,13 +2,13 @@ import gleam/dict
|
|||
import gleam/list
|
||||
import gleam/option
|
||||
import gleam/result
|
||||
import lustre/element/html
|
||||
import lustre/attribute
|
||||
import gloss/rendering/views.{type PageType, Other, Page, Post}
|
||||
import gloss/models/post
|
||||
import gloss/models/page
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/page
|
||||
import gloss/models/post
|
||||
import gloss/rendering/views.{type PageType, Other, Page, Post}
|
||||
import lustre/attribute
|
||||
import lustre/element/html
|
||||
|
||||
pub fn generate(_db: Database, config: Configuration) {
|
||||
fn(page_type: PageType) {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import gleam/list
|
||||
import gleam/int
|
||||
import lustre/element/html.{a, li, span, ul}
|
||||
import lustre/element.{text}
|
||||
import lustre/attribute.{attribute, href}
|
||||
import gloss/rendering/views.{type ListInfo}
|
||||
import gleam/list
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/rendering/views.{type ListInfo}
|
||||
import lustre/attribute.{attribute, href}
|
||||
import lustre/element.{text}
|
||||
import lustre/element/html.{a, li, span, ul}
|
||||
|
||||
pub fn view(list_info: ListInfo, root_path: String, config: Configuration) {
|
||||
let page_range = list.range(1, list_info.total_pages)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import lustre/element/html.{article, div, h2, header}
|
||||
import lustre/element.{text}
|
||||
import lustre/attribute.{attribute, class}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/compiler.{type CompiledPage}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import lustre/attribute.{attribute, class}
|
||||
import lustre/element.{text}
|
||||
import lustre/element/html.{article, div, h2, header}
|
||||
|
||||
pub fn generate(db: Database, config: Configuration) {
|
||||
view(_, db, config)
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
import gleam/option
|
||||
import gleam/list
|
||||
import gleam/option
|
||||
import gloss/compiler.{type CompiledPost}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/utils/date
|
||||
import gloss/utils/luxon
|
||||
import gloss/utils/time
|
||||
import lustre/attribute.{attribute, class, href}
|
||||
import lustre/element.{type Element, text}
|
||||
import lustre/element/html.{
|
||||
a, article, div, footer, h2, header, li, nav, p, time, ul,
|
||||
}
|
||||
import lustre/element.{type Element, text}
|
||||
import lustre/attribute.{attribute, class, href}
|
||||
import gloss/models/database.{type Database}
|
||||
import gloss/models/post.{type Post}
|
||||
import gloss/compiler.{type CompiledPost}
|
||||
import gloss/config.{type Configuration}
|
||||
import gloss/utils/date
|
||||
import gloss/utils/time
|
||||
import gloss/utils/luxon
|
||||
|
||||
/// Generate a view that renders a full post.
|
||||
pub fn full_view(db: Database, config: Configuration) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import gleam/bool
|
||||
import gleam/order.{type Order, Eq}
|
||||
import gleam/int
|
||||
import gleam/order.{type Order, Eq}
|
||||
import gleam/string
|
||||
import gloss/utils/ints/day.{type Day}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import gleam/order.{type Order, Eq}
|
||||
import gleam/int
|
||||
import gleam/order.{type Order, Eq}
|
||||
import gleam/string
|
||||
import gloss/utils/ints/hour.{type Hour}
|
||||
import gloss/utils/ints/minute.{type Minute}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
//// The writer takes rendered content and writes it into the filesystem.
|
||||
|
||||
import gleam/list
|
||||
import gleam/dict
|
||||
import gleam/list
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gloss/config.{type Configuration, WriteError}
|
||||
import gloss/rendering/database.{type RenderDatabase} as _
|
||||
import gloss/utils/priv
|
||||
import lustre/element
|
||||
import lustre/ssg
|
||||
import lustre/ssg/xml
|
||||
import lustre/element
|
||||
import gloss/rendering/database.{type RenderDatabase} as _
|
||||
import gloss/config.{type Configuration, WriteError}
|
||||
import gloss/utils/priv
|
||||
|
||||
/// Write the rendered content into the filesystem using lustre_ssg.
|
||||
pub fn write(db: RenderDatabase, config: Configuration) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
//// Bindings for Atom feed elements.
|
||||
|
||||
import lustre/element.{type Element, advanced, element, namespaced, text}
|
||||
import lustre/attribute.{attribute}
|
||||
import lustre/element.{type Element, advanced, element, namespaced, text}
|
||||
|
||||
pub fn feed(children: List(Element(a))) {
|
||||
element("feed", [attribute("xmlns", "http://www.w3.org/2005/Atom")], children)
|
||||
|
|
Loading…
Reference in a new issue