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
This commit is contained in:
Dan Stillman 2007-02-18 07:57:02 +00:00
parent 42f2b56bb4
commit f7671f2a93
2 changed files with 43 additions and 32 deletions

View File

@ -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;

View File

@ -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);
}