Index: apachesolr.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/apachesolr/apachesolr.module,v
retrieving revision 1.1.2.12.2.85
diff -u -r1.1.2.12.2.85 apachesolr.module
--- apachesolr.module	11 Jan 2009 02:53:02 -0000	1.1.2.12.2.85
+++ apachesolr.module	14 Jan 2009 11:32:49 -0000
@@ -699,8 +699,6 @@
 
         $query = apachesolr_current_query();
 
-        // Get information needed by the rest of the blocks about limits.
-        $facet_display_limits = variable_get('apachesolr_facet_query_limits', array());
         switch ($delta) {
           case 'sort':
             $sorts = array(
@@ -796,9 +794,13 @@
     }
     if (count($items) > 0) {
       ksort($items);
-      $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : variable_get('apachesolr_facet_query_limit_default', 10);
+      // Get information needed by the rest of the blocks about limits.
+      $facet_display_limits = variable_get('apachesolr_facet_query_limits', array());
+      $facet_display_initial_limits = variable_get('apachesolr_facet_query_initial_limits', array());
+      $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : variable_get('apachesolr_facet_query_limit_default', 20);
+      $facet_display_initial_limit = isset($facet_display_initial_limits[$delta]) ? $facet_display_initial_limits[$delta] : variable_get('apachesolr_facet_query_initial_limit_default', 10);
       $items = array_slice($items, 0, ($facet_display_limit == -1 ? NULL : $facet_display_limit));
-      $output = theme('apachesolr_facet_list', $items);
+      $output = theme('apachesolr_facet_list', $items, $facet_display_initial_limit);
       return array('subject' => t('@filter_by', array('@filter_by' => $filter_by)), 'content' => $output);
     }
   }
@@ -834,9 +836,9 @@
  * facet limits on their blocks.
  */
 function apachesolr_facetcount_form($delta) {
+  $facet_query_initial_limits = variable_get('apachesolr_facet_query_initial_limits', array());
   $facet_query_limits = variable_get('apachesolr_facet_query_limits', array());
-  $facet_query_limit_default = variable_get('apachesolr_facet_query_limit_default', 10);
-
+  
   // If the block is not 'sort' (and therefore is a facet block),
   // display facet limit option.
   $form['apachesolr_facet_query_limit'] = array(
@@ -844,7 +846,14 @@
     '#title' => t('Facet Query Limit'),
     '#required' => TRUE,
     '#description' => t('The number of facet links to show in this block. Set to -1 for unlimited. Default is 10.'),
-    '#default_value' => isset($facet_query_limits[$delta]) ? $facet_query_limits[$delta] : 10,
+    '#default_value' => isset($facet_query_limits[$delta]) ? $facet_query_limits[$delta] : variable_get('apachesolr_facet_query_limit_default', 20),
+  );
+  $form['apachesolr_facet_query_initial_limit'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Facet Query Initial Limit'),
+    '#required' => TRUE,
+    '#description' => t('The number of facet links to show in this block. Set to -1 for unlimited. Default is 10.'),
+    '#default_value' => isset($facet_query_initial_limits[$delta]) ? $facet_query_initial_limits[$delta] : variable_get('apachesolr_facet_query_initial_limit_default', 10),
   );
   return $form;
 }
@@ -858,6 +867,9 @@
   $facet_query_limits = variable_get('apachesolr_facet_query_limits', array());
   $facet_query_limits[$delta] = intval($edit['apachesolr_facet_query_limit']);
   variable_set('apachesolr_facet_query_limits', $facet_query_limits);
