From f7671f2a93a359f0e66e7db5e750f24abfa8ca11 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 18 Feb 2007 07:57:02 +0000 Subject: [PATCH] Add autocomplete on some more fields in the metadata pane, including all the type and medium fields (but not across each other, since they're distinct fields) Add asNames option to Z.ItemFields.getTypeFieldsFromBase() to return field names instead of ids --- chrome/content/zotero/itemPane.js | 60 ++++++++++++---------- chrome/content/zotero/xpcom/data_access.js | 15 +++--- 2 files changed, 43 insertions(+), 32 deletions(-) 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); }