diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2018-10-27 06:11:19 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2018-10-27 06:11:19 +0000 |
| commit | eb556356062974f4e40f7c0347fd54098a0ce209 (patch) | |
| tree | 8cd56e0dcbd301ecc25824ac5285170eb647f254 /app/tablefs/init.moon | |
| parent | styling (diff) | |
| download | mmm-eb556356062974f4e40f7c0347fd54098a0ce209.tar.gz mmm-eb556356062974f4e40f7c0347fd54098a0ce209.zip | |
rename to mmmfs, add canvas on client
Diffstat (limited to 'app/tablefs/init.moon')
| -rw-r--r-- | app/tablefs/init.moon | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/app/tablefs/init.moon b/app/tablefs/init.moon deleted file mode 100644 index db3a328..0000000 --- a/app/tablefs/init.moon +++ /dev/null @@ -1,149 +0,0 @@ -export ^ - -interps = { - { - name: 'moon', - transform: (method) => method @ - }, -} - -split = (str, delim='->') -> - return {}, str if nil == str\find delim - - -- @TODO interp chain? - interp, rest = str\match ' *(%w+) *-> *(.*)' - { interp }, rest - -class Key - new: (opts) => - if 'string' == type opts - @name, rest = opts\match '(%w+): *(.+)' - if not @name - @name = '' - rest = opts - @interps, @type = split rest, '->' - elseif 'table' == type opts - @name = opts.name - @type = assert opts.type, 'no type given' - @interps = opts.interps or {} - else - error 'wrong argument type' - - -- get a function that interpretes thi type according to @interps - get_interp: (overrides) => - return ((val) => val) if #@interps == 0 - - assert #@interps == 1, 'not supported rn' -- @TODO - _name = @interps[1] - - return overrides[_name] if overrides and overrides[_name] - - for { :name, :transform } in *interps - if name == _name - return transform - - error "interp not found: '#{_name}'" - -converts = { - { - inp: 'mmm/dom', - out: 'text/html', - transform: (node) -> if MODE == 'SERVER' then node else node.outerHTML - }, - { - inp: 'mmm/component', - out: 'mmm/dom', - transform: (...) -> - import tohtml from require 'lib.component' - tohtml ... - }, - { - -- @TODO this chained rule *should* be inferred, but that's way too hot rn - inp: 'mmm/component', - out: 'text/html', - transform: (node) -> - import tohtml from require 'lib.component' - - node = tohtml node - if MODE == 'SERVER' then node else node.outerHTML - }, -} - -table.insert converts, { - inp: 'text/html', - out: 'mmm/dom', - transform: if MODE == 'SERVER' - (...) -> ... - else - (html) -> - tmp = document\createElement 'div' - tmp.innerHTML = html - tmp.firstChild - } - -do - local markdown - if MODE == 'SERVER' - success, discount = pcall require, 'discount' - markdown = discount if success - else - markdown = window and window\marked - - if markdown - table.insert converts, { - inp: 'text/markdown', - out: 'text/html', - transform: markdown, - } - - -- @TODO chained w above - table.insert converts, { - inp: 'text/markdown', - out: 'mmm/dom', - transform: if MODE == 'SERVER' - (md) -> markdown md - else - (md) -> - with document\createElement 'div' - .innerHTML = markdown md - } - -class Fileder - new: (props, @children) => - if not @children - @children = for i, child in ipairs props - props[i] = nil - child - - @props = { (Key k), v for k, v in pairs props } - - gett: (...) => assert @get ... - get: (name='', type, overrides) => - if not type - type = name - name = '' - - -- first pass, interps only - for key, value in pairs @props - continue unless key.name == name and key.type == type - - interp = key\get_interp overrides - - return interp @, value - - if not overrides - -- second pass, interps + converts - for key, value in pairs @props - continue unless key.name == name - - interp = key\get_interp! - - for { :inp, :out, :transform } in *converts - return transform interp @, value if inp == key.type and out == type - - nil, "node doesn't have value for #{name}:#{type}" - -require = relative ... -root = require '.tablefs' - -append root\gett 'mmm/dom' |
