Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
news
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sartika Aritonang
news
Commits
782b2f2e
Commit
782b2f2e
authored
May 28, 2020
by
Sartika Aritonang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
4358fd81
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
937 additions
and
0 deletions
+937
-0
jqBootstrapValidation.js
project/static/result_design/js/jqBootstrapValidation.js
+937
-0
No files found.
project/static/result_design/js/jqBootstrapValidation.js
0 → 100644
View file @
782b2f2e
/* jqBootstrapValidation
* A plugin for automating validation on Twitter Bootstrap formatted forms.
*
* v1.3.6
*
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
*
* http://ReactiveRaven.github.com/jqBootstrapValidation/
*/
(
function
(
$
)
{
var
createdElements
=
[];
var
defaults
=
{
options
:
{
prependExistingHelpBlock
:
false
,
sniffHtml
:
true
,
// sniff for 'required', 'maxlength', etc
preventSubmit
:
true
,
// stop the form submit event from firing if validation fails
submitError
:
false
,
// function called if there is an error when trying to submit
submitSuccess
:
false
,
// function called just before a successful submit event is sent to the server
semanticallyStrict
:
false
,
// set to true to tidy up generated HTML output
autoAdd
:
{
helpBlocks
:
true
},
filter
:
function
()
{
// return $(this).is(":visible"); // only validate elements you can see
return
true
;
// validate everything
}
},
methods
:
{
init
:
function
(
options
)
{
var
settings
=
$
.
extend
(
true
,
{},
defaults
);
settings
.
options
=
$
.
extend
(
true
,
settings
.
options
,
options
);
var
$siblingElements
=
this
;
var
uniqueForms
=
$
.
unique
(
$siblingElements
.
map
(
function
()
{
return
$
(
this
).
parents
(
"form"
)[
0
];
}).
toArray
()
);
$
(
uniqueForms
).
bind
(
"submit"
,
function
(
e
)
{
var
$form
=
$
(
this
);
var
warningsFound
=
0
;
var
$inputs
=
$form
.
find
(
"input,textarea,select"
).
not
(
"[type=submit],[type=image]"
).
filter
(
settings
.
options
.
filter
);
$inputs
.
trigger
(
"submit.validation"
).
trigger
(
"validationLostFocus.validation"
);
$inputs
.
each
(
function
(
i
,
el
)
{
var
$this
=
$
(
el
),
$controlGroup
=
$this
.
parents
(
".form-group"
).
first
();
if
(
$controlGroup
.
hasClass
(
"warning"
)
)
{
$controlGroup
.
removeClass
(
"warning"
).
addClass
(
"error"
);
warningsFound
++
;
}
});
$inputs
.
trigger
(
"validationLostFocus.validation"
);
if
(
warningsFound
)
{
if
(
settings
.
options
.
preventSubmit
)
{
e
.
preventDefault
();
}
$form
.
addClass
(
"error"
);
if
(
$
.
isFunction
(
settings
.
options
.
submitError
))
{
settings
.
options
.
submitError
(
$form
,
e
,
$inputs
.
jqBootstrapValidation
(
"collectErrors"
,
true
));
}
}
else
{
$form
.
removeClass
(
"error"
);
if
(
$
.
isFunction
(
settings
.
options
.
submitSuccess
))
{
settings
.
options
.
submitSuccess
(
$form
,
e
);
}
}
});
return
this
.
each
(
function
()
{
// Get references to everything we're interested in
var
$this
=
$
(
this
),
$controlGroup
=
$this
.
parents
(
".form-group"
).
first
(),
$helpBlock
=
$controlGroup
.
find
(
".help-block"
).
first
(),
$form
=
$this
.
parents
(
"form"
).
first
(),
validatorNames
=
[];
// create message container if not exists
if
(
!
$helpBlock
.
length
&&
settings
.
options
.
autoAdd
&&
settings
.
options
.
autoAdd
.
helpBlocks
)
{
$helpBlock
=
$
(
'<div class="help-block" />'
);
$controlGroup
.
find
(
'.controls'
).
append
(
$helpBlock
);
createdElements
.
push
(
$helpBlock
[
0
]);
}
// =============================================================
// SNIFF HTML FOR VALIDATORS
// =============================================================
// *snort sniff snuffle*
if
(
settings
.
options
.
sniffHtml
)
{
var
message
=
""
;
// ---------------------------------------------------------
// PATTERN
// ---------------------------------------------------------
if
(
$this
.
attr
(
"pattern"
)
!==
undefined
)
{
message
=
"Not in the expected format<!-- data-validation-pattern-message to override -->"
;
if
(
$this
.
data
(
"validationPatternMessage"
))
{
message
=
$this
.
data
(
"validationPatternMessage"
);
}
$this
.
data
(
"validationPatternMessage"
,
message
);
$this
.
data
(
"validationPatternRegex"
,
$this
.
attr
(
"pattern"
));
}
// ---------------------------------------------------------
// MAX
// ---------------------------------------------------------
if
(
$this
.
attr
(
"max"
)
!==
undefined
||
$this
.
attr
(
"aria-valuemax"
)
!==
undefined
)
{
var
max
=
(
$this
.
attr
(
"max"
)
!==
undefined
?
$this
.
attr
(
"max"
)
:
$this
.
attr
(
"aria-valuemax"
));
message
=
"Too high: Maximum of '"
+
max
+
"'<!-- data-validation-max-message to override -->"
;
if
(
$this
.
data
(
"validationMaxMessage"
))
{
message
=
$this
.
data
(
"validationMaxMessage"
);
}
$this
.
data
(
"validationMaxMessage"
,
message
);
$this
.
data
(
"validationMaxMax"
,
max
);
}
// ---------------------------------------------------------
// MIN
// ---------------------------------------------------------
if
(
$this
.
attr
(
"min"
)
!==
undefined
||
$this
.
attr
(
"aria-valuemin"
)
!==
undefined
)
{
var
min
=
(
$this
.
attr
(
"min"
)
!==
undefined
?
$this
.
attr
(
"min"
)
:
$this
.
attr
(
"aria-valuemin"
));
message
=
"Too low: Minimum of '"
+
min
+
"'<!-- data-validation-min-message to override -->"
;
if
(
$this
.
data
(
"validationMinMessage"
))
{
message
=
$this
.
data
(
"validationMinMessage"
);
}
$this
.
data
(
"validationMinMessage"
,
message
);
$this
.
data
(
"validationMinMin"
,
min
);
}
// ---------------------------------------------------------
// MAXLENGTH
// ---------------------------------------------------------
if
(
$this
.
attr
(
"maxlength"
)
!==
undefined
)
{
message
=
"Too long: Maximum of '"
+
$this
.
attr
(
"maxlength"
)
+
"' characters<!-- data-validation-maxlength-message to override -->"
;
if
(
$this
.
data
(
"validationMaxlengthMessage"
))
{
message
=
$this
.
data
(
"validationMaxlengthMessage"
);
}
$this
.
data
(
"validationMaxlengthMessage"
,
message
);
$this
.
data
(
"validationMaxlengthMaxlength"
,
$this
.
attr
(
"maxlength"
));
}
// ---------------------------------------------------------
// MINLENGTH
// ---------------------------------------------------------
if
(
$this
.
attr
(
"minlength"
)
!==
undefined
)
{
message
=
"Too short: Minimum of '"
+
$this
.
attr
(
"minlength"
)
+
"' characters<!-- data-validation-minlength-message to override -->"
;
if
(
$this
.
data
(
"validationMinlengthMessage"
))
{
message
=
$this
.
data
(
"validationMinlengthMessage"
);
}
$this
.
data
(
"validationMinlengthMessage"
,
message
);
$this
.
data
(
"validationMinlengthMinlength"
,
$this
.
attr
(
"minlength"
));
}
// ---------------------------------------------------------
// REQUIRED
// ---------------------------------------------------------
if
(
$this
.
attr
(
"required"
)
!==
undefined
||
$this
.
attr
(
"aria-required"
)
!==
undefined
)
{
message
=
settings
.
builtInValidators
.
required
.
message
;
if
(
$this
.
data
(
"validationRequiredMessage"
))
{
message
=
$this
.
data
(
"validationRequiredMessage"
);
}
$this
.
data
(
"validationRequiredMessage"
,
message
);
}
// ---------------------------------------------------------
// NUMBER
// ---------------------------------------------------------
if
(
$this
.
attr
(
"type"
)
!==
undefined
&&
$this
.
attr
(
"type"
).
toLowerCase
()
===
"number"
)
{
message
=
settings
.
builtInValidators
.
number
.
message
;
if
(
$this
.
data
(
"validationNumberMessage"
))
{
message
=
$this
.
data
(
"validationNumberMessage"
);
}
$this
.
data
(
"validationNumberMessage"
,
message
);
}
// ---------------------------------------------------------
// EMAIL
// ---------------------------------------------------------
if
(
$this
.
attr
(
"type"
)
!==
undefined
&&
$this
.
attr
(
"type"
).
toLowerCase
()
===
"email"
)
{
message
=
"Not a valid email address<!-- data-validator-validemail-message to override -->"
;
if
(
$this
.
data
(
"validationValidemailMessage"
))
{
message
=
$this
.
data
(
"validationValidemailMessage"
);
}
else
if
(
$this
.
data
(
"validationEmailMessage"
))
{
message
=
$this
.
data
(
"validationEmailMessage"
);
}
$this
.
data
(
"validationValidemailMessage"
,
message
);
}
// ---------------------------------------------------------
// MINCHECKED
// ---------------------------------------------------------
if
(
$this
.
attr
(
"minchecked"
)
!==
undefined
)
{
message
=
"Not enough options checked; Minimum of '"
+
$this
.
attr
(
"minchecked"
)
+
"' required<!-- data-validation-minchecked-message to override -->"
;
if
(
$this
.
data
(
"validationMincheckedMessage"
))
{
message
=
$this
.
data
(
"validationMincheckedMessage"
);
}
$this
.
data
(
"validationMincheckedMessage"
,
message
);
$this
.
data
(
"validationMincheckedMinchecked"
,
$this
.
attr
(
"minchecked"
));
}
// ---------------------------------------------------------
// MAXCHECKED
// ---------------------------------------------------------
if
(
$this
.
attr
(
"maxchecked"
)
!==
undefined
)
{
message
=
"Too many options checked; Maximum of '"
+
$this
.
attr
(
"maxchecked"
)
+
"' required<!-- data-validation-maxchecked-message to override -->"
;
if
(
$this
.
data
(
"validationMaxcheckedMessage"
))
{
message
=
$this
.
data
(
"validationMaxcheckedMessage"
);
}
$this
.
data
(
"validationMaxcheckedMessage"
,
message
);
$this
.
data
(
"validationMaxcheckedMaxchecked"
,
$this
.
attr
(
"maxchecked"
));
}
}
// =============================================================
// COLLECT VALIDATOR NAMES
// =============================================================
// Get named validators
if
(
$this
.
data
(
"validation"
)
!==
undefined
)
{
validatorNames
=
$this
.
data
(
"validation"
).
split
(
","
);
}
// Get extra ones defined on the element's data attributes
$
.
each
(
$this
.
data
(),
function
(
i
,
el
)
{
var
parts
=
i
.
replace
(
/
([
A-Z
])
/g
,
",$1"
).
split
(
","
);
if
(
parts
[
0
]
===
"validation"
&&
parts
[
1
])
{
validatorNames
.
push
(
parts
[
1
]);
}
});
// =============================================================
// NORMALISE VALIDATOR NAMES
// =============================================================
var
validatorNamesToInspect
=
validatorNames
;
var
newValidatorNamesToInspect
=
[];
do
// repeatedly expand 'shortcut' validators into their real validators
{
// Uppercase only the first letter of each name
$
.
each
(
validatorNames
,
function
(
i
,
el
)
{
validatorNames
[
i
]
=
formatValidatorName
(
el
);
});
// Remove duplicate validator names
validatorNames
=
$
.
unique
(
validatorNames
);
// Pull out the new validator names from each shortcut
newValidatorNamesToInspect
=
[];
$
.
each
(
validatorNamesToInspect
,
function
(
i
,
el
)
{
if
(
$this
.
data
(
"validation"
+
el
+
"Shortcut"
)
!==
undefined
)
{
// Are these custom validators?
// Pull them out!
$
.
each
(
$this
.
data
(
"validation"
+
el
+
"Shortcut"
).
split
(
","
),
function
(
i2
,
el2
)
{
newValidatorNamesToInspect
.
push
(
el2
);
});
}
else
if
(
settings
.
builtInValidators
[
el
.
toLowerCase
()])
{
// Is this a recognised built-in?
// Pull it out!
var
validator
=
settings
.
builtInValidators
[
el
.
toLowerCase
()];
if
(
validator
.
type
.
toLowerCase
()
===
"shortcut"
)
{
$
.
each
(
validator
.
shortcut
.
split
(
","
),
function
(
i
,
el
)
{
el
=
formatValidatorName
(
el
);
newValidatorNamesToInspect
.
push
(
el
);
validatorNames
.
push
(
el
);
});
}
}
});
validatorNamesToInspect
=
newValidatorNamesToInspect
;
}
while
(
validatorNamesToInspect
.
length
>
0
)
// =============================================================
// SET UP VALIDATOR ARRAYS
// =============================================================
var
validators
=
{};
$
.
each
(
validatorNames
,
function
(
i
,
el
)
{
// Set up the 'override' message
var
message
=
$this
.
data
(
"validation"
+
el
+
"Message"
);
var
hasOverrideMessage
=
(
message
!==
undefined
);
var
foundValidator
=
false
;
message
=
(
message
?
message
:
"'"
+
el
+
"' validation failed <!-- Add attribute 'data-validation-"
+
el
.
toLowerCase
()
+
"-message' to input to change this message -->"
);
$
.
each
(
settings
.
validatorTypes
,
function
(
validatorType
,
validatorTemplate
)
{
if
(
validators
[
validatorType
]
===
undefined
)
{
validators
[
validatorType
]
=
[];
}
if
(
!
foundValidator
&&
$this
.
data
(
"validation"
+
el
+
formatValidatorName
(
validatorTemplate
.
name
))
!==
undefined
)
{
validators
[
validatorType
].
push
(
$
.
extend
(
true
,
{
name
:
formatValidatorName
(
validatorTemplate
.
name
),
message
:
message
},
validatorTemplate
.
init
(
$this
,
el
)
)
);
foundValidator
=
true
;
}
}
);
if
(
!
foundValidator
&&
settings
.
builtInValidators
[
el
.
toLowerCase
()])
{
var
validator
=
$
.
extend
(
true
,
{},
settings
.
builtInValidators
[
el
.
toLowerCase
()]);
if
(
hasOverrideMessage
)
{
validator
.
message
=
message
;
}
var
validatorType
=
validator
.
type
.
toLowerCase
();
if
(
validatorType
===
"shortcut"
)
{
foundValidator
=
true
;
}
else
{
$
.
each
(
settings
.
validatorTypes
,
function
(
validatorTemplateType
,
validatorTemplate
)
{
if
(
validators
[
validatorTemplateType
]
===
undefined
)
{
validators
[
validatorTemplateType
]
=
[];
}
if
(
!
foundValidator
&&
validatorType
===
validatorTemplateType
.
toLowerCase
())
{
$this
.
data
(
"validation"
+
el
+
formatValidatorName
(
validatorTemplate
.
name
),
validator
[
validatorTemplate
.
name
.
toLowerCase
()]);
validators
[
validatorType
].
push
(
$
.
extend
(
validator
,
validatorTemplate
.
init
(
$this
,
el
)
)
);
foundValidator
=
true
;
}
}
);
}
}
if
(
!
foundValidator
)
{
$
.
error
(
"Cannot find validation info for '"
+
el
+
"'"
);
}
});
// =============================================================
// STORE FALLBACK VALUES
// =============================================================
$helpBlock
.
data
(
"original-contents"
,
(
$helpBlock
.
data
(
"original-contents"
)
?
$helpBlock
.
data
(
"original-contents"
)
:
$helpBlock
.
html
()
)
);
$helpBlock
.
data
(
"original-role"
,
(
$helpBlock
.
data
(
"original-role"
)
?
$helpBlock
.
data
(
"original-role"
)
:
$helpBlock
.
attr
(
"role"
)
)
);
$controlGroup
.
data
(
"original-classes"
,
(
$controlGroup
.
data
(
"original-clases"
)
?
$controlGroup
.
data
(
"original-classes"
)
:
$controlGroup
.
attr
(
"class"
)
)
);
$this
.
data
(
"original-aria-invalid"
,
(
$this
.
data
(
"original-aria-invalid"
)
?
$this
.
data
(
"original-aria-invalid"
)
:
$this
.
attr
(
"aria-invalid"
)
)
);
// =============================================================
// VALIDATION
// =============================================================
$this
.
bind
(
"validation.validation"
,
function
(
event
,
params
)
{
var
value
=
getValue
(
$this
);
// Get a list of the errors to apply
var
errorsFound
=
[];
$
.
each
(
validators
,
function
(
validatorType
,
validatorTypeArray
)
{
if
(
value
||
value
.
length
||
(
params
&&
params
.
includeEmpty
)
||
(
!!
settings
.
validatorTypes
[
validatorType
].
blockSubmit
&&
params
&&
!!
params
.
submitting
))
{
$
.
each
(
validatorTypeArray
,
function
(
i
,
validator
)
{
if
(
settings
.
validatorTypes
[
validatorType
].
validate
(
$this
,
value
,
validator
))
{
errorsFound
.
push
(
validator
.
message
);
}
});
}
});
return
errorsFound
;
}
);
$this
.
bind
(
"getValidators.validation"
,
function
()
{
return
validators
;
}
);
// =============================================================
// WATCH FOR CHANGES
// =============================================================
$this
.
bind
(
"submit.validation"
,
function
()
{
return
$this
.
triggerHandler
(
"change.validation"
,
{
submitting
:
true
});
}
);
$this
.
bind
(
[
"keyup"
,
"focus"
,
"blur"
,
"click"
,
"keydown"
,
"keypress"
,
"change"
].
join
(
".validation "
)
+
".validation"
,
function
(
e
,
params
)
{
var
value
=
getValue
(
$this
);
var
errorsFound
=
[];
$controlGroup
.
find
(
"input,textarea,select"
).
each
(
function
(
i
,
el
)
{
var
oldCount
=
errorsFound
.
length
;
$
.
each
(
$
(
el
).
triggerHandler
(
"validation.validation"
,
params
),
function
(
j
,
message
)
{
errorsFound
.
push
(
message
);
});
if
(
errorsFound
.
length
>
oldCount
)
{
$
(
el
).
attr
(
"aria-invalid"
,
"true"
);
}
else
{
var
original
=
$this
.
data
(
"original-aria-invalid"
);
$
(
el
).
attr
(
"aria-invalid"
,
(
original
!==
undefined
?
original
:
false
));
}
});
$form
.
find
(
"input,select,textarea"
).
not
(
$this
).
not
(
"[name=
\"
"
+
$this
.
attr
(
"name"
)
+
"
\"
]"
).
trigger
(
"validationLostFocus.validation"
);
errorsFound
=
$
.
unique
(
errorsFound
.
sort
());
// Were there any errors?
if
(
errorsFound
.
length
)
{
// Better flag it up as a warning.
$controlGroup
.
removeClass
(
"success error"
).
addClass
(
"warning"
);
// How many errors did we find?
if
(
settings
.
options
.
semanticallyStrict
&&
errorsFound
.
length
===
1
)
{
// Only one? Being strict? Just output it.
$helpBlock
.
html
(
errorsFound
[
0
]
+
(
settings
.
options
.
prependExistingHelpBlock
?
$helpBlock
.
data
(
"original-contents"
)
:
""
));
}
else
{
// Multiple? Being sloppy? Glue them together into an UL.
$helpBlock
.
html
(
"<ul role=
\"
alert
\"
><li>"
+
errorsFound
.
join
(
"</li><li>"
)
+
"</li></ul>"
+
(
settings
.
options
.
prependExistingHelpBlock
?
$helpBlock
.
data
(
"original-contents"
)
:
""
));
}
}
else
{
$controlGroup
.
removeClass
(
"warning error success"
);
if
(
value
.
length
>
0
)
{
$controlGroup
.
addClass
(
"success"
);
}
$helpBlock
.
html
(
$helpBlock
.
data
(
"original-contents"
));
}
if
(
e
.
type
===
"blur"
)
{
$controlGroup
.
removeClass
(
"success"
);
}
}
);
$this
.
bind
(
"validationLostFocus.validation"
,
function
()
{
$controlGroup
.
removeClass
(
"success"
);
});
});
},
destroy
:
function
()
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
),
$controlGroup
=
$this
.
parents
(
".form-group"
).
first
(),
$helpBlock
=
$controlGroup
.
find
(
".help-block"
).
first
();
// remove our events
$this
.
unbind
(
'.validation'
);
// events are namespaced.
// reset help text
$helpBlock
.
html
(
$helpBlock
.
data
(
"original-contents"
));
// reset classes
$controlGroup
.
attr
(
"class"
,
$controlGroup
.
data
(
"original-classes"
));
// reset aria
$this
.
attr
(
"aria-invalid"
,
$this
.
data
(
"original-aria-invalid"
));
// reset role
$helpBlock
.
attr
(
"role"
,
$this
.
data
(
"original-role"
));
// remove all elements we created
if
(
createdElements
.
indexOf
(
$helpBlock
[
0
])
>
-
1
)
{
$helpBlock
.
remove
();
}
}
);
},
collectErrors
:
function
(
includeEmpty
)
{
var
errorMessages
=
{};
this
.
each
(
function
(
i
,
el
)
{
var
$el
=
$
(
el
);
var
name
=
$el
.
attr
(
"name"
);
var
errors
=
$el
.
triggerHandler
(
"validation.validation"
,
{
includeEmpty
:
true
});
errorMessages
[
name
]
=
$
.
extend
(
true
,
errors
,
errorMessages
[
name
]);
});
$
.
each
(
errorMessages
,
function
(
i
,
el
)
{
if
(
el
.
length
===
0
)
{
delete
errorMessages
[
i
];
}
});
return
errorMessages
;
},
hasErrors
:
function
()
{
var
errorMessages
=
[];
this
.
each
(
function
(
i
,
el
)
{
errorMessages
=
errorMessages
.
concat
(
$
(
el
).
triggerHandler
(
"getValidators.validation"
)
?
$
(
el
).
triggerHandler
(
"validation.validation"
,
{
submitting
:
true
})
:
[]
);
});
return
(
errorMessages
.
length
>
0
);
},
override
:
function
(
newDefaults
)
{
defaults
=
$
.
extend
(
true
,
defaults
,
newDefaults
);
}
},
validatorTypes
:
{
callback
:
{
name
:
"callback"
,
init
:
function
(
$this
,
name
)
{
return
{
validatorName
:
name
,
callback
:
$this
.
data
(
"validation"
+
name
+
"Callback"
),
lastValue
:
$this
.
val
(),
lastValid
:
true
,
lastFinished
:
true
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
if
(
validator
.
lastValue
===
value
&&
validator
.
lastFinished
)
{
return
!
validator
.
lastValid
;
}
if
(
validator
.
lastFinished
===
true
)
{
validator
.
lastValue
=
value
;
validator
.
lastValid
=
true
;
validator
.
lastFinished
=
false
;
var
rrjqbvValidator
=
validator
;
var
rrjqbvThis
=
$this
;
executeFunctionByName
(
validator
.
callback
,
window
,
$this
,
value
,
function
(
data
)
{
if
(
rrjqbvValidator
.
lastValue
===
data
.
value
)
{
rrjqbvValidator
.
lastValid
=
data
.
valid
;
if
(
data
.
message
)
{
rrjqbvValidator
.
message
=
data
.
message
;
}
rrjqbvValidator
.
lastFinished
=
true
;
rrjqbvThis
.
data
(
"validation"
+
rrjqbvValidator
.
validatorName
+
"Message"
,
rrjqbvValidator
.
message
);
// Timeout is set to avoid problems with the events being considered 'already fired'
setTimeout
(
function
()
{
rrjqbvThis
.
trigger
(
"change.validation"
);
},
1
);
// doesn't need a long timeout, just long enough for the event bubble to burst
}
}
);
}
return
false
;
}
},
ajax
:
{
name
:
"ajax"
,
init
:
function
(
$this
,
name
)
{
return
{
validatorName
:
name
,
url
:
$this
.
data
(
"validation"
+
name
+
"Ajax"
),
lastValue
:
$this
.
val
(),
lastValid
:
true
,
lastFinished
:
true
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
if
(
""
+
validator
.
lastValue
===
""
+
value
&&
validator
.
lastFinished
===
true
)
{
return
validator
.
lastValid
===
false
;
}
if
(
validator
.
lastFinished
===
true
)
{
validator
.
lastValue
=
value
;
validator
.
lastValid
=
true
;
validator
.
lastFinished
=
false
;
$
.
ajax
({
url
:
validator
.
url
,
data
:
"value="
+
value
+
"&field="
+
$this
.
attr
(
"name"
),
dataType
:
"json"
,
success
:
function
(
data
)
{
if
(
""
+
validator
.
lastValue
===
""
+
data
.
value
)
{
validator
.
lastValid
=
!!
(
data
.
valid
);
if
(
data
.
message
)
{
validator
.
message
=
data
.
message
;
}
validator
.
lastFinished
=
true
;
$this
.
data
(
"validation"
+
validator
.
validatorName
+
"Message"
,
validator
.
message
);
// Timeout is set to avoid problems with the events being considered 'already fired'
setTimeout
(
function
()
{
$this
.
trigger
(
"change.validation"
);
},
1
);
// doesn't need a long timeout, just long enough for the event bubble to burst
}
},
failure
:
function
()
{
validator
.
lastValid
=
true
;
validator
.
message
=
"ajax call failed"
;
validator
.
lastFinished
=
true
;
$this
.
data
(
"validation"
+
validator
.
validatorName
+
"Message"
,
validator
.
message
);
// Timeout is set to avoid problems with the events being considered 'already fired'
setTimeout
(
function
()
{
$this
.
trigger
(
"change.validation"
);
},
1
);
// doesn't need a long timeout, just long enough for the event bubble to burst
}
});
}
return
false
;
}
},
regex
:
{
name
:
"regex"
,
init
:
function
(
$this
,
name
)
{
return
{
regex
:
regexFromString
(
$this
.
data
(
"validation"
+
name
+
"Regex"
))
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
!
validator
.
regex
.
test
(
value
)
&&
!
validator
.
negative
)
||
(
validator
.
regex
.
test
(
value
)
&&
validator
.
negative
);
}
},
required
:
{
name
:
"required"
,
init
:
function
(
$this
,
name
)
{
return
{};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
!!
(
value
.
length
===
0
&&
!
validator
.
negative
)
||
!!
(
value
.
length
>
0
&&
validator
.
negative
);
},
blockSubmit
:
true
},
match
:
{
name
:
"match"
,
init
:
function
(
$this
,
name
)
{
var
element
=
$this
.
parents
(
"form"
).
first
().
find
(
"[name=
\"
"
+
$this
.
data
(
"validation"
+
name
+
"Match"
)
+
"
\"
]"
).
first
();
element
.
bind
(
"validation.validation"
,
function
()
{
$this
.
trigger
(
"change.validation"
,
{
submitting
:
true
});
});
return
{
"element"
:
element
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
value
!==
validator
.
element
.
val
()
&&
!
validator
.
negative
)
||
(
value
===
validator
.
element
.
val
()
&&
validator
.
negative
);
},
blockSubmit
:
true
},
max
:
{
name
:
"max"
,
init
:
function
(
$this
,
name
)
{
return
{
max
:
$this
.
data
(
"validation"
+
name
+
"Max"
)
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
parseFloat
(
value
,
10
)
>
parseFloat
(
validator
.
max
,
10
)
&&
!
validator
.
negative
)
||
(
parseFloat
(
value
,
10
)
<=
parseFloat
(
validator
.
max
,
10
)
&&
validator
.
negative
);
}
},
min
:
{
name
:
"min"
,
init
:
function
(
$this
,
name
)
{
return
{
min
:
$this
.
data
(
"validation"
+
name
+
"Min"
)
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
parseFloat
(
value
)
<
parseFloat
(
validator
.
min
)
&&
!
validator
.
negative
)
||
(
parseFloat
(
value
)
>=
parseFloat
(
validator
.
min
)
&&
validator
.
negative
);
}
},
maxlength
:
{
name
:
"maxlength"
,
init
:
function
(
$this
,
name
)
{
return
{
maxlength
:
$this
.
data
(
"validation"
+
name
+
"Maxlength"
)
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
((
value
.
length
>
validator
.
maxlength
)
&&
!
validator
.
negative
)
||
((
value
.
length
<=
validator
.
maxlength
)
&&
validator
.
negative
);
}
},
minlength
:
{
name
:
"minlength"
,
init
:
function
(
$this
,
name
)
{
return
{
minlength
:
$this
.
data
(
"validation"
+
name
+
"Minlength"
)
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
((
value
.
length
<
validator
.
minlength
)
&&
!
validator
.
negative
)
||
((
value
.
length
>=
validator
.
minlength
)
&&
validator
.
negative
);
}
},
maxchecked
:
{
name
:
"maxchecked"
,
init
:
function
(
$this
,
name
)
{
var
elements
=
$this
.
parents
(
"form"
).
first
().
find
(
"[name=
\"
"
+
$this
.
attr
(
"name"
)
+
"
\"
]"
);
elements
.
bind
(
"click.validation"
,
function
()
{
$this
.
trigger
(
"change.validation"
,
{
includeEmpty
:
true
});
});
return
{
maxchecked
:
$this
.
data
(
"validation"
+
name
+
"Maxchecked"
),
elements
:
elements
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
validator
.
elements
.
filter
(
":checked"
).
length
>
validator
.
maxchecked
&&
!
validator
.
negative
)
||
(
validator
.
elements
.
filter
(
":checked"
).
length
<=
validator
.
maxchecked
&&
validator
.
negative
);
},
blockSubmit
:
true
},
minchecked
:
{
name
:
"minchecked"
,
init
:
function
(
$this
,
name
)
{
var
elements
=
$this
.
parents
(
"form"
).
first
().
find
(
"[name=
\"
"
+
$this
.
attr
(
"name"
)
+
"
\"
]"
);
elements
.
bind
(
"click.validation"
,
function
()
{
$this
.
trigger
(
"change.validation"
,
{
includeEmpty
:
true
});
});
return
{
minchecked
:
$this
.
data
(
"validation"
+
name
+
"Minchecked"
),
elements
:
elements
};
},
validate
:
function
(
$this
,
value
,
validator
)
{
return
(
validator
.
elements
.
filter
(
":checked"
).
length
<
validator
.
minchecked
&&
!
validator
.
negative
)
||
(
validator
.
elements
.
filter
(
":checked"
).
length
>=
validator
.
minchecked
&&
validator
.
negative
);
},
blockSubmit
:
true
}
},
builtInValidators
:
{
email
:
{
name
:
"Email"
,
type
:
"shortcut"
,
shortcut
:
"validemail"
},
validemail
:
{
name
:
"Validemail"
,
type
:
"regex"
,
regex
:
"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+
\\\
.[A-Za-z]{2,4}"
,
message
:
"Not a valid email address<!-- data-validator-validemail-message to override -->"
},
passwordagain
:
{
name
:
"Passwordagain"
,
type
:
"match"
,
match
:
"password"
,
message
:
"Does not match the given password<!-- data-validator-paswordagain-message to override -->"
},
positive
:
{
name
:
"Positive"
,
type
:
"shortcut"
,
shortcut
:
"number,positivenumber"
},
negative
:
{
name
:
"Negative"
,
type
:
"shortcut"
,
shortcut
:
"number,negativenumber"
},
number
:
{
name
:
"Number"
,
type
:
"regex"
,
regex
:
"([+-]?
\\\
d+(
\\\
.
\\\
d*)?([eE][+-]?[0-9]+)?)?"
,
message
:
"Must be a number<!-- data-validator-number-message to override -->"
},
integer
:
{
name
:
"Integer"
,
type
:
"regex"
,
regex
:
"[+-]?
\\\
d+"
,
message
:
"No decimal places allowed<!-- data-validator-integer-message to override -->"
},
positivenumber
:
{
name
:
"Positivenumber"
,
type
:
"min"
,
min
:
0
,
message
:
"Must be a positive number<!-- data-validator-positivenumber-message to override -->"
},
negativenumber
:
{
name
:
"Negativenumber"
,
type
:
"max"
,
max
:
0
,
message
:
"Must be a negative number<!-- data-validator-negativenumber-message to override -->"
},
required
:
{
name
:
"Required"
,
type
:
"required"
,
message
:
"This is required<!-- data-validator-required-message to override -->"
},
checkone
:
{
name
:
"Checkone"
,
type
:
"minchecked"
,
minchecked
:
1
,
message
:
"Check at least one option<!-- data-validation-checkone-message to override -->"
}
}
};
var
formatValidatorName
=
function
(
name
)
{
return
name
.
toLowerCase
()
.
replace
(
/
(
^|
\s)([
a-z
])
/g
,
function
(
m
,
p1
,
p2
)
{
return
p1
+
p2
.
toUpperCase
();
}
);
};
var
getValue
=
function
(
$this
)
{
// Extract the value we're talking about
var
value
=
$this
.
val
();
var
type
=
$this
.
attr
(
"type"
);
if
(
type
===
"checkbox"
)
{
value
=
(
$this
.
is
(
":checked"
)
?
value
:
""
);
}
if
(
type
===
"radio"
)
{
value
=
(
$
(
'input[name="'
+
$this
.
attr
(
"name"
)
+
'"]:checked'
).
length
>
0
?
value
:
""
);
}
return
value
;
};
function
regexFromString
(
inputstring
)
{
return
new
RegExp
(
"^"
+
inputstring
+
"$"
);
}
/**
* Thanks to Jason Bunting via StackOverflow.com
*
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
* Short link: http://tinyurl.com/executeFunctionByName
**/
function
executeFunctionByName
(
functionName
,
context
/*, args*/
)
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
).
splice
(
2
);
var
namespaces
=
functionName
.
split
(
"."
);
var
func
=
namespaces
.
pop
();
for
(
var
i
=
0
;
i
<
namespaces
.
length
;
i
++
)
{
context
=
context
[
namespaces
[
i
]];
}
return
context
[
func
].
apply
(
this
,
args
);
}
$
.
fn
.
jqBootstrapValidation
=
function
(
method
)
{
if
(
defaults
.
methods
[
method
])
{
return
defaults
.
methods
[
method
].
apply
(
this
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
else
if
(
typeof
method
===
'object'
||
!
method
)
{
return
defaults
.
methods
.
init
.
apply
(
this
,
arguments
);
}
else
{
$
.
error
(
'Method '
+
method
+
' does not exist on jQuery.jqBootstrapValidation'
);
return
null
;
}
};
$
.
jqBootstrapValidation
=
function
(
options
)
{
$
(
":input"
).
not
(
"[type=image],[type=submit]"
).
jqBootstrapValidation
.
apply
(
this
,
arguments
);
};
})(
jQuery
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment