jam-cloud/web/app/assets/javascripts/site_validator.js.coffee

193 lines
5.1 KiB
CoffeeScript
Raw Permalink Normal View History

$ = jQuery
context = window
context.JK ||= {};
context.JK.SiteValidator = class SiteValidator
constructor: (site_type, success_callback, fail_callback, parent) ->
@EVENTS = context.JK.EVENTS
@rest = context.JK.Rest()
@site_type = site_type
@input_div = $(".site_validator."+site_type+"_validator", parent)
@data_input = @input_div.find('input')
@logger = context.JK.logger
2015-02-01 03:43:58 +00:00
@spinner = @input_div.find('span.spinner-small')
@checkmark = @input_div.find('.validate-checkmark')
this.setSiteStatus(null)
this.showFormatStatus()
@is_rec_src = false
@deferred_status_check = null
@is_validating = false
@success_callback = success_callback
@fail_callback = fail_callback
init: () =>
this.renderErrors({})
2015-02-01 03:43:58 +00:00
@spinner.hide()
validator = this
2015-02-10 07:15:56 +00:00
@data_input.on 'blur', ->
validator.didBlur()
2015-02-10 07:15:56 +00:00
@data_input.on 'focus', ->
validator.showFormatStatus()
@data_input.on 'change', ->
@site_status = null
dataToValidate: () =>
url = @data_input.val()
2015-03-26 02:20:43 +00:00
if url && 0 < url.length
url.substring(0,2000)
else
null
2015-01-31 05:22:58 +00:00
showFormatStatus: () =>
data = this.dataToValidate()
2015-01-31 08:59:25 +00:00
yn = true
if data && ('url' == @site_type || @is_rec_src)
regexp = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
yn = regexp.test(this.dataToValidate())
unless yn
2015-02-01 03:43:58 +00:00
@checkmark.hide()
yn
didBlur: () =>
if this.showFormatStatus()
this.validateSite()
2015-02-10 07:15:56 +00:00
validateSite: () =>
unless data = this.dataToValidate()
if @success_callback
@success_callback(@input_div)
return null
this.setSiteStatus(null)
2015-02-01 03:43:58 +00:00
@spinner.show()
@rest.validateUrlSite(data, @site_type)
.done(this.processSiteCheckSucceed)
.fail(this.processSiteCheckFail)
processSiteCheckSucceed: (response) =>
2015-02-01 03:43:58 +00:00
@spinner.hide()
if 'Valid Site' == response.message
this.setSiteStatus(true)
this.renderErrors({})
if @deferred_status_check
@deferred_status_check.resolve()
if @success_callback
@success_callback(@input_div)
else
this.setSiteStatus(false)
this.renderErrors(response)
if @deferred_status_check
@deferred_status_check.reject()
if @fail_callback
@fail_callback(@input_div)
@deferred_status_check = null
@logger.debug("site_status = " + @site_status)
processSiteCheckFail: (response) =>
@logger.error("site check error")
this.setSiteStatus(false)
if @deferred_status_check
@deferred_status_check.reject()
@deferred_status_check = null
setSiteStatus: (status) =>
@site_status = status
@spinner.hide()
if true == status
@checkmark.show()
else
@checkmark.hide()
siteIsValid: () =>
this.setSiteStatus(true)
siteIsInvalid: () =>
this.setSiteStatus(false)
renderErrors: (errors) =>
2015-02-10 05:47:07 +00:00
errdiv = @input_div.find('.error')
if errmsg = context.JK.format_errors("site", errors)
errdiv.show()
errdiv.html(errmsg)
else
errdiv.hide()
errdiv.html('')
state: () =>
dfr = $.Deferred()
if null == @site_status
@deferred_status_check = dfr
this.validateSite()
else
if true == @site_status
dfr.resolve()
else
dfr.reject()
return dfr.promise()
context.JK.RecordingSourceValidator = class RecordingSourceValidator extends SiteValidator
constructor: (site_type, success_callback, fail_callback, parent) ->
super(site_type, success_callback, fail_callback, parent)
@recording_sources = []
@is_rec_src = true
@add_btn = @input_div.find('a.add-recording-source')
@site_success_callback = success_callback
@site_fail_callback = fail_callback
init: (sources) =>
super()
if sources
@recording_sources = sources
@add_btn.off('click').on 'click', =>
this.attemptAdd()
processSiteCheckSucceed: (response) =>
2015-02-18 06:33:06 +00:00
super(response)
@add_btn.removeClass('disabled')
if @site_status
@recording_sources.push({ url: response.data, recording_id: response.recording_id, recording_title: response.recording_title })
if @site_success_callback
@site_success_callback(@input_div)
else
if @site_fail_callback
@site_fail_callback(@input_div)
processSiteCheckFail: (response) =>
2015-02-18 06:33:06 +00:00
super(response)
@add_btn.removeClass('disabled')
if @site_fail_callback
@site_fail_callback(@input_div)
didBlur: () =>
# do nothing, validate on add only
validateSite: () =>
@add_btn.addClass('disabled')
super()
attemptAdd: () =>
2015-02-16 01:59:16 +00:00
if data = this.dataToValidate()
unless this.containsRecordingUrl(data)
this.validateSite()
removeRecordingId: (recording_id) =>
start_len = @recording_sources.length
@recording_sources = @recording_sources.filter (src) ->
src["recording_id"] isnt recording_id.toString()
start_len != @recording_sources.length
containsRecordingUrl: (url) =>
vals = $.grep @recording_sources, (src_data) ->
src_data['url'] is url
0 < vals.length
2015-04-01 02:32:41 +00:00
recordingSources: () =>
@recording_sources