src/hg/lib/hui.c 1.186
1.186 2009/04/22 23:21:50 tdreszer
Support for showing metadata in hgTrackUi
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.185
retrieving revision 1.186
diff -b -B -U 4 -r1.185 -r1.186
--- src/hg/lib/hui.c 15 Apr 2009 18:17:31 -0000 1.185
+++ src/hg/lib/hui.c 22 Apr 2009 23:21:50 -0000 1.186
@@ -34,8 +34,57 @@
#define DEFAULT_BUTTON(nameOrId,anc,beg,contains) printf(DEF_BUTTON,(anc),(anc),(nameOrId), (beg),(contains),(nameOrId),(beg),(contains),(anc),"defaults_sm.png","default")
#define PLUS_BUTTON(nameOrId,anc,beg,contains) printf(PM_BUTTON, (anc),(anc),(nameOrId),"true", (beg),(contains),(anc),"add_sm.gif", "+")
#define MINUS_BUTTON(nameOrId,anc,beg,contains) printf(PM_BUTTON, (anc),(anc),(nameOrId),"false",(beg),(contains),(anc),"remove_sm.gif","-")
+#define ENCODE_DCC_DOWNLOADS "encodeDCC"
+
+static boolean makeNamedDownloadsLink(struct trackDb *tdb,char *name)
+// Make a downloads link (if appropriate and then returns TRUE)
+{
+// Downloads directory if this is ENCODE
+if(trackDbSetting(tdb, "wgEncode") != NULL)
+ {
+ printf("<P><A HREF=\"http://%s/goldenPath/%s/%s/%s/\" TARGET=_BLANK>%s</A></P>\n",
+ cfgOptionDefault("downloads.server", "hgdownload.cse.ucsc.edu"),
+ trackDbSettingOrDefault(tdb, "origAssembly","hg18"),
+ ENCODE_DCC_DOWNLOADS,
+ tdb->tableName,name);
+ return TRUE;
+ }
+return FALSE;
+}
+
+boolean makeDownloadsLink(struct trackDb *tdb)
+// Make a downloads link (if appropriate and then returns TRUE)
+{
+return makeNamedDownloadsLink(tdb,"Downloads");
+}
+
+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>\n"
+if (hTableOrSplitExists(db, tdb->tableName))
+ {
+ char *tableName = tdb->tableName;
+ if (sameString(tableName, "mrna"))
+ tableName = "all_mrna";
+ char *hint = " title='Open table schema in new window'";
+ if( label == NULL)
+ label = " View table schema";
+ else
+ hint = " title='View table schema'";
+
+ if(tdbIsCompositeChild(tdb))
+ printf(SCHEMA_LINKED, db, tdb->parent->grp, tdb->parent->tableName,tableName,hint,label);
+ else
+ printf(SCHEMA_LINKED, db, tdb->grp, tdb->tableName,tableName,hint,label);
+
+ return TRUE;
+ }
+return FALSE;
+}
+
char *hUserCookie()
/* Return our cookie name. */
{
if (hIsMgcServer())
@@ -1934,8 +1983,23 @@
freez(members);
}
}
+#ifdef ADD_MULT_SELECT_DIMENSIONS
+// This is the beginning of work on allowing subtrack selection by multi-select drop downs
+typedef struct _selectables {
+ int count;
+ members_t **subgroups;
+ boolean**multiple;
+} selectables_t;
+
+boolean selectablesExist(struct trackDb *parentTdb)
+/* Does this parent track contain selectables option? */
+{
+ return (trackDbSetting(parentTdb, "selectableBy") != NULL);
+}
+#endif//def ADD_MULT_SELECT_DIMENSIONS
+
typedef struct _membership {
int count;
char **subgroups; // Ary of Tags in parentTdb->subGroupN and in childTdb->subGroups (ie view)
char **membership; // Ary of Tags of subGroups that child belongs to (ie PK)
@@ -2619,15 +2683,46 @@
/* Create a string for ENCODE restriction date of this track */
{
if (!trackDb)
return NULL;
-char *date = trackDbSetting(trackDb, "dateUnrestricted");
-if (date)
- return strSwapChar(cloneString(date), ' ', 0); // Truncate time
-date = trackDbSetting(trackDb, "dateSubmitted");
-if (date)
- return dateAddToAndFormat(strSwapChar(cloneString(date), ' ', 0), "%F", 0, 9, 0);
-return NULL;
+char *date = NULL;
+boolean addMonths = FALSE;
+metadata_t *metadata = metadataSettingGet(trackDb);
+if(metadata != NULL)
+ {
+ int ix=0;
+ for(;ix<metadata->count;ix++)
+ {
+ if (sameString(metadata->tags[ix],"dateUnrestricted"))
+ {
+ date = metadata->values[ix];
+ addMonths = FALSE;
+ break;
+ }
+ else if (date == NULL && sameString(metadata->tags[ix],"dateSubmitted"))
+ {
+ date = metadata->values[ix];
+ addMonths = TRUE;
+ }
+ }
+ }
+if(date == NULL)
+ date = trackDbSetting(trackDb, "dateUnrestricted");
+if(date != NULL)
+ addMonths = FALSE;
+else
+ {
+ addMonths = TRUE;
+ date = trackDbSetting(trackDb, "dateSubmitted");
+ }
+if (date != NULL)
+ {
+ date = strSwapChar(cloneString(date), ' ', 0); // Truncate time
+ if(addMonths)
+ date = dateAddToAndFormat(date, "%F", 0, 9, 0);
+ }
+metadataFree(&metadata);
+return date;
}
static void compositeUiSubtracks(char *db, struct cart *cart, struct trackDb *parentTdb,
boolean selectedOnly, char *primarySubtrack)
@@ -2819,9 +2914,9 @@
printf("<TR valign='top' BGCOLOR=\"%s\"",colors[colorIx]);
if(useDragAndDrop)
printf(" class='trDraggable' title='Drag to Reorder' onmouseover=\"hintForDraggableRow(this)\"");
- printf(" id=\"tr_%s\" nowrap>\n<TD>",id);
+ printf(" id=\"tr_%s\" nowrap%s>\n<TD>",id,(selectedOnly?" style='display:none'":""));
dyStringClear(dyHtml);
dyStringPrintf(dyHtml, "onclick='matSubtrackCbClick(this);' onmouseover=\"this.style.cursor='default';\" class=\"subtrackCB");
for(di=0;di<dimMax;di++)
{
@@ -2844,9 +2939,9 @@
{
ix = stringArrayIx(sortOrder->column[sIx], membership->subgroups, membership->count); // TODO: Sort needs to expand from subGroups to labels as well
if(ix >= 0)
{
-#define CFG_SUBTRACK_LINK "<A NAME=\"a_cfg_%s\"></A><A HREF=\"#a_cfg_%s\" onclick=\"return (subtrackCfgShow(this) == false);\" title=\"Configure Subtrack Settings\">%s</A>\n"
+#define CFG_SUBTRACK_LINK "<A HREF='#a_cfg_%s' onclick='return subtrackCfgShow(\"%s\");' title='Configure Subtrack Settings'>%s</A>\n"
#define MAKE_CFG_SUBTRACK_LINK(table,title) printf(CFG_SUBTRACK_LINK, (table),(table),(title))
printf ("<TD id='%s' nowrap abbr='%s' align='left'> ",sortOrder->column[sIx],membership->membership[ix]);
if(cType != cfgNone && sameString("view",sortOrder->column[sIx]))
MAKE_CFG_SUBTRACK_LINK(subtrack->tableName,membership->titles[ix]); // FIXME: Currently configurable under sort only supported when multiview
@@ -2865,16 +2960,42 @@
else
printf("%s\n",subtrack->shortLabel);
puts ("</TD>");
}
- printf ("<TD nowrap='true'> %s", subtrack->longLabel);
+ printf ("<TD nowrap='true'><div onmouseover=\"this.style.cursor='text';\"> %s", subtrack->longLabel);
if(trackDbSetting(parentTdb, "wgEncode") && trackDbSetting(subtrack, "accession"))
printf (" [GEO:%s]", trackDbSetting(subtrack, "accession"));
+ metadata_t *metadata = metadataSettingGet(subtrack);
+ if(metadata != NULL)
+ {
+ printf(" <A HREF='#a_meta_%s' onclick='return subtrackMetaShow(\"%s\");' title='Show metadata'>...</A></div>\n",
+ subtrack->tableName,subtrack->tableName);
+ printf("<DIV id='div_%s_meta' style='display:none;'><!--<table>",subtrack->tableName);
+ //printf("<DIV id='div.%s.meta'><table>",subtrack->tableName);
+ int ix = (sameString(metadata->values[0],"wgEncode")?1:0); // first should be project.
+ for(;ix<metadata->count;ix++)
+ {
+ if(sameString(metadata->tags[ix],"fileName"))
+ {
+ printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>",metadata->tags[ix]);
+ makeNamedDownloadsLink(parentTdb,metadata->values[ix]);
+ printf("</td></tr>");
+ }
+ else if(!sameString(metadata->tags[ix],"subId")
+ && !sameString(metadata->tags[ix],"composite"))
+ printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>%s</td></tr>",metadata->tags[ix],metadata->values[ix]);
+ }
+ printf("</table>--></DIV>\n");
+ metadataFree(&metadata);
+ }
+ else
+ printf("</div>");
+
if(cType != cfgNone)
{
ix = stringArrayIx("view", membership->subgroups, membership->count);
-#define CFG_SUBTRACK_DIV "<DIV id='div.%s.cfg'%s><INPUT TYPE=HIDDEN NAME='%s' value='%s'>\n"
+#define CFG_SUBTRACK_DIV "<DIV id='div_%s_cfg'%s><INPUT TYPE=HIDDEN NAME='%s' value='%s'>\n"
#define MAKE_CFG_SUBTRACK_DIV(table,cfgVar,open) printf(CFG_SUBTRACK_DIV,(table),((open)?"":" style='display:none'"),(cfgVar),((open)?"on":"off"))
safef(htmlIdentifier,sizeof(htmlIdentifier),"%s.childShowCfg",subtrack->tableName);
boolean open = cartUsualBoolean(cart, htmlIdentifier,FALSE);
MAKE_CFG_SUBTRACK_DIV(subtrack->tableName,htmlIdentifier,open);
@@ -4586,51 +4707,8 @@
}
}
}
-#define ENCODE_DCC_DOWNLOADS "encodeDCC"
-
-boolean makeDownloadsLink(struct trackDb *tdb)
-// Make a downloads link (if appropriate and then returns TRUE)
-{
-// Downloads directory if this is ENCODE
-if(trackDbSetting(tdb, "wgEncode") != NULL)
- {
- printf("<P><A HREF=\"http://%s/goldenPath/%s/%s/%s/\" TARGET=_BLANK>Downloads</A></P>\n",
- cfgOptionDefault("downloads.server", "hgdownload.cse.ucsc.edu"),
- trackDbSettingOrDefault(tdb, "origAssembly","hg18"),
- ENCODE_DCC_DOWNLOADS,
- tdb->tableName);
- return TRUE;
- }
-return FALSE;
-}
-
-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>\n"
-if (hTableOrSplitExists(db, tdb->tableName))
- {
- char *tableName = tdb->tableName;
- if (sameString(tableName, "mrna"))
- tableName = "all_mrna";
- char *hint = " title='Open table schema in new window'";
- if( label == NULL)
- label = " View table schema";
- else
- hint = " title='View table schema'";
-
- if(tdbIsCompositeChild(tdb))
- printf(SCHEMA_LINKED, db, tdb->parent->grp, tdb->parent->tableName,tableName,hint,label);
- else
- printf(SCHEMA_LINKED, db, tdb->grp, tdb->tableName,tableName,hint,label);
-
- return TRUE;
- }
-return FALSE;
-}
-
boolean superTrackDropDown(struct cart *cart, struct trackDb *tdb,
int visibleChild)
/* Displays hide/show dropdown for supertrack.
* Set visibleChild to indicate whether 'show' should be grayed