bf206e712c2e6d27532774f86ed7e01af79cb830 tdreszer Tue Aug 31 14:42:14 2010 -0700 Movved 2 functions out of searchTracks. diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index f032121..16b2b99 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -106,6 +106,46 @@ #endif//def FLAT_TRACK_LIST ///////////////////////// +// 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); + } +else + dyStringAppend(*jsonTdbSettingsString, ",\n"); +dyStringPrintf(*jsonTdbSettingsString, "\t%s: {", track->track); +if (tdbIsSuperTrackChild(track->tdb)) + { + dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',", track->tdb->parent->track); + dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentLabel: '%s',", track->tdb->parent->shortLabel); + } +else if (tdbIsCompositeChild(track->tdb)) + { + struct trackDb *parentTdb = trackDbCompositeParent(track->tdb); + dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',", parentTdb->track); + dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentLabel: '%s',", parentTdb->shortLabel); + } +dyStringPrintf(*jsonTdbSettingsString, "\n\t\thasChildren: %d,", slCount(track->tdb->subtracks)); +dyStringPrintf(*jsonTdbSettingsString, "\n\t\ttype: '%s',", track->tdb->type); +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\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %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"); +return dyStringCannibalize(jsonTdbSettingsString); +} + +///////////////////////// // IMAGEv2 // The new way to do images: PLEASE REFER TO imageV2.h FOR A DETAILED DESCRIPTION ///////////////////////// @@ -1580,41 +1620,9 @@ hPrintf("</div>"); } -#if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) -static void trackJson(struct dyString *trackDbJson, struct track *track, int count) -{ -// add entry for given track to the trackDbJson string -if(count) - dyStringAppend(trackDbJson, "\n,"); -dyStringPrintf(trackDbJson, "\t%s: {", track->track); -if(tdbIsSuperTrackChild(track->tdb)) - { - dyStringPrintf(trackDbJson, "\n\t\tparentTrack: '%s',", track->tdb->parent->track); - dyStringPrintf(trackDbJson, "\n\t\tparentLabel: '%s',", track->tdb->parent->shortLabel); - } -else if(tdbIsCompositeChild(track->tdb)) - { - struct trackDb *parentTdb = trackDbCompositeParent(track->tdb); - dyStringPrintf(trackDbJson, "\n\t\tparentTrack: '%s',", parentTdb->track); - dyStringPrintf(trackDbJson, "\n\t\tparentLabel: '%s',", parentTdb->shortLabel); - } -dyStringPrintf(trackDbJson, "\n\t\ttype: '%s',", track->tdb->type); -if(sameWord(track->tdb->type, "remote") && trackDbSetting(track->tdb, "url") != NULL) - dyStringPrintf(trackDbJson, "\n\t\turl: '%s',", trackDbSetting(track->tdb, "url")); -dyStringPrintf(trackDbJson, "\n\t\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %d\n\t}", - javaScriptLiteralEncode(track->shortLabel), javaScriptLiteralEncode(track->longLabel), track->canPack, track->limitedVis); -} -#endif/// defined(CONTEXT_MENU) || defined(TRACK_SEARCH) - void imageBoxDraw(struct imgBox *imgBox) /* writes a entire imgBox including all tracksas HTML */ { -#if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) -struct dyString *trackDbJson = newDyString(1000); -int trackDbJsonCount = 1; -dyStringPrintf(trackDbJson, "<script>var trackDbJson = {\nruler: {shortLabel: 'ruler', longLabel: 'Base Position Controls', canPack: 0, visibility: %d}", rulerMode); -#endif/// defined(CONTEXT_MENU) || defined(TRACK_SEARCH) - if(imgBox->imgTracks == NULL) // Not an error to have an empty image return; imgBoxDropEmpties(imgBox); @@ -1675,16 +1683,21 @@ #endif//def IMAGEv2_DRAG_REORDER 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) - { - trackJson(trackDbJson, track, trackDbJsonCount++); + jsonTdbSettingsBuild(&jsonTdbVars, track); } #endif //if(verbose && imgTrack->order == 3) @@ -1745,8 +1758,7 @@ hPrintf("<!---------------^^^ IMAGEv2 ^^^---------------->\n"); #if defined(CONTEXT_MENU) || defined(TRACK_SEARCH) -dyStringAppend(trackDbJson, "}\n</script>\n"); if(!trackImgOnly) - hPrintf(dyStringContents(trackDbJson)); + hPrintf(jsonTdbSettingsUse(&jsonTdbVars)); #endif/// defined(CONTEXT_MENU) || defined(TRACK_SEARCH) }