summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob/template_selector.js.coffee
blob: e76e303189dcd18a222135a0134bf1772916fb7c (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
class @TemplateSelector
  constructor: (opts = {}) ->
    {
      @dropdown,
      @data,
      @pattern,
      @wrapper,
      @editor,
      @fileEndpoint,
      @$input = $('#file_name')
    } = opts

    @buildDropdown()
    @bindEvents()
    @onFilenameUpdate()

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

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

  onFilenameUpdate: ->
    return unless @$input.length

    filenameMatches = @pattern.test(@$input.val().trim())

    if not filenameMatches
      @wrapper.addClass('hidden')
      return

    @wrapper.removeClass('hidden')

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

  requestFile: (item) ->
    # To be implemented on the extending class
    # e.g.
    # Api.gitignoreText item.name, @requestFileSuccess.bind(@)

  requestFileSuccess: (file) ->
    @editor.setValue(file.content, 1)
    @editor.focus()