? .git
Index: plugins/views_plugin_display.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/plugins/views_plugin_display.inc,v
retrieving revision 1.20.2.24
diff -u -p -r1.20.2.24 views_plugin_display.inc
--- plugins/views_plugin_display.inc	4 Dec 2009 19:05:18 -0000	1.20.2.24
+++ plugins/views_plugin_display.inc	4 Dec 2009 22:53:13 -0000
@@ -206,6 +206,7 @@ class views_plugin_display extends views
       'access' => array('access'),
       'cache' => array('cache'),
       'title' => array('title'),
+      'css_class' => array('css_class'),
       'header' => array('header', 'header_format', 'header_empty'),
       'footer' => array('footer', 'footer_format', 'footer_empty'),
       'empty' => array('empty', 'empty_format'),
@@ -272,6 +273,7 @@ class views_plugin_display extends views
           'access' => TRUE,
           'cache' => TRUE,
           'title' => TRUE,
+          'css_class' => TRUE,
           'header' => TRUE,
           'header_format' => TRUE,
           'header_empty' => TRUE,
@@ -313,6 +315,10 @@ class views_plugin_display extends views
         'default' => '',
         'translatable' => TRUE,
       ),
+      'css_class' => array(
+        'default' => '',
+        'translatable' => FALSE,
+      ),
       'header' => array(
         'default' => '',
         'translatable' => TRUE,
@@ -949,6 +955,18 @@ class views_plugin_display extends views
       );
     }
 
+    $css_class = trim($this->get_option('css_class'));
+    if (!$css_class) {
+      $css_class = t('None');
+    }
+
+    $options['css_class'] = array(
+      'category' => 'style',
+      'title' => t('CSS class'),
+      'value' => $css_class,
+      'desc' => t('Change the CSS classes names that will be added to this display.'),
+    );
+
     $options['analyze-theme'] = array(
       'category' => 'style',
       'title' => t('Theme'),
@@ -994,6 +1012,14 @@ class views_plugin_display extends views
           '#default_value' => $this->get_option('title'),
         );
         break;
+      case 'css_class':
+        $form['#title'] .= t('Add a class name to this view');
+        $form['css_class'] = array(
+          '#type' => 'textfield',
+          '#description' => t('The CSS classes names will be added to the view. This enables you to use specific CSS code for each view. You can define multiples classes separated by spaces.'),
+          '#default_value' => $this->get_option('css_class'),
+        );
+        break;
       case 'use_ajax':
         $form['#title'] .= t('Use AJAX when available to load this view');
         $form['description'] = array(
@@ -1598,6 +1624,12 @@ class views_plugin_display extends views
    */
   function options_validate(&$form, &$form_state) {
     switch ($form_state['section']) {
+      case 'css_class':
+        $css_class = $form_state['values']['css_class'];
+        if (preg_match('/[^a-zA-Z0-9- ]/', $css_class)) {
+          form_error($form['css_class'], t('Css classes must be alphanumeric or dashes only.'));
+        }
+      break;
       case 'style_options':
         $style = TRUE;
       case 'row_options':
@@ -1693,6 +1725,7 @@ class views_plugin_display extends views
         }
         break;
       case 'title':
+      case 'css_class':
       case 'link_display':
         $this->set_option($section, $form_state['values'][$section]);
         break;
Index: theme/theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/theme/theme.inc,v
retrieving revision 1.73.2.16
diff -u -p -r1.73.2.16 theme.inc
--- theme/theme.inc	3 Dec 2009 23:28:53 -0000	1.73.2.16
+++ theme/theme.inc	4 Dec 2009 22:53:14 -0000
@@ -46,6 +46,10 @@ function template_preprocess_views_view(
   $vars['rows']       = !empty($view->result) || !empty($view->style_plugin->definition['even empty']) ? $view->style_plugin->render($view->result) : '';
 
   $vars['css_name']   = views_css_safe($view->name);
+  $css_class = $view->display_handler->get_option('css_class');
+  if (!empty($css_class)) {
+    $vars['css_class']  = preg_replace('/[^a-zA-Z0-9- ]/', '-', $css_class);
+  }
   $vars['name']       = $view->name;
   $vars['display_id'] = $view->current_display;
 
Index: theme/views-view.tpl.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/theme/views-view.tpl.php,v
retrieving revision 1.12.2.1
diff -u -p -r1.12.2.1 views-view.tpl.php
--- theme/views-view.tpl.php	2 Jun 2009 19:30:40 -0000	1.12.2.1
+++ theme/views-view.tpl.php	4 Dec 2009 22:53:15 -0000
@@ -6,6 +6,7 @@
  *
  * Variables available:
  * - $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
@@ -20,7 +21,7 @@
  * @ingroup views_templates
  */
 ?>
-<div class="view view-<?php print $css_name; ?> view-id-<?php print $name; ?> view-display-id-<?php print $display_id; ?> view-dom-id-<?php print $dom_id; ?>">
+<div class="view <?php if($css_class) print $css_class . ' '; ?>view-<?php print $css_name; ?> view-id-<?php print $name; ?> view-display-id-<?php print $display_id; ?> view-dom-id-<?php print $dom_id; ?>">
   <?php if ($admin_links): ?>
     <div class="views-admin-links views-hide">
       <?php print $admin_links; ?>

