diff --git a/core/modules/views/templates/views-view-fields.tpl.php b/core/modules/views/templates/views-view-fields.tpl.php
index ae3a4c6..dd4461c 100644
--- a/core/modules/views/templates/views-view-fields.tpl.php
+++ b/core/modules/views/templates/views-view-fields.tpl.php
@@ -8,7 +8,6 @@
  * - $fields: an array of $field objects. Each one contains:
  *   - $field->content: The output of the field.
  *   - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
- *   - $field->class: The safe class id to use.
  *   - $field->handler: The Views field handler object controlling this field. Do not use
  *     var_export to dump this object, as it can't handle the recursion.
  *   - $field->inline: Whether or not the field should be inline.
@@ -24,7 +23,7 @@
  * @ingroup views_templates
  */
 ?>
-<?php foreach ($fields as $id => $field): ?>
+<?php foreach ($fields as $field): ?>
   <?php if (!empty($field->separator)): ?>
     <?php print $field->separator; ?>
   <?php endif; ?>
diff --git a/core/modules/views/templates/views-view-grid.tpl.php b/core/modules/views/templates/views-view-grid.tpl.php
index 43ba37b..7cbb0b3 100644
--- a/core/modules/views/templates/views-view-grid.tpl.php
+++ b/core/modules/views/templates/views-view-grid.tpl.php
@@ -13,13 +13,13 @@
 <?php if (!empty($title)) : ?>
   <h3><?php print $title; ?></h3>
 <?php endif; ?>
-<table <?php print $attributes; ?>>
+<table<?php print $attributes; ?>>
   <tbody>
-    <?php foreach ($rows as $row_number => $columns): ?>
-      <tr <?php print $row_classes[$row_number]; ?>>
-        <?php foreach ($columns as $column_number => $item): ?>
-          <td <?php print $column_classes[$row_number][$column_number]; ?>>
-            <?php print $item; ?>
+    <?php foreach ($rows as $row): ?>
+      <tr<?php print $row['attributes']; ?>>
+        <?php foreach ($row['columns'] as $column): ?>
+          <td<?php print $column['attributes']; ?>>
+            <?php print $column['content']; ?>
           </td>
         <?php endforeach; ?>
       </tr>
diff --git a/core/modules/views/templates/views-view-list.tpl.php b/core/modules/views/templates/views-view-list.tpl.php
index 2c4b9c5..b310c83 100644
--- a/core/modules/views/templates/views-view-list.tpl.php
+++ b/core/modules/views/templates/views-view-list.tpl.php
@@ -14,8 +14,8 @@
     <h3><?php print $title; ?></h3>
   <?php endif; ?>
   <?php print $list_type_prefix; ?>
-    <?php foreach ($rows as $id => $row): ?>
-      <li <?php print $row_classes[$id]; ?>><?php print $row; ?></li>
+    <?php foreach ($rows as $row): ?>
+      <li<?php print $row['attributes']; ?>><?php print $row['content']; ?></li>
     <?php endforeach; ?>
   <?php print $list_type_suffix; ?>
 <?php print $wrapper_suffix; ?>
diff --git a/core/modules/views/templates/views-view-summary-unformatted.tpl.php b/core/modules/views/templates/views-view-summary-unformatted.tpl.php
index 2280a71..b63d72e 100644
--- a/core/modules/views/templates/views-view-summary-unformatted.tpl.php
+++ b/core/modules/views/templates/views-view-summary-unformatted.tpl.php
@@ -9,12 +9,12 @@
  * @ingroup views_templates
  */
 ?>
-<?php foreach ($rows as $id => $row): ?>
+<?php foreach ($rows as $row): ?>
   <?php print (!empty($options['inline']) ? '<span' : '<div') . ' class="views-summary views-summary-unformatted">'; ?>
-    <?php if (!empty($row->separator)): ?><? print $row->separator; ?><?php endif; ?>
-    <a href="<?php print $row->url; ?>"<?php print $row_classes[$id]; ?>><?php print $row->link; ?></a>
+    <?php if (!empty($row['separator'])): ?><? print $row['separator']; ?><?php endif; ?>
+    <a href="<?php print $row['url']; ?>"<?php print $row['attributes']; ?>><?php print $row['link']; ?></a>
     <?php if (!empty($options['count'])): ?>
-      (<?php print $row->count; ?>)
+      (<?php print $row['count']; ?>)
     <?php endif; ?>
   <?php print !empty($options['inline']) ? '</span>' : '</div>'; ?>
 <?php endforeach; ?>
diff --git a/core/modules/views/templates/views-view-summary.tpl.php b/core/modules/views/templates/views-view-summary.tpl.php
index ce51e70..9c8d305 100644
--- a/core/modules/views/templates/views-view-summary.tpl.php
+++ b/core/modules/views/templates/views-view-summary.tpl.php
@@ -9,10 +9,10 @@
 ?>
 <div class="item-list">
   <ul class="views-summary">
-  <?php foreach ($rows as $id => $row): ?>
-    <li><a href="<?php print $row->url; ?>"<?php print $row_classes[$id]; ?>><?php print $row->link; ?></a>
+  <?php foreach ($rows as $row): ?>
+    <li><a href="<?php print $row['url']; ?>"<?php print $row['attributes']; ?>><?php print $row['link']; ?></a>
       <?php if (!empty($options['count'])): ?>
-        (<?php print $row->count?>)
+        (<?php print $row['count']; ?>)
       <?php endif; ?>
     </li>
   <?php endforeach; ?>
diff --git a/core/modules/views/templates/views-view-table.tpl.php b/core/modules/views/templates/views-view-table.tpl.php
index 4d44d42..5d98cba 100644
--- a/core/modules/views/templates/views-view-table.tpl.php
+++ b/core/modules/views/templates/views-view-table.tpl.php
@@ -6,15 +6,9 @@
  *
  * - $title : The title of this group of rows.  May be empty.
  * - $header: An array of header labels keyed by field id.
- * - $header_classes: An array of header classes keyed by field id.
  * - $fields: An array of CSS IDs to use for each field id.
- * - $classes: A class or classes to apply to the table, based on settings.
- * - $row_classes: An array of classes to apply to each row, indexed by row
- *   number. This matches the index in $rows.
  * - $rows: An array of row items. Each row is an array of content.
  *   $rows are keyed by row number, fields within rows are keyed by field ID.
- * - $field_classes: An array of classes to apply to each field, indexed by
- *   field id, then row number. This matches the index in $rows.
  * @ingroup views_templates
  */
 
@@ -26,20 +20,20 @@
   <?php if (!empty($header)) : ?>
     <thead>
       <tr>
-        <?php foreach ($header as $field => $label): ?>
-          <th <?php print $header_classes[$field]; ?> scope="col">
-            <?php print $label; ?>
+        <?php foreach ($header as $field): ?>
+          <th<?php print $field['attributes']; ?> scope="col">
+            <?php print $field['content']; ?>
           </th>
         <?php endforeach; ?>
       </tr>
     </thead>
   <?php endif; ?>
   <tbody>
