60 lines
1.2 KiB
CoffeeScript
60 lines
1.2 KiB
CoffeeScript
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,
|
|
toggleLabel: @toggleLabel,
|
|
search:
|
|
fields: ['name']
|
|
clicked: @onClick
|
|
text: (item) ->
|
|
item.name
|
|
)
|
|
|
|
bindEvents: ->
|
|
@$input.on('keyup blur', (e) =>
|
|
@onFilenameUpdate()
|
|
)
|
|
|
|
toggleLabel: (item) ->
|
|
item.name
|
|
|
|
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()
|