summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob/blob_gitignore_selector.js.coffee
blob: cc8a497d081537c3edee103f89480f9463248682 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class @BlobGitignoreSelector
  constructor: (opts) ->
    {
      @dropdown
      @editor
      @$wrapper        = @dropdown.closest('.gitignore-selector')
      @$filenameInput  = $('#file_name')
      @data           = @dropdown.data('filenames')
    } = opts

    @dropdown.glDropdown(
      data: @data,
      filterable: true,
      selectable: true,
      search:
        fields: ['name']
      clicked: @onClick
      text: (gitignore) ->
        gitignore.name
    )

    @toggleGitignoreSelector()
    @bindEvents()

  bindEvents: ->
    @$filenameInput
      .on 'keyup blur', (e) =>
        @toggleGitignoreSelector()

  toggleGitignoreSelector: ->
    filename = @$filenameInput.val() or $('.editor-file-name').text().trim()
    @$wrapper.toggleClass 'hidden', filename isnt '.gitignore'

  onClick: (item, el, e) =>
    e.preventDefault()
    @requestIgnoreFile(item.name)

  requestIgnoreFile: (name) ->
    Api.gitignoreText name, @requestIgnoreFileSuccess.bind(@)

  requestIgnoreFileSuccess: (gitignore) ->
    @editor.setValue(gitignore.content, 1)
    @editor.focus()

class @BlobGitignoreSelectors
  constructor: (opts) ->
    {
      @$dropdowns = $('.js-gitignore-selector')
      @editor
    } = opts

    @$dropdowns.each (i, dropdown) =>
      $dropdown = $(dropdown)

      new BlobGitignoreSelector(
        dropdown: $dropdown,
        editor: @editor
      )