Index: geshifilter.css =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/geshifilter/geshifilter.css,v retrieving revision 1.10 diff -u -b -u -p -r1.10 geshifilter.css --- geshifilter.css 17 Aug 2009 21:04:31 -0000 1.10 +++ geshifilter.css 14 Feb 2010 23:34:11 -0000 @@ -56,3 +56,14 @@ div.geshifilter table, div.geshifilter t padding: 0; border-style: none; } + +/* Styling for GeSHi filter code blocks tools (partial collapsing toggle) */ +div.geshifilter-tools { + margin: -0.5em 0.5em 0.5em 0.5em; + background-color: #ccc; + padding: 0.5ex 0.5em; +} + +div.geshifilter-collapsed { + overflow: hidden; +} Index: geshifilter.js =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/geshifilter/geshifilter.js,v retrieving revision 1.1 diff -u -b -u -p -r1.1 geshifilter.js --- geshifilter.js 14 Feb 2010 23:31:09 -0000 1.1 +++ geshifilter.js 14 Feb 2010 23:34:11 -0000 @@ -1 +1,46 @@ // $Id: geshifilter.js,v 1.1 2010/02/14 23:31:09 soxofaan Exp $ + +// Define a Drupal behavior for with jQuery magic for +// partial collapsing/showing GeSHi filter code blocks. +Drupal.behaviors.geshiFilterCodeCollapsing = function (context) { + // The height to collapse to. + var geshifilter_collapse_height = 100; + var geshifilter_collapse_height_threshold = 150; + + // Add the expand/collapse toggle to geshifilter code blocks. + $('div.geshifilter.collapsible').each(function() { + // Get code container and its height. + var code_container = $(this); + var code_container_original_height = code_container.height(); + + // Only do the collapsing where it makes sense. + if (code_container_original_height > geshifilter_collapse_height_threshold) { + // Add more/less link. + $(this).after('
' + Drupal.t('Show all code') + '
'); + // Store the original heights of the geshifilter divs. + code_container.attr('original_height', code_container_original_height); + // Collapse by default. + code_container.addClass('geshifilter-collapsed').css("height", geshifilter_collapse_height); + } + }); + + // Add handler to read more/collapse link. + $("a.geshifilter-tools-collapsetoggle").click(function() { + // Get code container. + var code_container = $(this).parent().prev(); + + if (code_container.hasClass('geshifilter-collapsed')) { + // Show more (use original height). + var original_height = code_container.attr('original_height') + 'px'; + code_container.removeClass('geshifilter-collapsed').animate({height: original_height}); + $(this).text(Drupal.t('Show less code')); + } + else { + // Collapse. + code_container.addClass('geshifilter-collapsed').animate({height: geshifilter_collapse_height}); + $(this).text(Drupal.t('Show all code')); + } + // Return false so that the link is no followed. + return false; + }); +} Index: geshifilter.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/geshifilter/geshifilter.module,v retrieving revision 1.48 diff -u -b -u -p -r1.48 geshifilter.module --- geshifilter.module 12 Jul 2009 15:00:28 -0000 1.48 +++ geshifilter.module 14 Feb 2010 23:34:11 -0000 @@ -21,6 +21,7 @@ define('GESHIFILTER_ATTRIBUTES_LANGUAGE' define('GESHIFILTER_ATTRIBUTE_LINE_NUMBERING', 'linenumbers'); define('GESHIFILTER_ATTRIBUTE_LINE_NUMBERING_START', 'start'); define('GESHIFILTER_ATTRIBUTE_FANCY_N', 'fancy'); +define('GESHIFILTER_ATTRIBUTE_COLLAPSIBLE', 'collapsible'); define('GESHIFILTER_BRACKETS_ANGLE', 1); define('GESHIFILTER_BRACKETS_SQUARE', 2); @@ -154,6 +155,7 @@ function geshifilter_init() { drupal_add_css(file_directory_path() .'/geshifilter-languages.css'); } drupal_add_css(drupal_get_path('module', 'geshifilter') .'/geshifilter.css'); + drupal_add_js(drupal_get_path('module', 'geshifilter') .'/geshifilter.js'); } /** Index: geshifilter.pages.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/geshifilter/geshifilter.pages.inc,v retrieving revision 1.14 diff -u -b -u -p -r1.14 geshifilter.pages.inc --- geshifilter.pages.inc 1 Feb 2010 00:31:45 -0000 1.14 +++ geshifilter.pages.inc 14 Feb 2010 23:34:12 -0000 @@ -25,6 +25,7 @@ function _geshifilter_parse_attributes($ $lang = NULL; $line_numbering = NULL; $linenumbers_start = NULL; + $collapsible = FALSE; // Get the possible tags and languages. list($generic_code_tags, $language_tags, $tag_to_lang) = _geshifilter_get_tags($format); @@ -32,7 +33,12 @@ function _geshifilter_parse_attributes($ $language_attributes = _geshifilter_whitespace_explode(GESHIFILTER_ATTRIBUTES_LANGUAGE); $attributes_preg_string = implode('|', array_merge( $language_attributes, - array(GESHIFILTER_ATTRIBUTE_LINE_NUMBERING, GESHIFILTER_ATTRIBUTE_LINE_NUMBERING_START, GESHIFILTER_ATTRIBUTE_FANCY_N) + array( + GESHIFILTER_ATTRIBUTE_LINE_NUMBERING, + GESHIFILTER_ATTRIBUTE_LINE_NUMBERING_START, + GESHIFILTER_ATTRIBUTE_FANCY_N, + GESHIFILTER_ATTRIBUTE_COLLAPSIBLE, + ) )); $enabled_languages = _geshifilter_get_enabled_languages(); @@ -88,9 +94,22 @@ function _geshifilter_parse_attributes($ } $linenumbers_start = (int)($att_value); } + elseif ($att_name == GESHIFILTER_ATTRIBUTE_COLLAPSIBLE) { + if (strtolower($att_value) == 'true') { + $collapsible = TRUE; + } + else { + $collapsible = FALSE; + } + } } // Return parsed results. - return array('language' => $lang, 'line_numbering' => $line_numbering, 'linenumbers_start' => $linenumbers_start); + return array( + 'language' => $lang, + 'line_numbering' => $line_numbering, + 'linenumbers_start' => $linenumbers_start, + 'collapsible' => $collapsible, + ); } /** @@ -267,6 +286,7 @@ function _geshifilter_replace_callback($ if (isset($settings['linenumbers_start'])) { $linenumbers_start = $settings['linenumbers_start']; } + $collapsible = $settings['collapsible']; if ($lang == GESHIFILTER_DEFAULT_DONOTHING) { // Do nothing, and return the original. @@ -278,7 +298,7 @@ function _geshifilter_replace_callback($ } $inline_mode = (strpos($source_code, "\n") === FALSE); // process and return - return geshifilter_process($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode); + return geshifilter_process($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $collapsible); } /** @@ -297,21 +317,21 @@ function _geshifilter_override_geshi_def /** * General geshifilter processing function */ -function geshifilter_process($source_code, $lang, $line_numbering=0, $linenumbers_start=1, $inline_mode=FALSE) { +function geshifilter_process($source_code, $lang, $line_numbering=0, $linenumbers_start=1, $inline_mode=FALSE, $collapsible=FALSE) { // process if ($lang == 'php' && variable_get('geshifilter_use_highlight_string_for_php', FALSE)) { return geshifilter_highlight_string_process($source_code, $inline_mode); } else { // process with GeSHi - return geshifilter_geshi_process($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode); + return geshifilter_geshi_process($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $collapsible); } } /** * geshifilter wrapper for GeSHi processing. */ -function geshifilter_geshi_process($source_code, $lang, $line_numbering=0, $linenumbers_start=1, $inline_mode=FALSE) { +function geshifilter_geshi_process($source_code, $lang, $line_numbering=0, $linenumbers_start=1, $inline_mode=FALSE, $collapsible=FALSE) { // load GeSHi library (if not already) $geshi_library = _geshifilter_check_geshi_library(); if (!$geshi_library['loaded']) { @@ -361,7 +381,7 @@ function geshifilter_geshi_process($sour $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, $line_numbering); $geshi->start_line_numbers_at($linenumbers_start); } - $source_code = '
'. $geshi->parse_code() .'
'; + $source_code = '
'. $geshi->parse_code() .'
'; } // Store in cache with a minimum expiration time of 1 day.