6b6ecc50247ef843cd2ad6d29f8dcd63ac87f54d
max
  Sat Sep 7 14:32:22 2013 -0700
various small changes to pubs tracks to be able to show bing.com crawl results
diff --git src/hg/hgc/pubs.c src/hg/hgc/pubs.c
index 07a6a9e..208f8fa 100644
--- src/hg/hgc/pubs.c
+++ src/hg/hgc/pubs.c
@@ -43,32 +43,32 @@
       "refs", "supplement", "unknown" };
 
 // labels to show to user, have to correspond to pubsSecNames
 static char *secLabels[] ={
       "Title", "Abstract",
       "Introduction", "Methods",
       "Results", "Discussion",
       "Conclusions", "Acknowledgements",
       "References", "Supplement", "Undetermined section (e.g. for a brief communication)" };
 
 // whether a checkbox is checked by default, have to correspond to pubsSecNames
 static int pubsSecChecked[] ={
       1, 1,
       1, 1,
       1, 1,
-      1, 0,
-      0, 1 };
+      1, 1,
+      1, 1, 1 };
 
 static char *pubsSequenceTable;
 
 
 /* ------ functions to replace HTML4 tables with HTML5 constructs */
 /* Web wrappers incorporating tag, id, and class HTML attributes, to support
  * styling and test */
 
 /* Suffix -S for  "function accepts style parameter"
  * Suffix -C for  "function accepts class parameter"
  * Suffix -CI for "function accepts class and id parameter"
  *
  * Some functions are commented out because they are not yet used.
  */
 
@@ -430,47 +430,64 @@
 /* print a two-line description of article */
 char *articleId = row[0];
 char *url       = row[1];
 char *title     = row[2];
 char *authors   = row[3];
 char *citation  = row[4];
 char *year      = row[5];
 char *pmid      = row[6];
 url = mangleUrl(url);
 printf("<A HREF=\"%s\">%s</A><BR> ", url, title);
 // cut author string at 40 chars, like scholar
 printf("<span style=\"color:gray\">");
 if (strlen(authors)>40)
     {
     authors[60] = 0;
-    printf("<SMALL>%s...</SMALL> - ", authors);
+    printf("<SMALL>%s...</SMALL> ", authors);
     }
-else
-    printf("<SMALL>%s</SMALL> - ", authors);
+else if (!isEmpty(authors))
+    printf("<SMALL>%s</SMALL> ", authors);
 
 // first word of citation is journal name
 char *words[10];
-chopCommas(citation, words);
-char *journal = words[0];
+int wordCount = chopCommas(citation, words);
+char *journal = NULL;
+if (wordCount!=0)
+    journal = words[0];
 
-printf("<SMALL>%s - %s ", year, journal);
+// optional: print the little gray line with author, journal, year info
+bool didPrint = FALSE;
+printf("<small>");
+if (year!=NULL && differentWord(year, "0"))
+    {
+    printf("%s", year);
+    didPrint = TRUE;
+    }
+if (!isEmpty(journal))
+    {
+    printf(" - %s ", journal);
+    didPrint = TRUE;
+    }
 if (!isEmpty(pmid) && strcmp(pmid, "0")!=0 )
+    {
     printf(", <A HREF=\"http://www.ncbi.nlm.nih.gov/pubmed/%s\">PMID%s</A>\n", pmid, pmid);
-printf("</SMALL>\n");
-
-printf("</span>\n");
+    didPrint = TRUE;
+    }
+printf("</small></span>\n");
+if (didPrint)
     printf("<BR>\n");
+
 if (pubsDebug)
     printf("articleId=%s", articleId);
 
 return articleId;
 }
 
 static void printSnippets(struct sqlResult *srSnip) 
 {
 char **snipRow;
 struct hash *doneSnips = newHash(0); // avoid printing a sentence twice
 int snipCount = 0;
 struct slPair *secSnips = NULL;
 
 // add all pairs to the list, remove duplicated snippets (ignore all lowercase chars)
 while ((snipRow = sqlNextRow(srSnip)) != NULL)
@@ -567,30 +584,38 @@
 }
 
 static char *urlToLogoUrl(char *pubsArticleTable, char *articleId, char *urlOrig)
 /* return a string with relative path of logo for publisher given the url of
  * fulltext or a table/articleId, has to be freed 
 */
 {
 struct sqlConnection *conn = hAllocConn(database);
 char *pubCode = NULL;
 if (hHasField("hgFixed", pubsArticleTable, "publisher"))
     {
     char query[4000];
     sqlSafef(query, sizeof(query), "SELECT publisher from %s where articleId=%s", 
         pubsArticleTable, articleId);
     pubCode = sqlQuickString(conn, query);
+    // if no publisher is specified, we use the source (e.g. bing, pmc, elsevier, etc)
+    // to find the logo
+    if (isEmpty(pubCode))
+        {
+        sqlSafef(query, sizeof(query), "SELECT source from %s where articleId=%s", 
+            pubsArticleTable, articleId);
+        pubCode = sqlQuickString(conn, query);
+        }
     }
 else 
     {
     // get top-level domain url if not publisher field
     char url[1024];
     memcpy(url, urlOrig, sizeof(url));
     char *slashParts[20];
     // split http://www.sgi.com/test -> to [http:,www.sgi.com,test]
     int partCount = chopString(url, "/", slashParts, ArraySize(slashParts));
     if (partCount<3)
         return NULL;
     // split www.sgi.com to [www,sgi,com]
     char *dotParts[20];
     partCount = chopString(slashParts[1], ".", dotParts, ArraySize(dotParts));
     if (partCount<3)
@@ -647,31 +672,30 @@
 // authors  title
 printf("<DIV style=\"width:1024px; font-size:100%%\">\n");
 printf("<P>%s</P>\n", authors);
 //
 // logo of publisher
 char *logoUrl = urlToLogoUrl(pubsArticleTable, articleId, url);
 if (logoUrl)
     printf("<a href=\"%s\"><img align=\"right\" hspace=\"20\" src=\"%s\"></a>\n", url, logoUrl);
 freeMem(logoUrl);
 
 printf("<div style=\"width:800px\">");
 printf("<A TARGET=\"_blank\" HREF=\"%s\"><B>%s</B></A></div>\n", url, title);
 printf("</DIV>\n");
 printf("</DIV>\n");
 
-
 printf("<P style=\"width:1024px; font-size:80%%\">%s", cit);
 if (strlen(pmid)!=0 && strcmp(pmid, "0"))
     printf(", <A HREF=\"http://www.ncbi.nlm.nih.gov/pubmed/%s\">PMID%s</A>\n", pmid, pmid);
 printf("</P>\n");
 printf("<P style=\"width:1024px; font-size:100%%\">%s</P>\n", abstract);
 
 if (pubsIsElsevier)
     printf("<P><SMALL>Copyright 2012 Elsevier B.V. All rights reserved.</SMALL></P>");
 
 sqlFreeResult(&sr);
 return articleId;
 }
 
 static struct hash *getSeqIdHash(struct sqlConnection *conn, char *trackTable, \
     char *articleId, char *item, char *seqName, int start)