aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2019-12-17 23:46:04 +0000
committers-ol <s-ol@users.noreply.github.com>2019-12-17 23:47:57 +0000
commita4038511560d408827cdea7e2e99751496687181 (patch)
tree3720c9e29613aa7ec3ef9aee20fad2d827f7bad7
parentadd sidenote support (diff)
downloadmmm-a4038511560d408827cdea7e2e99751496687181.tar.gz
mmm-a4038511560d408827cdea7e2e99751496687181.zip
cites plugin
-rw-r--r--build/server.moon6
-rw-r--r--mmm/mmmfs/plugins/cites.moon26
-rw-r--r--mmm/mmmfs/plugins/init.moon26
-rw-r--r--mmm/mmmfs/util.moon49
-rw-r--r--root/articles/mmmfs/$order2
-rw-r--r--root/articles/mmmfs/references/$order2
-rw-r--r--root/articles/mmmfs/references/text$markdown.md0
-rw-r--r--root/articles/mmmfs/references/text$moonscript -> fn -> mmm$dom.moon6
-rw-r--r--root/articles/mmmfs/references/unix/URL -> cite$acm1
-rw-r--r--root/articles/mmmfs/references/xerox-star/URL -> cite$acm1
-rw-r--r--scss/_content.scss14
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;