PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.49
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.49
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Form_Builder / script.js

script.js in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.49, at includes/widgets/Form_Builder/script.js

782 lines 41.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2 (function ($) {
3 $(window).on('elementor/frontend/init', function () {
4 elementorFrontend.hooks.addAction('frontend/element_ready/king-addons-form-builder.default', function ($scope) {
5 elementorFrontend.elementsHandler.addHandler(elementorModules.frontend.handlers.Base.extend({
6 onInit: function onInit() {
7 let $scope = this.$element;
8
9 console.log("FORM BUILDER");
10
11 var formContent = {};
12
13 var fileUrl = {};
14
15 if ($('body').find('.king-addons-form-field-type-recaptcha-v3').length > 0) {
16 var script = document.createElement('script');
17 script.src = 'https://www.google.com/recaptcha/api.js?render=' + $scope.find('#g-recaptcha-response').data('site-key') + '';
18 document.body.appendChild(script);
19 }
20
21 var currentTab = 0;
22 if (0 < $scope.find('.king-addons-fb-step-tab').length) {
23 console.log(currentTab);
24 showTab(currentTab);
25
26 $scope.find('.king-addons-fb-step-prev').each(function () {
27 $(this).on('click', function () {
28 nextPrev(-1);
29 });
30 });
31
32 $scope.find(".king-addons-fb-step-next").each(function () {
33 $(this).on('click', function () {
34 nextPrev(1);
35 });
36 });
37 }
38
39 var actions = $scope.find('.king-addons-form-field-type-submit').data('actions');
40
41 $scope.find('input[type="file"]').on('change', function (e) {
42 var files = this.files;
43 var thisInput = $(this);
44 var eventType = e.type;
45 handleFileValidityAndUpload(thisInput, files, eventType);
46 });
47
48 $scope.find('input, select, textarea').each(function () {
49 $(this).on('change', function () {
50 var $this = $(this);
51 if ('checkbox' == $this.attr('type')) {
52 var $option = $this.closest('.king-addons-form-field-option');
53 if ($option.hasClass('king-addons-checked')) {
54 $option.removeClass('king-addons-checked');
55 } else {
56 $option.addClass('king-addons-checked');
57 }
58 } else if ('radio' == $this.attr('type')) {
59
60 var name = $this.attr('name');
61 var $group = $('input[type="radio"][name="' + name + '"]');
62
63
64 $group.closest('.king-addons-form-field-option').removeClass('king-addons-checked');
65
66
67 if ($this.is(':checked')) {
68 $this.closest('.king-addons-form-field-option').addClass('king-addons-checked');
69 }
70 }
71 });
72
73 $(this).on('input change keyup', function (e) {
74 if ($(this).closest('.king-addons-select-wrap').length > 0) {
75 $(this).closest('.king-addons-select-wrap').removeClass('king-addons-form-error-wrap');
76 }
77 $(this).removeClass('king-addons-form-error');
78 $(this).closest('.king-addons-field-group').find('.king-addons-submit-error').remove();
79 });
80 });
81
82 $scope.find('.king-addons-button').on('click', function (e) {
83 e.preventDefault();
84
85 var eventType = e.type;
86
87 formContent = {};
88
89
90 let fileUploadPromises = [];
91
92 if (0 < $scope.find('input[type="file"').length) {
93 $scope.find('input[type="file"]').each(function () {
94 var files = this.files;
95 var thisInput = $(this);
96
97 fileUploadPromises.push(handleFileValidityAndUpload(thisInput, files, eventType));
98 });
99
100
101 Promise.all(fileUploadPromises)
102 .then(() => {
103 createFormContent();
104
105
106 if (validateForm()) {
107 $(this).closest('form').trigger('submit');
108 }
109 })
110 .catch((error) => {
111
112 console.error(error);
113 });
114 } else {
115 createFormContent();
116
117 if (validateForm()) {
118 $(this).closest('form').trigger('submit');
119 }
120 }
121 });
122
123
124 $scope.find('form').on('submit', function (e) {
125
126 e.preventDefault();
127
128 let responsesArray = [];
129
130 $scope.find('.king-addons-button>span').addClass('king-addons-loader-hidden');
131 $scope.find('.king-addons-button').find('.king-addons-double-bounce').removeClass('king-addons-loader-hidden');
132
133 if ($scope.find('.king-addons-submit-error')) {
134 $scope.find('.king-addons-submit-error').remove();
135 }
136
137 if ($scope.find('.king-addons-submit-success')) {
138 $scope.find('.king-addons-submit-success').remove();
139 }
140
141 function processRecaptcha(callback) {
142 if ($scope.find('#g-recaptcha-response').length > 0) {
143 grecaptcha.ready(function () {
144 grecaptcha.execute(KingAddonsFormBuilderData.recaptcha_v3_site_key, {action: 'submit'}).then(function (token) {
145
146 $scope.find('#g-recaptcha-response').val(token);
147
148
149 $.ajax({
150 type: 'POST',
151 url: KingAddonsFormBuilderData.ajaxurl,
152 data: {
153 action: 'king_addons_verify_recaptcha',
154 'g-recaptcha-response': token,
155 nonce: KingAddonsFormBuilderData.nonce
156 },
157 success: function (response) {
158 if (!response.success) {
159 console.log(response);
160 setTimeout(function () {
161 $scope.find('.king-addons-button').find('.king-addons-double-bounce').addClass('king-addons-loader-hidden');
162 $scope.find('.king-addons-button>span').removeClass('king-addons-loader-hidden');
163 $scope.find('form').append('<p class="king-addons-submit-error">' + KingAddonsFormBuilderData.recaptcha_error + '</p>');
164 }, 500);
165 callback(false);
166 } else {
167 console.log(response);
168 callback(true);
169 }
170 },
171 error: function (error) {
172 console.log(error);
173 setTimeout(function () {
174 $scope.find('.king-addons-button').find('.king-addons-double-bounce').addClass('king-addons-loader-hidden');
175 $scope.find('.king-addons-button>span').removeClass('king-addons-loader-hidden');
176 $scope.find('form').append('<p class="king-addons-submit-error">' + KingAddonsFormBuilderData.recaptcha_error + '</p>');
177 }, 500);
178 callback(false);
179 }
180 });
181 });
182 });
183 } else {
184 callback(true);
185 }
186 }
187
188
189 processRecaptcha(function (isRecaptchaSuccessful) {
190 if (isRecaptchaSuccessful) {
191
192
193 var actionsObject = {
194 emailPromise: sendEmail,
195 submissionsPromise: createPost,
196 mailchimpPromise: subscribeMailchimp,
197 webhookPromise: sendWebhook
198 }
199
200
201 Promise.all(
202 actions.map((action) => {
203 try {
204 if (actionsObject[action + 'Promise']) {
205 return actionsObject[action + 'Promise']();
206 }
207 } catch (error) {
208 console.error(error);
209 return Promise.reject(error);
210 }
211 })
212 )
213 .then((responses) => {
214 console.log(responses);
215
216
217 const createPostResponse = responses.find((response) => response && response.data.action === 'king_addons_form_builder_submissions');
218
219 const postId = createPostResponse ? createPostResponse.data.post_id : null;
220
221
222 var updateMetaPromises = actions.map((action) => {
223 if (action !== 'redirect') {
224 action = 'king_addons_form_builder_' + action;
225
226
227 const response = responses.find((response) => response && response.data.action === action);
228
229
230 const message = response ? response.data.message : '';
231
232 if (response && response.data.status === 'success') {
233 responsesArray.push('success');
234
235 if (postId) {
236 return updateFormActionMeta(postId, action, 'success', message);
237 }
238 } else {
239 responsesArray.push('error');
240
241 if (postId) {
242 return updateFormActionMeta(postId, action, 'error', message);
243 }
244 }
245 }
246 });
247
248 return Promise.all(updateMetaPromises).then(() => {
249 if (responsesArray.includes('error')) {
250 var sanitizedErrorMessage = $('<div>').text($scope.data('settings').error_message).html();
251 $scope.find('form').append('<p class="king-addons-submit-error">' + sanitizedErrorMessage + '</p>');
252 } else {
253 $scope.find('form').append(
254 $('<p class="king-addons-submit-success"></p>').text($scope.data('settings').success_message)
255 );
256
257 $scope.find('button').attr('disabled', true);
258 $scope.find('button').css('opacity', 0.6);
259 }
260 });
261
262 })
263 .catch((error) => {
264
265 console.error(error);
266 })
267 .then(() => {
268
269 setTimeout(function () {
270
271 $scope.find('.king-addons-button').find('.king-addons-double-bounce').addClass('king-addons-loader-hidden');
272 $scope.find('.king-addons-button>span').removeClass('king-addons-loader-hidden');
273 setTimeout(function () {
274 if (actions.includes('redirect') && responsesArray.includes('success')) {
275
276 $(location).prop('href', $scope.find('.king-addons-form-field-type-submit').data('redirect-url'))
277 }
278 }, 500);
279 }, 500);
280 })
281 .catch((error) => {
282
283 console.error(error);
284 });
285 } else {
286
287 return false;
288 }
289 });
290
291 function updateFormActionMeta(postId, actionName, status, message) {
292 return $.ajax({
293 type: 'POST',
294 url: KingAddonsFormBuilderData.ajaxurl,
295 data: {
296 action: 'king_addons_update_form_action_meta',
297 nonce: KingAddonsFormBuilderData.nonce,
298 post_id: postId,
299 action_name: actionName,
300 status: status,
301 message: message
302 },
303 });
304 }
305
306 function deepCopy(obj) {
307 return JSON.parse(JSON.stringify(obj));
308 }
309
310 function sendEmail() {
311 var data = deepCopy(formContent);
312
313 for (let key in data) {
314 if (data[key][0] == 'radio' || data[key][0] == 'checkbox') {
315 if (Array.isArray(data[key][1])) {
316 let trueValues = data[key][1].filter(innerArray => innerArray[1] === true).map(innerArray => innerArray[0]);
317 let trueValuesString = trueValues.join(', ');
318 data[key][1] = trueValuesString;
319 }
320 }
321 }
322
323 return $.ajax({
324 type: 'POST',
325 url: KingAddonsFormBuilderData.ajaxurl,
326 data: {
327 action: 'king_addons_form_builder_email',
328 nonce: KingAddonsFormBuilderData.nonce,
329 form_content: data,
330 king_addons_form_id: $scope.find('input[name="form_id"]').val(),
331 },
332 success: function (response) {
333 console.log(response);
334 if (!response.success) {
335
336
337
338 } else {
339
340
341
342 }
343 },
344 error: function (error) {
345
346
347
348 }
349 });
350 }
351
352 function sendWebhook() {
353 var data = deepCopy(formContent);
354
355 for (let key in data) {
356 if (data[key][0] == 'radio' || data[key][0] == 'checkbox') {
357 if (Array.isArray(data[key][1])) {
358 let trueValues = data[key][1].filter(innerArray => innerArray[1] === true).map(innerArray => innerArray[0]);
359 let trueValuesString = trueValues.join(', ');
360 data[key][1] = trueValuesString;
361 }
362 }
363 }
364
365 return $.ajax({
366 type: 'POST',
367 url: KingAddonsFormBuilderData.ajaxurl,
368 data: {
369 action: 'king_addons_form_builder_webhook',
370 nonce: KingAddonsFormBuilderData.nonce,
371 form_content: data,
372 king_addons_form_id: $scope.find('input[name="form_id"]').val(),
373 form_name: $scope.find('form').attr('name')
374 },
375 success: function (response) {
376 console.log(response);
377 if (!response.success) {
378
379
380
381 } else {
382
383
384
385 }
386 },
387 error: function (error) {
388 console.log(error);
389
390
391
392 }
393 });
394 }
395
396 function createPost() {
397
398 var data = {
399 action: 'king_addons_form_builder_submissions',
400 nonce: KingAddonsFormBuilderData.nonce,
401 form_content: formContent,
402 status: 'publish',
403 form_name: $scope.find('form').attr('name'),
404 form_id: $scope.find('input[name="form_id"]').val(),
405 form_page: $scope.find('form').attr('page'),
406 form_page_id: $scope.find('form').attr('page_id')
407 };
408
409 return $.ajax({
410 type: 'POST',
411 url: KingAddonsFormBuilderData.ajaxurl,
412 data: data,
413 success: function (response) {
414 console.log(response);
415
416
417
418 },
419 error: function (error) {
420 console.log(error)
421
422
423
424 }
425 });
426 }
427
428 function subscribeMailchimp() {
429
430 const submitButton = $scope.find('.king-addons-form-field-type-submit');
431 const mailchimpFields = JSON.parse(submitButton.attr('data-mailchimp-fields'));
432
433 let formData = {};
434
435 Object.keys(mailchimpFields).forEach(function (fieldId) {
436 if (fieldId == 'group_id') {
437
438 var fieldValue = Array.isArray(mailchimpFields[fieldId]) ? mailchimpFields[fieldId].join(',') : mailchimpFields[fieldId];
439 } else {
440 var fieldValue = $scope.find('#form-field-' + mailchimpFields[fieldId]).val();
441 }
442 if (fieldValue) {
443 if (fieldId == 'birthday_field') {
444 formData[fieldId] = convertToMailchimpBirthdayFormat(fieldValue);
445 } else {
446 formData[fieldId] = fieldValue;
447 }
448 }
449 });
450
451 return $.ajax({
452 url: KingAddonsFormBuilderData.ajaxurl,
453 method: 'POST',
454 data: {
455 action: 'king_addons_form_builder_mailchimp',
456 nonce: KingAddonsFormBuilderData.nonce,
457 form_data: formData,
458 listId: submitButton.data('list-id')
459
460 },
461 beforeSend: function () {
462 submitButton.prop('disabled', true);
463 },
464 success: function (response) {
465 console.log(response);
466 if (!response.success) {
467
468
469
470 } else {
471
472
473
474 }
475
476 },
477 error: function (jqXHR, textStatus, errorThrown) {
478 console.log(errorThrown);
479
480
481
482 },
483 complete: function () {
484 submitButton.prop('disabled', false);
485 }
486 });
487 }
488 });
489
490 function createFormContent() {
491 $scope.find('.king-addons-form-field, .king-addons-form-field-type-radio, .king-addons-form-field-type-checkbox, .king-addons-fb-step-input').each(function () {
492
493 var label = '';
494 if ($(this).prev('label')) {
495 label = $(this).prev('label').text().trim();
496 } else {
497 label = '';
498 }
499
500 if ('textarea' !== $(this).prop('tagName').toLowerCase()) {
501 if ($(this).hasClass('king-addons-select-wrap')) {
502 var selectValue = $(this).find('select').val();
503 if (Array.isArray($(this).find('select').val())) {
504 selectValue = $(this).find('select').val().join(', ');
505 } else {
506 selectValue = $(this).find('select').val();
507 }
508 formContent[$(this).find('select').attr('id').replace('-', '_')] = ['select', selectValue, label];
509 } else if ($(this).hasClass('king-addons-form-field-type-radio') || $(this).hasClass('king-addons-form-field-type-checkbox')) {
510 var valuesArray = [];
511 var checkedField = $(this).find('input');
512 var type;
513 checkedField.each(function () {
514 valuesArray.push([$(this).val(), $(this).is(':checked'), $(this).attr('name'), $(this).attr('id')]);
515 });
516
517 if ($(this).hasClass('king-addons-form-field-type-radio')) {
518 type = 'radio'
519 } else {
520 type = 'checkbox';
521 }
522
523 var inputLabel = $(this).find('.king-addons-form-field-label').text().trim();
524
525 if (checkedField.length > 0) {
526 formContent[$(this).find('.king-addons-form-field-option').data('key').replace('-', '_')] = [type, valuesArray, inputLabel];
527 }
528 } else if ($(this).hasClass('king-addons-fb-step-input')) {
529 formContent[$(this).attr('id').replace('-', '_')] = [$(this).attr('type'), '', $(this).val(), label];
530 } else {
531 if ($(this).attr('type') == 'file') {
532 formContent[$(this).attr('id').replace('-', '_')] = [$(this).attr('type'), fileUrl[$(this).attr('id')], label];
533 } else {
534 formContent[$(this).attr('id').replace('-', '_')] = [$(this).attr('type'), $(this).val(), label];
535 }
536 }
537 } else {
538 formContent[$(this).attr('id').replace('-', '_')] = [$(this).prop('tagName').toLowerCase(), $(this).val(), label];
539 }
540
541 });
542 }
543
544 function handleFileValidityAndUpload(thisInput, files, eventType) {
545 var thisId = thisInput.attr('id');
546
547 if (0 < thisInput.closest('.king-addons-field-group').find('.king-addons-submit-error').length) {
548 thisInput.closest('.king-addons-field-group').find('.king-addons-submit-error').remove();
549 }
550
551
552 var maxFileSize = thisInput.data('maxfs') ? thisInput.data('maxfs') : 0;
553 var allowedFileTypes = thisInput.data('allft') ? thisInput.data('allft') : 0;
554
555
556 let uploadPromises = [];
557
558 for (let i = 0; i < files.length; i++) {
559 var fileInput = files[i];
560
561
562 var formDataForFile = new FormData();
563 formDataForFile.append('action', 'king_addons_upload_file');
564 formDataForFile.append('uploaded_file', fileInput);
565 formDataForFile.append('max_file_size', maxFileSize);
566 formDataForFile.append('allowed_file_types', allowedFileTypes);
567 formDataForFile.append('triggering_event', eventType);
568 formDataForFile.append('king_addons_fb_nonce', KingAddonsFormBuilderData.nonce);
569
570 if ('click' == eventType) {
571 if (!fileUrl[thisId]) {
572 fileUrl[thisId] = [];
573 }
574 }
575
576
577 uploadPromises.push(
578 new Promise((resolve, reject) => {
579 $.ajax({
580 url: KingAddonsFormBuilderData.ajaxurl,
581 type: 'POST',
582 data: formDataForFile,
583 processData: false,
584 contentType: false,
585 success: function (response) {
586 if (response.success) {
587
588 console.log(response);
589 if (eventType == 'click') {
590 fileUrl[thisId][i] = response.data.url;
591 }
592 resolve(response);
593 } else {
594 console.error('Error:', response);
595 if (response.data) {
596 if ('filesize' === response.data.cause) {
597 let maxFileNotice = thisInput.data('maxfs-notice') ? thisInput.data('maxfs-notice') : response.data.message;
598 thisInput.closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + maxFileNotice + '</p>');
599 }
600
601 if ('filetype' == response.data.cause) {
602 thisInput.closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + response.data.message + '</p>');
603 }
604 }
605
606 reject(response);
607 }
608 },
609 error: function (error) {
610 if ('filesize' === error.cause) {
611 let maxFileNotice = thisInput.data('maxfs-notice') ? thisInput.data('maxfs-notice') : error.message;
612 thisInput.closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + maxFileNotice + '</p>');
613 }
614
615 if ('filetype' == error.cause) {
616 thisInput.closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + error.message + '</p>');
617 }
618 console.log(error);
619 reject(error);
620 },
621 });
622 }),
623 );
624 }
625
626
627 return Promise.all(uploadPromises);
628 }
629
630 function convertToMailchimpBirthdayFormat(dateString) {
631 const date = new Date(dateString);
632 const month = (date.getMonth() + 1).toString().padStart(2, '0');
633 const day = date.getDate().toString().padStart(2, '0');
634 return `${month}/${day}`;
635 }
636
637 function showTab(n) {
638
639 var $stepTab = $scope.find(".king-addons-fb-step-tab");
640 $stepTab.eq(n).removeClass('king-addons-fb-step-tab-hidden');
641
642 if (n === 0) {
643 $scope.find(".king-addons-fb-step-prev").hide();
644 } else {
645 $scope.find(".king-addons-fb-step-prev").show();
646 }
647
648 fixStepIndicator(n);
649 }
650
651 function nextPrev(n) {
652
653 var $stepTab = $scope.find(".king-addons-fb-step-tab");
654
655
656 if (n === 1 && !validateForm()) {
657 return false;
658 }
659
660 $stepTab.eq(currentTab).addClass('king-addons-fb-step-tab-hidden');
661
662 currentTab = currentTab + n;
663
664 if (currentTab >= $stepTab.length) {
665
666 $scope.find("form").submit();
667 return false;
668 }
669
670 showTab(currentTab);
671 }
672
673 function validateForm() {
674 var valid = true;
675 var $stepTab = $scope.find(".king-addons-fb-step-tab");
676 if (!($stepTab.length > 0)) {
677 $stepTab = $scope.find('.king-addons-form-fields-wrap');
678 currentTab = 0;
679 }
680 var $types = ['text', 'email', 'password', 'file', 'url', 'tel', 'number', 'date', 'datetime-local', 'time', 'week', 'month', 'color'];
681
682 $stepTab.eq(currentTab).find('input, select, textarea').each(function () {
683 const type = $(this).attr('type');
684
685 var requiredField = $(this).closest('.king-addons-field-group').find('.king-addons-form-field').attr('required') === 'required' || $(this).closest('.king-addons-field-group').find('.king-addons-form-field-textual').attr('required') === 'required';
686
687
688
689
690
691 if (type !== undefined && $.inArray(type, $types) !== -1 && $(this).val() === '' && requiredField) {
692
693 $(this).addClass("king-addons-form-error");
694
695 valid = false;
696 } else if (type === 'radio' || type === 'checkbox') {
697 let requiredOption = $(this).closest('.king-addons-field-group').find('.king-addons-form-field-option input').attr('required') === 'required';
698
699 if (requiredOption && $stepTab.eq(currentTab).find('input[type="' + type + '"]:checked').length === 0) {
700
701 $(this).addClass("king-addons-form-error");
702
703 valid = false;
704 }
705 } else if (requiredField && this.tagName === 'SELECT' && $(this).val().trim() === '') {
706
707 $(this).closest('.king-addons-select-wrap').addClass('king-addons-form-error-wrap');
708
709 $(this).addClass("king-addons-form-error");
710
711 valid = false;
712 } else if (requiredField && this.tagName === 'TEXTAREA' && $(this).val().trim() === '') {
713
714 $(this).addClass("king-addons-form-error");
715
716 valid = false;
717 }
718 });
719
720 if (!valid) {
721 $stepTab.eq(currentTab).find('.king-addons-form-error, .king-addons-form-error-wrap').each(function () {
722 if (!($(this).closest('.king-addons-field-group').find('.king-addons-submit-error').length > 0)) {
723 if ($(this).attr('type') == 'file') {
724 $(this).closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + KingAddonsFormBuilderData.file_empty + '</p>');
725 } else if ($(this).is('select') || $(this).attr('type') === 'radio' || $(this).attr('type') === 'checkbox') {
726 $(this).closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + KingAddonsFormBuilderData.select_empty + '</p>');
727 } else {
728 $(this).closest('.king-addons-field-group').append('<p class="king-addons-submit-error">' + KingAddonsFormBuilderData.input_empty + '</p>');
729 }
730 }
731 });
732 }
733
734 if (valid) {
735 $scope.find(".king-addons-fb-step").eq(currentTab).addClass("king-addons-fb-step-finish");
736 } else {
737 if ($scope.find(".king-addons-fb-step").eq(currentTab).hasClass('king-addons-fb-step-finish')) {
738 $scope.find(".king-addons-fb-step").eq(currentTab).removeClass('king-addons-fb-step-finish');
739 }
740 }
741
742 return valid;
743 }
744
745 function fixStepIndicator(n) {
746
747 var $step = $scope.find(".king-addons-fb-step");
748 $step.removeClass("king-addons-fb-step-active");
749
750 $step.eq(n).addClass("king-addons-fb-step-active");
751
752 if ($scope.find('.king-addons-fb-step-active').hasClass('king-addons-fb-step-finish')) {
753 $scope.find('.king-addons-fb-step-active').removeClass('king-addons-fb-step-finish');
754 }
755
756 const stepTabs = $scope.find('.king-addons-fb-step-tab');
757 const progressBarFill = $scope.find('.king-addons-fb-step-progress-fill');
758
759 let currentStep = n + 1;
760
761 updateProgressBar()
762
763 function updateProgressBar() {
764 const totalSteps = stepTabs.length;
765 const progressPercentage = (currentStep / totalSteps) * 100;
766
767 progressBarFill.css('width', progressPercentage + '%');
768 setTimeout(function () {
769 progressBarFill.text(Math.round(progressPercentage) + '%');
770 }, 500);
771 }
772 }
773
774
775
776 },
777 }), {
778 $element: $scope
779 });
780 });
781 });
782 })(jQuery);