diff options
| author | s-ol <s+removethis@s-ol.nu> | 2020-12-09 11:16:29 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2020-12-09 11:16:29 +0000 |
| commit | 2e454714a19c044577b6c24e06f86cf43226fe6a (patch) | |
| tree | 1e84414723b322610ca1120d4c1d52e8de2fddc0 | |
| parent | remove BROWSER.root (diff) | |
| download | mmm-2e454714a19c044577b6c24e06f86cf43226fe6a.tar.gz mmm-2e454714a19c044577b6c24e06f86cf43226fe6a.zip | |
remove legacy PLUGINS
| -rw-r--r-- | build/render_all.moon | 8 | ||||
| -rw-r--r-- | build/server.moon | 14 | ||||
| -rw-r--r-- | mmm/mmmfs/browser.moon | 3 | ||||
| -rw-r--r-- | mmm/mmmfs/builtins.moon (renamed from mmm/mmmfs/plugins/init.moon) | 100 | ||||
| -rw-r--r-- | mmm/mmmfs/conversion.moon | 4 | ||||
| -rw-r--r-- | mmm/mmmfs/init.moon | 2 | ||||
| -rw-r--r-- | mmm/mmmfs/layout.moon | 3 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/code.moon | 86 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/gltf.moon | 6 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/markdown.moon | 5 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/mermaid.moon | 5 | ||||
| -rw-r--r-- | root/$mmm/plugins/json/converts: text$moonscript -> table.moon | 54 | ||||
| -rw-r--r-- | root/$mmm/plugins/static/converts: text$moonscript -> table.moon | 59 |
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}" + } } -} |
