Files @ 44fc477970bf
Branch filter:

Location: light9/web/timeline/inline-attrs.coffee

drewp@bigasterisk.com
cleanup imports, reformats
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)
)