55a3840bc0170b1211d8ddd4ca8c11aa2d125fcf
braney
  Thu Nov 9 09:46:01 2017 -0800
fix for #20281

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 92bdd19..3c89af8 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -144,31 +144,31 @@
     if (browser == btIE || browser == btFF)
 	upArrow = "↑";
     // Note: the nested spans are so that javascript can determine position
     // and selectively display the link when appropriate
     printf("<span class='navUp' style='float:right; display:none'>&nbsp;&nbsp;"
 	   "<A HREF='#' TITLE='Return to top of page'>Top%s</A></span>",upArrow);
     }
 }
 
 boolean makeSchemaLink(char *db,struct trackDb *tdb,char *label)
 // Make a table schema link (if appropriate and then returns TRUE)
 {
 #define SCHEMA_LINKED "<A HREF=\"../cgi-bin/hgTables?db=%s&hgta_group=%s&hgta_track=%s" \
 		  "&hgta_table=%s&hgta_doSchema=describe+table+schema\" " \
 		  "TARGET=ucscSchema%s>%s</A>"
-if (!trackHubDatabase(db) && hTableOrSplitExists(db, tdb->table))
+if (trackDataAccessible(db, tdb))
     {
     char *tbOff = trackDbSetting(tdb, "tableBrowser");
     if (isNotEmpty(tbOff) && sameString(nextWord(&tbOff), "off"))
 	return FALSE;
     char *hint = " title='Open table schema in new window'";
     if (label == NULL)
 	label = " View table schema";
     struct trackDb *topLevel = trackDbTopLevelSelfOrParent(tdb);
     printf(SCHEMA_LINKED, db, topLevel->grp, topLevel->track, tdb->table, hint, label);
     return TRUE;
     }
 return FALSE;
 }
 
 char *wgEncodeVocabLink(char *file,char *term,char *value,char *title, char *label,char *suffix)
@@ -391,33 +391,31 @@
     tdb->track, showLongLabel?"true":"false");
 printf("<DIV id='div_%s_meta' style='display:none;'>%s</div>",tdb->track, metadataAsHtmlTable(db,tdb,showLongLabel,FALSE));
 return TRUE;
 }
 
 void extraUiLinks(char *db,struct trackDb *tdb)
 // Show metadata, and downloads, schema links where appropriate
 {
 char *tagStormFile = trackDbSetting(tdb, "metaDb");
 char *tabSepFile = trackDbSetting(tdb, "metaTab");
 boolean hasMetadata = (tagStormFile != NULL) || (tabSepFile != NULL) || (!tdbIsComposite(tdb) && !trackHubDatabase(db)
                         && metadataForTable(db, tdb, NULL) != NULL);
 if (hasMetadata)
     printf("<b>Metadata:</b><br>%s\n", metadataAsHtmlTable(db, tdb, FALSE, FALSE));
 
-boolean schemaLink = (!tdbIsDownloadsOnly(tdb) && !trackHubDatabase(db)
-	      && isCustomTrack(tdb->table) == FALSE)
-	      && (hTableOrSplitExists(db, tdb->table));
+boolean schemaLink = trackDataAccessible(db, tdb);
 boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL && !tdbIsSuperTrack(tdb));
 int links = 0;
 if (schemaLink)
     links++;
 if (downloadLink)
     links++;
 
 if (links > 0)
     cgiDown(0.7);
 if (links > 1)
     printf("<table><tr><td nowrap>View table: ");
 
 if (schemaLink)
     {
     makeSchemaLink(db,tdb,(links > 1 ? "schema":"View table schema"));