time field loop and optimize
This commit is contained in:
parent
ae88cbd0ce
commit
e347b7ed91
1 changed files with 19 additions and 5 deletions
|
@ -374,7 +374,7 @@ Zotero.Integration.Document.prototype._addField = function(note) {
|
||||||
/**
|
/**
|
||||||
* Loads existing citations and bibliographies out of a document, and creates or edits fields
|
* Loads existing citations and bibliographies out of a document, and creates or edits fields
|
||||||
*/
|
*/
|
||||||
Zotero.Integration.Document.prototype._updateSession = function(editField) {
|
Zotero.Integration.Document.prototype._updateSession = function(newField, editField) {
|
||||||
var deleteKeys = {};
|
var deleteKeys = {};
|
||||||
this._deleteFields = [];
|
this._deleteFields = [];
|
||||||
this._removeCodeFields = [];
|
this._removeCodeFields = [];
|
||||||
|
@ -384,6 +384,7 @@ Zotero.Integration.Document.prototype._updateSession = function(editField) {
|
||||||
// first collect entire bibliography
|
// first collect entire bibliography
|
||||||
this._getFields();
|
this._getFields();
|
||||||
var editFieldIndex = false;
|
var editFieldIndex = false;
|
||||||
|
var collectFieldsTime = (new Date()).getTime();
|
||||||
for(var i in this._fields) {
|
for(var i in this._fields) {
|
||||||
var field = this._fields[i];
|
var field = this._fields[i];
|
||||||
|
|
||||||
|
@ -393,8 +394,9 @@ Zotero.Integration.Document.prototype._updateSession = function(editField) {
|
||||||
var fieldCode = field.getCode();
|
var fieldCode = field.getCode();
|
||||||
|
|
||||||
if(fieldCode.substr(0, ITEM_CODE.length) == ITEM_CODE) {
|
if(fieldCode.substr(0, ITEM_CODE.length) == ITEM_CODE) {
|
||||||
|
var noteIndex = (this._session.style.class == "note" ? field.getNoteIndex() : 0);
|
||||||
try {
|
try {
|
||||||
this._session.addCitation(i, field.getNoteIndex(), fieldCode.substr(ITEM_CODE.length+1));
|
this._session.addCitation(i, noteIndex, fieldCode.substr(ITEM_CODE.length+1));
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
if(e instanceof Zotero.Integration.MissingItemException) {
|
if(e instanceof Zotero.Integration.MissingItemException) {
|
||||||
// First, check if we've already decided to remove field codes from these
|
// First, check if we've already decided to remove field codes from these
|
||||||
|
@ -440,11 +442,20 @@ Zotero.Integration.Document.prototype._updateSession = function(editField) {
|
||||||
} else if(fieldCode.substr(0, BIBLIOGRAPHY_CODE.length) == BIBLIOGRAPHY_CODE) {
|
} else if(fieldCode.substr(0, BIBLIOGRAPHY_CODE.length) == BIBLIOGRAPHY_CODE) {
|
||||||
this._bibliographyFields.push(field);
|
this._bibliographyFields.push(field);
|
||||||
if(!this._session.bibliographyData && !bibliographyData) {
|
if(!this._session.bibliographyData && !bibliographyData) {
|
||||||
bibliographyData = field.getCode().substr(BIBLIOGRAPHY_CODE.length+1);
|
bibliographyData = fieldCode.substr(BIBLIOGRAPHY_CODE.length+1);
|
||||||
|
}
|
||||||
|
} else if(fieldCode == "TEMP") {
|
||||||
|
if(newField) {
|
||||||
|
editFieldIndex = i;
|
||||||
|
editField = field;
|
||||||
|
} else {
|
||||||
|
this._deleteFields.push(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var endTime = (new Date()).getTime();
|
||||||
|
Zotero.debug("Collected "+this._fields.length+" fields in "+(endTime-collectFieldsTime)/1000+"; "+1000/((endTime-collectFieldsTime)/this._fields.length)+" fields/second");
|
||||||
|
|
||||||
// load uncited items from bibliography
|
// load uncited items from bibliography
|
||||||
if(bibliographyData && !this._session.bibliographyData) {
|
if(bibliographyData && !this._session.bibliographyData) {
|
||||||
|
@ -538,9 +549,11 @@ Zotero.Integration.Document.prototype._updateDocument = function(forceCitations,
|
||||||
}
|
}
|
||||||
|
|
||||||
// do this operations in reverse in case plug-ins care about order
|
// do this operations in reverse in case plug-ins care about order
|
||||||
|
this._deleteFields.sort();
|
||||||
for(var i=(this._deleteFields.length-1); i>=0; i--) {
|
for(var i=(this._deleteFields.length-1); i>=0; i--) {
|
||||||
this._fields[this._deleteFields[i]].delete();
|
this._fields[this._deleteFields[i]].delete();
|
||||||
}
|
}
|
||||||
|
this._removeCodeFields.sort();
|
||||||
for(var i=(this._removeCodeFields.length-1); i>=0; i--) {
|
for(var i=(this._removeCodeFields.length-1); i>=0; i--) {
|
||||||
this._fields[this._removeCodeFields[i]].removeCode();
|
this._fields[this._removeCodeFields[i]].removeCode();
|
||||||
}
|
}
|
||||||
|
@ -553,9 +566,10 @@ Zotero.Integration.Document.prototype.addCitation = function() {
|
||||||
this._getSession();
|
this._getSession();
|
||||||
|
|
||||||
var field = this._addField(true);
|
var field = this._addField(true);
|
||||||
|
field.setCode("TEMP");
|
||||||
if(!field) return;
|
if(!field) return;
|
||||||
|
|
||||||
this._updateSession(field);
|
this._updateSession(true);
|
||||||
this._updateDocument();
|
this._updateDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,7 +584,7 @@ Zotero.Integration.Document.prototype.editCitation = function() {
|
||||||
throw new Zotero.Integration.DisplayException("notInCitation");
|
throw new Zotero.Integration.DisplayException("notInCitation");
|
||||||
}
|
}
|
||||||
|
|
||||||
this._updateSession(field);
|
this._updateSession(false, field);
|
||||||
this._updateDocument(false, false);
|
this._updateDocument(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue