Index: logintoboggan.js =================================================================== --- logintoboggan.js (revision 159) +++ logintoboggan.js (working copy) @@ -6,6 +6,14 @@ Drupal.logintoboggan_toggleboggan(); } ); + $("#user-login:not(.toboggan-anchor-processed)", context).each( + function() { + $(this).addClass('toboggan-anchor-processed'); + if (window.location.hash) { + $('#edit-lt-anchor', this).val(window.location.hash); + } + } + ); }; Drupal.logintoboggan_toggleboggan = function() { Index: logintoboggan.module =================================================================== --- logintoboggan.module (revision 159) +++ logintoboggan.module (working copy) @@ -160,6 +160,8 @@ case 'user_login': case 'user_login_block': + drupal_add_js(drupal_get_path('module', 'logintoboggan') .'/logintoboggan.js'); + // Grab the message from settings for display at the top of the login block. if ($login_msg = variable_get('logintoboggan_login_block_message', '')) { $form['message'] = array( @@ -182,6 +184,11 @@ } if(isset($GLOBALS['logintoboggan_denied']) && $GLOBALS['logintoboggan_denied'] == TRUE) { logintoboggan_destination(); + $form['#validate'] = array('logintoboggan_anchor_validate') + $form['#validate']; + $form['lt_anchor'] = array( + '#type' => 'hidden', + '#value' => !empty($form_state['post']['lt_anchor']) ? $form_state['post']['lt_anchor'] : '', + ); } if (($form_id == 'user_login_block')) { @@ -364,6 +371,16 @@ } } +function logintoboggan_anchor_validate($form, &$form_state) { + if (!empty($form_state['values']['lt_anchor'])) { + if ($redirect = $_REQUEST['destination']) { + if (parse_url($redirect, PHP_URL_FRAGMENT) == '') { + $_REQUEST['destination'] .= $form_state['values']['lt_anchor']; + } + } + } +} + /** * Custom validation function for user registration form * @@ -571,9 +588,6 @@ */ function _logintoboggan_toggleboggan ($form) { - - drupal_add_js(drupal_get_path('module', 'logintoboggan') .'/logintoboggan.js'); - $pre = '