diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2019-10-08 13:37:53 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2019-10-08 13:37:53 +0000 |
| commit | 92861ee9812b30b68f87f5c0f13125119e592473 (patch) | |
| tree | 7a7219653b5e1303e3b127ab8049f990d3eefa7f | |
| parent | change static path to work with static content (diff) | |
| download | mmm-92861ee9812b30b68f87f5c0f13125119e592473.tar.gz mmm-92861ee9812b30b68f87f5c0f13125119e592473.zip | |
add anything -> URL cast
| -rw-r--r-- | build/import.moon | 2 | ||||
| -rw-r--r-- | mmm/mmmfs/browser.moon | 4 | ||||
| -rw-r--r-- | mmm/mmmfs/conversion.moon | 6 | ||||
| -rw-r--r-- | mmm/mmmfs/converts.moon | 48 |
4 files changed, 33 insertions, 27 deletions
diff --git a/build/import.moon b/build/import.moon index e87f12d..aa8250e 100644 --- a/build/import.moon +++ b/build/import.moon @@ -24,7 +24,7 @@ load_facet = (filename, filepath) -> key = Key key\gsub '%$', '/' key.filename = filename - file = assert (io.open filepath, 'r'), "couldn't open facet file '#{filename}'" + file = assert (io.open filepath, 'rb'), "couldn't open facet file '#{filename}'" value = file\read '*all' file\close! diff --git a/mmm/mmmfs/browser.moon b/mmm/mmmfs/browser.moon index 944cc72..37a386c 100644 --- a/mmm/mmmfs/browser.moon +++ b/mmm/mmmfs/browser.moon @@ -2,7 +2,7 @@ require = relative ..., 1 import Key from require '.fileder' import converts, get_conversions, apply_conversions from require '.conversion' import ReactiveVar, get_or_create, text, elements from require 'mmm.component' -import pre, div, nav, span, button, a, select, option from elements +import pre, div, nav, span, button, a, code, select, option from elements import languages from require 'mmm.highlighting' keep = (var) -> @@ -32,7 +32,7 @@ casts = { { inp: 'URL.*' out: 'mmm/dom' - transform: (href) -> span a href, :href + transform: (href) -> span a (code href), :href }, } diff --git a/mmm/mmmfs/conversion.moon b/mmm/mmmfs/conversion.moon index 871ba7e..2c68dcc 100644 --- a/mmm/mmmfs/conversion.moon +++ b/mmm/mmmfs/conversion.moon @@ -36,7 +36,7 @@ get_conversions = (want, have, _converts=converts, limit=5) -> next_have[c] = { :start, rest: result, - conversions: { convert, table.unpack conversions } + conversions: { { :convert, from: rest, to: result }, table.unpack conversions } } c += 1 @@ -50,8 +50,8 @@ get_conversions = (want, have, _converts=converts, limit=5) -> -- returns converted value apply_conversions = (conversions, value, ...) -> for i=#conversions,1,-1 - { :inp, :out, :transform } = conversions[i] - value = transform value, ... + step = conversions[i] + value = step.convert.transform step, value, ... value diff --git a/mmm/mmmfs/converts.moon b/mmm/mmmfs/converts.moon index 766c8ad..020f765 100644 --- a/mmm/mmmfs/converts.moon +++ b/mmm/mmmfs/converts.moon @@ -11,10 +11,10 @@ js_fix = if MODE == 'CLIENT' arg -- limit function to one argument -single = (func) -> (val) -> func val +single = (func) -> (val) => func val -- load a chunk using a specific 'load'er -loadwith = (_load) -> (val, fileder, key) -> +loadwith = (_load) -> (val, fileder, key) => func = assert _load val, "#{fileder}##{key}" func! @@ -27,7 +27,7 @@ converts = { { inp: 'fn -> (.+)', out: '%1', - transform: (val, fileder) -> val fileder + transform: (val, fileder) => val fileder }, { inp: 'mmm/component', @@ -37,12 +37,12 @@ converts = { { inp: 'mmm/dom', out: 'text/html+frag', - transform: (node) -> if MODE == 'SERVER' then node else node.outerHTML + transform: (node) => if MODE == 'SERVER' then node else node.outerHTML }, { inp: 'text/html%+frag', out: 'text/html', - transform: (html, fileder) -> + transform: (html, fileder) => html = '<div class="content">' .. html .. '</div>' render html, fileder }, @@ -50,7 +50,7 @@ converts = { inp: 'text/html%+frag', out: 'mmm/dom', transform: if MODE == 'SERVER' - (html, fileder) -> + (html, fileder) => html = html\gsub '<mmm%-link%s+(.-)>(.-)</mmm%-link>', (attrs, text) -> text = nil if #text == 0 path = '' @@ -93,7 +93,7 @@ converts = { html else - (html, fileder) -> + (html, fileder) => parent = with document\createElement 'div' .innerHTML = html @@ -128,7 +128,7 @@ converts = { { inp: 'mmm/tpl -> (.+)', out: '%1', - transform: (source, fileder) -> + transform: (source, fileder) => source\gsub '{{(.-)}}', (expr) -> path, facet = expr\match '^([%w%-_%./]*)%+(.*)' assert path, "couldn't match TPL expression '#{expr}'" @@ -138,7 +138,7 @@ converts = { { inp: 'time/iso8601-date', out: 'time/unix', - transform: (val) -> + transform: (val) => year, _, month, day = val\match '^%s*(%d%d%d%d)(%-?)([01]%d)%2([0-3]%d)%s*$' assert year, "failed to parse ISO 8601 date: '#{val}'" os.time :year, :month, :day @@ -146,7 +146,7 @@ converts = { { inp: 'URL -> twitter/tweet', out: 'mmm/dom', - transform: (href) -> + transform: (href) => id = assert (href\match 'twitter.com/[^/]-/status/(%d*)'), "couldn't parse twitter/tweet URL: '#{href}'" if MODE == 'CLIENT' with parent = div! @@ -161,7 +161,7 @@ converts = { { inp: 'URL -> youtube/video', out: 'mmm/dom', - transform: (link) -> + transform: (link) => id = link\match 'youtu%.be/([^/]+)' id or= link\match 'youtube.com/watch.*[?&]v=([^&]+)' id or= link\match 'youtube.com/[ev]/([^/]+)' @@ -181,29 +181,35 @@ converts = { { inp: 'URL -> image/.+', out: 'mmm/dom', - transform: (src, fileder) -> img :src + transform: (src, fileder) => img :src }, { inp: 'URL -> video/.+', out: 'mmm/dom', - transform: (src) -> + transform: (src) => -- @TODO: add parsed MIME type video (source :src), controls: true, loop: true }, { inp: 'text/plain', out: 'mmm/dom', - transform: (val) -> span val + transform: (val) => span val }, { inp: 'alpha', out: 'mmm/dom', transform: single code }, + -- this one needs a higher cost + -- { + -- inp: 'URL -> .+', + -- out: 'mmm/dom', + -- transform: single code + -- }, { - inp: 'URL -> .+', - out: 'mmm/dom', - transform: single code + inp: '(.+)', + out: 'URL -> %1', + transform: (_, fileder, key) => "#{fileder.path}/#{key.name}:#{@from}" }, } @@ -226,7 +232,7 @@ else table.insert converts, { inp: 'text/javascript -> (.+)', out: '%1', - transform: (source) -> + transform: (source) => f = js.new window.Function, source f! } @@ -248,19 +254,19 @@ do table.insert converts, { inp: 'text/markdown', out: 'text/html+frag', - transform: (md) -> "<div class=\"markdown\">#{markdown md}</div>" + transform: (md) => "<div class=\"markdown\">#{markdown md}</div>" } table.insert converts, { inp: 'text/markdown%+span', out: 'mmm/dom', transform: if MODE == 'SERVER' - (source) -> + (source) => html = markdown source html = html\gsub '^<p', '<span' html\gsub '/p>$', '/span>' else - (source) -> + (source) => html = markdown source html = html\gsub '^%s*<p>%s*', '' html = html\gsub '%s*</p>%s*$', '' |
