$ = jQuery context = window context.JK ||= {}; context.JK.UrlValidator = class UrlValidator constructor: (input_div) -> @EVENTS = context.JK.EVENTS @rest = context.JK.Rest() @input_div = input_div @url_input = @input_div.find('input') this.show_format_status() @logger = context.JK.logger @site_status = null @spinner = @input_div.find('span.spinner-small') @checkmark = @input_div.find('.validate-checkmark') init: () => this.renderErrors({}) @spinner.hide() validator = this @url_input.bind 'blur', -> if validator.show_format_status() validator.validate_url_site() @url_input.bind 'focus', -> validator.show_format_status() url_to_validate: () => url = @url_input.val() if 0 < url.length url.substring(0,2000) else null validate_url_format: () => regexp = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ regexp.test(this.url_to_validate()) show_format_status: () => url = this.url_to_validate() yn = true if url yn = this.validate_url_format() if yn @checkmark.show() else @checkmark.hide() yn validate_url_site: () => @site_status = null @spinner.show() @checkmark.hide() @rest.validateUrlSite(this.url_to_validate()) .done(this.processSiteCheck) .fail(this.processSiteCheckFail) processSiteCheck: (response) => @spinner.hide() if 'Valid Site' == response.message @site_status = 'valid' this.renderErrors({}) else @site_status = 'invalid' this.renderErrors(response) @logger.debug("site_status = "+@site_status) processSiteCheckFail: (response) => @spinner.hide() @checkmark.hide() @logger.error("site check error") @site_status = 'invalid' renderErrors: (errors) => errdiv = @input_div.find('.error') if errmsg = context.JK.format_errors("site", errors) @checkmark.hide() errdiv.show() errdiv.html(errmsg) else @checkmark.show() errdiv.hide() errdiv.html('')