aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2019-10-31 16:14:07 +0000
committers-ol <s-ol@users.noreply.github.com>2019-10-31 16:14:07 +0000
commitdc08e262cd53a48480a88235aa58500f0638ad79 (patch)
treebdcec3956ed575b6566125e316044ab8632f1d93
parentsmall fixes: (diff)
downloadmmm-dc08e262cd53a48480a88235aa58500f0638ad79.tar.gz
mmm-dc08e262cd53a48480a88235aa58500f0638ad79.zip
allow adding and removing of facets
-rw-r--r--mmm/mmmfs/browser.moon39
-rw-r--r--mmm/mmmfs/fileder.moon23
-rw-r--r--mmm/mmmfs/init.moon1
-rw-r--r--mmm/mmmfs/plugins/init.moon2
-rw-r--r--scss/_browser.scss4
5 files changed, 46 insertions, 23 deletions
diff --git a/mmm/mmmfs/browser.moon b/mmm/mmmfs/browser.moon
index 8d95ac3..7be702f 100644
--- a/mmm/mmmfs/browser.moon
+++ b/mmm/mmmfs/browser.moon
@@ -43,13 +43,13 @@ class Browser
-- active fileder
-- (re)set every time @path changes
- @active = @path\map @root\walk
+ @fileder = @path\map @root\walk
-- currently active facet
- -- (re)set to default when @active changes
+ -- (re)set to default when @fileder changes
@facet = ReactiveVar Key facet, 'mmm/dom'
if MODE == 'CLIENT'
- @active\subscribe (fileder) ->
+ @fileder\subscribe (fileder) ->
return unless fileder
last = @facet and @facet\get!
@facet\set Key if last then last.type else 'mmm/dom'
@@ -119,7 +119,7 @@ class Browser
\append path_segment name, href
\append span 'view facet:', style: { 'margin-right': '0' }
- \append @active\map (fileder) ->
+ \append @fileder\map (fileder) ->
onchange = (_, e) ->
{ :type } = @facet\get!
@facet\set Key name: e.target.value, :type
@@ -178,7 +178,7 @@ class Browser
warn "ERROR rendering content: #{msg}"
div!
- active = @active\get!
+ active = @fileder\get!
return disp_error "fileder not found!" unless active
return disp_error "facet not found!" unless prop
@@ -201,7 +201,7 @@ class Browser
-- active facet in inspect tab
-- (re)set to match when @facet changes
@inspect_prop = @facet\map (prop) ->
- active = @active\get!
+ active = @fileder\get!
key = active and active\find prop
key = key.original if key and key.original
key
@@ -213,21 +213,34 @@ class Browser
span 'inspector'
@inspect_prop\map (current) ->
current = current and current\tostring!
- fileder = @active\get!
+ fileder = @fileder\get!
onchange = (_, e) ->
- return if e.target.value == ''
- { :name } = @facet\get!
- @inspect_prop\set Key e.target.value
+ facet = e.target.value
+ return if facet == ''
+ @inspect_prop\set Key facet
with elements.select :onchange
\append option '(none)', value: '', disabled: true, selected: not value
if fileder
for value in pairs fileder.facet_keys
\append option value, :value, selected: value == current
- @inspect\map (enabled) ->
- if enabled
- button 'close', onclick: (_, e) -> @inspect\set false
+
+ button 'rm', class: 'tight', onclick: (_, e) ->
+ if window\confirm "continuing will permanently remove the facet '#{@inspect_prop\get!}'."
+ fileder = @fileder\get!
+ fileder\set @inspect_prop\get!, nil
+ @fileder\set fileder -- trigger re-selection of active facet & inspector
+
+ button 'add', class: 'tight', onclick: (_, e) ->
+ facet = window\prompt "please enter the facet string ('name: type' or 'type'):", 'text/markdown'
+ return if not facet or facet == '' or facet == js.null
+ fileder = @fileder\get!
+ fileder\set facet, ''
+ @inspect_prop\set Key facet
+ @refresh!
+
+ button 'close', onclick: (_, e) -> @inspect\set false
}
\append with div class: @inspect_err\map (e) -> if e then 'error-wrap' else 'error-wrap empty'
\append span "an error occured while rendering this view:"
diff --git a/mmm/mmmfs/fileder.moon b/mmm/mmmfs/fileder.moon
index 9918adc..dec0350 100644
--- a/mmm/mmmfs/fileder.moon
+++ b/mmm/mmmfs/fileder.moon
@@ -135,13 +135,18 @@ class Fileder
__newindex: (t, k, v) ->
-- get canonical Key instance
- k = @facet_keys[k]
- return unless k
+ key = @facet_keys[k]
- rawset t, k, v
+ -- new creating, also create canonical Key
+ if not key
+ key = Key k
+ @facet_keys[key] = key
+ rawset t, key, v
+
+ -- when deleting, also delete canonical Key
if not v
- @facet_keys[k] = nil
+ @facet_keys[key] = nil
}
-- this fails with JS objects from JSON.parse
@@ -243,15 +248,15 @@ class Fileder
-- find facet and type according to criteria, nil if no value or conversion path
-- * ... - arguments like Key
- find: (...) =>
- want = Key ...
+ find: (key, key2, ...) =>
+ want = Key key, key2
-- filter facets by name
matching = [ key for str, key in pairs @facet_keys when key.name == want.name ]
return unless #matching > 0
-- get shortest conversion path
- shortest_path, start = get_conversions want.type, [ key.type for key in *matching ]
+ shortest_path, start = get_conversions want.type, [ key.type for key in *matching ], ...
if start
for key in *matching
@@ -292,7 +297,9 @@ class Fileder
key = Key key
value = key2
- if @facet_keys[key]
+ if value == nil
+ @store\remove_facet @path, key.name, key.type
+ elseif @facet_keys[key]
@store\update_facet @path, key.name, key.type, value
else
@store\create_facet @path, key.name, key.type, value
diff --git a/mmm/mmmfs/init.moon b/mmm/mmmfs/init.moon
index b807c1c..fc89d7f 100644
--- a/mmm/mmmfs/init.moon
+++ b/mmm/mmmfs/init.moon
@@ -2,4 +2,3 @@ require = relative ..., 0
export ^
PLUGINS = require '.plugins'
-print "PLUGINS = ", PLUGINS
diff --git a/mmm/mmmfs/plugins/init.moon b/mmm/mmmfs/plugins/init.moon
index 583fbb4..5afd7be 100644
--- a/mmm/mmmfs/plugins/init.moon
+++ b/mmm/mmmfs/plugins/init.moon
@@ -56,7 +56,7 @@ converts = {
{
inp: 'text/html%+frag',
out: 'mmm/dom',
- cost: 1
+ cost: 0.1
transform: if MODE == 'SERVER'
(html, fileder) =>
html = html\gsub '<mmm%-link%s+(.-)>(.-)</mmm%-link>', (attrs, text) ->
diff --git a/scss/_browser.scss b/scss/_browser.scss
index 1c5b5b2..47be262 100644
--- a/scss/_browser.scss
+++ b/scss/_browser.scss
@@ -72,6 +72,10 @@
> .inspect-btn {
@include media-small() { display: none; }
}
+
+ .tight {
+ margin-left: 0;
+ }
}
.error-wrap {