app/assets/javascripts/map/map.suggestions.js.coffee.erb
DemocraticTravelers.Map.Suggestions =
initialize: ->
$('form#suggestion').on 'submit', (e) =>
e.preventDefault()
data = $('form#suggestion').serialize()
@create(data)
fetch: ->
url = "<%= Rails.application.secrets.api_base %>suggestions/"
apiKey = $("meta[name='application-name']").attr('data-api-key')
userId = $("meta[name='application-name']").attr('data-user-id')
$.ajax url,
dataType: 'json'
beforeSend: (xhr) ->
xhr.setRequestHeader('X-API-KEY', apiKey)
xhr.setRequestHeader('X-USER-ID', userId)
DemocraticTravelers.Map.locationsLayer.clearLayers()
$('.suggestion').not('#new-suggestion').remove()
$('#map-loading:hidden').fadeIn('fast')
success: (data, callback) ->
DemocraticTravelers.Map.renderMarkers data.locations
DemocraticTravelers.Map.Experiences.renderAll data
error: (e) ->
console.log(e)
return true
complete: ->
$('#map-loading:visible').fadeOut('fast')
statusCode:
401: ->
console.log('Login is required.')
403: ->
console.log('Not authorized.')
404: ->
console.log('Dead link.')
create: (data) ->
url = "<%= Rails.application.secrets.api_base %>suggestions/"
# AJAX call to SuggestionsController#create
apiKey = $("meta[name='application-name']").attr('data-api-key')
userId = $("meta[name='application-name']").attr('data-user-id')
$.ajax url,
dataType: 'json'
type: 'POST'
data: data
beforeSend: (xhr) ->
xhr.setRequestHeader('X-API-KEY', apiKey)
xhr.setRequestHeader('X-USER-ID', userId)
success: (data, status, xhr) =>
if data.success
$('form#suggestion')[0].reset()
DemocraticTravelers.Map.searchLayer.clearLayers()
$('#new-suggestion').slideUp('fast')
@render(data)
# Google Analytics
exp = data.experiences[0]
label = "#{exp.name} at #{exp.venue} in #{exp.city}, #{exp.state}"
ga('send', 'event', 'Suggestion', 'Submit', label);
error: (e) ->
console.log(e)
# TODO: Display apology.
statusCode:
401: ->
console.log('Login is required.')
# TODO: Display error.
403: ->
console.log('Not authorized.')
# TODO: Display error.
404: ->
console.log('Dead link.')
# TODO: Display error.
render: (data) ->
DemocraticTravelers.Map.Marker.render(data.locations[0])
html = DemocraticTravelers.Map.Experiences.render(data.experiences[0])
$(html).insertAfter('#new-suggestion').hide().slideDown('fast')
if data.notice
notice = "<div class=\"notice\">#{data.notice}</div>"
$("[data-experience-id=#{data.experiences[0].slug}]").prepend(notice)
$('#map-list').on 'ajax:success', '#convert', (e, data, status, xhr) ->
$('p#suggestion-authentication').empty().html(data.greeting)
$('#sign-up, #sign-in').remove()
$(this).closest('.notice').slideUp('fast').html('Shazaam! You rock.')
.slideDown('fast')