5c9dba1dca5df4b5552e8081f708e62791e242da larrym Wed Nov 17 13:26:11 2010 -0800 show trackDbJson even when doing only a single track; make trackDbJson valid json (i.e. quote keys) diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index c5ba95f..6d2c44f 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -142,75 +142,75 @@ kindOfChild = kocCompositeChild; else if (tdbIsMultiTrackChild(tdb)) kindOfChild = kocMultiTrackChild; return kindOfChild; } ///////////////////////// // JSON support. Eventually the whole imgTbl could be written out as JSON void jsonTdbSettingsBuild(struct dyString **jsonTdbSettingsString, struct track *track) // Creates then successively adds trackDb settings to the jsonTdbSettingsString // Initially pass in NULL pointer to a dyString to properly begin building { if (*jsonTdbSettingsString==NULL) { *jsonTdbSettingsString = newDyString(1024); - dyStringPrintf(*jsonTdbSettingsString, "<script>var trackDbJson = {\nruler: {shortLabel: 'ruler', longLabel: 'Base Position Controls', canPack: 0, visibility: %d},\n", rulerMode); + dyStringPrintf(*jsonTdbSettingsString, "<!-- trackDbJson -->\n<script>var trackDbJson = {\n\"ruler\": {\"shortLabel\": \"ruler\", \"longLabel\": \"Base Position Controls\", \"canPack\": 0, \"visibility\": %d},\n", rulerMode); } else dyStringAppend(*jsonTdbSettingsString, ",\n"); // track name and type -dyStringPrintf(*jsonTdbSettingsString, "\t%s: {", track->track); -dyStringPrintf(*jsonTdbSettingsString, "\n\t\ttype: '%s',", track->tdb->type); +dyStringPrintf(*jsonTdbSettingsString, "\t\"%s\": {", track->track); +dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"type\": \"%s\",", track->tdb->type); // Tell which kind of parent and which kind of child enum kindOfParent kindOfParent = tdbKindOfParent(track->tdb); enum kindOfChild kindOfChild = tdbKindOfChild(track->tdb); -dyStringPrintf(*jsonTdbSettingsString, "\n\t\tkindOfParent: %d,\n\t\tkindOfChild: %d,",kindOfParent,kindOfChild); +dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"kindOfParent\": %d,\n\t\t\"kindOfChild\": %d,",kindOfParent,kindOfChild); // Tell something about the parent and/or children if (kindOfChild != kocOrphan) { struct trackDb *parentTdb = (kindOfChild == kocFolderContent ? track->tdb->parent :tdbGetContainer(track->tdb)); - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',\n\t\tparentLabel: '%s',", + dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"parentTrack\": \"%s\",\n\t\t\"parentLabel\": \"%s\",", parentTdb->track, javaScriptLiteralEncode(parentTdb->shortLabel)); if (kindOfChild != kocFolderContent && !track->canPack) { - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tshouldPack: 0,"); // default vis is full, but pack is an option + dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"shouldPack\": 0,"); // default vis is full, but pack is an option track->canPack = parentTdb->canPack; } } -dyStringPrintf(*jsonTdbSettingsString, "\n\t\thasChildren: %d,", slCount(track->tdb->subtracks)); +dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"hasChildren\": %d,", slCount(track->tdb->subtracks)); // Now some miscellaneous tidbids if (sameString(trackDbSettingClosestToHomeOrDefault(track->tdb, "configureByPopup", matchRegex(track->track, "^snp[0-9]+$") || matchRegex(track->track, "^cons[0-9]+way") || matchRegex(track->track, "^multiz") ? "off" : "on"), "off")) - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tconfigureByPopup: false,"); + dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"configureByPopup\": false,"); if (sameWord(track->tdb->type, "remote") && trackDbSetting(track->tdb, "url") != NULL) - dyStringPrintf(*jsonTdbSettingsString, "\n\t\turl: '%s',", trackDbSetting(track->tdb, "url")); + dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"url\": \"%s\",", trackDbSetting(track->tdb, "url")); // Close with some standard vars -dyStringPrintf(*jsonTdbSettingsString, "\n\t\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %d\n\t}", +dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"shortLabel\": \"%s\",\n\t\t\"longLabel\": \"%s\",\n\t\t\"canPack\": %d,\n\t\t\"visibility\": %d\n\t}", javaScriptLiteralEncode(track->shortLabel), javaScriptLiteralEncode(track->longLabel), track->canPack, track->limitedVis); } char *jsonTdbSettingsUse(struct dyString **jsonTdbSettingsString) // Closes and returns the contents of the jsonTdbSettingsString { -dyStringAppend(*jsonTdbSettingsString, "}\n</script>\n"); +dyStringAppend(*jsonTdbSettingsString, "}\n</script><!-- trackDbJson -->\n"); return dyStringCannibalize(jsonTdbSettingsString); } ///////////////////////// // IMAGEv2 // The new way to do images: PLEASE REFER TO imageV2.h FOR A DETAILED DESCRIPTION ///////////////////////// /////////////////////// Maps struct mapSet *mapSetStart(char *name,struct image *img,char *linkRoot) /* Starts a map (aka mapSet) which is the seet of links and image locations used in HTML. Complete a map by adding items with mapItemAdd() */ @@ -1767,36 +1767,33 @@ hPrintf("<TABLE id='imgTbl' border=0 cellspacing=0 cellpadding=0 BGCOLOR='%s'",COLOR_WHITE);//COLOR_RED); // RED to help find bugs hPrintf(" width=%d",imgBox->showPortal?(imgBox->portalWidth+imgBox->sideLabelWidth):imgBox->width); hPrintf(" class='tableWithDragAndDrop'"); hPrintf(" style='border:1px solid blue;border-collapse:separate;'>\n"); #if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) struct dyString *jsonTdbVars = NULL; #endif/// defined(CONTEXT_MENU) || defined(TRACK_SEARCH) char *newLine = NEWLINE_TO_USE(cgiClientBrowser(NULL,NULL,NULL)); struct imgTrack *imgTrack = imgBox->imgTracks; for(;imgTrack!=NULL;imgTrack=imgTrack->next) { char *trackName = (imgTrack->name != NULL ? imgTrack->name : imgTrack->tdb->track ); #if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) - if (!trackImgOnly) - { struct track *track = hashFindVal(trackHash, trackName); if(track) jsonTdbSettingsBuild(&jsonTdbVars, track); - } #endif //if(verbose && imgTrack->order == 3) // imgTrackShow(NULL,imgTrack,0); hPrintf("<TR id='tr_%s' abbr='%d' class='imgOrd%s%s%s'>\n",trackName,imgTrack->order, (imgTrack->reorderable?" trDraggable":" nodrop nodrag"), (imgTrack->centerLabelSeen != clAlways?" clOpt":""), (imgTrack->ajaxRetrieval ?" mustRetrieve":"")); if(imgBox->showSideLabel && imgBox->plusStrand) { // button safef(name, sizeof(name), "btn_%s", trackName); hPrintf(" <TD id='td_%s'%s>\n",name,(imgTrack->reorderable?" class='dragHandle'":"")); sliceAndMapDraw(imgBox,imgTrack,stButton,name,FALSE); hPrintf("</TD>\n"); @@ -1834,19 +1831,19 @@ hPrintf(" <TD id='td_%s'>\n",name); sliceAndMapDraw(imgBox,imgTrack,stSide,name,FALSE); hPrintf("</TD>\n"); // button safef(name, sizeof(name), "btn_%s", trackName); hPrintf(" <TD id='td_%s'%s>\n",name,(imgTrack->reorderable?" class='dragHandle'":"")); sliceAndMapDraw(imgBox,imgTrack,stButton, name,FALSE); hPrintf("</TD>\n"); } hPrintf("</TR>\n"); } hPrintf("</TABLE>\n"); hPrintf("<!-- - - - - - - - ^^^ IMAGEv2 ^^^ - - - - - - - -->\n"); // DANGER FF interprets '--' as end of comment, not '-->' #if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) -if (!trackImgOnly && jsonTdbVars != NULL) +if (jsonTdbVars != NULL) hWrites(jsonTdbSettingsUse(&jsonTdbVars)); #endif/// defined(CONTEXT_MENU) || defined(TRACK_SEARCH) }