summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob/blob_gitignore_selector.js.coffee
blob: b413f31da00b5e5979961b1a502c524b278e9ab7 (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
59
60
61
62
class @BlobGitIgnoreSelector
  constructor: (opts) ->
    {
      @dropdown
      @editor
      @wrapper        = @dropdown.parents('.gitignore-selector')
      @fileNameInput  = $('#file_name')
      @data           = @dropdown.data('filenames')
    } = opts

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

    @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) ->
    @requestIgnoreFile(item.text)

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

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

    # Move cursor position to end of file
    row = @editor.session.getLength() - 1
    column = @editor.session.getLine(row).length
    @editor.gotoLine(row + 1, column)
    @editor.focus()

class @BlobGitIgnoreSelectors
  constructor: (opts) ->
    _this = @

    {
      @dropdowns = $('.js-gitignore-selector')
      @editor
    } = opts

    @dropdowns.each ->
      $dropdown = $(@)

      new BlobGitIgnoreSelector(
        dropdown: $dropdown,
        editor: _this.editor
      )