diff --git a/productMods/edit/forms/addAuthorsToInformationResource.jsp b/productMods/edit/forms/addAuthorsToInformationResource.jsp index 5af8b886..9f55cc36 100644 --- a/productMods/edit/forms/addAuthorsToInformationResource.jsp +++ b/productMods/edit/forms/addAuthorsToInformationResource.jsp @@ -401,14 +401,14 @@ SPARQL queries for existing values. --%>

* required fields

- + diff --git a/productMods/edit/forms/js/addAuthorsToInformationResource.js b/productMods/edit/forms/js/addAuthorsToInformationResource.js index 3c4d6913..1343cc65 100644 --- a/productMods/edit/forms/js/addAuthorsToInformationResource.js +++ b/productMods/edit/forms/js/addAuthorsToInformationResource.js @@ -160,8 +160,8 @@ var addAuthorForm = { // Make cache a property of this so we can access it after removing // an author. - this.acCache = {}; - this.setAcUrl(); + this.acCache = {}; + this.setAcFilter(); $('#lastName').autocomplete({ minLength: 2, @@ -179,13 +179,16 @@ var addAuthorForm = { $.ajax({ url: addAuthorForm.acUrl, dataType: 'json', - data: request, + data: { + term: request.term + }, complete: function(xhr, status) { // Not sure why, but we need an explicit json parse here. jQuery // should parse the response text and return a json object. - var results = jQuery.parseJSON(xhr.responseText); - addAuthorForm.acCache[request.term] = results; - response(results); + var results = jQuery.parseJSON(xhr.responseText), + filteredResults = addAuthorForm.filterAcResults(results); + addAuthorForm.acCache[request.term] = filteredResults; + response(filteredResults); } }); @@ -197,19 +200,41 @@ var addAuthorForm = { }, - setAcUrl: function() { - var url = this.baseAcUrl, - existingAuthors = $('#authorships .authorLink'); - - //console.log('in setAcUrl()'); - //console.log('number of existing authors: ' + existingAuthors.length); + setAcFilter: function() { + + var existingAuthors = $('#authorships .authorLink'); + this.acFilter = []; existingAuthors.each(function() { - url += '&excludeUri=' + $(this).attr('id'); - }); - - this.acUrl = url; + var uri = $(this).attr('id'); + addAuthorForm.acFilter.push(uri); + }); }, + + removeAuthorFromAcFilter: function(author) { + var index = $.inArray(author, this.acFilter); + if (index > -1) { // this should always be true + this.acFilter.splice(index, 1); + } + }, + + filterAcResults: function(results) { + var filteredResults = []; + if (!this.acFilter.length) { + return results; + } + $.each(results, function() { + if ($.inArray(this.uri, addAuthorForm.acFilter) == -1) { + console.log("adding " + this.label + " to filtered results"); + filteredResults.push(this); + } + else { + console.log("filtering out " + this.label); + } + }); + return filteredResults; + }, + // Action taken after selecting an author from the autocomplete list showSelectedAuthor: function(ui) { @@ -517,6 +542,7 @@ var addAuthorForm = { complete: function(request, status) { var authorship = $(this).parents('.authorship'), nextAuthorships = authorship.nextAll(), + author = authorship.find('.authorLink').attr('id'), rank; // author = $(this).siblings('span.author'), // authorLink = author.children('a.authorLink'), @@ -543,7 +569,11 @@ var addAuthorForm = { // In future, do this selectively by only clearing terms that match the // deleted author's name addAuthorForm.acCache = {}; - + + // Remove this author from the acFilter so it can be returned in autocomplete + // results again. + addAuthorForm.removeAuthorFromAcFilter(author); + authorship.fadeOut(400, function() { $(this).remove(); // Actions that depend on the author having been removed from the DOM: @@ -551,9 +581,6 @@ var addAuthorForm = { if ($('.authorship').length == 1) { addAuthorForm.disableAuthorDD(); } - // Reset the excluded uris in the autocomplete url so that the - //author just removed is no longer excluded. - addAuthorForm.setAcUrl(); }); // $(this).hide();