123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- Spine = require('spine/core')
- $ = Spine.$
- templates = require('duality/templates')
- Site = require('models/site')
- KEYCODE_ENTER = 13
- KEYCODE_ESC = 27
- class FilterBox extends Spine.Controller
- className: 'filter-box'
- constructor: ->
- super
- @siteId = ''
- @query = ''
- @sortBy = ''
- Site.bind 'change refresh', @render
- render: =>
- context =
- sites: Site.all().sort(Site.alphaSort)
- @html templates.render('filter-box.html', {}, context)
- @siteId = ''
- @query = ''
- @setup()
- @filter()
- @
- setup: ->
- @filterInput = $(@el).find('input.filter-input')
- @filterClear = $(@el).find('.clear-filter')
- @selectedSite = $(@el).find('.selected-site')
- @siteSelector = $(@el).find('ul.site-selector')
- @sortBySelector = $(@el).find('input[name=sort-by]')
- @sortBySelector.on 'change', (e) =>
- @filter()
-
- @filterInput.on 'keyup', (e) =>
- if e.keyCode is KEYCODE_ESC
- @clear()
- else if e.keyCode is KEYCODE_ENTER
- @filter()
- else
- @filter()
- @filterClear.on 'click', (e) =>
- @clear()
-
- @selectedSite.on 'click', (e) =>
- e.stopPropagation()
- @siteSelector.toggle()
- $('html').on 'click', (e) =>
- @siteSelector.hide()
-
- @siteSelector.find('li').on 'click', (e) =>
- $item = $(e.currentTarget)
- @changeSite($item)
- @filter()
- changeSite: ($item) ->
- @selectedSite.find('> span').html($item.html()).attr('class', $item.attr('class'))
- @siteId = $item.attr('data-id')
- @siteSelector
- .hide()
- .scrollTop(0)
- .children()
- .removeClass('selected')
- $item.addClass('selected')
- clear: ->
- @filterInput.val('')
- @filter()
- reset: =>
- $item = @siteSelector.children().first()
- @changeSite($item)
- @clear()
- filter: =>
- @query = $.trim(@filterInput.val())
- if @query
- @filterClear.addClass('active')
- else
- @filterClear.removeClass('active')
- @sortBy = @sortBySelector.filter(':checked').val()
- Spine.trigger 'filterbox:change',
- query: @query
- siteId: @siteId
- sortBy: @sortBy
- module.exports = FilterBox
|