diff --git a/lms/envs/common.py b/lms/envs/common.py index f7a6f15558cb..e92c670936f3 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -478,18 +478,6 @@ # .. toggle_tickets: https://openedx.atlassian.net/browse/TNL-6931 ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF = False -# Dashboard search feature -# .. toggle_name: settings.ENABLE_DASHBOARD_SEARCH -# .. toggle_implementation: DjangoSetting -# .. toggle_default: False -# .. toggle_description: When enabled, this adds a Search Your Courses widget on the dashboard page for searching -# courseware data. -# .. toggle_use_cases: open_edx -# .. toggle_creation_date: 2015-01-29 -# .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. -# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6506 -ENABLE_DASHBOARD_SEARCH = False - # log all information from cybersource callbacks LOG_POSTPAY_CALLBACKS = True diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py index 6319e7b085dd..59d4a87da513 100644 --- a/lms/envs/devstack.py +++ b/lms/envs/devstack.py @@ -180,9 +180,6 @@ def should_show_debug_toolbar(request): # pylint: disable=missing-function-docs } ] -########################## Dashboard Search ####################### -ENABLE_DASHBOARD_SEARCH = False - ########################## Certificates Web/HTML View ####################### CERTIFICATES_HTML_VIEW = True diff --git a/lms/envs/production.py b/lms/envs/production.py index b13f232f5bb7..8c476829841a 100644 --- a/lms/envs/production.py +++ b/lms/envs/production.py @@ -322,7 +322,6 @@ def get_env_setting(setting): if ( ENABLE_COURSEWARE_SEARCH or # noqa: F405 - ENABLE_DASHBOARD_SEARCH or # noqa: F405 ENABLE_COURSE_DISCOVERY or # noqa: F405 ENABLE_TEAMS # noqa: F405 ): diff --git a/lms/envs/test.py b/lms/envs/test.py index 392acc992302..f67e5f3fbc47 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -244,9 +244,6 @@ # Enable courseware search for tests ENABLE_COURSEWARE_SEARCH = True -# Enable dashboard search for tests -ENABLE_DASHBOARD_SEARCH = True - FACEBOOK_APP_SECRET = "Test" FACEBOOK_APP_ID = "Test" FACEBOOK_API_VERSION = "v2.8" diff --git a/lms/static/lms/js/build.js b/lms/static/lms/js/build.js index 1d5e1a983be0..9ed5de431703 100644 --- a/lms/static/lms/js/build.js +++ b/lms/static/lms/js/build.js @@ -19,8 +19,6 @@ */ modules: getModulesList([ 'course_bookmarks/js/course_bookmarks_factory', - 'course_search/js/course_search_factory', - 'course_search/js/dashboard_search_factory', 'discussion/js/discussion_board_factory', 'discussion/js/discussion_profile_page_factory', 'js/api_admin/catalog_preview_factory', diff --git a/lms/static/lms/js/spec/main.js b/lms/static/lms/js/spec/main.js index d8bc1417e86e..e50c888739af 100644 --- a/lms/static/lms/js/spec/main.js +++ b/lms/static/lms/js/spec/main.js @@ -678,7 +678,6 @@ 'course_bookmarks/js/spec/bookmark_button_view_spec.js', 'course_bookmarks/js/spec/bookmarks_list_view_spec.js', 'course_bookmarks/js/spec/course_bookmarks_factory_spec.js', - 'course_search/js/spec/course_search_spec.js', 'discussion/js/spec/discussion_board_factory_spec.js', 'discussion/js/spec/discussion_profile_page_factory_spec.js', 'discussion/js/spec/discussion_board_view_spec.js', diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 34270eea53d5..2b8bf2ead37e 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -75,11 +75,6 @@ }); }); - % if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): - <%static:require_module module_name="course_search/js/dashboard_search_factory" class_name="DashboardSearchFactory"> - DashboardSearchFactory(); - - % endif % if redirect_message: <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> var banner = new MessageBannerView({urgency: 'low', type: 'warning'}); @@ -275,24 +270,6 @@

${course_dir}