+  $facet_query_initial_limits = variable_get('apachesolr_facet_query_initial_limits', array());
+  $facet_query_initial_limits[$delta] = intval($edit['apachesolr_facet_query_initial_limit']);
+  variable_set('apachesolr_facet_query_initial_limits', $facet_query_initial_limits);
 }
 
 /**
@@ -1132,8 +1144,25 @@
   return $icon . apachesolr_l($text, $path, array('attributes' => $attributes, 'query' => $querystring));
 }
 
-function theme_apachesolr_facet_list($items) {
-  return theme('item_list', $items);
+function theme_apachesolr_facet_list($items, $display_limit = 0) {
+  // If there is no limit or facet count less than the limit do standard way.
+  if ($display_limit == 0 || (count($items) <= $display_limit)) {
+    return theme('item_list', $items);
+  }
+
+  // show/hide extra facets
+  drupal_add_js(drupal_get_path('module', 'apachesolr') . '/apachesolr.js');
+  
+  $output = '';
+  // split items array into displayed and hidden
+  if (count($items) > $display_limit) {
+    $hidden_items = array_splice($items, $display_limit);
+    foreach ($hidden_items as $hidden_item) {
+      $items[] = array('data' => $hidden_item, 'class' => 'apachesolr-hidden-facet');
+    }
+    $output .= theme('item_list', $items);
+  }
+  return $output;
 }
 
 function theme_apachesolr_sort_list($items) {
Index: apachesolr_search.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/apachesolr/apachesolr_search.module,v
retrieving revision 1.1.2.6.2.57
diff -u -r1.1.2.6.2.57 apachesolr_search.module
--- apachesolr_search.module	12 Jan 2009 18:57:39 -0000	1.1.2.6.2.57
+++ apachesolr_search.module	14 Jan 2009 11:11:02 -0000
@@ -297,6 +297,8 @@
 
         // Get information needed by the rest of the blocks about limits.
         $facet_display_limits = variable_get('apachesolr_facet_query_limits', array());
+        $facet_display_initial_limits = variable_get('apachesolr_facet_query_initial_limits', array());
+        
 
         // Handle taxonomy vocabulary facets
         if ((strpos($delta, 'imfield_vid_') === 0) && module_exists('taxonomy')) {
@@ -336,10 +338,11 @@
           $vocab = taxonomy_vocabulary_load($vid);
           if (is_numeric($vid) && is_array($terms) && isset($terms[$vid]) && is_array($terms[$vid])) {
             ksort($terms[$vid]);
-            $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : variable_get('apachesolr_facet_query_limit_default', 10);
+            $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : variable_get('apachesolr_facet_query_limit_default', 20);
+            $facet_display_initial_limit = isset($facet_display_initial_limits[$delta]) ? $facet_display_initial_limits[$delta] : variable_get('apachesolr_facet_query_initial_limit_default', 10);
             $terms[$vid] = array_slice($terms[$vid], 0, ($facet_display_limit == -1 ? NULL : $facet_display_limit));
             return array('subject' => t('Filter by @name', array('@name' => $vocab->name)),
-                         'content' => theme('apachesolr_facet_list', $terms[$vid]));
+                         'content' => theme('apachesolr_facet_list', $terms[$vid], $facet_display_initial_limit));
           }
           else {
             return;
@@ -411,9 +414,10 @@
                   }
                   if (!empty($facets)) {
                     ksort($facets);
-                    $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : 10;
+                    $facet_display_limit = isset($facet_display_limits[$delta]) ? $facet_display_limits[$delta] : 20;
+                    $facet_display_initial_limit = isset($facet_display_initial_limits[$delta]) ? $facet_display_initial_limits[$delta] : variable_get('apachesolr_facet_query_initial_limit_default', 10);
                     $facets = array_slice($facets, 0, ($facet_display_limit == -1 ? NULL : $facet_display_limit));
-                    $output = theme('apachesolr_facet_list', $facets);
+                    $output = theme('apachesolr_facet_list', $facets, $facet_display_initial_limit);
                     return array('subject' => t('Filter by @field', array('@field' => $field['label'])),
                                  'content' => $output);
                   }
--- apachesolr.js
+++ apachesolr.js
@@ -0,0 +1,18 @@
+$(document).ready(function() {
+
+  $('.apachesolr-hidden-facet').hide();
+  
+  $('<a href="#"></a>').text(Drupal.t('more')).click(function() {
+
+    if ($(this).prev().find('.apachesolr-hidden-facet:visible').length == 0) {
+      $(this).prev().find('.apachesolr-hidden-facet').show();
+      $(this).text(Drupal.t('less'));
+    }
+    else {
+      $(this).prev().find('.apachesolr-hidden-facet').hide();
+      $(this).text(Drupal.t('more'));
+    }
+    return false;
+  }).appendTo($('.block-apachesolr_search:has(.apachesolr-hidden-facet), .block-apachesolr:has(.apachesolr-hidden-facet)'));
+
+});


