aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2019-10-29 13:18:16 +0000
committers-ol <s-ol@users.noreply.github.com>2019-10-29 13:18:16 +0000
commitd9eafa21ad1d6ad340b5744d69e9fc68ce2083cb (patch)
treec5e4c1ce74094b5feebbca944e316fb2833fe027
parentsmall styling fixes (diff)
downloadmmm-d9eafa21ad1d6ad340b5744d69e9fc68ce2083cb.tar.gz
mmm-d9eafa21ad1d6ad340b5744d69e9fc68ce2083cb.zip
add sandbox
-rw-r--r--Dockerfile2
-rw-r--r--build/server.moon16
-rw-r--r--root/sandbox/description: text$markdown.md5
-rw-r--r--root/sandbox/dynamic-children/a/text$lua -> table0
-rw-r--r--root/sandbox/dynamic-children/b/text$markdown.md0
-rw-r--r--root/sandbox/dynamic-children/c/text$javascript -> text$markdown.js0
-rw-r--r--root/sandbox/dynamic-children/description: text$markdown.md1
-rw-r--r--root/sandbox/dynamic-children/text$lua -> fn -> mmm$dom.lua19
-rw-r--r--root/sandbox/javascript/description: text$markdown.md1
-rw-r--r--root/sandbox/javascript/text$javascript -> mmm$dom.js24
-rw-r--r--root/sandbox/lua/description: text$markdown.md1
-rw-r--r--root/sandbox/lua/text$lua -> mmm$dom.lua10
-rw-r--r--root/sandbox/text$lua -> fn -> mmm$dom.lua18
13 files changed, 93 insertions, 4 deletions
diff --git a/Dockerfile b/Dockerfile
index ef1246b..f95ac67 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,4 +16,4 @@ WORKDIR /code
RUN tup init && tup generate --config tup.docker.config build-static.sh && ./build-static.sh
EXPOSE 8000
-ENTRYPOINT ["moon", "build/server.moon", "fs", "0.0.0.0", "8000"]
+ENTRYPOINT ["moon", "build/server.moon", "fs", "0.0.0.0", "8000", "^/sandbox/"]
diff --git a/build/server.moon b/build/server.moon
index 68cf4db..d101d0b 100644
--- a/build/server.moon
+++ b/build/server.moon
@@ -29,6 +29,8 @@ class Server
opts.onstream = @\stream
opts.onerror = @\error
+ @editable_paths = opts.editable_paths
+
@server = server.listen opts
listen: =>
@@ -81,6 +83,10 @@ class Server
-- fileder not found
404, "fileder '#{path}' not found"
+ if method != 'GET' and method != 'HEAD'
+ if not @editable_paths or not path\match @editable_paths
+ return 403, 'editing not allowed'
+
switch method
when 'GET', 'HEAD'
val = switch facet.name
@@ -153,9 +159,13 @@ class Server
msg = "#{msg}: #{err}" if err
-- usage:
--- moon server.moon [STORE] [host] [port]
-{ store, host, port } = arg
+-- moon server.moon [STORE] [host] [port] [editable-paths]
+-- * STORE: see mmm/mmmfs/stores/init.moon:get_store
+-- * host: interface to bind to (default localhost, set to 0.0.0.0 for public hosting)
+-- * port: port to serve from, default 8000
+-- * editable-paths: Lua pattern to match paths in which editing is allowed, default none
+{ store, host, port, editable_paths } = arg
store = get_store store
-server = Server store, :host, port: port and tonumber port
+server = Server store, :host, :editable_paths, port: port and tonumber port
server\listen!
diff --git a/root/sandbox/description: text$markdown.md b/root/sandbox/description: text$markdown.md
new file mode 100644
index 0000000..250bb4e
--- /dev/null
+++ b/root/sandbox/description: text$markdown.md
@@ -0,0 +1,5 @@
+Everything in this Fileder is world-editable on the internet.
+It will be reset to its' default state whenever I push my repository.
+Please behave.
+
+Here is a list of this fileders content:
diff --git a/root/sandbox/dynamic-children/a/text$lua -> table b/root/sandbox/dynamic-children/a/text$lua -> table
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/root/sandbox/dynamic-children/a/text$lua -> table
diff --git a/root/sandbox/dynamic-children/b/text$markdown.md b/root/sandbox/dynamic-children/b/text$markdown.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/root/sandbox/dynamic-children/b/text$markdown.md
diff --git a/root/sandbox/dynamic-children/c/text$javascript -> text$markdown.js b/root/sandbox/dynamic-children/c/text$javascript -> text$markdown.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/root/sandbox/dynamic-children/c/text$javascript -> text$markdown.js
diff --git a/root/sandbox/dynamic-children/description: text$markdown.md b/root/sandbox/dynamic-children/description: text$markdown.md
new file mode 100644
index 0000000..32216ce
--- /dev/null
+++ b/root/sandbox/dynamic-children/description: text$markdown.md
@@ -0,0 +1 @@
+dynamically embedding children fileders with Lua
diff --git a/root/sandbox/dynamic-children/text$lua -> fn -> mmm$dom.lua b/root/sandbox/dynamic-children/text$lua -> fn -> mmm$dom.lua
new file mode 100644
index 0000000..a3a019b
--- /dev/null
+++ b/root/sandbox/dynamic-children/text$lua -> fn -> mmm$dom.lua
@@ -0,0 +1,19 @@
+local d = require 'mmm.dom'
+local u = require('mmm.mmmfs.util')(d)
+
+-- we need to return a function to get access to the current fileder
+-- (thats why there is the '-> fn ->' in the type)
+return function(self)
+ local children = {}
+ for i, child in ipairs(self.children) do
+ table.insert(children, d.li {
+ 'child ' .. i .. ': ',
+ u.link_to(child),
+ })
+ end
+
+ return d.article {
+ d.h1 'The Children are:',
+ d.ul(children),
+ }
+end
diff --git a/root/sandbox/javascript/description: text$markdown.md b/root/sandbox/javascript/description: text$markdown.md
new file mode 100644
index 0000000..eb0ca7c
--- /dev/null
+++ b/root/sandbox/javascript/description: text$markdown.md
@@ -0,0 +1 @@
+an example of how to use JS to create (dynamic) DOM / mmmfs content
diff --git a/root/sandbox/javascript/text$javascript -> mmm$dom.js b/root/sandbox/javascript/text$javascript -> mmm$dom.js
new file mode 100644
index 0000000..58deb23
--- /dev/null
+++ b/root/sandbox/javascript/text$javascript -> mmm$dom.js
@@ -0,0 +1,24 @@
+// a little helper function for creating DOM elements
+const e = (elem, children) => {
+ const node = document.createElement(elem);
+
+ if (typeof children === 'string')
+ node.innerText = children;
+ else
+ children.forEach(child => node.appendChild(child));
+
+ return node;
+};
+
+/* creating the equivalent of the following HTML directly as DOM content:
+ *
+ * <article>
+ * <h1>JavaScript</h1>
+ * <p>...</p>
+ * </article>
+ */
+
+return e('article', [
+ e('h1', 'JavaScript'),
+ e('p', 'JavaScript is supported natively in the browser but is not currently pre-rendered on the server.'),
+]);
diff --git a/root/sandbox/lua/description: text$markdown.md b/root/sandbox/lua/description: text$markdown.md
new file mode 100644
index 0000000..3071697
--- /dev/null
+++ b/root/sandbox/lua/description: text$markdown.md
@@ -0,0 +1 @@
+an example of how to use Lua to create (dynamic) DOM / mmmfs content
diff --git a/root/sandbox/lua/text$lua -> mmm$dom.lua b/root/sandbox/lua/text$lua -> mmm$dom.lua
new file mode 100644
index 0000000..db420ce
--- /dev/null
+++ b/root/sandbox/lua/text$lua -> mmm$dom.lua
@@ -0,0 +1,10 @@
+-- see /meta/mmm.dom for documentation
+local d = require 'mmm.dom'
+
+local lua = d.a { 'Lua', href = 'https://www.lua.org/' }
+local fengari = d.a { 'fengari.io', href = 'https://fengari.io/' }
+
+return d.article {
+ d.h1 'Lua',
+ d.p { lua, ' is fully supported using ', fengari, ' on the Client.' }
+}
diff --git a/root/sandbox/text$lua -> fn -> mmm$dom.lua b/root/sandbox/text$lua -> fn -> mmm$dom.lua
new file mode 100644
index 0000000..18206bb
--- /dev/null
+++ b/root/sandbox/text$lua -> fn -> mmm$dom.lua
@@ -0,0 +1,18 @@
+local d = require 'mmm.dom'
+local u = require('mmm.mmmfs.util')(d)
+
+return function(self)
+ local children = {}
+ for i, child in ipairs(self.children) do
+ table.insert(
+ children,
+ d.li(u.link_to(child), ': ', (child:get('description: mmm/dom')))
+ )
+ end
+
+ return d.div({
+ d.h3(u.link_to(self)),
+ self:gett('description: mmm/dom'),
+ d.ul(children),
+ })
+end