From e9aa642289e05a74f292c57fb283b4a430ebf076 Mon Sep 17 00:00:00 2001
From: webchick <webchick@24967.no-reply.drupal.org>
Date: Wed, 7 Mar 2012 10:40:48 -0800
Subject: [PATCH] Issue #1431076 by c960657, nod_, purencool, Nor4a: Fixed
 Overlay does not work with prefixed URL paths .

---
 core/modules/overlay/overlay-parent.js | 11 ++++++++---
 core/modules/overlay/overlay.module    |  7 +++++++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/core/modules/overlay/overlay-parent.js b/core/modules/overlay/overlay-parent.js
index dd7b7aeb3de8..fe44502bb1df 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 8f62c017a73f..a9813af4db30 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');
 }
-- 
GitLab