diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2019-10-07 17:49:16 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2019-10-07 17:49:16 +0000 |
| commit | ad26c7c4e374f66a978f9946bbb083377f2224a6 (patch) | |
| tree | 7bdee1e299cb2a907294b115b577e14ccbee4986 /build | |
| parent | add simple HTTP server (diff) | |
| download | mmm-ad26c7c4e374f66a978f9946bbb083377f2224a6.tar.gz mmm-ad26c7c4e374f66a978f9946bbb083377f2224a6.zip | |
allow server to render with layout
Diffstat (limited to 'build')
| -rw-r--r-- | build/layout.moon | 108 | ||||
| -rw-r--r-- | build/render_all.moon | 71 | ||||
| -rw-r--r-- | build/server.moon | 3 |
3 files changed, 12 insertions, 170 deletions
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 = " - <meta charset=\"UTF-8\"> - <title>#{l title}</title> - " - - if page_meta = @get '_meta: mmm/dom' - meta ..= page_meta - else - meta ..= " - <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> - - <meta property=\"og:title\" content=#{e title} /> - <meta property=\"og:type\" content=\"website\" /> - <meta property=\"og:url\" content=\"https://mmm.s-ol.nu#{@path}/\" /> - <meta property=\"og:site_name\" content=\"mmm\" />" - - if desc = @get 'description: text/plain' - meta ..= " - <meta property=\"og:description\" content=#{e desc} />" - - 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 [[ - <!DOCTYPE html> - <html> - <head> - <link rel="stylesheet" type="text/css" href="/main.css" /> - <!-- - <link rel="preload" as="fetch" href="/mmm/dom/init.lua" /> - <link rel="preload" as="fetch" href="/mmm/component/init.lua" /> - <link rel="preload" as="fetch" href="/mmm/mmmfs/init.lua" /> - <link rel="preload" as="fetch" href="/mmm/mmmfs/fileder.lua" /> - <link rel="preload" as="fetch" href="/mmm/mmmfs/browser.lua" /> - --> - - <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,400" rel="stylesheet"> - ]] - \write " - #{get_meta fileder} - </head> - <body> - #{header} - - #{assert (tohtml BROWSER), "couldn't render BROWSER"} - - #{footer} - " - \write [[ - <script src="/highlight.pack.js"></script> - <script src="//cdnjs.cloudflare.com/ajax/libs/marked/0.5.1/marked.min.js"></script> - <script src="//cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.6/svg.min.js"></script> - <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script> - <script src="/fengari-web.js"></script> - <script type="application/lua" src="/mmm.bundle.lua"></script> - <script type="application/lua">require 'mmm'</script> - ]] - \write " - <script type=\"application/lua\"> - on_load = on_load or {} - table.insert(on_load, function() - local path = #{string.format '%q', path} - local browser = require 'mmm.mmmfs.browser' - local root = dofile '/$bundle.lua' - root:mount('', true) - - BROWSER = browser.Browser(root, path, true) - end) - </script> - </body> - </html> - " - \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 |
