377ada15ebf2514739f715bcbff18c72f84ecb33
chmalee
  Fri Sep 1 09:48:17 2023 -0700
Put the database into the web page title on hgc pages, refs #19985

diff --git src/hg/lib/web.c src/hg/lib/web.c
index 6b0c372..bfc4e3b 100644
--- src/hg/lib/web.c
+++ src/hg/lib/web.c
@@ -122,30 +122,31 @@
 /*printf("Content-Type: text/plain\n\n");*/
 
 webHeadAlreadyOutputed = TRUE;
 webInTextMode = TRUE;
 webPushErrHandlers();
 }
 
 static void webStartWrapperDetailedInternal(struct cart *theCart,
 	char *db, char *headerText, char *textOutBuf,
 	boolean withHttpHeader, boolean withLogo, boolean skipSectionHeader,
 	boolean withHtmlHeader)
 /* output a CGI and HTML header with the given title in printf format */
 {
 char uiState[256];
 char *scriptName = cgiScriptName();
+char *textOutBufDb = cloneString(textOutBuf);
 boolean isEncode = FALSE;
 if (theCart)
     {
     char *theGenome = NULL;
     char *genomeEnc = NULL;
 
     getDbAndGenome(theCart, &db, &theGenome, NULL);
     genomeEnc = cgiEncode(theGenome);
 
     safef(uiState, sizeof(uiState), "?%s=%s&%s=%s&%s=%s",
 	     orgCgiName, genomeEnc,
 	     dbCgiName, db,
 	     cartSessionVarName(), cartSessionId(theCart));
     }
 else
@@ -164,55 +165,62 @@
     scriptName = cloneString("");
 /* don't output two headers */
 if(webHeadAlreadyOutputed)
     return;
 
 if (sameString(cgiUsualString("action",""),"encodeReleaseLog") ||
     rStringIn("EncodeDataVersions", scriptName))
         isEncode = TRUE;
 
 /* Preamble. */
 dnaUtilOpen();
 
 if (withHttpHeader)
     puts("Content-type:text/html\n");
 
+// If the database name is not already in the title string, add it now
+if (endsWith(scriptName, "hgc") && db != NULL && !stringIn(db, textOutBufDb))
+    {
+    struct dyString *newTitle = dyStringNew(0);
+    dyStringPrintf(newTitle, "%s %s", db, textOutBufDb);
+    textOutBufDb = dyStringCannibalize(&newTitle);
+    }
 if (withHtmlHeader)
     {
     char *newString, *ptr1, *ptr2;
 
     char *browserVersion;
     if (btIE == cgiClientBrowser(&browserVersion, NULL, NULL) && *browserVersion < '8')
         puts("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">");
     else
         puts("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
              "\"http://www.w3.org/TR/html4/loose.dtd\">");
     // Strict would be nice since it fixes atleast one IE problem (use of :hover CSS pseudoclass)
     puts(
 	"<HTML>" "\n"
 	"<HEAD>" "\n"
 	);
     generateCspMetaHeader(stdout);
     printf("\t%s\n", headerText);
     webPragmasEtc();
 
     printf("\t<TITLE>");
 
     /* we need to take any HTML formatting out of the titlebar string */
-    newString = cloneString(textOutBuf);
+    newString = cloneString(textOutBufDb);
 
-    for(ptr1=newString, ptr2=textOutBuf; *ptr2 ; ptr2++)
+    for(ptr1=newString, ptr2=textOutBufDb; *ptr2 ; ptr2++)
 	{
 	if (*ptr2 == '<')
 	    {
 	    for(; *ptr2 && (*ptr2 != '>'); ptr2++)
 		;
 	    }
 	else
 	    *ptr1++ = *ptr2;
 	}
     *ptr1 = 0;
     htmlTextOut(newString);
     printf("	</TITLE>\n    ");
     webIncludeResourceFile("HGStyle.css");
     if (extraStyle != NULL)
         puts(extraStyle);
@@ -241,31 +249,31 @@
 	     "<IMG SRC=\"../images/ENCODE_scaleup_logo.png\" height=50 ALT=\"ENCODE Project at NHGRI\">"
 	     "</A>");
 	puts("<IMG SRC=\"../images/encodeDcc.jpg\" ALT=\"ENCODE Project at UCSC\">");
 	}
     else
 	{
 	puts("<IMG SRC=\"../images/title.jpg\">");
 	}
     puts("</TH></TR>" "\n"
          "" "\n" );
     }
 
 if(!skipSectionHeader)
 /* this HTML must be in calling code if skipSectionHeader is TRUE */
     {
-    webFirstSection(textOutBuf);
+    webFirstSection(textOutBufDb);
     };
 webPushErrHandlers();
 /* set the flag */
 webHeadAlreadyOutputed = TRUE;
 errAbortSetDoContentType(FALSE);
 }	/*	static void webStartWrapperDetailedInternal()	*/
 
 void webStartWrapperDetailedArgs(struct cart *theCart, char *db,
 	char *headerText, char *format, va_list args, boolean withHttpHeader,
 	boolean withLogo, boolean skipSectionHeader, boolean withHtmlHeader)
 /* output a CGI and HTML header with the given title in printf format */
 {
 char textOutBuf[1024];
 va_list argscp;