aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2020-12-09 11:16:29 +0000
committers-ol <s+removethis@s-ol.nu>2020-12-09 11:16:29 +0000
commit2e454714a19c044577b6c24e06f86cf43226fe6a (patch)
tree1e84414723b322610ca1120d4c1d52e8de2fddc0
parentremove BROWSER.root (diff)
downloadmmm-2e454714a19c044577b6c24e06f86cf43226fe6a.tar.gz
mmm-2e454714a19c044577b6c24e06f86cf43226fe6a.zip
remove legacy PLUGINS
-rw-r--r--build/render_all.moon8
-rw-r--r--build/server.moon14
-rw-r--r--mmm/mmmfs/browser.moon3
-rw-r--r--mmm/mmmfs/builtins.moon (renamed from mmm/mmmfs/plugins/init.moon)100
-rw-r--r--mmm/mmmfs/conversion.moon4
-rw-r--r--mmm/mmmfs/init.moon2
-rw-r--r--mmm/mmmfs/layout.moon3
-rw-r--r--mmm/mmmfs/plugins/code.moon86
-rw-r--r--mmm/mmmfs/plugins/gltf.moon6
-rw-r--r--mmm/mmmfs/plugins/markdown.moon5
-rw-r--r--mmm/mmmfs/plugins/mermaid.moon5
-rw-r--r--root/$mmm/plugins/json/converts: text$moonscript -> table.moon54
-rw-r--r--root/$mmm/plugins/static/converts: text$moonscript -> table.moon59
13 files changed, 108 insertions, 241 deletions
diff --git a/build/render_all.moon b/build/render_all.moon
index 5455446..0e2aa78 100644
--- a/build/render_all.moon
+++ b/build/render_all.moon
@@ -11,10 +11,6 @@ add '?/init.server'
-- moon render_all.moon [STORE] [output] [URL-prefix]
{ store, output, prefix } = arg
-require 'mmm'
-import Fileder, dir_base from require 'mmm.mmmfs.fileder'
-import get_store from require 'mmm.mmmfs.stores'
-
export UNSAFE, STATIC
UNSAFE = true
@@ -29,7 +25,9 @@ STATIC = {
root: prefix
}
-require 'mmm.mmmfs'
+require 'mmm'
+import Fileder, dir_base from require 'mmm.mmmfs.fileder'
+import get_store from require 'mmm.mmmfs.stores'
store = get_store store
root = Fileder store
diff --git a/build/server.moon b/build/server.moon
index 5d6864a..d14b0b4 100644
--- a/build/server.moon
+++ b/build/server.moon
@@ -9,6 +9,9 @@ add '?/init.server'
require 'mmm'
+export UNSAFE
+UNSAFE = true
+
import dir_base, Key, Fileder from require 'mmm.mmmfs.fileder'
import convert, MermaidDebugger from require 'mmm.mmmfs.conversion'
import get_store from require 'mmm.mmmfs.stores'
@@ -38,9 +41,8 @@ class Server
if @flags.unsafe == nil
@flags.unsafe = not @flags.rw or opts.host == 'localhost' or opts.host == '127.0.0.1'
- export UNSAFE
+ -- @TODO: fix UNSAFE!
UNSAFE = @flags.unsafe
- require 'mmm.mmmfs'
listen: =>
assert @server\listen!
@@ -56,13 +58,12 @@ class Server
root = Fileder @store
browser = Browser root, fileder.path, facet.name
- render browser\todom!, fileder, noview: true, scripts: PLUGINS.scripts .. "
+ render browser\todom!, fileder, noview: true, scripts: "
<script type=\"text/javascript\" src=\"//cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.6/svg.min.js\"></script>
<script type=\"text/javascript\" src=\"/static/fengari-web/:text/javascript\"></script>
<script type=\"text/lua\" src=\"/static/mmm/:text/lua\"></script>
<script type=\"text/lua\">
require 'mmm'
- require 'mmm.mmmfs'
on_load = on_load or {}
table.insert(on_load, function()
local path = #{string.format '%q', fileder.path}
@@ -83,6 +84,7 @@ class Server
handle_debug: (fileder, facet) =>
debugger = MermaidDebugger!
fileder\find facet, nil, nil, nil, debugger
+ print debugger\render!
convert 'text/mermaid-graph', 'text/html', debugger\render!, fileder, facet.name
handle: (method, path, facet, value) =>
@@ -93,8 +95,8 @@ class Server
when 'GET', 'HEAD'
root = Fileder @store
export BROWSER
- BROWSER = :root, :path
- fileder = root\walk path -- Fileder @store, path
+ BROWSER = :path
+ fileder = root\walk path
if not fileder
-- fileder not found
diff --git a/mmm/mmmfs/browser.moon b/mmm/mmmfs/browser.moon
index e20aae0..0127742 100644
--- a/mmm/mmmfs/browser.moon
+++ b/mmm/mmmfs/browser.moon
@@ -1,4 +1,5 @@
import Key from require 'mmm.mmmfs.fileder'
+import converts from require 'mmm.mmmfs.builtins'
import get_conversions, apply_conversions from require 'mmm.mmmfs.conversion'
import ReactiveVar, get_or_create, text, elements, tohtml from require 'mmm.component'
import pre, div, nav, span, button, a, code, select, option from elements
@@ -28,7 +29,7 @@ casts = {
transform: (href) => span a (code href), :href
}
}
-get_casts = -> combine casts, PLUGINS.converts, PLUGINS.editors
+get_casts = -> combine casts, converts --, PLUGINS.editors
export BROWSER
class Browser
diff --git a/mmm/mmmfs/plugins/init.moon b/mmm/mmmfs/builtins.moon
index 57acbfe..d2c2be5 100644
--- a/mmm/mmmfs/plugins/init.moon
+++ b/mmm/mmmfs/builtins.moon
@@ -52,8 +52,6 @@ string.yieldable_gsub = (str, pat, f) ->
-- * cost - conversion cost
-- * transform - function (val: inp, fileder) => val: out
-- @convert, @from, @to contain the convert and the concrete types
-editors = {}
-scripts = ''
converts = {
{
inp: 'fn -> (.+)',
@@ -269,39 +267,6 @@ if MODE == 'CLIENT' or UNSAFE
transform: loadwith load or loadstring
}
-add_plugin = (module) ->
- ok, plugin = pcall require, "mmm.mmmfs.plugins.#{module}"
-
- if not ok
- print "[Plugins] couldn't load plugins.#{module}: #{plugin}"
- return
-
- print "[Plugins] loaded plugins.#{module}"
-
- if plugin.converts
- for convert in *plugin.converts
- table.insert converts, convert
-
- if plugin.editors
- for editor in *plugin.editors
- table.insert editors, editor
-
- if plugin.scripts
- scripts ..= plugin.scripts
-
-add_plugin 'code'
-add_plugin 'markdown'
-add_plugin 'mermaid'
-add_plugin 'gltf'
-
-if not STATIC
- table.insert converts, {
- inp: '(.+)',
- out: 'URL -> %1',
- cost: 5
- transform: (_, fileder, key) => "#{fileder.path}/#{key.name}:#{@from}"
- }
-
if MODE == 'SERVER'
ok, moon = pcall require, 'moonscript.base'
if ok
@@ -320,18 +285,69 @@ if MODE == 'SERVER'
cost: 2
transform: single moon.to_lua
}
+ else
+ table.insert converts, {
+ inp: 'text/javascript -> (.+)',
+ out: '%1',
+ cost: 1
+ transform: (source) =>
+ f = js.new window.Function, source
+ f!
+ }
+
+json_encode = (obj) ->
+ switch type obj
+ when 'string'
+ string.format '%q', obj
+ when 'table'
+ if obj[1] or not next obj
+ "[#{table.concat [json_encode c for c in *obj], ','}]"
+ else
+ "{#{table.concat ["#{json_encode k}: #{json_encode v}" for k,v in pairs obj], ', '}}"
+ when 'number'
+ tostring obj
+ when 'boolean'
+ tostring obj
+ when 'nil'
+ 'null'
+ else
+ error "unknown type '#{type obj}'"
+
+json_decode = if MODE == 'CLIENT'
+ import Array, Object, JSON from js.global
+
+ fix = (val) ->
+ switch type val
+ when 'userdata'
+ if Array\isArray val
+ [fix x for x in js.of val]
+ else
+ {(fix e[0]), (fix e[1]) for e in js.of Object\entries(val)}
+ else
+ val
+
+ (str) -> fix JSON\parse str
+else if cjson = require 'cjson'
+ cjson.decode
else
+ warn 'only partial JSON support, please install cjson'
+ nil
+
+table.insert converts, {
+ inp: 'table',
+ out: 'text/json',
+ cost: 2
+ transform: (val) => json_encode val
+}
+
+if json_decode
table.insert converts, {
- inp: 'text/javascript -> (.+)',
- out: '%1',
+ inp: 'text/json',
+ out: 'table',
cost: 1
- transform: (source) =>
- f = js.new window.Function, source
- f!
+ transform: (val) => json_decode val
}
{
:converts
- :editors
- :scripts
}
diff --git a/mmm/mmmfs/conversion.moon b/mmm/mmmfs/conversion.moon
index a99c5ba..44688e6 100644
--- a/mmm/mmmfs/conversion.moon
+++ b/mmm/mmmfs/conversion.moon
@@ -1,6 +1,7 @@
refs = require 'mmm.refs'
import Queue from require 'mmm.mmmfs.queue'
import get_plugins from require 'mmm.mmmfs.meta'
+builtins = require 'mmm.mmmfs.builtins'
count = (base, pattern='->') -> select 2, base\gsub pattern, ''
escape_pattern = (inp) ->
@@ -54,8 +55,7 @@ class MermaidDebugger
"graph TD\n" .. @buf
get_converts = (fileder) ->
- assert PLUGINS
- converts = [c for c in *PLUGINS.converts]
+ converts = [c for c in *builtins.converts]
for plugin in get_plugins fileder
for c in *(plugin\get('converts: table') or {})
diff --git a/mmm/mmmfs/init.moon b/mmm/mmmfs/init.moon
deleted file mode 100644
index fdfe1f1..0000000
--- a/mmm/mmmfs/init.moon
+++ /dev/null
@@ -1,2 +0,0 @@
-export ^
-PLUGINS = require 'mmm.mmmfs.plugins'
diff --git a/mmm/mmmfs/layout.moon b/mmm/mmmfs/layout.moon
index 7c9df96..20b5b72 100644
--- a/mmm/mmmfs/layout.moon
+++ b/mmm/mmmfs/layout.moon
@@ -123,7 +123,7 @@ get_scripts = =>
render = (content, fileder, opts={}) ->
opts.meta or= get_header_tags fileder
- opts.scripts or= get_scripts fileder
+ opts.scripts or= ''
unless opts.noview
content = [[
@@ -142,6 +142,7 @@ render = (content, fileder, opts={}) ->
buf ..= [[<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,400,600" />]]
buf ..= "
#{opts.meta}
+ #{get_scripts fileder}
</head>
<body>
#{gen_header!}
diff --git a/mmm/mmmfs/plugins/code.moon b/mmm/mmmfs/plugins/code.moon
deleted file mode 100644
index 454f32f..0000000
--- a/mmm/mmmfs/plugins/code.moon
+++ /dev/null
@@ -1,86 +0,0 @@
-import pre, div, button from require 'mmm.dom'
-import languages from require 'mmm.highlighting'
-
-class Editor
- o = if MODE == 'CLIENT'
- mkobj = window\eval "(function () { return {}; })"
- (tbl) ->
- with obj = mkobj!
- for k,v in pairs(tbl)
- obj[k] = v
-
- EDITOR: true
-
- new: (value, mode, @fileder, @key) =>
- @node = div class: 'editor'
-
- @saveBtn = with button 'save'
- .disabled = true
- .onclick = (_, e) -> @save e
-
- @cm = window\CodeMirror @node, o {
- :value
- :mode
- lineNumber: true
- lineWrapping: true
- autoRefresh: true
- theme: 'hybrid'
- }
-
- @lastSave = @cm\getDoc!\changeGeneration true
-
- @cm\on 'changes', (_, mirr) ->
- doc = @cm\getDoc!
- @saveBtn.disabled = doc\isClean @lastSave
-
- window\clearTimeout @timeout if @timeout
- @timeout = window\setTimeout (-> @change!), 300
-
- change: =>
- @timeout = nil
- doc = @cm\getDoc!
-
- if @lastPreview and doc\isClean @lastPreview
- -- no changes since last event
- return
-
- @lastPreview = doc\changeGeneration!
- value = doc\getValue!
-
- @fileder.facets[@key] = value
- BROWSER\refresh!
-
- save: (e) =>
- e\preventDefault!
-
- doc = @cm\getDoc!
- @fileder\set @key, doc\getValue!
- @lastSave = doc\changeGeneration true
-
--- syntax-highlighted code
-{
- editors: if MODE == 'CLIENT' then {
- {
- inp: 'text/([^ ]*).*'
- out: 'mmm/dom'
- cost: 0
- transform: (value, fileder, key) =>
- mode = @from\match @convert.inp
- Editor value, mode, fileder, key
- }
- {
- inp: 'URL.*'
- out: 'mmm/dom'
- cost: 0
- transform: (value, fileder, key) =>
- Editor value, nil, fileder, key
- }
- }
- scripts: [[
- <link rel="stylesheet" type="text/css" href="//unpkg.com/codemirror@5.49.2/lib/codemirror.css" />
- <script type="text/javascript" src="//unpkg.com/codemirror@5.49.2/lib/codemirror.js"></script>
- <script type="text/javascript" src="//unpkg.com/codemirror@5.49.2/mode/lua/lua.js"></script>
- <script type="text/javascript" src="//unpkg.com/codemirror@5.49.2/mode/markdown/markdown.js"></script>
- <script type="text/javascript" src="//unpkg.com/codemirror@5.49.2/addon/display/autorefresh.js"></script>
- ]]
-}
diff --git a/mmm/mmmfs/plugins/gltf.moon b/mmm/mmmfs/plugins/gltf.moon
deleted file mode 100644
index 129a291..0000000
--- a/mmm/mmmfs/plugins/gltf.moon
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- scripts: [[
- <script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>
- <script nomodule src="https://unpkg.com/@google/model-viewer/dist/model-viewer-legacy.js"></script>
- ]]
-}
diff --git a/mmm/mmmfs/plugins/markdown.moon b/mmm/mmmfs/plugins/markdown.moon
deleted file mode 100644
index c5a8f96..0000000
--- a/mmm/mmmfs/plugins/markdown.moon
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- scripts: [[
- <script type="text/javascript" src="//unpkg.com/marked@0.7.0/marked.min.js"></script>
- ]]
-}
diff --git a/mmm/mmmfs/plugins/mermaid.moon b/mmm/mmmfs/plugins/mermaid.moon
deleted file mode 100644
index c076e7b..0000000
--- a/mmm/mmmfs/plugins/mermaid.moon
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- scripts: [[
- <script type="text/javascript" src="//unpkg.com/mermaid@8.4.0/dist/mermaid.min.js"></script>
- ]]
-}
diff --git a/root/$mmm/plugins/json/converts: text$moonscript -> table.moon b/root/$mmm/plugins/json/converts: text$moonscript -> table.moon
deleted file mode 100644
index 7b150a5..0000000
--- a/root/$mmm/plugins/json/converts: text$moonscript -> table.moon
+++ /dev/null
@@ -1,54 +0,0 @@
-encode = (obj) ->
- switch type obj
- when 'string'
- string.format '%q', obj
- when 'table'
- if obj[1] or not next obj
- "[#{table.concat [encode c for c in *obj], ','}]"
- else
- "{#{table.concat ["#{encode k}: #{encode v}" for k,v in pairs obj], ', '}}"
- when 'number'
- tostring obj
- when 'boolean'
- tostring obj
- when 'nil'
- 'null'
- else
- error "unknown type '#{type obj}'"
-
-decode = if MODE == 'CLIENT'
- import Array, Object, JSON from js.global
-
- fix = (val) ->
- switch type val
- when 'userdata'
- if Array\isArray val
- [fix x for x in js.of val]
- else
- {(fix e[0]), (fix e[1]) for e in js.of Object\entries(val)}
- else
- val
-
- encode
- decode = (str) -> fix JSON\parse str
-else if cjson = require 'cjson'
- cjson.decode
-else
- warn 'only partial JSON support, please install cjson'
-
-
-{
- {
- inp: 'table',
- out: 'text/json',
- cost: 2
- transform: (val) => encode val
- }
- if decode
- {
- inp: 'text/json'
- out: 'table'
- cost: 1
- transform: (val) => decode val
- }
-}
diff --git a/root/$mmm/plugins/static/converts: text$moonscript -> table.moon b/root/$mmm/plugins/static/converts: text$moonscript -> table.moon
index e230856..b3c6182 100644
--- a/root/$mmm/plugins/static/converts: text$moonscript -> table.moon
+++ b/root/$mmm/plugins/static/converts: text$moonscript -> table.moon
@@ -1,34 +1,41 @@
-if not STATIC
- return
+if STATIC
+ extensions = {
+ 'image/jpeg': 'jpg'
+ 'image/png': 'png'
+ 'image/svg+xml': 'svg'
-extensions = {
- 'image/jpeg': 'jpg'
- 'image/png': 'png'
- 'image/svg+xml': 'svg'
+ 'video/webm': 'webm'
+ 'video/mp4': 'mp4'
- 'video/webm': 'webm'
- 'video/mp4': 'mp4'
+ 'text/javascript': 'js'
+ 'text/css': 'css'
- 'text/javascript': 'js'
- 'text/css': 'css'
-
- 'model/gltf-binary': 'glb'
-}
+ 'model/gltf-binary': 'glb'
+ }
-{
{
- inp: '(.+)',
- out: 'URL -> %1',
- cost: 5
- transform: (val, fileder, key) =>
- escaped_from = @from\gsub '/', '_'
- if ext = extensions[@from]
- escaped_from ..= ".#{ext}"
+ {
+ inp: '(.+)',
+ out: 'URL -> %1',
+ cost: 5
+ transform: (val, fileder, key) =>
+ escaped_from = @from\gsub '/', '_'
+ if ext = extensions[@from]
+ escaped_from ..= ".#{ext}"
- prefix = STATIC.root or ''
+ prefix = STATIC.root or ''
- prefix .. with url = "#{fileder.path}/#{key.name}:#{escaped_from}"
- print " rendering asset #{url}"
- STATIC.spit url, val
+ prefix .. with url = "#{fileder.path}/#{key.name}:#{escaped_from}"
+ print " rendering asset #{url}"
+ STATIC.spit url, val
+ }
+ }
+else
+ {
+ {
+ inp: '(.+)',
+ out: 'URL -> %1',
+ cost: 5
+ transform: (_, fileder, key) => "#{fileder.path}/#{key.name}:#{@from}"
+ }
}
-}