Sha256: dc4063b7234cc3b0e5e9fd9a42fc8f57de2b31b14e7b57ce4881b0414f03c67a

Contents?: true

Size: 1.79 KB

Versions: 9

Compression:

Stored size: 1.79 KB

Contents

KEY =
  UP: 38
  DOWN: 40
  ENTER: 13

class RepositorySearch

  constructor: (root) ->
    @$root = $(root)
    @$root.on('keyup', '.repository-search', @onKeyUp)
    @$root.on('click', '.show-all-repositories', (event) =>
      @$root.find('.not-matching').removeClass('not-matching')
      event.preventDefault()
    )

  onKeyUp: (event) =>
    @$items = @$root.find('[data-search]')
    switch event.keyCode
      when KEY.ENTER
        event.preventDefault()
        @goToSelectedRepository()
      when KEY.UP
        event.preventDefault()
        @selectPrevious()
      when KEY.DOWN
        event.preventDefault()
        @selectNext()
      else
        @filterResults($.trim($(event.target).val()).toLowerCase())

  filterResults: (query) ->
    if query
      for item in @$items
        $item = $(item)
        $item.toggleClass('not-matching', query not in $item.attr('data-search').toLowerCase())
      @selectFirst()
    else
      @$items.removeClass('not-matching')

  selectFirst: ->
    @$items.removeClass('selected').first(':not(.not-matching)').addClass('selected')

  selectNext: ->
    $next = @$items.filter('.selected').removeClass('selected').nextAll(':not(.not-matching)').first()
    $next = @$items.filter(':not(.not-matching)').first() unless $next.length
    $next.addClass('selected')

  selectPrevious: ->
    $previous = @$items.filter('.selected').removeClass('selected').prevAll(':not(.not-matching)').first()
    $previous = @$items.filter(':not(.not-matching)').last() unless $previous.length
    $previous.addClass('selected')

  goToSelectedRepository: ->
    if repository = @$items.filter('.selected').filter(':not(.not-matching)').find('.commits-path').attr('href')
      window.location = repository

search = new RepositorySearch(document)

jQuery ->
  $('.repository-search').focus()

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
shipit-engine-0.39.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.38.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.37.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.36.1 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.36.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.35.1 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.35.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.34.0 app/assets/javascripts/shipit/repositories_search.js.coffee
shipit-engine-0.33.0 app/assets/javascripts/shipit/repositories_search.js.coffee