PageSourceSearch

https://padresenlanube.com/wp-content/plugins/ai-toolkits/assets/js/ai-toolkits-ajax.js?ver=1.7.86

js padresenlanube.com collected 2026-09-25 22:50:12 UTC 17,920 bytes, 398 lines download raw bytes

1(function ($) {
2  'use strict';
3
4  $(document).ready(function () {
5    $(document).on('submit', '.ai-toolkits-form', function (e) {
6      var ai_toolkits_form = $(this);
7
8      // Force all selectors to update their original select elements before form submission
9      ai_toolkits_form.find('.ai-toolkits-select').each(function () {
10        var $select = $(this);
11        var selectorInstance = $select.data('-selector');
12        if (selectorInstance && typeof selectorInstance.updateOriginalSelect === 'function') {
13          selectorInstance.updateOriginalSelect();
14        }
15      });
16
17      // Force all dual range sliders to update their hidden inputs before form submission
18      ai_toolkits_form.find('.ai-toolkits-input-range-dual-wrapper').each(function () {
19        var $wrapper = $(this);
20        var $minInput = $wrapper.find('.ai-toolkits-input-range-dual-min');
21        var $maxInput = $wrapper.find('.ai-toolkits-input-range-dual-max');
22        var $minHidden = $wrapper.find('.ai-toolkits-range-dual-hidden-min');
23        var $maxHidden = $wrapper.find('.ai-toolkits-range-dual-hidden-max');
24
25        if ($minInput.length && $maxInput.length && $minHidden.length && $maxHidden.length) {
26          var min = parseInt($minInput.val());
27          var max = parseInt($maxInput.val());
28
29          // Ensure min <= max
30          if (min > max) {
31            min = max;
32          }
33
34          // Update hidden inputs
35          $minHidden.val(min);
36          $maxHidden.val(max);
37        }
38      });
39
40      var ai_toolkits_btn = ai_toolkits_form.find('input[type="submit"]');
41      ai_toolkits_btn.addClass('ai-toolkits-link-disabled').siblings('.ai-toolkits-waiting').removeClass('ai-toolkits-display-none');
42
43      var ajax_url = ai_toolkits_ajax.ajax_url;
44      var data = {
45        action: 'ai_toolkits_ajax_nopriv',
46        ai_toolkits_ajax_nopriv_nonce: ai_toolkits_ajax.ai_toolkits_ajax_nonce,
47        ai_toolkits_get_nonce: ai_toolkits_action.ai_toolkits_get_nonce,
48        ai_toolkits_ajax_nopriv_type: 'ai_toolkits_form_save',
49        ai_toolkits_form_id: ai_toolkits_form.attr('id'),
50        ai_toolkits_form_type: ai_toolkits_btn.attr('data-ai-toolkits-type'),
51        ai_toolkits_form_subtype: ai_toolkits_btn.attr('data-ai-toolkits-subtype'),
52        ai_toolkits_form_user_id: ai_toolkits_btn.attr('data-ai-toolkits-user-id'),
53        ai_toolkits_form_post_id: ai_toolkits_btn.attr('data-ai-toolkits-post-id'),
54        ai_toolkits_form_post_type: ai_toolkits_btn.attr('data-ai-toolkits-post-type'),
55        ai_toolkits_ajax_keys: [],
56      };
57
58      if (!(typeof window['ai_toolkits_window_vars'] !== 'undefined')) {
59        window['ai_toolkits_window_vars'] = [];
60      }
61
62      // First pass: collect all field names to detect duplicates (html_multi fields)
63      var field_names_count = {};
64      var field_info = {}; // Store field metadata (node, type) for each unique field name
65      $(ai_toolkits_form.find('input:not([type="submit"]), select, textarea')).each(function (index, element) {
66        var field_name = element.name;
67        if (field_name) {
68          if (!field_names_count[field_name]) {
69            field_names_count[field_name] = 0;
70            // Store metadata from first occurrence
71            field_info[field_name] = {
72              node: element.nodeName,
73              type: element.type,
74              is_multiple: $(this).attr('multiple') === 'multiple'
75            };
76          }
77          field_names_count[field_name]++;
78        }
79      });
80
81      // Second pass: collect values, treating duplicate names as arrays
82      $(ai_toolkits_form.find('input:not([type="submit"]), select, textarea')).each(function (index, element) {
83        var is_multiple = $(this).attr('multiple');
84        var field_name = element.name;
85        var is_html_multi_field = field_names_count[field_name] > 1;
86
87        if (is_multiple || is_html_multi_field) {
88          // Initialize array if not exists
89          if (!(typeof window['ai_toolkits_window_vars']['form_field_' + field_name] !== 'undefined')) {
90            window['ai_toolkits_window_vars']['form_field_' + field_name] = [];
91          }
92
93          // Handle checkboxes in multiple fields
94          if ($(this).is(':checkbox')) {
95            if ($(this).is(':checked')) {
96              window['ai_toolkits_window_vars']['form_field_' + field_name].push($(element).val());
97            } else {
98              // For unchecked checkboxes in multiple fields, push empty string to maintain array structure
99              window['ai_toolkits_window_vars']['form_field_' + field_name].push('');
100            }
101          } else {
102            // For non-checkbox multiple fields, push the value
103            // If it's a select with custom selector, try to get values from selector instance
104            if ($(this).is('select') && $(this).hasClass('ai-toolkits-select')) {
105              var selectorInstance = $(this).data('-selector');
106              if (selectorInstance && selectorInstance.selectedValues && selectorInstance.selectedValues.length > 0) {
107                // Use values from selector instance
108                selectorInstance.selectedValues.forEach(function (val) {
109                  window['ai_toolkits_window_vars']['form_field_' + field_name].push(val);
110                });
111              } else {
112                // Fallback to reading from the select element
113                window['ai_toolkits_window_vars']['form_field_' + field_name].push($(element).val());
114              }
115            } else {
116              window['ai_toolkits_window_vars']['form_field_' + field_name].push($(element).val());
117            }
118          }
119
120          data[field_name] = window['ai_toolkits_window_vars']['form_field_' + field_name];
121        } else {
122          if ($(this).is(':checkbox')) {
123            if ($(this).is(':checked')) {
124              data[field_name] = $(element).val();
125            } else {
126              data[field_name] = '';
127            }
128          } else if ($(this).is(':radio')) {
129            if ($(this).is(':checked')) {
130              data[field_name] = $(element).val();
131            }
132          } else if ($(this).is('select') && $(this).hasClass('ai-toolkits-select')) {
133            // For select elements with custom selector, try to get value from selector instance first
134            var selectorInstance = $(this).data('-selector');
135            if (selectorInstance && selectorInstance.selectedValues && selectorInstance.selectedValues.length > 0) {
136              data[field_name] = selectorInstance.selectedValues[0];
137            } else {
138              // Fallback to reading from the select element
139              data[field_name] = $(element).val();
140            }
141          } else {
142            data[field_name] = $(element).val();
143          }
144        }
145      });
146
147      // Third pass: add unique field entries to ajax_keys (only once per field name)
148      var processed_fields = {};
149      $(ai_toolkits_form.find('input:not([type="submit"]), select, textarea')).each(function (index, element) {
150        var field_name = element.name;
151        if (field_name && !processed_fields[field_name]) {
152          var is_html_multi_field = field_names_count[field_name] > 1;
153          var is_multiple = field_info[field_name] ? field_info[field_name].is_multiple : ($(this).attr('multiple') === 'multiple');
154
155          data.ai_toolkits_ajax_keys.push({
156            id: field_name,
157            node: field_info[field_name] ? field_info[field_name].node : element.nodeName,
158            type: field_info[field_name] ? field_info[field_name].type : element.type,
159            multiple: (is_multiple || is_html_multi_field) ? true : false,
160          });
161
162          processed_fields[field_name] = true;
163        }
164      });
165
166      $.post(ajax_url, data, function (response) {
167        // Strip UTF-8 BOM characters that may leak from PHP includes
168        if (typeof response === 'string') {
169          response = response.replace(/^\uFEFF+/, '');
170        }
171        var response_json = JSON.parse(response);
172
173        if (response_json['error_key'] == 'ai_toolkits_form_save_error_unlogged') {
174          ai_toolkits_get_main_message(ai_toolkits_i18n.user_unlogged);
175
176          if (!$('.userspn-profile-wrapper .user-unlogged').length) {
177            $('.userspn-profile-wrapper').prepend('<div class="userspn-alert userspn-alert-warning user-unlogged">' + ai_toolkits_i18n.user_unlogged + '</div>');
178          }
179
180          AI_TOOLKITS_Popups.open($('#userspn-profile-popup'));
181          $('#userspn-login input#user_login').focus();
182        } else if (response_json['error_key'] != '') {
183          ai_toolkits_get_main_message(ai_toolkits_i18n.an_error_has_occurred);
184        } else {
185          ai_toolkits_get_main_message(ai_toolkits_i18n.saved_successfully);
186
187          // Trigger custom event when settings form is successfully saved
188          if (ai_toolkits_form.attr('id') === 'ai-toolkits-form-setting') {
189            $(document).trigger('ai-toolkits-settings-saved');
190          }
191        }
192
193        if (response_json['update_list']) {
194          $('.ai-toolkits-' + data.ai_toolkits_form_post_type + '-list').html(response_json['update_html']);
195        }
196
197        if (response_json['popup_close']) {
198          AI_TOOLKITS_Popups.close();
199          $('.ai-toolkits-menu-more-overlay').fadeOut('fast');
200        }
201
202        if (response_json['check'] == 'post_check') {
203          AI_TOOLKITS_Popups.close();
204          $('.ai-toolkits-menu-more-overlay').fadeOut('fast');
205          $('.ai-toolkits-' + data.ai_toolkits_form_post_type + '-list-item[data-' + data.ai_toolkits_form_post_type + '-id="' + data.ai_toolkits_form_post_id + '"] .ai-toolkits-check-wrapper i').text('task_alt');
206        } else if (response_json['check'] == 'post_uncheck') {
207          AI_TOOLKITS_Popups.close();
208          $('.ai-toolkits-menu-more-overlay').fadeOut('fast');
209          $('.ai-toolkits-' + data.ai_toolkits_form_post_type + '-list-item[data-' + data.ai_toolkits_form_post_type + '-id="' + data.ai_toolkits_form_post_id + '"] .ai-toolkits-check-wrapper i').text('radio_button_unchecked');
210        }
211
212        ai_toolkits_btn.removeClass('ai-toolkits-link-disabled').siblings('.ai-toolkits-waiting').addClass('ai-toolkits-display-none')
213      });
214
215      delete window['ai_toolkits_window_vars'];
216      return false;
217    });
218
219    $(document).on('click', '.ai-toolkits-popup-open-ajax', function (e) {
220      e.preventDefault();
221
222      var ai_toolkits_btn = $(this);
223      var ai_toolkits_ajax_type = ai_toolkits_btn.attr('data-ai-toolkits-ajax-type');
224      var ai_toolkits_popup_element = $('#' + ai_toolkits_btn.attr('data-ai-toolkits-popup-id'));
225
226      AI_TOOLKITS_Popups.open(ai_toolkits_popup_element, {
227        beforeShow: function (instance, popup) {
228          var ajax_url = ai_toolkits_ajax.ajax_url;
229          var data = {
230            action: 'ai_toolkits_ajax',
231            ai_toolkits_ajax_type: ai_toolkits_ajax_type,
232            ai_toolkits_ajax_nonce: ai_toolkits_ajax.ai_toolkits_ajax_nonce,
233            ai_toolkits_get_nonce: ai_toolkits_action.ai_toolkits_get_nonce,
234          };
235
236          $.ajax({
237            url: ajax_url,
238            type: 'POST',
239            data: data,
240            success: function (response) {
241              try {
242
243                // Check if response is already an object (parsed JSON)
244                var response_json = typeof response === 'object' ? response : null;
245
246                // If not an object, try to parse as JSON
247                if (!response_json) {
248                  try {
249                    response_json = JSON.parse(typeof response === 'string' ? response.replace(/^\uFEFF+/, '') : response);
250                  } catch (parseError) {
251                    // If parsing fails, assume it's HTML content
252                    ai_toolkits_popup_element.find('.ai-toolkits-popup-content').html(response);
253
254                    // Initialize media uploaders if function exists
255                    if (typeof initMediaUpload === 'function') {
256                      $('.ai-toolkits-image-upload-wrapper').each(function () {
257                        initMediaUpload($(this), 'image');
258                      });
259                      $('.ai-toolkits-audio-upload-wrapper').each(function () {
260                        initMediaUpload($(this), 'audio');
261                      });
262                      $('.ai-toolkits-video-upload-wrapper').each(function () {
263                        initMediaUpload($(this), 'video');
264                      });
265                    }
266                    return;
267                  }
268                }
269
270                // Handle JSON response
271                if (response_json.error_key) {
272                  var errorMessage = response_json.error_message || ai_toolkits_i18n.an_error_has_occurred;
273                  ai_toolkits_get_main_message(errorMessage);
274                  return;
275                }
276
277                // Handle successful JSON response with HTML content
278                if (response_json.html) {
279                  ai_toolkits_popup_element.find('.ai-toolkits-popup-content').html(response_json.html);
280
281                  // Initialize media uploaders if function exists
282                  if (typeof initMediaUpload === 'function') {
283                    $('.ai-toolkits-image-upload-wrapper').each(function () {
284                      initMediaUpload($(this), 'image');
285                    });
286                    $('.ai-toolkits-audio-upload-wrapper').each(function () {
287                      initMediaUpload($(this), 'audio');
288                    });
289                    $('.ai-toolkits-video-upload-wrapper').each(function () {
290                      initMediaUpload($(this), 'video');
291                    });
292                  }
293                } else {
294                  ai_toolkits_get_main_message(ai_toolkits_i18n.an_error_has_occurred);
295                }
296              } catch (e) {
297                ai_toolkits_get_main_message(ai_toolkits_i18n.an_error_has_occurred);
298              }
299            },
300            error: function (xhr, status, error) {
301            }
302          });
303        },
304        afterClose: function () {
305          ai_toolkits_popup_element.find('.ai-toolkits-popup-content').html('<div class="ai-toolkits-loader-circle-wrapper"><div class="ai-toolkits-text-align-center"><div class="ai-toolkits-loader-circle"><div></div><div></div><div></div><div></div></div></div></div>');
306        },
307      });
308    });
309
310    // Event listener for simple popups (non-AJAX)
311    $(document).on('click', '.ai-toolkits-popup-open', function (e) {
312      e.preventDefault();
313
314      var ai_toolkits_btn = $(this);
315      var ai_toolkits_popup_element = $('#' + ai_toolkits_btn.attr('data-ai-toolkits-popup-id'));
316
317      if (ai_toolkits_popup_element.length) {
318        AI_TOOLKITS_Popups.open(ai_toolkits_popup_element);
319      }
320    });
321
322    // Generate event listeners for duplicate and remove functions based on CPTs
323    var ai_toolkits_cpts_mapping = {
324      'ai_toolkits_asset': 'assets',
325      'ai_toolkits_liability': 'liabilities'
326    };
327
328    // Loop through CPTs to create duplicate event listeners
329    Object.keys(ai_toolkits_cpts).forEach(function (cpt) {
330      var cpt_short = cpt.replace('ai_toolkits_', '');
331      var container_class = '.ai-toolkits-' + ai_toolkits_cpts_mapping[cpt];
332
333      // Duplicate event listener
334      $(document).on('click', '.ai-toolkits-' + cpt + '-duplicate-post', function (e) {
335        e.preventDefault();
336
337        $(container_class).fadeOut('fast');
338        var ai_toolkits_btn = $(this);
339        var ai_toolkits_id = ai_toolkits_btn.closest('.ai-toolkits-' + cpt_short).attr('data-ai_toolkits_' + cpt_short + '-id');
340
341        var ajax_url = ai_toolkits_ajax.ajax_url;
342        var data = {
343          action: 'ai_toolkits_ajax',
344          ai_toolkits_ajax_type: 'ai_toolkits_' + cpt_short + '_duplicate',
345          ['ai_toolkits_' + cpt_short + '_id']: ai_toolkits_id,
346          ai_toolkits_ajax_nonce: ai_toolkits_ajax.ai_toolkits_ajax_nonce,
347        };
348
349        $.post(ajax_url, data, function (response) {
350          if (typeof response === 'string') { response = response.replace(/^\uFEFF+/, ''); }
351          var response_json = JSON.parse(response);
352
353          if (response_json['error_key'] != '') {
354            ai_toolkits_get_main_message(response_json['error_content']);
355          } else {
356            $(container_class).html(response_json['html']);
357          }
358
359          $(container_class).fadeIn('slow');
360          $('.ai-toolkits-menu-more-overlay').fadeOut('fast');
361        });
362      });
363
364      // Remove event listener (for popup button)
365      $(document).on('click', '.ai-toolkits-' + cpt + '-remove', function (e) {
366        e.preventDefault();
367
368        $(container_class).fadeOut('fast');
369        var ai_toolkits_id = $('.ai-toolkits-menu-more.ai-toolkits-active').closest('.ai-toolkits-' + cpt_short).attr('data-ai_toolkits_' + cpt_short + '-id');
370
371        var ajax_url = ai_toolkits_ajax.ajax_url;
372        var data = {
373          action: 'ai_toolkits_ajax',
374          ai_toolkits_ajax_type: 'ai_toolkits_' + cpt_short + '_remove',
375          ['ai_toolkits_' + cpt_short + '_id']: ai_toolkits_id,
376          ai_toolkits_ajax_nonce: ai_toolkits_ajax.ai_toolkits_ajax_nonce,
377        };
378
379        $.post(ajax_url, data, function (response) {
380          if (typeof response === 'string') { response = response.replace(/^\uFEFF+/, ''); }
381          var response_json = JSON.parse(response);
382
383          if (response_json['error_key'] != '') {
384            ai_toolkits_get_main_message(response_json['error_content']);
385          } else {
386            $(container_class).html(response_json['html']);
387            ai_toolkits_get_main_message(ai_toolkits_i18n.removed_successfully);
388          }
389
390          $(container_class).fadeIn('slow');
391          $('.ai-toolkits-menu-more-overlay').fadeOut('fast');
392
393          AI_TOOLKITS_Popups.close();
394        });
395      });
396    });
397  });
398})(jQuery);

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