address_suggestion-1.0.3/js/address_suggestion.js

js/address_suggestion.js
(function ($, Drupal, once) {
  Drupal.behaviors.address_suggestion = {
    attach: function (context, settings) {

      $(once('initiate-autocomplete', 'input.address-suggestion', context)).each(function () {
        const formWrapper = $(this).closest('.js-form-wrapper');
        const formPage = formWrapper.closest('form');
        const inputAutocomplete = $(this).attr('role', 'presentation');
        const uiAutocomplete = inputAutocomplete.data('ui-autocomplete');
        const isHide = inputAutocomplete.data('hide');

        uiAutocomplete.options.select = function (event, ui) {
          event.preventDefault();

          formWrapper.find('input.address-line1').val(ui.item.street_name);
          formWrapper.find('input.address-line2').val(ui.item.district);

          if (ui.item.name && ui.item.name !== '') {
            formWrapper.find('input.organization').val(ui.item.name);
          }

          formWrapper.find('input.postal-code').val(ui.item.zip_code);
          formWrapper.find('input.locality').val(ui.item.town_name);
          ui.item.label = ui.item.label.substring(0, 128);

          if (typeof ui.item.state !== "undefined") {
            ui.item.state = ui.item.state.substring(0, 128);
            formWrapper.find('select.administrative-area').val(ui.item.state);
          } else if (typeof ui.item.administrative_area !== "undefined") {
            formWrapper.find('select.administrative-area').val(ui.item.administrative_area);
          }

          if (formWrapper.find('input.postal-code').length === 0 && formWrapper.find('input.locality').length === 0) {
            formWrapper.find('input.address-line1').val(ui.item.label);
          }

          let administrative = formWrapper.find('.administrative-area');
          if (administrative.length && !administrative.val()) {
            if (administrative.is('select') && administrative.find('option[value="' + ui.item.administrative_area + '"]').length === 0) {
              let newOption = '<option value="' + ui.item.administrative_area + '">' + ui.item.administrative_area + '</option>';
              administrative.append(newOption);
            }
            administrative.val(ui.item.administrative_area);
          }

          if ("location_field" in settings.address_suggestion && 'location' in ui.item) {
            let locationField = settings.address_suggestion.location_field;
            let typeField = settings.address_suggestion.type_field;
            let latitude = ui.item.location.latitude;
            let longitude = ui.item.location.longitude;

            function setLocationValues() {
              if (typeField === 'geolocation') {
                formPage.find("input[name*='" + locationField + "[0][lat]']").val(latitude);
                formPage.find("input[name*='" + locationField + "[0][lng]']").val(longitude);
              }

              if (typeField === 'geofield') {
                formPage.find("input[name*='" + locationField + "[0][value][lat]']").val(latitude);
                formPage.find("input[name*='" + locationField + "[0][value][lon]']").val(longitude);
              }
            }

            setLocationValues();
          }

          formWrapper.find('input.address-line').val(ui.item.label);
          formWrapper.find('select.country').val(ui.item.country_code.toUpperCase());

          if (isHide) {
            if (administrative.val() === '') {
              formWrapper.find('.administrative-area').remove();
            }

            let country = ui.item.country_code.toUpperCase();
            formWrapper.find('input.country').val(country);
          }
        };
      });
    }
  };
}(jQuery, Drupal, once));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc