\n");
}
if (!isEmpty(where))
{
// left column
printf("Restricting files to where %s. ", where);
printf("  ");
printf("
\n"); // parent container
if (visibleFacetList)
{
// left column
printf("
\n");
struct slName *visList = slNameListFromComma(visibleFacetList);
struct slName *vis;
for (vis = visList; vis != NULL; vis = vis->next)
{
+ char *fieldName = vis->name;
char selfId[256];
- safef(selfId, sizeof(selfId), "%s_self_a_%s", varPrefix, vis->name);
+ safef(selfId, sizeof(selfId), "%s_self_a_%s", varPrefix, fieldName);
subChar(selfId, ' ', '_');
- int f = fieldedTableMustFindFieldIx(table, vis->name);
- struct facetField *field = ffArray[f];
+ /* Work on facet field label line */
htmlPrintf("
\n", selfId);
- htmlPrintf("
%s
\n", field->fieldName);
- struct facetVal *val;
+ htmlPrintf("\n");
+
+ if (field != NULL)
+ {
+ struct facetVal *val;
if (!field->allSelected) // add reset facet link
{
char *op = "reset";
htmlPrintf("- %s
\n",
returnUrl, varPrefix, op,
varPrefix, field->fieldName, varPrefix, "", varPrefix,
"Clear"
);
}
int valuesShown = 0;
int valuesNotShown = 0;
if (field->showAllValues) // Sort alphabetically if they want all values
{
slSort(&field->valList, facetValCmp);
}
int extraAnchorPeriod = 15;
int extraAnchorPos = 0;
for (val = field->valList; val; val=val->next)
{
boolean specificallySelected = (val->selected && !field->allSelected);
- if ((val->selectCount > 0 && (field->showAllValues || valuesShown < facetUsualSize))
+ if ((val->selectCount > 0 &&
+ (field->showAllValues || valuesShown < facetUsualSize) &&
+ !field->isMerged)
|| specificallySelected)
{
++valuesShown;
++extraAnchorPos;
char *op = "add";
if (specificallySelected)
op = "remove";
printf("- = extraAnchorPeriod)
{
safef(selfId, sizeof(selfId), "%s_self_a_%s_%s", varPrefix, vis->name,
val->val);
subChar(selfId, ' ', '_');
printf(" id=\"%s\"", selfId);
extraAnchorPos= 0;
@@ -611,61 +670,62 @@
"&%s_page=1#%s' "
">",
returnUrl, varPrefix,
op, varPrefix, field->fieldName, varPrefix, val->val, varPrefix, selfId
);
htmlPrintf("%s (%d)", naForEmpty(val->val), val->selectCount);
printf("
\n");
}
else if (val->selectCount > 0)
{
++valuesNotShown;
}
}
// show "See More" link when facet has lots of values
- if (valuesNotShown > 0)
+ if (valuesNotShown > 0 && !field->isMerged)
{
char *op = "showAllValues";
htmlPrintf("- See %d More
\n",
returnUrl, varPrefix, op,
varPrefix, field->fieldName, varPrefix, "",
varPrefix, selfId, valuesNotShown
);
}
// show "See Fewer" link when facet has lots of values
if (field->showAllValues && valuesShown >= facetUsualSize)
{
safef(selfId, sizeof(selfId), "%s_self_a_%s", varPrefix, vis->name);
subChar(selfId, ' ', '_');
char *op = "showSomeValues";
htmlPrintf("- %s
\n",
returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, "", varPrefix,
selfId, "See Fewer"
);
}
+ }
htmlPrintf("
\n");
}
printf("
\n");
// Clicking a checkbox is actually a click on the following link
jsInlineF(
"$(function () {\n"
" $('.ttFsCheckBox').click(function() {\n"
" this.nextSibling.nextSibling.click();\n"
" });\n"
"});\n");
}
// start right column, if there are two columns
if (visibleFacetList)
printf("
\n");
@@ -700,31 +760,31 @@
printf("
\n"); //close parent container
}
void webSortableFieldedTable(struct cart *cart, struct fieldedTable *table,
char *returnUrl, char *varPrefix,
int maxLenField, struct hash *tagOutputWrappers, void *wrapperContext)
/* Display all of table including a sortable label row. The tagOutputWrappers
* is an optional way to enrich output of specific columns of the table. It is keyed
* by column name and has for values functions of type webTableOutputWrapperType. */
{
webFilteredFieldedTable(cart, table, NULL, returnUrl, varPrefix,
maxLenField, tagOutputWrappers, wrapperContext,
FALSE, NULL,
slCount(table->rowList),
- 0, NULL, NULL, NULL, NULL, NULL);
+ 0, NULL, NULL, NULL, NULL, NULL, FALSE);
}
void webTableBuildQuery(struct cart *cart, char *from, char *initialWhere,
char *varPrefix, char *fields, boolean withFilters,
struct dyString **retQuery, struct dyString **retWhere)
/* Construct select, from and where clauses in query, keeping an additional copy of where
* Returns the SQL query and the SQL where expression as two dyStrings (need to be freed) */
{
struct dyString *query = dyStringNew(0);
struct dyString *where = dyStringNew(0);
struct slName *field, *fieldList = commaSepToSlNames(fields);
boolean gotWhere = FALSE;
sqlDyStringPrintf(query, "select %-s from %-s", sqlCkIl(fields), sqlCkIl(from));
if (!isEmpty(initialWhere))
@@ -911,23 +971,23 @@
{
int lastPage = (context.tableSize-1)/pageSize;
if (page > lastPage)
page = lastPage;
context.tableOffset = page * pageSize;
}
if (!visibleFacetList)
{
sqlDyStringPrintf(query, " limit %d offset %d", pageSize, context.tableOffset);
table = fieldedTableFromDbQuery(conn, query->string);
}
webFilteredFieldedTable(cart, table, fields, returnUrl, varPrefix, maxFieldWidth,
tagOutWrappers, wrapperContext, withFilters, pluralInstructions,
- pageSize, facetUsualSize, &context, suggestHash, ffArray, visibleFacetList, addFunc);
+ pageSize, facetUsualSize, &context, suggestHash, ffArray, visibleFacetList, addFunc, FALSE);
fieldedTableFree(&table);
dyStringFree(&fusedFields);
dyStringFree(&query);
dyStringFree(&where);
}