home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (teaser.js)

This example Drupal source code file (teaser.js) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

at, break, checked, function, if, input, join_teaser, php, return, split, summary, text, true, var

The teaser.js Drupal example source code

// $Id: teaser.js,v 1.12.2.2 2010/03/01 10:13:18 goba Exp $

/**
 * 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 = $('<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-->');
    if (text.length >= 2) {
      teaser[0].value = trim(text.shift());
      body[0].value = trim(text.join('<!--break-->'));
      $(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();
    }

  });
};

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal teaser.js source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.