Index: modules/menu/menu.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/menu/menu.admin.inc,v retrieving revision 1.52 diff -u -r1.52 menu.admin.inc --- modules/menu/menu.admin.inc 29 Jun 2009 14:24:56 -0000 1.52 +++ modules/menu/menu.admin.inc 18 Jul 2009 13:54:34 -0000 @@ -419,8 +419,24 @@ '#type' => 'textfield', '#title' => t('Menu name'), '#maxsize' => MENU_MAX_MENU_NAME_LENGTH_UI, - '#description' => t('The machine-readable name of this menu. This text will be used for constructing the URL of the menu overview page for this menu. This name must contain only lowercase letters, numbers, and hyphens, and must be unique.'), + '#description' => t('This text will be used to construct the URL for this menu. This name must contain only lowercase letters, numbers and hyphens, and must be unique.'), '#required' => TRUE, + '#weight' => 1, + '#attached_js' => array( + 'misc/machine-readable-value.js', + array( + 'data' => array( + 'machineReadableValue' => array( + 'title' => array( + 'text' => t('URL path'), + 'target' => 'menu-name', + 'searchPattern' => '[^a-z0-9]+', + 'replaceToken' => '-', + ), + ) + ), + 'type' => 'setting') + ), ); $form['#insert'] = TRUE; } @@ -437,16 +453,20 @@ '#title' => t('Title'), '#default_value' => $menu['title'], '#required' => TRUE, + '#field_suffix' => '  ', + '#weight' => 0, ); } $form['description'] = array( '#type' => 'textarea', '#title' => t('Description'), '#default_value' => $menu['description'], + '#weight' => 2, ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Save'), + '#weight' => 3, ); return $form; Index: misc/machine-readable-value.js =================================================================== RCS file: misc/machine-readable-value.js diff -N misc/machine-readable-value.js --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ misc/machine-readable-value.js 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,56 @@ +// $Id$ +(function ($) { + +/** + * Attach the auto machine readable behaviour + * + * Settings are expected to have an array of + * source-form-element-name = { + * text : to show next to user readable value + * target : target-form-element-name, + * searchPattern : regex string without modifiers ie '[^a-z0-9]+' + * replaceToken : token to use for replacement ie '-' or '_' + * } + * + * @see menu.admin.inc function menu_edit_menu + */ +Drupal.behaviors.machineReadableValue = { + attach: function () { + var mrvs = Drupal.settings.machineReadableValue; + for(var mrv in mrvs) { + var searchPattern = mrvs[mrv].searchPattern; + // We do global search + var searchPattern = new RegExp(searchPattern, 'g'); + var replaceToken = mrvs[mrv].replaceToken; + var replaceMultipleToken = new RegExp( replaceToken + '+', 'g'); + var source = '#edit-' + mrv; + var suffix = source + '-suffix'; + var target = '#edit-' + mrvs[mrv].target; + var wrapper = '.' + mrvs[mrv].target + '-wrapper'; + var text = mrvs[mrv].text; + if (!$(target).hasClass('error') && ($(target).val() == $(source).val().toLowerCase().replace(searchPattern, replaceToken).replace(replaceMultipleToken, replaceToken) || $(target).val() == '')) { + $(wrapper).hide(); + $(source).keyup(function () { + var machine = $(this).val().toLowerCase().replace(searchPattern, replaceToken).replace(replaceMultipleToken, replaceToken); + if (machine != '_' && machine != '') { + $(target).val(machine); + $(suffix).empty().append(' ' + text + ': ' + machine + ' [').append($('' + Drupal.t('Edit') + '').click(function () { + $(wrapper).show(); + $(target).focus(); + $(suffix).hide(); + $(source).unbind('keyup'); + return false; + })).append(']'); + } + else { + $(target).val(machine); + $(suffix).text(''); + } + }); + $(source).keyup(); + } + } + } +}; + +})(jQuery);