Skip to content

Commit 4e5f90d

Browse files
authored
Search-by-TFM Bug Bash feedback (#9366)
* fixed a UI issue * fixed multiple bugs from bug bash * whitespace * Search bar only removed from search page, not others (like the profiles page) + no search bar flicker on rendering
1 parent 3f692c3 commit 4e5f90d

4 files changed

Lines changed: 38 additions & 51 deletions

File tree

src/Bootstrap/dist/css/bootstrap-theme.css

Lines changed: 2 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Bootstrap/less/theme/page-list-packages.less

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,6 @@
1111
margin: 0 !important;
1212
}
1313

14-
.btn-filter {
15-
margin-top: 33px;
16-
margin-bottom: 33px;
17-
width: 90px;
18-
height: 45px;
19-
font-weight: 500;
20-
font-size: medium;
21-
background-color: transparent;
22-
border: none;
23-
}
24-
25-
.btn-filter:hover {
26-
background-color: #f4f4f4;
27-
}
28-
2914
@media (max-width: @screen-md) {
3015
.btn-filter {
3116
text-align: left;
@@ -118,6 +103,7 @@
118103
.collapsible {
119104
color: rgb(73, 73, 73);
120105
background-color: @alert-info-bg;
106+
position: relative;
121107
padding-top: 0px;
122108
padding-bottom: 0px;
123109
border: none;
@@ -131,6 +117,7 @@
131117

132118
.collapsible:focus {
133119
outline: solid;
120+
z-index: 1;
134121
}
135122

136123
.tfmTab {

src/NuGetGallery/Scripts/gallery/page-list-packages.js

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@ $(function() {
88
const allFrameworks = document.querySelectorAll('.framework');
99
const allTfms = document.querySelectorAll('.tfm');
1010

11-
// Hide the default search bar in the page header
12-
const defaultSearchBarHeader = document.getElementById("search-bar-header");
13-
defaultSearchBarHeader.parentNode.removeChild(defaultSearchBarHeader);
14-
1511
// Checkbox logic for Framework and Tfm filters
1612
for (const framework of allFrameworks) {
1713
framework.addEventListener('click', clickFrameworkCheckbox);
@@ -23,12 +19,10 @@ $(function() {
2319

2420
function clickFrameworkCheckbox() {
2521
this.indeterminate = false;
26-
updateFrameworkFilters(searchForm.frameworks, this.id, this.checked);
2722

2823
const tfms = document.querySelectorAll('[parent=' + this.id + ']');
2924
tfms.forEach((tfm) => {
3025
tfm.checked = false;
31-
updateFrameworkFilters(searchForm.tfms, tfm.id, false);
3226
});
3327
}
3428

@@ -40,25 +34,12 @@ $(function() {
4034

4135
framework.checked = false;
4236
framework.indeterminate = checkedCount !== 0;
43-
updateFrameworkFilters(searchForm.frameworks, framework.id, false);
44-
45-
updateFrameworkFilters(searchForm.tfms, this.id, this.checked);
46-
}
47-
48-
// Update the query string with the selected Frameworks and Tfms
49-
function updateFrameworkFilters(searchField, frameworkName, add) {
50-
if (add) {
51-
searchField.value += frameworkName + ",";
52-
}
53-
else {
54-
searchField.value = searchField.value.replace(frameworkName + ",", "")
55-
}
5637
}
5738

5839
// Submit the form when a user changes the selected 'sortBy' option
5940
searchForm.sortby.addEventListener('change', (e) => {
6041
searchForm.sortby.value = e.target.value;
61-
searchForm.submit();
42+
submitSearchForm();
6243
});
6344

6445
// Accordion/collapsible logic
@@ -95,6 +76,28 @@ $(function() {
9576
}
9677
}
9778

79+
searchForm.addEventListener('submit', submitSearchForm);
80+
81+
function submitSearchForm() {
82+
constructFilterParameter(searchForm.frameworks, allFrameworks);
83+
constructFilterParameter(searchForm.tfms, allTfms);
84+
searchForm.submit();
85+
}
86+
87+
// Update the query string with the selected frameworks and tfms
88+
function constructFilterParameter(searchField, checkboxList) {
89+
searchField.value = "";
90+
91+
checkboxList.forEach((framework) => {
92+
if (framework.checked) {
93+
searchField.value += framework.id + ",";
94+
}
95+
});
96+
97+
// trim trailing commas
98+
searchField.value = searchField.value.replace(/,+$/, '');
99+
}
100+
98101
// Initialize state for Framework and Tfm checkboxes
99102
// NOTE: We first click on all selected Framework checkboxes and then on the selected Tfm checkboxes, which
100103
// allows us to correctly handle cases where a Framework AND one of its child Tfms is present in the query
@@ -107,5 +110,12 @@ $(function() {
107110

108111
inputFrameworkFilters.map(id => document.getElementById(id)).forEach(checkbox => checkbox.click());
109112
inputTfmFilters.map(id => document.getElementById(id)).forEach(checkbox => checkbox.click());
113+
114+
// expand TFM section if a TFM from that generation has been selected
115+
allFrameworks.forEach((checkbox) => {
116+
if (checkbox.indeterminate) {
117+
document.querySelector('[tab=' + checkbox.id + ']').click();
118+
}
119+
});
110120
}
111121
});

src/NuGetGallery/Views/Shared/ListPackages.cshtml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
ViewBag.SortText = String.IsNullOrWhiteSpace(Model.SearchTerm) ? "recent installs" : "relevance";
55
ViewBag.Tab = "Packages";
66
ViewBag.BlockSearchEngineIndexing = !String.IsNullOrWhiteSpace(Model.SearchTerm) || Model.PageIndex != 0;
7+
ViewBag.ShowSearchInNavbar = false;
78
}
89

910
@helper AddPackageFilterOption(string optionName, string optionValue, bool isDefault = false)
@@ -76,6 +77,8 @@
7677
@if (Model.IsAdvancedSearchFlightEnabled)
7778
{
7879
<div class="row clearfix advanced-search-panel" id="advancedSearchPanel">
80+
<input type="text" hidden id="frameworks" name="frameworks" value="@Model.Frameworks">
81+
<input type="text" hidden id="tfms" name="tfms" value="@Model.Tfms">
7982
@if (Model.IsFrameworkFilteringEnabled)
8083
{
8184
<div>
@@ -133,9 +136,7 @@
133136
</div>
134137

135138
</div>
136-
<input type="text" hidden id="frameworks" name="frameworks" value="@Model.Frameworks">
137-
<input type="text" hidden id="tfms" name="tfms" value="@Model.Tfms">
138-
<input type="hidden" id="prerel" name="prerel" value="@Model.IncludePrerelease.ToString()">
139+
<input type="hidden" id="prerel" name="prerel" value="@Model.IncludePrerelease.ToString().ToLower()">
139140
</div>
140141
}
141142
</div>

0 commit comments

Comments
 (0)