-    <?php foreach ($rows as $row_count => $row): ?>
-      <tr <?php print $row_classes[$row_count]; ?>>
-        <?php foreach ($row as $field => $content): ?>
-          <td <?php print $field_classes[$field][$row_count]; ?>>
-            <?php print $content; ?>
+    <?php foreach ($rows as $row): ?>
+      <tr<?php print $row['attributes']; ?>>
+        <?php foreach ($row['fields'] as $field): ?>
+          <td<?php print $field['attributes']; ?>>
+            <?php print $field['content']; ?>
           </td>
         <?php endforeach; ?>
       </tr>
diff --git a/core/modules/views/templates/views-view-unformatted.tpl.php b/core/modules/views/templates/views-view-unformatted.tpl.php
index b7f63b9..cad96f6 100644
--- a/core/modules/views/templates/views-view-unformatted.tpl.php
+++ b/core/modules/views/templates/views-view-unformatted.tpl.php
@@ -10,8 +10,8 @@
 <?php if (!empty($title)): ?>
   <h3><?php print $title; ?></h3>
 <?php endif; ?>
-<?php foreach ($rows as $id => $row): ?>
-  <div <?php print $row_classes[$id]; ?>>
-    <?php print $row; ?>
+<?php foreach ($rows as $row): ?>
+  <div <?php print $row['attributes']; ?>>
+    <?php print $row['content']; ?>
   </div>
 <?php endforeach; ?>
diff --git a/core/modules/views/templates/views-view.tpl.php b/core/modules/views/templates/views-view.tpl.php
index ca8faef..7864306 100644
--- a/core/modules/views/templates/views-view.tpl.php
+++ b/core/modules/views/templates/views-view.tpl.php
@@ -14,7 +14,6 @@
  *    .view-display-id-[display_name]
  *    .view-dom-id-[dom_id]
  * - $css_name: A css-safe version of the view name.
