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