diff --git a/chrome/content/zotero/itemPane.js b/chrome/content/zotero/itemPane.js index f7d73e8ed..d3d1e9e08 100644 --- a/chrome/content/zotero/itemPane.js +++ b/chrome/content/zotero/itemPane.js @@ -1030,33 +1030,41 @@ var ZoteroItemPane = new function() } else { + var autoCompleteFields = [ + 'creator', + 'journalAbbreviation', + 'seriesTitle', + 'seriesText', + 'repository', + 'callNumber', + 'archiveLocation', + 'language', + 'rights', + 'tag' + ]; + + // Add the type-specific versions of these base fields + var baseACFields = ['publisher', 'publicationTitle', 'type', + 'medium', 'place']; + autoCompleteFields = autoCompleteFields.concat(baseACFields); + + for each(var baseField in baseACFields) { + var add = Zotero.ItemFields.getTypeFieldsFromBase(baseField, true) + autoCompleteFields = autoCompleteFields.concat(add); + } + // Add auto-complete for certain fields - switch (field) - { - case 'creator': - case 'publisher': - case 'place': - case 'publicationTitle': - case 'journalAbbreviation': - case 'seriesTitle': - case 'seriesText': - case 'tag': - // DEBUG: should have type and medium, but they need to be - // broken out first into multiple fields (artworkType, - // interviewMedium, etc.) - t.setAttribute('type', 'autocomplete'); - t.setAttribute('autocompletesearch', 'zotero'); - var suffix = itemID ? itemID : ''; - if (field=='creator') - { - suffix = (elem.getAttribute('singleField')=='true' - ? '1' : '0') + '-' + suffix; - } - t.setAttribute('autocompletesearchparam', - fieldName + '/' + suffix); - t.setAttribute('ontextentered', - 'ZoteroItemPane.handleCreatorAutoCompleteSelect(this)'); - break; + if (autoCompleteFields.indexOf(field) != -1) { + t.setAttribute('type', 'autocomplete'); + t.setAttribute('autocompletesearch', 'zotero'); + var suffix = itemID ? itemID : ''; + if (field=='creator') { + suffix = (elem.getAttribute('singleField')=='true' + ? '1' : '0') + '-' + suffix; + } + t.setAttribute('autocompletesearchparam', fieldName + '/' + suffix); + t.setAttribute('ontextentered', + 'ZoteroItemPane.handleCreatorAutoCompleteSelect(this)'); } } var box = elem.parentNode; diff --git a/chrome/content/zotero/xpcom/data_access.js b/chrome/content/zotero/xpcom/data_access.js index 1c83f82de..f6d09a227 100644 --- a/chrome/content/zotero/xpcom/data_access.js +++ b/chrome/content/zotero/xpcom/data_access.js @@ -28,7 +28,6 @@ Zotero.Item = function(){ this._init(); - // Accept itemTypeID in constructor if (arguments.length){ this.setType(Zotero.ItemTypes.getID(arguments[0])); } @@ -2315,8 +2314,8 @@ Zotero.Items = new function(){ } - function getNewItemByType(itemTypeID){ - return new Zotero.Item(itemTypeID); + function getNewItemByType(itemType){ + return new Zotero.Item(itemType); } @@ -3973,14 +3972,18 @@ Zotero.ItemFields = new function(){ * * e.g. 'publisher' returns fieldIDs for [university, studio, label, network] */ - function getTypeFieldsFromBase(baseField) { + function getTypeFieldsFromBase(baseField, asNames) { var baseFieldID = this.getID(baseField); if (!baseFieldID) { throw ("Invalid base field '" + baseField + '" in ItemFields.getTypeFieldsFromBase()'); } - return Zotero.DB.columnQuery("SELECT fieldID FROM baseFieldMappings " - + "WHERE baseFieldID=?", baseFieldID); + var sql = "SELECT fieldID FROM baseFieldMappings WHERE baseFieldID=?"; + if (asNames) { + sql = "SELECT fieldName FROM fields WHERE fieldID IN (" + sql + ")"; + } + + return Zotero.DB.columnQuery(sql, baseFieldID); }