- * - $css_class: The user-specified classes names, if any
  * - $header: The view header
  * - $footer: The view footer
  * - $rows: The results of the view query, if any
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 0bae0fc..ff23b8f 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -349,7 +349,6 @@ function template_preprocess_views_view_field(&$vars) {
 function template_preprocess_views_view_summary(&$vars) {
   $view     = $vars['view'];
   $argument = $view->argument[$view->build_info['summary_level']];
-  $vars['row_classes'] = array();
 
   $url_options = array();
 
@@ -372,8 +371,8 @@ function template_preprocess_views_view_summary(&$vars) {
   $argument->process_summary_arguments($row_args);
 
   foreach ($vars['rows'] as $id => $row) {
-
-    $vars['rows'][$id]->link = $argument->summary_name($row);
+    $vars['rows'][$id]['attributes'] = new Attribute(array('class' => array()));
+    $vars['rows'][$id]['link'] = $argument->summary_name($row);
     $args = $view->args;
     $args[$argument->position] = $row_args[$id];
 
@@ -381,14 +380,12 @@ function template_preprocess_views_view_summary(&$vars) {
     if (!empty($argument->options['summary_options']['base_path'])) {
       $base_path = $argument->options['summary_options']['base_path'];
     }
-    $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);
-    $vars['rows'][$id]->count = intval($row->{$argument->count_alias});
+    $vars['rows'][$id]['url'] = url($view->getUrl($args, $base_path), $url_options);
+    $vars['rows'][$id]['count'] = intval($row->{$argument->count_alias});
 
-    $vars['row_classes'][$id] = array();
-    if (isset($active_urls[$vars['rows'][$id]->url])) {
-      $vars['row_classes'][$id]['class'][] = 'active';
+    if (isset($active_urls[$vars['rows'][$id]['url']])) {
+      $vars['rows'][$id]['attributes']['class'][] = 'active';
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
   }
 }
 
@@ -397,9 +394,8 @@ function template_preprocess_views_view_summary(&$vars) {
  * unformatted.
  */
 function template_preprocess_views_view_summary_unformatted(&$vars) {
-  $view     = $vars['view'];
+  $view = $vars['view'];
   $argument = $view->argument[$view->build_info['summary_level']];
-  $vars['row_classes'] = array();
 
   $url_options = array();
 
@@ -422,11 +418,12 @@ function template_preprocess_views_view_summary_unformatted(&$vars) {
   $argument->process_summary_arguments($row_args);
 
   foreach ($vars['rows'] as $id => $row) {
+    $vars['rows'][$id]['attributes'] = new Attribute(array('class' => array()));
     // only false on first time:
     if ($count++) {
-      $vars['rows'][$id]->separator = filter_xss_admin($vars['options']['separator']);
+      $vars['rows'][$id]['separator'] = filter_xss_admin($vars['options']->separator);
     }
-    $vars['rows'][$id]->link = $argument->summary_name($row);
+    $vars['rows'][$id]['link'] = $argument->summary_name($row);
     $args = $view->args;
     $args[$argument->position] = $row_args[$id];
 
@@ -434,13 +431,11 @@ function template_preprocess_views_view_summary_unformatted(&$vars) {
     if (!empty($argument->options['summary_options']['base_path'])) {
       $base_path = $argument->options['summary_options']['base_path'];
     }
-    $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);
-    $vars['rows'][$id]->count = intval($row->{$argument->count_alias});
-    $vars['row_classes'][$id] = array();
-    if (isset($active_urls[$vars['rows'][$id]->url])) {
-      $vars['row_classes'][$id]['class'][] = 'active';
+    $vars['rows'][$id]['url'] = url($view->getUrl($args, $base_path), $url_options);
+    $vars['rows'][$id]['count'] = intval($row->{$argument->count_alias});
+    if (isset($active_urls[$vars['rows'][$id]['url']])) {
+      $vars['rows'][$id]['attributes']['class'][] = 'active';
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
   }
 }
 
@@ -448,7 +443,7 @@ function template_preprocess_views_view_summary_unformatted(&$vars) {
  * Display a view as a table style.
  */
 function template_preprocess_views_view_table(&$vars) {
-  $view     = $vars['view'];
+  $view = $vars['view'];
 
   // We need the raw data for this grouping, which is passed in as $vars['rows'].
   // However, the template also needs to use for the rendered fields.  We
@@ -457,7 +452,6 @@ function template_preprocess_views_view_table(&$vars) {
   // Store rows so that they may be used by further preprocess functions.
   $result   = $vars['result'] = $vars['rows'];
   $vars['rows'] = array();
-  $vars['field_classes'] = array();
   $vars['header'] = array();
 
   $options  = $view->style_plugin->options;
@@ -480,6 +474,8 @@ function template_preprocess_views_view_table(&$vars) {
     $query += $view->exposed_raw_input;
   }
 
+  // A boolean to store whether the table's header has any labels.
+  $has_header_labels = FALSE;
   foreach ($columns as $field => $column) {
     // Create a second variable so we can easily find what fields we have and what the
     // CSS classes should be.
@@ -492,7 +488,7 @@ function template_preprocess_views_view_table(&$vars) {
     if ($field == $column && empty($fields[$field]->options['exclude'])) {
       $label = check_plain(!empty($fields[$field]) ? $fields[$field]->label() : '');
       if (empty($options['info'][$field]['sortable']) || !$fields[$field]->click_sortable()) {
-        $vars['header'][$field] = $label;
+        $vars['header'][$field]['content'] = $label;
       }
       else {
         $initial = !empty($options['info'][$field]['default_sort_order']) ? $options['info'][$field]['default_sort_order'] : 'asc';
@@ -513,38 +509,41 @@ function template_preprocess_views_view_table(&$vars) {
           'attributes' => array('title' => $title),
           'query' => $query,
         );
-        $vars['header'][$field] = l($label, current_path(), $link_options);
+        $vars['header'][$field]['content'] = l($label, current_path(), $link_options);
       }
 
       // Set up the header label class.
-      $vars['header_classes'][$field] = array();
+      $vars['header'][$field]['attributes'] = new Attribute(array('class' => array()));
       if ($fields[$field]->options['element_default_classes']) {
-        $vars['header_classes'][$field]['class'][] = 'views-field';
-        $vars['header_classes'][$field]['class'][] = 'views-field-' . $vars['fields'][$field];
+        $vars['header'][$field]['attributes']['class'][] = 'views-field';
+        $vars['header'][$field]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];
       }
-      $vars['header_classes'][$field] = new Attribute($vars['header_classes'][$field]);
       $class = $fields[$field]->element_label_classes(0);
       if ($class) {
-        $vars['header_classes'][$field]['class'][] = $class;
+        $vars['header'][$field]['attributes']['class'][] = $class;
       }
       // Add responsive header classes.
       if (!empty($options['info'][$field]['responsive'])) {
-        $vars['header_classes'][$field]['class'][] = $options['info'][$field]['responsive'];
+        $vars['header'][$field]['attributes']['class'][] = $options['info'][$field]['responsive'];
         $responsive = TRUE;
       }
       // Add a CSS align class to each field if one was set
       if (!empty($options['info'][$field]['align'])) {
-        $vars['header_classes'][$field]['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);
+        $vars['header'][$field]['attributes']['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);
       }
 
       // Add a header label wrapper if one was selected.
-      if ($vars['header'][$field]) {
+      if ($vars['header'][$field]['content']) {
         $element_label_type = $fields[$field]->element_label_type(TRUE, TRUE);
         if ($element_label_type) {
-          $vars['header'][$field] = '<' . $element_label_type . '>' . $vars['header'][$field] . '</' . $element_label_type . '>';
+          $vars['header'][$field]['content'] = '<' . $element_label_type . '>' . $vars['header'][$field]['content'] . '</' . $element_label_type . '>';
         }
       }
 
+      // Check if header label is not empty.
+      if (!empty($vars['header'][$field]['content'])) {
+        $has_header_labels = TRUE;
+      }
     }
 
     // Add a CSS align class to each field if one was set
@@ -553,21 +552,23 @@ function template_preprocess_views_view_table(&$vars) {
     }
 
     // Render each field into its appropriate column.
-    foreach ($result as $num => $row) {
+    foreach ($result as $num => $content) {
+      $vars['rows'][$num]['fields'][$column]['content'] = $content;
+      $vars['rows'][$num]['fields'][$column]['attributes'] = new Attribute(array('class' => array()));
+
       // Add field classes
-      $vars['field_classes'][$field][$num] = array();
       if ($fields[$field]->options['element_default_classes']) {
-        $vars['field_classes'][$field][$num]['class'][] = 'views-field';
-        $vars['field_classes'][$field][$num]['class'][] = 'views-field-' . $vars['fields'][$field];
+        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = 'views-field';
+        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];
       }
-      $vars['field_classes'][$field][$num] = new Attribute($vars['field_classes'][$field][$num]);
 
       if ($classes = $fields[$field]->element_classes($num)) {
-        $vars['field_classes'][$field][$num]['class'][] = $classes;
+        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = $classes;
       }
+
       // Add responsive header classes.
       if (!empty($options['info'][$field]['responsive'])) {
-        $vars['field_classes'][$field][$num]['class'][] = $options['info'][$field]['responsive'];
+        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = $options['info'][$field]['responsive'];
       }
 
       if (!empty($fields[$field]) && empty($fields[$field]->options['exclude'])) {
@@ -578,21 +579,21 @@ function template_preprocess_views_view_table(&$vars) {
         }
 
         // Don't bother with separators and stuff if the field does not show up.
-        if (empty($field_output) && !empty($vars['rows'][$num][$column])) {
+        if (empty($field_output) && !empty($vars['rows'][$num]['fields'][$column]['content'])) {
           continue;
         }
 
         // Place the field into the column, along with an optional separator.
-        if (!empty($vars['rows'][$num][$column])) {
+        if (!empty($vars['rows'][$num][$column]['content'])) {
           if (!empty($options['info'][$column]['separator'])) {
-            $vars['rows'][$num][$column] .= filter_xss_admin($options['info'][$column]['separator']);
+            $vars['rows'][$num]['fields'][$column]['content'] .= filter_xss_admin($options['info'][$column]['separator']);
           }
         }
         else {
-          $vars['rows'][$num][$column] = '';
+          $vars['rows'][$num]['fields'][$column]['content'] = '';
         }
 
-        $vars['rows'][$num][$column] .= $field_output;
+        $vars['rows'][$num]['fields'][$column]['content'] .= $field_output;
       }
     }
 
@@ -612,33 +613,32 @@ function template_preprocess_views_view_table(&$vars) {
   }
 
   // Hide table header if all labels are empty.
-  if (!array_filter($vars['header'])) {
+  if (!$has_header_labels) {
     $vars['header'] = array();
   }
 
   $count = 0;
   foreach ($vars['rows'] as $num => $row) {
-    $vars['row_classes'][$num] = array();
+    $vars['rows'][$num]['attributes'] = new Attribute(array('class' => array()));
     if ($row_class_special) {
-      $vars['row_classes'][$num]['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';
+      $vars['rows'][$num]['attributes']['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';
       if ($num === 0) {
-        $vars['row_classes'][$num]['class'][] = 'views-row-first';
+        $vars['rows'][$num]['attributes']['class'][] = 'views-row-first';
       }
       elseif ($num === (count($vars['rows']) - 1)) {
-        $vars['row_classes'][$num]['class'][] = 'views-row-last';
+        $vars['rows'][$num]['attributes']['class'][] = 'views-row-last';
       }
     }
     if ($row_class = $handler->get_row_class($num)) {
-      $vars['row_classes'][$num]['class'][] = $row_class;
+      $vars['rows'][$num]['attributes']['class'][] = $row_class;
     }
-    $vars['row_classes'][$num] = new Attribute($vars['row_classes'][$num]);
   }
 
   $vars['attributes']['class'][] = 'views-table';
   if (empty($vars['rows']) && !empty($options['empty_table'])) {
-    $vars['rows'][0][0] = $view->display_handler->renderArea('empty');
-    // Calculate the amounts of rows with output.
-    $vars['field_classes'][0][0] = new Attribute(array(
+    $vars['rows'][0]['fields'][0]['content'] = $view->display_handler->renderArea('empty');
+     // Calculate the amounts of rows with output.
+    $vars['rows'][0]['fields'][0]['attributes'] = new Attribute(array(
       'colspan' => count($vars['header']),
       'class' => 'views-empty',
     ));
@@ -739,37 +739,38 @@ function template_preprocess_views_view_grid(&$vars) {
 
   // Apply the row classes
   foreach ($rows as $row_number => $row) {
-    $row_classes = array();
+    $vars['rows'][$id]['attributes'] = new attribute(array('class' => array()));
+
     if ($default_row_class) {
-      $row_classes['class'][] = 'row-' . ($row_number + 1);
+      $vars['rows'][$id]['attributes']['class'][] = 'row-' . ($row_number + 1);
     }
     if ($row_class_special) {
       if ($row_number == 0) {
-        $row_classes['class'][] = 'row-first';
+        $vars['rows'][$id]['attributes']['class'][] = 'row-first';
       }
       if (count($rows) == ($row_number + 1)) {
-        $row_classes['class'][] = 'row-last';
+        $vars['rows'][$id]['attributes']['class'][] = 'row-last';
       }
     }
-    $row_classes = new Attribute($row_classes);
 
-    foreach ($rows[$row_number] as $column_number => $item) {
-      $vars['column_classes'][$row_number][$column_number] = array();
+    foreach ($row as $column_number => $item) {
+      $vars['rows'][$id]['columns'][$column_number]['content'] = $item;
+      $vars['rows'][$id]['columns'][$column_number]['attributes'] = new attribute(array('class' => array()));
+
       if ($default_row_class) {
-        $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-' . ($column_number + 1);
+        $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-' . ($column_number + 1);
       }
       if ($row_class_special) {
         if ($column_number == 0) {
-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-first';
+          $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-first';
         }
         elseif (count($rows[$row_number]) == ($column_number + 1)) {
-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-last';
+          $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-last';
         }
       }
       if (isset($row_indexes[$row_number][$column_number]) && $column_class = $view->style_plugin->get_row_class($row_indexes[$row_number][$column_number])) {
-        $vars['column_classes'][$row_number][$column_number]['class'][] = $column_class;
+        $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = $column_class;
       }
-      $vars['column_classes'][$row_number][$column_number] = new Attribute($vars['column_classes'][$row_number][$column_number]);
     }
   }
   $vars['rows'] = $rows;
@@ -796,34 +797,34 @@ function template_preprocess_views_view_unformatted(&$vars) {
   $style = $view->style_plugin;
   $options = $style->options;
 
-  $vars['row_classes'] = array();
-  $vars['classes'] = array();
   $default_row_class = isset($options['default_row_class']) ? $options['default_row_class'] : FALSE;
   $row_class_special = isset($options['row_class_special']) ? $options['row_class_special'] : FALSE;
   // Set up striping values.
   $count = 0;
   $max = count($rows);
   foreach ($rows as $id => $row) {
-    $vars['row_classes'][$id] = array();
+    $vars['rows'][$id] = array();
+    $vars['rows'][$id]['content'] = $row;
+    $vars['rows'][$id]['attributes'] = new attribute(array('class' => array()));
+
     $count++;
     if ($default_row_class) {
-      $vars['row_classes'][$id]['class'][] = 'views-row';
-      $vars['row_classes'][$id]['class'][] = 'views-row-' . $count;
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row';
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . $count;
     }
     if ($row_class_special) {
-      $vars['row_classes'][$id]['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');
       if ($count == 1) {
-        $vars['row_classes'][$id]['class'][] = 'views-row-first';
+        $vars['rows'][$id]['attributes']['class'][] = 'views-row-first';
       }
       if ($count == $max) {
-        $vars['row_classes'][$id]['class'][] = 'views-row-last';
+        $vars['rows'][$id]['attributes']['class'][] = 'views-row-last';
       }
     }
 
     if ($row_class = $view->style_plugin->get_row_class($id)) {
-      $vars['row_classes'][$id]['class'][] = $row_class;
+      $vars['rows'][$id]['attributes']['class'][] = $row_class;
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
   }
 }
 
diff --git a/t b/t
new file mode 100644
index 0000000..65b6bb9
--- /dev/null
+++ b/t
@@ -0,0 +1,546 @@
+[1;33mdiff --git a/core/modules/views/templates/views-view-fields.tpl.php b/core/modules/views/templates/views-view-fields.tpl.php[m
+[1;33mindex ae3a4c6..dd4461c 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-fields.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-fields.tpl.php[m
+[1;35m@@ -8,7 +8,6 @@[m
+  * - $fields: an array of $field objects. Each one contains:[m
+  *   - $field->content: The output of the field.[m
+  *   - $field->raw: The raw data for the field, if it exists. This is NOT output safe.[m
+[1;31m- *   - $field->class: The safe class id to use.[m
+  *   - $field->handler: The Views field handler object controlling this field. Do not use[m
+  *     var_export to dump this object, as it can't handle the recursion.[m
+  *   - $field->inline: Whether or not the field should be inline.[m
+[1;35m@@ -24,7 +23,7 @@[m
+  * @ingroup views_templates[m
+  */[m
+ ?>[m
+[1;31m-<?php foreach ($fields as $id => $field): ?>[m
+[1;32m+[m[1;32m<?php foreach ($fields as $field): ?>[m
+   <?php if (!empty($field->separator)): ?>[m
+     <?php print $field->separator; ?>[m
+   <?php endif; ?>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-grid.tpl.php b/core/modules/views/templates/views-view-grid.tpl.php[m
+[1;33mindex 43ba37b..a9f7b34 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-grid.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-grid.tpl.php[m
+[1;35m@@ -13,13 +13,13 @@[m
+ <?php if (!empty($title)) : ?>[m
+   <h3><?php print $title; ?></h3>[m
+ <?php endif; ?>[m
+[1;31m-<table <?php print $attributes; ?>>[m
+[1;32m+[m[1;32m<table<?php print $attributes; ?>>[m
+   <tbody>[m
+[1;31m-    <?php foreach ($rows as $row_number => $columns): ?>[m
+[1;31m-      <tr <?php print $row_classes[$row_number]; ?>>[m
+[1;31m-        <?php foreach ($columns as $column_number => $item): ?>[m
+[1;31m-          <td <?php print $column_classes[$row_number][$column_number]; ?>>[m
+[1;31m-            <?php print $item; ?>[m
+[1;32m+[m[1;32m    <?php foreach ($rows as $row): ?>[m
+[1;32m+[m[1;32m      <tr<?php print $row['attributes']; ?>>[m
+[1;32m+[m[1;32m        <?php foreach ($row['columns'] => $column): ?>[m
+[1;32m+[m[1;32m          <td<?php print $column['attributes']; ?>>[m
+[1;32m+[m[1;32m            <?php print $column['content']; ?>[m
+           </td>[m
+         <?php endforeach; ?>[m
+       </tr>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-list.tpl.php b/core/modules/views/templates/views-view-list.tpl.php[m
+[1;33mindex 2c4b9c5..b310c83 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-list.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-list.tpl.php[m
+[1;35m@@ -14,8 +14,8 @@[m
+     <h3><?php print $title; ?></h3>[m
+   <?php endif; ?>[m
+   <?php print $list_type_prefix; ?>[m
+[1;31m-    <?php foreach ($rows as $id => $row): ?>[m
+[1;31m-      <li <?php print $row_classes[$id]; ?>><?php print $row; ?></li>[m
+[1;32m+[m[1;32m    <?php foreach ($rows as $row): ?>[m
+[1;32m+[m[1;32m      <li<?php print $row['attributes']; ?>><?php print $row['content']; ?></li>[m
+     <?php endforeach; ?>[m
+   <?php print $list_type_suffix; ?>[m
+ <?php print $wrapper_suffix; ?>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-summary-unformatted.tpl.php b/core/modules/views/templates/views-view-summary-unformatted.tpl.php[m
+[1;33mindex 2280a71..b63d72e 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-summary-unformatted.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-summary-unformatted.tpl.php[m
+[1;35m@@ -9,12 +9,12 @@[m
+  * @ingroup views_templates[m
+  */[m
+ ?>[m
+[1;31m-<?php foreach ($rows as $id => $row): ?>[m
+[1;32m+[m[1;32m<?php foreach ($rows as $row): ?>[m
+   <?php print (!empty($options['inline']) ? '<span' : '<div') . ' class="views-summary views-summary-unformatted">'; ?>[m
+[1;31m-    <?php if (!empty($row->separator)): ?><? print $row->separator; ?><?php endif; ?>[m
+[1;31m-    <a href="<?php print $row->url; ?>"<?php print $row_classes[$id]; ?>><?php print $row->link; ?></a>[m
+[1;32m+[m[1;32m    <?php if (!empty($row['separator'])): ?><? print $row['separator']; ?><?php endif; ?>[m
+[1;32m+[m[1;32m    <a href="<?php print $row['url']; ?>"<?php print $row['attributes']; ?>><?php print $row['link']; ?></a>[m
+     <?php if (!empty($options['count'])): ?>[m
+[1;31m-      (<?php print $row->count; ?>)[m
+[1;32m+[m[1;32m      (<?php print $row['count']; ?>)[m
+     <?php endif; ?>[m
+   <?php print !empty($options['inline']) ? '</span>' : '</div>'; ?>[m
+ <?php endforeach; ?>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-summary.tpl.php b/core/modules/views/templates/views-view-summary.tpl.php[m
+[1;33mindex ce51e70..9c8d305 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-summary.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-summary.tpl.php[m
+[1;35m@@ -9,10 +9,10 @@[m
+ ?>[m
+ <div class="item-list">[m
+   <ul class="views-summary">[m
+[1;31m-  <?php foreach ($rows as $id => $row): ?>[m
+[1;31m-    <li><a href="<?php print $row->url; ?>"<?php print $row_classes[$id]; ?>><?php print $row->link; ?></a>[m
+[1;32m+[m[1;32m  <?php foreach ($rows as $row): ?>[m
+[1;32m+[m[1;32m    <li><a href="<?php print $row['url']; ?>"<?php print $row['attributes']; ?>><?php print $row['link']; ?></a>[m
+       <?php if (!empty($options['count'])): ?>[m
+[1;31m-        (<?php print $row->count?>)[m
+[1;32m+[m[1;32m        (<?php print $row['count']; ?>)[m
+       <?php endif; ?>[m
+     </li>[m
+   <?php endforeach; ?>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-table.tpl.php b/core/modules/views/templates/views-view-table.tpl.php[m
+[1;33mindex 4d44d42..5d98cba 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-table.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-table.tpl.php[m
+[1;35m@@ -6,15 +6,9 @@[m
+  *[m
+  * - $title : The title of this group of rows.  May be empty.[m
+  * - $header: An array of header labels keyed by field id.[m
+[1;31m- * - $header_classes: An array of header classes keyed by field id.[m
+  * - $fields: An array of CSS IDs to use for each field id.[m
+[1;31m- * - $classes: A class or classes to apply to the table, based on settings.[m
+[1;31m- * - $row_classes: An array of classes to apply to each row, indexed by row[m
+[1;31m- *   number. This matches the index in $rows.[m
+  * - $rows: An array of row items. Each row is an array of content.[m
+  *   $rows are keyed by row number, fields within rows are keyed by field ID.[m
+[1;31m- * - $field_classes: An array of classes to apply to each field, indexed by[m
+[1;31m- *   field id, then row number. This matches the index in $rows.[m
+  * @ingroup views_templates[m
+  */[m
+ [m
+[1;35m@@ -26,20 +20,20 @@[m
+   <?php if (!empty($header)) : ?>[m
+     <thead>[m
+       <tr>[m
+[1;31m-        <?php foreach ($header as $field => $label): ?>[m
+[1;31m-          <th <?php print $header_classes[$field]; ?> scope="col">[m
+[1;31m-            <?php print $label; ?>[m
+[1;32m+[m[1;32m        <?php foreach ($header as $field): ?>[m
+[1;32m+[m[1;32m          <th<?php print $field['attributes']; ?> scope="col">[m
+[1;32m+[m[1;32m            <?php print $field['content']; ?>[m
+           </th>[m
+         <?php endforeach; ?>[m
+       </tr>[m
+     </thead>[m
+   <?php endif; ?>[m
+   <tbody>[m
+[1;31m-    <?php foreach ($rows as $row_count => $row): ?>[m
+[1;31m-      <tr <?php print $row_classes[$row_count]; ?>>[m
+[1;31m-        <?php foreach ($row as $field => $content): ?>[m
+[1;31m-          <td <?php print $field_classes[$field][$row_count]; ?>>[m
+[1;31m-            <?php print $content; ?>[m
+[1;32m+[m[1;32m    <?php foreach ($rows as $row): ?>[m
+[1;32m+[m[1;32m      <tr<?php print $row['attributes']; ?>>[m
+[1;32m+[m[1;32m        <?php foreach ($row['fields'] as $field): ?>[m
+[1;32m+[m[1;32m          <td<?php print $field['attributes']; ?>>[m
+[1;32m+[m[1;32m            <?php print $field['content']; ?>[m
+           </td>[m
+         <?php endforeach; ?>[m
+       </tr>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view-unformatted.tpl.php b/core/modules/views/templates/views-view-unformatted.tpl.php[m
+[1;33mindex b7f63b9..cad96f6 100644[m
+[1;33m--- a/core/modules/views/templates/views-view-unformatted.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view-unformatted.tpl.php[m
+[1;35m@@ -10,8 +10,8 @@[m
+ <?php if (!empty($title)): ?>[m
+   <h3><?php print $title; ?></h3>[m
+ <?php endif; ?>[m
+[1;31m-<?php foreach ($rows as $id => $row): ?>[m
+[1;31m-  <div <?php print $row_classes[$id]; ?>>[m
+[1;31m-    <?php print $row; ?>[m
+[1;32m+[m[1;32m<?php foreach ($rows as $row): ?>[m
+[1;32m+[m[1;32m  <div <?php print $row['attributes']; ?>>[m
+[1;32m+[m[1;32m    <?php print $row['content']; ?>[m
+   </div>[m
+ <?php endforeach; ?>[m
+[1;33mdiff --git a/core/modules/views/templates/views-view.tpl.php b/core/modules/views/templates/views-view.tpl.php[m
+[1;33mindex ca8faef..7864306 100644[m
+[1;33m--- a/core/modules/views/templates/views-view.tpl.php[m
+[1;33m+++ b/core/modules/views/templates/views-view.tpl.php[m
+[1;35m@@ -14,7 +14,6 @@[m
+  *    .view-display-id-[display_name][m
+  *    .view-dom-id-[dom_id][m
+  * - $css_name: A css-safe version of the view name.[m
+[1;31m- * - $css_class: The user-specified classes names, if any[m
+  * - $header: The view header[m
+  * - $footer: The view footer[m
+  * - $rows: The results of the view query, if any[m
+[1;33mdiff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc[m
+[1;33mindex 0bae0fc..63057a7 100644[m
+[1;33m--- a/core/modules/views/views.theme.inc[m
+[1;33m+++ b/core/modules/views/views.theme.inc[m
+[1;35m@@ -349,7 +349,6 @@[m [mfunction template_preprocess_views_view_field(&$vars) {[m
+ function template_preprocess_views_view_summary(&$vars) {[m
+   $view     = $vars['view'];[m
+   $argument = $view->argument[$view->build_info['summary_level']];[m
+[1;31m-  $vars['row_classes'] = array();[m
+ [m
+   $url_options = array();[m
+ [m
+[1;35m@@ -372,8 +371,8 @@[m [mfunction template_preprocess_views_view_summary(&$vars) {[m
+   $argument->process_summary_arguments($row_args);[m
+ [m
+   foreach ($vars['rows'] as $id => $row) {[m
+[1;31m-[m
+[1;31m-    $vars['rows'][$id]->link = $argument->summary_name($row);[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['attributes'] = new Attribute(array('class' => array()));[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['link'] = $argument->summary_name($row);[m
+     $args = $view->args;[m
+     $args[$argument->position] = $row_args[$id];[m
+ [m
+[1;35m@@ -381,14 +380,12 @@[m [mfunction template_preprocess_views_view_summary(&$vars) {[m
+     if (!empty($argument->options['summary_options']['base_path'])) {[m
+       $base_path = $argument->options['summary_options']['base_path'];[m
+     }[m
+[1;31m-    $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);[m
+[1;31m-    $vars['rows'][$id]->count = intval($row->{$argument->count_alias});[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['url'] = url($view->getUrl($args, $base_path), $url_options);[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['count'] = intval($row->{$argument->count_alias});[m
+ [m
+[1;31m-    $vars['row_classes'][$id] = array();[m
+[1;31m-    if (isset($active_urls[$vars['rows'][$id]->url])) {[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = 'active';[m
+[1;32m+[m[1;32m    if (isset($active_urls[$vars['rows'][$id]['url']])) {[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'active';[m
+     }[m
+[1;31m-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);[m
+   }[m
+ }[m
+ [m
+[1;35m@@ -397,9 +394,8 @@[m [mfunction template_preprocess_views_view_summary(&$vars) {[m
+  * unformatted.[m
+  */[m
+ function template_preprocess_views_view_summary_unformatted(&$vars) {[m
+[1;31m-  $view     = $vars['view'];[m
+[1;32m+[m[1;32m  $view = $vars['view'];[m
+   $argument = $view->argument[$view->build_info['summary_level']];[m
+[1;31m-  $vars['row_classes'] = array();[m
+ [m
+   $url_options = array();[m
+ [m
+[1;35m@@ -422,11 +418,12 @@[m [mfunction template_preprocess_views_view_summary_unformatted(&$vars) {[m
+   $argument->process_summary_arguments($row_args);[m
+ [m
+   foreach ($vars['rows'] as $id => $row) {[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['attributes'] = new Attribute(array('class' => array()));[m
+     // only false on first time:[m
+     if ($count++) {[m
+[1;31m-      $vars['rows'][$id]->separator = filter_xss_admin($vars['options']['separator']);[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['separator'] = filter_xss_admin($vars['options']->separator);[m
+     }[m
+[1;31m-    $vars['rows'][$id]->link = $argument->summary_name($row);[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['link'] = $argument->summary_name($row);[m
+     $args = $view->args;[m
+     $args[$argument->position] = $row_args[$id];[m
+ [m
+[1;35m@@ -434,13 +431,11 @@[m [mfunction template_preprocess_views_view_summary_unformatted(&$vars) {[m
+     if (!empty($argument->options['summary_options']['base_path'])) {[m
+       $base_path = $argument->options['summary_options']['base_path'];[m
+     }[m
+[1;31m-    $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);[m
+[1;31m-    $vars['rows'][$id]->count = intval($row->{$argument->count_alias});[m
+[1;31m-    $vars['row_classes'][$id] = array();[m
+[1;31m-    if (isset($active_urls[$vars['rows'][$id]->url])) {[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = 'active';[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['url'] = url($view->getUrl($args, $base_path), $url_options);[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['count'] = intval($row->{$argument->count_alias});[m
+[1;32m+[m[1;32m    if (isset($active_urls[$vars['rows'][$id]['url']])) {[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'active';[m
+     }[m
+[1;31m-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);[m
+   }[m
+ }[m
+ [m
+[1;35m@@ -448,7 +443,7 @@[m [mfunction template_preprocess_views_view_summary_unformatted(&$vars) {[m
+  * Display a view as a table style.[m
+  */[m
+ function template_preprocess_views_view_table(&$vars) {[m
+[1;31m-  $view     = $vars['view'];[m
+[1;32m+[m[1;32m  $view = $vars['view'];[m
+ [m
+   // We need the raw data for this grouping, which is passed in as $vars['rows'].[m
+   // However, the template also needs to use for the rendered fields.  We[m
+[1;35m@@ -457,7 +452,6 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+   // Store rows so that they may be used by further preprocess functions.[m
+   $result   = $vars['result'] = $vars['rows'];[m
+   $vars['rows'] = array();[m
+[1;31m-  $vars['field_classes'] = array();[m
+   $vars['header'] = array();[m
+ [m
+   $options  = $view->style_plugin->options;[m
+[1;35m@@ -480,6 +474,8 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+     $query += $view->exposed_raw_input;[m
+   }[m
+ [m
+[1;32m+[m[1;32m  // A boolean to store whether the table's header has any labels.[m
+[1;32m+[m[1;32m  $has_header_labels = FALSE;[m
+   foreach ($columns as $field => $column) {[m
+     // Create a second variable so we can easily find what fields we have and what the[m
+     // CSS classes should be.[m
+[1;35m@@ -492,7 +488,7 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+     if ($field == $column && empty($fields[$field]->options['exclude'])) {[m
+       $label = check_plain(!empty($fields[$field]) ? $fields[$field]->label() : '');[m
+       if (empty($options['info'][$field]['sortable']) || !$fields[$field]->click_sortable()) {[m
+[1;31m-        $vars['header'][$field] = $label;[m
+[1;32m+[m[1;32m        $vars['header'][$field]['content'] = $label;[m
+       }[m
+       else {[m
+         $initial = !empty($options['info'][$field]['default_sort_order']) ? $options['info'][$field]['default_sort_order'] : 'asc';[m
+[1;35m@@ -513,38 +509,41 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+           'attributes' => array('title' => $title),[m
+           'query' => $query,[m
+         );[m
+[1;31m-        $vars['header'][$field] = l($label, current_path(), $link_options);[m
+[1;32m+[m[1;32m        $vars['header'][$field]['content'] = l($label, current_path(), $link_options);[m
+       }[m
+ [m
+       // Set up the header label class.[m
+[1;31m-      $vars['header_classes'][$field] = array();[m
+[1;32m+[m[1;32m      $vars['header'][$field]['attributes'] = new Attribute(array('class' => array()));[m
+       if ($fields[$field]->options['element_default_classes']) {[m
+[1;31m-        $vars['header_classes'][$field]['class'][] = 'views-field';[m
+[1;31m-        $vars['header_classes'][$field]['class'][] = 'views-field-' . $vars['fields'][$field];[m
+[1;32m+[m[1;32m        $vars['header'][$field]['attributes']['class'][] = 'views-field';[m
+[1;32m+[m[1;32m        $vars['header'][$field]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];[m
+       }[m
+[1;31m-      $vars['header_classes'][$field] = new Attribute($vars['header_classes'][$field]);[m
+       $class = $fields[$field]->element_label_classes(0);[m
+       if ($class) {[m
+[1;31m-        $vars['header_classes'][$field]['class'][] = $class;[m
+[1;32m+[m[1;32m        $vars['header'][$field]['attributes']['class'][] = $class;[m
+       }[m
+       // Add responsive header classes.[m
+       if (!empty($options['info'][$field]['responsive'])) {[m
+[1;31m-        $vars['header_classes'][$field]['class'][] = $options['info'][$field]['responsive'];[m
+[1;32m+[m[1;32m        $vars['header'][$field]['attributes']['class'][] = $options['info'][$field]['responsive'];[m
+         $responsive = TRUE;[m
+       }[m
+       // Add a CSS align class to each field if one was set[m
+       if (!empty($options['info'][$field]['align'])) {[m
+[1;31m-        $vars['header_classes'][$field]['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);[m
+[1;32m+[m[1;32m        $vars['header'][$field]['attributes']['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);[m
+       }[m
+ [m
+       // Add a header label wrapper if one was selected.[m
+[1;31m-      if ($vars['header'][$field]) {[m
+[1;32m+[m[1;32m      if ($vars['header'][$field]['content']) {[m
+         $element_label_type = $fields[$field]->element_label_type(TRUE, TRUE);[m
+         if ($element_label_type) {[m
+[1;31m-          $vars['header'][$field] = '<' . $element_label_type . '>' . $vars['header'][$field] . '</' . $element_label_type . '>';[m
+[1;32m+[m[1;32m          $vars['header'][$field]['content'] = '<' . $element_label_type . '>' . $vars['header'][$field]['content'] . '</' . $element_label_type . '>';[m
+         }[m
+       }[m
+ [m
+[1;32m+[m[1;32m      // Check if header label is not empty.[m
+[1;32m+[m[1;32m      if (!empty($vars['header'][$field]['content'])) {[m
+[1;32m+[m[1;32m        $has_header_labels = TRUE;[m
+[1;32m+[m[1;32m      }[m
+     }[m
+ [m
+     // Add a CSS align class to each field if one was set[m
+[1;35m@@ -553,21 +552,23 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+     }[m
+ [m
+     // Render each field into its appropriate column.[m
+[1;31m-    foreach ($result as $num => $row) {[m
+[1;32m+[m[1;32m    foreach ($result as $num => $content) {[m
+[1;32m+[m[1;32m      $vars['rows'][$num]['fields'][$column]['content'] = $content;[m
+[1;32m+[m[1;32m      $vars['rows'][$num]['fields'][$column]['attributes'] = new Attribute(array('class' => array()));[m
+[1;32m+[m
+       // Add field classes[m
+[1;31m-      $vars['field_classes'][$field][$num] = array();[m
+       if ($fields[$field]->options['element_default_classes']) {[m
+[1;31m-        $vars['field_classes'][$field][$num]['class'][] = 'views-field';[m
+[1;31m-        $vars['field_classes'][$field][$num]['class'][] = 'views-field-' . $vars['fields'][$field];[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = 'views-field';[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];[m
+       }[m
+[1;31m-      $vars['field_classes'][$field][$num] = new Attribute($vars['field_classes'][$field][$num]);[m
+ [m
+       if ($classes = $fields[$field]->element_classes($num)) {[m
+[1;31m-        $vars['field_classes'][$field][$num]['class'][] = $classes;[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = $classes;[m
+       }[m
+[1;32m+[m
+       // Add responsive header classes.[m
+       if (!empty($options['info'][$field]['responsive'])) {[m
+[1;31m-        $vars['field_classes'][$field][$num]['class'][] = $options['info'][$field]['responsive'];[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['fields'][$column]['attributes']['class'][] = $options['info'][$field]['responsive'];[m
+       }[m
+ [m
+       if (!empty($fields[$field]) && empty($fields[$field]->options['exclude'])) {[m
+[1;35m@@ -578,21 +579,21 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+         }[m
+ [m
+         // Don't bother with separators and stuff if the field does not show up.[m
+[1;31m-        if (empty($field_output) && !empty($vars['rows'][$num][$column])) {[m
+[1;32m+[m[1;32m        if (empty($field_output) && !empty($vars['rows'][$num]['fields'][$column]['content'])) {[m
+           continue;[m
+         }[m
+ [m
+         // Place the field into the column, along with an optional separator.[m
+[1;31m-        if (!empty($vars['rows'][$num][$column])) {[m
+[1;32m+[m[1;32m        if (!empty($variables['rows'][$num][$column]['content'])) {[m
+           if (!empty($options['info'][$column]['separator'])) {[m
+[1;31m-            $vars['rows'][$num][$column] .= filter_xss_admin($options['info'][$column]['separator']);[m
+[1;32m+[m[1;32m            $vars['rows'][$num]['fields'][$column]['content'] .= filter_xss_admin($options['info'][$column]['separator']);[m
+           }[m
+         }[m
+         else {[m
+[1;31m-          $vars['rows'][$num][$column] = '';[m
+[1;32m+[m[1;32m          $vars['rows'][$num]['fields'][$column]['content'] = '';[m
+         }[m
+ [m
+[1;31m-        $vars['rows'][$num][$column] .= $field_output;[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['fields'][$column]['content'] .= $field_output;[m
+       }[m
+     }[m
+ [m
+[1;35m@@ -612,33 +613,32 @@[m [mfunction template_preprocess_views_view_table(&$vars) {[m
+   }[m
+ [m
+   // Hide table header if all labels are empty.[m
+[1;31m-  if (!array_filter($vars['header'])) {[m
+[1;32m+[m[1;32m  if (!$has_header_labels) {[m
+     $vars['header'] = array();[m
+   }[m
+ [m
+   $count = 0;[m
+   foreach ($vars['rows'] as $num => $row) {[m
+[1;31m-    $vars['row_classes'][$num] = array();[m
+[1;32m+[m[1;32m    $vars['rows'][$num]['attributes'] = new Attribute(array('class' => array()));[m
+     if ($row_class_special) {[m
+[1;31m-      $vars['row_classes'][$num]['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';[m
+[1;32m+[m[1;32m      $vars['rows'][$num]['attributes']['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';[m
+       if ($num === 0) {[m
+[1;31m-        $vars['row_classes'][$num]['class'][] = 'views-row-first';[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['attributes']['class'][] = 'views-row-first';[m
+       }[m
+       elseif ($num === (count($vars['rows']) - 1)) {[m
+[1;31m-        $vars['row_classes'][$num]['class'][] = 'views-row-last';[m
+[1;32m+[m[1;32m        $vars['rows'][$num]['attributes']['class'][] = 'views-row-last';[m
+       }[m
+     }[m
+     if ($row_class = $handler->get_row_class($num)) {[m
+[1;31m-      $vars['row_classes'][$num]['class'][] = $row_class;[m
+[1;32m+[m[1;32m      $vars['rows'][$num]['attributes']['class'][] = $row_class;[m
+     }[m
+[1;31m-    $vars['row_classes'][$num] = new Attribute($vars['row_classes'][$num]);[m
+   }[m
+ [m
+   $vars['attributes']['class'][] = 'views-table';[m
+   if (empty($vars['rows']) && !empty($options['empty_table'])) {[m
+[1;31m-    $vars['rows'][0][0] = $view->display_handler->renderArea('empty');[m
+[1;31m-    // Calculate the amounts of rows with output.[m
+[1;31m-    $vars['field_classes'][0][0] = new Attribute(array([m
+[1;32m+[m[1;32m    $vars['rows'][0]['fields'][0]['content'] = $view->display_handler->renderArea('empty');[m
+[1;32m+[m[1;32m     // Calculate the amounts of rows with output.[m
+[1;32m+[m[1;32m    $vars['rows'][0]['fields'][0]['attributes'] = new Attribute(array([m
+       'colspan' => count($vars['header']),[m
+       'class' => 'views-empty',[m
+     ));[m
+[1;35m@@ -739,37 +739,38 @@[m [mfunction template_preprocess_views_view_grid(&$vars) {[m
+ [m
+   // Apply the row classes[m
+   foreach ($rows as $row_number => $row) {[m
+[1;31m-    $row_classes = array();[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['attributes'] = new attribute(array('class' => array()));[m
+[1;32m+[m
+     if ($default_row_class) {[m
+[1;31m-      $row_classes['class'][] = 'row-' . ($row_number + 1);[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'row-' . ($row_number + 1);[m
+     }[m
+     if ($row_class_special) {[m
+       if ($row_number == 0) {[m
+[1;31m-        $row_classes['class'][] = 'row-first';[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['attributes']['class'][] = 'row-first';[m
+       }[m
+       if (count($rows) == ($row_number + 1)) {[m
+[1;31m-        $row_classes['class'][] = 'row-last';[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['attributes']['class'][] = 'row-last';[m
+       }[m
+     }[m
+[1;31m-    $row_classes = new Attribute($row_classes);[m
+ [m
+[1;31m-    foreach ($rows[$row_number] as $column_number => $item) {[m
+[1;31m-      $vars['column_classes'][$row_number][$column_number] = array();[m
+[1;32m+[m[1;32m    foreach ($row as $column_number => $item) {[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['columns'][$column_number]['content'] = $item;[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['columns'][$column_number]['attributes'] = new attribute(array('class' => array()));[m
+[1;32m+[m
+       if ($default_row_class) {[m
+[1;31m-        $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-' . ($column_number + 1);[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-' . ($column_number + 1);[m
+       }[m
+       if ($row_class_special) {[m
+         if ($column_number == 0) {[m
+[1;31m-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-first';[m
+[1;32m+[m[1;32m          $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-first';[m
+         }[m
+         elseif (count($rows[$row_number]) == ($column_number + 1)) {[m
+[1;31m-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-last';[m
+[1;32m+[m[1;32m          $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = 'col-last';[m
+         }[m
+       }[m
+       if (isset($row_indexes[$row_number][$column_number]) && $column_class = $view->style_plugin->get_row_class($row_indexes[$row_number][$column_number])) {[m
+[1;31m-        $vars['column_classes'][$row_number][$column_number]['class'][] = $column_class;[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['columns'][$column_number]['attributes']['class'][] = $column_class;[m
+       }[m
+[1;31m-      $vars['column_classes'][$row_number][$column_number] = new Attribute($vars['column_classes'][$row_number][$column_number]);[m
+     }[m
+   }[m
+   $vars['rows'] = $rows;[m
+[1;35m@@ -796,34 +797,34 @@[m [mfunction template_preprocess_views_view_unformatted(&$vars) {[m
+   $style = $view->style_plugin;[m
+   $options = $style->options;[m
+ [m
+[1;31m-  $vars['row_classes'] = array();[m
+[1;31m-  $vars['classes'] = array();[m
+   $default_row_class = isset($options['default_row_class']) ? $options['default_row_class'] : FALSE;[m
+   $row_class_special = isset($options['row_class_special']) ? $options['row_class_special'] : FALSE;[m
+   // Set up striping values.[m
+   $count = 0;[m
+   $max = count($rows);[m
+   foreach ($rows as $id => $row) {[m
+[1;31m-    $vars['row_classes'][$id] = array();[m
+[1;32m+[m[1;32m    $vars['rows'][$id] = array();[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['content'] = $row;[m
+[1;32m+[m[1;32m    $vars['rows'][$id]['attributes'] = new attribute(array('class' => array()));[m
+[1;32m+[m
+     $count++;[m
+     if ($default_row_class) {[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = 'views-row';[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = 'views-row-' . $count;[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'views-row';[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . $count;[m
+     }[m
+     if ($row_class_special) {[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');[m
+       if ($count == 1) {[m
+[1;31m-        $vars['row_classes'][$id]['class'][] = 'views-row-first';[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['attributes']['class'][] = 'views-row-first';[m
+       }[m
+       if ($count == $max) {[m
+[1;31m-        $vars['row_classes'][$id]['class'][] = 'views-row-last';[m
+[1;32m+[m[1;32m        $vars['rows'][$id]['attributes']['class'][] = 'views-row-last';[m
+       }[m
+     }[m
+ [m
+     if ($row_class = $view->style_plugin->get_row_class($id)) {[m
+[1;31m-      $vars['row_classes'][$id]['class'][] = $row_class;[m
+[1;32m+[m[1;32m      $vars['rows'][$id]['attributes']['class'][] = $row_class;[m
+     }[m
+[1;31m-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);[m
+   }[m
+ }[m
+ [m
