/* Zotero Copyright (C) 2006 Center for History and New Media, George Mason University, Fairfax, VA http://chnm.gmu.edu/ */ var ScholarItemPane = new function() { var _dynamicFields; var _creatorTypeMenu; var _beforeRow; var _notesList; var _linksBox; var _notesLabel; var _creatorCount; var _loaded; var _itemBeingEdited; var _lastTabIndex; var _tabDirection; var _tabIndexMinCreators = 10; var _tabIndexMaxCreators = 0; var _tabIndexMinFields = 1000; var _tabIndexMaxFields = 0; this.onLoad = onLoad; this.viewItem = viewItem; this.loadPane = loadPane; this.changeTypeTo = changeTypeTo; this.onOpenURLClick = onOpenURLClick; this.addCreatorRow = addCreatorRow; this.disableButton = disableButton; this.createValueElement = createValueElement; this.removeCreator = removeCreator; this.showEditor = showEditor; this.handleKeyPress = handleKeyPress; this.hideEditor = hideEditor; this.getCreatorFields = getCreatorFields; this.modifyCreator = modifyCreator; this.removeNote = removeNote; this.addNote = addNote; this.removeAttachment = removeAttachment; this.addAttachmentFromDialog = addAttachmentFromDialog; this.addAttachmentFromPage = addAttachmentFromPage; function onLoad() { _tabs = document.getElementById('scholar-view-tabs'); // Not in item pane, so skip the introductions if (!_tabs) { return false; } _dynamicFields = document.getElementById('editpane-dynamic-fields'); _itemTypeMenu = document.getElementById('editpane-type-menu'); _creatorTypeMenu = document.getElementById('creatorTypeMenu'); _notesList = document.getElementById('editpane-dynamic-notes'); _notesLabel = document.getElementById('editpane-notes-label'); _attachmentsList = document.getElementById('editpane-dynamic-attachments'); _attachmentsLabel = document.getElementById('editpane-attachments-label'); _tagsBox = document.getElementById('editpane-tags'); _relatedBox = document.getElementById('editpane-related'); var creatorTypes = Scholar.CreatorTypes.getTypes(); for(var i = 0; i < creatorTypes.length; i++) { var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label",Scholar.getString('creatorTypes.'+creatorTypes[i]['name'])); menuitem.setAttribute("typeid",creatorTypes[i]['id']); if(creatorTypes[i]['id'] == 0) menuitem.setAttribute("selected",true); _creatorTypeMenu.appendChild(menuitem); } var itemTypes = Scholar.ItemTypes.getTypes(); for(var i = 0; i0 ? _tabIndexMinFields + i : 1) : 0; var valueElement = createValueElement( val, editable ? fieldNames[i] : null, tabindex ); _tabIndexMaxFields = Math.max(_tabIndexMaxFields, tabindex); var label = document.createElement("label"); label.setAttribute("value",Scholar.getString("itemFields."+fieldNames[i])+":"); label.setAttribute("onclick","this.nextSibling.blur();"); addDynamicRow(label,valueElement); } //CREATORS: _beforeRow = _dynamicFields.firstChild.nextSibling; _creatorCount = 0; if(_itemBeingEdited.numCreators() > 0) { for(var i = 0, len=_itemBeingEdited.numCreators(); i 29 ) || firstSpace > 29) { valueElement.setAttribute('crop', 'end'); valueElement.setAttribute('value',valueText); } else { // Wrap to multiple lines valueElement.appendChild(document.createTextNode(valueText)); } return valueElement; } function removeCreator(index, labelToDelete) { // If unsaved row, just remove element if (!_itemBeingEdited.hasCreatorAt(index)){ labelToDelete.parentNode.removeChild(labelToDelete); // Enable the "+" button on the previous row var elems = _dynamicFields.getElementsByAttribute('value', '+'); _enablePlusButton(elems[elems.length-1]); _creatorCount--; return; } _itemBeingEdited.removeCreator(index); _itemBeingEdited.save(); loadPane(0); } function showEditor(elem) { //Scholar.debug('Showing editor'); var fieldName = elem.getAttribute('fieldname'); var tabindex = elem.getAttribute('tabindex'); var creatorFields = fieldName.split('-'); if(creatorFields[0] == 'creator') { var c = _itemBeingEdited.getCreator(creatorFields[1]); var value = c ? c[creatorFields[2]] : ''; var itemID = _itemBeingEdited.getID(); } else if (fieldName=='tag') { var tagID = elem.parentNode.getAttribute('id').split('-')[1]; var value = tagID ? Scholar.Tags.getName(tagID) : ''; var itemID = Scholar.getAncestorByTagName(elem, 'tagsbox').item.getID(); } else { var value = _itemBeingEdited.getField(fieldName); var itemID = _itemBeingEdited.getID(); } var t = document.createElement("textbox"); t.setAttribute('type', 'autocomplete'); t.setAttribute('autocompletesearch', 'zotero'); t.setAttribute('autocompletesearchparam', fieldName + (itemID ? '/' + itemID : '')); t.setAttribute('value',value); t.setAttribute('fieldname', fieldName); t.setAttribute('tabindex', tabindex); t.setAttribute('flex','1'); var box = elem.parentNode; box.replaceChild(t,elem); t.select(); t.setAttribute('onblur',"ScholarItemPane.hideEditor(this, true);"); t.setAttribute('onkeypress',"return ScholarItemPane.handleKeyPress(event)"); _tabDirection = false; _lastTabIndex = tabindex; } function handleKeyPress(event){ switch (event.keyCode) { case event.DOM_VK_RETURN: document.commandDispatcher.focusedElement.blur(); break; case event.DOM_VK_ESCAPE: ScholarItemPane.hideEditor(document.commandDispatcher.focusedElement, false); break; case event.DOM_VK_TAB: _tabDirection = event.shiftKey ? -1 : 1; break; } return true; } function hideEditor(t, saveChanges) { //Scholar.debug('Hiding editor'); var textbox = Scholar.getAncestorByTagName(t, 'textbox'); if (!textbox){ Scholar.debug('Textbox not found in hideEditor'); return; } var fieldName = textbox.getAttribute('fieldname'); var tabindex = textbox.getAttribute('tabindex'); var value = t.value; var elem; var creatorFields = fieldName.split('-'); // Creator fields if(creatorFields[0] == 'creator') { if (saveChanges){ var otherFields = getCreatorFields(textbox.parentNode.parentNode.parentNode); modifyCreator(creatorFields[1], creatorFields[2], value, otherFields); } var val = _itemBeingEdited.getCreator(creatorFields[1])[creatorFields[2]]; if (!val){ // Reset to '(first)' or '(last)' if (creatorFields[2]=='lastName'){ val = "(" + Scholar.getString('pane.item.defaultLastName') + ")"; } else if (creatorFields[2]=='firstName'){ val = "(" + Scholar.getString('pane.item.defaultFirstName') + ")"; } } // Add trailing comma if (creatorFields[2]=='lastName'){ val += ','; } elem = createValueElement(val, fieldName, tabindex); } // Tags else if (fieldName=='tag') { var tagsbox = Scholar.getAncestorByTagName(textbox, 'tagsbox'); if (!tagsbox) { Scholar.debug('Tagsbox not found', 1); return; } var row = textbox.parentNode; var rows = row.parentNode; // Tag id encoded as 'tag-1234' var id = row.getAttribute('id').split('-')[1]; if (saveChanges) { if (id) { if (value) { tagsbox.replace(id, value); return; } else { tagsbox.remove(id); return; } } else { var id = tagsbox.add(value); } } if (id) { elem = createValueElement(value, 'tag', tabindex); } else { // Just remove the row var row = rows.removeChild(row); tagsbox.fixPopup(); return; } } // Fields else { if(saveChanges) modifyField(fieldName,value); elem = createValueElement(_itemBeingEdited.getField(fieldName), fieldName, tabindex); } var box = textbox.parentNode; box.replaceChild(elem,textbox); if (_tabDirection) { _focusNextField(_lastTabIndex, _tabDirection==-1); } } function modifyField(field, value) { _itemBeingEdited.setField(field,value); _itemBeingEdited.save(); } function getCreatorFields(row){ var type = row.getElementsByTagName('label')[0].getAttribute('value'); var label1 = row.getElementsByTagName('hbox')[0].firstChild.firstChild; var label2 = label1.nextSibling; return { lastName: label1.firstChild ? label1.firstChild.nodeValue // Strip trailing comma .substr(0, label1.firstChild.nodeValue.length-1): label1.value, firstName: label2.firstChild ? label2.firstChild.nodeValue : label2.value, typeID: Scholar.CreatorTypes.getID(type.substr(0, type.length-1).toLowerCase()), isInstitution: null // placeholder } } function modifyCreator(index, field, value, otherFields) { if (otherFields){ var firstName = otherFields.firstName; var lastName = otherFields.lastName; var typeID = otherFields.typeID; // var isInstitution = otherFields.isInstitution; // Ignore '(first)' and '(last)' if (firstName == "(" + Scholar.getString('pane.item.defaultFirstName') + ")"){ firstName = ''; } if (lastName == "(" + Scholar.getString('pane.item.defaultLastName') + ")"){ lastName = ''; } } else { var creator = _itemBeingEdited.getCreator(index); var firstName = creator['firstName']; var lastName = creator['lastName']; var typeID = creator['creatorTypeID']; // var isInstitution = creator['isInstitution']; } if (!_itemBeingEdited.hasCreatorAt(index) && !firstName && !lastName){ return; } switch (field){ case 'firstName': firstName = value; break; case 'lastName': lastName = value; break; case 'typeID': typeID = value; break; } _itemBeingEdited.setCreator(index, firstName, lastName, typeID); _itemBeingEdited.save(); } function removeNote(id) { var note = Scholar.Items.get(id); if(note) if(confirm(Scholar.getString('pane.item.notes.delete.confirm'))) note.erase(); } function addNote() { ScholarPane.openNoteWindow(_itemBeingEdited.getID()); } function _noteToTitle(text) { var MAX_LENGTH = 100; var t = text.substring(0, MAX_LENGTH); var ln = t.indexOf("\n"); if (ln>-1 && ln