--- /c/projects/drupal/cvs-head/contributions/modules/link/link.module	2006-09-25 15:34:04.703125000 -0400
+++ modules/link/link.module	2006-09-27 16:46:04.109375000 -0400
@@ -306,42 +306,45 @@ function link_views_tables() {
           'right' => array(
             'field' => 'vid',
           ),
-            'extra' => array('field_name' => $field['field_name']),
+          'extra' => array('field_name' => $field['field_name']),
         ),
         'fields' => array(
           'field_url' => array(
-            'name' => 'Link URL: '. $field['field_name'],
+            'name' => t('Link URL: @name', array('@name' => $field['field_name'])),
+            'handler' => 'link_views_handler_field_url',
+            'addlfields' => array('delta'),
+            'field_name' => $field['field_name'],
             'sortable' => TRUE,
           ),
           'field_title' => array(
-            'name' => 'Link Title: '. $field['field_name'],
+            'name' => t('Link Title: @name', array('@name' => $field['field_name'])),
             'sortable' => TRUE,
           ),
         ),
         'sorts' => array(
-          'field_url' => array('name' => 'Link URL: '. $field['field_name']),
-          'field_title' => array('name' => 'Link Title: '. $field['field_name']),
+          'field_url' => array('name' => t('Link URL: @name', array('@name' => $field['field_name']))),
+          'field_title' => array('name' => t('Link Title: @name', array('@name' => $field['field_name']))),
         ),
         'filters' => array(
           'field_url' => array(
-            'name' => 'Link URL: '. $field['field_name'],
+            'name' => t('Link URL: @name', array('@name' => $field['field_name'])),
             'operator' => array(
-              '='  => 'is',
-              'contains' => 'contains',
-              'begins' => 'begins with',
-              'ends' => 'ends wth',
-              'LIKE'  => 'matches pattern',
+              '='  => t('is'),
+              'contains' => t('contains'),
+              'begins' => t('begins with'),
+              'ends' => t('ends with'),
+              'LIKE'  => t('matches pattern'),
             ),
             'operator-handler' => '_text_filter_operator',
           ),
           'field_title' => array(
-            'name' => 'Link Title: '. $field['field_name'],
+            'name' => t('Link Title: @name', array('@name' => $field['field_name'])),
             'operator' => array(
-              '='  => 'is',
-              'contains' => 'contains',
-              'begins' => 'begins with',
-              'ends' => 'ends wth',
-              'LIKE'  => 'matches pattern',
+              '='  => t('is'),
+              'contains' => t('contains'),
+              'begins' => t('begins with'),
+              'ends' => t('ends with'),
+              'LIKE'  => t('matches pattern'),
             ),
             'operator-handler' => '_text_filter_operator',
           ),
@@ -354,13 +357,31 @@ function link_views_tables() {
 }
 
 /**
+ * Implement a Views handler to display the url properly (as an href link, with
+ * the attributes required in the field's settings).
+ */
+function link_views_handler_field_url($field_info, $field_data, $value, $data) {
+  $field_name = $field_info['field_name'];
+  $node = node_load($data->nid);
+  $node_field = isset($node->$field_name) ? $node->$field_name : array();
+  $type = content_types($node->type);
+  $field = $type['fields'][$field_name];
+  $field_delta = 'node_field_link_data_'. $field_name .'_delta';
+  $delta = $data->$field_delta;
+  if (isset($node_field[$delta])) {
+    $node_field[$delta]['view'] = _link_field_view($field, $node_field[$delta]['value'], $node_field[$delta], $node);
+    return theme('link_views_field_url', $node, $field, $node_field, $teaser, $page);
+  }
+}
+
+/**
  * Forms a valid URL if possible from an entered address.
  * Trims whitespace and automatically adds an http:// to addresses without a protocol specified
  *
  * @param string $url
  * @param string $protocol The protocol to be prepended to the url if one is not specified
  */
-function link_cleanup_url ($url, $protocol = "http") {
+function link_cleanup_url($url, $protocol = "http") {
   $url = trim($url);
   
   // Check if there is no protocol specified
@@ -416,3 +437,21 @@ function link_validate_link($text) {
     return $url;
   }
 }
+
+/**
+ * Format an individual field for display in Views.
+ *
+ * This differs from theme_field() in the fact that the field's label should not
+ * be displayed, because Views handles it.
+ */
+function theme_link_views_field_url(&$node, &$field, &$items, $teaser, $page) {
+  $output = '';
+  $output .= '<div class="field field-type-'. strtr($field['type'], '_', '-') .' field-'. strtr($field['field_name'], '_', '-') .'">';
+  $output .= '<div class="field-items">';
+  foreach ($items as $item) {
+    $output .= '<div class="field-item">'. $item['view'] .'</div>';
+  }
+  $output .= '</div>';
+  $output .= '</div>';
+  return $output;
+}
