From ad26c7c4e374f66a978f9946bbb083377f2224a6 Mon Sep 17 00:00:00 2001 From: s-ol Date: Mon, 7 Oct 2019 19:49:16 +0200 Subject: allow server to render with layout --- build/layout.moon | 108 -------------------------------------------------- build/render_all.moon | 71 +++++---------------------------- build/server.moon | 3 +- 3 files changed, 12 insertions(+), 170 deletions(-) delete mode 100644 build/layout.moon (limited to 'build') diff --git a/build/layout.moon b/build/layout.moon deleted file mode 100644 index 61f93cb..0000000 --- a/build/layout.moon +++ /dev/null @@ -1,108 +0,0 @@ -import header, aside, footer, div, svg, script, g, circle, h1, span, b, a, img from require 'mmm.dom' -import navigate_to from (require 'mmm.mmmfs.util') require 'mmm.dom' - -pick = (...) -> - num = select '#', ... - i = math.ceil math.random! * num - select i, ... - -iconlink = (href, src, alt, style) -> a { - class: 'iconlink', - target: '_blank', - rel: 'me', - :href, - img :src, :alt, :style -} - -logo = svg { - class: 'sun' - viewBox: '-0.75 -1 1.5 2' - xmlns: 'http://www.w3.org/2000/svg' - baseProfile: 'full' - version: '1.1' - - g { - transform: 'translate(0 .18)' - - g { class: 'circle out', circle r: '.6', fill: 'none', 'stroke-width': '.12' } - g { class: 'circle in', circle r: '.2', stroke: 'none' } - } -} - -{ - header: header { - div { - h1 { - logo - span { - span 'mmm', class: 'bold' - '​' - '.s‑ol.nu' - } - } - span "fun stuff with code and wires" - -- pick 'fun', 'cool', 'weird', 'interesting', 'new' - -- pick 'stuff', 'things', 'projects', 'experiments', 'news' - -- "with" - -- pick 'mostly code', 'code and wires', 'silicon', 'electronics' - } - aside { - navigate_to '/about', 'about me' - navigate_to '/games', 'games' - navigate_to '/projects', 'other' - a { - href: 'mailto:s%20[removethis]%20[at]%20s-ol.nu' - 'contact' - script " - var l = document.currentScript.parentElement; - l.href = l.href.replace('%20[at]%20', '@'); - l.href = l.href.replace('%20[removethis]', '') + '?subject=Hey there :)'; - " - } - } - } - footer: footer { - span { - 'made with \xe2\x98\xbd by ' - a 's-ol', href: 'https://twitter.com/S0lll0s' - ", #{os.date '%Y'}" - } - div { - class: 'icons', - iconlink 'https://github.com/s-ol', 'https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/github.svg', 'github' - iconlink 'https://merveilles.town/@s_ol', 'https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/mastodon.svg', 'mastodon' - iconlink 'https://twitter.com/S0lll0s', 'https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/twitter.svg', 'twitter' - iconlink 'https://webring.xxiivv.com/#random', 'https://webring.xxiivv.com/icon.black.svg', 'webring', - { height: '1.3em', 'margin-left': '.3em', 'margin-top': '-0.12em' } - } - } - get_meta: => - title = (@get 'title: text/plain') or @gett 'name: alpha' - - l = (str) -> - str = str\gsub '[%s\\n]+$', '' - str\gsub '\\n', ' ' - e = (str) -> string.format '%q', l str - - meta = " - - #{l title} - " - - if page_meta = @get '_meta: mmm/dom' - meta ..= page_meta - else - meta ..= " - - - - - - " - - if desc = @get 'description: text/plain' - meta ..= " - " - - meta -} diff --git a/build/render_all.moon b/build/render_all.moon index 14e4cce..4fe827b 100644 --- a/build/render_all.moon +++ b/build/render_all.moon @@ -10,73 +10,24 @@ add '?/init.server' require 'mmm' import tohtml from require 'mmm.component' import Browser from require 'mmm.mmmfs.browser' -import get_meta, header, footer from require 'build.layout' +import render from require 'mmm.mmmfs.layout' +import SQLStore from require 'mmm.mmmfs.drivers.sql' +import load_tree from require 'build.util' -- usage: --- moon render_all.moon [db.sqlite3] -{ file } = arg +-- moon render_all.moon [db.sqlite3] [startpath] +{ file, startpath } = arg export BROWSER -render = (fileder, output) -> - BROWSER = Browser fileder - - with io.open output, 'w' - \write [[ - - - - - - - - ]] - \write " - #{get_meta fileder} - - - #{header} - - #{assert (tohtml BROWSER), "couldn't render BROWSER"} - - #{footer} - " - \write [[ - - - - - - - - ]] - \write " - - - - " - \close! - - tree = load_tree SQLStore :name +tree = tree\walk startpath if startpath for fileder in coroutine.wrap tree\iterate print "rendering '#{fileder.path}'..." os.execute "mkdir -p 'out/#{fileder.path}'" - render fileder, "out/#{fileder.path}/index.html" + + BROWSER = Browser fileder + with io.open "out/#{fileder.path}/index.html", 'w' + \write render (tohtml BROWSER), fileder + \close! diff --git a/build/server.moon b/build/server.moon index dd491d3..b178636 100644 --- a/build/server.moon +++ b/build/server.moon @@ -82,7 +82,6 @@ class Server path = req\get ':path' path, facet = dir_base path - print "'#{path}', '#{facet}'" facet = if #facet > 0 facet = '' if facet == ':' accept = req\get 'mmm-accept' @@ -95,7 +94,7 @@ class Server res = headers.new! response_type = if status > 299 then 'text/plain' else if facet then facet.type - else 'text/plain' + else 'text/json' res\append ':status', tostring status res\append 'content-type', response_type -- cgit v1.2.3