git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv7 09/11] gitweb: provide a routine to display (sub)sections

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Nov 11, 2010, 12:26 UTC
Message-ID
<1289478378-15604-10-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1289478378-15604-1-git-send-email-giuseppe.bilotta@gmail.com>

The routine puts the given contento into a DIV element, automatically adding a header div. The content can be provided as a standard scalar value (which is used as-is), as a scalar ref (which is HTML-escaped), as a function reference to be executed, or as a file handle to be dumped.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
---
 gitweb/gitweb.perl |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 6e7a663..64da0cc 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -3802,6 +3802,44 @@ sub format_repo_url {
 	return "<tr class=\"metadata_url\"><td>$name</td><td>$url</td></tr>\n";
 }
 
+# Group output by placing it in a DIV element and adding a header.
+# Options for start_div() can be provided by passing a hash reference as the
+# first parameter to the function.
+# Options to git_print_header_div() can be provided by passing an array
+# reference. This must follow the options to start_div if they are present.
+# The content can be a scalar, which is output as-is, a scalar reference, which
+# is output after html escaping, an IO handle passed either as *handle or
+# *handle{IO}, or a function reference. In the latter case all following
+# parameters will be taken as argument to the content function call.
+sub git_print_section {
+	my ($div_args, $header_args, $content);
+	my $arg = shift;
+	if (ref($arg) eq 'HASH') {
+		$div_args = $arg;
+		$arg = shift;
+	}
+	if (ref($arg) eq 'ARRAY') {
+		$header_args = $arg;
+		$arg = shift;
+	}
+	$content = $arg;
+
+	print $cgi->start_div($div_args);
+	git_print_header_div(@$header_args);
+
+	if (ref($content) eq 'CODE') {
+		$content->(@_);
+	} elsif (ref($content) eq 'SCALAR') {
+		print esc_html($$content);
+	} elsif (ref($content) eq 'GLOB' or ref($content) eq 'IO::Handle') {
+		print <$content>;
+	} elsif (!ref($content) && defined($content)) {
+		print $content;
+	}
+
+	print $cgi->end_div;
+}
+
 sub print_local_time {
 	print format_local_time(@_);
 }
-- 
1.7.3.68.g6ec8
Previous: Giuseppe BilottaNext: Giuseppe Bilotta
Message 10 of 16 in “[PATCHv7 00/11] gitweb: remote_heads feature”
  1. Giuseppe BilottaNov 11, 2010
  2. 01/11 gitweb: use fullname as hash_base in heads linkGiuseppe Bilotta, Nov 11, 2010
  3. 02/11 gitweb: introduce remote_heads featureGiuseppe Bilotta, Nov 11, 2010
  4. 03/11 gitweb: git_get_heads_list accepts an optional list of refsGiuseppe Bilotta, Nov 11, 2010
  5. 04/11 gitweb: separate heads and remotes listsGiuseppe Bilotta, Nov 11, 2010
  6. 05/11 gitweb: nagivation menu for tags, heads and remotesGiuseppe Bilotta, Nov 11, 2010
  7. 06/11 gitweb: allow action specialization in page headerGiuseppe Bilotta, Nov 11, 2010
  8. 07/11 gitweb: remotes view for a single remoteGiuseppe Bilotta, Nov 11, 2010
  9. 08/11 gitweb: refactor repository URL printingGiuseppe Bilotta, Nov 11, 2010
  10. 09/11 gitweb: provide a routine to display (sub)sectionsGiuseppe Bilotta, Nov 11, 2010
  11. 10/11 gitweb: group remote heads by remoteGiuseppe Bilotta, Nov 11, 2010
  12. Jakub NarebskiNov 11, 2010
  13. 10/11 gitweb: group remote heads by remoteGiuseppe Bilotta, Nov 12, 2010
  14. 11/11 git instaweb: enable remote_headsGiuseppe Bilotta, Nov 11, 2010
  15. Jakub NarebskiNov 11, 2010
  16. Giuseppe BilottaNov 12, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.