Files @ 69ca2b2fc133
Branch filter:

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

drewp@bigasterisk.com
overcomplicated attempt at persisting the pane layout in the rdf graph

this was hard because we have to somehow wait for the graph to load before config'ing the panes
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)
)