diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2019-10-31 16:14:07 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2019-10-31 16:14:07 +0000 |
| commit | dc08e262cd53a48480a88235aa58500f0638ad79 (patch) | |
| tree | bdcec3956ed575b6566125e316044ab8632f1d93 | |
| parent | small fixes: (diff) | |
| download | mmm-dc08e262cd53a48480a88235aa58500f0638ad79.tar.gz mmm-dc08e262cd53a48480a88235aa58500f0638ad79.zip | |
allow adding and removing of facets
| -rw-r--r-- | mmm/mmmfs/browser.moon | 39 | ||||
| -rw-r--r-- | mmm/mmmfs/fileder.moon | 23 | ||||
| -rw-r--r-- | mmm/mmmfs/init.moon | 1 | ||||
| -rw-r--r-- | mmm/mmmfs/plugins/init.moon | 2 | ||||
| -rw-r--r-- | scss/_browser.scss | 4 |
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 { |
