Only search commits on input change since last search
This commit is contained in:
parent
b60de9c0fd
commit
72e0ed0aa9
2 changed files with 57 additions and 1 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
(function() {
|
||||
this.CommitsList = (function() {
|
||||
function CommitsList() {}
|
||||
var CommitsList = {};
|
||||
|
||||
CommitsList.timer = null;
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
|||
});
|
||||
this.content = $("#commits-list");
|
||||
this.searchField = $("#commits-search");
|
||||
this.lastSearch = this.searchField.val();
|
||||
return this.initSearch();
|
||||
};
|
||||
|
||||
|
@ -37,6 +38,7 @@
|
|||
var commitsUrl, form, search;
|
||||
form = $(".commits-search-form");
|
||||
search = CommitsList.searchField.val();
|
||||
if (search === CommitsList.lastSearch) return;
|
||||
commitsUrl = form.attr("action") + '?' + form.serialize();
|
||||
CommitsList.content.fadeTo('fast', 0.5);
|
||||
return $.ajax({
|
||||
|
@ -47,12 +49,16 @@
|
|||
return CommitsList.content.fadeTo('fast', 1.0);
|
||||
},
|
||||
success: function(data) {
|
||||
CommitsList.lastSearch = search;
|
||||
CommitsList.content.html(data.html);
|
||||
return history.replaceState({
|
||||
page: commitsUrl
|
||||
// Change url so if user reload a page - search results are saved
|
||||
}, document.title, commitsUrl);
|
||||
},
|
||||
error: function() {
|
||||
CommitsList.lastSearch = null;
|
||||
},
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
|
|
50
spec/javascripts/commits_spec.js.es6
Normal file
50
spec/javascripts/commits_spec.js.es6
Normal file
|
@ -0,0 +1,50 @@
|
|||
/* global CommitsList */
|
||||
|
||||
//= require jquery.endless-scroll
|
||||
//= require pager
|
||||
//= require commits
|
||||
|
||||
(() => {
|
||||
describe('Commits List', () => {
|
||||
beforeEach(() => {
|
||||
setFixtures(`
|
||||
<form class="commits-search-form" action="/h5bp/html5-boilerplate/commits/master">
|
||||
<input id="commits-search">
|
||||
</form>
|
||||
<ol id="commits-list"></ol>
|
||||
`);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(CommitsList).toBeDefined();
|
||||
});
|
||||
|
||||
describe('on entering input', () => {
|
||||
let ajaxSpy;
|
||||
|
||||
beforeEach(() => {
|
||||
CommitsList.init(25);
|
||||
CommitsList.searchField.val('');
|
||||
spyOn(history, 'replaceState').and.stub();
|
||||
ajaxSpy = spyOn(jQuery, 'ajax').and.callFake((req) => {
|
||||
req.success({
|
||||
data: '<li>Result</li>',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should save the last search string', () => {
|
||||
CommitsList.searchField.val('GitLab');
|
||||
CommitsList.filterResults();
|
||||
expect(ajaxSpy).toHaveBeenCalled();
|
||||
expect(CommitsList.lastSearch).toEqual('GitLab');
|
||||
});
|
||||
|
||||
it('should not make ajax call if the input does not change', () => {
|
||||
CommitsList.filterResults();
|
||||
expect(ajaxSpy).not.toHaveBeenCalled();
|
||||
expect(CommitsList.lastSearch).toEqual('');
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
Loading…
Reference in a new issue