src/hg/hgCustom/hgCustom.c 1.135

1.135 2009/12/09 19:28:10 galt
Added column to display remote ct errors (big*, bam). Fixed some stray </TD> tags. Uses new func javaScriptLiteralEncode().
Index: src/hg/hgCustom/hgCustom.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgCustom/hgCustom.c,v
retrieving revision 1.134
retrieving revision 1.135
diff -b -B -U 4 -r1.134 -r1.135
--- src/hg/hgCustom/hgCustom.c	9 Nov 2009 22:32:18 -0000	1.134
+++ src/hg/hgCustom/hgCustom.c	9 Dec 2009 19:28:10 -0000	1.135
@@ -436,17 +436,19 @@
 if (cartVarExists(cart, hgCtDoRefreshSet))
     setAllUpdate = TRUE;
 
 /* determine which columns to display (avoid empty columns) */
-int updateCt = 0, itemCt = 0, posCt = 0;
+int updateCt = 0, itemCt = 0, posCt = 0, errCt = 0;
 for (ct = ctList; ct != NULL; ct = ct->next)
     {
     if (ctDataUrl(ct))
         updateCt++;
     if (ctItemCount(ct) > 0)
         itemCt++;
     if (ctInitialPosition(ct) || ctFirstItemPos(ct))
         posCt++;
+    if (ct->networkErrMsg)
+	errCt++;
     }
 hTableStart();
 cgiSimpleTableRowStart();
 tableHeaderField("Name", "Short track identifier");
@@ -456,8 +458,10 @@
 if (itemCt)
     tableHeaderField("Items", "Count of discrete items in track");
 if (posCt)
     tableHeaderField("Pos"," Go to genome browser at default track position or first item");
+if (errCt)
+    tableHeaderField("Error"," Error in custom track");
 
 boolean showAllButtons = FALSE;
 if (numCts > 3)
     showAllButtons = TRUE;
@@ -529,26 +533,38 @@
             }
         else
             puts("<TD>&nbsp;</TD>");
         }
+    if (errCt)
+	{
+	if (ct->networkErrMsg)
+	    {
+	    printf("\n<TD><A href=\"javascript:void(0)\" onClick=\"alert('%s')\">Show</A></TD>\n",
+		javaScriptLiteralEncode(ct->networkErrMsg));
+	    }
+	else
+	    puts("<TD>&nbsp;</TD>");
+	}
     /* Delete checkboxes */
-    printf("</TD><TD COLSPAN=%d ALIGN=CENTER>", showAllButtons ? 2 : 1);
+    printf("<TD COLSPAN=%d ALIGN=CENTER>", showAllButtons ? 2 : 1);
     safef(buf, sizeof(buf), "%s_%s", hgCtDeletePrefix, 
             ct->tdb->tableName);
     cgiMakeCheckBox(buf, setAllDelete);
+    puts("</TD>");
 
     /* Update checkboxes */
     if (updateCt)
         {
-        printf("</TD><TD COLSPAN=%d ALIGN=CENTER>", showAllButtons ? 2 : 1);
+        printf("<TD COLSPAN=%d ALIGN=CENTER>", showAllButtons ? 2 : 1);
         safef(buf, sizeof(buf), "%s_%s", hgCtRefreshPrefix, 
                 ct->tdb->tableName);
         if ((dataUrl = ctDataUrl(ct)) != NULL)
             cgiMakeCheckBoxWithMsg(buf, setAllUpdate, dataUrl);
         else
             puts("&nbsp;");
+	puts("</TD>");
         }
-    puts("</TD></TR>\n");
+    puts("</TR>\n");
     }
 if (showAllButtons)
     {
     cgiSimpleTableRowStart();
@@ -1155,9 +1171,26 @@
 	addWarning(dsWarn, warn);
         ctUpdated = TRUE;
 	}
     if (ctUpdated || ctConfigUpdate(ctFileName))
+	{
         customTracksSaveCart(database, cart, ctList);
+
+	/* refresh ctList again to pickup remote resource error state */
+	struct errCatch *catch = errCatchNew();
+	if (errCatchStart(catch))
+	    ctList = customTracksParseCartDetailed(database, cart, &browserLines, &ctFileName,
+					       &replacedCts, NULL, &err);
+	errCatchEnd(catch);
+	if (catch->gotError)
+	    {
+	    addWarning(dsWarn, err);
+	    addWarning(dsWarn, catch->message->string);
+	    ctParseError = TRUE;
+	    }
+	errCatchFree(&catch);
+
+	}
     warn = dyStringCannibalize(&dsWarn);
     if (!initialDb || ctList || cartVarExists(cart, hgCtDoDelete))
         doManageCustom(warn);
     else if (ctParseError)