PageSourceSearch

https://www.cadenaelite.es/js/validator.min.js

js cadenaelite.es collected 2026-09-24 12:00:03 UTC 6,165 bytes, 89 lines download raw bytes

1+function($){'use strict';var Validator=function(element,options){this.$element=$(element)
2this.options=options
3this.$element.attr('novalidate',!0)
4this.toggleSubmit()
5this.$element.on('input.bs.validator change.bs.validator focusout.bs.validator',$.proxy(this.validateInput,this))
6this.$element.on('submit.bs.validator',$.proxy(this.onSubmit,this))
7this.$element.find('[data-match]').each(function(){var $this=$(this)
8var target=$this.data('match')
9$(target).on('input.bs.validator',function(e){$this.val()&&$this.trigger('input')})})}
10Validator.DEFAULTS={delay:500,html:!1,disable:!0,errors:{match:'Does not match',minlength:'Not long enough'}}
11Validator.VALIDATORS={native:function($el){var el=$el[0]
12return el.checkValidity?el.checkValidity():!0},match:function($el){var target=$el.data('match')
13return!$el.val()||$el.val()===$(target).val()},minlength:function($el){var minlength=$el.data('minlength')
14return!$el.val()||$el.val().length>=minlength}}
15Validator.prototype.validateInput=function(e){var $el=$(e.target)
16var prevErrors=$el.data('bs.validator.errors')
17var errors
18if($el.is('[type="radio"]'))$el=this.$element.find('input[name="'+$el.attr('name')+'"]')
19this.$element.trigger(e=$.Event('validate.bs.validator',{relatedTarget:$el[0]}))
20if(e.isDefaultPrevented())return
21var self=this
22this.runValidators($el).done(function(errors){$el.data('bs.validator.errors',errors)
23errors.length?self.showErrors($el):self.clearErrors($el)
24if(!prevErrors||errors.toString()!==prevErrors.toString()){e=errors.length?$.Event('invalid.bs.validator',{relatedTarget:$el[0],detail:errors}):$.Event('valid.bs.validator',{relatedTarget:$el[0],detail:prevErrors})
25self.$element.trigger(e)}
26self.toggleSubmit()
27self.$element.trigger($.Event('validated.bs.validator',{relatedTarget:$el[0]}))})}
28Validator.prototype.runValidators=function($el){var errors=[]
29var validators=[Validator.VALIDATORS.native]
30var deferred=$.Deferred()
31var options=this.options
32$el.data('bs.validator.deferred')&&$el.data('bs.validator.deferred').reject()
33$el.data('bs.validator.deferred',deferred)
34function getErrorMessage(key){return $el.data(key+'-error')||$el.data('error')||key=='native'&&$el[0].validationMessage||options.errors[key]}
35$.each(Validator.VALIDATORS,$.proxy(function(key,validator){if(($el.data(key)||key=='native')&&!validator.call(this,$el)){var error=getErrorMessage(key)
36!~errors.indexOf(error)&&errors.push(error)}},this))
37if(!errors.length&&$el.val()&&$el.data('remote')){this.defer($el,function(){$.get($el.data('remote'),[$el.attr('name'),$el.val()].join('=')).fail(function(jqXHR,textStatus,error){errors.push(getErrorMessage('remote')||error)}).always(function(){deferred.resolve(errors)})})}else deferred.resolve(errors)
38return deferred.promise()}
39Validator.prototype.validate=function(){var delay=this.options.delay
40this.options.delay=0
41this.$element.find(':input').trigger('input')
42this.options.delay=delay
43return this}
44Validator.prototype.showErrors=function($el){var method=this.options.html?'html':'text'
45this.defer($el,function(){var $group=$el.closest('.form-group')
46var $block=$group.find('.help-block.with-errors')
47var errors=$el.data('bs.validator.errors')
48if(!errors.length)return
49errors=$('<ul/>').addClass('list-unstyled').append($.map(errors,function(error){return $('<li/>')[method](error)}))
50$block.data('bs.validator.originalContent')===undefined&&$block.data('bs.validator.originalContent',$block.html())
51$block.empty().append(errors)
52$group.addClass('has-error')})}
53Validator.prototype.clearErrors=function($el){var $group=$el.closest('.form-group')
54var $block=$group.find('.help-block.with-errors')
55$block.html($block.data('bs.validator.originalContent'))
56$group.removeClass('has-error')}
57Validator.prototype.hasErrors=function(){function fieldErrors(){return!!($(this).data('bs.validator.errors')||[]).length}
58return!!this.$element.find(':input:enabled').filter(fieldErrors).length}
59Validator.prototype.isIncomplete=function(){function fieldIncomplete(){return this.type==='checkbox'?!this.checked:this.type==='radio'?!$('[name="'+this.name+'"]:checked').length:$.trim(this.value)===''}
60return!!this.$element.find(':input[required]:enabled').filter(fieldIncomplete).length}
61Validator.prototype.onSubmit=function(e){this.validate()
62if(this.isIncomplete()||this.hasErrors())e.preventDefault()}
63Validator.prototype.toggleSubmit=function(){if(!this.options.disable)return
64var $btn=this.$element.find('input[type="submit"], button[type="submit"]')
65$btn.toggleClass('disabled',this.isIncomplete()||this.hasErrors()).css({'pointer-events':'all','cursor':'pointer'})}
66Validator.prototype.defer=function($el,callback){if(!this.options.delay)return callback()
67window.clearTimeout($el.data('bs.validator.timeout'))
68$el.data('bs.validator.timeout',window.setTimeout(callback,this.options.delay))}
69Validator.prototype.destroy=function(){this.$element.removeAttr('novalidate').removeData('bs.validator').off('.bs.validator')
70this.$element.find(':input').removeData(['bs.validator.errors','bs.validator.deferred','bs.validator.timeout']).off('.bs.validator')
71this.$element.find('.help-block.with-errors').each(function(){var $this=$(this)
72var originalContent=$this.data('bs.validator.originalContent')
73$this.removeData('bs.validator.originalContent').html(originalContent)})
74this.$element.find('input[type="submit"], button[type="submit"]').removeClass('disabled')
75this.$element.find('.has-error').removeClass('has-error')
76return this}
77function Plugin(option){return this.each(function(){var $this=$(this)
78var options=$.extend({},Validator.DEFAULTS,$this.data(),typeof option=='object'&&option)
79var data=$this.data('bs.validator')
80if(!data&&option=='destroy')return
81if(!data)$this.data('bs.validator',(data=new Validator(this,options)))
82if(typeof option=='string')data[option]()})}
83var old=$.fn.validator
84$.fn.validator=Plugin
85$.fn.validator.Constructor=Validator
86$.fn.validator.noConflict=function(){$.fn.validator=old
87return this}
88$(window).on('load',function(){$('form[data-toggle="validator"]').each(function(){var $form=$(this)
89Plugin.call($form,$form.data())})})}(jQuery)

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.