Mercurial > code > home > repos > light9
diff web/timeline/inline-attrs.coffee @ 2376:4556eebe5d73
topdir reorgs; let pdm have its src/ dir; separate vite area from light9/
author | drewp@bigasterisk.com |
---|---|
date | Sun, 12 May 2024 19:02:10 -0700 |
parents | light9/web/timeline/inline-attrs.coffee@7fe81130b735 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/timeline/inline-attrs.coffee Sun May 12 19:02:10 2024 -0700 @@ -0,0 +1,88 @@ +log = debug('attrs') +debug.enable('*') + +coffeeElementSetup(class InlineAttrs extends Polymer.Element + @is: "light9-timeline-note-inline-attrs" + @getter_properties: + graph: { type: Object, notify: true } + project: { type: Object, notify: true } + song: { type: String, notify: true } + config: { type: Object } # just for setup + uri: { type: Object, notify: true } # the Note + effectStr: { type: String, notify: true } + colorScale: { type: String, notify: true } + noteLabel: { type: String, notify: true } + selection: { type: Object, notify: true } + @getter_observers: [ + '_onConfig(config)' + 'addHandler(graph, uri)' + 'onColorScale(graph, uri, colorScale)' + ] + + ready: -> + super.ready() + @$.effect.addEventListener 'edited', => + @graph.patchObject(@uri, @graph.Uri(':effectClass'), @graph.Uri(@effectStr), @graph.Uri(@song)) + + _onConfig: -> + @uri = @config.uri + for side in ['top', 'left', 'width', 'height'] + @.style[side] = @config[side] + 'px' + + addHandler: -> + return unless @uri + @graph.runHandler(@update.bind(@), "update inline attrs #{@uri.value}") + + onColorScale: -> + return unless @uri? and @colorScale? and @colorScaleFromGraph? + U = (x) => @graph.Uri(x) + if @colorScale == @colorScaleFromGraph + return + @editAttr(@uri, U(':colorScale'), @graph.Literal(@colorScale)) + + editAttr: (note, attr, value) -> + U = (x) => @graph.Uri(x) + if not @song? + log("inline: can't edit inline attr yet, no song") + return + + existingColorScaleSetting = null + for setting in @graph.objects(note, U(':setting')) + ea = @graph.uriValue(setting, U(':effectAttr')) + if ea.equals(attr) + existingColorScaleSetting = setting + + if existingColorScaleSetting + log('inline: update setting', existingColorScaleSetting.value) + @graph.patchObject(existingColorScaleSetting, U(':value'), value, U(@song)) + else + log('inline: new setting') + setting = @graph.nextNumberedResource(note.value + 'set') + patch = {delQuads: [], addQuads: [ + @graph.Quad(note, U(':setting'), setting, U(@song)) + @graph.Quad(setting, U(':effectAttr'), attr, U(@song)) + @graph.Quad(setting, U(':value'), value, U(@song)) + ]} + @graph.applyAndSendPatch(patch) + + update: -> + console.time('attrs update') + U = (x) => @graph.Uri(x) + @effectStr = @graph.uriValue(@uri, U(':effectClass'))?.value + @noteLabel = @uri.value.replace(/.*\//, '') + existingColorScaleSetting = null + for setting in @graph.objects(@uri, U(':setting')) + ea = @graph.uriValue(setting, U(':effectAttr')) + value = @graph.stringValue(setting, U(':value')) + if ea.equals(U(':colorScale')) + @colorScaleFromGraph = value + @colorScale = value + existingColorScaleSetting = setting + if existingColorScaleSetting == null + @colorScaleFromGraph = '#ffffff' + @colorScale = '#ffffff' + console.timeEnd('attrs update') + + onDel: -> + @project.deleteNote(@graph.Uri(@song), @uri, @selection) +)