JAVASCRIPT   26

cform

Guest on 29th June 2022 01:45:59 PM

  1. (function($) {
  2.  
  3.         if (typeof _wpcf7 == 'undefined' || _wpcf7 === null)
  4.                 _wpcf7 = {};
  5.  
  6.         _wpcf7 = $.extend({ cached: 0 }, _wpcf7);
  7.  
  8.         $(function() {
  9.                 _wpcf7.supportHtml5 = $.wpcf7SupportHtml5();
  10.                 $('div.wpcf7 > form').wpcf7InitForm();
  11.         });
  12.  
  13.         $.fn.wpcf7InitForm = function() {
  14.                 this.ajaxForm({
  15.                         beforeSubmit: function(arr, $form, options) {
  16.                                 $form.wpcf7ClearResponseOutput();
  17.                                 $form.find('[aria-invalid]').attr('aria-invalid', 'false');
  18.                                 $form.find('img.ajax-loader').css({ visibility: 'visible' });
  19.                                 return true;
  20.                         },
  21.                         beforeSerialize: function($form, options) {
  22.                                 $form.find('[placeholder].placeheld').each(function(i, n) {
  23.                                         $(n).val('');
  24.                                 });
  25.                                 return true;
  26.                         },
  27.                         data: { '_wpcf7_is_ajax_call': 1 },
  28.                         dataType: 'json',
  29.                         success: $.wpcf7AjaxSuccess,
  30.                         error: function(xhr, status, error, $form) {
  31.                                 var e = $('<div class="ajax-error"></div>').text(error.message);
  32.                                 $form.after(e);
  33.                         }
  34.                 });
  35.  
  36.                 if (_wpcf7.cached)
  37.                         this.wpcf7OnloadRefill();
  38.  
  39.                 this.wpcf7ToggleSubmit();
  40.  
  41.                 this.find('.wpcf7-submit').wpcf7AjaxLoader();
  42.  
  43.                 this.find('.wpcf7-acceptance').click(function() {
  44.                         $(this).closest('form').wpcf7ToggleSubmit();
  45.                 });
  46.  
  47.                 this.find('.wpcf7-exclusive-checkbox').wpcf7ExclusiveCheckbox();
  48.  
  49.                 this.find('.wpcf7-list-item.has-free-text').wpcf7ToggleCheckboxFreetext();
  50.  
  51.                 this.find('[placeholder]').wpcf7Placeholder();
  52.  
  53.                 if (_wpcf7.jqueryUi && ! _wpcf7.supportHtml5.date) {
  54.                         this.find('input.wpcf7-date[type="date"]').each(function() {
  55.                                 $(this).datepicker({
  56.                                         dateFormat: 'yy-mm-dd',
  57.                                         minDate: new Date($(this).attr('min')),
  58.                                         maxDate: new Date($(this).attr('max'))
  59.                                 });
  60.                         });
  61.                 }
  62.  
  63.                 if (_wpcf7.jqueryUi && ! _wpcf7.supportHtml5.number) {
  64.                         this.find('input.wpcf7-number[type="number"]').each(function() {
  65.                                 $(this).spinner({
  66.                                         min: $(this).attr('min'),
  67.                                         max: $(this).attr('max'),
  68.                                         step: $(this).attr('step')
  69.                                 });
  70.                         });
  71.                 }
  72.  
  73.                 this.find('.wpcf7-character-count').wpcf7CharacterCount();
  74.  
  75.                 this.find('.wpcf7-validates-as-url').change(function() {
  76.                         $(this).wpcf7NormalizeUrl();
  77.                 });
  78.         };
  79.  
  80.         $.wpcf7AjaxSuccess = function(data, status, xhr, $form) {
  81.                 if (! $.isPlainObject(data) || $.isEmptyObject(data))
  82.                         return;
  83.  
  84.                 var $responseOutput = $form.find('div.wpcf7-response-output');
  85.  
  86.                 $form.wpcf7ClearResponseOutput();
  87.  
  88.                 $form.find('.wpcf7-form-control').removeClass('wpcf7-not-valid');
  89.                 $form.removeClass('invalid spam sent failed');
  90.  
  91.                 if (data.captcha)
  92.                         $form.wpcf7RefillCaptcha(data.captcha);
  93.  
  94.                 if (data.quiz)
  95.                         $form.wpcf7RefillQuiz(data.quiz);
  96.  
  97.                 if (data.invalids) {
  98.                         $.each(data.invalids, function(i, n) {
  99.                                 $form.find(n.into).wpcf7NotValidTip(n.message);
  100.                                 $form.find(n.into).find('.wpcf7-form-control').addClass('wpcf7-not-valid');
  101.                                 $form.find(n.into).find('[aria-invalid]').attr('aria-invalid', 'true');
  102.                         });
  103.  
  104.                         $responseOutput.addClass('wpcf7-validation-errors');
  105.                         $form.addClass('invalid');
  106.  
  107.                         $(data.into).trigger('invalid.wpcf7');
  108.  
  109.                 } else if (1 == data.spam) {
  110.                         $responseOutput.addClass('wpcf7-spam-blocked');
  111.                         $form.addClass('spam');
  112.  
  113.                         $(data.into).trigger('spam.wpcf7');
  114.  
  115.                 } else if (1 == data.mailSent) {
  116.                         $responseOutput.addClass('wpcf7-mail-sent-ok');
  117.                         $form.addClass('sent');
  118.  
  119.                         if (data.onSentOk)
  120.                                 $.each(data.onSentOk, function(i, n) { eval(n) });
  121.  
  122.                         $(data.into).trigger('mailsent.wpcf7');
  123.  
  124.                 } else {
  125.                         $responseOutput.addClass('wpcf7-mail-sent-ng');
  126.                         $form.addClass('failed');
  127.  
  128.                         $(data.into).trigger('mailfailed.wpcf7');
  129.                 }
  130.  
  131.                 if (data.onSubmit)
  132.                         $.each(data.onSubmit, function(i, n) { eval(n) });
  133.  
  134.                 $(data.into).trigger('submit.wpcf7');
  135.  
  136.                 if (1 == data.mailSent)
  137.                         $form.resetForm();
  138.  
  139.                 $form.find('[placeholder].placeheld').each(function(i, n) {
  140.                         $(n).val($(n).attr('placeholder'));
  141.                 });
  142.  
  143.                 $responseOutput.append(data.message).slideDown('fast');
  144.                 $responseOutput.attr('role', 'alert');
  145.  
  146.                 $.wpcf7UpdateScreenReaderResponse($form, data);
  147.         };
  148.  
  149.         $.fn.wpcf7ExclusiveCheckbox = function() {
  150.                 return this.find('input:checkbox').click(function() {
  151.                         var name = $(this).attr('name');
  152.                         $(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false);
  153.                 });
  154.         };
  155.  
  156.         $.fn.wpcf7Placeholder = function() {
  157.                 if (_wpcf7.supportHtml5.placeholder)
  158.                         return this;
  159.  
  160.                 return this.each(function() {
  161.                         $(this).val($(this).attr('placeholder'));
  162.                         $(this).addClass('placeheld');
  163.  
  164.                         $(this).focus(function() {
  165.                                 if ($(this).hasClass('placeheld'))
  166.                                         $(this).val('').removeClass('placeheld');
  167.                         });
  168.  
  169.                         $(this).blur(function() {
  170.                                 if ('' == $(this).val()) {
  171.                                         $(this).val($(this).attr('placeholder'));
  172.                                         $(this).addClass('placeheld');
  173.                                 }
  174.                         });
  175.                 });
  176.         };
  177.  
  178.         $.fn.wpcf7AjaxLoader = function() {
  179.                 return this.each(function() {
  180.                         var loader = $('<img class="ajax-loader" />')
  181.                                 .attr({ src: _wpcf7.loaderUrl, alt: _wpcf7.sending })
  182.                                 .css('visibility', 'hidden');
  183.  
  184.                         $(this).after(loader);
  185.                 });
  186.         };
  187.  
  188.         $.fn.wpcf7ToggleSubmit = function() {
  189.                 return this.each(function() {
  190.                         var form = $(this);
  191.                         if (this.tagName.toLowerCase() != 'form')
  192.                                 form = $(this).find('form').first();
  193.  
  194.                         if (form.hasClass('wpcf7-acceptance-as-validation'))
  195.                                 return;
  196.  
  197.                         var submit = form.find('input:submit');
  198.                         if (! submit.length) return;
  199.  
  200.                         var acceptances = form.find('input:checkbox.wpcf7-acceptance');
  201.                         if (! acceptances.length) return;
  202.  
  203.                         submit.removeAttr('disabled');
  204.                         acceptances.each(function(i, n) {
  205.                                 n = $(n);
  206.                                 if (n.hasClass('wpcf7-invert') && n.is(':checked')
  207.                                 || ! n.hasClass('wpcf7-invert') && ! n.is(':checked'))
  208.                                         submit.attr('disabled', 'disabled');
  209.                         });
  210.                 });
  211.         };
  212.  
  213.         $.fn.wpcf7ToggleCheckboxFreetext = function() {
  214.                 return this.each(function() {
  215.                         var $wrap = $(this).closest('.wpcf7-form-control');
  216.  
  217.                         if ($(this).find(':checkbox, :radio').is(':checked')) {
  218.                                 $(this).find(':input.wpcf7-free-text').prop('disabled', false);
  219.                         } else {
  220.                                 $(this).find(':input.wpcf7-free-text').prop('disabled', true);
  221.                         }
  222.  
  223.                         $wrap.find(':checkbox, :radio').change(function() {
  224.                                 var $cb = $('.has-free-text', $wrap).find(':checkbox, :radio');
  225.                                 var $freetext = $(':input.wpcf7-free-text', $wrap);
  226.  
  227.                                 if ($cb.is(':checked')) {
  228.                                         $freetext.prop('disabled', false).focus();
  229.                                 } else {
  230.                                         $freetext.prop('disabled', true);
  231.                                 }
  232.                         });
  233.                 });
  234.         };
  235.  
  236.         $.fn.wpcf7CharacterCount = function() {
  237.                 return this.each(function() {
  238.                         var $count = $(this);
  239.                         var name = $count.attr('data-target-name');
  240.                         var down = $count.hasClass('down');
  241.                         var starting = parseInt($count.attr('data-starting-value'), 10);
  242.                         var maximum = parseInt($count.attr('data-maximum-value'), 10);
  243.                         var minimum = parseInt($count.attr('data-minimum-value'), 10);
  244.  
  245.                         var updateCount = function($target) {
  246.                                 var length = $target.val().length;
  247.                                 var count = down ? starting - length : length;
  248.                                 $count.attr('data-current-value', count);
  249.                                 $count.text(count);
  250.  
  251.                                 if (maximum && maximum < length) {
  252.                                         $count.addClass('too-long');
  253.                                 } else {
  254.                                         $count.removeClass('too-long');
  255.                                 }
  256.  
  257.                                 if (minimum && length < minimum) {
  258.                                         $count.addClass('too-short');
  259.                                 } else {
  260.                                         $count.removeClass('too-short');
  261.                                 }
  262.                         };
  263.  
  264.                         $count.closest('form').find(':input[name="' + name + '"]').each(function() {
  265.                                 updateCount($(this));
  266.  
  267.                                 $(this).keyup(function() {
  268.                                         updateCount($(this));
  269.                                 });
  270.                         });
  271.                 });
  272.         };
  273.  
  274.         $.fn.wpcf7NormalizeUrl = function() {
  275.                 return this.each(function() {
  276.                         var val = $.trim($(this).val());
  277.  
  278.                         if (! val.match(/^[a-z][a-z0-9.+-]*:/i)) { // check the scheme part
  279.                                 val = val.replace(/^\/+/, '');
  280.                                 val = 'http://' + val;
  281.                         }
  282.  
  283.                         $(this).val(val);
  284.                 });
  285.         };
  286.  
  287.         $.fn.wpcf7NotValidTip = function(message) {
  288.                 return this.each(function() {
  289.                         var $into = $(this);
  290.  
  291.                         $into.find('span.wpcf7-not-valid-tip').remove();
  292.                         $into.append('<span role="alert" class="wpcf7-not-valid-tip">' + message + '</span>');
  293.  
  294.                         if ($into.is('.use-floating-validation-tip *')) {
  295.                                 $('.wpcf7-not-valid-tip', $into).mouseover(function() {
  296.                                         $(this).wpcf7FadeOut();
  297.                                 });
  298.  
  299.                                 $(':input', $into).focus(function() {
  300.                                         $('.wpcf7-not-valid-tip', $into).not(':hidden').wpcf7FadeOut();
  301.                                 });
  302.                         }
  303.                 });
  304.         };
  305.  
  306.         $.fn.wpcf7FadeOut = function() {
  307.                 return this.each(function() {
  308.                         $(this).animate({
  309.                                 opacity: 0
  310.                         }, 'fast', function() {
  311.                                 $(this).css({'z-index': -100});
  312.                         });
  313.                 });
  314.         };
  315.  
  316.         $.fn.wpcf7OnloadRefill = function() {
  317.                 return this.each(function() {
  318.                         var url = $(this).attr('action');
  319.                         if (0 < url.indexOf('#'))
  320.                                 url = url.substr(0, url.indexOf('#'));
  321.  
  322.                         var id = $(this).find('input[name="_wpcf7"]').val();
  323.                         var unitTag = $(this).find('input[name="_wpcf7_unit_tag"]').val();
  324.  
  325.                         $.getJSON(url,
  326.                                 { _wpcf7_is_ajax_call: 1, _wpcf7: id, _wpcf7_request_ver: $.now() },
  327.                                 function(data) {
  328.                                         if (data && data.captcha)
  329.                                                 $('#' + unitTag).wpcf7RefillCaptcha(data.captcha);
  330.  
  331.                                         if (data && data.quiz)
  332.                                                 $('#' + unitTag).wpcf7RefillQuiz(data.quiz);
  333.                                 }
  334.                         );
  335.                 });
  336.         };
  337.  
  338.         $.fn.wpcf7RefillCaptcha = function(captcha) {
  339.                 return this.each(function() {
  340.                         var form = $(this);
  341.  
  342.                         $.each(captcha, function(i, n) {
  343.                                 form.find(':input[name="' + i + '"]').clearFields();
  344.                                 form.find('img.wpcf7-captcha-' + i).attr('src', n);
  345.                                 var match = /([0-9]+)\.(png|gif|jpeg)$/.exec(n);
  346.                                 form.find('input:hidden[name="_wpcf7_captcha_challenge_' + i + '"]').attr('value', match[1]);
  347.                         });
  348.                 });
  349.         };
  350.  
  351.         $.fn.wpcf7RefillQuiz = function(quiz) {
  352.                 return this.each(function() {
  353.                         var form = $(this);
  354.  
  355.                         $.each(quiz, function(i, n) {
  356.                                 form.find(':input[name="' + i + '"]').clearFields();
  357.                                 form.find(':input[name="' + i + '"]').siblings('span.wpcf7-quiz-label').text(n[0]);
  358.                                 form.find('input:hidden[name="_wpcf7_quiz_answer_' + i + '"]').attr('value', n[1]);
  359.                         });
  360.                 });
  361.         };
  362.  
  363.         $.fn.wpcf7ClearResponseOutput = function() {
  364.                 return this.each(function() {
  365.                         $(this).find('div.wpcf7-response-output').hide().empty().removeClass('wpcf7-mail-sent-ok wpcf7-mail-sent-ng wpcf7-validation-errors wpcf7-spam-blocked').removeAttr('role');
  366.                         $(this).find('span.wpcf7-not-valid-tip').remove();
  367.                         $(this).find('img.ajax-loader').css({ visibility: 'hidden' });
  368.                 });
  369.         };
  370.  
  371.         $.wpcf7UpdateScreenReaderResponse = function($form, data) {
  372.                 $('.wpcf7 .screen-reader-response').html('').attr('role', '');
  373.  
  374.                 if (data.message) {
  375.                         var $response = $form.siblings('.screen-reader-response').first();
  376.                         $response.append(data.message);
  377.  
  378.                         if (data.invalids) {
  379.                                 var $invalids = $('<ul></ul>');
  380.  
  381.                                 $.each(data.invalids, function(i, n) {
  382.                                         if (n.idref) {
  383.                                                 var $li = $('<li></li>').append($('<a></a>').attr('href', '#' + n.idref).append(n.message));
  384.                                         } else {
  385.                                                 var $li = $('<li></li>').append(n.message);
  386.                                         }
  387.  
  388.                                         $invalids.append($li);
  389.                                 });
  390.  
  391.                                 $response.append($invalids);
  392.                         }
  393.  
  394.                         $response.attr('role', 'alert').focus();
  395.                 }
  396.         };
  397.  
  398.         $.wpcf7SupportHtml5 = function() {
  399.                 var features = {};
  400.                 var input = document.createElement('input');
  401.  
  402.                 features.placeholder = 'placeholder' in input;
  403.  
  404.                 var inputTypes = ['email', 'url', 'tel', 'number', 'range', 'date'];
  405.  
  406.                 $.each(inputTypes, function(index, value) {
  407.                         input.setAttribute('type', value);
  408.                         features[value] = input.type !== 'text';
  409.                 });
  410.  
  411.                 return features;
  412.         };
  413.  
  414. })(jQuery);

Raw Paste


Login or Register to edit or fork this paste. It's free.