diff --git a/chrome/content/zotero/itemPane.js b/chrome/content/zotero/itemPane.js
index 55a147fed..48508e756 100644
--- a/chrome/content/zotero/itemPane.js
+++ b/chrome/content/zotero/itemPane.js
@@ -70,6 +70,7 @@ var ZoteroItemPane = new function()
this.handleKeyPress = handleKeyPress;
this.handleCreatorAutoCompleteSelect = handleCreatorAutoCompleteSelect;
this.hideEditor = hideEditor;
+ this.textTransform = textTransform;
this.getCreatorFields = getCreatorFields;
this.modifyCreator = modifyCreator;
this.removeNote = removeNote;
@@ -873,6 +874,9 @@ var ZoteroItemPane = new function()
function createValueElement(valueText, fieldName, tabindex, noedit)
{
+ var fieldID = Zotero.ItemFields.getID(fieldName);
+
+ // If an abstract, check last expand state
var abstractAsVbox = (fieldName == 'abstractNote') &&
Zotero.Prefs.get('lastAbstractExpand');
@@ -893,7 +897,7 @@ var ZoteroItemPane = new function()
valueElement.className = 'zotero-clicky';
}
- switch (fieldName){
+ switch (fieldName) {
case 'tag':
_tabIndexMaxTagsFields = Math.max(_tabIndexMaxTagsFields, tabindex);
break;
@@ -914,13 +918,22 @@ var ZoteroItemPane = new function()
break;
}
- // Display the SQL date as a tooltip for date fields
- var fieldID = Zotero.ItemFields.getID(fieldName);
- if (fieldID && Zotero.ItemFields.isFieldOfBase(fieldID, 'date')) {
- valueElement.setAttribute('tooltiptext',
- Zotero.Date.multipartToSQL(_itemBeingEdited.getField(fieldName, true)));
+ if (fieldID) {
+ // Display the SQL date as a tooltip for date fields
+ if (Zotero.ItemFields.isFieldOfBase(fieldID, 'date')) {
+ valueElement.setAttribute('tooltiptext',
+ Zotero.Date.multipartToSQL(_itemBeingEdited.getField(fieldName, true)));
+ }
+
+ // Display a context menu for certain fields
+ if (fieldName == 'seriesTitle' || fieldName == 'shortTitle' ||
+ Zotero.ItemFields.isFieldOfBase(fieldID, 'title') ||
+ Zotero.ItemFields.isFieldOfBase(fieldID, 'publicationTitle')) {
+ valueElement.setAttribute('contextmenu', 'zotero-field-menu');
+ }
}
+
if (fieldName.indexOf('firstName')!=-1){
valueElement.setAttribute('flex', '1');
}
@@ -1081,6 +1094,8 @@ var ZoteroItemPane = new function()
_tabDirection = false;
_lastTabIndex = tabindex;
+
+ return t;
}
@@ -1356,8 +1371,9 @@ var ZoteroItemPane = new function()
}
}
- if(saveChanges)
- modifyField(fieldName,value);
+ if (saveChanges) {
+ _modifyField(fieldName,value);
+ }
elem = createValueElement(_itemBeingEdited.getField(fieldName), fieldName, tabindex);
}
@@ -1376,12 +1392,13 @@ var ZoteroItemPane = new function()
}
}
- function modifyField(field, value)
+ function _modifyField(field, value)
{
_itemBeingEdited.setField(field,value);
return _itemBeingEdited.save();
}
+
function _getFieldValue(field)
{
return field.firstChild
@@ -1400,6 +1417,26 @@ var ZoteroItemPane = new function()
}
}
+
+ // TODO: work with textboxes too
+ function textTransform(label, mode) {
+ var val = _getFieldValue(label);
+ switch (mode) {
+ case 'lower':
+ var newVal = val.toLowerCase();
+ break;
+ case 'title':
+ var utils = new Zotero.Utilities();
+ var newVal = utils.capitalizeTitle(val.toLowerCase(), true);
+ break;
+ default:
+ throw ("Invalid transform mode '" + mode + "' in ZoteroItemPane.textTransform()");
+ }
+ _setFieldValue(label, newVal);
+ _modifyField(label.getAttribute('fieldname'), newVal);
+ }
+
+
function getCreatorFields(row){
var typeID = row.getElementsByTagName('toolbarbutton')[0].getAttribute('typeid');
var label1 = row.getElementsByTagName('hbox')[0].firstChild.firstChild;
@@ -1464,6 +1501,7 @@ var ZoteroItemPane = new function()
_itemBeingEdited.save();
}
+
function removeNote(id)
{
var note = Zotero.Items.get(id);
diff --git a/chrome/content/zotero/itemPane.xul b/chrome/content/zotero/itemPane.xul
index 2db73cafe..96fbea024 100644
--- a/chrome/content/zotero/itemPane.xul
+++ b/chrome/content/zotero/itemPane.xul
@@ -38,6 +38,16 @@
document.popupNode.setAttribute('typeid', typeID);
ZoteroItemPane.modifyCreator(document.popupNode.getAttribute('fieldname').split('-')[1],
'typeID', typeID, otherFields)"/>
+