/** * Auto-attach for teaser behavior. * * Note: depends on resizable textareas. */ Drupal.behaviors.teaser = function(context) { // This breaks in Konqueror. Prevent it from running. if (/KDE/.test(navigator.vendor)) { return; } $('textarea.teaser:not(.teaser-processed)', context).each(function() { var teaser = $(this).addClass('teaser-processed'); // Move teaser textarea before body, and remove its form-item wrapper. var body = $('#'+ Drupal.settings.teaser[this.id]); var checkbox = $('#'+ Drupal.settings.teaserCheckbox[this.id]).parent(); var checked = $(checkbox).children('input').attr('checked') ? true : false; var parent = teaser[0].parentNode; $(body).before(teaser); $(parent).remove(); function trim(text) { return text.replace(/^\s+/g, '').replace(/\s+$/g, ''); } // Join the teaser back to the body. function join_teaser() { if (teaser.val()) { body.val(trim(teaser.val()) +'\r\n\r\n'+ trim(body.val())); } // Empty, hide and disable teaser. teaser[0].value = ''; $(teaser).attr('disabled', 'disabled'); $(teaser).parent().slideUp('fast'); // Change label. $(this).val(Drupal.t('Split summary at cursor')); // Hide separate teaser checkbox. $(checkbox).hide(); // Force a hidden checkbox to be checked (to ensure that the body is // correctly processed on form submit when teaser/body are in joined // state), and remember the current checked status. checked = $(checkbox).children('input').attr('checked') ? true : false; $(checkbox).children('input').attr('checked', true); } // Split the teaser from the body. function split_teaser() { body[0].focus(); var selection = Drupal.getSelection(body[0]); var split = selection.start; var text = body.val(); // Note: using val() fails sometimes. jQuery bug? teaser[0].value = trim(text.slice(0, split)); body[0].value = trim(text.slice(split)); // Reveal and enable teaser $(teaser).attr('disabled', ''); $(teaser).parent().slideDown('fast'); // Change label $(this).val(Drupal.t('Join summary')); // Show separate teaser checkbox, restore checked value. $(checkbox).show().children('input').attr('checked', checked); } // Add split/join button. var button = $('
'); var include = $('#'+ this.id.substring(0, this.id.length - 2) +'include'); $(include).parent().parent().before(button); // Extract the teaser from the body, if set. Otherwise, stay in joined mode. var text = body.val().split(''); if (text.length >= 2) { teaser[0].value = trim(text.shift()); body[0].value = trim(text.join('')); $(teaser).attr('disabled', ''); $('input', button).val(Drupal.t('Join summary')).toggle(join_teaser, split_teaser); } else { $('input', button).val(Drupal.t('Split summary at cursor')).toggle(split_teaser, join_teaser); $(checkbox).hide().children('input').attr('checked', true); } // Make sure that textarea.js has done its magic to ensure proper visibility state. if (Drupal.behaviors.textarea && teaser.is(('.form-textarea:not(.textarea-processed)'))) { Drupal.behaviors.textarea(teaser.parentNode); } // Set initial visibility if ($(teaser).is(':disabled')) { $(teaser).parent().hide(); } }); };