<%include file="${static.get_template_path('registration/account_activation_sidebar_notice.html')}" /> %endif - - % if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): - -
- % endif diff --git a/openedx/features/course_search/README.rst b/openedx/features/course_search/README.rst deleted file mode 100644 index 8d6e394c3ea5..000000000000 --- a/openedx/features/course_search/README.rst +++ /dev/null @@ -1,7 +0,0 @@ -Course Search -------------- - -This directory contains a Django application that allows a learner to search -the content of their course. To learn more, see `Enabling Open edX Search`_. - -.. _Enabling Open edX Search: https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/edx_search.html diff --git a/openedx/features/course_search/static/course_search/fixtures/course_content_page.html b/openedx/features/course_search/static/course_search/fixtures/course_content_page.html deleted file mode 100644 index df4aad75b1c5..000000000000 --- a/openedx/features/course_search/static/course_search/fixtures/course_content_page.html +++ /dev/null @@ -1,14 +0,0 @@ -
- -
-
-
diff --git a/openedx/features/course_search/static/course_search/fixtures/course_search_results_page.html b/openedx/features/course_search/static/course_search/fixtures/course_search_results_page.html deleted file mode 100644 index 1fb8c41cfb8a..000000000000 --- a/openedx/features/course_search/static/course_search/fixtures/course_search_results_page.html +++ /dev/null @@ -1,37 +0,0 @@ -
- -
-
-
-
-
diff --git a/openedx/features/course_search/static/course_search/fixtures/dashboard_search_page.html b/openedx/features/course_search/static/course_search/fixtures/dashboard_search_page.html deleted file mode 100644 index d711f4e4c62d..000000000000 --- a/openedx/features/course_search/static/course_search/fixtures/dashboard_search_page.html +++ /dev/null @@ -1,18 +0,0 @@ -
- -
-
-
diff --git a/openedx/features/course_search/static/course_search/js/collections/search_collection.js b/openedx/features/course_search/static/course_search/js/collections/search_collection.js deleted file mode 100644 index c9b1d94ef6da..000000000000 --- a/openedx/features/course_search/static/course_search/js/collections/search_collection.js +++ /dev/null @@ -1,126 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'underscore', - 'backbone', - 'course_search/js/models/search_result' - ], function(_, Backbone, SearchResult) { - return Backbone.Collection.extend({ - - model: SearchResult, - pageSize: 20, - totalCount: 0, - latestModelsCount: 0, - accessDeniedCount: 0, - searchTerm: '', - page: 0, - url: '/search/', - fetchXhr: null, - - initialize: function(models, options) { - // call super constructor - Backbone.Collection.prototype.initialize.apply(this, arguments); - if (options && options.courseId) { - this.url += options.courseId; - } - }, - - extractErrorMessage: function(response) { - var errorMessage; - if (response.responseJSON && response.responseJSON.error) { - // eslint-disable-next-line no-param-reassign - errorMessage = response.responseJSON.error || ''; - } else { - errorMessage = ''; // eslint-disable-line no-param-reassign - } - return errorMessage; - }, - - performSearch: function(searchTerm) { - if (this.fetchXhr) { - this.fetchXhr.abort(); - } - this.searchTerm = searchTerm || ''; - this.resetState(); - this.fetchXhr = this.fetch({ - data: { - search_string: searchTerm, - page_size: this.pageSize, - page_index: 0 - }, - type: 'POST', - success: function(self) { - self.errorMessage = ''; // eslint-disable-line no-param-reassign - self.trigger('search'); - }, - error: function(self, response) { - self.errorMessage = self.extractErrorMessage(response); // eslint-disable-line no-param-reassign - self.trigger('error'); - } - }); - }, - - loadNextPage: function() { - if (this.fetchXhr) { - this.fetchXhr.abort(); - } - this.fetchXhr = this.fetch({ - data: { - search_string: this.searchTerm, - page_size: this.pageSize, - page_index: this.page + 1 - }, - type: 'POST', - success: function(self) { - self.errorMessage = ''; // eslint-disable-line no-param-reassign - self.page += 1; // eslint-disable-line no-param-reassign - self.trigger('next'); - }, - error: function(self, response) { - self.errorMessage = self.extractErrorMessage(response); // eslint-disable-line no-param-reassign - self.trigger('error'); - }, - add: true, - reset: false, - remove: false - }); - }, - - cancelSearch: function() { - if (this.fetchXhr) { - this.fetchXhr.abort(); - } - this.resetState(); - }, - - parse: function(response) { - this.latestModelsCount = response.results.length; - this.totalCount = response.total; - this.accessDeniedCount += response.access_denied_count; - this.totalCount -= this.accessDeniedCount; - return _.map(response.results, function(result) { - return result.data; - }); - }, - - resetState: function() { - this.page = 0; - this.totalCount = 0; - this.latestModelsCount = 0; - this.accessDeniedCount = 0; - // empty the entire collection - this.reset(); - }, - - hasNextPage: function() { - return this.totalCount - ((this.page + 1) * this.pageSize) > 0; - }, - - latestModels: function() { - return this.last(this.latestModelsCount); - } - - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/course_search_factory.js b/openedx/features/course_search/static/course_search/js/course_search_factory.js deleted file mode 100644 index e7fb824a6b4d..000000000000 --- a/openedx/features/course_search/static/course_search/js/course_search_factory.js +++ /dev/null @@ -1,61 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'underscore', 'backbone', 'course_search/js/search_router', 'course_search/js/views/search_form', - 'course_search/js/collections/search_collection', 'course_search/js/views/course_search_results_view' - ], - function(_, Backbone, SearchRouter, CourseSearchForm, SearchCollection, CourseSearchResultsView) { - return function(options) { - var courseId = options.courseId; - var requestedQuery = options.query; - var supportsActive = options.supportsActive; - var router = new SearchRouter(); - var form = new CourseSearchForm({ - el: options.searchHeader, - supportsActive: supportsActive - }); - var collection = new SearchCollection([], {courseId: courseId}); - var results = new CourseSearchResultsView({collection: collection}); - var dispatcher = _.clone(Backbone.Events); - - dispatcher.listenTo(router, 'search', function(query) { - form.doSearch(query); - }); - - dispatcher.listenTo(form, 'search', function(query) { - results.showLoadingMessage(); - collection.performSearch(query); - router.navigate('search/' + query, {replace: true}); - }); - - dispatcher.listenTo(form, 'clear', function() { - collection.cancelSearch(); - results.clear(); - router.navigate(''); - }); - - dispatcher.listenTo(results, 'next', function() { - collection.loadNextPage(); - }); - - dispatcher.listenTo(collection, 'search', function() { - results.render(); - }); - - dispatcher.listenTo(collection, 'next', function() { - results.renderNext(); - }); - - dispatcher.listenTo(collection, 'error', function() { - results.showErrorMessage(); - }); - - // Perform a search if an initial query has been provided. - if (requestedQuery) { - router.trigger('search', requestedQuery); - } - }; - } - ); -}).call(this, define || RequireJS.define); diff --git a/openedx/features/course_search/static/course_search/js/dashboard_search_factory.js b/openedx/features/course_search/static/course_search/js/dashboard_search_factory.js deleted file mode 100644 index 3697ce381a14..000000000000 --- a/openedx/features/course_search/static/course_search/js/dashboard_search_factory.js +++ /dev/null @@ -1,55 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'underscore', 'backbone', 'course_search/js/search_router', 'course_search/js/views/search_form', - 'course_search/js/collections/search_collection', 'course_search/js/views/dashboard_search_results_view' - ], - function(_, Backbone, SearchRouter, SearchForm, SearchCollection, DashboardSearchResultsView) { - return function() { - var router = new SearchRouter(); - var form = new SearchForm({ - el: $('#dashboard-search-bar') - }); - var collection = new SearchCollection([]); - var results = new DashboardSearchResultsView({collection: collection}); - var dispatcher = _.clone(Backbone.Events); - - dispatcher.listenTo(router, 'search', function(query) { - form.doSearch(query); - }); - - dispatcher.listenTo(form, 'search', function(query) { - results.showLoadingMessage(); - collection.performSearch(query); - router.navigate('search/' + query, {replace: true}); - }); - - dispatcher.listenTo(form, 'clear', function() { - collection.cancelSearch(); - results.clear(); - router.navigate(''); - }); - - dispatcher.listenTo(results, 'next', function() { - collection.loadNextPage(); - }); - - dispatcher.listenTo(results, 'reset', function() { - form.resetSearchForm(); - }); - - dispatcher.listenTo(collection, 'search', function() { - results.render(); - }); - - dispatcher.listenTo(collection, 'next', function() { - results.renderNext(); - }); - - dispatcher.listenTo(collection, 'error', function() { - results.showErrorMessage(); - }); - }; - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/models/search_result.js b/openedx/features/course_search/static/course_search/js/models/search_result.js deleted file mode 100644 index 825090eda907..000000000000 --- a/openedx/features/course_search/static/course_search/js/models/search_result.js +++ /dev/null @@ -1,14 +0,0 @@ -(function(define) { - 'use strict'; - - define(['backbone'], function(Backbone) { - return Backbone.Model.extend({ - defaults: { - location: [], - content_type: '', - excerpt: '', - url: '' - } - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/search_router.js b/openedx/features/course_search/static/course_search/js/search_router.js deleted file mode 100644 index 097995ad1ddb..000000000000 --- a/openedx/features/course_search/static/course_search/js/search_router.js +++ /dev/null @@ -1,14 +0,0 @@ -(function(define) { - 'use strict'; - - define(['backbone'], function(Backbone) { - return Backbone.Router.extend({ - routes: { - 'search/:query': 'search' - }, - search: function(query) { - this.trigger('search', query); - } - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/spec/course_search_spec.js b/openedx/features/course_search/static/course_search/js/spec/course_search_spec.js deleted file mode 100644 index 281369f94d85..000000000000 --- a/openedx/features/course_search/static/course_search/js/spec/course_search_spec.js +++ /dev/null @@ -1,681 +0,0 @@ -define([ - 'jquery', - 'backbone', - 'logger', - 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', - 'common/js/spec_helpers/page_helpers', - 'common/js/spec_helpers/template_helpers', - 'course_search/js/models/search_result', - 'course_search/js/collections/search_collection', - 'course_search/js/search_router', - 'course_search/js/views/search_form', - 'course_search/js/views/search_item_view', - 'course_search/js/views/course_search_results_view', - 'course_search/js/views/dashboard_search_results_view', - 'course_search/js/course_search_factory', - 'course_search/js/dashboard_search_factory', - 'text!course_search/templates/course_search_item.underscore' -], function( - $, - Backbone, - Logger, - AjaxHelpers, - PageHelpers, - TemplateHelpers, - SearchResult, - SearchCollection, - SearchRouter, - SearchForm, - SearchItemView, - CourseSearchResultsView, - DashSearchResultsView, - CourseSearchFactory, - DashboardSearchFactory, - courseSearchItemTemplate -) { - 'use strict'; - - describe('Course Search', function() { - beforeEach(function() { - PageHelpers.preventBackboneChangingUrl(); - }); - - describe('SearchResult', function() { - beforeEach(function() { - this.result = new SearchResult(); - }); - - it('has properties', function() { - expect(this.result.get('location')).toBeDefined(); - expect(this.result.get('content_type')).toBeDefined(); - expect(this.result.get('excerpt')).toBeDefined(); - expect(this.result.get('url')).toBeDefined(); - }); - }); - - describe('SearchCollection', function() { - beforeEach(function() { - this.collection = new SearchCollection(); - - this.onSearch = jasmine.createSpy('onSearch'); - this.collection.on('search', this.onSearch); - - this.onNext = jasmine.createSpy('onNext'); - this.collection.on('next', this.onNext); - - this.onError = jasmine.createSpy('onError'); - this.collection.on('error', this.onError); - }); - - it('sends a request without a course ID', function() { - var collection = new SearchCollection([]); - spyOn($, 'ajax'); - collection.performSearch('search string'); - expect($.ajax.calls.mostRecent().args[0].url).toEqual('/search/'); - }); - - it('sends a request with course ID', function() { - var collection = new SearchCollection([], {courseId: 'edx101'}); - spyOn($, 'ajax'); - collection.performSearch('search string'); - expect($.ajax.calls.mostRecent().args[0].url).toEqual('/search/edx101'); - }); - - it('sends a request and parses the json result', function() { - var requests = AjaxHelpers.requests(this); - var response = { - total: 2, - access_denied_count: 1, - results: [{ - data: { - location: ['section', 'subsection', 'unit'], - url: '/some/url/to/content', - content_type: 'text', - excerpt: 'this is a short excerpt' - } - }] - }; - this.collection.performSearch('search string'); - AjaxHelpers.respondWithJson(requests, response); - - expect(this.onSearch).toHaveBeenCalled(); - expect(this.collection.totalCount).toEqual(1); - expect(this.collection.latestModelsCount).toEqual(1); - expect(this.collection.accessDeniedCount).toEqual(1); - expect(this.collection.page).toEqual(0); - expect(this.collection.first().attributes).toEqual(response.results[0].data); - }); - - it('handles errors', function() { - var requests = AjaxHelpers.requests(this); - this.collection.performSearch('search string'); - AjaxHelpers.respondWithError(requests, 500); - expect(this.onSearch).not.toHaveBeenCalled(); - expect(this.onError).toHaveBeenCalled(); - }); - - it('loads next page', function() { - var requests = AjaxHelpers.requests(this); - var response = {total: 35, results: []}; - this.collection.loadNextPage(); - AjaxHelpers.respondWithJson(requests, response); - expect(this.onNext).toHaveBeenCalled(); - expect(this.onError).not.toHaveBeenCalled(); - }); - - it('sends correct paging parameters', function() { - var requests = AjaxHelpers.requests(this); - var searchString = 'search string'; - var response = {total: 52, results: []}; - this.collection.performSearch(searchString); - AjaxHelpers.respondWithJson(requests, response); - this.collection.loadNextPage(); - AjaxHelpers.respondWithJson(requests, response); - spyOn($, 'ajax'); - this.collection.loadNextPage(); - expect($.ajax.calls.mostRecent().args[0].url).toEqual(this.collection.url); - expect($.ajax.calls.mostRecent().args[0].data.search_string).toEqual(searchString); - expect($.ajax.calls.mostRecent().args[0].data.page_size).toEqual(this.collection.pageSize); - expect($.ajax.calls.mostRecent().args[0].data.page_index).toEqual(2); - }); - - it('has next page', function() { - var requests = AjaxHelpers.requests(this); - var response = {total: 35, access_denied_count: 5, results: []}; - this.collection.performSearch('search string'); - AjaxHelpers.respondWithJson(requests, response); - expect(this.collection.hasNextPage()).toEqual(true); - this.collection.loadNextPage(); - AjaxHelpers.respondWithJson(requests, response); - expect(this.collection.hasNextPage()).toEqual(false); - }); - - it('aborts any previous request', function() { - var requests = AjaxHelpers.requests(this); - var response = {total: 35, results: []}; - - this.collection.performSearch('old search'); - this.collection.performSearch('new search'); - AjaxHelpers.skipResetRequest(requests); - AjaxHelpers.respondWithJson(requests, response); - expect(this.onSearch.calls.count()).toEqual(1); - - this.collection.performSearch('old search'); - this.collection.cancelSearch(); - AjaxHelpers.skipResetRequest(requests); - expect(this.onSearch.calls.count()).toEqual(1); - - this.collection.loadNextPage(); - this.collection.loadNextPage(); - AjaxHelpers.skipResetRequest(requests); - AjaxHelpers.respondWithJson(requests, response); - expect(this.onNext.calls.count()).toEqual(1); - }); - - describe('reset state', function() { - beforeEach(function() { - this.collection.page = 2; - this.collection.totalCount = 35; - this.collection.latestModelsCount = 5; - }); - - it('resets state when performing new search', function() { - this.collection.performSearch('search string'); - expect(this.collection.models.length).toEqual(0); - expect(this.collection.page).toEqual(0); - expect(this.collection.totalCount).toEqual(0); - expect(this.collection.latestModelsCount).toEqual(0); - }); - - it('resets state when canceling a search', function() { - this.collection.cancelSearch(); - expect(this.collection.models.length).toEqual(0); - expect(this.collection.page).toEqual(0); - expect(this.collection.totalCount).toEqual(0); - expect(this.collection.latestModelsCount).toEqual(0); - }); - }); - }); - - describe('SearchRouter', function() { - beforeEach(function() { - this.router = new SearchRouter(); - this.onSearch = jasmine.createSpy('onSearch'); - this.router.on('search', this.onSearch); - }); - - it('has a search route', function() { - expect(this.router.routes['search/:query']).toEqual('search'); - }); - - it('triggers a search event', function() { - var query = 'mercury'; - this.router.search(query); - expect(this.onSearch).toHaveBeenCalledWith(query); - }); - }); - - describe('SearchItemView', function() { - beforeEach(function() { - this.model = new SearchResult({ - location: ['section', 'subsection', 'unit'], - content_type: 'Video', - course_name: 'Course Name', - excerpt: 'A short excerpt.', - url: 'path/to/content' - }); - - this.seqModel = new SearchResult({ - location: ['section', 'subsection'], - content_type: 'Sequence', - course_name: 'Course Name', - excerpt: 'A short excerpt.', - url: 'path/to/content' - }); - - this.item = new SearchItemView({ - model: this.model, - template: courseSearchItemTemplate - }); - this.item.render(); - this.seqItem = new SearchItemView({ - model: this.seqModel, - template: courseSearchItemTemplate - }); - this.seqItem.render(); - }); - - it('rendersItem', function() { - expect(this.item.$el).toHaveAttr('role', 'region'); - expect(this.item.$el).toHaveAttr('aria-label', 'search result'); - expect(this.item.$el).toContainElement('a[href="' + this.model.get('url') + '"]'); - expect(this.item.$el.find('.result-type i')).toHaveClass('fa-' + this.item.unitIcon()); - expect(this.item.$el.find('.result-excerpt')).toContainHtml(this.model.get('excerpt')); - expect(this.item.$el.find('.result-link')).toContainHtml('section / subsection / unit'); - }); - - it('rendersSequentialItem', function() { - expect(this.seqItem.$el).toHaveAttr('role', 'region'); - expect(this.seqItem.$el).toHaveAttr('aria-label', 'search result'); - expect(this.seqItem.$el).toContainElement('a[href="' + this.seqModel.get('url') + '"]'); - expect(this.seqItem.$el.find('.result-type i')).toHaveClass('fa-' + this.seqItem.unitIcon()); - expect(this.seqItem.$el.find('.result-excerpt')).toBeEmpty(); - expect(this.seqItem.$el.find('.result-link')).toContainHtml('section / subsection'); - }); - - it('logsSearchItemViewEvent', function() { - this.model.collection = new SearchCollection([this.model], {course_id: 'edx101'}); - this.item.render(); - // Mock the redirect call - spyOn(this.item, 'redirect').and.callFake(function() {}); - spyOn(Logger, 'log').and.returnValue($.Deferred().resolve()); - this.item.$el.find('a').trigger('click'); - expect(this.item.redirect).toHaveBeenCalled(); - this.item.$el.trigger('click'); - expect(this.item.redirect).toHaveBeenCalled(); - }); - }); - - describe('SearchForm', function() { - function trimsInputString() { - var term = ' search string '; - $('.search-field').val(term); - $('form').trigger('submit'); - expect(this.onSearch).toHaveBeenCalledWith($.trim(term)); - } - - function doesSearch() { - var term = ' search string '; - $('.search-field').val(term); - this.form.doSearch(term); - expect(this.onSearch).toHaveBeenCalledWith($.trim(term)); - expect($('.search-field').val()).toEqual(term.trim()); - expect($('.search-field')).toHaveClass('is-active'); - expect($('.search-button')).toBeHidden(); - expect($('.cancel-button')).toBeVisible(); - } - - function triggersSearchEvent() { - var term = 'search string'; - $('.search-field').val(term); - $('form').trigger('submit'); - expect(this.onSearch).toHaveBeenCalledWith(term); - expect($('.search-field')).toHaveClass('is-active'); - expect($('.search-button')).toBeHidden(); - expect($('.cancel-button')).toBeVisible(); - } - - function clearsSearchOnCancel() { - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - $('.cancel-button').trigger('click'); - expect($('.search-field')).not.toHaveClass('is-active'); - expect($('.search-button')).toBeVisible(); - expect($('.cancel-button')).toBeHidden(); - expect($('.search-field')).toHaveValue(''); - } - - function clearsSearchOnEmpty() { - $('.search-field').val(''); - $('form').trigger('submit'); - expect(this.onClear).toHaveBeenCalled(); - expect($('.search-field')).not.toHaveClass('is-active'); - expect($('.cancel-button')).toBeHidden(); - expect($('.search-button')).toBeVisible(); - } - - describe('SearchForm', function() { - beforeEach(function() { - loadFixtures('course_search/fixtures/course_content_page.html'); - this.form = new SearchForm({ - el: '.search-bar' - }); - this.onClear = jasmine.createSpy('onClear'); - this.onSearch = jasmine.createSpy('onSearch'); - this.form.on('clear', this.onClear); - this.form.on('search', this.onSearch); - }); - it('trims input string', trimsInputString); - it('handles calls to doSearch', doesSearch); - it('triggers a search event and changes to active state', triggersSearchEvent); - it('clears search when clicking on cancel button', clearsSearchOnCancel); - it('clears search when search box is empty', clearsSearchOnEmpty); - }); - }); - - describe('SearchResultsView', function() { - function showsLoadingMessage() { - this.resultsView.showLoadingMessage(); - expect(this.resultsView.$el).toBeVisible(); - expect(this.resultsView.$el).not.toBeEmpty(); - } - - function showsErrorMessage() { - this.resultsView.showErrorMessage(); - expect(this.resultsView.$el).toBeVisible(); - expect(this.resultsView.$el).not.toBeEmpty(); - } - - function returnsToContent() { - this.resultsView.clear(); - expect(this.resultsView.$el).toBeHidden(); - expect(this.resultsView.$el).toBeEmpty(); - } - - function showsNoResultsMessage() { - this.collection.reset(); - this.resultsView.render(); - expect(this.resultsView.$el).toContainHtml('no results'); - expect(this.resultsView.$el.find('ol')).not.toExist(); - } - - function rendersSearchResults() { - var searchResults = [{ - location: ['section', 'subsection', 'unit'], - url: '/some/url/to/content', - content_type: 'text', - course_name: '', - excerpt: 'this is a short excerpt' - }]; - this.collection.set(searchResults); - this.collection.latestModelsCount = 1; - this.collection.totalCount = 1; - - this.resultsView.render(); - expect(this.resultsView.$el.find('ol')[0]).toExist(); - expect(this.resultsView.$el.find('li').length).toEqual(1); - expect(this.resultsView.$el).toContainHtml( - this.collection.totalCount - + ' result found for "' - + this.collection.searchTerm + '"' - ); - expect(this.resultsView.$el).toContainHtml('this is a short excerpt'); - - this.collection.set(searchResults); - this.collection.totalCount = 2; - this.resultsView.renderNext(); - expect(this.resultsView.$el.find('li').length).toEqual(2); - } - - function showsMoreResultsLink() { - this.collection.totalCount = 123; - this.collection.hasNextPage = function() { return true; }; - this.resultsView.render(); - expect(this.resultsView.$el.find('a.search-load-next')[0]).toExist(); - - this.collection.totalCount = 123; - this.collection.hasNextPage = function() { return false; }; - this.resultsView.render(); - expect(this.resultsView.$el.find('a.search-load-next')[0]).not.toExist(); - } - - function triggersNextPageEvent() { - var onNext = jasmine.createSpy('onNext'); - this.resultsView.on('next', onNext); - this.collection.totalCount = 123; - this.collection.hasNextPage = function() { return true; }; - this.resultsView.render(); - this.resultsView.$el.find('a.search-load-next').click(); - expect(onNext).toHaveBeenCalled(); - } - - function showsLoadMoreSpinner() { - this.collection.totalCount = 123; - this.collection.hasNextPage = function() { return true; }; - this.resultsView.render(); - expect(this.resultsView.$el.find('a.search-load-next .icon')).toBeHidden(); - this.resultsView.loadNext(); - // toBeVisible does not work with inline - expect(this.resultsView.$el.find('a.search-load-next .icon')).toHaveCss({ - display: 'inline' - }); - this.resultsView.renderNext(); - expect(this.resultsView.$el.find('a.search-load-next .icon')).toBeHidden(); - } - - function beforeEachHelper(SearchResultsView) { - var MockCollection = Backbone.Collection.extend({ - hasNextPage: function() {}, - latestModelsCount: 0, - pageSize: 20, - latestModels: function() { - return SearchCollection.prototype.latestModels.apply(this, arguments); - } - }); - - this.collection = new MockCollection(); - this.collection.searchTerm = 'demo'; - this.resultsView = new SearchResultsView({collection: this.collection}); - } - - describe('CourseSearchResultsView', function() { - beforeEach(function() { - loadFixtures('course_search/fixtures/course_content_page.html'); - beforeEachHelper.call(this, CourseSearchResultsView); - this.contentElementDisplayValue = 'table-cell'; - }); - it('shows loading message', showsLoadingMessage); - it('shows error message', showsErrorMessage); - xit('returns to content', returnsToContent); - it('shows a message when there are no results', showsNoResultsMessage); - it('renders search results', rendersSearchResults); - it('shows a link to load more results', showsMoreResultsLink); - it('triggers an event for next page', triggersNextPageEvent); - it('shows a spinner when loading more results', showsLoadMoreSpinner); - }); - - describe('DashSearchResultsView', function() { - beforeEach(function() { - loadFixtures('course_search/fixtures/dashboard_search_page.html'); - beforeEachHelper.call(this, DashSearchResultsView); - this.contentElementDisplayValue = 'block'; - }); - it('shows loading message', showsLoadingMessage); - it('shows error message', showsErrorMessage); - it('returns to content', returnsToContent); - it('shows a message when there are no results', showsNoResultsMessage); - it('renders search results', rendersSearchResults); - it('shows a link to load more results', showsMoreResultsLink); - it('triggers an event for next page', triggersNextPageEvent); - it('shows a spinner when loading more results', showsLoadMoreSpinner); - }); - }); - - describe('SearchApp', function() { - function showsLoadingMessage() { - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - expect(this.$searchResults).toBeVisible(); - expect(this.$searchResults).not.toBeEmpty(); - } - - function performsSearch() { - var requests = AjaxHelpers.requests(this); - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - AjaxHelpers.respondWithJson(requests, { - total: 1337, - access_denied_count: 12, - results: [{ - data: { - location: ['section', 'subsection', 'unit'], - url: '/some/url/to/content', - content_type: 'text', - excerpt: 'this is a short excerpt', - course_name: '' - } - }] - }); - expect($('.search-info')).toExist(); - expect($('.search-result-list')).toBeVisible(); - expect(this.$searchResults.find('li').length).toEqual(1); - } - - function showsErrorMessage() { - var requests = AjaxHelpers.requests(this); - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - AjaxHelpers.respondWithError(requests, 500, {}); - expect(this.$searchResults).toContainHtml('There was an error'); - } - - function updatesNavigationHistory() { - $('.search-field').val('edx'); - $('.search-button').trigger('click'); - expect(Backbone.history.navigate.calls.mostRecent().args[0]).toContain('search/edx'); - $('.cancel-button').trigger('click'); - expect(Backbone.history.navigate.calls.argsFor(1)[0]).toBe(''); - } - - function cancelsSearchRequest() { - var requests = AjaxHelpers.requests(this); - // send search request to server - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - // cancel the search and then skip the request that was marked as reset - $('.cancel-button').trigger('click'); - AjaxHelpers.skipResetRequest(requests); - // there should be no results - expect(this.$searchResults).toBeHidden(); - } - - function clearsResults() { - $('.cancel-button').trigger('click'); - expect(this.$searchResults).toBeHidden(); - } - - function loadsNextPage() { - var requests = AjaxHelpers.requests(this); - var response = { - total: 1337, - access_denied_count: 12, - results: [{ - data: { - location: ['section', 'subsection', 'unit'], - url: '/some/url/to/content', - content_type: 'text', - excerpt: 'this is a short excerpt', - course_name: '' - } - }] - }; - var body; - $('.search-field').val('query'); - $('.search-button').trigger('click'); - AjaxHelpers.respondWithJson(requests, response); - expect(this.$searchResults.find('li').length).toEqual(1); - expect($('.search-load-next')).toBeVisible(); - $('.search-load-next').trigger('click'); - body = requests[1].requestBody; - expect(body).toContain('search_string=query'); - expect(body).toContain('page_index=1'); - AjaxHelpers.respondWithJson(requests, response); - expect(this.$searchResults.find('li').length).toEqual(2); - } - - function navigatesToSearch() { - var requests = AjaxHelpers.requests(this); - Backbone.history.start(); - Backbone.history.loadUrl('search/query'); - expect(requests[0].requestBody).toContain('search_string=query'); - } - - describe('CourseSearchApp', function() { - beforeEach(function() { - var courseId = 'a/b/c'; - loadFixtures('course_search/fixtures/course_content_page.html'); - CourseSearchFactory({ - courseId: courseId, - searchHeader: $('.search-bar') - }); - spyOn(Backbone.history, 'navigate'); - this.$contentElement = $('#course-content'); - this.contentElementDisplayValue = 'table-cell'; - this.$searchResults = $('.search-results'); - }); - - afterEach(function() { - Backbone.history.stop(); - }); - - it('shows loading message on search', showsLoadingMessage); - it('performs search', performsSearch); - it('shows an error message', showsErrorMessage); - it('updates navigation history', updatesNavigationHistory); - xit('cancels search request', cancelsSearchRequest); - xit('clears results', clearsResults); - it('loads next page', loadsNextPage); - it('navigates to search', navigatesToSearch); - }); - - describe('DashboardSearchApp', function() { - beforeEach(function() { - loadFixtures('course_search/fixtures/dashboard_search_page.html'); - DashboardSearchFactory(); - - spyOn(Backbone.history, 'navigate'); - this.contentElementDisplayValue = 'block'; - this.$searchResults = $('.search-results'); - }); - - afterEach(function() { - Backbone.history.stop(); - }); - - it('shows loading message on search', showsLoadingMessage); - it('performs search', performsSearch); - it('shows an error message', showsErrorMessage); - it('updates navigation history', updatesNavigationHistory); - it('cancels search request', cancelsSearchRequest); - it('clears results', clearsResults); - it('loads next page', loadsNextPage); - it('navigates to search', navigatesToSearch); - it('returns to course list', function() { - var requests = AjaxHelpers.requests(this); - $('.search-field').val('search string'); - $('.search-button').trigger('click'); - AjaxHelpers.respondWithJson(requests, { - total: 1337, - access_denied_count: 12, - results: [{ - data: { - location: ['section', 'subsection', 'unit'], - url: '/some/url/to/content', - content_type: 'text', - excerpt: 'this is a short excerpt', - course_name: '' - } - }] - }); - $('.search-form .cancel-button').trigger('click'); - expect(this.$searchResults).toBeHidden(); - expect(this.$searchResults).toBeEmpty(); - }); - }); - - describe('Course Search Results Page', function() { - beforeEach(function() { - var courseId = 'a/b/c'; - loadFixtures('course_search/fixtures/course_search_results_page.html'); - CourseSearchFactory({ - courseId: courseId, - searchHeader: $('.page-header-search') - }); - spyOn(Backbone.history, 'navigate'); - this.$contentElement = null; // The search results page does not show over a content element - this.contentElementDisplayValue = 'table-cell'; - this.$searchResults = $('.search-results'); - }); - - afterEach(function() { - Backbone.history.stop(); - }); - - it('shows loading message on search', showsLoadingMessage); - it('performs search', performsSearch); - it('shows an error message', showsErrorMessage); - it('loads next page', loadsNextPage); - }); - }); - }); -}); diff --git a/openedx/features/course_search/static/course_search/js/views/course_search_results_view.js b/openedx/features/course_search/static/course_search/js/views/course_search_results_view.js deleted file mode 100644 index e0b8159b4742..000000000000 --- a/openedx/features/course_search/static/course_search/js/views/course_search_results_view.js +++ /dev/null @@ -1,36 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'course_search/js/views/search_results_view', - 'text!course_search/templates/course_search_results.underscore', - 'text!course_search/templates/course_search_item.underscore' - ], function( - SearchResultsView, - courseSearchResultsTemplate, - courseSearchItemTemplate - ) { - return SearchResultsView.extend({ - el: '.search-results', - contentElement: '#course-content', - coursewareResultsWrapperElement: '.courseware-results-wrapper', - resultsTemplate: courseSearchResultsTemplate, - itemTemplate: courseSearchItemTemplate, - events: { - 'click .search-load-next': 'loadNext' - }, - - clear: function() { - SearchResultsView.prototype.clear.call(this); - $(this.coursewareResultsWrapperElement).hide(); - this.$contentElement.css('display', 'table-cell'); - }, - - showResults: function() { - SearchResultsView.prototype.showResults.call(this); - $(this.coursewareResultsWrapperElement).css('display', 'table-cell'); - } - - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js b/openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js deleted file mode 100644 index cd1f2458802c..000000000000 --- a/openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js +++ /dev/null @@ -1,29 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'course_search/js/views/search_results_view', - 'text!course_search/templates/dashboard_search_results.underscore', - 'text!course_search/templates/dashboard_search_item.underscore' - ], function( - SearchResultsView, - dashboardSearchResultsTemplate, - dashboardSearchItemTemplate - ) { - return SearchResultsView.extend({ - el: '.search-results', - resultsTemplate: dashboardSearchResultsTemplate, - itemTemplate: dashboardSearchItemTemplate, - events: { - 'click .search-load-next': 'loadNext' - }, - - backToCourses: function() { - this.clear(); - this.trigger('reset'); - return false; - } - - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/views/search_form.js b/openedx/features/course_search/static/course_search/js/views/search_form.js deleted file mode 100644 index e31fc816c6b4..000000000000 --- a/openedx/features/course_search/static/course_search/js/views/search_form.js +++ /dev/null @@ -1,68 +0,0 @@ -(function(define) { - 'use strict'; - - define(['jquery', 'backbone'], function($, Backbone) { - return Backbone.View.extend({ - - el: '', - events: { - 'submit .search-form': 'submitForm', - 'click .cancel-button': 'clearSearch' - }, - - initialize: function(options) { - this.$searchField = this.$el.find('.search-field'); - this.$searchButton = this.$el.find('.search-button'); - this.$cancelButton = this.$el.find('.cancel-button'); - this.supportsActive = options.supportsActive === undefined ? true : options.supportsActive; - }, - - submitForm: function(event) { - event.preventDefault(); - this.doSearch(); - }, - - doSearch: function(term) { - var trimmedTerm; - if (term) { - trimmedTerm = term.trim(); - this.$searchField.val(trimmedTerm); - } else { - trimmedTerm = this.$searchField.val().trim(); - } - if (trimmedTerm) { - this.setActiveStyle(); - this.trigger('search', trimmedTerm); - } else { - this.clearSearch(); - } - }, - - resetSearchForm: function() { - this.$searchField.val(''); - this.setInitialStyle(); - }, - - clearSearch: function() { - this.resetSearchForm(); - this.trigger('clear'); - }, - - setActiveStyle: function() { - if (this.supportsActive) { - this.$searchField.addClass('is-active'); - this.$searchButton.hide(); - this.$cancelButton.show(); - } - }, - - setInitialStyle: function() { - if (this.supportsActive) { - this.$searchField.removeClass('is-active'); - this.$searchButton.show(); - this.$cancelButton.hide(); - } - } - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/views/search_item_view.js b/openedx/features/course_search/static/course_search/js/views/search_item_view.js deleted file mode 100644 index 997ba697dd61..000000000000 --- a/openedx/features/course_search/static/course_search/js/views/search_item_view.js +++ /dev/null @@ -1,95 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'jquery', - 'underscore', - 'backbone', - 'gettext', - 'logger', - 'edx-ui-toolkit/js/utils/html-utils' - ], function($, _, Backbone, gettext, Logger, HtmlUtils) { - return Backbone.View.extend({ - - tagName: 'li', - className: 'search-results-item', - attributes: { - role: 'region', - 'aria-label': 'search result' - }, - - events: { - click: 'logSearchItem' - }, - - initialize: function(options) { - this.template = options.template; - }, - - unitIcon: function() { - var icon = null; - switch (this.model.attributes.content_type) { - case 'Video': - icon = 'film'; - break; - case 'CAPA': - icon = 'edit'; - break; - case 'Sequence': - icon = 'compass'; - break; - default: - icon = 'book'; - break; - } - return icon; - }, - - render: function() { - var data = _.clone(this.model.attributes); - - // Drop the preview text and result type if the search term is found - // in the title/location in the course hierarchy - if (this.model.get('content_type') === 'Sequence') { - data.excerpt = ''; - data.content_type = ''; - } - data.unit_icon = this.unitIcon(); - data.excerptHtml = HtmlUtils.HTML(data.excerpt); - delete data.excerpt; - HtmlUtils.setHtml(this.$el, HtmlUtils.template(this.template)(data)); - return this; - }, - - /** - * Redirect to a URL. Mainly useful for mocking out in tests. - * @param {string} url The URL to redirect to. - */ - redirect: function(url) { - window.location.href = url; - }, - - logSearchItem: function(event) { - var self = this; - var target = this.model.id; - var link = this.model.get('url'); - var collection = this.model.collection; - var page = collection.page; - var pageSize = collection.pageSize; - var searchTerm = collection.searchTerm; - var index = collection.indexOf(this.model); - - event.preventDefault(); - - Logger.log('edx.course.search.result_selected', { - search_term: searchTerm, - result_position: (page * pageSize) + index, - result_link: target - }).always(function() { - self.redirect(link); - }); - } - - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/js/views/search_results_view.js b/openedx/features/course_search/static/course_search/js/views/search_results_view.js deleted file mode 100644 index ecce90d18174..000000000000 --- a/openedx/features/course_search/static/course_search/js/views/search_results_view.js +++ /dev/null @@ -1,121 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'jquery', - 'underscore', - 'backbone', - 'edx-ui-toolkit/js/utils/html-utils', - 'edx-ui-toolkit/js/utils/string-utils', - 'course_search/js/views/search_item_view', - 'text!course_search/templates/search_loading.underscore', - 'text!course_search/templates/search_error.underscore' - ], function($, _, Backbone, HtmlUtils, StringUtils, SearchItemView, searchLoadingTemplate, searchErrorTemplate) { - return Backbone.View.extend({ - - // these should be defined by subclasses - el: '', - contentElement: '', - resultsTemplate: null, - itemTemplate: null, - loadingTemplate: searchLoadingTemplate, - errorTemplate: searchErrorTemplate, - events: {}, - spinner: '.search-load-next .icon', - - initialize: function() { - this.$contentElement = this.contentElement ? $(this.contentElement) : $([]); - }, - - render: function() { - HtmlUtils.setHtml(this.$el, HtmlUtils.template(this.resultsTemplate)({ - totalCount: this.collection.totalCount, - totalCountMsg: this.totalCountMsg(), - pageSize: this.collection.pageSize, - hasMoreResults: this.collection.hasNextPage(), - searchTerm: this.collection.searchTerm - })); - this.renderItems(); - this.$el.find(this.spinner).hide(); - this.showResults(); - return this; - }, - - renderNext: function() { - // total count may have changed - this.$el.find('.search-count').text(this.totalCountMsg()); - this.renderItems(); - if (!this.collection.hasNextPage()) { - this.$el.find('.search-load-next').remove(); - } - this.$el.find(this.spinner).hide(); - }, - - renderItems: function() { - var latest = this.collection.latestModels(); - var items = latest.map(function(result) { - var item = new SearchItemView({ - model: result, - template: this.itemTemplate - }); - return item.render().el; - }, this); - // xss-lint: disable=javascript-jquery-append - this.$el.find('ol').append(items); - }, - - totalCountMsg: function() { - var fmt = ngettext( - '{total_results} result found for "{search_term}"', - '{total_results} results found for "{search_term}"', - this.collection.totalCount - ); - return StringUtils.interpolate(fmt, { - total_results: this.collection.totalCount, - search_term: this.collection.searchTerm - }); - }, - - clear: function() { - this.$el.hide().empty(); - this.$contentElement.show(); - }, - - showResults: function() { - this.$el.show(); - this.$contentElement.hide(); - }, - - showLoadingMessage: function() { - // Empty any previous loading/error message - $('#loading-message').html(''); - $('#error-message').html(''); - - // Show the loading message - HtmlUtils.setHtml(this.$el, HtmlUtils.template(this.loadingTemplate)()); - - // Show the results - this.showResults(); - }, - - showErrorMessage: function() { - HtmlUtils.setHtml( - this.$el, - HtmlUtils.template(this.errorTemplate)({ - errorMessage: this.collection.errorMessage - })); - this.showResults(); - }, - - loadNext: function(event) { - if (event) { - event.preventDefault(); - } - this.$el.find(this.spinner).show(); - this.trigger('next'); - return false; - } - - }); - }); -}(define || RequireJS.define)); diff --git a/openedx/features/course_search/static/course_search/templates/course_search_item.underscore b/openedx/features/course_search/static/course_search/templates/course_search_item.underscore deleted file mode 100644 index 99f14cd218dc..000000000000 --- a/openedx/features/course_search/static/course_search/templates/course_search_item.underscore +++ /dev/null @@ -1,7 +0,0 @@ -
- -
-
- <%- location.join(' / ') %> -
<%= HtmlUtils.ensureHtml(excerptHtml) %>
-
diff --git a/openedx/features/course_search/static/course_search/templates/course_search_results.underscore b/openedx/features/course_search/static/course_search/templates/course_search_results.underscore deleted file mode 100644 index 78040fc9b1cf..000000000000 --- a/openedx/features/course_search/static/course_search/templates/course_search_results.underscore +++ /dev/null @@ -1,27 +0,0 @@ -
-

<%- totalCountMsg %>

-
- -<% if (totalCount > 0 ) { %> - -
    - - <% if (hasMoreResults) { %> - - <%- - StringUtils.interpolate( - ngettext("Load next {num_items} result", "Load next {num_items} results", pageSize), - { - num_items: pageSize - } - ) - %> - - - <% } %> - -<% } else { %> - -

    <%- gettext("Sorry, no results were found.") %>

    - -<% } %> diff --git a/openedx/features/course_search/static/course_search/templates/dashboard_search_item.underscore b/openedx/features/course_search/static/course_search/templates/dashboard_search_item.underscore deleted file mode 100644 index 3e0486974506..000000000000 --- a/openedx/features/course_search/static/course_search/templates/dashboard_search_item.underscore +++ /dev/null @@ -1,5 +0,0 @@ -
    <%= HtmlUtils.ensureHtml(excerptHtml) %>
    -<%- gettext("View") %> -<%- course_name %>: -<%- location.join(' ▸ ') %> -<%- content_type %> diff --git a/openedx/features/course_search/static/course_search/templates/dashboard_search_results.underscore b/openedx/features/course_search/static/course_search/templates/dashboard_search_results.underscore deleted file mode 100644 index 8a7b94163300..000000000000 --- a/openedx/features/course_search/static/course_search/templates/dashboard_search_results.underscore +++ /dev/null @@ -1,28 +0,0 @@ -
    -

    <%- gettext("Search Results") %>

    -
    <%- totalCountMsg %>
    -
    - -<% if (totalCount > 0 ) { %> - -
      - - <% if (hasMoreResults) { %> - - <%- - StringUtils.interpolate( - ngettext("Load next {num_items} result", "Load next {num_items} results", pageSize), - { - num_items: pageSize - } - ) - %> - - - <% } %> - -<% } else { %> - -

      <%- gettext("Sorry, no results were found.") %>

      - -<% } %> diff --git a/openedx/features/course_search/static/course_search/templates/search_error.underscore b/openedx/features/course_search/static/course_search/templates/search_error.underscore deleted file mode 100644 index 4d4dcbe4972a..000000000000 --- a/openedx/features/course_search/static/course_search/templates/search_error.underscore +++ /dev/null @@ -1 +0,0 @@ -<% if (errorMessage) { %><%- errorMessage %><%} else {%><%- gettext("There was an error, try searching again.") %><% } %> diff --git a/openedx/features/course_search/static/course_search/templates/search_loading.underscore b/openedx/features/course_search/static/course_search/templates/search_loading.underscore deleted file mode 100644 index 8b6601544236..000000000000 --- a/openedx/features/course_search/static/course_search/templates/search_loading.underscore +++ /dev/null @@ -1,2 +0,0 @@ - <%- gettext("Loading") %> -