Merge git://github.com/willsALMANJ/zotero
This commit is contained in:
commit
814b16d345
3 changed files with 147 additions and 27 deletions
|
@ -1421,6 +1421,7 @@
|
||||||
|
|
||||||
if (creatorField=='lastName') {
|
if (creatorField=='lastName') {
|
||||||
t.setAttribute('fieldMode', elem.getAttribute('fieldMode'));
|
t.setAttribute('fieldMode', elem.getAttribute('fieldMode'));
|
||||||
|
t.setAttribute('newlines','pasteintact');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Zotero.ItemFields.isMultiline(fieldName) || Zotero.ItemFields.isLong(fieldName)) {
|
if (Zotero.ItemFields.isMultiline(fieldName) || Zotero.ItemFields.isLong(fieldName)) {
|
||||||
|
@ -1695,9 +1696,67 @@
|
||||||
|
|
||||||
var otherFields = this.getCreatorFields(row);
|
var otherFields = this.getCreatorFields(row);
|
||||||
otherFields[creatorField] = value;
|
otherFields[creatorField] = value;
|
||||||
|
var lastName = otherFields.lastName;
|
||||||
|
|
||||||
this.modifyCreator(creatorIndex, otherFields);
|
//Handle \n\r and \n delimited entries
|
||||||
|
var rawNameArray = lastName.split(/\r\n?|\n/);
|
||||||
|
if (rawNameArray.length > 1) {
|
||||||
|
//Save tab direction and add creator flags since they are reset in the
|
||||||
|
//process of adding multiple authors
|
||||||
|
var tabDirectionBuffer = this._tabDirection;
|
||||||
|
var addCreatorRowBuffer = this._addCreatorRow;
|
||||||
|
var tabIndexBuffer = this._lastTabIndex;
|
||||||
|
this._tabDirection = false;
|
||||||
|
this._addCreatorRow = false;
|
||||||
|
|
||||||
|
//Filter out bad names
|
||||||
|
var nameArray = [tempName for each(tempName in rawNameArray) if(tempName)];
|
||||||
|
|
||||||
|
//If not adding names at the end of the creator list, make new creator
|
||||||
|
//entries and then shift down existing creators.
|
||||||
|
var initNumCreators = this.item.numCreators();
|
||||||
|
var creatorsToShift = initNumCreators - creatorIndex;
|
||||||
|
if (creatorsToShift > 0) {
|
||||||
|
//Add extra creators
|
||||||
|
for (var i=0;i<nameArray.length;i++) {
|
||||||
|
this.modifyCreator(i+initNumCreators,otherFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Shift existing creators
|
||||||
|
for (var i=initNumCreators-1; i>=creatorIndex; i--) {
|
||||||
|
var shiftedCreator = this.item.getCreator(i);
|
||||||
|
this.item.setCreator(nameArray.length+i,shiftedCreator.ref,shiftedCreator.creatorTypeID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add the creators in lastNameArray one at a time
|
||||||
|
for each(tempName in nameArray) {
|
||||||
|
// Check for tab to determine creator name format
|
||||||
|
otherFields.fieldMode = (tempName.indexOf('\t') == -1) ? 1 : 0;
|
||||||
|
if (otherFields.fieldMode == 0) {
|
||||||
|
otherFields.lastName=tempName.split('\t')[0];
|
||||||
|
otherFields.firstName=tempName.split('\t')[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
otherFields.lastName=tempName;
|
||||||
|
otherFields.firstName='';
|
||||||
|
}
|
||||||
|
this.modifyCreator(creatorIndex,otherFields);
|
||||||
|
creatorIndex++;
|
||||||
|
}
|
||||||
|
this._tabDirection = tabDirectionBuffer;
|
||||||
|
this._addCreatorRow = (creatorsToShift==0) ? addCreatorRowBuffer : false;
|
||||||
|
if (this._tabDirection == 1) {
|
||||||
|
this._lastTabIndex = parseInt(tabIndexBuffer,10) + 2*(nameArray.length-1);
|
||||||
|
if (otherFields.fieldMode == 0) {
|
||||||
|
this._lastTabIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.modifyCreator(creatorIndex, otherFields);
|
||||||
|
}
|
||||||
|
|
||||||
var val = this.item.getCreator(creatorIndex);
|
var val = this.item.getCreator(creatorIndex);
|
||||||
val = val ? val.ref[creatorField] : null;
|
val = val ? val.ref[creatorField] : null;
|
||||||
|
|
||||||
|
|
|
@ -293,6 +293,7 @@
|
||||||
t.setAttribute('fieldname', fieldName);
|
t.setAttribute('fieldname', fieldName);
|
||||||
t.setAttribute('ztabindex', tabindex);
|
t.setAttribute('ztabindex', tabindex);
|
||||||
t.setAttribute('flex', '1');
|
t.setAttribute('flex', '1');
|
||||||
|
t.setAttribute('newlines','pasteintact');
|
||||||
|
|
||||||
// Add auto-complete
|
// Add auto-complete
|
||||||
t.setAttribute('type', 'autocomplete');
|
t.setAttribute('type', 'autocomplete');
|
||||||
|
@ -410,12 +411,9 @@
|
||||||
|
|
||||||
var fieldName = 'tag';
|
var fieldName = 'tag';
|
||||||
var tabindex = textbox.getAttribute('ztabindex');
|
var tabindex = textbox.getAttribute('ztabindex');
|
||||||
|
|
||||||
//var value = t.value;
|
|
||||||
var value = textbox.value;
|
var value = textbox.value;
|
||||||
|
|
||||||
var elem;
|
|
||||||
|
|
||||||
var tagsbox = Zotero.getAncestorByTagName(textbox, 'tagsbox');
|
var tagsbox = Zotero.getAncestorByTagName(textbox, 'tagsbox');
|
||||||
if (!tagsbox)
|
if (!tagsbox)
|
||||||
{
|
{
|
||||||
|
@ -429,38 +427,78 @@
|
||||||
// Tag id encoded as 'tag-1234'
|
// Tag id encoded as 'tag-1234'
|
||||||
var id = row.getAttribute('id').split('-')[1];
|
var id = row.getAttribute('id').split('-')[1];
|
||||||
|
|
||||||
|
var tagArray = value.split(/\r\n?|\n/);
|
||||||
|
|
||||||
if (saveChanges) {
|
if (saveChanges) {
|
||||||
if (id) {
|
if (id && (tagArray.length < 2)) {
|
||||||
if (value) {
|
if (value) {
|
||||||
// If trying to replace with another existing tag
|
var origTagIndex = this.item.getTagIndex(id);
|
||||||
// (which causes a delete of the row),
|
|
||||||
// clear the tab direction so we don't advance
|
|
||||||
// when the notifier kicks in
|
|
||||||
var existing = Zotero.Tags.getID(value, 0);
|
|
||||||
if (existing && id != existing) {
|
|
||||||
this._tabDirection = false;
|
|
||||||
}
|
|
||||||
var changed = tagsbox.replace(id, value);
|
var changed = tagsbox.replace(id, value);
|
||||||
if (changed) {
|
if (changed) {
|
||||||
return;
|
var newTagIndex = this.item.getTagIndex(changed);
|
||||||
|
if (newTagIndex>origTagIndex) {
|
||||||
|
if (this._tabDirection == 1) {
|
||||||
|
this._lastTabIndex--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (newTagIndex<origTagIndex) {
|
||||||
|
if (this._tabDirection == -1) {
|
||||||
|
this._lastTabIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (value != Zotero.Tags.getName(id)) {
|
||||||
|
if (this._tabDirection == 1) {
|
||||||
|
this._lastTabIndex -= 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
tagsbox.remove(id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// New tag
|
// New tag
|
||||||
else {
|
else {
|
||||||
var id = tagsbox.add(value);
|
//Check for newlines or carriage returns used as delimiters
|
||||||
if (!id) {
|
//in a series of tags added at once. Add each tag
|
||||||
|
//separately.
|
||||||
|
if (tagArray.length > 1) {
|
||||||
|
var extremeTag = false;
|
||||||
|
var nextTag = false;
|
||||||
|
if (this._tabDirection == -1) {
|
||||||
|
if (this._lastTabIndex == 1) {
|
||||||
|
extremeTag = true;
|
||||||
|
} else {
|
||||||
|
nextTag = row.previousSibling.getAttribute('id').split('-')[1];
|
||||||
|
}
|
||||||
|
} else if (this._tabDirection == 1) {
|
||||||
|
if (this._lastTabIndex >= this.item.getTags().length) {
|
||||||
|
extremeTag = true;
|
||||||
|
} else {
|
||||||
|
nextTag = row.nextSibling.getAttribute('id').split('-')[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
id = this.item.addTags(tagArray);
|
||||||
|
|
||||||
|
if (extremeTag) {
|
||||||
|
if (this._tabDirection == 1) {
|
||||||
|
this._lastTabIndex = this.item.getTags().length;
|
||||||
|
} else if (this._tabDirection == -1) {
|
||||||
|
this._lastTabIndex = 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this._lastTabIndex = this.item.getTagIndex(nextTag)+1-this._tabDirection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
id = tagsbox.add(value);
|
||||||
|
}
|
||||||
|
if (!id && (this._tabDirection==1)) {
|
||||||
this._lastTabIndex--;
|
this._lastTabIndex--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id) {
|
if (id) {
|
||||||
elem = this.createValueElement(
|
var elem = this.createValueElement(
|
||||||
value,
|
value,
|
||||||
tabindex
|
tabindex
|
||||||
);
|
);
|
||||||
|
@ -478,7 +516,6 @@
|
||||||
catch (e) {}
|
catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
var focusMode = 'tags';
|
|
||||||
var focusBox = tagsbox;
|
var focusBox = tagsbox;
|
||||||
|
|
||||||
if (this._tabDirection) {
|
if (this._tabDirection) {
|
||||||
|
|
|
@ -1605,7 +1605,7 @@ Zotero.Item.prototype.save = function() {
|
||||||
'libraryID',
|
'libraryID',
|
||||||
'key'
|
'key'
|
||||||
];
|
];
|
||||||
for each(field in updateFields) {
|
for each(var field in updateFields) {
|
||||||
if (this._changedPrimaryData && this._changedPrimaryData[field]) {
|
if (this._changedPrimaryData && this._changedPrimaryData[field]) {
|
||||||
sql += field + '=?, ';
|
sql += field + '=?, ';
|
||||||
sqlValues.push(this.getField(field));
|
sqlValues.push(this.getField(field));
|
||||||
|
@ -3553,10 +3553,19 @@ Zotero.Item.prototype.addTag = function(name, type) {
|
||||||
Zotero.Item.prototype.addTags = function (tags, type) {
|
Zotero.Item.prototype.addTags = function (tags, type) {
|
||||||
Zotero.DB.beginTransaction();
|
Zotero.DB.beginTransaction();
|
||||||
try {
|
try {
|
||||||
for each(var tag in tags) {
|
var tagIDArray = [];
|
||||||
this.addTag(tag, type);
|
var tempID = false;
|
||||||
|
for (var i = 0; i < tags.length; i++) {
|
||||||
|
tempID = this.addTag(tags[i], type);
|
||||||
|
if (tempID) {
|
||||||
|
tagIDArray.push(tempID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tagIDArray = (tagIDArray.length>0) ? tagIDArray : false;
|
||||||
|
|
||||||
Zotero.DB.commitTransaction();
|
Zotero.DB.commitTransaction();
|
||||||
|
return tagIDArray;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
Zotero.DB.rollbackTransaction();
|
Zotero.DB.rollbackTransaction();
|
||||||
|
@ -3638,6 +3647,21 @@ Zotero.Item.prototype.getTagIDs = function() {
|
||||||
return Zotero.DB.columnQuery(sql, this.id);
|
return Zotero.DB.columnQuery(sql, this.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the index of tagID in the list of the item's tags sorted in alphabetical order.
|
||||||
|
*/
|
||||||
|
Zotero.Item.prototype.getTagIndex = function(tagID) {
|
||||||
|
var tags = this.getTags();
|
||||||
|
|
||||||
|
for (var i=0;i<tags.length;i++) {
|
||||||
|
if (tagID == tags[i].id) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Zotero.Item.prototype.replaceTag = function(oldTagID, newTag) {
|
Zotero.Item.prototype.replaceTag = function(oldTagID, newTag) {
|
||||||
if (!this.id) {
|
if (!this.id) {
|
||||||
throw ('Cannot replace tag on unsaved item');
|
throw ('Cannot replace tag on unsaved item');
|
||||||
|
|
Loading…
Reference in a new issue