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

Re: [PATCH] gitweb: provide a way to customize html headers

From
LHLénaïc Huard <lenaic@lhuard.fr.eu.org>
Date
Oct 20, 2011, 22:46 UTC
Message-ID
<201110210046.34679.lenaic@lhuard.fr.eu.org>
In-Reply-To
<201110171357.00278.jnareb@gmail.com>

This allows web sites to add some specific html headers to the pages generated by gitweb.

The new variable $site_htmlheader can be set to an html snippet that will be inserted at the end of the <head> section of each page generated by gitweb.

Signed-off-by: Lénaïc Huard <lenaic@lhuard.fr.eu.org>
---
Le lundi 17 octobre 2011, Jakub Narebski a écrit :
Show 20 quoted lines
> On Mon, 17 Oct 2011, Lénaïc Huard wrote:
> > Jakub Narebski <jnareb@gmail.com> writes:
> > > Lénaïc Huard <lenaic@lhuard.fr.eu.org> writes:
> > > > This allows web sites to add some specific html headers to the pages
> > > > generated by gitweb.
> > > 
> > > What do you need this for?
> > 
> > I want to decorate the gitweb pages with the “Google Analytics” tracking
> > code. In order to do so, today, Google is recommending to add a <script>
> > tag just before the closing </head> tag.
> > 
> > https://www.google.com/support/analyticshelp/bin/answer.py?answer=1008080
> > &hl=en
> 
> Hmmm... the modern recommendation from both Google and Yahoo is to put
> script tags at the end of HTML, just before closing </body>, which you
> can do nowadays with $site_footer / GITWEB_SITE_FOOTER.
> 
> But I guess that analytics script needs to be loaded earlier.

In fact, I used to insert the Google Analytics tracking code before </body>, but I recently noticed that Google is now recommending to put the html snippet at the end of the <head> section.

Here is the recommendation from Google: https://code.google.com/apis/analytics/docs/tracking/asyncTracking.html

From what I understood, the goal of putting the script tags just before </body> was to avoid to increase the page load time in case of latency of the remote server serving the js script. The GA tracking code is now loading the js asynchronously. So, it doesn’t block the page load anymore. So, the load can be started asap.

Show 12 quoted lines
> > > > The new variable $site_htmlheader can be set to a filename the
> > > > content of which will be inserted at the end of the <head> section
> > > > of each page generated by gitweb.
> > > 
> > > Hmmm... I wonder if a file with html header fragment (which is quite
> > > specific subset of HTML) is a best solution.
> > 
> > That’s true. The piece of code to be inserted in <head> is maybe small
> > enough so that we don’t need a file. Maybe $site_htmlheader could
> > contain directly the html snippet to be inserted in the pages?
> 
> I think it might be a better solution.

I changed this in the patch attached in this mail. Now the variable should contain directly the html code to be inserted.

Show 12 quoted lines
> > > >  gitweb/INSTALL     |    3 +++
> > > 
> > > Nb. there is patch in flight adding gitweb.conf(5) and gitweb(1)
> > > manpages...
> > 
> > Ok. So, I’ll update them once a decision will be taken concerning this
> > $site_htmlheader.
> 
> You might have to wait a bit till patches containing gitweb.conf(5)
> manpage are merged in, and rebase your patch to add information about
> new config variable not to gitweb/INSTALL, but to
> Documentation/gitweb.conf.txt

I added the documentation to Documentation/gitweb.conf.txt. But, as I noticed that gitweb/INSTALL still exists and still documents the old variables, I left the doc of the new one.

 Documentation/gitweb.conf.txt |    5 +++++
 gitweb/INSTALL                |    2 ++
 gitweb/Makefile               |    2 ++
 gitweb/gitweb.perl            |    7 +++++++
 t/gitweb-lib.sh               |    1 +
 5 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt
index 4ca3e27..5e69c2d 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.txt
@@ -364,6 +364,11 @@ $site_name::
 +
 Can be set using the `GITWEB_SITENAME` at build time.  Unset by default.
 
