aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ordered.shared.moon
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2018-10-19 04:58:14 +0000
committers-ol <s-ol@users.noreply.github.com>2018-10-19 04:58:14 +0000
commit28569b422ae3206209384b09dc5d60155e9f670e (patch)
treea7524c6d7b8ff7e41f020274e4e51a56e06ce7b7 /lib/ordered.shared.moon
parentswitch to self-rendering lua code (diff)
downloadmmm-28569b422ae3206209384b09dc5d60155e9f670e.tar.gz
mmm-28569b422ae3206209384b09dc5d60155e9f670e.zip
stable serverside rendering
Diffstat (limited to 'lib/ordered.shared.moon')
-rw-r--r--lib/ordered.shared.moon27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/ordered.shared.moon b/lib/ordered.shared.moon
new file mode 100644
index 0000000..59c07bf
--- /dev/null
+++ b/lib/ordered.shared.moon
@@ -0,0 +1,27 @@
+-- ordered table iterator, for stable(r) renderers
+
+sort = (t, order_fn) ->
+ with index = [k for k,v in pairs t when 'string' == type k]
+ table.sort index, order_fn
+
+-- ordered next(t)
+onext = (state, key) ->
+ state.i += 1
+ { :t, :index, :i } = state
+
+ if key = index[i]
+ key, t[key]
+
+-- ordered pairs(t). order_fn is optional; see table.sort
+opairs = (t, order_fn) ->
+ state = {
+ :t,
+ i: 0,
+ index: sort t, order_fn
+ }
+ onext, state, nil
+
+{
+ :onext
+ :opairs
+}