From b1d0d1340c2f63ed5e1c8ec8df8b9e70edfe49ce Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Sat, 30 Jan 2010 00:29:10 +0000
Subject: [PATCH] #576180 by Damien Tournoud: Fix name-spacing of machine-name
 generation javascript.

---
 modules/system/system.js | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/modules/system/system.js b/modules/system/system.js
index ba52db0183d9..07c2eb64ff79 100644
--- a/modules/system/system.js
+++ b/modules/system/system.js
@@ -165,10 +165,11 @@ Drupal.behaviors.pageCache = {
  */
 Drupal.behaviors.machineReadableValue = {
   attach: function () {
+    var self = this;
+
     for (var value in Drupal.settings.machineReadableValue) {
       var settings = Drupal.settings.machineReadableValue[value];
 
-      var searchPattern = new RegExp(settings.searchPattern, 'g');
       // Build selector for the source name entered by a user.
       var source = '#edit-' + value;
       var suffix = source + '-suffix';
@@ -180,12 +181,12 @@ Drupal.behaviors.machineReadableValue = {
       // Do not process the element if we got an error or the given name and the
       // machine readable name are identical or the machine readable name is
       // empty.
-      if (!$(target).hasClass('error') && ($(target).val() == $(source).val().toLowerCase().replace(searchPattern, settings.replaceToken) || $(target).val() == '')) {
+      if (!$(target).hasClass('error') && ($(target).val() == '' || $(target).val() == self.transliterate($(source).val(), settings))) {
         // Hide wrapper element.
         $(wrapper).hide();
         // Bind keyup event to source element.
         $(source).keyup(function () {
-          var machine = $(this).val().toLowerCase().replace(searchPattern, settings.replaceToken);
+          var machine = self.transliterate($(this).val(), settings);
           if (machine != '_' && machine != '') {
             // Set machine readable name to the user entered value.
             $(target).val(machine);
@@ -207,6 +208,17 @@ Drupal.behaviors.machineReadableValue = {
         $(source).keyup();
       }
     }
+  },
+
+  /**
+   * Transliterate a human-readable name to a machine name.
+   *
+   * The result should not contain any character matching settings.searchPattern,
+   * invalid characters are typically replaced with settings.replaceToken.
+   */
+  transliterate: function (source, settings) {
+    var searchPattern = new RegExp(settings.searchPattern, 'g');
+    return source.toLowerCase().replace(searchPattern, settings.replaceToken);
   }
 };
 
-- 
GitLab