| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 // $Id: teaser.js,v 1.12.2.2 2010/03/01 10:13:18 goba Exp $ 2 3 /** 4 * Auto-attach for teaser behavior. 5 * 6 * Note: depends on resizable textareas. 7 */ 8 Drupal.behaviors.teaser = function(context) { 9 // This breaks in Konqueror. Prevent it from running. 10 if (/KDE/.test(navigator.vendor)) { 11 return; 12 } 13 14 $('textarea.teaser:not(.teaser-processed)', context).each(function() { 15 var teaser = $(this).addClass('teaser-processed'); 16 17 // Move teaser textarea before body, and remove its form-item wrapper. 18 var body = $('#'+ Drupal.settings.teaser[this.id]); 19 var checkbox = $('#'+ Drupal.settings.teaserCheckbox[this.id]).parent(); 20 var checked = $(checkbox).children('input').attr('checked') ? true : false; 21 var parent = teaser[0].parentNode; 22 $(body).before(teaser); 23 $(parent).remove(); 24 25 function trim(text) { 26 return text.replace(/^\s+/g, '').replace(/\s+$/g, ''); 27 } 28 29 // Join the teaser back to the body. 30 function join_teaser() { 31 if (teaser.val()) { 32 body.val(trim(teaser.val()) +'\r\n\r\n'+ trim(body.val())); 33 } 34 // Empty, hide and disable teaser. 35 teaser[0].value = ''; 36 $(teaser).attr('disabled', 'disabled'); 37 $(teaser).parent().slideUp('fast'); 38 // Change label. 39 $(this).val(Drupal.t('Split summary at cursor')); 40 // Hide separate teaser checkbox. 41 $(checkbox).hide(); 42 // Force a hidden checkbox to be checked (to ensure that the body is 43 // correctly processed on form submit when teaser/body are in joined 44 // state), and remember the current checked status. 45 checked = $(checkbox).children('input').attr('checked') ? true : false; 46 $(checkbox).children('input').attr('checked', true); 47 } 48 49 // Split the teaser from the body. 50 function split_teaser() { 51 body[0].focus(); 52 var selection = Drupal.getSelection(body[0]); 53 var split = selection.start; 54 var text = body.val(); 55 56 // Note: using val() fails sometimes. jQuery bug? 57 teaser[0].value = trim(text.slice(0, split)); 58 body[0].value = trim(text.slice(split)); 59 // Reveal and enable teaser 60 $(teaser).attr('disabled', ''); 61 $(teaser).parent().slideDown('fast'); 62 // Change label 63 $(this).val(Drupal.t('Join summary')); 64 // Show separate teaser checkbox, restore checked value. 65 $(checkbox).show().children('input').attr('checked', checked); 66 } 67 68 // Add split/join button. 69 var button = $('<div class="teaser-button-wrapper"><input type="button" class="teaser-button" /></div>'); 70 var include = $('#'+ this.id.substring(0, this.id.length - 2) +'include'); 71 $(include).parent().parent().before(button); 72 73 // Extract the teaser from the body, if set. Otherwise, stay in joined mode. 74 var text = body.val().split('<!--break-->'); 75 if (text.length >= 2) { 76 teaser[0].value = trim(text.shift()); 77 body[0].value = trim(text.join('<!--break-->')); 78 $(teaser).attr('disabled', ''); 79 $('input', button).val(Drupal.t('Join summary')).toggle(join_teaser, split_teaser); 80 } 81 else { 82 $('input', button).val(Drupal.t('Split summary at cursor')).toggle(split_teaser, join_teaser); 83 $(checkbox).hide().children('input').attr('checked', true); 84 } 85 86 // Make sure that textarea.js has done its magic to ensure proper visibility state. 87 if (Drupal.behaviors.textarea && teaser.is(('.form-textarea:not(.textarea-processed)'))) { 88 Drupal.behaviors.textarea(teaser.parentNode); 89 } 90 // Set initial visibility 91 if ($(teaser).is(':disabled')) { 92 $(teaser).parent().hide(); 93 } 94 95 }); 96 };
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |