71 lines · 1.8 KB · Text
RawDownload
class app.views.ListFold extends app.View  @targetClass: '_list-dir'  @handleClass: '_list-arrow'  @activeClass: 'open'   @events:    click: 'onClick'   @shortcuts:    left:   'onLeft'    right:  'onRight'   constructor: (@el) -> super   open: (el) ->    if el and not el.classList.contains @constructor.activeClass      el.classList.add @constructor.activeClass      $.trigger el, 'open'    return   close: (el) ->    if el and el.classList.contains @constructor.activeClass      el.classList.remove @constructor.activeClass      $.trigger el, 'close'    return   toggle: (el) ->    if el.classList.contains @constructor.activeClass      @close el    else      @open el    return   reset: ->    while el = @findByClass @constructor.activeClass      @close el    return   getCursor: ->    @findByClass(app.views.ListFocus.activeClass) or @findByClass(app.views.ListSelect.activeClass)   onLeft: =>    cursor = @getCursor()    if cursor?.classList.contains @constructor.activeClass      @close cursor    return   onRight: =>    cursor = @getCursor()    if cursor?.classList.contains @constructor.targetClass      @open cursor    return   onClick: (event) =>    return if event.which isnt 1 or event.metaKey or event.ctrlKey    return unless event.pageY # ignore fabricated clicks    el = $.eventTarget(event)    el = el.parentNode if el.parentNode.tagName.toUpperCase() is 'SVG'     if el.classList.contains @constructor.handleClass      $.stopEvent(event)      @toggle el.parentNode    else if el.classList.contains @constructor.targetClass      if el.hasAttribute('href')        if el.classList.contains(@constructor.activeClass)          @close(el) if el.classList.contains(app.views.ListSelect.activeClass)        else          @open(el)      else        @toggle(el)    return