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