+$site_htmlheader::
+	HTML snippet to be included in the <head> section of each page.
+	Can be set using `GITWEB_SITE_HTMLHEADER` at build time. No default
+	value.
+
 $site_header::
 	Name of a file with HTML to be included at the top of each page.
 	Relative to the directory containing the 'gitweb.cgi' script.
diff --git a/gitweb/INSTALL b/gitweb/INSTALL
index d134ffe..a6a9f06 100644
--- a/gitweb/INSTALL
+++ b/gitweb/INSTALL
@@ -130,6 +130,8 @@ You can specify the following configuration variables when building GIT:
    Points to an .html file which is included on the gitweb project
    overview page ('projects_list' view), if it exists.  Relative to
    gitweb.cgi script.  [Default: indextext.html]
+ * GITWEB_SITE_HTMLHEADER
+   html snippet to include in the <head> section of each page. [No default]
  * GITWEB_SITE_HEADER
    Filename of html text to include at top of each page.  Relative to
    gitweb.cgi script.  [No default]
diff --git a/gitweb/Makefile b/gitweb/Makefile
index 1c85b5f..ecfb311 100644
--- a/gitweb/Makefile
+++ b/gitweb/Makefile
@@ -34,6 +34,7 @@ GITWEB_CSS = static/gitweb.css
 GITWEB_LOGO = static/git-logo.png
 GITWEB_FAVICON = static/git-favicon.png
 GITWEB_JS = static/gitweb.js
+GITWEB_SITE_HTMLHEADER =
 GITWEB_SITE_HEADER =
 GITWEB_SITE_FOOTER =
 HIGHLIGHT_BIN = highlight
@@ -144,6 +145,7 @@ GITWEB_REPLACE = \
 	-e 's|++GITWEB_LOGO++|$(GITWEB_LOGO)|g' \
 	-e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
 	-e 's|++GITWEB_JS++|$(GITWEB_JS)|g' \
+	-e 's|++GITWEB_SITE_HTMLHEADER++|$(GITWEB_SITE_HTMLHEADER)|g' \
 	-e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
 	-e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
 	-e 's|++HIGHLIGHT_BIN++|$(HIGHLIGHT_BIN)|g'
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 85d64b2..10b118b 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -85,6 +85,8 @@ our $home_link_str = "++GITWEB_HOME_LINK_STR++";
 our $site_name = "++GITWEB_SITENAME++"
                  || ($ENV{'SERVER_NAME'} || "Untitled") . " Git";
 
+# html snippet to include in the <head> section of each page
+our $site_htmlheader = "++GITWEB_SITE_HTMLHEADER++";
 # filename of html text to include at top of each page
 our $site_header = "++GITWEB_SITE_HEADER++";
 # html text to include at home page
@@ -3879,6 +3881,11 @@ EOF
 		print "<base href=\"".esc_url($base_url)."\" />\n";
 	}
 	print_header_links($status);
+
+	if (defined $site_htmlheader) {
+		print to_utf8($site_htmlheader);
+	}
+
 	print "</head>\n" .
 	      "<body>\n";
 
diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh
index 292753f..cfe5d74 100644
--- a/t/gitweb-lib.sh
+++ b/t/gitweb-lib.sh
@@ -16,6 +16,7 @@ our \$projectroot = "$safe_pwd";
 our \$project_maxdepth = 8;
 our \$home_link_str = 'projects';
 our \$site_name = '[localhost]';
+our \$site_htmlheader = '';
 our \$site_header = '';
 our \$site_footer = '';
 our \$home_text = 'indextext.html';
-- 
1.7.7
Previous: Jakub NarebskiNext: Junio C Hamano
Message 3 of 6 in “Re: [PATCH] gitweb: provide a way to customize html headers”
  1. Lénaïc HuardOct 17, 2011
  2. Jakub NarebskiOct 17, 2011
  3. Lénaïc HuardOct 20, 2011
  4. Junio C HamanoOct 21, 2011
  5. Lénaïc HuardOct 21, 2011
  6. Jakub NarebskiOct 21, 2011

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.