File: //home/plan4ev/public_html/wp-content/plugins/caldera-forms/assets/js/caldera-forms-front.js
/*! GENERATED SOURCE FILE caldera-forms - v1.9.7 - 2022-03-22 */var resBaldrickTriggers;
jQuery(function($){
function fieldErrors(fields, $form, $notice) {
for (var i in fields) {
var field = $form.find('[data-field="' + i + '"]'),
wrap = field.parent();
if (!field.length) {
$notice.html('<p class="alert alert-danger ">' + fields[i] + '</p>');
} else {
if (wrap.is('label')) {
wrap = wrap.parent();
if (wrap.hasClass('checkbox') || wrap.hasClass('radio')) {
wrap = wrap.parent();
}
}
var has_block = wrap.find('.help-block').not('.caldera_ajax_error_block');
wrap.addClass('has-error').addClass('caldera_ajax_error_wrap');
if (has_block.length) {
has_block.hide();
}
wrap.append('<span class="help-block caldera_ajax_error_block">' + fields[i] + '</span>');
}
}
}
var cf_upload_queue = [];
// admin stuff!
var cf_push_file_upload = function( form, file_number, data ){
var progress = jQuery('#progress-file-' + file_number ),
filesize = jQuery('.' + file_number + ' .file-size');
cf_upload_queue.push(1);
cf_uploader_filelist[ file_number ].state = 2;
jQuery.ajax({
xhr: function(){
var xhr = new window.XMLHttpRequest();
//Upload progress
xhr.upload.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = ( evt.loaded / evt.total ) * 100;
progress.width( percentComplete + '%' );
filesize.html( size_format(evt.loaded) + ' / ' + size_format( evt.total ) );
}
}, false);
//Download progress
xhr.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
//Do something with download progress
}
}, false);
return xhr;
},
url : form.data('request') + "/upload/",
type: "POST",
data : data,
processData: false,
contentType: false,
success:function(data, textStatus, jqXHR){
if( data.success && data.success === true ){
cf_upload_queue.pop();
var file_remover = jQuery('[data-file="' + file_number + '"]');
file_remover.next().addClass('file-uploaded');
file_remover.remove();
cf_uploader_filelist[ file_number ].state = 3;
form.submit();
}else if( data.data && !data.success ){
//show error
jQuery('.' + file_number ).addClass('has-error');
form.find(':submit').prop('disabled',false);
form.find('.cf-uploader-trigger').slideDown();
jQuery('.' + file_number +' .file-error' ).html( data.data );
return;
}
},
error: function(jqXHR, textStatus, errorThrown){
//if fails - push error
if( !form.data( 'postDisable' ) ){
buttons.prop('disabled',false);
}
}
});
}
// Baldrick Bindings
resBaldrickTriggers = function(){
var trackedElements = {};
/**
* Get Element for notices
*
* @since 1.5.x
*
* @param obj
* @returns {*|jQuery|HTMLElement}
*/
var getNoticeEl = function(obj) {
return jQuery('#caldera_notices_' + obj.params.trigger.data('instance'));
};
/**
* Get breadcrumbs Element
*
* @since 1.6.0
*
* @param obj
* @returns {*|jQuery|HTMLElement}
*/
var getBreadCrumbsEl = function (obj) {
return jQuery('#caldera-forms-breadcrumb_' + obj.params.trigger.data('instance'));
};
/**
* Show breadcrumbs if possible
*
* @since 1.6.0
*
* @param obj
*/
var maybeShowBreadCrumbs = function (obj) {
var $breadcrumbs = getBreadCrumbsEl(obj);
if ($breadcrumbs.length) {
$breadcrumbs.show().attr('aria-hidden', false).css('visibility', 'visible');
}
};
/**
* Show breadcrumbs if possible
*
* @since 1.6.0
*
* @param obj
*/
var maybeHideBreadCrumbs = function (obj) {
var $breadcrumbs = getBreadCrumbsEl(obj);
if ($breadcrumbs.length) {
$breadcrumbs.show().attr('aria-hidden', true ).css('visibility', 'hidden');
}
};
jQuery('.cfajax-trigger').baldrick({
request : './',
method : 'POST',
init : function(el, ev){
ev.preventDefault();
var $form = jQuery(el),
buttons = $form.find(':submit');
var pending = [];
var fieldsBlocking = [];
/**
* This event is triggered directly before the request for form submission is made
*
* Runs after cf.form.submit
*
* @since 1.8.0
*/
jQuery( document ).trigger( 'cf.ajax.request', {
$form: $form,
formIdAttr: $form.attr( 'id' ),
displayFieldErrors:fieldErrors,
fieldsBlocking: fieldsBlocking,
$notice: jQuery( '#caldera_notices_' + $form.data( 'instance' ) )
});
//Check if any cf2 fields are blocking submit
if( 'object' === typeof window.cf2 ){
var cf2 = window.cf2[ $form.attr( 'id' ) ];
}
if( 'object' === typeof cf2 ){
if( cf2.hasOwnProperty( 'pending' ) && 0 !== cf2.pending.length ){
return false;
}
if( cf2.hasOwnProperty( 'fieldsBlocking' ) && 0 !== cf2.fieldsBlocking.length ){
return false;
}
}
if( $form.data('_cf_manual') ){
$form.find('[name="cfajax"]').remove();
return false;
}
if( !$form.data( 'postDisable' ) ){
buttons.prop('disabled',true);
}
if( typeof cf_uploader_filelist === 'object' ){
// verify required
$form.find('.cf-uploader-trigger').slideUp();
// setup file uploader
var has_files = false;
var count = cf_upload_queue.length;
for( var file in cf_uploader_filelist ){
if( cf_uploader_filelist[ file ].state > 1 || cf_uploader_filelist[ file ].state === 0 ){
// state 2 and 3 is transferring and complete, state 0 is error and dont upload
continue;
}
has_files = true;
var data = new FormData(),
file_number = file,
field = jQuery('#' + file_number.split('_file_')[0] );
data.append( field.data('field'), cf_uploader_filelist[ file ].file );
data.append( 'field', field.data('field') );
data.append( 'control', field.data('controlid') );
cf_push_file_upload( $form, file_number, data );
field.val('');//@see https://github.com/CalderaWP/Caldera-Forms/issues/2514#issuecomment-395213433
field.attr('type','hidden');
field.val(field.data('controlid'));
count++;
if( count === 1 ){
break;
}
}
if( true === has_files || cf_upload_queue.length ){
return false;
}
}
},
error : function( obj ){
if( obj.jqxhr.status === 404){
this.trigger.data('_cf_manual', true ).trigger('submit');
}else{
var $notice = getNoticeEl(obj);
if( obj.jqxhr.responseJSON.data.html ){
$notice.html (obj.jqxhr.responseJSON.data.html );
jQuery('html,body').animate({
scrollTop: $notice.offset().top - $notice.outerHeight()
}, 300 );
}
}
},
callback : function(obj){
obj.params.trigger.find(':submit').prop('disabled',false);
var $notice = getNoticeEl( obj );
// run callback if set.
if( obj.params.trigger.data('customCallback') && typeof window[obj.params.trigger.data('customCallback')] === 'function' ){
window[obj.params.trigger.data('customCallback')](obj.data);
}
if( !obj.params.trigger.data('inhibitnotice') ){
jQuery('.caldera_ajax_error_wrap').removeClass('caldera_ajax_error_wrap').removeClass('has-error');
jQuery('.caldera_ajax_error_block').remove();
if(obj.data.status === 'complete' || obj.data.type === 'success'){
maybeHideBreadCrumbs(obj);
if(obj.data.html){
obj.params.target.html(obj.data.html);
}
if(obj.params.trigger.data('hiderows')){
obj.params.trigger.find('div.row').remove();
}
}else if(obj.data.status === 'preprocess'){
maybeShowBreadCrumbs(obj);
obj.params.target.html(obj.data.html);
}else if(obj.data.status === 'error'){
maybeShowBreadCrumbs(obj);
obj.params.target.html(obj.data.html);
}
}
// hit reset
if( ( obj.data.status === 'complete' || obj.data.type === 'success' ) && !obj.data.entry ){
obj.params.trigger[0].reset();
}
// do a redirect if set
if(obj.data.url){
obj.params.trigger.hide();
window.location = obj.data.url;
}
// show trigger
obj.params.trigger.find('.cf-uploader-trigger').slideDown();
if(obj.data.fields){
var $form = obj.params.trigger;
var fields = obj.data.fields;
fieldErrors(fields, $form, $notice);
}
if ( 'undefined' != obj.data.scroll ) {
var el = document.getElementById( obj.data.scroll );
if ( null != el ) {
var $scrollToEl = jQuery( el );
jQuery('html,body').animate({
scrollTop: $scrollToEl.offset().top - $scrollToEl.outerHeight() - 12
}, 300);
}
}
// trigger global event
jQuery( document ).trigger( 'cf.submission', obj );
jQuery( document ).trigger( 'cf.' + obj.data.type );
}
});
};
resBaldrickTriggers();
});
var calders_forms_check_conditions, calders_forms_init_conditions;
jQuery(function($){
/**
* Stores field values before hiding with conditional logic
*
* @since 1.5.0.7
*
* @type {{}}
*/
var fieldVals = {};
/**
* Tracks fields that are set to "unsync" and have been hidden
*
* @since 1.6.0
*
* @type {{}}
*/
var unsynced = {};
// IE8 compatibility
if (!Array.prototype.indexOf){
Array.prototype.indexOf = function(elt /*, from*/){
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++){
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
cf_debounce = function(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
calders_forms_check_conditions = function( inst_id ){
if( typeof caldera_conditionals === "undefined" || typeof caldera_conditionals[inst_id] === "undefined"){
return;
}
var $form = $( document.getElementById( inst_id ) );
var state = getStateObj( inst_id );
/**
* Reset field value after its unhidden
*
* @since 1.5.0.7
*
* @param field Field ID
* @param state {CFState} @since 1.5.3
*/
function resetValue( field, state ){
var val = getSavedFieldValue( field );
var $field;
if( undefined != val ){
if( 'object' == typeof val ){
for( var id in val ){
if( true === val[id] ){
$field = $( document.getElementById( id ) );
$field.prop( 'checked', true );
}
}
}else{
$field = $( '#' + field );
$field.val( val );
}
}
if( null !== state ){
state.rebind(field);
if( undefined === $field ){
$field = $( '#' + field );
}
if( unsynced.hasOwnProperty( field ) ){
$field.attr( 'data-unsync', '1' );
$field.removeAttr( 'data-sync' );
$field.removeAttr( 'data-binds' );
}
if ( undefined !== $field && $field.data( 'sync' ) ) {
new CalderaFormsFieldSync($field, $field.data('binds'), $form, $, state);
}
}
}
/**
* Reset field value before its unhidden
*
* @since 1.5.0.7
*
* @param field Field ID
* @param state {CFState} @since 1.5.3
*
* @return mixed saved value @since 1.8.0
*/
function saveFieldValue(field,state) {
var $field = $( document.getElementById( field ) );
if( $field.length ){
var val = $field.val();
if( val ){
fieldVals[ field ] = val;
}
}else{
var $el;
$field = $( '.' + field );
fieldVals[ field ] = {};
$field.each( function( i, el ){
$el = $( el );
if( $el.prop( 'checked' ) ){
fieldVals[ field ][ $el.attr( 'id' ) ] = true;
}else{
fieldVals[ field ][ $el.attr( 'id' ) ] = false;
}
});
}
if( $field.data( 'unsync' ) ){
unsynced[ field ] = true;
}
//remove from state
if ( null !== state ) {
state.unbind(field);
}
return fieldVals[ field ];
}
/**
* Get saved field value
*
* @since 1.5.0.7
*
* @param field Field ID
*
* @returns {*}
*/
function getSavedFieldValue( field ){
if(fieldVals[ field ] ){
return fieldVals[ field ];
}
}
for( var field in caldera_conditionals[ inst_id ] ){
// each conditional
var fieldwrapper = jQuery('#conditional_' + field);
if(!fieldwrapper.length){
continue;
}
var type = caldera_conditionals[ inst_id ][field].type,
groups = caldera_conditionals[ inst_id ][field].group,
trues = [];
// has a wrapper - bind conditions
for(var id in groups){
var truelines = {},
lines = groups[id];
// go over each line in a group to find a false
for(var lid in lines){
/// get field
var compareelement = $form.find('[data-field="' + lines[lid].field + '"]'),
comparefield = [],
comparevalue = (typeof lines[lid].value === 'function' ? lines[lid].value() : lines[lid].value);
if( typeof lines[lid].selectors !== 'undefined' ){
for( var selector in lines[lid].selectors ){
var re = new RegExp( selector ,"g");
comparevalue = comparevalue.replace( re, $( lines[lid].selectors[ selector ] ).val() );
}
}
truelines[lid] = false;
if( compareelement.is(':radio,:checkbox') ){
compareelement = compareelement.filter(':checked');
}else if( compareelement.is('div')){
compareelement = jQuery('<input>').val( compareelement.html() );
}else if ( ! compareelement.length ){
var _calc = $form.find('[data-calc-field="' + lines[lid].field + '"]');
if( _calc.length ){
compareelement = $form.find('[data-calc-field="' + lines[lid].field + '"]');
}
}
if(!compareelement.length){
comparefield.push(lines[lid].field);
}else{
for( var i = 0; i<compareelement.length; i++){
comparefield.push(compareelement[i].value);
}
}
switch(lines[lid].compare) {
case 'is':
if(comparefield.length){
if(comparefield.indexOf(comparevalue.toString()) >= 0){
truelines[lid] = true;
}
}
break;
case 'isnot':
if(comparefield.length){
if(comparefield.indexOf(comparevalue) < 0){
truelines[lid] = true;
}
}
break;
case '>':
case 'greater':
truelines[lid] = parseFloat( comparefield.reduce(function(a, b) {return a + b;}) ) > parseFloat( comparevalue );
break;
case '<':
case 'smaller':
truelines[lid] = parseFloat( comparefield.reduce(function(a, b) {return a + b;}) ) < parseFloat( comparevalue );
break;
case 'startswith':
for( var i = 0; i<comparefield.length; i++){
if( comparefield[i].toLowerCase().substr(0, comparevalue.toLowerCase().length ) === comparevalue.toLowerCase()){
truelines[lid] = true;
}
}
break;
case 'endswith':
for( var i = 0; i<comparefield.length; i++){
if( comparefield[i].toLowerCase().substr(comparefield[i].toLowerCase().length - comparevalue.toLowerCase().length ) === comparevalue.toLowerCase()){
truelines[lid] = true;
}
}
break;
case 'contains':
for( var i = 0; i<comparefield.length; i++){
if( comparefield[i].toLowerCase().indexOf( comparevalue ) >= 0 ){
truelines[lid] = true;
}
}
break;
}
}
// add result in
istrue = true;
for( var prop in truelines ){
if(truelines[prop] === false){
istrue = false;
break;
}
}
trues.push(istrue);
}
var template = jQuery('#conditional-' + field + '-tmpl').html(),
target = jQuery('#conditional_' + field),
target_field= jQuery('[data-field="' + field + '"]'),
action;
if(trues.length && trues.indexOf(true) >= 0){
if(type === 'show'){
action = 'show';
}else if (type === 'hide'){
action = 'hide';
}else if (type === 'disable'){
action = 'disable';
}
}else{
if(type === 'show'){
action = 'hide';
}else if (type === 'disable'){
action = 'enable';
}else{
action = 'show';
}
}
if(action === 'show'){
// show - get template and place it in.
if(!target.html().length){
target.html(template).trigger('cf.add', {
field: field,
});
jQuery(document).trigger('cf.add',{
field: field,
});
resetValue( field, state );
}
emitConditionalEvent('show', field, inst_id );
}else if (action === 'hide'){
if(target.html().length){
saveFieldValue( field, state );
target_field.val('').empty().prop('checked', false);
target.empty().trigger('cf.remove',{
field: field,
});
jQuery(document).trigger('cf.remove',{
field: field,
});
}
emitConditionalEvent('hide', field, inst_id );
}else if ('enable' === action || 'disable' === action ){
var dField = jQuery( '#' + field );
if( 'enable' == action ){
if(!target.html().length){
target.html(template).trigger('cf.add',{
field: field,
});
jQuery(document).trigger('cf.add').trigger('cf.enable', {
field: field,
});
dField.prop('disabled', false);
}else{
dField.prop('disabled', false);
}
emitConditionalEvent('enable', field, inst_id );
}else {
if (!target.html().length) {
target.html(template).trigger('cf.remove');
jQuery(document).trigger('cf.remove',{
field: field,
})
.trigger('cf.disable', {
field: field,
});
dField.prop('disabled', 'disabled', {
field: field,
});
} else {
dField.prop('disabled', 'disabled',{
field: field,
});
}
emitConditionalEvent('disable', field, inst_id );
}
}
}
/**
* Get the CFState object by form ID
*
* @since 1.5.3
*
* @param {String} formId Form ID
* @returns {CFState|null}
*/
function getStateObj( formId ) {
if( 'object' === typeof window.cfstate && window.cfstate.hasOwnProperty(formId) ){
return window.cfstate[formId];
}
return null;
}
function emitConditionalEvent(eventName,field,formId){
function createEventName(){
return 'cf.conditionals.' + eventName;
}
var state = getStateObj(formId);
if( state ){
state.events().emit(createEventName(), {
fieldIdAttr: field,
formIdAttr: formId,
eventType: eventName,
fieldValue: getSavedFieldValue(field)
} );
}
}
};
calders_forms_init_conditions = function(){
jQuery('.caldera_forms_form').on('change keyup', '[data-field]', cf_debounce( function(e){
var form = $(this).closest('.caldera_forms_form').prop('id');
calders_forms_check_conditions( form );
}, 10 ) );
};
if(typeof caldera_conditionals !== 'undefined'){
calders_forms_init_conditions();
jQuery('.caldera_forms_form').find('[data-field]').first().trigger('change');
};
});
/**
* Simple event bindings for form state
*
* In general, access through CFState.events() not directly.
*
* @since 1.5.3
*
* @param state {CFState} State object to subscribe to
* @constructor
*/
function CFEvents(state) {
var events = {};
/**
* Attach an event (add_action)
*
* @since 1.5.3
*
* @param id {String} Any string, but generally input ID
* @param callback {Function} The callback function
*/
this.subscribe = function (id, callback) {
if (!hasEvents(id)) {
events[id] = [];
}
events[id].push(callback);
};
/**
* Trigger an event (do_action)
*
* @since 1.5.3
*
* @param id {String} Any string, but generally input ID
* @param value {*} The value to pass to callback
*/
this.trigger = function (id, value) {
if (!hasEvents(id)) {
return;
}
events[id].forEach(function (callback) {
if(typeof value === 'undefined'){
value = state.getState(id);
}
callback(id, value);
});
};
this.emit = function (eventName, payload) {
if (!hasEvents(eventName)) {
return;
}
events[eventName].forEach(function (callback) {
callback(payload,eventName);
});
};
/**
* Detach a bound event (remove_action)
*
* @since 1.5.3
*
* @param id {String} Any string, but generally input ID
* @param callback {Function|null} The callback function you wish to detatch or null to detach all events.
*/
this.detach = function(id,callback){
if( hasEvents(id)){
if( null === callback ){
delete events[id];
}else{
for (var key in events[id]) {
if (callback === key) {
events[id].splice(key, 1);
}
}
}
}
};
/**
* Check if there are events attatched to an identifier
*
* @since 1.5.23
*
*
* @param id {String} Identifying string
* @returns {boolean}
*/
function hasEvents(id) {
return events.hasOwnProperty(id);
}
}
/**
* State management for front-end
*
* @since 1.5.3
*
* @param formId {String} ID of form this is tracking state for.
* @param $ {jquery} jQuery
*
* @constructor
*/
function CFState(formId, $ ){
var
self = this,
fields = {},
events = new CFEvents(this),
unBound = {},
fieldVals = {},
calcVals = {};
/**
* Initialized ( or re-initialize) state with specific fields.
*
* @since 1.5.3
*
* @param formFields {Object} Should be flat field ID attribute : Field default
*/
this.init = function (formFields, calcDefaults) {
for ( var id in formFields ){
if( 'object' === typeof calcDefaults[id] ){
if( 'calculation' == calcDefaults[id].type ){
bindCalcField(id,calcDefaults[id])
}
}else if( bindField(id)){
fieldVals[id] = formFields[id];
if( calcDefaults.hasOwnProperty(id) ){
calcVals[id] = calcDefaults[id];
}else{
calcVals[id] = null;
}
}else{
fieldVals[id] = '';
unBound[id] = true;
calcVals[id] = null;
}
}
};
/**
* Get current state for a field
*
* @since 1.5.3
*
* @param id {String} Field id attribute
* @returns {String|Array}
*/
this.getState = function(id){
if( ! inState(id) ){
return false;
}
return fieldVals[id];
};
/**
*Get calculation value for a field
*
* @since 1.5.6
*
* @param id {String} Field id attribute
* @param highest {Boolean}
* @returns {float}
*/
this.getCalcValue = function (id,highest) {
var val = 0;
if (! inState( id )) {
return val;
}
if( highest ){
highest = 0;
var value = highest,
$item;
$( '#' + id ).each(function(){
value = 0;
$item = $( this );
if( $item.prop('checked' ) ){
value = findCalcVal( $item );
if( parseFloat( value ) > parseFloat( highest ) ){
highest = parseFloat( value );
}
}
});
return parseFloat( highest );
}
if (calcVals.hasOwnProperty(id) ) {
if( false === calcVals[id] || null === calcVals[id] || 0 === calcVals[id] ){
//@TODO use let here, when ES6.
var _val = findCalcVal( $( document.getElementById( id ) ) );
if( isString( _val ) ) {
_val = parseFloat( _val );
}
if( isNumber( _val ) ){
calcVals[id] = _val;
}
}
val = calcVals[id];
} else {
val = self.getState(id);
if ($.isArray(val)) {
val = val.reduce( function ( a, b) {
return parseFloat( a ) + parseFloat( b );
}, 0);
}
if( isNumber( val ) ){
calcVals[id] = val;
}
}
return parseFloat( val );
};
/**
* Change state for a field
*
* @since 1.5.3
*
* @param id {String} Field id attribute
* @param value {String|Array} New value
*/
this.mutateState = function(id, value ){
if( ! inState(id) ){
return false;
}
if( fieldVals[id] != value ){
fieldVals[id] = value;
events.trigger(id,value);
}
return true;
};
/**
* Unbind field -- used when hiding via conditional logic
*
* @since 1.5.3
*
* @param id {String} Field id attribute
*/
this.unbind = function(id){
self.mutateState(id,'');
unBound[id] = true;
delete calcVals[id];
};
/**
* Rebind field -- used when unhiding via conditional logic
*
* @since 1.5.3
*
* @param id {String} Field id attribute
*/
this.rebind = function(id){
bindField(id);
delete unBound[id];
};
/**
* Accessor for the CFEvents object used for this state
*
* @since 1.5.3
*
* @returns {{subscribe: subscribe, detach: detach}}
*/
this.events = function(){
return {
/**
* Attach an event to change of an input in the state
*
* @since 1.5.3
*
* @param id {String} Field ID attribute
* @param callback {Function} The callback function
*/
subscribe: function( id, callback ){
if( inState(id)){
events.subscribe(id,callback);
}
},
/**
* Detach an event to change of an input in the state
*
* @since 1.5.3
*
* @param id {String} Field ID attribute
* @param callback {Function|null} The callback function. Pass null to detach all.
*/
detach: function(id,callback){
events.detach(id,callback);
},
emit: function (eventName,payload) {
events.emit(eventName,payload);
},
attatchEvent: function(eventName,callback){
events.subscribe(eventName,callback);
}
}
};
/**
* Check if value is tracked in state
*
* @since 1.5.3
*
* @param id {String} Field ID attribute
*
* @returns {boolean}
*/
function inState(id){
return fieldVals.hasOwnProperty(id);
}
/**
* Bind a field's change events
*
* @since 1.5.3
*
* @param {String} id
* @returns {boolean}
*/
function bindField(id) {
var $field = $('#' + id);
if ($field.length) {
$field.on('change keyup', function () {
var $el = $(this);
calcVals[$el.attr('id')] = findCalcVal( $el );
self.mutateState([$el.attr('id')],$el.val());
});
calcVals[id] = findCalcVal( $( document.getElementById( id ) ) );
self.mutateState([$field.attr('id')],$field.val());
$field.trigger('cf.bind', {
field: $field.attr('id')
});
return true;
} else {
$field = $('.' + id);
if ($field.length) {
//Rebind checkbox options when the checkbow field is unhidden
if( 'object' == typeof $field ){
var val = [];
var allSums = 0;
$field.each(function ( i, el ) {
var $this = $(el);
var sum = 0;
if ($this.prop('checked')) {
sum += parseFloat(findCalcVal($this));
allSums += sum;
val.push($this.val());
}
calcVals[id] = allSums;
});
}
$field.on('change', function () {
var val = [];
var $el = $(this),
id,
$collection,
type = $el.attr( 'type' );
switch ( type ){
case 'radio' :
id = $el.data( 'radio-field' );
$collection = $( '[data-radio-field=' + id +']' );
val = '';
break;
case 'checkbox' :
id = $el.data( 'checkbox-field' );
$collection = $( '[data-checkbox-field=' + id +']' );
break;
default :
id = $el.data( 'field' );
$collection = $( '[data-field=' + id +']' );
break;
}
if ( 'checkbox' === type ) {
var $v, sum = 0;
if ( $collection.length ) {
$collection.each(function (k, v) {
$v = $(v);
if ($v.prop('checked')) {
sum += parseFloat(findCalcVal($v));
val.push($v.val());
}
});
}else{
val = [];
}
calcVals[id] = sum;
} else if( ! $collection.length ){
val = 0;
} else if ( 1 == $collection.length ){
val = findCalcVal( $($collection[0]));
} else{
$collection.each(function (i, el) {
var $this = $(el);
if ($this.prop('checked')) {
if ('radio' === type) {
calcVals[id] = findCalcVal($this);
val = $this.val();
} else {
val.push($this.val());
}
}
});
}
self.mutateState(id,val);
$field.trigger('cf.bind', {
field: $field.attr('id')
});
});
return true;
}
}
self.unbind(id);
return false;
}
/**
* Bind change on a calculation field so that when state changes, calc value changes with it.
*
* @since 1.5.6.2
*
* @param {String} id
* @param {Object} config
*/
function bindCalcField(id,config) {
fieldVals[id] = 0;
calcVals[id] = 0;
self.events().subscribe(id,function (id,value) {
calcVals[id] = value;
});
}
/**
* Find calculation value for an element
*
* @since 1.5.6
* @param {jQuery} $field
* @returns {float}
*/
function findCalcVal( $field ) {
if( $field.is( 'select' ) && $field.has( 'option' ) ){
$field = $field.find(':selected');
}
if( ! $field.length ){
return 0;
}
if( $field.is( 'hidden' ) ){
return $field.val();
}
var val = 0;
var attr = $field.attr('data-calc-value');
if (typeof attr !== typeof undefined && attr !== false && ! isNaN(attr)) {
val = $field.data( 'calc-value' );
}else{
val = $field.val();
}
return parseFloat(val);
}
/**
* Parse float if we can parse float, else 0.
*
* @since 1.5.6
*
* @param number
* @returns {*}
*/
function parseFloat( number ) {
if( ! number || isNaN( number) ){
return 0.0;
}
return window.parseFloat( number );
}
/**
* Parse integer if we can parse integer, else 0.
*
* @since 1.5.6
*
* @param number
* @returns {*}
*/
function parseInt( number ) {
if( ! number || isNaN( number) ){
return 0;
}
return window.parseInt( number );
}
/**
* Determine if a value is a Number
*
* @since 1.5.6.2
*
* Copied from axios/lib/utils.js
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Number, otherwise false
*/
function isNumber(val) {
return typeof val === 'number';
}
/**
* Determine if a value is a String
*
* @since 1.5.6.2
*
* Copied from axios/lib/utils.js
* @param {Object} val The value to test
* @returns {boolean} True if value is a String, otherwise false
*/
function isString(val) {
return typeof val === 'string';
}
}
/*!
* jquery.inputmask.bundle.js
* https://github.com/RobinHerbots/Inputmask
* Copyright (c) 2010 - 2018 Robin Herbots
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* Version: 4.0.0-beta.58
*/
!function(modules) {
var installedModules = {};
function __webpack_require__(moduleId) {
if (installedModules[moduleId]) return installedModules[moduleId].exports;
var module = installedModules[moduleId] = {
i: moduleId,
l: !1,
exports: {}
};
return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
module.l = !0, module.exports;
}
__webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) {
__webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
configurable: !1,
enumerable: !0,
get: getter
});
}, __webpack_require__.n = function(module) {
var getter = module && module.__esModule ? function() {
return module.default;
} : function() {
return module;
};
return __webpack_require__.d(getter, "a", getter), getter;
}, __webpack_require__.o = function(object, property) {
return Object.prototype.hasOwnProperty.call(object, property);
}, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 3);
}([ function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory;
"function" == typeof Symbol && Symbol.iterator;
factory = function($) {
return $;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
factory = function($, window, document, undefined) {
var ua = navigator.userAgent, mobile = isInputEventSupported("touchstart"), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile;
function Inputmask(alias, options, internal) {
if (!(this instanceof Inputmask)) return new Inputmask(alias, options, internal);
this.el = undefined, this.events = {}, this.maskset = undefined, this.refreshValue = !1,
!0 !== internal && ($.isPlainObject(alias) ? options = alias : (options = options || {},
alias && (options.alias = alias)), this.opts = $.extend(!0, {}, this.defaults, options),
this.noMasksCache = options && options.definitions !== undefined, this.userOptions = options || {},
this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts));
}
function resolveAlias(aliasStr, options, opts) {
var aliasDefinition = Inputmask.prototype.aliases[aliasStr];
return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, undefined, opts),
$.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),
!1);
}
function generateMaskSet(opts, nocache) {
function generateMask(mask, metadata, opts) {
var regexMask = !1;
if (null !== mask && "" !== mask || ((regexMask = null !== opts.regex) ? mask = (mask = opts.regex).replace(/^(\^)(.*)(\$)$/, "$2") : (regexMask = !0,
mask = ".*")), 1 === mask.length && !1 === opts.greedy && 0 !== opts.repeat && (opts.placeholder = ""),
opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
mask = opts.groupmarker[0] + mask + opts.groupmarker[1] + opts.quantifiermarker[0] + repeatStart + "," + opts.repeat + opts.quantifiermarker[1];
}
var masksetDefinition, maskdefKey = regexMask ? "regex_" + opts.regex : opts.numericInput ? mask.split("").reverse().join("") : mask;
return Inputmask.prototype.masksCache[maskdefKey] === undefined || !0 === nocache ? (masksetDefinition = {
mask: mask,
maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),
validPositions: {},
_buffer: undefined,
buffer: undefined,
tests: {},
excludes: {},
metadata: metadata,
maskLength: undefined
}, !0 !== nocache && (Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition,
masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]),
masksetDefinition;
}
if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
if (opts.mask.length > 1) {
if (null === opts.keepStatic) {
opts.keepStatic = "auto";
for (var i = 0; i < opts.mask.length; i++) if (opts.mask[i].charAt(0) !== opts.mask[0].charAt(0)) {
opts.keepStatic = !0;
break;
}
}
var altMask = opts.groupmarker[0];
return $.each(opts.isRTL ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
altMask.length > 1 && (altMask += opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0]),
msk.mask === undefined || $.isFunction(msk.mask) ? altMask += msk : altMask += msk.mask;
}), generateMask(altMask += opts.groupmarker[1], opts.mask, opts);
}
opts.mask = opts.mask.pop();
}
return opts.mask && opts.mask.mask !== undefined && !$.isFunction(opts.mask.mask) ? generateMask(opts.mask.mask, opts.mask, opts) : generateMask(opts.mask, opts.mask, opts);
}
function isInputEventSupported(eventName) {
var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]),
el = null, isSupported;
}
function maskScope(actionObj, maskset, opts) {
maskset = maskset || this.maskset, opts = opts || this.opts;
var undoValue, $el, maxLength, colorMask, inputmask = this, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1;
function getMaskTemplate(baseOnInput, minimalPos, includeMode, noJit, clearOptionalTail) {
var greedy = opts.greedy;
clearOptionalTail && (opts.greedy = !1), minimalPos = minimalPos || 0;
var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
do {
if (!0 === baseOnInput && getMaskSet().validPositions[pos]) test = (testPos = clearOptionalTail && !0 === getMaskSet().validPositions[pos].match.optionality && getMaskSet().validPositions[pos + 1] === undefined && (!0 === getMaskSet().validPositions[pos].generatedInput || getMaskSet().validPositions[pos].input == opts.skipOptionalPartCharacter && pos > 0) ? determineTestTemplate(pos, getTests(pos, ndxIntlzr, pos - 1)) : getMaskSet().validPositions[pos]).match,
ndxIntlzr = testPos.locator.slice(), maskTemplate.push(!0 === includeMode ? testPos.input : !1 === includeMode ? test.nativeDef : getPlaceholder(pos, test)); else {
test = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).match, ndxIntlzr = testPos.locator.slice();
var jitMasking = !0 !== noJit && (!1 !== opts.jitMasking ? opts.jitMasking : test.jit);
(!1 === jitMasking || jitMasking === undefined || pos < lvp || "number" == typeof jitMasking && isFinite(jitMasking) && jitMasking > pos) && maskTemplate.push(!1 === includeMode ? test.nativeDef : getPlaceholder(pos, test));
}
"auto" === opts.keepStatic && test.newBlockMarker && null !== test.fn && (opts.keepStatic = pos - 1),
pos++;
} while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos);
return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), !1 === includeMode && getMaskSet().maskLength !== undefined || (getMaskSet().maskLength = pos - 1),
opts.greedy = greedy, maskTemplate;
}
function getMaskSet() {
return maskset;
}
function resetMaskSet(soft) {
var maskset = getMaskSet();
maskset.buffer = undefined, !0 !== soft && (maskset.validPositions = {}, maskset.p = 0);
}
function getLastValidPosition(closestTo, strict, validPositions) {
var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;
for (var posNdx in closestTo === undefined && (closestTo = -1), valids) {
var psNdx = parseInt(posNdx);
valids[psNdx] && (strict || !0 !== valids[psNdx].generatedInput) && (psNdx <= closestTo && (before = psNdx),
psNdx >= closestTo && (after = psNdx));
}
return -1 === before || before == closestTo ? after : -1 == after ? before : closestTo - before < after - closestTo ? before : after;
}
function getDecisionTaker(tst) {
var decisionTaker = tst.locator[tst.alternation];
return "string" == typeof decisionTaker && decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]),
decisionTaker !== undefined ? decisionTaker.toString() : "";
}
function getLocator(tst, align) {
var locator = (tst.alternation != undefined ? tst.mloc[getDecisionTaker(tst)] : tst.locator).join("");
if ("" !== locator) for (;locator.length < align; ) locator += "0";
return locator;
}
function determineTestTemplate(pos, tests) {
for (var tstLocator, closest, bestMatch, targetLocator = getLocator(getTest(pos = pos > 0 ? pos - 1 : 0)), ndx = 0; ndx < tests.length; ndx++) {
var tst = tests[ndx];
tstLocator = getLocator(tst, targetLocator.length);
var distance = Math.abs(tstLocator - targetLocator);
(closest === undefined || "" !== tstLocator && distance < closest || bestMatch && bestMatch.match.optionality && "master" === bestMatch.match.newBlockMarker && (!tst.match.optionality || !tst.match.newBlockMarker) || bestMatch && bestMatch.match.optionalQuantifier && !tst.match.optionalQuantifier) && (closest = distance,
bestMatch = tst);
}
return bestMatch;
}
function getTestTemplate(pos, ndxIntlzr, tstPs) {
return getMaskSet().validPositions[pos] || determineTestTemplate(pos, getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));
}
function getTest(pos, tests) {
return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : (tests || getTests(pos))[0];
}
function positionCanMatchDefinition(pos, def) {
for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
valid = !0;
break;
}
return valid;
}
function getTests(pos, ndxIntlzr, tstPs) {
var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
function handleMatch(match, loopNdx, quantifierRecurse) {
function isFirstMatch(latestMatch, tokenGroup) {
var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
if (!0 === match.isQuantifier ? firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]) : !0 === match.isOptional ? firstMatch = isFirstMatch(latestMatch, match) : !0 === match.isAlternate && (firstMatch = isFirstMatch(latestMatch, match)),
firstMatch) return !1;
}), firstMatch;
}
function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {
var bestMatch, indexPos;
if ((getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
if (lmnt.mloc[alternateNdx]) return bestMatch = lmnt, !1;
var alternation = targetAlternation !== undefined ? targetAlternation : lmnt.alternation, ndxPos = lmnt.locator[alternation] !== undefined ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;
(indexPos === undefined || ndxPos < indexPos) && -1 !== ndxPos && (bestMatch = lmnt,
indexPos = ndxPos);
}), bestMatch) {
var bestMatchAltIndex = bestMatch.locator[bestMatch.alternation];
return (bestMatch.mloc[alternateNdx] || bestMatch.mloc[bestMatchAltIndex] || bestMatch.locator).slice((targetAlternation !== undefined ? targetAlternation : bestMatch.alternation) + 1);
}
return targetAlternation !== undefined ? resolveNdxInitializer(pos, alternateNdx) : undefined;
}
function isSubsetOf(source, target) {
function expand(pattern) {
for (var start, end, expanded = [], i = 0, l = pattern.length; i < l; i++) if ("-" === pattern.charAt(i)) for (end = pattern.charCodeAt(i + 1); ++start < end; ) expanded.push(String.fromCharCode(start)); else start = pattern.charCodeAt(i),
expanded.push(pattern.charAt(i));
return expanded.join("");
}
return opts.regex && null !== source.match.fn && null !== target.match.fn ? -1 !== expand(target.match.def.replace(/[\[\]]/g, "")).indexOf(expand(source.match.def.replace(/[\[\]]/g, ""))) : source.match.def === target.match.nativeDef;
}
function setMergeLocators(targetMatch, altMatch) {
if (altMatch === undefined || targetMatch.alternation === altMatch.alternation && -1 === targetMatch.locator[targetMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation])) {
targetMatch.mloc = targetMatch.mloc || {};
var locNdx = targetMatch.locator[targetMatch.alternation];
if (locNdx !== undefined) {
if ("string" == typeof locNdx && (locNdx = locNdx.split(",")[0]), targetMatch.mloc[locNdx] === undefined && (targetMatch.mloc[locNdx] = targetMatch.locator.slice()),
altMatch !== undefined) {
for (var ndx in altMatch.mloc) "string" == typeof ndx && (ndx = ndx.split(",")[0]),
targetMatch.mloc[ndx] === undefined && (targetMatch.mloc[ndx] = altMatch.mloc[ndx]);
targetMatch.locator[targetMatch.alternation] = Object.keys(targetMatch.mloc).join(",");
}
return !0;
}
targetMatch.alternation = undefined;
}
return !1;
}
if (testPos > 5e3) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
if (testPos === pos && match.matches === undefined) return matches.push({
match: match,
locator: loopNdx.reverse(),
cd: cacheDependency,
mloc: {}
}), !0;
if (match.matches !== undefined) {
if (match.isGroup && quantifierRecurse !== match) {
if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx, quantifierRecurse)) return !0;
} else if (match.isOptional) {
var optionalToken = match;
if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
if ($.each(matches, function(ndx, mtch) {
mtch.match.optionality = !0;
}), latestMatch = matches[matches.length - 1].match, quantifierRecurse !== undefined || !isFirstMatch(latestMatch, optionalToken)) return !0;
insertStop = !0, testPos = pos;
}
} else if (match.isAlternator) {
var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
if (-1 === altIndex || "string" == typeof altIndex) {
var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx.toString());
if (getMaskSet().excludes[pos]) {
for (var altIndexArrClone = altIndexArr.slice(), i = 0, el = getMaskSet().excludes[pos].length; i < el; i++) altIndexArr.splice(altIndexArr.indexOf(getMaskSet().excludes[pos][i].toString()), 1);
0 === altIndexArr.length && (getMaskSet().excludes[pos] = undefined, altIndexArr = altIndexArrClone);
}
(!0 === opts.keepStatic || isFinite(parseInt(opts.keepStatic)) && currentPos >= opts.keepStatic) && (altIndexArr = altIndexArr.slice(0, 1));
for (var unMatchedAlternation = !1, ndx = 0; ndx < altIndexArr.length; ndx++) {
amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = "string" == typeof altIndex && resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),
alternateToken.matches[amndx] && handleMatch(alternateToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) ? match = !0 : 0 === ndx && (unMatchedAlternation = !0),
maltMatches = matches.slice(), testPos = currentPos, matches = [];
for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
var altMatch = maltMatches[ndx1], dropMatch = !1;
altMatch.match.jit = altMatch.match.jit || unMatchedAlternation, altMatch.alternation = altMatch.alternation || loopNdxCnt,
setMergeLocators(altMatch);
for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
var altMatch2 = malternateMatches[ndx2];
if ("string" != typeof altIndex || altMatch.alternation !== undefined && -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr)) {
if (altMatch.match.nativeDef === altMatch2.match.nativeDef) {
dropMatch = !0, setMergeLocators(altMatch2, altMatch);
break;
}
if (isSubsetOf(altMatch, altMatch2)) {
setMergeLocators(altMatch, altMatch2) && (dropMatch = !0, malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));
break;
}
if (isSubsetOf(altMatch2, altMatch)) {
setMergeLocators(altMatch2, altMatch);
break;
}
if (target = altMatch2, null === (source = altMatch).match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1)) {
setMergeLocators(altMatch, altMatch2) && (dropMatch = !0, malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));
break;
}
}
}
dropMatch || malternateMatches.push(altMatch);
}
}
matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0,
match = malternateMatches.length > 0, ndxInitializer = ndxInitializerClone.slice();
} else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
if (match) return !0;
} else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {
var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
if ((latestMatch = matches[matches.length - 1].match).optionalQuantifier = qndx > qt.quantifier.min - 1,
latestMatch.jit = qndx + tokenGroup.matches.indexOf(latestMatch) >= qt.quantifier.jit,
isFirstMatch(latestMatch, tokenGroup) && qndx > qt.quantifier.min - 1) {
insertStop = !0, testPos = pos;
break;
}
if (qt.quantifier.jit !== undefined && isNaN(qt.quantifier.max) && latestMatch.optionalQuantifier && getMaskSet().validPositions[pos - 1] === undefined) {
matches.pop(), insertStop = !0, testPos = pos, cacheDependency = undefined;
break;
}
return !0;
}
} else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
} else testPos++;
var source, target;
}
for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (!0 !== maskToken.matches[tndx].isQuantifier) {
var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
if (match && testPos === pos) return match;
if (testPos > pos) break;
}
}
if (pos > -1) {
if (ndxIntlzr === undefined) {
for (var test, previousPos = pos - 1; (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) === undefined && previousPos > -1; ) previousPos--;
test !== undefined && previousPos > -1 && (ndxInitializer = function(pos, tests) {
var locator = [];
return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (tests[0].alternation === undefined ? 0 === (locator = determineTestTemplate(pos, tests.slice()).locator.slice()).length && (locator = tests[0].locator.slice()) : $.each(tests, function(ndx, tst) {
if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += "," + tst.locator[i]);
})), locator;
}(previousPos, test), cacheDependency = ndxInitializer.join(""), testPos = previousPos);
}
if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return getMaskSet().tests[pos];
for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
if (resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]) && testPos === pos || testPos > pos) break;
}
}
return (0 === matches.length || insertStop) && matches.push({
match: {
fn: null,
optionality: !1,
casing: null,
def: "",
placeholder: ""
},
locator: [],
mloc: {},
cd: cacheDependency
}), ndxIntlzr !== undefined && getMaskSet().tests[pos] ? $.extend(!0, [], matches) : (getMaskSet().tests[pos] = $.extend(!0, [], matches),
getMaskSet().tests[pos]);
}
function getBufferTemplate() {
return getMaskSet()._buffer === undefined && (getMaskSet()._buffer = getMaskTemplate(!1, 1),
getMaskSet().buffer === undefined && (getMaskSet().buffer = getMaskSet()._buffer.slice())),
getMaskSet()._buffer;
}
function getBuffer(noCache) {
return getMaskSet().buffer !== undefined && !0 !== noCache || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)),
getMaskSet().buffer;
}
function refreshFromBuffer(start, end, buffer) {
var i, p;
if (!0 === start) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];
for (p = start, i = start; i < end; i++) if (resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter) {
var valResult = isValid(p, buffer[i], !0, !0);
!1 !== valResult && (resetMaskSet(!0), p = valResult.caret !== undefined ? valResult.caret : valResult.pos + 1);
}
}
function checkAlternationMatch(altArr1, altArr2, na) {
for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = na !== undefined ? na.split(",") : [], i = 0; i < naArr.length; i++) -1 !== (naNdx = altArr1.indexOf(naArr[i])) && altArr1.splice(naNdx, 1);
for (var alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
isMatch = !0;
break;
}
return isMatch;
}
function alternate(pos, c, strict, fromSetValid, rAltPos) {
var lastAlt, alternation, altPos, prevAltPos, i, validPos, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = rAltPos !== undefined ? rAltPos : getLastValidPosition();
if (-1 === lAltPos && rAltPos === undefined) alternation = (prevAltPos = getTest(lastAlt = 0)).alternation; else for (;lAltPos >= 0; lAltPos--) if ((altPos = getMaskSet().validPositions[lAltPos]) && altPos.alternation !== undefined) {
if (prevAltPos && prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;
lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation,
prevAltPos = altPos;
}
if (alternation !== undefined) {
decisionPos = parseInt(lastAlt), getMaskSet().excludes[decisionPos] = getMaskSet().excludes[decisionPos] || [],
!0 !== pos && getMaskSet().excludes[decisionPos].push(getDecisionTaker(prevAltPos));
var validInputsClone = [], staticInputsBeforePos = 0;
for (i = decisionPos; i < getLastValidPosition(undefined, !0) + 1; i++) (validPos = getMaskSet().validPositions[i]) && !0 !== validPos.generatedInput ? validInputsClone.push(validPos.input) : i < pos && staticInputsBeforePos++,
delete getMaskSet().validPositions[i];
for (;getMaskSet().excludes[decisionPos] && getMaskSet().excludes[decisionPos].length < 10; ) {
var posOffset = -1 * staticInputsBeforePos, validInputs = validInputsClone.slice();
for (getMaskSet().tests[decisionPos] = undefined, resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {
var input = validInputs.shift();
if (!(isValidRslt = isValid(getLastValidPosition(undefined, !0) + 1, input, !1, fromSetValid, !0))) break;
}
if (isValidRslt && c !== undefined) {
var targetLvp = getLastValidPosition(pos) + 1;
for (i = decisionPos; i < getLastValidPosition() + 1; i++) ((validPos = getMaskSet().validPositions[i]) === undefined || null == validPos.match.fn) && i < pos + posOffset && posOffset++;
isValidRslt = isValid((pos += posOffset) > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);
}
if (isValidRslt) break;
if (resetMaskSet(), prevAltPos = getTest(decisionPos), getMaskSet().validPositions = $.extend(!0, {}, validPsClone),
!getMaskSet().excludes[decisionPos]) {
isValidRslt = alternate(pos, c, strict, fromSetValid, decisionPos - 1);
break;
}
var decisionTaker = getDecisionTaker(prevAltPos);
if (-1 !== getMaskSet().excludes[decisionPos].indexOf(decisionTaker)) {
isValidRslt = alternate(pos, c, strict, fromSetValid, decisionPos - 1);
break;
}
for (getMaskSet().excludes[decisionPos].push(decisionTaker), i = decisionPos; i < getLastValidPosition(undefined, !0) + 1; i++) delete getMaskSet().validPositions[i];
}
}
return getMaskSet().excludes[decisionPos] = undefined, isValidRslt;
}
function isValid(pos, c, strict, fromSetValid, fromAlternate, validateOnly) {
function isSelection(posObj) {
return isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end == 1 : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin == 1;
}
strict = !0 === strict;
var maskPos = pos;
function _isValid(position, c, strict) {
var rslt = !1;
return $.each(getTests(position), function(ndx, tst) {
var test = tst.match;
if (getBuffer(!0), !1 !== (rslt = null != test.fn ? test.fn.test(c, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && {
c: getPlaceholder(position, test, !0) || test.def,
pos: position
})) {
var elem = rslt.c !== undefined ? rslt.c : c, validatedPos = position;
return elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem,
rslt.remove !== undefined && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]),
$.each(rslt.remove.sort(function(a, b) {
return b - a;
}), function(ndx, lmnt) {
revalidateMask({
begin: lmnt,
end: lmnt + 1
});
})), rslt.insert !== undefined && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]),
$.each(rslt.insert.sort(function(a, b) {
return a - b;
}), function(ndx, lmnt) {
isValid(lmnt.pos, lmnt.c, !0, fromSetValid);
})), !0 !== rslt && rslt.pos !== undefined && rslt.pos !== position && (validatedPos = rslt.pos),
!0 !== rslt && rslt.pos === undefined && rslt.c === undefined ? !1 : (revalidateMask(pos, $.extend({}, tst, {
input: function(elem, test, pos) {
switch (opts.casing || test.casing) {
case "upper":
elem = elem.toUpperCase();
break;
case "lower":
elem = elem.toLowerCase();
break;
case "title":
var posBefore = getMaskSet().validPositions[pos - 1];
elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();
break;
default:
if ($.isFunction(opts.casing)) {
var args = Array.prototype.slice.call(arguments);
args.push(getMaskSet().validPositions), elem = opts.casing.apply(this, args);
}
}
return elem;
}(elem, test, validatedPos)
}), fromSetValid, validatedPos) || (rslt = !1), !1);
}
}), rslt;
}
pos.begin !== undefined && (maskPos = isRTL ? pos.end : pos.begin);
var result = !0, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
if ($.isFunction(opts.preValidation) && !strict && !0 !== fromSetValid && !0 !== validateOnly && (result = opts.preValidation(getBuffer(), maskPos, c, isSelection(pos), opts, getMaskSet())),
!0 === result) {
if (trackbackPositions(undefined, maskPos, !0), (maxLength === undefined || maskPos < maxLength) && (result = _isValid(maskPos, c, strict),
(!strict || !0 === fromSetValid) && !1 === result && !0 !== validateOnly)) {
var currentPosValid = getMaskSet().validPositions[maskPos];
if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (!1 !== (result = _isValid(nPos, c, strict))) {
result = trackbackPositions(maskPos, result.pos !== undefined ? result.pos : nPos) || result,
maskPos = nPos;
break;
}
} else result = {
caret: seekNext(maskPos)
};
}
!1 !== result || !1 === opts.keepStatic || null != opts.regex && !isComplete(getBuffer()) || strict || !0 === fromAlternate || (result = alternate(maskPos, c, strict, fromSetValid)),
!0 === result && (result = {
pos: maskPos
});
}
if ($.isFunction(opts.postValidation) && !1 !== result && !strict && !0 !== fromSetValid && !0 !== validateOnly) {
var postResult = opts.postValidation(getBuffer(!0), result, opts);
if (postResult !== undefined) {
if (postResult.refreshFromBuffer && postResult.buffer) {
var refresh = postResult.refreshFromBuffer;
refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, postResult.buffer);
}
result = !0 === postResult ? result : postResult;
}
}
return result && result.pos === undefined && (result.pos = maskPos), !1 !== result && !0 !== validateOnly || (resetMaskSet(!0),
getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
}
function trackbackPositions(originalPos, newPos, fillOnly) {
var result;
if (originalPos === undefined) for (originalPos = newPos - 1; originalPos > 0 && !getMaskSet().validPositions[originalPos]; originalPos--) ;
for (var ps = originalPos; ps < newPos; ps++) if (getMaskSet().validPositions[ps] === undefined && !isMask(ps, !0)) {
var vp = 0 == ps ? getTest(ps) : getMaskSet().validPositions[ps - 1];
if (vp) {
var tstLocator, targetLocator = getLocator(vp), tests = getTests(ps).slice(), closest = undefined, bestMatch = getTest(ps);
if ("" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) {
tstLocator = getLocator(tst, targetLocator.length);
var distance = Math.abs(tstLocator - targetLocator);
(closest === undefined || distance < closest) && null === tst.match.fn && !0 !== tst.match.optionality && !0 !== tst.match.optionalQuantifier && (closest = distance,
bestMatch = tst);
}), (bestMatch = $.extend({}, bestMatch, {
input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def
})).generatedInput = !0, revalidateMask(ps, bestMatch, !0), !0 !== fillOnly) {
var cvpInput = getMaskSet().validPositions[newPos].input;
getMaskSet().validPositions[newPos] = undefined, result = isValid(newPos, cvpInput, !0, !0);
}
}
}
return result;
}
function revalidateMask(pos, validTest, fromSetValid, validatedPos) {
function IsEnclosedStatic(pos, valids, selection) {
var posMatch = valids[pos];
if (posMatch !== undefined && (null === posMatch.match.fn && !0 !== posMatch.match.optionality || posMatch.input === opts.radixPoint)) {
var prevMatch = selection.begin <= pos - 1 ? valids[pos - 1] && null === valids[pos - 1].match.fn && valids[pos - 1] : valids[pos - 1], nextMatch = selection.end > pos + 1 ? valids[pos + 1] && null === valids[pos + 1].match.fn && valids[pos + 1] : valids[pos + 1];
return prevMatch && nextMatch;
}
return !1;
}
var begin = pos.begin !== undefined ? pos.begin : pos, end = pos.end !== undefined ? pos.end : pos;
if (pos.begin > pos.end && (begin = pos.end, end = pos.begin), validatedPos = validatedPos !== undefined ? validatedPos : begin,
begin !== end || opts.insertMode && getMaskSet().validPositions[validatedPos] !== undefined && fromSetValid === undefined) {
var positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(undefined, !0);
for (getMaskSet().p = begin, i = lvp; i >= begin; i--) getMaskSet().validPositions[i] && "+" === getMaskSet().validPositions[i].match.nativeDef && (opts.isNegative = !1),
delete getMaskSet().validPositions[i];
var valid = !0, j = validatedPos, needsValidation = (getMaskSet().validPositions,
!1), posMatch = j, i = j;
for (validTest && (getMaskSet().validPositions[validatedPos] = $.extend(!0, {}, validTest),
posMatch++, j++, begin < end && i++); i <= lvp; i++) {
var t = positionsClone[i];
if (t !== undefined && (i >= end || i >= begin && !0 !== t.generatedInput && IsEnclosedStatic(i, positionsClone, {
begin: begin,
end: end
}))) {
for (;"" !== getTest(posMatch).match.def; ) {
if (!1 === needsValidation && positionsClone[posMatch] && positionsClone[posMatch].match.nativeDef === t.match.nativeDef) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]),
getMaskSet().validPositions[posMatch].input = t.input, trackbackPositions(undefined, posMatch, !0),
j = posMatch + 1, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {
var result = isValid(posMatch, t.input, !0, !0);
valid = !1 !== result, j = result.caret || result.insert ? getLastValidPosition() : posMatch + 1,
needsValidation = !0;
} else if (!(valid = !0 === t.generatedInput || t.input === opts.radixPoint && !0 === opts.numericInput) && "" === getTest(posMatch).match.def) break;
if (valid) break;
posMatch++;
}
"" == getTest(posMatch).match.def && (valid = !1), posMatch = j;
}
if (!valid) break;
}
if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
resetMaskSet(!0), !1;
} else validTest && (getMaskSet().validPositions[validatedPos] = $.extend(!0, {}, validTest));
return resetMaskSet(!0), !0;
}
function isMask(pos, strict) {
var test = getTestTemplate(pos).match;
if ("" === test.def && (test = getTest(pos).match), null != test.fn) return test.fn;
if (!0 !== strict && pos > -1) {
var tests = getTests(pos);
return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0);
}
return !1;
}
function seekNext(pos, newBlock) {
for (var position = pos + 1; "" !== getTest(position).match.def && (!0 === newBlock && (!0 !== getTest(position).match.newBlockMarker || !isMask(position)) || !0 !== newBlock && !isMask(position)); ) position++;
return position;
}
function seekPrevious(pos, newBlock) {
var tests, position = pos;
if (position <= 0) return 0;
for (;--position > 0 && (!0 === newBlock && !0 !== getTest(position).match.newBlockMarker || !0 !== newBlock && !isMask(position) && ((tests = getTests(position)).length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ;
return position;
}
function writeBuffer(input, buffer, caretPos, event, triggerEvents) {
if (event && $.isFunction(opts.onBeforeWrite)) {
var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);
if (result) {
if (result.refreshFromBuffer) {
var refresh = result.refreshFromBuffer;
refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer || buffer),
buffer = getBuffer(!0);
}
caretPos !== undefined && (caretPos = result.caret !== undefined ? result.caret : caretPos);
}
}
if (input !== undefined && (input.inputmask._valueSet(buffer.join("")), caretPos === undefined || event !== undefined && "blur" === event.type ? renderColorMask(input, caretPos, 0 === buffer.length) : caret(input, caretPos),
!0 === triggerEvents)) {
var $input = $(input), nptVal = input.inputmask._valueGet();
skipInputEvent = !0, $input.trigger("input"), setTimeout(function() {
nptVal === getBufferTemplate().join("") ? $input.trigger("cleared") : !0 === isComplete(buffer) && $input.trigger("complete");
}, 0);
}
}
function getPlaceholder(pos, test, returnPL) {
if ((test = test || getTest(pos).match).placeholder !== undefined || !0 === returnPL) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;
if (null === test.fn) {
if (pos > -1 && getMaskSet().validPositions[pos] === undefined) {
var prevTest, tests = getTests(pos), staticAlternations = [];
if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (!0 !== tests[i].match.optionality && !0 !== tests[i].match.optionalQuantifier && (null === tests[i].match.fn || prevTest === undefined || !1 !== tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts)) && (staticAlternations.push(tests[i]),
null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);
}
return test.def;
}
return opts.placeholder.charAt(pos % opts.placeholder.length);
}
var valueBuffer, EventRuler = {
on: function(input, eventName, eventHandler) {
var ev = function(e) {
var that = this;
if (that.inputmask === undefined && "FORM" !== this.nodeName) {
var imOpts = $.data(that, "_inputmask_opts");
imOpts ? new Inputmask(imOpts).mask(that) : EventRuler.off(that);
} else {
if ("setvalue" === e.type || "FORM" === this.nodeName || !(that.disabled || that.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || !1 === opts.tabThrough && e.keyCode === Inputmask.keyCode.TAB))) {
switch (e.type) {
case "input":
if (!0 === skipInputEvent) return skipInputEvent = !1, e.preventDefault();
if (mobile) {
var args = arguments;
return setTimeout(function() {
eventHandler.apply(that, args), caret(that, that.inputmask.caretPos, undefined, !0);
}, 0), !1;
}
break;
case "keydown":
skipKeyPressEvent = !1, skipInputEvent = !1;
break;
case "keypress":
if (!0 === skipKeyPressEvent) return e.preventDefault();
skipKeyPressEvent = !0;
break;
case "click":
if (iemobile || iphone) {
args = arguments;
return setTimeout(function() {
eventHandler.apply(that, args);
}, 0), !1;
}
}
var returnVal = eventHandler.apply(that, arguments);
return !1 === returnVal && (e.preventDefault(), e.stopPropagation()), returnVal;
}
e.preventDefault();
}
};
input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),
-1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
},
off: function(input, event) {
var events;
input.inputmask && input.inputmask.events && (event ? (events = [])[event] = input.inputmask.events[event] : events = input.inputmask.events,
$.each(events, function(eventName, evArr) {
for (;evArr.length > 0; ) {
var ev = evArr.pop();
-1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
}
delete input.inputmask.events[eventName];
}));
}
}, EventHandlers = {
keydownEvent: function(e) {
var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(),
handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
e.preventDefault();
var caretPos = seekNext(getLastValidPosition());
opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--,
caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
} else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(),
caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && !0 !== e.altKey ? (checkVal(input, !0, !1, undoValue.split("")),
$input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? !0 === opts.tabThrough && k === Inputmask.keyCode.TAB ? (!0 === e.shiftKey ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)),
pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),
pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--),
pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || !1 === opts.insertMode && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
var caretPos = caret(input);
caret(input, caretPos.begin);
}, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
var caretPos = caret(input);
caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
}, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));
opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
},
keypressEvent: function(e, checkval, writeOut, strict, ndx) {
var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
if (!(!0 === checkval || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""),
setTimeout(function() {
$input.trigger("change");
}, 0)), !0;
if (k) {
46 === k && !1 === e.shiftKey && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0));
var forwardPosition, pos = checkval ? {
begin: ndx,
end: ndx
} : caret(input), c = String.fromCharCode(k), offset = 0;
if (opts._radixDance && opts.numericInput) {
var caretPos = getBuffer().indexOf(opts.radixPoint.charAt(0)) + 1;
pos.begin <= caretPos && (k === opts.radixPoint.charCodeAt(0) && (offset = 1), pos.begin -= 1,
pos.end -= 1);
}
getMaskSet().writeOutBuffer = !0;
var valResult = isValid(pos, c, strict);
if (!1 !== valResult && (resetMaskSet(!0), forwardPosition = valResult.caret !== undefined ? valResult.caret : seekNext(valResult.pos.begin ? valResult.pos.begin : valResult.pos),
getMaskSet().p = forwardPosition), forwardPosition = (opts.numericInput && valResult.caret === undefined ? seekPrevious(forwardPosition) : forwardPosition) + offset,
!1 !== writeOut && (setTimeout(function() {
opts.onKeyValidation.call(input, k, valResult, opts);
}, 0), getMaskSet().writeOutBuffer && !1 !== valResult)) {
var buffer = getBuffer();
writeBuffer(input, buffer, forwardPosition, e, !0 !== checkval);
}
if (e.preventDefault(), checkval) return !1 !== valResult && (valResult.forwardPosition = forwardPosition),
valResult;
}
},
pasteEvent: function(e) {
var tempValue, ev = e.originalEvent || e, inputValue = ($(this), this.inputmask._valueGet(!0)), caretPos = caret(this);
isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""),
valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""),
window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else {
if (!ev.clipboardData || !ev.clipboardData.getData) return !0;
inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret;
}
var pasteValue = inputValue;
if ($.isFunction(opts.onBeforePaste)) {
if (!1 === (pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts))) return e.preventDefault();
pasteValue || (pasteValue = inputValue);
}
return checkVal(this, !1, !1, pasteValue.toString().split("")), writeBuffer(this, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")),
e.preventDefault();
},
inputFallBackEvent: function(e) {
var input = this, inputValue = input.inputmask._valueGet();
if (getBuffer().join("") !== inputValue) {
var caretPos = caret(input);
if (inputValue = function(input, inputValue, caretPos) {
if (iemobile) {
var inputChar = inputValue.replace(getBuffer().join(""), "");
if (1 === inputChar.length) {
var iv = inputValue.split("");
iv.splice(caretPos.begin, 0, inputChar), inputValue = iv.join("");
}
}
return inputValue;
}(0, inputValue = function(input, inputValue, caretPos) {
return "." === inputValue.charAt(caretPos.begin - 1) && "" !== opts.radixPoint && ((inputValue = inputValue.split(""))[caretPos.begin - 1] = opts.radixPoint.charAt(0),
inputValue = inputValue.join("")), inputValue;
}(0, inputValue, caretPos), caretPos), getBuffer().join("") !== inputValue) {
var buffer = getBuffer().join(""), offset = !opts.numericInput && inputValue.length > buffer.length ? -1 : 0, frontPart = inputValue.substr(0, caretPos.begin), backPart = inputValue.substr(caretPos.begin), frontBufferPart = buffer.substr(0, caretPos.begin + offset), backBufferPart = buffer.substr(caretPos.begin + offset), selection = caretPos, entries = "", isEntry = !1;
if (frontPart !== frontBufferPart) {
for (var fpl = (isEntry = frontPart.length >= frontBufferPart.length) ? frontPart.length : frontBufferPart.length, i = 0; frontPart.charAt(i) === frontBufferPart.charAt(i) && i < fpl; i++) ;
isEntry && (0 === offset && (selection.begin = i), entries += frontPart.slice(i, selection.end));
}
if (backPart !== backBufferPart && (backPart.length > backBufferPart.length ? entries += backPart.slice(0, 1) : backPart.length < backBufferPart.length && (selection.end += backBufferPart.length - backPart.length,
isEntry || "" === opts.radixPoint || "" !== backPart || frontPart.charAt(selection.begin + offset - 1) !== opts.radixPoint || (selection.begin--,
entries = opts.radixPoint))), writeBuffer(input, getBuffer(), {
begin: selection.begin + offset,
end: selection.end + offset
}), entries.length > 0) $.each(entries.split(""), function(ndx, entry) {
var keypress = new $.Event("keypress");
keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);
}); else {
selection.begin === selection.end - 1 && (selection.begin = seekPrevious(selection.begin + 1),
selection.begin === selection.end - 1 ? caret(input, selection.begin) : caret(input, selection.begin, selection.end));
var keydown = new $.Event("keydown");
keydown.keyCode = opts.numericInput ? Inputmask.keyCode.BACKSPACE : Inputmask.keyCode.DELETE,
EventHandlers.keydownEvent.call(input, keydown), !1 === opts.insertMode && caret(input, caret(input).begin - 1);
}
e.preventDefault();
}
}
},
beforeInputEvent: function(e) {
if (e.cancelable) {
var input = this;
switch (e.inputType) {
case "insertText":
return $.each(e.data.split(""), function(ndx, entry) {
var keypress = new $.Event("keypress");
keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);
}), e.preventDefault();
case "deleteContentBackward":
return (keydown = new $.Event("keydown")).keyCode = Inputmask.keyCode.BACKSPACE,
EventHandlers.keydownEvent.call(input, keydown), e.preventDefault();
case "deleteContentForward":
var keydown;
return (keydown = new $.Event("keydown")).keyCode = Inputmask.keyCode.DELETE, EventHandlers.keydownEvent.call(input, keydown),
e.preventDefault();
}
}
},
setValueEvent: function(e) {
this.inputmask.refreshValue = !1;
var value = (value = e && e.detail ? e.detail[0] : arguments[1]) || this.inputmask._valueGet(!0);
$.isFunction(opts.onBeforeMask) && (value = opts.onBeforeMask.call(inputmask, value, opts) || value),
checkVal(this, !0, !1, value = value.split("")), undoValue = getBuffer().join(""),
(opts.clearMaskOnLostFocus || opts.clearIncomplete) && this.inputmask._valueGet() === getBufferTemplate().join("") && this.inputmask._valueSet("");
},
focusEvent: function(e) {
var nptValue = this.inputmask._valueGet();
opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (this.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(this, getBuffer(), seekNext(getLastValidPosition())) : !1 === mouseEnter && caret(this, seekNext(getLastValidPosition()))),
!0 === opts.positionCaretOnTab && !1 === mouseEnter && EventHandlers.clickEvent.apply(this, [ e, !0 ]),
undoValue = getBuffer().join("");
},
mouseleaveEvent: function(e) {
if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== this) {
var buffer = getBuffer().slice(), nptValue = this.inputmask._valueGet();
nptValue !== this.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer),
writeBuffer(this, buffer));
}
},
clickEvent: function(e, tabbed) {
var input = this;
setTimeout(function() {
if (document.activeElement === input) {
var selectedCaret = caret(input);
if (tabbed && (isRTL ? selectedCaret.end = selectedCaret.begin : selectedCaret.begin = selectedCaret.end),
selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {
case "none":
break;
case "select":
caret(input, 0, getBuffer().length);
break;
case "ignore":
caret(input, seekNext(getLastValidPosition()));
break;
case "radixFocus":
if (function(clickPos) {
if ("" !== opts.radixPoint) {
var vps = getMaskSet().validPositions;
if (vps[clickPos] === undefined || vps[clickPos].input === getPlaceholder(clickPos)) {
if (clickPos < seekNext(-1)) return !0;
var radixPos = $.inArray(opts.radixPoint, getBuffer());
if (-1 !== radixPos) {
for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;
return !0;
}
}
}
return !1;
}(selectedCaret.begin)) {
var radixPos = getBuffer().join("").indexOf(opts.radixPoint);
caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);
break;
}
default:
var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
if (clickPosition < lastPosition) caret(input, isMask(clickPosition, !0) || isMask(clickPosition - 1, !0) ? clickPosition : seekNext(clickPosition)); else {
var lvp = getMaskSet().validPositions[lvclickPosition], tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : undefined, lvp), placeholder = getPlaceholder(lastPosition, tt.match);
if ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && !0 !== tt.match.optionalQuantifier && !0 !== tt.match.newBlockMarker || !isMask(lastPosition, opts.keepStatic) && tt.match.def === placeholder) {
var newPos = seekNext(lastPosition);
(clickPosition >= newPos || clickPosition === lastPosition) && (lastPosition = newPos);
}
caret(input, lastPosition);
}
}
}
}, 0);
},
dblclickEvent: function(e) {
var input = this;
setTimeout(function() {
caret(input, 0, seekNext(getLastValidPosition()));
}, 0);
},
cutEvent: function(e) {
$(this);
var pos = caret(this), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")),
document.execCommand && document.execCommand("copy"), handleRemove(this, Inputmask.keyCode.DELETE, pos),
writeBuffer(this, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(""));
},
blurEvent: function(e) {
var $input = $(this);
if (this.inputmask) {
var nptValue = this.inputmask._valueGet(), buffer = getBuffer().slice();
"" === nptValue && colorMask === undefined || (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
!1 === isComplete(buffer) && (setTimeout(function() {
$input.trigger("incomplete");
}, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),
writeBuffer(this, buffer, undefined, e)), undoValue !== getBuffer().join("") && (undoValue = buffer.join(""),
$input.trigger("change"));
}
},
mouseenterEvent: function(e) {
mouseEnter = !0, document.activeElement !== this && opts.showMaskOnHover && this.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(this, getBuffer());
},
submitEvent: function(e) {
undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""),
opts.clearIncomplete && !1 === isComplete(getBuffer()) && el.inputmask._valueSet(""),
opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),
setTimeout(function() {
writeBuffer(el, getBuffer());
}, 0));
},
resetEvent: function(e) {
el.inputmask.refreshValue = !0, setTimeout(function() {
$el.trigger("setvalue");
}, 0);
}
};
function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {
var inputmask = this || input.inputmask, inputValue = nptvl.slice(), charCodes = "", initialNdx = -1, result = undefined;
if (resetMaskSet(), strict || !0 === opts.autoUnmask) initialNdx = seekNext(initialNdx); else {
var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length),
initialNdx = seekNext(initialNdx));
}
-1 === initialNdx ? (getMaskSet().p = seekNext(initialNdx), initialNdx = 0) : getMaskSet().p = initialNdx,
inputmask.caretPos = {
begin: initialNdx
}, $.each(inputValue, function(ndx, charCode) {
if (charCode !== undefined) if (getMaskSet().validPositions[ndx] === undefined && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, !0) && !1 === isValid(ndx, inputValue[ndx], !0, undefined, undefined, !0)) getMaskSet().p++; else {
var keypress = new $.Event("_checkval");
keypress.which = charCode.charCodeAt(0), charCodes += charCode;
var lvp = getLastValidPosition(undefined, !0);
!function(ndx, charCodes) {
return -1 !== getMaskTemplate(!0, 0, !1).slice(ndx, seekNext(ndx)).join("").replace(/'/g, "").indexOf(charCodes) && !isMask(ndx) && (getTest(ndx).match.nativeDef === charCodes.charAt(0) || null === getTest(ndx).match.fn && getTest(ndx).match.nativeDef === "'" + charCodes.charAt(0) || " " === getTest(ndx).match.nativeDef && (getTest(ndx + 1).match.nativeDef === charCodes.charAt(0) || null === getTest(ndx + 1).match.fn && getTest(ndx + 1).match.nativeDef === "'" + charCodes.charAt(0)));
}(initialNdx, charCodes) ? (result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, inputmask.caretPos.begin)) && (initialNdx = inputmask.caretPos.begin + 1,
charCodes = "") : result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, lvp + 1),
result && (writeBuffer(undefined, getBuffer(), result.forwardPosition, keypress, !1),
inputmask.caretPos = {
begin: result.forwardPosition,
end: result.forwardPosition
});
}
}), writeOut && writeBuffer(input, getBuffer(), result ? result.forwardPosition : undefined, initiatingEvent || new $.Event("checkval"), initiatingEvent && "input" === initiatingEvent.type);
}
function unmaskedvalue(input) {
if (input) {
if (input.inputmask === undefined) return input.value;
input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input);
}
var umValue = [], vps = getMaskSet().validPositions;
for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join("");
if ($.isFunction(opts.onUnMask)) {
var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);
}
return unmaskedValue;
}
function translatePosition(pos) {
return !isRTL || "number" != typeof pos || opts.greedy && "" === opts.placeholder || !el || (pos = el.inputmask._valueGet().length - pos),
pos;
}
function caret(input, begin, end, notranslate) {
var range;
if (begin === undefined) return input.setSelectionRange ? (begin = input.selectionStart,
end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,
end = range.endOffset) : document.selection && document.selection.createRange && (end = (begin = 0 - (range = document.selection.createRange()).duplicate().moveStart("character", -input.inputmask._valueGet().length)) + range.text.length),
{
begin: notranslate ? begin : translatePosition(begin),
end: notranslate ? end : translatePosition(end)
};
if ($.isArray(begin) && (end = isRTL ? begin[0] : begin[1], begin = isRTL ? begin[1] : begin[0]),
begin.begin !== undefined && (end = isRTL ? begin.begin : begin.end, begin = isRTL ? begin.end : begin.begin),
"number" == typeof begin) {
begin = notranslate ? begin : translatePosition(begin), end = "number" == typeof (end = notranslate ? end : translatePosition(end)) ? end : begin;
var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, iphone || !1 !== opts.insertMode || begin !== end || end++,
input.inputmask.caretPos = {
begin: begin,
end: end
}, input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
if (range = document.createRange(), input.firstChild === undefined || null === input.firstChild) {
var textNode = document.createTextNode("");
input.appendChild(textNode);
}
range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),
range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),
range.collapse(!0);
var sel = window.getSelection();
sel.removeAllRanges(), sel.addRange(range);
} else input.createTextRange && ((range = input.createTextRange()).collapse(!0),
range.moveEnd("character", end), range.moveStart("character", begin), range.select());
renderColorMask(input, {
begin: begin,
end: end
});
}
}
function determineLastRequiredPosition(returnDefinition) {
var pos, testPos, buffer = getMaskTemplate(!0, getLastValidPosition(), !0, !0), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined;
for (pos = lvp + 1; pos < buffer.length; pos++) ndxIntlzr = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).locator.slice(),
positions[pos] = $.extend(!0, {}, testPos);
var lvTestAlt = lvTest && lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation] : undefined;
for (pos = bl - 1; pos > lvp && (((testPos = positions[pos]).match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
return returnDefinition ? {
l: bl,
def: positions[bl] ? positions[bl].match : undefined
} : bl;
}
function clearOptionalTail(buffer) {
buffer.length = 0;
for (var lmnt, template = getMaskTemplate(!0, 0, !0, undefined, !0); (lmnt = template.shift()) !== undefined; ) buffer.push(lmnt);
return buffer;
}
function isComplete(buffer) {
if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
if ("*" === opts.repeat) return undefined;
var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
complete = !0;
for (var i = 0; i <= aml; i++) {
var test = getTestTemplate(i).match;
if (null !== test.fn && getMaskSet().validPositions[i] === undefined && !0 !== test.optionality && !0 !== test.optionalQuantifier || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
complete = !1;
break;
}
}
}
return complete;
}
function handleRemove(input, k, pos, strict, fromIsValid) {
if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE),
isRTL)) {
var pend = pos.end;
pos.end = pos.begin, pos.begin = pend;
}
if (k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || !1 === opts.insertMode) ? (pos.begin = seekPrevious(pos.begin),
getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.begin--,
!1 === opts.insertMode && pos.end !== getMaskSet().maskLength && pos.end--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) && getMaskSet().validPositions[pos.end] && getMaskSet().validPositions[pos.end].input !== opts.radixPoint ? pos.end + 1 : seekNext(pos.end) + 1,
getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.end++),
revalidateMask(pos), !0 !== strict && !1 !== opts.keepStatic || null !== opts.regex) {
var result = alternate(!0);
if (result) {
var newPos = result.caret !== undefined ? result.caret : result.pos ? seekNext(result.pos.begin ? result.pos.begin : result.pos) : getLastValidPosition(-1, !0);
(k !== Inputmask.keyCode.DELETE || pos.begin > newPos) && pos.begin;
}
}
var lvp = getLastValidPosition(pos.begin, !0);
if (lvp < pos.begin || -1 === pos.begin) getMaskSet().p = seekNext(lvp); else if (!0 !== strict && (getMaskSet().p = pos.begin,
!0 !== fromIsValid)) for (;getMaskSet().p < lvp && getMaskSet().validPositions[getMaskSet().p] === undefined; ) getMaskSet().p++;
}
function initializeColorMask(input) {
var computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);
var template = document.createElement("div");
template.style.width = computedStyle.width, template.style.textAlign = computedStyle.textAlign,
colorMask = document.createElement("div"), input.inputmask.colorMask = colorMask,
colorMask.className = "im-colormask", input.parentNode.insertBefore(colorMask, input),
input.parentNode.removeChild(input), colorMask.appendChild(input), colorMask.appendChild(template),
input.style.left = template.offsetLeft + "px", $(colorMask).on("mouseleave", function(e) {
return EventHandlers.mouseleaveEvent.call(input, [ e ]);
}), $(colorMask).on("mouseenter", function(e) {
return EventHandlers.mouseenterEvent.call(input, [ e ]);
}), $(colorMask).on("click", function(e) {
return caret(input, function(clientx) {
var caretPos, e = document.createElement("span");
for (var style in computedStyle) isNaN(style) && -1 !== style.indexOf("font") && (e.style[style] = computedStyle[style]);
e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing,
e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto",
e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e);
var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;
for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {
if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) {
var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;
e.innerHTML = inputText.charAt(caretPos), caretPos = (offset1 -= e.offsetWidth / 3) < offset2 ? caretPos - 1 : caretPos;
break;
}
previousWidth = e.offsetWidth;
}
return document.body.removeChild(e), caretPos;
}(e.clientX)), EventHandlers.clickEvent.call(input, [ e ]);
}), $(input).on("keydown", function(e) {
e.shiftKey || !1 === opts.insertMode || setTimeout(function() {
renderColorMask(input);
}, 0);
});
}
function renderColorMask(input, caretPos, clear) {
var test, testPos, ndxIntlzr, maskTemplate = [], isStatic = !1, pos = 0;
function setEntry(entry) {
if (entry === undefined && (entry = ""), isStatic || null !== test.fn && testPos.input !== undefined) if (isStatic && (null !== test.fn && testPos.input !== undefined || "" === test.def)) {
isStatic = !1;
var mtl = maskTemplate.length;
maskTemplate[mtl - 1] = maskTemplate[mtl - 1] + "</span>", maskTemplate.push(entry);
} else maskTemplate.push(entry); else isStatic = !0, maskTemplate.push("<span class='im-static'>" + entry);
}
if (colorMask !== undefined) {
var buffer = getBuffer();
if (caretPos === undefined ? caretPos = caret(input) : caretPos.begin === undefined && (caretPos = {
begin: caretPos,
end: caretPos
}), !0 !== clear) {
var lvp = getLastValidPosition();
do {
getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos],
test = testPos.match, ndxIntlzr = testPos.locator.slice(), setEntry(buffer[pos])) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
test = testPos.match, ndxIntlzr = testPos.locator.slice(), !1 === opts.jitMasking || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos ? setEntry(getPlaceholder(pos, test)) : isStatic = !1),
pos++;
} while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos || isStatic);
isStatic && setEntry(), document.activeElement === input && (maskTemplate.splice(caretPos.begin, 0, caretPos.begin === caretPos.end || caretPos.end > getMaskSet().maskLength ? '<mark class="im-caret" style="border-right-width: 1px;border-right-style: solid;">' : '<mark class="im-caret-select">'),
maskTemplate.splice(caretPos.end + 1, 0, "</mark>"));
}
var template = colorMask.getElementsByTagName("div")[0];
template.innerHTML = maskTemplate.join(""), input.inputmask.positionColorMask(input, template);
}
}
if (Inputmask.prototype.positionColorMask = function(input, template) {
input.style.left = template.offsetLeft + "px";
}, actionObj !== undefined) switch (actionObj.action) {
case "isComplete":
return el = actionObj.el, isComplete(getBuffer());
case "unmaskedvalue":
return el !== undefined && actionObj.value === undefined || (valueBuffer = actionObj.value,
valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer).split(""),
checkVal.call(this, undefined, !1, !1, valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(inputmask, undefined, getBuffer(), 0, opts)),
unmaskedvalue(el);
case "mask":
!function(elem) {
EventRuler.off(elem);
var isSupported = function(input, opts) {
var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
if (!isSupported) if ("INPUT" === input.tagName) {
var el = document.createElement("input");
el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
} else isSupported = "partial";
return !1 !== isSupported ? function(npt) {
var valueGet, valueSet;
function getter() {
return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || !0 !== opts.nullable ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
}
function setter(value) {
valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue", [ value ]);
}
if (!npt.inputmask.__valueGet) {
if (!0 !== opts.noValuePatching) {
if (Object.getOwnPropertyDescriptor) {
"function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" === _typeof("test".__proto__) ? function(object) {
return object.__proto__;
} : function(object) {
return object.constructor.prototype;
});
var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : undefined;
valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,
valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
get: getter,
set: setter,
configurable: !0
})) : "INPUT" !== npt.tagName && (valueGet = function() {
return this.textContent;
}, valueSet = function(value) {
this.textContent = value;
}, Object.defineProperty(npt, "value", {
get: getter,
set: setter,
configurable: !0
}));
} else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"),
valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter),
npt.__defineSetter__("value", setter));
npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;
}
npt.inputmask._valueGet = function(overruleRTL) {
return isRTL && !0 !== overruleRTL ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
}, npt.inputmask._valueSet = function(value, overruleRTL) {
valueSet.call(this.el, null === value || value === undefined ? "" : !0 !== overruleRTL && isRTL ? value.split("").reverse().join("") : value);
}, valueGet === undefined && (valueGet = function() {
return this.value;
}, valueSet = function(value) {
this.value = value;
}, function(type) {
if ($.valHooks && ($.valHooks[type] === undefined || !0 !== $.valHooks[type].inputmaskpatch)) {
var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
return elem.value;
}, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
return elem.value = value, elem;
};
$.valHooks[type] = {
get: function(elem) {
if (elem.inputmask) {
if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
var result = valhookGet(elem);
return -1 !== getLastValidPosition(undefined, undefined, elem.inputmask.maskset.validPositions) || !0 !== opts.nullable ? result : "";
}
return valhookGet(elem);
},
set: function(elem, value) {
var result, $elem = $(elem);
return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue", [ value ]),
result;
},
inputmaskpatch: !0
};
}
}(npt.type), function(npt) {
EventRuler.on(npt, "mouseenter", function(event) {
var $input = $(this);
this.inputmask._valueGet() !== getBuffer().join("") && $input.trigger("setvalue");
});
}(npt));
}
}(input) : input.inputmask = undefined, isSupported;
}(elem, opts);
if (!1 !== isSupported && ($el = $(el = elem), -1 === (maxLength = el !== undefined ? el.maxLength : undefined) && (maxLength = undefined),
!0 === opts.colorMask && initializeColorMask(el), mobile && ("inputmode" in el && (el.inputmode = opts.inputmode,
el.setAttribute("inputmode", opts.inputmode)), !0 === opts.disablePredictiveText && ("autocorrect" in el ? el.autocorrect = !1 : (!0 !== opts.colorMask && initializeColorMask(el),
el.type = "password"))), !0 === isSupported && (EventRuler.on(el, "submit", EventHandlers.submitEvent),
EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "blur", EventHandlers.blurEvent),
EventRuler.on(el, "focus", EventHandlers.focusEvent), !0 !== opts.colorMask && (EventRuler.on(el, "click", EventHandlers.clickEvent),
EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent)),
EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent),
EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent),
EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete),
EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared),
mobile || !0 === opts.inputEventOnly ? el.removeAttribute("maxLength") : (EventRuler.on(el, "keydown", EventHandlers.keydownEvent),
EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop),
EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop),
EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent),
EventRuler.on(el, "beforeinput", EventHandlers.beforeInputEvent)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent),
undoValue = getBufferTemplate().join(""), "" !== el.inputmask._valueGet(!0) || !1 === opts.clearMaskOnLostFocus || document.activeElement === el)) {
var initialValue = $.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, el.inputmask._valueGet(!0), opts) || el.inputmask._valueGet(!0);
"" !== initialValue && checkVal(el, !0, !1, initialValue.split(""));
var buffer = getBuffer().slice();
undoValue = buffer.join(""), !1 === isComplete(buffer) && opts.clearIncomplete && resetMaskSet(),
opts.clearMaskOnLostFocus && document.activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)),
(!1 === opts.clearMaskOnLostFocus || opts.showMaskOnFocus && document.activeElement === el || "" !== el.inputmask._valueGet(!0)) && writeBuffer(el, buffer),
document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
}
}(el);
break;
case "format":
return valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value).split(""),
checkVal.call(this, undefined, !0, !1, valueBuffer), actionObj.metadata ? {
value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
metadata: maskScope.call(this, {
action: "getmetadata"
}, maskset, opts)
} : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
case "isValid":
actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal.call(this, undefined, !0, !0, valueBuffer)) : actionObj.value = getBuffer().join("");
for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
case "getemptymask":
return getBufferTemplate().join("");
case "remove":
if (el && el.inputmask) $.data(el, "_inputmask_opts", null), $el = $(el), el.inputmask._valueSet(opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(!0)),
EventRuler.off(el), el.inputmask.colorMask && ((colorMask = el.inputmask.colorMask).removeChild(el),
colorMask.parentNode.insertBefore(el, colorMask), colorMask.parentNode.removeChild(colorMask)),
Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value") && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
get: el.inputmask.__valueGet,
set: el.inputmask.__valueSet,
configurable: !0
}) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet),
el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = undefined;
return el;
case "getmetadata":
if ($.isArray(maskset.metadata)) {
var maskTarget = getMaskTemplate(!0, 0, !1).join("");
return $.each(maskset.metadata, function(ndx, mtdt) {
if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;
}), maskTarget;
}
return maskset.metadata;
}
}
return Inputmask.prototype = {
dataAttribute: "data-inputmask",
defaults: {
placeholder: "_",
optionalmarker: [ "[", "]" ],
quantifiermarker: [ "{", "}" ],
groupmarker: [ "(", ")" ],
alternatormarker: "|",
escapeChar: "\\",
mask: null,
regex: null,
oncomplete: $.noop,
onincomplete: $.noop,
oncleared: $.noop,
repeat: 0,
greedy: !1,
autoUnmask: !1,
removeMaskOnSubmit: !1,
clearMaskOnLostFocus: !0,
insertMode: !0,
clearIncomplete: !1,
alias: null,
onKeyDown: $.noop,
onBeforeMask: null,
onBeforePaste: function(pastedValue, opts) {
return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;
},
onBeforeWrite: null,
onUnMask: null,
showMaskOnFocus: !0,
showMaskOnHover: !0,
onKeyValidation: $.noop,
skipOptionalPartCharacter: " ",
numericInput: !1,
rightAlign: !1,
undoOnEscape: !0,
radixPoint: "",
_radixDance: !1,
groupSeparator: "",
keepStatic: null,
positionCaretOnTab: !0,
tabThrough: !1,
supportsInputType: [ "text", "tel", "password", "search" ],
ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],
isComplete: null,
preValidation: null,
postValidation: null,
staticDefinitionSymbol: undefined,
jitMasking: !1,
nullable: !0,
inputEventOnly: !1,
noValuePatching: !1,
positionCaretOnClick: "lvp",
casing: null,
inputmode: "verbatim",
colorMask: !1,
disablePredictiveText: !1,
importDataAttributes: !0
},
definitions: {
9: {
validator: "[0-91-9]",
definitionSymbol: "*"
},
a: {
validator: "[A-Za-zА-яЁёÀ-ÿµ]",
definitionSymbol: "*"
},
"*": {
validator: "[0-91-9A-Za-zА-яЁёÀ-ÿµ]"
}
},
aliases: {},
masksCache: {},
mask: function(elems) {
var that = this;
return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
var scopedOpts = $.extend(!0, {}, that.opts);
if (function(npt, opts, userOptions, dataAttribute) {
if (!0 === opts.importDataAttributes) {
var option, dataoptions, optionData, p, importOption = function(option, optionData) {
null !== (optionData = optionData !== undefined ? optionData : npt.getAttribute(dataAttribute + "-" + option)) && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)),
userOptions[option] = optionData);
}, attrOptions = npt.getAttribute(dataAttribute);
if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(/'/g, '"'),
dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) for (p in optionData = undefined,
dataoptions) if ("alias" === p.toLowerCase()) {
optionData = dataoptions[p];
break;
}
for (option in importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts),
opts) {
if (dataoptions) for (p in optionData = undefined, dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
optionData = dataoptions[p];
break;
}
importOption(option, optionData);
}
}
return $.extend(!0, opts, userOptions), ("rtl" === npt.dir || opts.rightAlign) && (npt.style.textAlign = "right"),
("rtl" === npt.dir || opts.numericInput) && (npt.dir = "ltr", npt.removeAttribute("dir"),
opts.isRTL = !0), Object.keys(userOptions).length;
}(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute)) {
var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
maskset !== undefined && (el.inputmask !== undefined && (el.inputmask.opts.autoUnmask = !0,
el.inputmask.remove()), el.inputmask = new Inputmask(undefined, undefined, !0),
el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),
el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput, el.inputmask.el = el,
el.inputmask.maskset = maskset, $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, {
action: "mask"
}));
}
}), elems && elems[0] && elems[0].inputmask || this;
},
option: function(options, noremask) {
return "string" == typeof options ? this.opts[options] : "object" === (void 0 === options ? "undefined" : _typeof(options)) ? ($.extend(this.userOptions, options),
this.el && !0 !== noremask && this.mask(this.el), this) : void 0;
},
unmaskedvalue: function(value) {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "unmaskedvalue",
value: value
});
},
remove: function() {
return maskScope.call(this, {
action: "remove"
});
},
getemptymask: function() {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "getemptymask"
});
},
hasMaskedValue: function() {
return !this.opts.autoUnmask;
},
isComplete: function() {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "isComplete"
});
},
getmetadata: function() {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "getmetadata"
});
},
isValid: function(value) {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "isValid",
value: value
});
},
format: function(value, metadata) {
return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
maskScope.call(this, {
action: "format",
value: value,
metadata: metadata
});
},
setValue: function(value) {
this.el && $(this.el).trigger("setvalue", [ value ]);
},
analyseMask: function(mask, regexMask, opts) {
var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?(?:\|[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, regexTokenizer = /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = [];
function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
this.matches = [], this.openGroup = isGroup || !1, this.alternatorGroup = !1, this.isGroup = isGroup || !1,
this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,
this.quantifier = {
min: 1,
max: 1
};
}
function insertTestDefinition(mtoken, element, position) {
position = position !== undefined ? position : mtoken.matches.length;
var prevMatch = mtoken.matches[position - 1];
if (regexMask) 0 === element.indexOf("[") || escaped && /\\d|\\s|\\w]/i.test(element) || "." === element ? mtoken.matches.splice(position++, 0, {
fn: new RegExp(element, opts.casing ? "i" : ""),
optionality: !1,
newBlockMarker: prevMatch === undefined ? "master" : prevMatch.def !== element,
casing: null,
def: element,
placeholder: undefined,
nativeDef: element
}) : (escaped && (element = element[element.length - 1]), $.each(element.split(""), function(ndx, lmnt) {
prevMatch = mtoken.matches[position - 1], mtoken.matches.splice(position++, 0, {
fn: null,
optionality: !1,
newBlockMarker: prevMatch === undefined ? "master" : prevMatch.def !== lmnt && null !== prevMatch.fn,
casing: null,
def: opts.staticDefinitionSymbol || lmnt,
placeholder: opts.staticDefinitionSymbol !== undefined ? lmnt : undefined,
nativeDef: (escaped ? "'" : "") + lmnt
});
})), escaped = !1; else {
var maskdef = (opts.definitions ? opts.definitions[element] : undefined) || Inputmask.prototype.definitions[element];
maskdef && !escaped ? mtoken.matches.splice(position++, 0, {
fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator, opts.casing ? "i" : "") : new function() {
this.test = maskdef.validator;
}() : new RegExp("."),
optionality: !1,
newBlockMarker: prevMatch === undefined ? "master" : prevMatch.def !== (maskdef.definitionSymbol || element),
casing: maskdef.casing,
def: maskdef.definitionSymbol || element,
placeholder: maskdef.placeholder,
nativeDef: element
}) : (mtoken.matches.splice(position++, 0, {
fn: null,
optionality: !1,
newBlockMarker: prevMatch === undefined ? "master" : prevMatch.def !== element && null !== prevMatch.fn,
casing: null,
def: opts.staticDefinitionSymbol || element,
placeholder: opts.staticDefinitionSymbol !== undefined ? element : undefined,
nativeDef: (escaped ? "'" : "") + element
}), escaped = !1);
}
}
function defaultCase() {
if (openenings.length > 0) {
if (insertTestDefinition(currentOpeningToken = openenings[openenings.length - 1], m),
currentOpeningToken.isAlternator) {
alternator = openenings.pop();
for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup && (alternator.matches[mndx].isGroup = !1);
openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
}
} else insertTestDefinition(currentToken, m);
}
function groupify(matches) {
var groupToken = new MaskToken(!0);
return groupToken.openGroup = !1, groupToken.matches = matches, groupToken;
}
for (regexMask && (opts.optionalmarker[0] = undefined, opts.optionalmarker[1] = undefined); match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask); ) {
if (m = match[0], regexMask) switch (m.charAt(0)) {
case "?":
m = "{0,1}";
break;
case "+":
case "*":
m = "{" + m + "}";
}
if (escaped) defaultCase(); else switch (m.charAt(0)) {
case "(?=":
case "(?!":
case "(?<=":
case "(?<!":
break;
case opts.escapeChar:
escaped = !0, regexMask && defaultCase();
break;
case opts.optionalmarker[1]:
case opts.groupmarker[1]:
if ((openingToken = openenings.pop()).openGroup = !1, openingToken !== undefined) if (openenings.length > 0) {
if ((currentOpeningToken = openenings[openenings.length - 1]).matches.push(openingToken),
currentOpeningToken.isAlternator) {
alternator = openenings.pop();
for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1,
alternator.matches[mndx].alternatorGroup = !1;
openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
}
} else currentToken.matches.push(openingToken); else defaultCase();
break;
case opts.optionalmarker[0]:
openenings.push(new MaskToken(!1, !0));
break;
case opts.groupmarker[0]:
openenings.push(new MaskToken(!0));
break;
case opts.quantifiermarker[0]:
var quantifier = new MaskToken(!1, !1, !0), mqj = (m = m.replace(/[{}]/g, "")).split("|"), mq = mqj[0].split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
"*" !== mq0 && "+" !== mq0 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
min: mq0,
max: mq1,
jit: mqj[1]
};
var matches = openenings.length > 0 ? openenings[openenings.length - 1].matches : currentToken.matches;
if ((match = matches.pop()).isAlternator) {
matches.push(match), matches = match.matches;
var groupToken = new MaskToken(!0), tmpMatch = matches.pop();
matches.push(groupToken), matches = groupToken.matches, match = tmpMatch;
}
match.isGroup || (match = groupify([ match ])), matches.push(match), matches.push(quantifier);
break;
case opts.alternatormarker:
var groupQuantifier = function(matches) {
var lastMatch = matches.pop();
return lastMatch.isQuantifier && (lastMatch = groupify([ matches.pop(), lastMatch ])),
lastMatch;
};
if (openenings.length > 0) {
var subToken = (currentOpeningToken = openenings[openenings.length - 1]).matches[currentOpeningToken.matches.length - 1];
lastMatch = currentOpeningToken.openGroup && (subToken.matches === undefined || !1 === subToken.isGroup && !1 === subToken.isAlternator) ? openenings.pop() : groupQuantifier(currentOpeningToken.matches);
} else lastMatch = groupQuantifier(currentToken.matches);
if (lastMatch.isAlternator) openenings.push(lastMatch); else if (lastMatch.alternatorGroup ? (alternator = openenings.pop(),
lastMatch.alternatorGroup = !1) : alternator = new MaskToken(!1, !1, !1, !0), alternator.matches.push(lastMatch),
openenings.push(alternator), lastMatch.openGroup) {
lastMatch.openGroup = !1;
var alternatorGroup = new MaskToken(!0);
alternatorGroup.alternatorGroup = !0, openenings.push(alternatorGroup);
}
break;
default:
defaultCase();
}
}
for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);
return currentToken.matches.length > 0 && (!function verifyGroupMarker(maskToken) {
maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {
var nextToken = maskToken.matches[ndx + 1];
(nextToken === undefined || nextToken.matches === undefined || !1 === nextToken.isQuantifier) && token && token.isGroup && (token.isGroup = !1,
regexMask || (insertTestDefinition(token, opts.groupmarker[0], 0), !0 !== token.openGroup && insertTestDefinition(token, opts.groupmarker[1]))),
verifyGroupMarker(token);
});
}(currentToken), maskTokens.push(currentToken)), (opts.numericInput || opts.isRTL) && function reverseTokens(maskToken) {
for (var match in maskToken.matches = maskToken.matches.reverse(), maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) {
var intMatch = parseInt(match);
if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
var qt = maskToken.matches[match];
maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
}
maskToken.matches[match].matches !== undefined ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = ((st = maskToken.matches[match]) === opts.optionalmarker[0] ? st = opts.optionalmarker[1] : st === opts.optionalmarker[1] ? st = opts.optionalmarker[0] : st === opts.groupmarker[0] ? st = opts.groupmarker[1] : st === opts.groupmarker[1] && (st = opts.groupmarker[0]),
st);
}
var st;
return maskToken;
}(maskTokens[0]), maskTokens;
}
}, Inputmask.extendDefaults = function(options) {
$.extend(!0, Inputmask.prototype.defaults, options);
}, Inputmask.extendDefinitions = function(definition) {
$.extend(!0, Inputmask.prototype.definitions, definition);
}, Inputmask.extendAliases = function(alias) {
$.extend(!0, Inputmask.prototype.aliases, alias);
}, Inputmask.format = function(value, options, metadata) {
return Inputmask(options).format(value, metadata);
}, Inputmask.unmask = function(value, options) {
return Inputmask(options).unmaskedvalue(value);
}, Inputmask.isValid = function(value, options) {
return Inputmask(options).isValid(value);
}, Inputmask.remove = function(elems) {
"string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
el.inputmask && el.inputmask.remove();
});
}, Inputmask.setValue = function(elems, value) {
"string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
el.inputmask ? el.inputmask.setValue(value) : $(el).trigger("setvalue", [ value ]);
});
}, Inputmask.escapeRegex = function(str) {
return str.replace(new RegExp("(\\" + [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ].join("|\\") + ")", "gim"), "\\$1");
}, Inputmask.keyCode = {
BACKSPACE: 8,
BACKSPACE_SAFARI: 127,
DELETE: 46,
DOWN: 40,
END: 35,
ENTER: 13,
ESCAPE: 27,
HOME: 36,
INSERT: 45,
LEFT: 37,
PAGE_DOWN: 34,
PAGE_UP: 33,
RIGHT: 39,
SPACE: 32,
TAB: 9,
UP: 38,
X: 88,
CONTROL: 17
}, Inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(5), __webpack_require__(6) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports) {
module.exports = jQuery;
}, function(module, exports, __webpack_require__) {
"use strict";
__webpack_require__(4), __webpack_require__(7), __webpack_require__(8), __webpack_require__(9);
var _inputmask2 = _interopRequireDefault(__webpack_require__(1)), _inputmask4 = _interopRequireDefault(__webpack_require__(0)), _jquery2 = _interopRequireDefault(__webpack_require__(2));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
_inputmask4.default === _jquery2.default && __webpack_require__(10), window.Inputmask = _inputmask2.default;
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory;
"function" == typeof Symbol && Symbol.iterator;
factory = function($, Inputmask) {
var formatCode = {
d: [ "[1-9]|[12][0-9]|3[01]", Date.prototype.setDate, "day", Date.prototype.getDate ],
dd: [ "0[1-9]|[12][0-9]|3[01]", Date.prototype.setDate, "day", function() {
return pad(Date.prototype.getDate.call(this), 2);
} ],
ddd: [ "" ],
dddd: [ "" ],
m: [ "[1-9]|1[012]", Date.prototype.setMonth, "month", function() {
return Date.prototype.getMonth.call(this) + 1;
} ],
mm: [ "0[1-9]|1[012]", Date.prototype.setMonth, "month", function() {
return pad(Date.prototype.getMonth.call(this) + 1, 2);
} ],
mmm: [ "" ],
mmmm: [ "" ],
yy: [ "[0-9]{2}", Date.prototype.setFullYear, "year", function() {
return pad(Date.prototype.getFullYear.call(this), 2);
} ],
yyyy: [ "[0-9]{4}", Date.prototype.setFullYear, "year", function() {
return pad(Date.prototype.getFullYear.call(this), 4);
} ],
h: [ "[1-9]|1[0-2]", Date.prototype.setHours, "hours", Date.prototype.getHours ],
hh: [ "0[1-9]|1[0-2]", Date.prototype.setHours, "hours", function() {
return pad(Date.prototype.getHours.call(this), 2);
} ],
hhh: [ "[0-9]+", Date.prototype.setHours, "hours", Date.prototype.getHours ],
H: [ "1?[0-9]|2[0-3]", Date.prototype.setHours, "hours", Date.prototype.getHours ],
HH: [ "[01][0-9]|2[0-3]", Date.prototype.setHours, "hours", function() {
return pad(Date.prototype.getHours.call(this), 2);
} ],
HHH: [ "[0-9]+", Date.prototype.setHours, "hours", Date.prototype.getHours ],
M: [ "[1-5]?[0-9]", Date.prototype.setMinutes, "minutes", Date.prototype.getMinutes ],
MM: [ "[0-5][0-9]", Date.prototype.setMinutes, "minutes", function() {
return pad(Date.prototype.getMinutes.call(this), 2);
} ],
s: [ "[1-5]?[0-9]", Date.prototype.setSeconds, "seconds", Date.prototype.getSeconds ],
ss: [ "[0-5][0-9]", Date.prototype.setSeconds, "seconds", function() {
return pad(Date.prototype.getSeconds.call(this), 2);
} ],
l: [ "[0-9]{3}", Date.prototype.setMilliseconds, "milliseconds", function() {
return pad(Date.prototype.getMilliseconds.call(this), 3);
} ],
L: [ "[0-9]{2}", Date.prototype.setMilliseconds, "milliseconds", function() {
return pad(Date.prototype.getMilliseconds.call(this), 2);
} ],
t: [ "[ap]" ],
tt: [ "[ap]m" ],
T: [ "[AP]" ],
TT: [ "[AP]M" ],
Z: [ "" ],
o: [ "" ],
S: [ "" ]
}, formatAlias = {
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
function getTokenizer(opts) {
if (!opts.tokenizer) {
var tokens = [];
for (var ndx in formatCode) -1 === tokens.indexOf(ndx[0]) && tokens.push(ndx[0]);
opts.tokenizer = "(" + tokens.join("+|") + ")+?|.", opts.tokenizer = new RegExp(opts.tokenizer, "g");
}
return opts.tokenizer;
}
function parse(format, dateObjValue, opts) {
for (var match, mask = ""; match = getTokenizer(opts).exec(format); ) {
if (void 0 === dateObjValue) if (formatCode[match[0]]) mask += "(" + formatCode[match[0]][0] + ")"; else switch (match[0]) {
case "[":
mask += "(";
break;
case "]":
mask += ")?";
break;
default:
mask += Inputmask.escapeRegex(match[0]);
} else if (formatCode[match[0]]) mask += formatCode[match[0]][3].call(dateObjValue.date); else mask += match[0];
}
return mask;
}
function pad(val, len) {
for (val = String(val), len = len || 2; val.length < len; ) val = "0" + val;
return val;
}
function analyseMask(maskString, format, opts) {
var targetProp, match, dateOperation, dateObj = {
date: new Date(1, 0, 1)
}, mask = maskString;
function extendYear(year) {
var correctedyear = 4 === year.length ? year : new Date().getFullYear().toString().substr(0, 4 - year.length) + year;
return opts.min && opts.min.year && opts.max && opts.max.year ? (correctedyear = correctedyear.replace(/[^0-9]/g, ""),
correctedyear += opts.min.year == opts.max.year ? opts.min.year.substr(correctedyear.length) : ("" !== correctedyear && 0 == opts.max.year.indexOf(correctedyear) ? parseInt(opts.max.year) - 1 : parseInt(opts.min.year) + 1).toString().substr(correctedyear.length)) : correctedyear = correctedyear.replace(/[^0-9]/g, "0"),
correctedyear;
}
function setValue(dateObj, value, opts) {
"year" === targetProp ? (dateObj[targetProp] = extendYear(value), dateObj["raw" + targetProp] = value) : dateObj[targetProp] = opts.min && value.match(/[^0-9]/) ? opts.min[targetProp] : value,
void 0 !== dateOperation && dateOperation.call(dateObj.date, "month" == targetProp ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);
}
if ("string" == typeof mask) {
for (;match = getTokenizer(opts).exec(format); ) {
var value = mask.slice(0, match[0].length);
formatCode.hasOwnProperty(match[0]) && (targetProp = formatCode[match[0]][2], dateOperation = formatCode[match[0]][1],
setValue(dateObj, value, opts)), mask = mask.slice(value.length);
}
return dateObj;
}
}
return Inputmask.extendAliases({
datetime: {
mask: function(opts) {
return formatCode.S = opts.i18n.ordinalSuffix.join("|"), opts.inputFormat = formatAlias[opts.inputFormat] || opts.inputFormat,
opts.displayFormat = formatAlias[opts.displayFormat] || opts.displayFormat || opts.inputFormat,
opts.outputFormat = formatAlias[opts.outputFormat] || opts.outputFormat || opts.inputFormat,
opts.placeholder = "" !== opts.placeholder ? opts.placeholder : opts.inputFormat.replace(/[\[\]]/, ""),
opts.min = analyseMask(opts.min, opts.inputFormat, opts), opts.max = analyseMask(opts.max, opts.inputFormat, opts),
opts.regex = parse(opts.inputFormat, void 0, opts), null;
},
placeholder: "",
inputFormat: "isoDateTime",
displayFormat: void 0,
outputFormat: void 0,
min: null,
max: null,
i18n: {
dayNames: [ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ],
monthNames: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
ordinalSuffix: [ "st", "nd", "rd", "th" ]
},
postValidation: function(buffer, currentResult, opts) {
var result = currentResult, dateParts = analyseMask(buffer.join(""), opts.inputFormat, opts);
return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = (result = function(dateParts, currentResult) {
return (!isFinite(dateParts.day) || "29" == dateParts.day && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.month) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day) && currentResult;
}(dateParts, result)) && function(dateParts, opts) {
var result = !0;
return opts.min && opts.min.date.getTime() == opts.min.date.getTime() && (result = opts.min.date.getTime() <= dateParts.date.getTime()),
result && opts.max && opts.max.date.getTime() == opts.max.date.getTime() && (result = opts.max.date.getTime() >= dateParts.date.getTime()),
result;
}(dateParts, opts)), result;
},
onKeyDown: function(e, buffer, caretPos, opts) {
if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
for (var match, today = new Date(), date = ""; match = getTokenizer(opts).exec(opts.inputFormat); ) "d" === match[0].charAt(0) ? date += pad(today.getDate(), match[0].length) : "m" === match[0].charAt(0) ? date += pad(today.getMonth() + 1, match[0].length) : "yyyy" === match[0] ? date += today.getFullYear().toString() : "y" === match[0].charAt(0) && (date += pad(today.getYear(), match[0].length));
this.inputmask._valueSet(date), $(this).trigger("setvalue");
}
},
onUnMask: function(maskedValue, unmaskedValue, opts) {
return parse(opts.outputFormat, analyseMask(maskedValue, opts.inputFormat, opts), opts);
},
casing: function(elem, test, pos, validPositions) {
return 0 == test.nativeDef.indexOf("[ap]") ? elem.toLowerCase() : 0 == test.nativeDef.indexOf("[AP]") ? elem.toUpperCase() : elem;
},
insertMode: !1
}
}), Inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_RESULT__;
"function" == typeof Symbol && Symbol.iterator;
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
return window;
}.call(exports, __webpack_require__, exports, module)) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_RESULT__;
"function" == typeof Symbol && Symbol.iterator;
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
return document;
}.call(exports, __webpack_require__, exports, module)) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory;
"function" == typeof Symbol && Symbol.iterator;
factory = function($, Inputmask) {
return Inputmask.extendDefinitions({
A: {
validator: "[A-Za-zА-яЁёÀ-ÿµ]",
casing: "upper"
},
"&": {
validator: "[0-9A-Za-zА-яЁёÀ-ÿµ]",
casing: "upper"
},
"#": {
validator: "[0-9A-Fa-f]",
casing: "upper"
}
}), Inputmask.extendAliases({
cssunit: {
regex: "[+-]?[0-9]+\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)"
},
url: {
regex: "(https?|ftp)//.*",
autoUnmask: !1
},
ip: {
mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
definitions: {
i: {
validator: function(chrs, maskset, pos, strict, opts) {
return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,
chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs,
new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
}
}
},
onUnMask: function(maskedValue, unmaskedValue, opts) {
return maskedValue;
},
inputmode: "numeric"
},
email: {
mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",
greedy: !1,
casing: "lower",
onBeforePaste: function(pastedValue, opts) {
return (pastedValue = pastedValue.toLowerCase()).replace("mailto:", "");
},
definitions: {
"*": {
validator: "[0-91-9A-Za-zА-яЁёÀ-ÿµ!#$%&'*+/=?^_`{|}~-]"
},
"-": {
validator: "[0-9A-Za-z-]"
}
},
onUnMask: function(maskedValue, unmaskedValue, opts) {
return maskedValue;
},
inputmode: "email"
},
mac: {
mask: "##:##:##:##:##:##"
},
vin: {
mask: "V{13}9{4}",
definitions: {
V: {
validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
casing: "upper"
}
},
clearIncomplete: !0,
autoUnmask: !0
}
}), Inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory;
"function" == typeof Symbol && Symbol.iterator;
factory = function($, Inputmask, undefined) {
function autoEscape(txt, opts) {
for (var escapedTxt = "", i = 0; i < txt.length; i++) Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? escapedTxt += "\\" + txt.charAt(i) : escapedTxt += txt.charAt(i);
return escapedTxt;
}
return Inputmask.extendAliases({
numeric: {
mask: function(opts) {
if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat),
opts.repeat = 0, opts.groupSeparator === opts.radixPoint && opts.digits && "0" !== opts.digits && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""),
" " === opts.groupSeparator && (opts.skipOptionalPartCharacter = undefined), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator,
opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)),
isFinite(opts.integerDigits))) {
var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps),
opts.integerDigits < 1 && (opts.integerDigits = "*");
}
opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)),
"radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && !1 === opts.integerOptional && (opts.positionCaretOnClick = "lvp"),
opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~",
!0 === opts.numericInput && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick,
opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);
var mask = "[+]";
if (mask += autoEscape(opts.prefix, opts), !0 === opts.integerOptional ? mask += "~{1," + opts.integerDigits + "}" : mask += "~{" + opts.integerDigits + "}",
opts.digits !== undefined) {
var radixDef = opts.decimalProtect ? ":" : opts.radixPoint, dq = opts.digits.toString().split(",");
isFinite(dq[0]) && dq[1] && isFinite(dq[1]) ? mask += radixDef + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.digitsOptional ? mask += "[" + radixDef + ";{1," + opts.digits + "}]" : mask += radixDef + ";{" + opts.digits + "}");
}
return mask += autoEscape(opts.suffix, opts), mask += "[-]", opts.greedy = !1, mask;
},
placeholder: "",
greedy: !1,
digits: "*",
digitsOptional: !0,
enforceDigitsOnBlur: !1,
radixPoint: ".",
positionCaretOnClick: "radixFocus",
groupSize: 3,
groupSeparator: "",
autoGroup: !1,
allowMinus: !0,
negationSymbol: {
front: "-",
back: ""
},
integerDigits: "+",
integerOptional: !0,
prefix: "",
suffix: "",
rightAlign: !0,
decimalProtect: !0,
min: null,
max: null,
step: 1,
insertMode: !0,
autoUnmask: !1,
unmaskAsNumber: !1,
inputmode: "numeric",
preValidation: function(buffer, pos, c, isSelection, opts, maskset) {
if ("-" === c || c === opts.negationSymbol.front) return !0 === opts.allowMinus && (opts.isNegative = opts.isNegative === undefined || !opts.isNegative,
"" === buffer.join("") || {
caret: pos,
dopost: !0
});
if (!1 === isSelection && c === opts.radixPoint && opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
var radixPos = $.inArray(opts.radixPoint, buffer);
if (-1 !== radixPos && maskset.validPositions[radixPos] !== undefined) return !0 === opts.numericInput ? pos === radixPos : {
caret: radixPos + 1
};
}
return !0;
},
postValidation: function(buffer, currentResult, opts) {
var suffix = opts.suffix.split(""), prefix = opts.prefix.split("");
if (currentResult.pos === undefined && currentResult.caret !== undefined && !0 !== currentResult.dopost) return currentResult;
var caretPos = currentResult.caret !== undefined ? currentResult.caret : currentResult.pos, maskedValue = buffer.slice();
opts.numericInput && (caretPos = maskedValue.length - caretPos - 1, maskedValue = maskedValue.reverse());
var charAtPos = maskedValue[caretPos];
if (charAtPos === opts.groupSeparator && (charAtPos = maskedValue[caretPos += 1]),
caretPos === maskedValue.length - opts.suffix.length - 1 && charAtPos === opts.radixPoint) return currentResult;
charAtPos !== undefined && charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (maskedValue[caretPos] = "?",
opts.prefix.length > 0 && caretPos >= (!1 === opts.isNegative ? 1 : 0) && caretPos < opts.prefix.length - 1 + (!1 === opts.isNegative ? 1 : 0) ? prefix[caretPos - (!1 === opts.isNegative ? 1 : 0)] = "?" : opts.suffix.length > 0 && caretPos >= maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0) && (suffix[caretPos - (maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0))] = "?")),
prefix = prefix.join(""), suffix = suffix.join("");
var processValue = maskedValue.join("").replace(prefix, "");
if (processValue = (processValue = (processValue = (processValue = processValue.replace(suffix, "")).replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "")).replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), "")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")),
processValue.length > 1 && 1 !== processValue.indexOf(opts.radixPoint) && ("0" === charAtPos && (processValue = processValue.replace(/^\?/g, "")),
processValue = processValue.replace(/^0/g, "")), processValue.charAt(0) === opts.radixPoint && "" !== opts.radixPoint && !0 !== opts.numericInput && (processValue = "0" + processValue),
"" !== processValue) {
if (processValue = processValue.split(""), (!opts.digitsOptional || opts.enforceDigitsOnBlur && "blur" === currentResult.event) && isFinite(opts.digits)) {
var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
-1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
for (var i = 1; i <= opts.digits; i++) opts.digitsOptional && (!opts.enforceDigitsOnBlur || "blur" !== currentResult.event) || processValue[radixPosition + i] !== undefined && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && maskedValue[rpb + i] !== undefined && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = currentResult.placeholder || opts.placeholder.charAt(0);
}
if (!0 !== opts.autoGroup || "" === opts.groupSeparator || charAtPos === opts.radixPoint && currentResult.pos === undefined && !currentResult.dopost) processValue = processValue.join(""); else {
var addRadix = processValue[processValue.length - 1] === opts.radixPoint && currentResult.c === opts.radixPoint;
processValue = Inputmask(function(buffer, opts) {
var postMask = "";
if (postMask += "(" + opts.groupSeparator + "*{" + opts.groupSize + "}){*}", "" !== opts.radixPoint) {
var radixSplit = buffer.join("").split(opts.radixPoint);
radixSplit[1] && (postMask += opts.radixPoint + "*{" + radixSplit[1].match(/^\d*\??\d*/)[0].length + "}");
}
return postMask;
}(processValue, opts), {
numericInput: !0,
jitMasking: !0,
definitions: {
"*": {
validator: "[0-9?]",
cardinality: 1
}
}
}).format(processValue.join("")), addRadix && (processValue += opts.radixPoint),
processValue.charAt(0) === opts.groupSeparator && processValue.substr(1);
}
}
if (opts.isNegative && "blur" === currentResult.event && (opts.isNegative = "0" !== processValue),
processValue = prefix + processValue, processValue += suffix, opts.isNegative && (processValue = opts.negationSymbol.front + processValue,
processValue += opts.negationSymbol.back), processValue = processValue.split(""),
charAtPos !== undefined) if (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) (caretPos = $.inArray("?", processValue)) > -1 ? processValue[caretPos] = charAtPos : caretPos = currentResult.caret || 0; else if (charAtPos === opts.radixPoint || charAtPos === opts.negationSymbol.front || charAtPos === opts.negationSymbol.back) {
var newCaretPos = $.inArray(charAtPos, processValue);
-1 !== newCaretPos && (caretPos = newCaretPos);
}
opts.numericInput && (caretPos = processValue.length - caretPos - 1, processValue = processValue.reverse());
var rslt = {
caret: charAtPos === undefined || currentResult.pos !== undefined ? caretPos + (opts.numericInput ? -1 : 1) : caretPos,
buffer: processValue,
refreshFromBuffer: currentResult.dopost || buffer.join("") !== processValue.join("")
};
return rslt.refreshFromBuffer ? rslt : currentResult;
},
onBeforeWrite: function(e, buffer, caretPos, opts) {
if (e) switch (e.type) {
case "keydown":
return opts.postValidation(buffer, {
caret: caretPos,
dopost: !0
}, opts);
case "blur":
case "checkval":
var unmasked;
if (function(opts) {
opts.parseMinMaxOptions === undefined && (null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
"," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, ".")),
opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN, isNaN(opts.min) && (opts.min = Number.MIN_VALUE)),
null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
"," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, ".")),
opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN, isNaN(opts.max) && (opts.max = Number.MAX_VALUE)),
opts.parseMinMaxOptions = "done");
}(opts), null !== opts.min || null !== opts.max) {
if (unmasked = opts.onUnMask(buffer.join(""), undefined, $.extend({}, opts, {
unmaskAsNumber: !0
})), null !== opts.min && unmasked < opts.min) return opts.isNegative = opts.min < 0,
opts.postValidation(opts.min.toString().replace(".", opts.radixPoint).split(""), {
caret: caretPos,
dopost: !0,
placeholder: "0"
}, opts);
if (null !== opts.max && unmasked > opts.max) return opts.isNegative = opts.max < 0,
opts.postValidation(opts.max.toString().replace(".", opts.radixPoint).split(""), {
caret: caretPos,
dopost: !0,
placeholder: "0"
}, opts);
}
return opts.postValidation(buffer, {
caret: caretPos,
placeholder: "0",
event: "blur"
}, opts);
case "_checkval":
return {
caret: caretPos
};
}
},
regex: {
integerPart: function(opts, emptyCheck) {
return emptyCheck ? new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?") : new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
},
integerNPart: function(opts) {
return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
}
},
definitions: {
"~": {
validator: function(chrs, maskset, pos, strict, opts, isSelection) {
var isValid;
if ("k" === chrs || "m" === chrs) {
isValid = {
insert: [],
c: 0
};
for (var i = 0, l = "k" === chrs ? 2 : 5; i < l; i++) isValid.insert.push({
pos: pos + i,
c: 0
});
return isValid.pos = pos + l, isValid;
}
if (!0 === (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs))) {
if (!0 !== opts.numericInput && maskset.validPositions[pos] !== undefined && "~" === maskset.validPositions[pos].match.def && !isSelection) {
var processValue = maskset.buffer.join(""), pvRadixSplit = (processValue = (processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), "")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")).split(opts.radixPoint);
pvRadixSplit.length > 1 && (pvRadixSplit[1] = pvRadixSplit[1].replace(/0/g, opts.placeholder.charAt(0))),
"0" === pvRadixSplit[0] && (pvRadixSplit[0] = pvRadixSplit[0].replace(/0/g, opts.placeholder.charAt(0))),
processValue = pvRadixSplit[0] + opts.radixPoint + pvRadixSplit[1] || "";
var bufferTemplate = maskset._buffer.join("");
for (processValue === opts.radixPoint && (processValue = bufferTemplate); null === processValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
isValid = (processValue = (processValue = processValue.replace(bufferTemplate, "")).split(""))[pos] === undefined ? {
pos: pos,
remove: pos
} : {
pos: pos
};
}
} else strict || chrs !== opts.radixPoint || maskset.validPositions[pos - 1] !== undefined || (isValid = {
insert: {
pos: pos,
c: 0
},
pos: pos + 1
});
return isValid;
},
cardinality: 1
},
"+": {
validator: function(chrs, maskset, pos, strict, opts) {
return opts.allowMinus && ("-" === chrs || chrs === opts.negationSymbol.front);
},
cardinality: 1,
placeholder: ""
},
"-": {
validator: function(chrs, maskset, pos, strict, opts) {
return opts.allowMinus && chrs === opts.negationSymbol.back;
},
cardinality: 1,
placeholder: ""
},
":": {
validator: function(chrs, maskset, pos, strict, opts) {
var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]", isValid = new RegExp(radix).test(chrs);
return isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
caret: pos + 1
}), isValid;
},
cardinality: 1,
placeholder: function(opts) {
return opts.radixPoint;
}
}
},
onUnMask: function(maskedValue, unmaskedValue, opts) {
if ("" === unmaskedValue && !0 === opts.nullable) return unmaskedValue;
var processValue = maskedValue.replace(opts.prefix, "");
return processValue = (processValue = processValue.replace(opts.suffix, "")).replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
"" !== opts.placeholder.charAt(0) && (processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), "g"), "0")),
opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")),
processValue = (processValue = processValue.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), "-")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
Number(processValue)) : processValue;
},
isComplete: function(buffer, opts) {
var maskedValue = (opts.numericInput ? buffer.slice().reverse() : buffer).join("");
return maskedValue = (maskedValue = (maskedValue = (maskedValue = (maskedValue = maskedValue.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), "-")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")).replace(opts.prefix, "")).replace(opts.suffix, "")).replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator) + "([0-9]{3})", "g"), "$1"),
"," === opts.radixPoint && (maskedValue = maskedValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
isFinite(maskedValue);
},
onBeforeMask: function(initialValue, opts) {
if (opts.isNegative = undefined, "number" == typeof initialValue && "" !== opts.radixPoint && (initialValue = initialValue.toString().replace(".", opts.radixPoint)),
initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ? initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString(),
"" !== opts.radixPoint && isFinite(initialValue)) {
var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;
2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize || vs[0].length <= groupSize && vs[1].length < groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint));
}
var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
if (initialValue = dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, "")).replace(",", opts.radixPoint) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, "")).replace(".", opts.radixPoint) : initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue.replace(/,/g, "") : initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))),
"" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
var decPart = initialValue.split(opts.radixPoint)[1].match(new RegExp("\\d*"))[0];
if (parseInt(opts.digits) < decPart.toString().length) {
var digitsFactor = Math.pow(10, parseInt(opts.digits));
initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."),
initialValue = (initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor).toString().replace(".", opts.radixPoint);
}
}
return function(buffer, opts) {
var radixPosition = $.inArray(opts.radixPoint, buffer);
-1 === radixPosition && (buffer.push(opts.radixPoint), radixPosition = buffer.length - 1);
for (var i = 1; i <= opts.digits; i++) buffer[radixPosition + i] = buffer[radixPosition + i] || "0";
return buffer;
}(initialValue.toString().split(""), opts).join("");
},
onKeyDown: function(e, buffer, caretPos, opts) {
var $input = $(this);
if (e.ctrlKey) switch (e.keyCode) {
case Inputmask.keyCode.UP:
$input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
break;
case Inputmask.keyCode.DOWN:
$input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
}
}
},
currency: {
prefix: "$ ",
groupSeparator: ",",
alias: "numeric",
placeholder: "0",
autoGroup: !0,
digits: 2,
digitsOptional: !1,
clearMaskOnLostFocus: !1
},
decimal: {
alias: "numeric"
},
integer: {
alias: "numeric",
digits: 0,
radixPoint: ""
},
percentage: {
alias: "numeric",
digits: 2,
digitsOptional: !0,
radixPoint: ".",
placeholder: "0",
autoGroup: !1,
min: 0,
max: 100,
suffix: " %",
allowMinus: !1
}
}), Inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory;
"function" == typeof Symbol && Symbol.iterator;
factory = function($, Inputmask) {
function maskSort(a, b) {
var maska = (a.mask || a).replace(/#/g, "0").replace(/\)/, "0").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "0").replace(/\)/, "0").replace(/[+()#-]/g, "");
return maska.localeCompare(maskb);
}
var analyseMaskBase = Inputmask.prototype.analyseMask;
return Inputmask.prototype.analyseMask = function(mask, regexMask, opts) {
var maskGroups = {};
return opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (function reduceVariations(masks, previousVariation, previousmaskGroup) {
previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups,
"" !== previousVariation && (previousmaskGroup[previousVariation] = {});
for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) maskGroup[variation = (mask = masks[i].mask || masks[i]).substr(0, 1)] = maskGroup[variation] || [],
maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);
for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
}((mask = mask.substr(1, mask.length - 2)).split(opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0])),
mask = function rebuild(maskGroup) {
var mask = "", submasks = [];
for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker[0] + maskGroup[ndx].join(opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0]) + opts.groupmarker[1]) : submasks.push(ndx + rebuild(maskGroup[ndx]));
return 1 === submasks.length ? mask += submasks[0] : mask += opts.groupmarker[0] + submasks.join(opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0]) + opts.groupmarker[1],
mask;
}(maskGroups)), mask = mask.replace(/9/g, "\\9")), analyseMaskBase.call(this, mask, regexMask, opts);
}, Inputmask.extendAliases({
abstractphone: {
groupmarker: [ "<", ">" ],
countrycode: "",
phoneCodes: [],
keepStatic: "auto",
mask: function(opts) {
return opts.definitions = {
"#": Inputmask.prototype.definitions[9]
}, opts.phoneCodes.sort(maskSort);
},
onBeforeMask: function(value, opts) {
var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue),
processedValue;
},
onUnMask: function(maskedValue, unmaskedValue, opts) {
return maskedValue.replace(/[()#-]/g, "");
},
inputmode: "tel"
}
}), Inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
}, function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, factory, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
factory = function($, Inputmask) {
return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
var nptmask, input = this[0];
if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
case "unmaskedvalue":
return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
case "remove":
return this.each(function() {
this.inputmask && this.inputmask.remove();
});
case "getemptymask":
return input && input.inputmask ? input.inputmask.getemptymask() : "";
case "hasMaskedValue":
return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();
case "isComplete":
return !input || !input.inputmask || input.inputmask.isComplete();
case "getmetadata":
return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
case "setvalue":
Inputmask.setValue(input, options);
break;
case "option":
if ("string" != typeof options) return this.each(function() {
if (void 0 !== this.inputmask) return this.inputmask.option(options);
});
if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
break;
default:
return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
nptmask.mask(this);
});
} else {
if ("object" == (void 0 === fn ? "undefined" : _typeof(fn))) return nptmask = new Inputmask(fn),
void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
if (void 0 !== this.inputmask) return this.inputmask.option(fn);
nptmask.mask(this);
}) : this.each(function() {
nptmask.mask(this);
});
if (void 0 === fn) return this.each(function() {
(nptmask = new Inputmask(options)).mask(this);
});
}
}), $.fn.inputmask;
}, __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2), __webpack_require__(1) ],
void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
} ]);
/*
* jQuery miniColors: A small color selector
*
* Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/)
*
* Dual licensed under the MIT or GPL Version 2 licenses
*
*/
if(jQuery)(function($){$.extend($.fn,{miniColors:function(o,data){var create=function(input,o,data){var color=expandHex(input.val());if(!color)color='ffffff';var hsb=hex2hsb(color);var trigger=$('<span class="input-group-addon" style="background-color: #'+color+'" href="#"></span>');trigger.insertAfter(input);input.addClass('miniColors').data('original-maxlength',input.attr('maxlength')||null).data('original-autocomplete',input.attr('autocomplete')||null).data('letterCase',o.letterCase?o.letterCase:'uppercase').data('trigger',trigger).data('hsb',hsb).data('change',o.change?o.change:null).data('close',o.close?o.close:null).data('open',o.open?o.open:null).attr('maxlength',7).attr('autocomplete','off').val('#'+convertCase(color,o.letterCase)).trigger('change');if(o.readonly)input.prop('readonly',true);if(o.disabled)disable(input);trigger.on('click.miniColors',function(event){event.preventDefault();if(input.val()==='')input.val('#').trigger('change');show(input)});input.on('focus.miniColors',function(event){if(input.val()==='')input.val('#').trigger('change');show(input)});input.on('blur.miniColors',function(event){var hex=expandHex(hsb2hex(input.data('hsb')));input.val(hex?'#'+convertCase(hex,input.data('letterCase')):'').trigger('change')});input.on('keydown.miniColors',function(event){if(event.keyCode===9)hide(input)});input.on('keyup.miniColors',function(event){setColorFromInput(input)});input.on('paste.miniColors',function(event){setTimeout(function(){setColorFromInput(input)},5)})};var destroy=function(input){hide();input=$(input);input.data('trigger').remove();input.attr('autocomplete',input.data('original-autocomplete')).attr('maxlength',input.data('original-maxlength')).removeData().removeClass('miniColors').off('.miniColors');$(document).off('.miniColors')};var enable=function(input){input.prop('disabled',false).data('trigger').css('opacity',1)};var disable=function(input){hide(input);input.prop('disabled',true).data('trigger').css('opacity',0.5)};var show=function(input){if(input.prop('disabled'))return false;hide();var selector=$('<div class="miniColors-selector"></div>');selector.append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"><div class="miniColors-colorPicker-inner"></div></div>').append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>').css('display','none').addClass(input.attr('class')).removeClass('form-control');var hsb=input.data('hsb');selector.find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));var colorPosition=input.data('colorPosition');if(!colorPosition)colorPosition=getColorPositionFromHSB(hsb);selector.find('.miniColors-colorPicker').css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');var huePosition=input.data('huePosition');if(!huePosition)huePosition=getHuePositionFromHSB(hsb);selector.find('.miniColors-huePicker').css('top',huePosition.y+'px');input.data('selector',selector).data('huePicker',selector.find('.miniColors-huePicker')).data('colorPicker',selector.find('.miniColors-colorPicker')).data('mousebutton',0);$('BODY').append(selector);var trigger=input.data('trigger'),hidden=!input.is(':visible'),top=hidden?trigger.offset().top+trigger.outerHeight():input.offset().top+input.outerHeight(),left=hidden?trigger.offset().left:input.offset().left,selectorWidth=selector.outerWidth(),selectorHeight=selector.outerHeight(),triggerWidth=trigger.outerWidth(),triggerHeight=trigger.outerHeight(),windowHeight=$(window).height(),windowWidth=$(window).width(),scrollTop=$(window).scrollTop(),scrollLeft=$(window).scrollLeft();if((top+selectorHeight)>windowHeight+scrollTop)top=top-selectorHeight-triggerHeight;if((left+selectorWidth)>windowWidth+scrollLeft)left=left-selectorWidth+triggerWidth;selector.css({top:top,left:left}).fadeIn(100);selector.on('selectstart',function(){return false});$(document).on('mousedown.miniColors touchstart.miniColors',function(event){input.data('mousebutton',1);var testSubject=$(event.target).parents().andSelf();if(testSubject.hasClass('miniColors-colors')){event.preventDefault();input.data('moving','colors');moveColor(input,event)}if(testSubject.hasClass('miniColors-hues')){event.preventDefault();input.data('moving','hues');moveHue(input,event)}if(testSubject.hasClass('miniColors-selector')){event.preventDefault();return}if(testSubject.hasClass('miniColors'))return;hide(input)});$(document).on('mouseup.miniColors touchend.miniColors',function(event){event.preventDefault();input.data('mousebutton',0).removeData('moving')}).on('mousemove.miniColors touchmove.miniColors',function(event){event.preventDefault();if(input.data('mousebutton')===1){if(input.data('moving')==='colors')moveColor(input,event);if(input.data('moving')==='hues')moveHue(input,event)}});if(input.data('open')){input.data('open').call(input.get(0),'#'+hsb2hex(hsb),hsb2rgb(hsb))}};var hide=function(input){if(!input)input=$('.miniColors');input.each(function(){var selector=$(this).data('selector');$(this).removeData('selector');$(selector).fadeOut(100,function(){if(input.data('close')){var hsb=input.data('hsb'),hex=hsb2hex(hsb);input.data('close').call(input.get(0),'#'+hex,hsb2rgb(hsb))}$(this).remove()})});$(document).off('.miniColors')};var moveColor=function(input,event){var colorPicker=input.data('colorPicker');colorPicker.hide();var position={x:event.pageX,y:event.pageY};if(event.originalEvent.changedTouches){position.x=event.originalEvent.changedTouches[0].pageX;position.y=event.originalEvent.changedTouches[0].pageY}position.x=position.x-input.data('selector').find('.miniColors-colors').offset().left-5;position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-5;if(position.x<=-5)position.x=-5;if(position.x>=144)position.x=144;if(position.y<=-5)position.y=-5;if(position.y>=144)position.y=144;input.data('colorPosition',position);colorPicker.css('left',position.x).css('top',position.y).show();var s=Math.round((position.x+5)*0.67);if(s<0)s=0;if(s>100)s=100;var b=100-Math.round((position.y+5)*0.67);if(b<0)b=0;if(b>100)b=100;var hsb=input.data('hsb');hsb.s=s;hsb.b=b;setColor(input,hsb,true)};var moveHue=function(input,event){var huePicker=input.data('huePicker');huePicker.hide();var position={y:event.pageY};if(event.originalEvent.changedTouches){position.y=event.originalEvent.changedTouches[0].pageY}position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-1;if(position.y<=-1)position.y=-1;if(position.y>=149)position.y=149;input.data('huePosition',position);huePicker.css('top',position.y).show();var h=Math.round((150-position.y-1)*2.4);if(h<0)h=0;if(h>360)h=360;var hsb=input.data('hsb');hsb.h=h;setColor(input,hsb,true)};var setColor=function(input,hsb,updateInput){input.data('hsb',hsb);var hex=hsb2hex(hsb);if(updateInput)input.val('#'+convertCase(hex,input.data('letterCase'))).trigger('change');input.data('trigger').css('backgroundColor','#'+hex);if(input.data('selector'))input.data('selector').find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));if(input.data('change')){if(hex===input.data('lastChange'))return;input.data('change').call(input.get(0),'#'+hex,hsb2rgb(hsb));input.data('lastChange',hex)}};var setColorFromInput=function(input){input.val('#'+cleanHex(input.val())).trigger('change');var hex=expandHex(input.val());if(!hex)return false;var hsb=hex2hsb(hex);var currentHSB=input.data('hsb');if(hsb.h===currentHSB.h&&hsb.s===currentHSB.s&&hsb.b===currentHSB.b)return true;var colorPosition=getColorPositionFromHSB(hsb);var colorPicker=$(input.data('colorPicker'));colorPicker.css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');input.data('colorPosition',colorPosition);var huePosition=getHuePositionFromHSB(hsb);var huePicker=$(input.data('huePicker'));huePicker.css('top',huePosition.y+'px');input.data('huePosition',huePosition);setColor(input,hsb);return true};var convertCase=function(string,letterCase){if(letterCase==='lowercase')return string.toLowerCase();if(letterCase==='uppercase')return string.toUpperCase();return string};var getColorPositionFromHSB=function(hsb){var x=Math.ceil(hsb.s/0.67);if(x<0)x=0;if(x>150)x=150;var y=150-Math.ceil(hsb.b/0.67);if(y<0)y=0;if(y>150)y=150;return{x:x-5,y:y-5}};var getHuePositionFromHSB=function(hsb){var y=150-(hsb.h/2.4);if(y<0)h=0;if(y>150)h=150;return{y:y-1}};var cleanHex=function(hex){return hex.replace(/[^A-F0-9]/ig,'')};var expandHex=function(hex){hex=cleanHex(hex);if(!hex)return null;if(hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];return hex.length===6?hex:null};var hsb2rgb=function(hsb){var rgb={};var h=Math.round(hsb.h);var s=Math.round(hsb.s*255/100);var v=Math.round(hsb.b*255/100);if(s===0){rgb.r=rgb.g=rgb.b=v}else{var t1=v;var t2=(255-s)*v/255;var t3=(t1-t2)*(h%60)/60;if(h===360)h=0;if(h<60){rgb.r=t1;rgb.b=t2;rgb.g=t2+t3}else if(h<120){rgb.g=t1;rgb.b=t2;rgb.r=t1-t3}else if(h<180){rgb.g=t1;rgb.r=t2;rgb.b=t2+t3}else if(h<240){rgb.b=t1;rgb.r=t2;rgb.g=t1-t3}else if(h<300){rgb.b=t1;rgb.g=t2;rgb.r=t2+t3}else if(h<360){rgb.r=t1;rgb.g=t2;rgb.b=t1-t3}else{rgb.r=0;rgb.g=0;rgb.b=0}}return{r:Math.round(rgb.r),g:Math.round(rgb.g),b:Math.round(rgb.b)}};var rgb2hex=function(rgb){var hex=[rgb.r.toString(16),rgb.g.toString(16),rgb.b.toString(16)];$.each(hex,function(nr,val){if(val.length===1)hex[nr]='0'+val});return hex.join('')};var hex2rgb=function(hex){hex=parseInt(((hex.indexOf('#')>-1)?hex.substring(1):hex),16);return{r:hex>>16,g:(hex&0x00FF00)>>8,b:(hex&0x0000FF)}};var rgb2hsb=function(rgb){var hsb={h:0,s:0,b:0};var min=Math.min(rgb.r,rgb.g,rgb.b);var max=Math.max(rgb.r,rgb.g,rgb.b);var delta=max-min;hsb.b=max;hsb.s=max!==0?255*delta/max:0;if(hsb.s!==0){if(rgb.r===max){hsb.h=(rgb.g-rgb.b)/delta}else if(rgb.g===max){hsb.h=2+(rgb.b-rgb.r)/delta}else{hsb.h=4+(rgb.r-rgb.g)/delta}}else{hsb.h=-1}hsb.h*=60;if(hsb.h<0){hsb.h+=360}hsb.s*=100/255;hsb.b*=100/255;return hsb};var hex2hsb=function(hex){var hsb=rgb2hsb(hex2rgb(hex));if(hsb.s===0)hsb.h=360;return hsb};var hsb2hex=function(hsb){return rgb2hex(hsb2rgb(hsb))};switch(o){case'readonly':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).prop('readonly',data)});return $(this);case'disabled':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;if(data){disable($(this))}else{enable($(this))}});return $(this);case'value':if(data===undefined){if(!$(this).hasClass('miniColors'))return;var input=$(this),hex=expandHex(input.val());return hex?'#'+convertCase(hex,input.data('letterCase')):null}$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).val(data).trigger('change');setColorFromInput($(this))});return $(this);case'destroy':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;destroy($(this))});return $(this);default:if(!o)o={};$(this).each(function(){if($(this)[0].tagName.toLowerCase()!=='input')return;if($(this).data('trigger'))return;create($(this),o,data)});return $(this)}}})})(jQuery);
function color_picker_init(){
jQuery('.minicolor-picker').miniColors();
}
document.addEventListener('load', color_picker_init , false);
jQuery( document ).ajaxComplete(function() {
color_picker_init();
});
/* =========================================================
* bootstrap-cfdatepicker.js
* Repo: https://github.com/eternicode/bootstrap-cfdatepicker/
* Demo: http://eternicode.github.io/bootstrap-cfdatepicker/
* Docs: http://bootstrap-cfdatepicker.readthedocs.org/
* Forked from http://www.eyecon.ro/bootstrap-cfdatepicker
* =========================================================
* Started by Stefan Petre; improvements by Andrew Rowls + contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
(function($, undefined){
var $window = $(window);
function UTCDate(){
return new Date(Date.UTC.apply(Date, arguments));
}
function UTCToday(){
var today = new Date();
return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
}
function alias(method){
return function(){
return this[method].apply(this, arguments);
};
}
var DateArray = (function(){
var extras = {
get: function(i){
return this.slice(i)[0];
},
contains: function(d){
// Array.indexOf is not cross-browser;
// $.inArray doesn't work with Dates
var val = d && d.valueOf();
for (var i=0, l=this.length; i < l; i++)
if (this[i].valueOf() === val)
return i;
return -1;
},
remove: function(i){
this.splice(i,1);
},
replace: function(new_array){
if (!new_array)
return;
if (!$.isArray(new_array))
new_array = [new_array];
this.clear();
this.push.apply(this, new_array);
},
clear: function(){
this.splice(0);
},
copy: function(){
var a = new DateArray();
a.replace(this);
return a;
}
};
return function(){
var a = [];
a.push.apply(a, arguments);
$.extend(a, extras);
return a;
};
})();
// Picker object
var Datepicker = function(element, options){
this.dates = new DateArray();
this.viewDate = UTCToday();
this.focusDate = null;
this._process_options(options);
this.element = $(element);
this.isInline = false;
this.isInput = this.element.is('input');
this.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
this.hasInput = this.component && this.element.find('input').length;
if (this.component && this.component.length === 0)
this.component = false;
this.picker = $(DPGlobal.template);
this._buildEvents();
this._attachEvents();
if (this.isInline){
this.picker.addClass('cfdatepicker-inline').appendTo(this.element);
}
else {
this.picker.addClass('cfdatepicker-dropdown dropdown-menu');
}
if (this.o.rtl){
this.picker.addClass('cfdatepicker-rtl');
}
this.viewMode = this.o.startView;
if (this.o.calendarWeeks)
this.picker.find('tfoot th.today')
.attr('colspan', function(i, val){
return parseInt(val) + 1;
});
this._allow_update = false;
this.setStartDate(this._o.startDate);
this.setEndDate(this._o.endDate);
this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
this.fillDow();
this.fillMonths();
this._allow_update = true;
this.update();
this.showMode();
if (this.isInline){
this.show();
}
};
Datepicker.prototype = {
constructor: Datepicker,
_process_options: function(opts){
// Store raw options for reference
this._o = $.extend({}, this._o, opts);
// Processed options
var o = this.o = $.extend({}, this._o);
// Check if "de-DE" style date is available, if not language should
// fallback to 2 letter code eg "de"
var lang = o.language;
if (!dates[lang]){
lang = lang.split('-')[0];
if (!dates[lang])
lang = defaults.language;
}
o.language = lang;
switch (o.startView){
case 2:
case 'decade':
o.startView = 2;
break;
case 1:
case 'year':
o.startView = 1;
break;
default:
o.startView = 0;
}
switch (o.minViewMode){
case 1:
case 'months':
o.minViewMode = 1;
break;
case 2:
case 'years':
o.minViewMode = 2;
break;
default:
o.minViewMode = 0;
}
o.startView = Math.max(o.startView, o.minViewMode);
// true, false, or Number > 0
if (o.multidate !== true){
o.multidate = Number(o.multidate) || false;
if (o.multidate !== false)
o.multidate = Math.max(0, o.multidate);
else
o.multidate = 1;
}
o.multidateSeparator = String(o.multidateSeparator);
o.weekStart %= 7;
o.weekEnd = ((o.weekStart + 6) % 7);
var format = DPGlobal.parseFormat(o.format);
if (o.startDate !== -Infinity){
if (!!o.startDate){
if (o.startDate instanceof Date)
o.startDate = this._local_to_utc(this._zero_time(o.startDate));
else
o.startDate = DPGlobal.parseDate(o.startDate, format, o.language);
}
else {
o.startDate = -Infinity;
}
}
if (o.endDate !== Infinity){
if (!!o.endDate){
if (o.endDate instanceof Date)
o.endDate = this._local_to_utc(this._zero_time(o.endDate));
else
o.endDate = DPGlobal.parseDate(o.endDate, format, o.language);
}
else {
o.endDate = Infinity;
}
}
o.daysOfWeekDisabled = o.daysOfWeekDisabled||[];
if (!$.isArray(o.daysOfWeekDisabled))
o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/);
o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){
return parseInt(d, 10);
});
var plc = String(o.orientation).toLowerCase().split(/\s+/g),
_plc = o.orientation.toLowerCase();
plc = $.grep(plc, function(word){
return (/^auto|left|right|top|bottom$/).test(word);
});
o.orientation = {x: 'auto', y: 'auto'};
if (!_plc || _plc === 'auto')
; // no action
else if (plc.length === 1){
switch (plc[0]){
case 'top':
case 'bottom':
o.orientation.y = plc[0];
break;
case 'left':
case 'right':
o.orientation.x = plc[0];
break;
}
}
else {
_plc = $.grep(plc, function(word){
return (/^left|right$/).test(word);
});
o.orientation.x = _plc[0] || 'auto';
_plc = $.grep(plc, function(word){
return (/^top|bottom$/).test(word);
});
o.orientation.y = _plc[0] || 'auto';
}
},
_events: [],
_secondaryEvents: [],
_applyEvents: function(evs){
for (var i=0, el, ch, ev; i < evs.length; i++){
el = evs[i][0];
if (evs[i].length === 2){
ch = undefined;
ev = evs[i][1];
}
else if (evs[i].length === 3){
ch = evs[i][1];
ev = evs[i][2];
}
el.on(ev, ch);
}
},
_unapplyEvents: function(evs){
for (var i=0, el, ev, ch; i < evs.length; i++){
el = evs[i][0];
if (evs[i].length === 2){
ch = undefined;
ev = evs[i][1];
}
else if (evs[i].length === 3){
ch = evs[i][1];
ev = evs[i][2];
}
el.off(ev, ch);
}
},
_buildEvents: function(){
if (this.isInput){ // single input
this._events = [
[this.element, {
focus: $.proxy(this.show, this),
keyup: $.proxy(function(e){
if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)
this.update();
}, this),
keydown: $.proxy(this.keydown, this)
}]
];
}
else if (this.component && this.hasInput){ // component: input + button
this._events = [
// For components that are not readonly, allow keyboard nav
[this.element.find('input'), {
focus: $.proxy(this.show, this),
keyup: $.proxy(function(e){
if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)
this.update();
}, this),
keydown: $.proxy(this.keydown, this)
}],
[this.component, {
click: $.proxy(this.show, this)
}]
];
}
else if (this.element.is('div')){ // inline cfdatepicker
this.isInline = true;
}
else {
this._events = [
[this.element, {
click: $.proxy(this.show, this)
}]
];
}
this._events.push(
// Component: listen for blur on element descendants
[this.element, '*', {
blur: $.proxy(function(e){
this._focused_from = e.target;
}, this)
}],
// Input: listen for blur on element
[this.element, {
blur: $.proxy(function(e){
this._focused_from = e.target;
}, this)
}]
);
this._secondaryEvents = [
[this.picker, {
click: $.proxy(this.click, this)
}],
[$(window), {
resize: $.proxy(this.place, this)
}],
[$(document), {
'mousedown touchstart': $.proxy(function(e){
// Clicked outside the cfdatepicker, hide it
if (!(
this.element.is(e.target) ||
this.element.find(e.target).length ||
this.picker.is(e.target) ||
this.picker.find(e.target).length
)){
this.hide();
}
}, this)
}]
];
},
_attachEvents: function(){
this._detachEvents();
this._applyEvents(this._events);
},
_detachEvents: function(){
this._unapplyEvents(this._events);
},
_attachSecondaryEvents: function(){
this._detachSecondaryEvents();
this._applyEvents(this._secondaryEvents);
},
_detachSecondaryEvents: function(){
this._unapplyEvents(this._secondaryEvents);
},
_trigger: function(event, altdate){
var date = altdate || this.dates.get(-1),
local_date = this._utc_to_local(date);
this.element.trigger({
type: event,
date: local_date,
dates: $.map(this.dates, this._utc_to_local),
format: $.proxy(function(ix, format){
if (arguments.length === 0){
ix = this.dates.length - 1;
format = this.o.format;
}
else if (typeof ix === 'string'){
format = ix;
ix = this.dates.length - 1;
}
format = format || this.o.format;
var date = this.dates.get(ix);
return DPGlobal.formatDate(date, format, this.o.language);
}, this)
});
},
show: function(){
if (!this.isInline)
this.picker.appendTo('body');
this.picker.show();
this.place();
this._attachSecondaryEvents();
this._trigger('show');
},
hide: function(){
if (this.isInline)
return;
if (!this.picker.is(':visible'))
return;
this.focusDate = null;
this.picker.hide().detach();
this._detachSecondaryEvents();
this.viewMode = this.o.startView;
this.showMode();
if (
this.o.forceParse &&
(
this.isInput && this.element.val() ||
this.hasInput && this.element.find('input').val()
)
)
this.setValue();
this._trigger('hide');
},
remove: function(){
this.hide();
this._detachEvents();
this._detachSecondaryEvents();
this.picker.remove();
delete this.element.data().cfdatepicker;
if (!this.isInput){
delete this.element.data().date;
}
},
_utc_to_local: function(utc){
return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));
},
_local_to_utc: function(local){
return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
},
_zero_time: function(local){
return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
},
_zero_utc_time: function(utc){
return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));
},
getDates: function(){
return $.map(this.dates, this._utc_to_local);
},
getUTCDates: function(){
return $.map(this.dates, function(d){
return new Date(d);
});
},
getDate: function(){
return this._utc_to_local(this.getUTCDate());
},
getUTCDate: function(){
return new Date(this.dates.get(-1));
},
setDates: function(){
var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
this.update.apply(this, args);
this._trigger('changeDate');
this.setValue();
},
setUTCDates: function(){
var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
this.update.apply(this, $.map(args, this._utc_to_local));
this._trigger('changeDate');
this.setValue();
},
setDate: alias('setDates'),
setUTCDate: alias('setUTCDates'),
setValue: function(){
var formatted = this.getFormattedDate();
if (!this.isInput){
if (this.component){
this.element.find('input').val(formatted).change();
}
}
else {
this.element.val(formatted).change();
}
},
getFormattedDate: function(format){
if (format === undefined)
format = this.o.format;
var lang = this.o.language;
return $.map(this.dates, function(d){
return DPGlobal.formatDate(d, format, lang);
}).join(this.o.multidateSeparator);
},
setStartDate: function(startDate){
this._process_options({startDate: startDate});
this.update();
this.updateNavArrows();
},
setEndDate: function(endDate){
this._process_options({endDate: endDate});
this.update();
this.updateNavArrows();
},
setDaysOfWeekDisabled: function(daysOfWeekDisabled){
this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
this.update();
this.updateNavArrows();
},
place: function(){
if (this.isInline)
return;
var calendarWidth = this.picker.outerWidth(),
calendarHeight = this.picker.outerHeight(),
visualPadding = 10,
windowWidth = $window.width(),
windowHeight = $window.height(),
scrollTop = $window.scrollTop();
var formID = jQuery( this.element ).data( 'form-id' );
var maybeModal = document.getElementById( 'modal-' + formID + '-content' );
var zIndex;
if( null !== maybeModal ){
zIndex = 10000;
}else{
zIndex = parseInt(this.element.parents().filter(function(){
return $(this).css('z-index') !== 'auto';
}).first().css('z-index'))+10;
}
var offset = this.component ? this.component.parent().offset() : this.element.offset();
var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
var left = offset.left,
top = offset.top;
this.picker.removeClass(
'cfdatepicker-orient-top cfdatepicker-orient-bottom '+
'cfdatepicker-orient-right cfdatepicker-orient-left'
);
if (this.o.orientation.x !== 'auto'){
this.picker.addClass('cfdatepicker-orient-' + this.o.orientation.x);
if (this.o.orientation.x === 'right')
left -= calendarWidth - width;
}
// auto x orientation is best-placement: if it crosses a window
// edge, fudge it sideways
else {
// Default to left
this.picker.addClass('cfdatepicker-orient-left');
if (offset.left < 0)
left -= offset.left - visualPadding;
else if (offset.left + calendarWidth > windowWidth)
left = windowWidth - calendarWidth - visualPadding;
}
// auto y orientation is best-situation: top or bottom, no fudging,
// decision based on which shows more of the calendar
var yorient = this.o.orientation.y,
top_overflow, bottom_overflow;
if (yorient === 'auto'){
top_overflow = -scrollTop + offset.top - calendarHeight;
bottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight);
if (Math.max(top_overflow, bottom_overflow) === bottom_overflow)
yorient = 'top';
else
yorient = 'bottom';
}
this.picker.addClass('cfdatepicker-orient-' + yorient);
if (yorient === 'top')
top += height;
else
top -= calendarHeight + parseInt(this.picker.css('padding-top'));
this.picker.css({
top: top,
left: left,
zIndex: zIndex
});
},
_allow_update: true,
update: function(){
if (!this._allow_update)
return;
var oldDates = this.dates.copy(),
dates = [],
fromArgs = false;
if (arguments.length){
$.each(arguments, $.proxy(function(i, date){
if (date instanceof Date)
date = this._local_to_utc(date);
dates.push(date);
}, this));
fromArgs = true;
}
else {
dates = this.isInput
? this.element.val()
: this.element.data('date') || this.element.find('input').val();
if (dates && this.o.multidate)
dates = dates.split(this.o.multidateSeparator);
else
dates = [dates];
delete this.element.data().date;
}
dates = $.map(dates, $.proxy(function(date){
return DPGlobal.parseDate(date, this.o.format, this.o.language);
}, this));
dates = $.grep(dates, $.proxy(function(date){
return (
date < this.o.startDate ||
date > this.o.endDate ||
!date
);
}, this), true);
this.dates.replace(dates);
if (this.dates.length)
this.viewDate = new Date(this.dates.get(-1));
else if (this.viewDate < this.o.startDate)
this.viewDate = new Date(this.o.startDate);
else if (this.viewDate > this.o.endDate)
this.viewDate = new Date(this.o.endDate);
if (fromArgs){
// setting date by clicking
this.setValue();
}
else if (dates.length){
// setting date by typing
if (String(oldDates) !== String(this.dates))
this._trigger('changeDate');
}
if (!this.dates.length && oldDates.length)
this._trigger('clearDate');
this.fill();
},
fillDow: function(){
var dowCnt = this.o.weekStart,
html = '<tr>';
if (this.o.calendarWeeks){
var cell = '<th class="cw"> </th>';
html += cell;
this.picker.find('.cfdatepicker-days thead tr:first-child').prepend(cell);
}
while (dowCnt < this.o.weekStart + 7){
html += '<th class="dow">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
}
html += '</tr>';
this.picker.find('.cfdatepicker-days thead').append(html);
},
fillMonths: function(){
var html = '',
i = 0;
while (i < 12){
html += '<span class="month">'+dates[this.o.language].monthsShort[i++]+'</span>';
}
this.picker.find('.cfdatepicker-months td').html(html);
},
setRange: function(range){
if (!range || !range.length)
delete this.range;
else
this.range = $.map(range, function(d){
return d.valueOf();
});
this.fill();
},
getClassNames: function(date){
var cls = [],
year = this.viewDate.getUTCFullYear(),
month = this.viewDate.getUTCMonth(),
today = new Date();
if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
cls.push('old');
}
else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
cls.push('new');
}
if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
cls.push('focused');
// Compare internal UTC date with local today, not UTC today
if (this.o.todayHighlight &&
date.getUTCFullYear() === today.getFullYear() &&
date.getUTCMonth() === today.getMonth() &&
date.getUTCDate() === today.getDate()){
cls.push('today');
}
if (this.dates.contains(date) !== -1)
cls.push('active');
if (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||
$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){
cls.push('disabled');
}
if (this.range){
if (date > this.range[0] && date < this.range[this.range.length-1]){
cls.push('range');
}
if ($.inArray(date.valueOf(), this.range) !== -1){
cls.push('selected');
}
}
return cls;
},
fill: function(){
var d = new Date(this.viewDate),
year = d.getUTCFullYear(),
month = d.getUTCMonth(),
startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
todaytxt = dates[this.o.language].today || dates['en'].today || '',
cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
tooltip;
this.picker.find('.cfdatepicker-days thead th.cfdatepicker-switch')
.text(dates[this.o.language].months[month]+' '+year);
this.picker.find('tfoot th.today')
.text(todaytxt)
.toggle(this.o.todayBtn !== false);
this.picker.find('tfoot th.clear')
.text(cleartxt)
.toggle(this.o.clearBtn !== false);
this.updateNavArrows();
this.fillMonths();
var prevMonth = UTCDate(year, month-1, 28),
day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
prevMonth.setUTCDate(day);
prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
var nextMonth = new Date(prevMonth);
nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
nextMonth = nextMonth.valueOf();
var html = [];
var clsName;
while (prevMonth.valueOf() < nextMonth){
if (prevMonth.getUTCDay() === this.o.weekStart){
html.push('<tr>');
if (this.o.calendarWeeks){
// ISO 8601: First week contains first thursday.
// ISO also states week starts on Monday, but we can be more abstract here.
var
// Start of current week: based on weekstart/current date
ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
// Thursday of this week
th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
// First Thursday of year, year from thursday
yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
// Calendar week: ms between thursdays, div ms per day, div 7 days
calWeek = (th - yth) / 864e5 / 7 + 1;
html.push('<td class="cw">'+ calWeek +'</td>');
}
}
clsName = this.getClassNames(prevMonth);
clsName.push('day');
if (this.o.beforeShowDay !== $.noop){
var before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
if (before === undefined)
before = {};
else if (typeof(before) === 'boolean')
before = {enabled: before};
else if (typeof(before) === 'string')
before = {classes: before};
if (before.enabled === false)
clsName.push('disabled');
if (before.classes)
clsName = clsName.concat(before.classes.split(/\s+/));
if (before.tooltip)
tooltip = before.tooltip;
}
clsName = $.unique(clsName);
html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>');
if (prevMonth.getUTCDay() === this.o.weekEnd){
html.push('</tr>');
}
prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
}
this.picker.find('.cfdatepicker-days tbody').empty().append(html.join(''));
var months = this.picker.find('.cfdatepicker-months')
.find('th:eq(1)')
.text(year)
.end()
.find('span').removeClass('active');
$.each(this.dates, function(i, d){
if (d.getUTCFullYear() === year)
months.eq(d.getUTCMonth()).addClass('active');
});
if (year < startYear || year > endYear){
months.addClass('disabled');
}
if (year === startYear){
months.slice(0, startMonth).addClass('disabled');
}
if (year === endYear){
months.slice(endMonth+1).addClass('disabled');
}
html = '';
year = parseInt(year/10, 10) * 10;
var yearCont = this.picker.find('.cfdatepicker-years')
.find('th:eq(1)')
.text(year + '-' + (year + 9))
.end()
.find('td');
year -= 1;
var years = $.map(this.dates, function(d){
return d.getUTCFullYear();
}),
classes;
for (var i = -1; i < 11; i++){
classes = ['year'];
if (i === -1)
classes.push('old');
else if (i === 10)
classes.push('new');
if ($.inArray(year, years) !== -1)
classes.push('active');
if (year < startYear || year > endYear)
classes.push('disabled');
html += '<span class="' + classes.join(' ') + '">'+year+'</span>';
year += 1;
}
yearCont.html(html);
},
updateNavArrows: function(){
if (!this._allow_update)
return;
var d = new Date(this.viewDate),
year = d.getUTCFullYear(),
month = d.getUTCMonth();
switch (this.viewMode){
case 0:
if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){
this.picker.find('.prev').css({visibility: 'hidden'});
}
else {
this.picker.find('.prev').css({visibility: 'visible'});
}
if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){
this.picker.find('.next').css({visibility: 'hidden'});
}
else {
this.picker.find('.next').css({visibility: 'visible'});
}
break;
case 1:
case 2:
if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){
this.picker.find('.prev').css({visibility: 'hidden'});
}
else {
this.picker.find('.prev').css({visibility: 'visible'});
}
if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){
this.picker.find('.next').css({visibility: 'hidden'});
}
else {
this.picker.find('.next').css({visibility: 'visible'});
}
break;
}
},
click: function(e){
e.preventDefault();
var target = $(e.target).closest('span, td, th'),
year, month, day;
if (target.length === 1){
switch (target[0].nodeName.toLowerCase()){
case 'th':
switch (target[0].className){
case 'cfdatepicker-switch':
this.showMode(1);
break;
case 'prev':
case 'next':
var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);
switch (this.viewMode){
case 0:
this.viewDate = this.moveMonth(this.viewDate, dir);
this._trigger('changeMonth', this.viewDate);
break;
case 1:
case 2:
this.viewDate = this.moveYear(this.viewDate, dir);
if (this.viewMode === 1)
this._trigger('changeYear', this.viewDate);
break;
}
this.fill();
break;
case 'today':
var date = new Date();
date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
this.showMode(-2);
var which = this.o.todayBtn === 'linked' ? null : 'view';
this._setDate(date, which);
break;
case 'clear':
var element;
if (this.isInput)
element = this.element;
else if (this.component)
element = this.element.find('input');
if (element)
element.val("").change();
this.update();
this._trigger('changeDate');
if (this.o.autoclose)
this.hide();
break;
}
break;
case 'span':
if (!target.is('.disabled')){
this.viewDate.setUTCDate(1);
if (target.is('.month')){
day = 1;
month = target.parent().find('span').index(target);
year = this.viewDate.getUTCFullYear();
this.viewDate.setUTCMonth(month);
this._trigger('changeMonth', this.viewDate);
if (this.o.minViewMode === 1){
this._setDate(UTCDate(year, month, day));
}
}
else {
day = 1;
month = 0;
year = parseInt(target.text(), 10)||0;
this.viewDate.setUTCFullYear(year);
this._trigger('changeYear', this.viewDate);
if (this.o.minViewMode === 2){
this._setDate(UTCDate(year, month, day));
}
}
this.showMode(-1);
this.fill();
}
break;
case 'td':
if (target.is('.day') && !target.is('.disabled')){
day = parseInt(target.text(), 10)||1;
year = this.viewDate.getUTCFullYear();
month = this.viewDate.getUTCMonth();
if (target.is('.old')){
if (month === 0){
month = 11;
year -= 1;
}
else {
month -= 1;
}
}
else if (target.is('.new')){
if (month === 11){
month = 0;
year += 1;
}
else {
month += 1;
}
}
this._setDate(UTCDate(year, month, day));
}
break;
}
}
if (this.picker.is(':visible') && this._focused_from){
$(this._focused_from).focus();
}
delete this._focused_from;
},
_toggle_multidate: function(date){
var ix = this.dates.contains(date);
if (!date){
this.dates.clear();
}
else if (ix !== -1){
this.dates.remove(ix);
}
else {
this.dates.push(date);
}
if (typeof this.o.multidate === 'number')
while (this.dates.length > this.o.multidate)
this.dates.remove(0);
},
_setDate: function(date, which){
if (!which || which === 'date')
this._toggle_multidate(date && new Date(date));
if (!which || which === 'view')
this.viewDate = date && new Date(date);
this.fill();
this.setValue();
this._trigger('changeDate');
var element;
if (this.isInput){
element = this.element;
}
else if (this.component){
element = this.element.find('input');
}
if (element){
element.change();
}
if (this.o.autoclose && (!which || which === 'date')){
this.hide();
}
},
moveMonth: function(date, dir){
if (!date)
return undefined;
if (!dir)
return date;
var new_date = new Date(date.valueOf()),
day = new_date.getUTCDate(),
month = new_date.getUTCMonth(),
mag = Math.abs(dir),
new_month, test;
dir = dir > 0 ? 1 : -1;
if (mag === 1){
test = dir === -1
// If going back one month, make sure month is not current month
// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
? function(){
return new_date.getUTCMonth() === month;
}
// If going forward one month, make sure month is as expected
// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
: function(){
return new_date.getUTCMonth() !== new_month;
};
new_month = month + dir;
new_date.setUTCMonth(new_month);
// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
if (new_month < 0 || new_month > 11)
new_month = (new_month + 12) % 12;
}
else {
// For magnitudes >1, move one month at a time...
for (var i=0; i < mag; i++)
// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
new_date = this.moveMonth(new_date, dir);
// ...then reset the day, keeping it in the new month
new_month = new_date.getUTCMonth();
new_date.setUTCDate(day);
test = function(){
return new_month !== new_date.getUTCMonth();
};
}
// Common date-resetting loop -- if date is beyond end of month, make it
// end of month
while (test()){
new_date.setUTCDate(--day);
new_date.setUTCMonth(new_month);
}
return new_date;
},
moveYear: function(date, dir){
return this.moveMonth(date, dir*12);
},
dateWithinRange: function(date){
return date >= this.o.startDate && date <= this.o.endDate;
},
keydown: function(e){
if (this.picker.is(':not(:visible)')){
if (e.keyCode === 27) // allow escape to hide and re-show picker
this.show();
return;
}
var dateChanged = false,
dir, newDate, newViewDate,
focusDate = this.focusDate || this.viewDate;
switch (e.keyCode){
case 27: // escape
if (this.focusDate){
this.focusDate = null;
this.viewDate = this.dates.get(-1) || this.viewDate;
this.fill();
}
else
this.hide();
e.preventDefault();
break;
case 37: // left
case 39: // right
if (!this.o.keyboardNavigation)
break;
dir = e.keyCode === 37 ? -1 : 1;
if (e.ctrlKey){
newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
newViewDate = this.moveYear(focusDate, dir);
this._trigger('changeYear', this.viewDate);
}
else if (e.shiftKey){
newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
newViewDate = this.moveMonth(focusDate, dir);
this._trigger('changeMonth', this.viewDate);
}
else {
newDate = new Date(this.dates.get(-1) || UTCToday());
newDate.setUTCDate(newDate.getUTCDate() + dir);
newViewDate = new Date(focusDate);
newViewDate.setUTCDate(focusDate.getUTCDate() + dir);
}
if (this.dateWithinRange(newDate)){
this.focusDate = this.viewDate = newViewDate;
this.setValue();
this.fill();
e.preventDefault();
}
break;
case 38: // up
case 40: // down
if (!this.o.keyboardNavigation)
break;
dir = e.keyCode === 38 ? -1 : 1;
if (e.ctrlKey){
newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
newViewDate = this.moveYear(focusDate, dir);
this._trigger('changeYear', this.viewDate);
}
else if (e.shiftKey){
newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
newViewDate = this.moveMonth(focusDate, dir);
this._trigger('changeMonth', this.viewDate);
}
else {
newDate = new Date(this.dates.get(-1) || UTCToday());
newDate.setUTCDate(newDate.getUTCDate() + dir * 7);
newViewDate = new Date(focusDate);
newViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7);
}
if (this.dateWithinRange(newDate)){
this.focusDate = this.viewDate = newViewDate;
this.setValue();
this.fill();
e.preventDefault();
}
break;
case 32: // spacebar
// Spacebar is used in manually typing dates in some formats.
// As such, its behavior should not be hijacked.
break;
case 13: // enter
focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
this._toggle_multidate(focusDate);
dateChanged = true;
this.focusDate = null;
this.viewDate = this.dates.get(-1) || this.viewDate;
this.setValue();
this.fill();
if (this.picker.is(':visible')){
e.preventDefault();
if (this.o.autoclose)
this.hide();
}
break;
case 9: // tab
this.focusDate = null;
this.viewDate = this.dates.get(-1) || this.viewDate;
this.fill();
this.hide();
break;
}
if (dateChanged){
if (this.dates.length)
this._trigger('changeDate');
else
this._trigger('clearDate');
var element;
if (this.isInput){
element = this.element;
}
else if (this.component){
element = this.element.find('input');
}
if (element){
element.change();
}
}
},
showMode: function(dir){
if (dir){
this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));
}
this.picker
.find('>div')
.hide()
.filter('.cfdatepicker-'+DPGlobal.modes[this.viewMode].clsName)
.css('display', 'block');
this.updateNavArrows();
}
};
var DateRangePicker = function(element, options){
this.element = $(element);
this.inputs = $.map(options.inputs, function(i){
return i.jquery ? i[0] : i;
});
delete options.inputs;
$(this.inputs)
.cfdatepicker(options)
.bind('changeDate', $.proxy(this.dateUpdated, this));
this.pickers = $.map(this.inputs, function(i){
return $(i).data('cfdatepicker');
});
this.updateDates();
};
DateRangePicker.prototype = {
updateDates: function(){
this.dates = $.map(this.pickers, function(i){
return i.getUTCDate();
});
this.updateRanges();
},
updateRanges: function(){
var range = $.map(this.dates, function(d){
return d.valueOf();
});
$.each(this.pickers, function(i, p){
p.setRange(range);
});
},
dateUpdated: function(e){
// `this.updating` is a workaround for preventing infinite recursion
// between `changeDate` triggering and `setUTCDate` calling. Until
// there is a better mechanism.
if (this.updating)
return;
this.updating = true;
var dp = $(e.target).data('cfdatepicker'),
new_date = dp.getUTCDate(),
i = $.inArray(e.target, this.inputs),
l = this.inputs.length;
if (i === -1)
return;
$.each(this.pickers, function(i, p){
if (!p.getUTCDate())
p.setUTCDate(new_date);
});
if (new_date < this.dates[i]){
// Date being moved earlier/left
while (i >= 0 && new_date < this.dates[i]){
this.pickers[i--].setUTCDate(new_date);
}
}
else if (new_date > this.dates[i]){
// Date being moved later/right
while (i < l && new_date > this.dates[i]){
this.pickers[i++].setUTCDate(new_date);
}
}
this.updateDates();
delete this.updating;
},
remove: function(){
$.map(this.pickers, function(p){ p.remove(); });
delete this.element.data().cfdatepicker;
}
};
function opts_from_el(el, prefix){
// Derive options from element data-attrs
var data = $(el).data(),
out = {}, inkey,
replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
prefix = new RegExp('^' + prefix.toLowerCase());
function re_lower(_,a){
return a.toLowerCase();
}
for (var key in data)
if (prefix.test(key)){
inkey = key.replace(replace, re_lower);
out[inkey] = data[key];
}
return out;
}
function opts_from_locale(lang){
// Derive options from locale plugins
var out = {};
// Check if "de-DE" style date is available, if not language should
// fallback to 2 letter code eg "de"
if (!dates[lang]){
lang = lang.split('-')[0];
if (!dates[lang])
return;
}
var d = dates[lang];
$.each(locale_opts, function(i,k){
if (k in d)
out[k] = d[k];
});
return out;
}
var old = $.fn.cfdatepicker;
$.fn.cfdatepicker = function(option){
var args = Array.apply(null, arguments);
args.shift();
var internal_return;
this.each(function(){
var $this = $(this),
data = $this.data('cfdatepicker'),
options = typeof option === 'object' && option;
if (!data){
var elopts = opts_from_el(this, 'date'),
// Preliminary otions
xopts = $.extend({}, defaults, elopts, options),
locopts = opts_from_locale(xopts.language),
// Options priority: js args, data-attrs, locales, defaults
opts = $.extend({}, defaults, locopts, elopts, options);
if ($this.is('.input-daterange') || opts.inputs){
var ropts = {
inputs: opts.inputs || $this.find('input').toArray()
};
$this.data('cfdatepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));
}
else {
$this.data('cfdatepicker', (data = new Datepicker(this, opts)));
}
}
if (typeof option === 'string' && typeof data[option] === 'function'){
internal_return = data[option].apply(data, args);
if (internal_return !== undefined)
return false;
}
});
if (internal_return !== undefined)
return internal_return;
else
return this;
};
var defaults = $.fn.cfdatepicker.defaults = {
autoclose: false,
beforeShowDay: $.noop,
calendarWeeks: false,
clearBtn: false,
daysOfWeekDisabled: [],
endDate: Infinity,
forceParse: true,
format: 'mm/dd/yyyy',
keyboardNavigation: true,
language: 'en',
minViewMode: 0,
multidate: false,
multidateSeparator: ',',
orientation: "auto",
rtl: false,
startDate: -Infinity,
startView: 0,
todayBtn: false,
todayHighlight: false,
weekStart: 0
};
var locale_opts = $.fn.cfdatepicker.locale_opts = [
'format',
'rtl',
'weekStart'
];
$.fn.cfdatepicker.Constructor = Datepicker;
var dates = $.fn.cfdatepicker.dates = {
en: {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
clear: "Clear"
}
};
var DPGlobal = {
modes: [
{
clsName: 'days',
navFnc: 'Month',
navStep: 1
},
{
clsName: 'months',
navFnc: 'FullYear',
navStep: 1
},
{
clsName: 'years',
navFnc: 'FullYear',
navStep: 10
}],
isLeapYear: function(year){
return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
},
getDaysInMonth: function(year, month){
return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
},
validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
parseFormat: function(format){
// IE treats \0 as a string end in inputs (truncating the value),
// so it's a bad format delimiter, anyway
var separators = format.replace(this.validParts, '\0').split('\0'),
parts = format.match(this.validParts);
if (!separators || !separators.length || !parts || parts.length === 0){
throw new Error("Invalid date format.");
}
return {separators: separators, parts: parts};
},
parseDate: function(date, format, language){
if (!date)
return undefined;
if (date instanceof Date)
return date;
if (typeof format === 'string')
format = DPGlobal.parseFormat(format);
var part_re = /([\-+]\d+)([dmwy])/,
parts = date.match(/([\-+]\d+)([dmwy])/g),
part, dir, i;
if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
date = new Date();
for (i=0; i < parts.length; i++){
part = part_re.exec(parts[i]);
dir = parseInt(part[1]);
switch (part[2]){
case 'd':
date.setUTCDate(date.getUTCDate() + dir);
break;
case 'm':
date = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);
break;
case 'w':
date.setUTCDate(date.getUTCDate() + dir * 7);
break;
case 'y':
date = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);
break;
}
}
return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);
}
parts = date && date.match(this.nonpunctuation) || [];
date = new Date();
var parsed = {},
setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
setters_map = {
yyyy: function(d,v){
return d.setUTCFullYear(v);
},
yy: function(d,v){
return d.setUTCFullYear(2000+v);
},
m: function(d,v){
if (isNaN(d))
return d;
v -= 1;
while (v < 0) v += 12;
v %= 12;
d.setUTCMonth(v);
while (d.getUTCMonth() !== v)
d.setUTCDate(d.getUTCDate()-1);
return d;
},
d: function(d,v){
return d.setUTCDate(v);
}
},
val, filtered;
setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
setters_map['dd'] = setters_map['d'];
date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
var fparts = format.parts.slice();
// Remove noop parts
if (parts.length !== fparts.length){
fparts = $(fparts).filter(function(i,p){
return $.inArray(p, setters_order) !== -1;
}).toArray();
}
// Process remainder
function match_part(){
var m = this.slice(0, parts[i].length),
p = parts[i].slice(0, m.length);
return m === p;
}
if (parts.length === fparts.length){
var cnt;
for (i=0, cnt = fparts.length; i < cnt; i++){
val = parseInt(parts[i], 10);
part = fparts[i];
if (isNaN(val)){
switch (part){
case 'MM':
filtered = $(dates[language].months).filter(match_part);
val = $.inArray(filtered[0], dates[language].months) + 1;
break;
case 'M':
filtered = $(dates[language].monthsShort).filter(match_part);
val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
break;
}
}
parsed[part] = val;
}
var _date, s;
for (i=0; i < setters_order.length; i++){
s = setters_order[i];
if (s in parsed && !isNaN(parsed[s])){
_date = new Date(date);
setters_map[s](_date, parsed[s]);
if (!isNaN(_date))
date = _date;
}
}
}
return date;
},
formatDate: function(date, format, language){
if (!date)
return '';
if (typeof format === 'string')
format = DPGlobal.parseFormat(format);
var val = {
d: date.getUTCDate(),
D: dates[language].daysShort[date.getUTCDay()],
DD: dates[language].days[date.getUTCDay()],
m: date.getUTCMonth() + 1,
M: dates[language].monthsShort[date.getUTCMonth()],
MM: dates[language].months[date.getUTCMonth()],
yy: date.getUTCFullYear().toString().substring(2),
yyyy: date.getUTCFullYear()
};
val.dd = (val.d < 10 ? '0' : '') + val.d;
val.mm = (val.m < 10 ? '0' : '') + val.m;
date = [];
var seps = $.extend([], format.separators);
for (var i=0, cnt = format.parts.length; i <= cnt; i++){
if (seps.length)
date.push(seps.shift());
date.push(val[format.parts[i]]);
}
return date.join('');
},
headTemplate: '<thead>'+
'<tr>'+
'<th class="prev">«</th>'+
'<th colspan="5" class="cfdatepicker-switch"></th>'+
'<th class="next">»</th>'+
'</tr>'+
'</thead>',
contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
footTemplate: '<tfoot>'+
'<tr>'+
'<th colspan="7" class="today"></th>'+
'</tr>'+
'<tr>'+
'<th colspan="7" class="clear"></th>'+
'</tr>'+
'</tfoot>'
};
DPGlobal.template = '<div class="cfdatepicker">'+
'<div class="cfdatepicker-days">'+
'<table class=" table-condensed">'+
DPGlobal.headTemplate+
'<tbody></tbody>'+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'<div class="cfdatepicker-months">'+
'<table class="table-condensed">'+
DPGlobal.headTemplate+
DPGlobal.contTemplate+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'<div class="cfdatepicker-years">'+
'<table class="table-condensed">'+
DPGlobal.headTemplate+
DPGlobal.contTemplate+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'</div>';
$.fn.cfdatepicker.DPGlobal = DPGlobal;
/* DATEPICKER NO CONFLICT
* =================== */
$.fn.cfdatepicker.noConflict = function(){
$.fn.cfdatepicker = old;
return this;
};
/* DATEPICKER DATA-API
* ================== */
$(document).on(
'focus.cfdatepicker.data-api click.cfdatepicker.data-api',
'[data-provide="cfdatepicker"]',
function(e){
var $this = $(this);
if ($this.data('cfdatepicker'))
return;
// component click requires us to explicitly show it
e.preventDefault();
$this.cfdatepicker('show')
.on('show', function(){ $(this).trigger('blur'); })
.on('hide', function(){
$(this).attr("disabled", false);
if($this.hasClass('parsley-error') && $this.val() !== ''){
$this.removeClass('parsley-error');
$this.addClass('parsley-success');
$('#parsley-id-' + $this.data('parsley-id')).hide();
}
})
}
);
}(window.jQuery));
/*! rangeslider.js - v0.3.1 | (c) 2014 @andreruffert | MIT license | https://github.com/andreruffert/rangeslider.js */
'use strict';
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
}
else if (typeof exports === 'object') {
// CommonJS
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
/**
* Range feature detection
* @return {Boolean}
*/
function supportsRange() {
var input = document.createElement('input');
input.setAttribute('type', 'range');
return input.type !== 'text';
}
var pluginName = 'rangeslider',
pluginInstances = [],
inputrange = supportsRange(),
defaults = {
polyfill: true,
rangeClass: 'rangeslider',
disabledClass: 'rangeslider--disabled',
fillClass: 'rangeslider__fill',
handleClass: 'rangeslider__handle',
startEvent: ['mousedown', 'touchstart', 'pointerdown'],
moveEvent: ['mousemove', 'touchmove', 'pointermove'],
endEvent: ['mouseup', 'touchend', 'pointerup']
};
/**
* Delays a function for the given number of milliseconds, and then calls
* it with the arguments supplied.
*
* @param {Function} fn [description]
* @param {Number} wait [description]
* @return {Function}
*/
function delay(fn, wait) {
var args = Array.prototype.slice.call(arguments, 2);
return setTimeout(function(){ return fn.apply(null, args); }, wait);
}
/**
* Returns a debounced function that will make sure the given
* function is not triggered too much.
*
* @param {Function} fn Function to debounce.
* @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the function. (defaults to 100ms)
* @return {Function}
*/
function debounce(fn, debounceDuration) {
debounceDuration = debounceDuration || 100;
return function() {
if (!fn.debouncing) {
var args = Array.prototype.slice.apply(arguments);
fn.lastReturnVal = fn.apply(window, args);
fn.debouncing = true;
}
clearTimeout(fn.debounceTimeout);
fn.debounceTimeout = setTimeout(function(){
fn.debouncing = false;
}, debounceDuration);
return fn.lastReturnVal;
};
}
/**
* Plugin
* @param {String} element
* @param {Object} options
*/
function Plugin(element, options) {
this.$window = $(window);
this.$document = $(document);
this.$element = $(element);
this.options = $.extend( {}, defaults, options );
this._defaults = defaults;
this._name = pluginName;
this.startEvent = this.options.startEvent.join('.' + pluginName + ' ') + '.' + pluginName;
this.moveEvent = this.options.moveEvent.join('.' + pluginName + ' ') + '.' + pluginName;
this.endEvent = this.options.endEvent.join('.' + pluginName + ' ') + '.' + pluginName;
this.polyfill = this.options.polyfill;
this.onInit = this.options.onInit;
this.onSlide = this.options.onSlide;
this.onSlideEnd = this.options.onSlideEnd;
// Plugin should only be used as a polyfill
if (this.polyfill) {
// Input range support?
if (inputrange) { return false; }
}
this.identifier = 'js-' + pluginName + '-' +(+new Date());
this.min = parseFloat(this.$element[0].getAttribute('min') || 0);
this.max = parseFloat(this.$element[0].getAttribute('max') || 100);
this.value = parseFloat(this.$element[0].value || this.min + (this.max-this.min)/2);
this.step = parseFloat(this.$element[0].getAttribute('step') || 1);
this.$fill = $('<div class="' + this.options.fillClass + '" />');
this.$handle = $('<div class="' + this.options.handleClass + '" />');
this.$range = $('<div class="' + this.options.rangeClass + '" id="' + this.identifier + '" />').insertAfter(this.$element).prepend(this.$fill, this.$handle);
// visually hide the input
this.$element.css({
'position': 'absolute',
'width': '1px',
'height': '1px',
'overflow': 'hidden',
'opacity': '0'
});
// Store context
this.handleDown = $.proxy(this.handleDown, this);
this.handleMove = $.proxy(this.handleMove, this);
this.handleEnd = $.proxy(this.handleEnd, this);
this.init();
// Attach Events
var _this = this;
this.$window.on('resize' + '.' + pluginName, debounce(function() {
// Simulate resizeEnd event.
delay(function() { _this.update(); }, 300);
}, 20));
this.$document.on(this.startEvent, '#' + this.identifier + ':not(.' + this.options.disabledClass + ')', this.handleDown);
// Listen to programmatic value changes
this.$element.on('change' + '.' + pluginName, function(e, data) {
if (data && data.origin === pluginName) {
return;
}
var value = e.target.value,
pos = _this.getPositionFromValue(value);
_this.setPosition(pos);
});
}
Plugin.prototype.init = function() {
if (this.onInit && typeof this.onInit === 'function') {
this.onInit();
}
this.update();
};
Plugin.prototype.update = function() {
this.handleWidth = this.$handle[0].offsetWidth;
this.rangeWidth = this.$range[0].offsetWidth;
this.maxHandleX = this.rangeWidth - this.handleWidth;
this.grabX = this.handleWidth / 2;
this.position = this.getPositionFromValue(this.value);
// Consider disabled state
if (this.$element[0].disabled) {
this.$range.addClass(this.options.disabledClass);
} else {
this.$range.removeClass(this.options.disabledClass);
}
this.setPosition(this.position);
};
Plugin.prototype.handleDown = function(e) {
e.preventDefault();
this.$document.on(this.moveEvent, this.handleMove);
this.$document.on(this.endEvent, this.handleEnd);
// If we click on the handle don't set the new position
if ((' ' + e.target.className + ' ').replace(/[\n\t]/g, ' ').indexOf(this.options.handleClass) > -1) {
return;
}
var posX = this.getRelativePosition(this.$range[0], e),
handleX = this.getPositionFromNode(this.$handle[0]) - this.getPositionFromNode(this.$range[0]);
this.setPosition(posX - this.grabX);
if (posX >= handleX && posX < handleX + this.handleWidth) {
this.grabX = posX - handleX;
}
};
Plugin.prototype.handleMove = function(e) {
e.preventDefault();
var posX = this.getRelativePosition(this.$range[0], e);
this.setPosition(posX - this.grabX);
};
Plugin.prototype.handleEnd = function(e) {
e.preventDefault();
this.$document.off(this.moveEvent, this.handleMove);
this.$document.off(this.endEvent, this.handleEnd);
var posX = this.getRelativePosition(this.$range[0], e);
if (this.onSlideEnd && typeof this.onSlideEnd === 'function') {
this.onSlideEnd(posX - this.grabX, this.value);
}
};
Plugin.prototype.cap = function(pos, min, max) {
if (pos < min) { return min; }
if (pos > max) { return max; }
return pos;
};
Plugin.prototype.setPosition = function(pos) {
var value, left;
// Snapping steps
value = (this.getValueFromPosition(this.cap(pos, 0, this.maxHandleX)) / this.step) * this.step;
left = this.getPositionFromValue(value);
// Update ui
this.$fill[0].style.width = (left + this.grabX) + 'px';
this.$handle[0].style.left = left + 'px';
this.setValue(value);
// Update globals
this.position = left;
this.value = value;
if (this.onSlide && typeof this.onSlide === 'function') {
this.onSlide(left, value);
}
};
Plugin.prototype.getPositionFromNode = function(node) {
var i = 0;
while (node !== null) {
i += node.offsetLeft;
node = node.offsetParent;
}
return i;
};
Plugin.prototype.getRelativePosition = function(node, e) {
return (e.pageX || e.originalEvent.clientX || e.originalEvent.touches[0].clientX || e.currentPoint.x) - this.getPositionFromNode(node);
};
Plugin.prototype.getPositionFromValue = function(value) {
var percentage, pos;
percentage = (value - this.min)/(this.max - this.min);
pos = percentage * this.maxHandleX;
return pos;
};
Plugin.prototype.getValueFromPosition = function(pos) {
var percentage, value;
percentage = ((pos) / (this.maxHandleX || 1));
value = this.step * Math.ceil((((percentage) * (this.max - this.min)) + this.min) / this.step);
return Number((value).toFixed(2));
};
Plugin.prototype.setValue = function(value) {
if (value !== this.value) {
this.$element.val(value).trigger('change', {origin: pluginName});
}
};
Plugin.prototype.destroy = function() {
this.$document.off(this.startEvent, '#' + this.identifier, this.handleDown);
this.$element
.off('.' + pluginName)
.removeAttr('style')
.removeData('plugin_' + pluginName);
// Remove the generated markup
if (this.$range && this.$range.length) {
this.$range[0].parentNode.removeChild(this.$range[0]);
}
// Remove global events if there isn't any instance anymore.
pluginInstances.splice(pluginInstances.indexOf(this.$element[0]),1);
if (!pluginInstances.length) {
this.$window.off('.' + pluginName);
}
};
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
$.fn[pluginName] = function(options) {
return this.each(function() {
var $this = $(this),
data = $this.data('plugin_' + pluginName);
// Create a new instance.
if (!data) {
$this.data('plugin_' + pluginName, (data = new Plugin(this, options)));
pluginInstances.push(this);
}
// Make it possible to access methods from public.
// e.g `$element.rangeslider('method');`
if (typeof options === 'string') {
data[options]();
}
});
};
}));
/*!
* jQuery Raty - A Star Rating Plugin
*
* The MIT License
*
* @author : Washington Botelho
* @doc : http://wbotelhos.com/raty
* @version : 2.6.0
*
*/
;(function($) {
'use strict';
var methods = {
init: function(options) {
return this.each(function() {
this.self = $(this);
methods.destroy.call(this.self);
this.opt = $.extend(true, {}, $.fn.raty.defaults, options);
methods._adjustCallback.call(this);
methods._adjustNumber.call(this);
if (this.opt.starType !== 'img') {
methods._adjustStarType.call(this);
}
methods._adjustPath.call(this);
methods._createStars.call(this);
if (this.opt.cancel) {
methods._createCancel.call(this);
}
if (this.opt.precision) {
methods._adjustPrecision.call(this);
}
methods._createScore.call(this);
methods._apply.call(this, this.opt.score);
methods._target.call(this, this.opt.score);
if (this.opt.readOnly) {
methods._lock.call(this);
} else {
this.style.cursor = 'pointer';
methods._binds.call(this);
}
this.self.data('options', this.opt);
});
},
_adjustCallback: function() {
var options = ['number', 'readOnly', 'score', 'scoreName'];
for (var i = 0; i < options.length; i++) {
if (typeof this.opt[options[i]] === 'function') {
this.opt[options[i]] = this.opt[options[i]].call(this);
}
}
},
_adjustNumber: function() {
this.opt.number = methods._between(this.opt.number, 1, this.opt.numberMax);
},
_adjustPath: function() {
this.opt.path = this.opt.path || '';
if (this.opt.path && this.opt.path.charAt(this.opt.path.length - 1) !== '/') {
this.opt.path += '/';
}
},
_adjustPrecision: function() {
this.opt.half = true;
this.opt.targetType = 'score';
},
_adjustStarType: function() {
this.opt.path = '';
var replaces = ['cancelOff', 'cancelOn', 'starHalf', 'starOff', 'starOn'];
for (var i = 0; i < replaces.length; i++) {
this.opt[replaces[i]] = this.opt[replaces[i]].replace('.', '-');
}
},
_apply: function(score) {
methods._fill.call(this, score);
if (score) {
if (score > 0) {
this.score.val(methods._between(score, 0, this.opt.number));
}
methods._roundStars.call(this, score);
}
},
_between: function(value, min, max) {
return Math.min(Math.max(parseFloat(value), min), max);
},
_binds: function() {
if (this.cancel) {
methods._bindOverCancel.call(this);
methods._bindClickCancel.call(this);
methods._bindOutCancel.call(this);
}
methods._bindOver.call(this);
methods._bindClick.call(this);
methods._bindOut.call(this);
},
_bindClick: function() {
var that = this;
that.stars.on('click.raty', function(evt) {
var star = $(this);
that.score.val((that.opt.half || that.opt.precision) ? that.self.data('score') : (this.alt || star.data('alt')));
if (that.opt.click) {
that.opt.click.call(that, +that.score.val(), evt);
}
});
},
_bindClickCancel: function() {
var that = this;
that.cancel.on('click.raty', function(evt) {
that.score.removeAttr('value');
if (that.opt.click) {
that.opt.click.call(that, null, evt);
}
});
},
_bindOut: function() {
var that = this;
that.self.on('mouseleave.raty', function(evt) {
var score = +that.score.val() || undefined;
methods._apply.call(that, score);
methods._target.call(that, score, evt);
if (that.opt.mouseout) {
that.opt.mouseout.call(that, score, evt);
}
});
},
_bindOutCancel: function() {
var that = this;
that.cancel.on('mouseleave.raty', function(evt) {
var
cancel = $(this),
cancelOff = that.opt.path + that.opt.cancelOff;
if (that.opt.starType === 'img') {
cancel.attr('src', cancelOff);
} else {
var cancelOn = that.opt.path + that.opt.cancelOn;
cancel.removeClass(cancelOn).addClass(cancelOff);
}
if (that.opt.mouseout) {
var score = +that.score.val() || undefined;
that.opt.mouseout.call(that, score, evt);
}
});
},
_bindOver: function() {
var that = this,
action = that.opt.half ? 'mousemove.raty' : 'mouseover.raty';
that.stars.on(action, function(evt) {
var score = methods._getScoreByPosition.call(that, evt, this);
methods._fill.call(that, score);
if (that.opt.half) {
methods._roundStars.call(that, score);
that.self.data('score', score);
}
methods._target.call(that, score, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that, score, evt);
}
});
},
_bindOverCancel: function() {
var that = this;
that.cancel.on('mouseover.raty', function(evt) {
var
cancelOn = that.opt.path + that.opt.cancelOn,
star = $(this),
starOff = that.opt.path + that.opt.starOff;
if (that.opt.starType === 'img') {
star.attr('src', cancelOn);
that.stars.attr('src', starOff);
} else {
that.stars.attr('class', starOff);
var cancelOff = that.opt.path + that.opt.cancelOff;
star.removeClass(cancelOff).addClass(cancelOn).css('color', that.opt.starColor);
}
methods._target.call(that, null, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that, null);
}
});
},
_buildScoreField: function() {
return $('<input />', { name: this.opt.scoreName, type: 'hidden' }).appendTo(this);
},
_createCancel: function() {
var icon = this.opt.path + this.opt.cancelOff,
cancel = $('<' + this.opt.starType + ' />', { title: this.opt.cancelHint, 'class': 'raty-cancel' }).css('marginRight', this.opt.space ? this.opt.spaceWidth + 'px' : '0');
if (this.opt.starType === 'img') {
cancel.attr({ src: icon, alt: 'x' });
} else {
// TODO: use $.data
cancel.attr('data-alt', 'x').addClass(icon);
}
if (this.opt.cancelPlace === 'left') {
this.self.prepend(' ').prepend(cancel);
} else {
this.self.append(' ').append(cancel);
}
this.cancel = cancel;
},
_createScore: function() {
var score = $(this.opt.targetScore);
this.score = score.length ? score : methods._buildScoreField.call(this);
},
_createStars: function() {
for (var i = 1; i <= this.opt.number; i++) {
var
attrs ,
icon = (this.opt.score && this.opt.score >= i) ? 'starOn' : 'starOff',
title = methods._getHint.call(this, i);
// TODO: extract as icon: && alt:
icon = this.opt.path + this.opt[icon];
if (this.opt.starType !== 'img') {
// TODO: use $.data.
attrs = { 'data-alt': i, 'class': icon };
} else {
attrs = { src: icon, alt: i };
}
attrs.title = title;
$('<' + this.opt.starType + ' />', attrs).css('marginRight', i < this.opt.number && this.opt.space ? this.opt.spaceWidth + 'px' : '0').appendTo(this);
if (this.opt.space) {
// this.self.append(i < this.opt.number ? ' ' : '');
}
}
this.stars = this.self.children(this.opt.starType);
},
_error: function(message) {
$(this).text(message);
$.error(message);
},
_fill: function(score) {
var hash = 0;
for (var i = 1; i <= this.stars.length; i++) {
var
icon,
star = this.stars.eq(i - 1),
turnOn = methods._turnOn.call(this, i, score);
if (this.opt.iconRange && this.opt.iconRange.length > hash) {
var irange = this.opt.iconRange[hash];
icon = methods._getIconRange.call(this, irange, turnOn);
if (i <= irange.range) {
// TODO: extract.
if (this.opt.starType === 'img') {
star.attr('src', icon);
} else {
star.attr('class', icon);
}
}
if (i === irange.range) {
hash++;
}
} else {
icon = this.opt.path + this.opt[turnOn ? 'starOn' : 'starOff'];
// TODO: extract.
if (this.opt.starType === 'img') {
star.attr('src', icon);
} else {
star.attr('class', icon);
}
// Set Color
if (turnOn) {
star.css('color', this.opt.starColor);
}else{
star.css('color', '');
}
}
}
},
_getIconRange: function(irange, turnOn) {
return this.opt.path + (turnOn ? irange.on || this.opt.starOn : irange.off || this.opt.starOff);
},
_getScoreByPosition: function(evt, icon) {
var
star = $(icon),
score = parseInt(icon.alt || star.data('alt'), 10);
if (this.opt.half) {
var
size = methods._getSize.call(this),
percent = parseFloat((evt.pageX - star.offset().left) / size);
if (this.opt.precision) {
score = score - 1 + percent;
} else {
score = score - 1 + (percent > 0.5 ? 1 : 0.5);
}
}
return score;
},
_getSize: function() {
var size;
if (this.opt.starType === 'img') {
size = this.stars[0].width;
} else {
size = parseFloat(this.stars.eq(0).css('font-size'));
}
if (!size) {
methods._error.call(this, 'Could not be possible get the icon size!');
}
return size;
},
_turnOn: function(i, score) {
return this.opt.single ? (i === score) : (i <= score);
},
_getHint: function(score) {
var hint = this.opt.hints[score - 1];
return hint === '' ? '' : hint || score;
},
_lock: function() {
var score = parseInt(this.score.val(), 10), // TODO: 3.1 >> [['1'], ['2'], ['3', '.1', '.2']]
hint = score ? methods._getHint.call(this, score) : this.opt.noRatedMsg;
this.style.cursor = '';
this.title = hint;
this.score.prop('readonly', true);
this.stars.prop('title', hint);
if (this.cancel) {
this.cancel.hide();
}
this.self.data('readonly', true);
},
_roundStars: function(score) {
var rest = (score % 1).toFixed(2);
if (rest > this.opt.round.down) { // Up: [x.76 .. x.99]
var icon = 'starOn';
if (this.opt.halfShow && rest < this.opt.round.up) { // Half: [x.26 .. x.75]
icon = 'starHalf';
} else if (rest < this.opt.round.full) { // Down: [x.00 .. x.5]
icon = 'starOff';
}
var star = this.stars[Math.ceil(score) - 1];
if (this.opt.starType === 'img') {
star.src = this.opt.path + this.opt[icon];
} else {
star.style.className = this.opt[icon];
}
} // Full down: [x.00 .. x.25]
},
_target: function(score, evt) {
if (this.opt.target) {
var target = $(this.opt.target);
if (!target.length) {
methods._error.call(this, 'Target selector invalid or missing!');
}
var mouseover = evt && evt.type === 'mouseover';
if (score === undefined) {
score = this.opt.targetText;
} else if (score === null) {
score = mouseover ? this.opt.cancelHint : this.opt.targetText;
} else {
if (this.opt.targetType === 'hint') {
score = methods._getHint.call(this, Math.ceil(score));
} else if (this.opt.precision) {
score = parseFloat(score).toFixed(1);
}
var mousemove = evt && evt.type === 'mousemove';
if (!mouseover && !mousemove && !this.opt.targetKeep) {
score = this.opt.targetText;
}
}
if (score) {
score = this.opt.targetFormat.toString().replace('{score}', score);
}
if (target.is(':input')) {
target.val(score);
} else {
target.html(score);
}
}
},
_unlock: function() {
this.style.cursor = 'pointer';
this.removeAttribute('title');
this.score.removeAttr('readonly');
this.self.data('readonly', false);
for (var i = 0; i < this.opt.number; i++) {
this.stars[i].title = methods._getHint.call(this, i + 1);
}
if (this.cancel) {
this.cancel.css('display', '');
}
},
cancel: function(click) {
return this.each(function() {
var el = $(this);
if (el.data('readonly') !== true) {
methods[click ? 'click' : 'score'].call(el, null);
this.score.removeAttr('value');
}
});
},
click: function(score) {
return this.each(function() {
if ($(this).data('readonly') !== true) {
methods._apply.call(this, score);
if (this.opt.click) {
this.opt.click.call(this, score, $.Event('click'));
}
methods._target.call(this, score);
}
});
},
destroy: function() {
return this.each(function() {
var self = $(this),
raw = self.data('raw');
if (raw) {
self.off('.raty').empty().css({ cursor: raw.style.cursor }).removeData('readonly');
} else {
self.data('raw', self.clone()[0]);
}
});
},
getScore: function() {
var score = [],
value ;
this.each(function() {
value = this.score.val();
score.push(value ? +value : undefined);
});
return (score.length > 1) ? score : score[0];
},
move: function(score) {
return this.each(function() {
var
integer = parseInt(score, 10),
opt = $(this).data('options'),
decimal = (+score).toFixed(1).split('.')[1];
if (integer >= opt.number) {
integer = opt.number - 1;
decimal = 10;
}
var
size = methods._getSize.call(this),
point = size / 10,
star = $(this.stars[integer]),
percent = star.offset().left + point * parseInt(decimal, 10),
evt = $.Event('mousemove', { pageX: percent });
star.trigger(evt);
});
},
readOnly: function(readonly) {
return this.each(function() {
var self = $(this);
if (self.data('readonly') !== readonly) {
if (readonly) {
self.off('.raty').children('img').off('.raty');
methods._lock.call(this);
} else {
methods._binds.call(this);
methods._unlock.call(this);
}
self.data('readonly', readonly);
}
});
},
reload: function() {
return methods.set.call(this, {});
},
score: function() {
var self = $(this);
return arguments.length ? methods.setScore.apply(self, arguments) : methods.getScore.call(self);
},
set: function(options) {
return this.each(function() {
var self = $(this),
actual = self.data('options'),
news = $.extend({}, actual, options);
self.raty(news);
});
},
setScore: function(score) {
return this.each(function() {
if ($(this).data('readonly') !== true) {
methods._apply.call(this, score);
methods._target.call(this, score);
}
});
}
};
$.fn.raty = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist!');
}
};
$.fn.raty.defaults = {
cancel : false,
cancelHint : 'Cancel this rating!',
cancelOff : 'raty-cancel-off',
cancelOn : 'raty-cancel-on',
cancelPlace : 'left',
click : undefined,
half : false,
halfShow : true,
hints : ['1'],
iconRange : undefined,
mouseout : undefined,
mouseover : undefined,
noRatedMsg : 'Not rated yet!',
number : 5,
numberMax : 20,
path : undefined,
precision : false,
readOnly : false,
round : { down: 0.25, full: 0.6, up: 0.76 },
score : undefined,
scoreName : 'score',
single : false,
space : true,
spaceWidth : 3,
starColor : '#ff00aa',
starHalf : 'star-half.png',
starOff : 'raty-dot-off',
starOn : 'raty-dot-on',
starType : 'img',
target : undefined,
targetFormat : '{score}',
targetKeep : false,
targetScore : undefined,
targetText : '',
targetType : 'hint'
};
})(jQuery);
jQuery(function($){
$('body').on('click', '.cf-toggle-group-buttons a', function(){
var clicked = $(this),
parent = clicked.closest('.caldera-config-field'),
input = parent.find('[data-ref="'+clicked.attr('id')+'"]');
parent.find('.btn').removeClass(clicked.data('active')).addClass(clicked.data('default'));
clicked.addClass(clicked.data('active')).removeClass(clicked.data('default'));
input.prop('checked', true).trigger('change');
});
});
function toggle_button_init(id, el){
var field = jQuery(el),
checked = field.find('.cf-toggle-group-radio:checked');
if(checked.length){
jQuery('#' + checked.data('ref') ).trigger('click');
}
}
jQuery(document).on( 'cf.init', function(){
toggle_button_init();
});
/**
* Dynamic Field Configuration
*
* @since 1.5.0
*
* @param configs
* @param $form
* @param $ {jQuery}
* @param state {CFState} @since 1.5.3
*
* @constructor
*/
function Caldera_Forms_Field_Config( configs, $form, $, state ){
var self = this;
var fields = {};
var formInstance = $form.data( 'instance' );
var $submits = $form.find(':submit, .cf-page-btn-next' );
/**
* Start system
*
* @since 1.5.0
*/
this.init = function(){
$.each( configs, function( i, config ){
fields[ config.id ] = self[config.type]( config );
} );
setupInputMasks();
$( document ).on( 'cf.add', setupInputMasks );
};
/**
* Validation handler for adding/removing errors for field types
*
* @since 1.5.0
*
* @param valid
* @param $field
* @param message
* @param extraClass
* @returns {boolean}
*/
function handleValidationMarkup( valid, $field, message, extraClass ){
var $parent = $field.parent().parent();
$parent.removeClass( 'has-error' );
$parent.find( '.help-block' ).remove();
if( ! valid ){
$parent.addClass( 'has-error' ).append( '<span id="cf-error-'+ $field.attr('id') +'" class="help-block ' + extraClass +'">' + message + '</span>' );
if ( $field.prop( 'required' ) ) {
disableAdvance($field);
}
$field.addClass( 'parsely-error' );
return false;
}else{
$parent.removeClass( 'has-error' );
allowAdvance();
return true;
}
}
/**
* Check if field is on the current page of a multi-page form.
*
* @since 1.5.8
*
* @param {jQuery} $field jQuery object of field to test.
*
* @return {Bool}
*/
function fieldIsOnCurrentPage($field) {
return ! $field.closest('.caldera-form-page').attr('aria-hidden');
}
/**
* Get field of page field is on if on a multi-page form.
*
* @since 1.5.8
*
* @param {jQuery} $field jQuery object of field to test.
*
* @return {Bool}
*/
function getFieldPage($field) {
return $field.closest( '.caldera-form-page' ).data( 'formpage' );
}
/**
* Utility method for preventing advance (next page/submit)
*
* @since 1.5.0
*/
function disableAdvance($field){
if( fieldIsOnCurrentPage($field) ){
$submits.prop( 'disabled',true).attr( 'aria-disabled', true );
}
}
/**
* Utility method for allowing advance (next page/submit)
*
* @since 1.5.0
*/
function allowAdvance(){
$submits.prop( 'disabled',false).attr( 'aria-disabled', false );
}
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
/**
* Handler for button fields
*
* @since 1.5.0
*
* @param field
*/
this.button = function( field ){
var field_id = field.id;
$(document).on('click dblclick', '#' + field_id, function( e ){
$('#' + field_id + '_btn').val( e.type ).trigger('change');
});
};
/**
* Handler for HTML fields (and summary fields since this.summary is alias of this.html)
*
* @since 1.5.0
*
* @param fieldConfig
*/
this.html = function ( fieldConfig ) {
if( false == fieldConfig.sync ){
return;
}
var templates = {},
bindMap = fieldConfig.bindFields,
templateSystem,
$target = $( document.getElementById( fieldConfig.contentId ) ),
regex = {};
templateSystem = function () {
if( ! $target.length ){
$target = $( document.getElementById( fieldConfig.contentId ) );
}
if( ! $target.length ){
return;
}
if (undefined == templates[fieldConfig.tmplId]) {
templates[fieldConfig.tmplId] = $(document.getElementById(fieldConfig.tmplId)).html();
}
var output = templates[fieldConfig.tmplId];
var value;
for (var i = 0; i <= bindMap.length; i++) {
if( 'object' === typeof bindMap[i] && bindMap[i].hasOwnProperty( 'to' ) && bindMap[i].hasOwnProperty( 'tag' ) ){
value = state.getState(bindMap[i].to);
if( 0 !== value && '0' !== value && ! value ){
value = '';
}else if( ! isNaN( value ) ){
value = value.toString();
} else if( 'string' === typeof value ){
value = value.replace(/(?:\r\n|\r|\n)/g, '<br />');
}else if( ! value || undefined == value.join || undefined === value || 'undefined' == typeof value){
value = '';
} else{
value = value.join(', ');
}
output = output.replace( bindMap[i].tag, value );
}
}
$target.html(output).trigger('change');
};
(function bind() {
for (var i = 0; i <= bindMap.length; i++) {
if( 'object' === typeof bindMap[i] && bindMap[i].hasOwnProperty( 'to' ) ){
state.events().subscribe(bindMap[i].to, templateSystem);
}
}
$(document).on('cf.pagenav cf.modal', templateSystem );
}());
templateSystem();
};
/**
* Handler to summary fields
*
* A copy of handler for HTML fields
*
* @since 1.5.0
*
* @type {any}
*/
this.summary = this.html;
var rangeSliders = {};
/**
* Handler for range slider fields
*
* @since 1.5.0
*
* @param field
*/
this.range_slider = function( field ){
var $el = $(document.getElementById(field.id));
function setCss($el){
$el.parent().find('.rangeslider').css('backgroundColor', field.trackcolor);
$el.parent().find('.rangeslider__fill').css('backgroundColor', field.color);
$el.parent().find('.rangeslider__handle').css('backgroundColor', field.handle).css('borderColor', field.handleborder);
}
function init() {
if ('object' != rangeSliders[field.id]) {
rangeSliders[field.id] = {
value: field.default,
init: {},
inited : false
};
}
var init = {
onSlide: function (position, value) {
state.mutateState(field.id, value );
rangeSliders[field.id].value = value;
},
onInit: function () {
this.value = state.getState(field.id);
rangeSliders[field.id].inited = true;
setCss($el);
},
polyfill: false
};
rangeSliders[field.id].init = init;
state.events().subscribe(field.id, function ( eventFieldIdArray, value ) {
if( value.length <= 0 ){
value = field.default;
}
$('#' + field.id + '_value').html( value );
});
if( ! $el.is( ':visible') ){
return;
}
$el.rangeslider(init);
}
$(document).on('cf.pagenav cf.add cf.disable cf.modal', function () {
var el = document.getElementById(field.id);
if (null != el) {
var $el = $(el),
val = rangeSliders[field.id].value;
if( ! $el.is( ':visible') ){
return;
}
$el.val( val );
$el.rangeslider('destroy');
$el.rangeslider(rangeSliders[field.id].init);
$el.val( val ).change();
setCss($el);
state.mutateState(field.id, val );
}
});
init();
};
/**
* Handler for star ratings fields
*
* @since 1.5.0
*
* @param field
*/
this.star_rating = function( field ){
var score = field.options.score;
var $el = $( document.getElementById( field.starFieldId ) );
var $input = $( document.getElementById( field.id ) );
var init = function(){
var options = field.options;
options[ 'click' ] = function(){
score = $el.raty('score');
$el.trigger( 'change' );
};
$el.raty(
options
);
$el.raty('score', score );
};
init();
var updating = false;
jQuery( document ).on('cf.add', function(){
if( false === updating ){
updating = true;
if( $el.length ){
$el.raty( 'destroy' );
init();
}
setTimeout(function(){
updating = false
}, 500 );
}
} );
};
/**
* Handler for new toggle swich fields
*
* @since 1.5.0
*
* @param field
*/
this.toggle_switch = function( field ) {
$( document ).on('reset', '#' + field.id, function(e){
$.each( field.options, function( i, option ){
$( document.getElemenetById( option ) ).removeClass( field.selectedClassName ).addClass( field.defaultClassName );
});
$( document.getElementById( field.id )).prop('checked','');
} );
};
/**
* Handler for new phone fields
*
* @since 1.5.0
*
* @param field
*/
this.phone_better = function( field ){
var fieldId = field.id;
var isValid = true;
var reset = function(){
var error = document.getElementById( 'cf-error-'+ fieldId );
isValid = true;
if( null != error ){
error.remove();
}
};
var validation = function () {
var $field = $( document.getElementById( fieldId ) );
reset();
var valid;
var value = $.trim($field.val());
if (value) {
if ($field.intlTelInput("isValidNumber")) {
valid = true;
} else {
valid = false;
}
}
var message;
var errorCode = $field.intlTelInput("getValidationError");
var selectedCountryData = $field.intlTelInput("getSelectedCountryData");
if (0 == errorCode) {
valid = true;
message = '';
} else if (value == "+" + selectedCountryData.dialCode){
valid = true;
message = '';
} else if (!value) {
valid = true;
message = '';
} else {
if ('undefined' != field.messages[errorCode]) {
message = field.messages[errorCode]
} else {
message = field.messages.generic;
}
}
isValid = valid;
handleValidationMarkup(valid, $field, message, 'help-block-phone_better');
return valid;
};
var init = function() {
$field = $( document.getElementById( fieldId ) );
$field.intlTelInput( field.options );
$field.on( 'keyup change', reset );
$field.blur(function() {
reset();
validation();
});
$field.on( 'keyup change', validation );
$form.on( 'submit', function(){
validation();
})
};
$(document).on('cf.pagenav cf.add cf.disable cf.modal', init );
$(document).on('cf.add', function(){
reset();
validation();
});
//Run Phone_better field validation when a submit or next page button is clicked
$('#' + field.form_id_attr + ' [data-page="next"], #' + field.form_id_attr + ' form.caldera_forms_form [type="submit"]').click( function(e){
var valid = validation();
if( valid === false ){
e.preventDefault();
e.stopPropagation();
}
});
$(document).on('cf.remove', function(event,obj){
if( obj.hasOwnProperty('field') && fieldId === obj.field ){
if( ! isValid ){
allowAdvance();
}
}
} );
init();
};
/**
* Handler for WYSIWYG fields
*
* @since 1.5.0
*
* @param field
*/
this.wysiwyg = function( field ){
var actual_field = document.getElementById( field.id );
if( null != actual_field ){
var $field = $( actual_field );
$field.trumbowyg(field.options);
var $editor = $field.parent().find( '.trumbowyg-editor');
$editor.html( $field.val() );
$editor.bind('input propertychange', function(){
$field.val( $editor.html() );
});
}
};
/**
* Handler for credit card fields
*
* @since 1.5.0
*
* @param fieldConfig
*/
this.credit_card_number = function( fieldConfig ){
var $field = $( document.getElementById( fieldConfig.id ) );
if( false != fieldConfig.exp || false != fieldConfig.cvc ){
setupLink();
}
if( $field.length ){
$field.payment('formatCardNumber');
$field.blur( function(){
var val = $field.val();
var valid = $.payment.validateCardNumber( val );
var type = $.payment.cardType(val);
handleValidationMarkup( valid, $field, fieldConfig.invalid, 'help-block-credit_card_number help-block-credit_card' );
if( valid ){
setImage( type );
}
})
}
/**
* Link fields in credit card group
*
* @since 1.5.0
*
*/
function setupLink(){
disableAdvance($field);
var $cvcField = $( document.getElementById( fieldConfig.cvc ) ),
$expField = $( document.getElementById( fieldConfig.exp ) );
$cvcField.blur( function(){
if ( $cvcField.val() ) {
self.creditCardUtil.validateCVC($field, $cvcField);
}
if ( $expField.val() ) {
self.creditCardUtil.validateExp($expField);
}
});
}
/**
* If possible change the icon in the credit card input
*
* @since 1.5.0
*
* @param type
*/
function setImage( type ){
var iconTypes = {
0: 'amex',
1: 'discover',
2: 'visa',
3: 'discover',
4: 'mastercard'
};
var icon = 'credit-card.svg';
$.each( iconTypes, function( i, card ){
if( 0 === type.indexOf( card ) ){
icon = 'cc-' + card + '.svg';
return false;
}
});
$field.css( 'background', 'url("' + fieldConfig.imgPath + icon + '")' );
}
};
/**
* Handler for credit card expiration fields
*
* @since 1.5.0
*
* @param fieldConfig
*/
this.credit_card_exp = function ( fieldConfig ) {
var $field = $( document.getElementById( fieldConfig.id ) );
if( $field.length ){
$field.payment('formatCardExpiry');
$field.blur( function () {
var valid = self.creditCardUtil.validateExp( $field );
handleValidationMarkup( valid, $field, fieldConfig.invalid, 'help-block-credit_card_exp help-block-credit_card' );
});
}
};
/**
* Handler for credit card secret code fields
*
* @since 1.5.0
*
* @param fieldConfig
*/
this.credit_card_cvc = function ( fieldConfig ) {
var $field = $( document.getElementById( fieldConfig.id ) );
if( $field.length ){
$field.payment('formatCardCVC');
if( false !== fieldConfig.ccField ) {
var $ccField = $( document.getElementById( fieldConfig.ccField ) );
$field.blur( function () {
var valid = self.creditCardUtil.validateExp( $ccField, $field);
handleValidationMarkup(valid, $field, fieldConfig.invalid, 'help-block-credit_card_cvc help-block-credit_card');
});
}
}
};
/**
* Validators for credit card CVC and expirations
*
* @since 1.5.0
*
* @type {{validateCVC: Caldera_Forms_Field_Config.creditCardUtil.validateCVC, validateExp: Caldera_Forms_Field_Config.creditCardUtil.validateExp}}
*/
this.creditCardUtil = {
validateCVC: function( $ccField, $cvcField ){
var val = $cvcField.val();
var cardValid = $.payment.validateCardNumber( $ccField.val() );
var valid = false;
if ( cardValid ) {
var type = $.payment.cardType( $ccField.val() );
valid = $.payment.validateCardCVC( val, type)
}
return valid;
},
validateExp: function ($expField) {
var val = $expField.val().split('/');
if ( val && 2 == val.length ) {
return $.payment.validateCardExpiry(val[0].trim(), val[1].trim());
}
}
};
this.color_picker = function ( fieldConfig ) {
$( document.getElementById( fieldConfig.id ) ).miniColors( fieldConfig.settings );
$(document).on('cf.pagenav cf.add cf.disable cf.modal', function () {
$(document.getElementById(fieldConfig.id)).miniColors(fieldConfig.settings);
});
};
/**
* Process a calculation field
*
* @since 1.5.6
*
* @param fieldConfig
*/
this.calculation = function (fieldConfig) {
var lastValue = null,
/**
* Debounced version of the run() function below
*
* @since 1.5.6
*/
debouncedRunner = debounce(
function(){
run(state)
}, 250
);
/**
* Adds commas or whatever to the display fo value
*
* @since 1.5.6
*
* @param {string} nStr
* @returns {string}
*/
function addCommas(nStr){
nStr += '';
var x = nStr.split('.'),
x1 = x[0],
x2 = x.length > 1 ? fieldConfig.decimalSeparator + x[1] : '',
rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + fieldConfig.thousandSeparator + '$2');
}
return x1 + x2;
}
/**
* Function that triggers calculation and updates state/DOM if it changed
* NOTE: Don't use directly, use debounced version
*
* @since 1.5.6
*/
var run = function(){
var result = window[fieldConfig.callback].apply(null, [state] );
if( ! isFinite( result ) ){
result = 0;
}
lastValue = result;
state.mutateState( fieldConfig.id, result );
if( 'number' != typeof result ){
result = parseInt( result, 10 );
}
if( fieldConfig.moneyFormat ){
result = result.toFixed(2);
}
$( '#' + fieldConfig.id ).html( addCommas( result ) ).data( 'calc-value', result );
$('#' + fieldConfig.targetId ).val( result ).trigger( 'change' );
};
//Update when any field that is part of the formula changes
$.each( fieldConfig.fieldBinds, function (feild,feildId) {
state.events().subscribe( feildId, debouncedRunner );
});
//Run on CF page change, field added, field removed or modal opened.
$(document).on('cf.pagenav cf.add cf.remove cf.modal', function (e,obj) {
if( 'cf' == e.type && 'remove' === e.namespace && 'object' === typeof obj && obj.hasOwnProperty('field' ) && obj.field === fieldConfig.id ){
//If calculation field is removed, make sure if it comes back, an update to DOM/state will be triggered.
lastValue = null;
}else{
//If trigger wasn't being removed, run.
debouncedRunner();
}
});
debouncedRunner();
};
/**
* Init color picker fields
*
* @since 1.6.2
*/
this.color_picker = function(){
function color_picker_init(){
jQuery('.minicolor-picker').miniColors();
}
document.addEventListener('load', color_picker_init , false);
jQuery( document ).ajaxComplete(function() {
color_picker_init();
});
};
/**
* Add input mask to any field that has the data attributes for it
*
* @since 1.6.2
*/
function setupInputMasks() {
if (!$.prototype.inputmask){
return;
}
$form.find('[data-inputmask]').inputmask();
}
}
var cf_jsfields_init, cf_presubmit;
(function($){
// validation
cf_validate_form = function( form ){
return form.parsley({
errorsWrapper : '<span class="help-block caldera_ajax_error_block"></span>',
errorTemplate : '<span></span>',
errorsContainer : function( field ){
return field.$element.closest('.form-group');
}
}).on('field:error', function( fieldInstance ) {
this.$element.closest('.form-group').addClass('has-error');
$( document ).trigger( 'cf.validate.fieldError', {
inst: fieldInstance,
form: form,
el: this.$element
} );
}).on('field:success', function( fieldInstance ) {
if( 'star' === this.$element.data( 'type' ) && this.$element.prop('required') && 0 == this.$element.val() ){
fieldInstance.validationResult = false;
return;
}
this.$element.closest('.form-group').removeClass('has-error');
$( document ).trigger( 'cf.validate.fieldSuccess', {
inst: fieldInstance,
form: form,
el: this.$element
} );
}).on('form:success', function ( formInstance ) {
$( document ).trigger( 'cf.validate.FormSuccess', {
inst: formInstance,
form: form,
el: this.$element
} );
}).on( 'form:error', function ( formInstance ) {
$( document ).trigger( 'cf.validate.FormError', {
inst: formInstance,
form: form,
el: this.$element
} );
})
};
// make init function
cf_jsfields_init = function(){
$('.init_field_type[data-type]').each(function(k,v){
var ftype = $(v);
if( typeof window[ftype.data('type') + '_init'] === 'function' ){
window[ftype.data('type') + '_init'](ftype.prop('id'), ftype[0]);
}
});
window.Parsley.on('field:validated', function() {
setTimeout( function(){$(document).trigger('cf.error');}, 15 );
});
if( typeof resBaldrickTriggers === 'undefined' && $('.caldera_forms_form').length ){
}
$( document ).trigger( 'cf.fieldsInit' );
function setLocale( locale ){
if ('undefined' != typeof window.Parsley._validatorRegistry.catalog[locale] ){
window.Parsley.setLocale( locale );
}
}
};
jQuery( function(){
// check for init function
cf_jsfields_init();
});
// if pages, disable enter
if( $('.caldera-form-page').length ){
$('.caldera-form-page').on('keypress', '[data-field]:not(textarea)', function( e ){
if( e.keyCode === 13 ){
e.preventDefault();
}
});
}
// modals activation
$(document).on('click', '.cf_modal_button', function(e){
e.preventDefault();
var clicked = $(this);
$(clicked.attr('href')).show();
});
$(document).on('click', '.caldera-front-modal-closer', function(e){
e.preventDefault();
var clicked = $(this);
clicked.closest('.caldera-front-modal-container').hide();
});
// stuff trigger
$(document).on('cf.add cf.enable cf.disable cf.pagenav', cf_jsfields_init );
// Page navigation
$(document).on('click', '[data-page]', function(e){
var clicked = $(this),
page_box = clicked.closest('.caldera-form-page'),
form = clicked.closest('form.caldera_forms_form'),
form_id = form.attr( 'id' ),
instance = form.data('instance'),
current_page = form.find('.caldera-form-page:visible').data('formpage'),
page = page_box.data('formpage') ? page_box.data('formpage') : clicked.data('page') ,
breadcrumb = $('.breadcrumb[data-form="caldera_form_' + instance + '"]'),
next,
prev,
fields,
run = true,
focusPage = current_page;
if( !form.length ){
return;
}
cf_validate_form( form ).destroy();
fields = form.find('[data-field]');
form.find('.has-error').removeClass('has-error');
/**
* Validate a field, possibly using cf2 system
*
* @since 1.8.0
*
* @param $this_field
* @param form_id
* @param valid
* @return {*}
*/
function validateField($this_field,form_id,valid) {
window = window || {};
var cf2 = 'object' === typeof window.cf2 && 'object' === typeof window.cf2[form_id] ? window.cf2[form_id] : null;
function getCf2Field(fieldIdAttr,formIdAttr){
if( ! cf2 || ! cf2.fields ){
return false;
}
if( cf2.fields.hasOwnProperty(fieldIdAttr)){
return cf2.fields[fieldIdAttr];
}
return false;
}
var fieldIdAttr = $this_field.attr('id');
var cf2Field = getCf2Field(fieldIdAttr, form_id);
if (cf2Field) {
valid = cf2.component.isFieldValid(fieldIdAttr);
if (!valid) {
cf2.component.addFieldMessage(fieldIdAttr, ParsleyValidator.getErrorMessage('required'),true);
}
} else {
valid = $this_field.parsley().isValid();
}
return valid;
}
if( clicked.data('page') !== 'prev' && page >= current_page ){
fields = $('#caldera_form_' + instance + ' [data-formpage="' + current_page + '"] [data-field]' );
var $this_field,
valid;
for (var f = 0; f < fields.length; f++) {
$this_field = $(fields[f]);
if( $this_field.hasClass( 'cf-multi-uploader' ) || $this_field.hasClass( 'cf-multi-uploader-list') ){
continue;
}
valid = validateField($this_field,form_id,valid);
if (true === valid) {
continue;
}
e.preventDefault();
run = false;
}
if( true === run && page > current_page ){
for( var i = page - 1; i >= 1; i -- ){
fields = $('#caldera_form_' + instance + ' [data-formpage="' + i + '"] [data-field]' );
for (var f = 0; f < fields.length; f++) {
$this_field = $(fields[f]);
valid = validateField($this_field,form_id,valid);
if (true === valid) {
continue;
}
e.preventDefault();
run = false;
if( i > focusPage ){
focusPage = i;
}
}
}
}
}
if( false === run ){
if( focusPage !== current_page ){
$( '#form_page_' + instance + '_pg_' + current_page ).hide().attr( 'aria-hidden', 'true' ).css( 'visibility', 'hidden' );
$( '#form_page_' + instance + '_pg_' + focusPage ).show().attr( 'aria-hidden', 'false' ).css( 'visibility', 'visible' );
}
cf_validate_form( form ).validate();
return false;
}
if( clicked.data('page') === 'next'){
if(breadcrumb){
breadcrumb.find('li.active').removeClass('active').children().attr('aria-expanded', 'false');
}
next = form.find('.caldera-form-page[data-formpage="'+ ( page + 1 ) +'"]');
if(next.length){
page_box.hide().attr( 'aria-hidden', 'true' ).css( 'visibility', 'hidden' );
next.show().attr( 'aria-hidden', 'false' ).css( 'visibility', 'visible' );
if(breadcrumb){
breadcrumb.find('a[data-page="'+ ( page + 1 ) +'"]').attr('aria-expanded', 'true').parent().addClass('active');
}
}
}else if(clicked.data('page') === 'prev'){
if(breadcrumb){
breadcrumb.find('li.active').removeClass('active').children().attr('aria-expanded', 'false');
}
prev = form.find('.caldera-form-page[data-formpage="'+ ( page - 1 ) +'"]');
if(prev.length){
page_box.hide().attr( 'aria-hidden', 'true' ).css( 'visibility', 'hidden' );
prev.show().attr( 'aria-hidden', 'false' ).css( 'visibility', 'visible' );
if(breadcrumb){
breadcrumb.find('a[data-page="'+ ( page - 1 ) +'"]').attr('aria-expanded', 'true').parent().addClass('active');
}
}
}else{
if(clicked.data('pagenav')){
e.preventDefault();
clicked.closest('.breadcrumb').find('li.active').removeClass('active').children().attr('aria-expanded', 'false');
$('#' + clicked.data('pagenav') + ' .caldera-form-page').hide().attr( 'aria-hidden', 'true' ).css( 'visibility', 'hidden' );
$('#' + clicked.data('pagenav') + ' .caldera-form-page[data-formpage="'+ ( clicked.data('page') ) +'"]').show().attr( 'aria-hidden', 'false' ).css( 'visibility', 'visible' );
clicked.parent().addClass('active').children().attr('aria-expanded', 'true');
}
}
$('html, body').animate({
scrollTop: form.offset().top - 100
}, 200);
$(document).trigger('cf.pagenav');
});
// init page errors
var tab_navclick;
$('.caldera-grid .breadcrumb').each(function(k,v){
$(v).find('a[data-pagenav]').each(function(i,e){
var tab = $(e),
form = tab.data('pagenav'),
page = $('#'+ form +' .caldera-form-page[data-formpage="' + tab.data('page') + '"]');
if(page.find('.has-error').length){
tab.parent().addClass('error');
if(typeof tab_navclick === 'undefined'){
tab.trigger('click');
tab_navclick = true;
}
}
});
});
// trigger last page
// validator
$( document ).on('click', 'form.caldera_forms_form [type="submit"]', function( e ){
var $clicked = $( this ),
$form = $clicked.closest('.caldera_forms_form'),
validator = cf_validate_form( $form );
$( document ).trigger( 'cf.form.submit', {
e:e,
$form:$form,
} );
if( ! validator.validate() ){
if( $('.caldera-form-page').length ) {
var currentPage = $clicked.parents('.caldera-form-page').data('formpage');
var invalids = [],
future = [];
validator.fields.forEach(function (field, i) {
if( true === field.validationResult ){
return;
}
var $pageParent = field.$element.parents('.caldera-form-page');
if (undefined != $pageParent && $pageParent.length && field.$element.parents('.caldera-form-page').data('formpage') > currentPage) {
future.push(field.$element.data( 'field' ) );
return;
}
invalids.push( field );
});
if( ! invalids.length ){
if( future.length ){
$form.append( '<input type="hidden" name="_cf_future" value="' + future.toString() + '">' );
}
validator.destroy();
return;
}
}
e.preventDefault();
}else{
$( document ).trigger( 'cf.form.validated', {
e:e,
$form:$form
} );
validator.destroy();
}
});
})(jQuery);
/** Setup Form Front-end **/
window.addEventListener("load", function(){
(function( $ ) {
'use strict';
//Catch if window.wp is undefined
var wpUndefined = undefined === typeof window.wp;
window.CALDERA_FORMS = {};
/** Setup forms */
if( 'object' === typeof CFFIELD_CONFIG ) {
var form_id, formId, config_object, config, instance, $el, state, protocolCheck, jQueryCheck, $form,
jQueryChecked = false,
protocolChecked = false;
$('.caldera_forms_form').each(function (i, el) {
$el = $(el);
form_id = $el.attr('id');
instance = $el.data('instance');
if ('object' === typeof CFFIELD_CONFIG[instance] ) {
$form = $( document.getElementById( form_id ));
if( wpUndefined ){
$( $form.data( 'target' ) ).append( '<div class="alert alert-warning">' + CFFIELD_CONFIG[instance].error_strings.wp_not_defined + '</div>' );
}else{
if ( ! protocolChecked ) {
//check for protocol mis-match on submit url
protocolCheck = new CalderaFormsCrossOriginWarning($el, $, CFFIELD_CONFIG[instance].error_strings);
protocolCheck.maybeWarn();
//don't check twice
protocolChecked = true;
}
if ( ! jQueryChecked && CFFIELD_CONFIG[instance].error_strings.hasOwnProperty( 'jquery_old' ) ) {
//check for old jQuery
jQueryCheck = new CalderaFormsJQueryWarning($el, $, CFFIELD_CONFIG[instance].error_strings);
jQueryCheck.maybeWarn();
//don't check twice
jQueryChecked = true;
}
formId = $el.data( 'form-id' );
config = CFFIELD_CONFIG[instance].configs;
var state = new CFState(formId, $ );
state.init( CFFIELD_CONFIG[instance].fields.defaults,CFFIELD_CONFIG[instance].fields.calcDefaults );
if( 'object' !== typeof window.cfstate ){
window.cfstate = {};
}
window.cfstate[ form_id ] = state;
$form.find( '[data-sync]' ).each( function(){
var $field = $( this );
if ( ! $field.data( 'unsync' ) ) {
new CalderaFormsFieldSync($field, $field.data('binds'), $form, $, state);
}
});
config_object = new Caldera_Forms_Field_Config( config, $(document.getElementById(form_id)), $, state );
config_object.init();
$( document ).trigger( 'cf.form.init',{
$form: $form,
idAttr: form_id,
formId: formId,
state: state,
fieldIds: CFFIELD_CONFIG[instance].fields.hasOwnProperty( 'ids' ) ? CFFIELD_CONFIG[instance].fields.ids : [],
nonce: jQuery( '#_cf_verify_' + formId ).val()
});
}
}
});
}
})( jQuery );
});
/**
* Sets up field synce
*
* @since 1.5.0
*
* @param $field jQuery object for field
* @param binds Field IDs to bind to
* @param $form jQuery object for form
* @param $ jQuery
* @param {CFState} state
* @constructor
*/
function CalderaFormsFieldSync( $field, binds, $form, $, state ){
for( var i = 0; i < binds.length; i++ ){
$( document ).on('keyup change blur mouseover', "[data-field='" + binds[ i ] + "']", function(){
if( ! $field.data('sync') ){
return;
}
var str = $field.data('sync')
id = $field.data('field'),
reg = new RegExp( "\{\{([^\}]*?)\}\}", "g" ),
template = str.match( reg );
if( $field.data( 'unsync' ) || undefined == template || ! template.length ){
return;
}
for( var t = 0; t < template.length; t++ ){
var select = template[ t ].replace(/\}/g,'').replace(/\{/g,'');
var re = new RegExp( template[ t ] ,"g");
var sync = $form.find( "[data-field='" + select + "']" );
var val = '';
for( var i =0; i < sync.length; i++ ){
var this_field = $( sync[i] );
if( ( this_field.is(':radio') || this_field.is(':checkbox') ) && ! this_field.is(':checked') ){
// skip.
}else{
val += this_field.val();
}
}
str = str.replace( re , val );
}
state.mutateState( $field.attr( 'id' ), val );
$field.val( str );
} );
$("[data-field='" + binds[ i ] + "']").trigger('change');
$field.on('keyup change', function(){
$field.attr( 'data-unsync', '1' );
$field.removeAttr( 'data-sync' );
$field.removeAttr( 'data-binds' );
});
}
}
/**
* Handles nonce refresh for forms
*
* @since 1.5.0
*
* @param formId ID of form
* @param config API/nonce config (Probably the CF_API_DATA CDATA)
* @param $ jQuery
* @constructor
*/
function CalderaFormsResetNonce( formId, config, $ ){
var $nonceField;
/**
* Run system, replace nonce if needed
*
* @since 1.5.0
*/
this.init = function(){
$nonceField = $( '#' + config.nonce.field + '_' + formId );
if( isNonceOld( $nonceField.data( 'nonce-time' ) ) ){
replaceNonce();
}
};
/**
* Check if nonce is more than an hour old
*
* If not, not worth the HTTP request
*
* @since 1.5.0
*
* @param time Time nonce was generated
* @returns {boolean}
*/
function isNonceOld( time ){
var now = new Date().getTime();
if( now - 36000 > time ){
return true;
}
return false;
}
/**
* Replace nonce via AJAX
*
* @since 1.5.0
*/
function replaceNonce(){
$.ajax({
url:config.rest.tokens.nonce,
method: 'POST',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', config.rest.nonce );
},data:{
form_id: formId
}
}).done( function( r){
$nonceField.val( r.nonce );
$nonceField.data( 'nonce-time', new Date().getTime() );
});
}
}
/**
* Check if URL is same protocol as same page
*
* @since 1.5.3
*
* @param url {String} Url to compare against
*
* @returns {boolean} True if same protocol, false if not
*/
function caldera_forms_check_protocol( url ){
var pageProtocol = window.location.protocol;
var parser = document.createElement('a');
parser.href = url;
return parser.protocol === pageProtocol;
}
/**
* Add a warning about cross-origin requests
*
* @since 1.5.3
*
* @param $form {jQuery} Form element
* @param $ {jQuery}
* @param errorStrings {Object} Localized error strings for this form
* @constructor
*/
function CalderaFormsCrossOriginWarning( $form, $, errorStrings ){
/**
* Do the check and warn if needed
*
* @since 1.5.3
*/
this.maybeWarn = function () {
if( $form.find( '[name="cfajax"]').length ){
var url = $form.data( 'request' );
if( ! caldera_forms_check_protocol( url ) ){
showNotice();
}
}
};
/**
* Append notice
*
* @since 1.5.3
*/
function showNotice() {
var $target = $( $form.data( 'target' ) );
$target.append( '<div class="alert alert-warning">' + errorStrings.mixed_protocol + '</div>' );
}
}
/**
* Add a warning about bad jQuery versions
*
* @since 1.5.3
*
* @param $form {jQuery} Form element
* @param $ {jQuery}
* @param errorStrings {Object} Localized error strings for this form
* @constructor
*/
function CalderaFormsJQueryWarning( $form, $, errorStrings ){
/**
* Do the check and warn if needed
*
* @since 1.5.3
*/
this.maybeWarn = function () {
var version = $.fn.jquery;
if( 'string' === typeof version && '1.12.4' != version ) {
if( isOld( version ) ){
showNotice();
}
}
};
/**
* Append notice
*
* @since 1.5.3
*/
function showNotice() {
var $target = $( $form.data( 'target' ) );
$target.append( '<div class="alert alert-warning">' + errorStrings.jquery_old + '</div>' );
}
/**
* Check if version is older than 1.12.4
*
* @since 1.5.3
*
* @param version
* @returns {boolean}
*/
function isOld(version) {
var split = version.split( '.' );
if( 1 == split[0] ){
if( 12 > split[2] ){
return true;
}
if( 4 > split[2]){
return true;
}
}
return false;
}
}