JAVASCRIPT   66

_geoip_detect.js

Guest on 26th July 2021 04:29:51 PM

  1. /**
  2.  * Get a jQuery Promise that will delive the AJAX data.
  3.  * @param locales       Locales to fill in the 'name' field (optional)
  4.  * @returns promise
  5.  */
  6.  
  7. function geoip_detect_ajax_promise(locales) {
  8.         locales = locales || '';
  9.        
  10.         var promise = jQuery.ajax(geoip_detect.ajaxurl, {
  11.                 dataType: 'json',
  12.                 type: 'GET',
  13.                 data: {
  14.                         action: 'geoip_detect2_get_info_from_current_ip',
  15.                         locales: locales
  16.                 }
  17.         });
  18.        
  19.         return promise;
  20. }
  21.  
  22. /**
  23.  * Get property value from data
  24.  *
  25.  * @param data
  26.  * @param property_name
  27.  * @param options
  28.  */
  29. function geoip_detect_get_property_value(data, property_name, options) {
  30.         var _get_name = function(names, locales) {
  31.                 if (typeof(locales) === 'string') {
  32.                         locales = locales.split(',');
  33.                 }
  34.                
  35.                 for (var l in locales) {
  36.                         //l = l.trim();
  37.                         if (typeof(names[l]) != 'undefined' && names[l])
  38.                                 return names[l];
  39.                 }
  40.                 return '';
  41.         }
  42.        
  43.         var $ = jQuery;
  44.         var default_options = {
  45.                 'locales' : 'en',
  46.                 'default' : '',
  47.         };
  48.         options = $.extend(options, default_options);
  49.        
  50.         var properties = property_name.split('.');
  51.         var next_property = properties.shift();
  52.         if (next_property == 'name' || !next_property) {
  53.                 if (typeof(data['names']) == 'object') {
  54.                         return _get_name(data['names'], options.locales);
  55.                 } else {
  56.                         return '';
  57.                 }
  58.         }
  59.         if (typeof(data[next_property]) == 'undefined')
  60.                 return options['default'];
  61.         if (typeof(data[next_property]) == 'string')
  62.                 return data[next_property];
  63.         return geoip_detect_get_property_value(data[next_property], properties.join('.'), options);
  64. }
  65.  
  66. function geoip_detect_fill_data_attributes(el) {
  67.         var $ = jQuery;
  68.         el = $(el);
  69.         // Fill in the shortcodes into the HTML
  70.         var shortcodes = el.find('[data-geoip]');
  71.         if (!shortcodes.length)
  72.                 return;
  73.        
  74.         var promise = geoip_detect_ajax_promise('en');
  75.        
  76.         promise.done(function(data) {
  77.                 shortcodes.each(function() {
  78.                         var options = $(this).data('geoip');
  79.                         var value = geoip_detect_get_property_value(data, options.property, options);
  80.                        
  81.                         if ($(this).data('geoip-method') == 'class')
  82.                                 $(this).addClass('geoip-' + value);
  83.                         else
  84.                                 $(this).text(value);
  85.                         $(this).trigger('geoip_detect.value.success');
  86.                 });
  87.         }).fail(function(data) {
  88.                 if (typeof(console) != 'undefined' && typeof(console.log) != 'undefined')
  89.                         console.log('Error: ' + data.error);
  90.                 shortcodes.trigger('geoip_detect.value.failure');
  91.         });
  92. }
  93.  
  94.  
  95. jQuery(document).ready(function($) {
  96.         geoip_detect_fill_data_attributes('html');
  97. });

Raw Paste


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