? flexinode/flexinode_truncate.patch
Index: flexinode/field_textarea.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexinode/field_textarea.inc,v
retrieving revision 1.10.2.2
diff -u -r1.10.2.2 field_textarea.inc
--- flexinode/field_textarea.inc	22 Sep 2005 19:37:56 -0000	1.10.2.2
+++ flexinode/field_textarea.inc	30 Oct 2005 16:53:04 -0000
@@ -38,8 +38,11 @@
   $fieldname = 'flexinode_'. $field->field_id;
   $formatname = 'flexinode_'. $field->field_id .'_format';
   if ($node->$fieldname) {
-    if ($brief && strlen($node->$fieldname) > 100) {
-      return check_output(substr($node->$fieldname, 0, 100), $node->$formatname) . '...';
+    if ($brief == 'truncate') {
+      return check_output($node->temp, $node->$formatname);
+    }
+    else if ($brief && strlen($node->$fieldname) > 100) {
+      return check_output(substr($node->$fieldname, 0, 100, $node->$formatname)) . '...';
     }
     else {
       return check_output($node->$fieldname, $node->$formatname);
@@ -50,6 +53,7 @@
 function flexinode_field_textarea_config($field, $edit) {
   $form .= form_textarea(t('Default value'), 'default_value', $edit['default_value'], 60, 10);
   $form .= form_textfield(t('Lines'), 'rows', $edit['rows'] ? $edit['rows'] : 5, 10, 10, t('How large the text area will be.'));
+  $form .= form_checkbox(t('Truncate output'), 'truncate', 1, $edit['truncate'], t('Apply the &lt;!--break--> tag and node teaser settings when viewing this field in the teaser.'));
   return $form;
 }
 
Index: flexinode/flexinode.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexinode/flexinode.module,v
retrieving revision 1.46.2.3
diff -u -r1.46.2.3 flexinode.module
--- flexinode/flexinode.module	14 Sep 2005 01:21:53 -0000	1.46.2.3
+++ flexinode/flexinode.module	30 Oct 2005 16:53:05 -0000
@@ -642,12 +642,12 @@
 function flexinode_validate(&$node) {
   if (isset($node->ctype_id)) {
     $ctype = flexinode_load_content_type($node->ctype_id);
-  
+
     $error = array();
     foreach ($ctype->fields as $field) {
       $fieldname = 'flexinode_'. $field->field_id;
       $error[$fieldname] = '';
-      
+
       $validation = flexinode_invoke('validate', $field, $node);
       if ($validation) {
         $node->$fieldname = $validation['value'];
@@ -655,17 +655,17 @@
           $error[$fieldname] .= $validation['error'];
         }
       }
-  
+
       if ($field->required && !$node->$fieldname) {
         $error[$fieldname] .= t('You must fill in the field "'. $field->label .'".');
       }
-      
+
       if ($error[$fieldname] == '') unset($error[$fieldname]);
     }
-  
+
     // Pre-render the body and teaser fields, so the Drupal search works.
     $node = flexinode_content($node);
-   
+
     foreach ($error as $name => $message) {
       form_set_error($name, $message);
     }
@@ -693,12 +693,27 @@
     foreach ($ctype->fields as $field) {
       $fieldname = 'flexinode_'. $field->field_id;
       if (isset($node->$fieldname)) {
+
+      	// Variable used later to create teaser
+      	$data_unformatted_teaser = node_teaser($node->$fieldname);
+
         $data = flexinode_invoke('format', $field, $node, FALSE);
         if (!empty($data) && $data) {
           $node->body .= theme('flexinode_'. $field->field_type, $field->field_id, $field->label, $node->$fieldname, $data);
           if ($field->show_teaser) {
-            $data = node_teaser($data);
-            $node->teaser .= theme('flexinode_'. $field->field_type, $field->field_id, $field->label, $node->$fieldname, $data);
+          	if($field->truncate) {
+
+          		//temp property used to pass data to the field's format function
+          		$node->temp = $data_unformatted_teaser;
+
+          		//format the teaser
+          		$data = flexinode_invoke('format', $field, $node, 'truncate');
+            	$node->teaser .= theme('flexinode_'. $field->field_type, $field->field_id, $field->label, $node->$fieldname, $data);
+            }
+            else {
+            	$data = node_teaser($data);
+              $node->teaser .= theme('flexinode_'. $field->field_type, $field->field_id, $field->label, $node->$fieldname, $data);
+            }
           }
         }
       }
@@ -1023,14 +1038,14 @@
   if ($edit['field_id']) {
     $field_id = $edit['field_id'];
 
-    db_query("UPDATE {flexinode_field} SET label = '%s', default_value = '%s', rows = %d, required = %d, show_teaser = %d, show_table = %d, weight = %d, ctype_id = %d, field_type = '%s', options = '%s', description = '%s' WHERE field_id = %d", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id);
+    db_query("UPDATE {flexinode_field} SET label = '%s', default_value = '%s', rows = %d, truncate = %d, required = %d, show_teaser = %d, show_table = %d, weight = %d, ctype_id = %d, field_type = '%s', options = '%s', description = '%s' WHERE field_id = %d", $edit['label'], $edit['default_value'], $edit['rows'], $edit['truncate'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id);
 
     drupal_set_message(t('updated field "%name".', array('%name' => $edit['label'])));
   }
   else {
     $field_id = db_next_id('{flexinode_field}');
 
-    db_query("INSERT INTO {flexinode_field} (label, default_value, rows, required, show_teaser, show_table, weight, ctype_id, field_type, options, description, field_id) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, '%s', '%s', '%s', %d)", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id);
+    db_query("INSERT INTO {flexinode_field} (label, default_value, rows, truncate, required, show_teaser, show_table, weight, ctype_id, field_type, options, description, field_id) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, '%s', '%s', '%s', %d)", $edit['label'], $edit['default_value'], $edit['rows'], $edit['truncate'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id);
 
     drupal_set_message(t('created new field "%name".', array('%name' => $edit['label'])));
   }
