diff --git a/core/modules/overlay/overlay-parent.js b/core/modules/overlay/overlay-parent.js index dd7b7aeb3de85eaf47062eea2bb106fb3ba2df21..fe44502bb1df8889f50a7c9cb851e5f1600d01a8 100644 --- a/core/modules/overlay/overlay-parent.js +++ b/core/modules/overlay/overlay-parent.js @@ -354,9 +354,14 @@ Drupal.overlay.isAdminLink = function (url) { // Turn the list of administrative paths into a regular expression. if (!this.adminPathRegExp) { - var regExpPrefix = '' + Drupal.settings.pathPrefix + '('; - var adminPaths = regExpPrefix + Drupal.settings.overlay.paths.admin.replace(/\s+/g, ')$|' + regExpPrefix) + ')$'; - var nonAdminPaths = regExpPrefix + Drupal.settings.overlay.paths.non_admin.replace(/\s+/g, ')$|'+ regExpPrefix) + ')$'; + var prefix = ''; + if (Drupal.settings.overlay.pathPrefixes.length) { + // Allow path prefixes used for language negatiation followed by slash, + // and the empty string. + prefix = '(' + Drupal.settings.overlay.pathPrefixes.join('/|') + '/|)'; + } + var adminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.admin.replace(/\s+/g, '|') + ')$'; + var nonAdminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.non_admin.replace(/\s+/g, '|') + ')$'; adminPaths = adminPaths.replace(/\*/g, '.*'); nonAdminPaths = nonAdminPaths.replace(/\*/g, '.*'); this.adminPathRegExp = new RegExp(adminPaths); diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module index 8f62c017a73fb44b7c9910b52d4174ffd8fc9221..a9813af4db30b9c53e44720bb681d380b9df6034 100644 --- a/core/modules/overlay/overlay.module +++ b/core/modules/overlay/overlay.module @@ -638,6 +638,13 @@ function overlay_overlay_parent_initialize() { $type = str_replace('<front>', variable_get('site_frontpage', 'user'), $type); } drupal_add_js(array('overlay' => array('paths' => $paths)), 'setting'); + $path_prefixes = array(); + if (module_exists('locale') && variable_get('locale_language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX) == LANGUAGE_NEGOTIATION_URL_PREFIX) { + // Skip the empty string indicating the default language. We always accept + // paths without a prefix. + $path_prefixes = array_values(array_filter(locale_language_negotiation_url_prefixes())); + } + drupal_add_js(array('overlay' => array('pathPrefixes' => $path_prefixes)), 'setting'); // Pass along the Ajax callback for rerendering sections of the parent window. drupal_add_js(array('overlay' => array('ajaxCallback' => 'overlay-ajax')), 'setting'); }