#576180: Make machine-name generation pluggeable.

From: Damien Tournoud <damien@tournoud.net>


---
 system/system.js |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git modules/system/system.js modules/system/system.js
index 8fe6a71..79e7b91 100644
--- modules/system/system.js
+++ 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,11 @@ Drupal.behaviors.machineReadableValue = {
         $(source).keyup();
       }
     }
+  },
+
+  transliterate: function(source, settings) {
+    var searchPattern = new RegExp(settings.searchPattern, 'g');
+    return source.toLowerCase().replace(searchPattern, settings.replaceToken);
   }
 };
 
