Limit autocomplete in Advanced Search to specific creator types
For `author`, `bookAuthor`, and `editor` conditions added in #2253
This commit is contained in:
parent
91cdc5610b
commit
db35f55c96
2 changed files with 20 additions and 5 deletions
|
@ -989,7 +989,6 @@
|
|||
break;
|
||||
|
||||
default:
|
||||
|
||||
var textbox = document.getAnonymousNodes(this)[0];
|
||||
textbox.setAttribute('type', 'autocomplete');
|
||||
textbox.setAttribute('autocompletesearch', 'zotero');
|
||||
|
@ -999,8 +998,13 @@
|
|||
var autocompleteParams = {
|
||||
fieldName: condition
|
||||
};
|
||||
if (condition == 'creator') {
|
||||
autocompleteParams.fieldMode = 2;
|
||||
switch (condition) {
|
||||
case 'creator':
|
||||
case 'author':
|
||||
case 'bookAuthor':
|
||||
case 'editor':
|
||||
autocompleteParams.fieldMode = 2;
|
||||
break;
|
||||
}
|
||||
textbox.setAttribute(
|
||||
'autocompletesearchparam',
|
||||
|
|
|
@ -87,6 +87,9 @@ ZoteroAutoComplete.prototype.startSearch = Zotero.Promise.coroutine(function* (s
|
|||
break;
|
||||
|
||||
case 'creator':
|
||||
case 'author':
|
||||
case 'bookAuthor':
|
||||
case 'editor':
|
||||
// Valid fieldMode values:
|
||||
// 0 == search two-field creators
|
||||
// 1 == search single-field creators
|
||||
|
@ -95,15 +98,23 @@ ZoteroAutoComplete.prototype.startSearch = Zotero.Promise.coroutine(function* (s
|
|||
var sql = "SELECT DISTINCT CASE fieldMode WHEN 1 THEN lastName "
|
||||
+ "WHEN 0 THEN firstName || ' ' || lastName END AS val, NULL AS id "
|
||||
+ "FROM creators ";
|
||||
if (fieldName != 'creator' || searchParams.libraryID) {
|
||||
sql += "JOIN itemCreators USING (creatorID) ";
|
||||
}
|
||||
if (searchParams.libraryID) {
|
||||
sql += "JOIN itemCreators USING (creatorID) JOIN items USING (itemID) ";
|
||||
sql += "JOIN items USING (itemID) ";
|
||||
}
|
||||
sql += "WHERE CASE fieldMode "
|
||||
+ "WHEN 1 THEN lastName LIKE ?1 "
|
||||
+ "WHEN 0 THEN (firstName || ' ' || lastName LIKE ?1) OR (lastName LIKE ?1) END ";
|
||||
var sqlParams = [searchString + '%'];
|
||||
// Limit results to specific creator type
|
||||
if (fieldName != 'creator') {
|
||||
sql += "AND creatorTypeID=? ";
|
||||
sqlParams.push(Zotero.CreatorTypes.getID(fieldName));
|
||||
}
|
||||
if (searchParams.libraryID) {
|
||||
sql += ` AND libraryID=?${sqlParams.length + 1}`;
|
||||
sql += ` AND libraryID=? `;
|
||||
sqlParams.push(searchParams.libraryID);
|
||||
}
|
||||
sql += "ORDER BY val";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue