diff --git a/app/lib/frontend/handlers.dart b/app/lib/frontend/handlers.dart index a98716e79c..6f2ab45d88 100644 --- a/app/lib/frontend/handlers.dart +++ b/app/lib/frontend/handlers.dart @@ -372,13 +372,15 @@ SearchQuery _parseSearchQuery(shelf.Request request, String platform) { final SearchOrder sortOrder = (sortParam == null || sortParam.isEmpty) ? null : parseSearchOrder(sortParam); - + final isApiEnabled = request.requestedUri.queryParameters['api'] != '0'; return new SearchQuery.parse( - query: queryText, - platform: platform, - order: sortOrder, - offset: offset, - limit: PackageLinks.resultsPerPage); + query: queryText, + platform: platform, + order: sortOrder, + offset: offset, + limit: PackageLinks.resultsPerPage, + apiEnabled: isApiEnabled, + ); } /// Handles requests for /packages/... - multiplexes to HTML/JSON handlers diff --git a/app/lib/frontend/templates.dart b/app/lib/frontend/templates.dart index 1243c5fc8c..714c5c9f3c 100644 --- a/app/lib/frontend/templates.dart +++ b/app/lib/frontend/templates.dart @@ -723,6 +723,7 @@ class TemplateService { 'search_query_placeholder': 'Search ${platformDict.name} packages', 'search_sort_param': searchSort, 'platform_tabs_html': platformTabs, + 'api_search_enabled': searchQuery?.isApiEnabled ?? true, 'landing_blurb_html': platformDict.landingBlurb, // This is not escaped as it is already escaped by the caller. 'content_html': contentHtml, diff --git a/app/lib/search/index_simple.dart b/app/lib/search/index_simple.dart index b44e419a5f..4ba82fac52 100644 --- a/app/lib/search/index_simple.dart +++ b/app/lib/search/index_simple.dart @@ -184,8 +184,11 @@ class SimplePackageIndex implements PackageIndex { } // do text matching - final textResults = _searchText(packages, query.parsedQuery.text, - _apiSearchEnabled || query.parsedQuery.isApiEnabled); + final isApiEnabled = query.isApiEnabled || + _apiSearchEnabled || + query.parsedQuery.isApiEnabled; + final textResults = + _searchText(packages, query.parsedQuery.text, isApiEnabled); // filter packages that doesn't match text query if (textResults != null) { diff --git a/app/lib/shared/search_service.dart b/app/lib/shared/search_service.dart index 4cd8369100..1f2e2dd081 100644 --- a/app/lib/shared/search_service.dart +++ b/app/lib/shared/search_service.dart @@ -207,6 +207,7 @@ class SearchQuery { final int offset; final int limit; final bool isAd; + final bool isApiEnabled; SearchQuery._({ this.query, @@ -215,6 +216,7 @@ class SearchQuery { this.offset, this.limit, this.isAd, + this.isApiEnabled, }) : parsedQuery = new ParsedQuery._parse(query), platform = (platform == null || platform.isEmpty) ? null : platform; @@ -225,6 +227,7 @@ class SearchQuery { int offset: 0, int limit: 10, bool isAd, + bool apiEnabled, }) { final String q = query != null && query.trim().isNotEmpty ? query.trim() : null; @@ -235,6 +238,7 @@ class SearchQuery { offset: offset, limit: limit, isAd: isAd ?? false, + isApiEnabled: apiEnabled ?? true, ); } @@ -252,6 +256,7 @@ class SearchQuery { limit = max(_minSearchLimit, limit); final isAd = (uri.queryParameters['ad'] ?? '0') == '1'; + final apiEnabled = uri.queryParameters['api'] != '0'; return new SearchQuery.parse( query: q, @@ -260,6 +265,7 @@ class SearchQuery { offset: offset, limit: limit, isAd: isAd, + apiEnabled: apiEnabled, ); } @@ -270,6 +276,7 @@ class SearchQuery { int offset, int limit, bool isAd, + bool apiEnabled, }) { return new SearchQuery._( query: query ?? this.query, @@ -278,6 +285,7 @@ class SearchQuery { offset: offset ?? this.offset, limit: limit ?? this.limit, isAd: isAd ?? this.isAd, + isApiEnabled: apiEnabled ?? this.isApiEnabled, ); } @@ -289,13 +297,9 @@ class SearchQuery { 'limit': limit?.toString(), 'order': serializeSearchOrder(order), 'ad': isAd ? '1' : null, + 'api': isApiEnabled ? null : '0', }; - - for (var key in map.keys.toList()) { - if (map[key] == null) { - map.remove(key); - } - } + map.removeWhere((k, v) => v == null); return map; } @@ -329,6 +333,9 @@ class SearchQuery { final String paramName = 'sort'; params[paramName] = serializeSearchOrder(order); } + if (!isApiEnabled) { + params['api'] = '0'; + } if (page != null) { params['page'] = page.toString(); } diff --git a/app/test/frontend/golden/pkg_index_page.html b/app/test/frontend/golden/pkg_index_page.html index 30014dbf23..3b44b62fc6 100644 --- a/app/test/frontend/golden/pkg_index_page.html +++ b/app/test/frontend/golden/pkg_index_page.html @@ -67,12 +67,18 @@