diff options
Diffstat (limited to 'misc/teaser.js')
-rw-r--r-- | misc/teaser.js | 156 |
1 files changed, 79 insertions, 77 deletions
diff --git a/misc/teaser.js b/misc/teaser.js index 590dad582..e303aa963 100644 --- a/misc/teaser.js +++ b/misc/teaser.js @@ -5,92 +5,94 @@ * * Note: depends on resizable textareas. */ -Drupal.behaviors.teaser = function(context) { - // This breaks in Konqueror. Prevent it from running. - if (/KDE/.test(navigator.vendor)) { - return; - } +Drupal.behaviors.teaser = { + attach: 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'); + $('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(); + // 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, ''); - } + 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())); + // 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); } - // 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(); + // 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); - } + // 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 = $('<div class="teaser-button-wrapper"><input type="button" class="teaser-button" /></div>'); - var include = $('#'+ this.id.substring(0, this.id.length - 2) +'include'); - $(include).parent().parent().before(button); + // Add split/join button. + var button = $('<div class="teaser-button-wrapper"><input type="button" class="teaser-button" /></div>'); + 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('<!--break-->', 2); - if (text.length == 2) { - teaser[0].value = trim(text[0]); - body[0].value = trim(text[1]); - $(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); - } + // Extract the teaser from the body, if set. Otherwise, stay in joined mode. + var text = body.val().split('<!--break-->', 2); + if (text.length == 2) { + teaser[0].value = trim(text[0]); + body[0].value = trim(text[1]); + $(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(); - } + // 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.attach(teaser.parentNode); + } + // Set initial visibility. + if ($(teaser).is('[@disabled]')) { + $(teaser).parent().hide(); + } - }); + }); + } }; |