70e9200a58ef4db6378dae703296d29188ae26b1 tdreszer Fri Dec 17 14:58:43 2010 -0800 Make use of fileUi.h macros and support hgFileUi CGI diff --git src/hg/lib/fileUi.c src/hg/lib/fileUi.c index 8c8cfd8..0620a63 100644 --- src/hg/lib/fileUi.c +++ src/hg/lib/fileUi.c @@ -135,38 +135,38 @@ slAddHead(&newList,oneFile); oneFile = NULL; } if (newList) foundFiles = slCat(newList,foundFiles); return oneFile; } sortOrder_t *fileSortOrderGet(struct cart *cart,struct trackDb *parentTdb) /* Parses 'fileSortOrder' trackDb/cart instructions and returns a sort order struct or NULL. Some trickiness here. sortOrder->sortOrder is from cart (changed by user action), as is sortOrder->order, But columns are in original tdb order (unchanging)! However, if cart is null, all is from trackDb.ra */ { int ix; -char *setting = trackDbSetting(parentTdb, "fileSortOrder"); +char *setting = trackDbSetting(parentTdb, FILE_SORT_ORDER); if(setting == NULL) // Must be in trackDb or not a sortable list of files return NULL; sortOrder_t *sortOrder = needMem(sizeof(sortOrder_t)); sortOrder->setting = cloneString(setting); sortOrder->htmlId = needMem(strlen(parentTdb->track)+20); -safef(sortOrder->htmlId, (strlen(parentTdb->track)+20), "%s.fileSortOrder", parentTdb->track); +safef(sortOrder->htmlId, (strlen(parentTdb->track)+20), "%s.%s", parentTdb->track,FILE_SORT_ORDER); if(cart != NULL) sortOrder->sortOrder = cloneString(cartOptionalString(cart, sortOrder->htmlId)); sortOrder->count = chopByWhite(sortOrder->setting,NULL,0); // Get size sortOrder->column = needMem(sortOrder->count*sizeof(char*)); sortOrder->count = chopByWhite(sortOrder->setting,sortOrder->column,sortOrder->count); sortOrder->title = needMem(sortOrder->count*sizeof(char*)); sortOrder->forward = needMem(sortOrder->count*sizeof(boolean)); sortOrder->order = needMem(sortOrder->count*sizeof(int)); for (ix = 0; ix<sortOrder->count; ix++) { // separate out mtaDb var in sortColumn from title sortOrder->title[ix] = strchr(sortOrder->column[ix],'='); // Could be 'cell=Cell_Line' if (sortOrder->title[ix] != NULL) { @@ -298,31 +298,31 @@ // Get an mdbObj list of all that belong to this track and have a fileName char buf[256]; safef(buf,sizeof(buf),"composite=%s fileName=?",tdb->track); struct mdbByVar *mdbVars = mdbByVarsLineParse(buf); struct mdbObj *mdbList = mdbObjsQueryByVars(conn,mdbTable,mdbVars); // Now get Indexes But be sure not to duplicate entries in the list!!! safef(buf,sizeof(buf),"composite=%s fileIndex= fileName!=",tdb->track); mdbVars = mdbByVarsLineParse(buf); mdbList = slCat(mdbList, mdbObjsQueryByVars(conn,mdbTable,mdbVars)); sqlDisconnect(&conn); if (slCount(mdbList) == 0) { - warn("No files specified in memtadata for: %s\n%s",tdb->track,tdb->longLabel); + warn("No files specified in metadata for: %s\n%s",tdb->track,tdb->longLabel); return; } // Remove common vars from mdbs grant=Bernstein; lab=Broad; dataType=ChipSeq; setType=exp; control=std; char *commonTerms[] = { "grant", "lab", "dataType", "control", "setType" }; struct dyString *dyCommon = dyStringNew(256); for(ix=0;ix<ArraySize(commonTerms);ix++) { char *val = mdbRemoveCommonVar(mdbList, commonTerms[ix]); if (val) dyStringPrintf(dyCommon,"%s=%s ",commonTerms[ix],val); } if (debug && dyStringLen(dyCommon)) warn("These terms are common:%s",dyStringContents(dyCommon)); dyStringFree(&dyCommon); @@ -385,64 +385,74 @@ //boolean filterAble = dimensionsExist(tdb); //membersForAll_t* membersForAll = membersForAllSubGroupsGet(tdb,cart); // Now update all files with their sortable fields and sort the list sortOrder_t *sortOrder = fileSortOrderGet(cart,tdb); if (sortOrder != NULL) { // Fill in and sort fileList fileDbSortList(&fileList,sortOrder); } jsIncludeFile("hui.js",NULL); jsIncludeFile("ajax.js",NULL); // Table class=sortable +int columnCount = 0; +int restrictedColumn = 0; printf("<TABLE class='sortable' style='border: 2px outset #006600;'>\n"); printf("<THEAD class='sortable'>\n"); printf("<TR class='sortable' valign='bottom'>\n"); printf("<TD align='center' valign='center'> "); int filesCount = slCount(fileList); if (filesCount > 5) printf("<i>%d files</i>",filesCount); //puts("<FONT class='subCBcount'></font>"); // Use this style when filterboxes are up and running -//if (sortOrder) // NOTE: This could be done to preserve sort order +//if (sortOrder) // NOTE: This could be done to preserve sort order FIXME: However hgFileUi would need form OR changes would need to be ajaxed over AND hgsid would be needed. // printf("<INPUT TYPE=HIDDEN NAME='%s' class='sortOrder' VALUE=\"%s\">",sortOrder->htmlId, sortOrder->sortOrder); printf("</TD>\n"); +columnCount++; // Now the columns int curOrder = 0; if (sortOrder) { curOrder = sortOrder->count; for(ix=0;ix<sortOrder->count;ix++) { printf("<TH class='sortable sort%d%s' %snowrap>%s</TH>\n", sortOrder->order[ix],(sortOrder->forward[ix]?"":" sortRev"), (sameString("fileSize",sortOrder->column[ix])?"abbr='use' ":""), sortOrder->title[ix]); // keeing track of sortOrder + columnCount++; + if (sameWord(sortOrder->column[ix],"dateUnrestricted")) + restrictedColumn = columnCount; } } //#define INCLUDE_FILENAMES #ifndef INCLUDE_FILENAMES else #endif///defn INCLUDE_FILENAMES + { printf("<TH class='sortable sort%d' nowrap>File Name</TH>\n",++curOrder); + columnCount++; + } printf("<TH class='sortable sort%d' align='left' nowrap>Additional Details</TH>\n",++curOrder); +columnCount++; printf("</TR></THEAD>\n"); // Now the files... -printf("<TBODY class='sortable'>\n"); +printf("<TBODY class='sortable sorting'>\n"); // 'sorting' is a fib but it conveniently greys the list till the table is initialized. for(oneFile = fileList;oneFile!= NULL;oneFile=oneFile->next) { char *field = NULL; printf("<TR valign='top'>"); // TODO: BUILD IN THE CLASSES TO ALLOW FILTERBOXES TO WORK!!! // Download button printf("<TD>"); printf("<A HREF='http://%s/goldenPath/%s/%s/%s/%s' title='Download %s ...' TARGET=ucscDownloads>", hDownloadsServer(),db,ENCODE_DCC_DOWNLOADS, tdb->track, oneFile->fileName, oneFile->fileName); printf("<input type='button' value='Download'>"); printf("</a></TD>\n"); // Each of the pulled out mdb vars if (sortOrder) @@ -474,25 +484,38 @@ //printf(" <A HREF='#a_meta_%s' onclick='return metadataShowHide(\"%s\",true,true);' title='Show metadata details...'>...</A>", // oneFile->mdb->obj,oneFile->mdb->obj); //printf("<DIV id='div_%s_meta' style='display:none;'></div></td>",oneFile->mdb->obj); } // Extras grant=Bernstein; lab=Broad; dataType=ChipSeq; setType=exp; control=std; mdbObjRemoveVars(oneFile->mdb,"fileName fileIndex composite project"); // Remove this from mdb now so that it isn't displayed in "extras' mdbObjReorderVars(oneFile->mdb,"grant lab dataType cell treatment antibody protocol replicate view",FALSE); // Bring to front mdbObjReorderVars(oneFile->mdb,"subId submittedDataVersion dateResubmitted dataVersion setType inputType controlId tableName",TRUE); // Send to back field = mdbObjVarValPairsAsLine(oneFile->mdb,TRUE); printf("<TD nowrap>%s</td>",field?field:" "); printf("</TR>\n"); } -printf("</TBODY></TABLE><BR>\n"); -printf("<script type='text/javascript'>{$(document).ready(function() {sortTableInitialize($('table.sortable')[0],true,true);});}</script>\n"); +printf("</TBODY><TFOOT class='bgLevel3'>\n"); +printf("<TR valign='top'>"); + +// Restriction policy link in first column? +if (restrictedColumn == 1) + printf("<TH colspan=%d><A HREF='%s' TARGET=BLANK style='font-size:.9em;'>Restriction Policy</A></TH>", (columnCount - restrictedColumn),ENCODE_DATA_RELEASE_POLICY); + +printf("<TD colspan=%d> ",(restrictedColumn > 1 ? (restrictedColumn - 1) : columnCount)); // Total if (filesCount > 5) - printf(" <i>%d files</i>\n",filesCount); //puts("<FONT class='subCBcount'></font>"); // Use this style when filterboxes are up and running + printf("<i>%d files</i>\n",filesCount); + +// Restriction policy link in later column? +if (restrictedColumn > 1) + printf("</TD><TH colspan=%d align='left'><A HREF='%s' TARGET=BLANK style='font-size:.9em;'>Restriction Policy</A>", columnCount,ENCODE_DATA_RELEASE_POLICY); + +printf("</TD></TR>\n"); +printf("</TFOOT></TABLE><BR>\n"); // Free mem? }