diff --git a/uc_addresses.js b/uc_addresses.js index 760ec71..edba3ad 100644 --- a/uc_addresses.js +++ b/uc_addresses.js @@ -16,6 +16,16 @@ var uc_addresses_copy_box_checked = false; $(document).ready(uc_addresses_trigger_copy_address); /** + * Set event handlers on address fields when uc_quote module + * is enabled. + */ +function uc_addresses_setQuoteCallbacks(products, context) { + $("select[name*=delivery_addressbook]:not(.getQuotes-processed)", context).addClass('getQuotes-processed').change(function() { + $("input[name*=delivery_postal_code]").trigger('change'); + }); +} + +/** * Copy address values from one pane to another for checkout form */ function uc_addresses_copy_address_checkout(checked, source, target) { diff --git a/uc_addresses.module b/uc_addresses.module index 580a2e1..6f4a72b 100644 --- a/uc_addresses.module +++ b/uc_addresses.module @@ -1337,6 +1337,25 @@ function theme_uc_addresses_default_address_checkbox($element) { } /** + * Implementation of hook_preprocess_page(). + * + * Alters javascript outputted by uc_quote in order to set + * event handlers for address fields created by Ubercart + * Addresses when 'Drupal.behaviors.getQuotes' gets called. + */ +function uc_addresses_preprocess_page(&$vars) { + // Check if the 'Drupal.behaviors.getQuotes' function is on the page. + // We just always search for the string only as that's faster than + // a call to module_exists(). + if (strpos($vars['scripts'], 'Drupal.behaviors.getQuotes = function (context) {') !== FALSE) { + $search = '/setQuoteCallbacks\(\"(.+)\", context\);/'; + $replace = 'setQuoteCallbacks("${1}", context); + uc_addresses_setQuoteCallbacks("${1}", context);'; + $vars['scripts'] = preg_replace($search, $replace, $vars['scripts']); + } +} + +/** * Overwrite address display values for invoices. * * @param array $variables