Files
@ 4556eebe5d73
Branch filter:
Location: light9/web/timeline/inline-attrs.coffee - annotation
4556eebe5d73
3.0 KiB
text/coffeescript
topdir reorgs; let pdm have its src/ dir; separate vite area from light9/
4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 | 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)
)
|