diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2019-12-17 23:46:04 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2019-12-17 23:47:57 +0000 |
| commit | a4038511560d408827cdea7e2e99751496687181 (patch) | |
| tree | 3720c9e29613aa7ec3ef9aee20fad2d827f7bad7 | |
| parent | add sidenote support (diff) | |
| download | mmm-a4038511560d408827cdea7e2e99751496687181.tar.gz mmm-a4038511560d408827cdea7e2e99751496687181.zip | |
cites plugin
| -rw-r--r-- | build/server.moon | 6 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/cites.moon | 26 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/init.moon | 26 | ||||
| -rw-r--r-- | mmm/mmmfs/util.moon | 49 | ||||
| -rw-r--r-- | root/articles/mmmfs/$order | 2 | ||||
| -rw-r--r-- | root/articles/mmmfs/references/$order | 2 | ||||
| -rw-r--r-- | root/articles/mmmfs/references/text$markdown.md | 0 | ||||
| -rw-r--r-- | root/articles/mmmfs/references/text$moonscript -> fn -> mmm$dom.moon | 6 | ||||
| -rw-r--r-- | root/articles/mmmfs/references/unix/URL -> cite$acm | 1 | ||||
| -rw-r--r-- | root/articles/mmmfs/references/xerox-star/URL -> cite$acm | 1 | ||||
| -rw-r--r-- | scss/_content.scss | 14 |
11 files changed, 117 insertions, 16 deletions
diff --git a/build/server.moon b/build/server.moon index b95b396..7c0ff46 100644 --- a/build/server.moon +++ b/build/server.moon @@ -99,7 +99,11 @@ class Server switch method when 'GET', 'HEAD' - fileder = Fileder @store, path + root = Fileder @store + export BROWSER + BROWSER = :root + fileder = root\walk path -- Fileder @store, path + if not fileder -- fileder not found return 404, "fileder '#{path}' not found" diff --git a/mmm/mmmfs/plugins/cites.moon b/mmm/mmmfs/plugins/cites.moon new file mode 100644 index 0000000..01f5b3f --- /dev/null +++ b/mmm/mmmfs/plugins/cites.moon @@ -0,0 +1,26 @@ +import div, i from require 'mmm.dom' + +{ + converts: { + { + inp: 'URL -> cite/acm' + out: 'URL -> text/bibtex' + cost: 0.5 + transform: (url) => + id = assert (url\match '//dl%.acm%.org/citation%.cfm%?id=(%d+)'), "couldn't parse cite/acm URL: '#{url}'" + "https://cors-anywhere.herokuapp.com/https://dl.acm.org/exportformats.cfm?id=#{id}&expformat=bibtex" + } + { + inp: 'text/bibtex' + out: 'mmm/dom' + cost: 1 + transform: (src) => + type, key, kv = src\match '@(%w+){(.-),(.*)}' + info = {} + for key, val in kv\gmatch '([a-z]-)%s*=%s*{(.-)}' + info[key] = val + + div "#{info.author} (#{info.year}),", (i info.title), ". #{info.publisher}" + } + } +} diff --git a/mmm/mmmfs/plugins/init.moon b/mmm/mmmfs/plugins/init.moon index c31cd57..1650c3a 100644 --- a/mmm/mmmfs/plugins/init.moon +++ b/mmm/mmmfs/plugins/init.moon @@ -95,6 +95,7 @@ converts = { when 'facet' then facet = val when 'nolink' then opts.nolink = true when 'inline' then opts.inline = true + when 'raw' then opts.raw = true else warn "unkown attribute '#{key}=\"#{val}\"' in <mmm-embed>" embed path, facet, fileder, opts @@ -113,10 +114,12 @@ converts = { facet = js_fix element\getAttribute 'facet' nolink = js_fix element\getAttribute 'nolink' inline = js_fix element\getAttribute 'inline' + raw = js_fix element\getAttribute 'raw' desc = js_fix element.innerText desc = nil if desc == '' - element\replaceWith embed path or '', facet or '', fileder, { :nolink, :inline, :desc } + opts = :nolink, :inline, :raw, :desc + element\replaceWith embed path or '', facet or '', fileder, opts embeds = \getElementsByTagName 'mmm-link' embeds = [embeds[i] for i=0, embeds.length - 1] @@ -182,6 +185,26 @@ converts = { -- transform: single code -- } { + inp: 'URL -> (.+)', + out: '%1', + cost: 4, + transform: do + if MODE == 'CLIENT' + (uri) => + request = js.new js.global.XMLHttpRequest + request\open 'GET', uri, false + request\send js.null + + assert request.status == 200, "unexpected status code: #{request.status}" + request.responseText + else + (uri) => + request = require 'http.request' + req = request.new_from_uri uri + headers, stream = req\go 8 + assert stream\get_body_as_string! + } + { inp: '(.+)', out: 'URL -> %1', cost: 5 @@ -238,6 +261,7 @@ add_converts 'markdown' add_converts 'mermaid' add_converts 'twitter' add_converts 'youtube' +add_converts 'cites' if MODE == 'SERVER' ok, moon = pcall require, 'moonscript.base' diff --git a/mmm/mmmfs/util.moon b/mmm/mmmfs/util.moon index 0e57f93..970dd42 100644 --- a/mmm/mmmfs/util.moon +++ b/mmm/mmmfs/util.moon @@ -12,14 +12,34 @@ tourl = (path) -> (elements) -> import a, div, span, pre from elements - find_fileder = (fileder, origin) -> + find_fileder = (fileder, origin) -> if 'string' == type fileder - if '/' == fileder\sub 1, 1 - assert BROWSER and BROWSER.root, "cannot resolve absolute path '#{fileder}' without BROWSER and root set!" - assert (BROWSER.root\walk fileder), "couldn't resolve path '#{fileder}'" - else + if '/' ~= fileder\sub 1, 1 assert origin, "cannot resolve relative path '#{fileder}' without origin!" + fileder = "#{origin.path}/#{fileder}" + + fileder = fileder\gsub '/([^/]-)/%.%./', '/' + if origin.path == fileder\sub 1, #origin.path assert (origin\walk fileder), "couldn't resolve path '#{fileder}' from #{origin}" + else + assert BROWSER and BROWSER.root, "cannot resolve absolute path '#{fileder}' without BROWSER and root set!" + assert (BROWSER.root\walk fileder), "couldn't resolve path '#{fileder}'" + + -- if 'string' == type fileder + -- if '/' == fileder\sub 1, 1 + -- fileder = fileder\gsub '/([^/]-)/%.%./', '/' + -- assert BROWSER and BROWSER.root, "cannot resolve absolute path '#{fileder}' without BROWSER and root set!" + -- assert (BROWSER.root\walk fileder), "couldn't resolve path '#{fileder}'" + -- else + -- assert origin, "cannot resolve relative path '#{fileder}' without origin!" + -- fileder = "#{origin.path}/#{fileder}" + -- fileder = fileder\gsub '/([^/]-)/%.%./', '/' + -- if origin.path == fileder\sub 1, #origin.path + -- assert (origin\walk fileder), "couldn't resolve path '#{fileder}' from #{origin}" + -- else + -- assert BROWSER and BROWSER.root, "cannot resolve absolute path '#{fileder}' without BROWSER and root set!" + -- assert (BROWSER.root\walk fileder), "couldn't resolve path '#{fileder}'" + else assert fileder, "no fileder passed." @@ -53,13 +73,18 @@ tourl = (path) -> ok, node = pcall fileder.gett, fileder, name, 'mmm/dom' if not ok - return span "couldn't embed #{fileder} #{name}", - (pre node), - class: 'embed' - style: { - background: 'var(--gray-fail)', - padding: '1em', - } + warn "couldn't embed #{fileder} #{name}: #{node}" + return span { + class: 'embed' + style: + background: 'var(--gray-fail)' + padding: '1em' + + "couldn't embed #{fileder} #{name}" + (pre node) + } + + return node if opts.raw klass = 'embed' klass ..= ' desc' if opts.desc diff --git a/root/articles/mmmfs/$order b/root/articles/mmmfs/$order index 81fb611..d8ac030 100644 --- a/root/articles/mmmfs/$order +++ b/root/articles/mmmfs/$order @@ -3,6 +3,6 @@ problem-statement framework mmmfs evaluation -references ba_log examples +references diff --git a/root/articles/mmmfs/references/$order b/root/articles/mmmfs/references/$order new file mode 100644 index 0000000..0360e6f --- /dev/null +++ b/root/articles/mmmfs/references/$order @@ -0,0 +1,2 @@ +xerox-star +unix diff --git a/root/articles/mmmfs/references/text$markdown.md b/root/articles/mmmfs/references/text$markdown.md deleted file mode 100644 index e69de29..0000000 --- a/root/articles/mmmfs/references/text$markdown.md +++ /dev/null diff --git a/root/articles/mmmfs/references/text$moonscript -> fn -> mmm$dom.moon b/root/articles/mmmfs/references/text$moonscript -> fn -> mmm$dom.moon new file mode 100644 index 0000000..7b86510 --- /dev/null +++ b/root/articles/mmmfs/references/text$moonscript -> fn -> mmm$dom.moon @@ -0,0 +1,6 @@ +=> + html = require 'mmm.dom' + import ol, li from html + + ol for ref in *@children + li ref\gett 'mmm/dom' diff --git a/root/articles/mmmfs/references/unix/URL -> cite$acm b/root/articles/mmmfs/references/unix/URL -> cite$acm new file mode 100644 index 0000000..b4a8d90 --- /dev/null +++ b/root/articles/mmmfs/references/unix/URL -> cite$acm @@ -0,0 +1 @@ +https://dl.acm.org/citation.cfm?id=577766 diff --git a/root/articles/mmmfs/references/xerox-star/URL -> cite$acm b/root/articles/mmmfs/references/xerox-star/URL -> cite$acm new file mode 100644 index 0000000..8b3d1a3 --- /dev/null +++ b/root/articles/mmmfs/references/xerox-star/URL -> cite$acm @@ -0,0 +1 @@ +https://dl.acm.org/citation.cfm?id=66894 diff --git a/scss/_content.scss b/scss/_content.scss index 51994a3..ad854de 100644 --- a/scss/_content.scss +++ b/scss/_content.scss @@ -7,6 +7,19 @@ .markdown { max-width: 640px; position: relative; + + &.wide { + max-width: max-content; + } + + > blockquote { + @include left-border; + + margin: 1rem var(--margin-wide); + padding: 1rem; + background: $gray-bright; + border-color: $gray-neutral; + } } .markdown, @@ -57,7 +70,6 @@ border-color: $gray-dark; display: block; - border-radius: 6px; margin: 0 var(--margin-wide); padding: 1em; white-space: pre-wrap; |
