closes #1043, store EndNote® styles as binary blobs

closes #1046, Provide some indicator of whether style is originally from EndNote
will require that you re-import previously imported styles
This commit is contained in:
Simon Kornblith 2008-06-22 17:16:43 +00:00
parent 4525afddc5
commit ef2ff0a884
6 changed files with 61 additions and 37 deletions

View File

@ -938,15 +938,23 @@ function refreshStylesList(cslID) {
var treerow = document.createElement('treerow'); var treerow = document.createElement('treerow');
var titleCell = document.createElement('treecell'); var titleCell = document.createElement('treecell');
var updatedCell = document.createElement('treecell'); var updatedCell = document.createElement('treecell');
var cslCell = document.createElement('treecell');
var updatedDate = Zotero.Date.formatDate(Zotero.Date.strToDate(styleData[i].updated), true); var updatedDate = Zotero.Date.formatDate(Zotero.Date.strToDate(styleData[i].updated), true);
treeitem.setAttribute('id', 'zotero-csl-'+styleData[i].cslID); treeitem.setAttribute('id', 'zotero-csl-'+styleData[i].cslID);
titleCell.setAttribute('label', styleData[i].title); titleCell.setAttribute('label', styleData[i].title);
updatedCell.setAttribute('label', updatedDate); updatedCell.setAttribute('label', updatedDate);
// if not EN
if(styleData[i].cslID.length < Zotero.ENConverter.uriPrefix.length ||
styleData[i].cslID.substr(0, Zotero.ENConverter.uriPrefix.length) != Zotero.ENConverter.uriPrefix) {
cslCell.setAttribute('src', 'chrome://zotero/skin/tick.png');
Zotero.debug("ISCSL");
}
treerow.appendChild(titleCell); treerow.appendChild(titleCell);
treerow.appendChild(updatedCell); treerow.appendChild(updatedCell);
treerow.appendChild(cslCell);
treeitem.appendChild(treerow); treeitem.appendChild(treerow);
treechildren.appendChild(treeitem); treechildren.appendChild(treeitem);
@ -988,21 +996,11 @@ function addStyle() {
// read the rest of the bytes in the file // read the rest of the bytes in the file
read += bStream.readBytes(file.fileSize-6); read += bStream.readBytes(file.fileSize-6);
// get fallback name and modification date // get name and modification date
var fallbackName = file.leafName; var name = file.leafName.replace(/\.ens$/i, "");
fallbackName = fallbackName.replace(/\.ens$/i, "");
var date = new Date(file.lastModifiedTime); var date = new Date(file.lastModifiedTime);
Zotero.debug(file.lastModifiedTime);
Zotero.debug(date);
try { var cslID = Zotero.Cite.installStyle(read, false, date, name);
var enConverter = new Zotero.ENConverter(read, date, fallbackName);
var xml = enConverter.parse();
} catch(e) {
styleImportError();
throw e;
}
var cslID = Zotero.Cite.installStyle(xml.toXMLString());
} else { } else {
// This _should_ get the right charset for us automatically // This _should_ get the right charset for us automatically
var fileURI = Components.classes["@mozilla.org/network/protocol;1?name=file"] var fileURI = Components.classes["@mozilla.org/network/protocol;1?name=file"]
@ -1018,6 +1016,7 @@ function addStyle() {
styleImportError(); styleImportError();
throw e; throw e;
} }
var cslID = Zotero.Cite.installStyle(req.responseText); var cslID = Zotero.Cite.installStyle(req.responseText);
} }
} }

View File

@ -338,6 +338,7 @@ To add a new preference:
<treecols> <treecols>
<treecol id="styleManager-title" label="&zotero.preferences.styles.styleManager.title;" flex="3"/> <treecol id="styleManager-title" label="&zotero.preferences.styles.styleManager.title;" flex="3"/>
<treecol id="styleManager-updated" label="&zotero.preferences.styles.styleManager.updated;" flex="1"/> <treecol id="styleManager-updated" label="&zotero.preferences.styles.styleManager.updated;" flex="1"/>
<treecol id="styleManager-csl" label="&zotero.preferences.styles.styleManager.csl;"/>
</treecols> </treecols>
<treechildren id="styleManager-rows"/> <treechildren id="styleManager-rows"/>
</tree> </tree>

View File

@ -76,6 +76,11 @@ Zotero.Cite = new function() {
if(csl.indexOf("<defaults") != -1) { if(csl.indexOf("<defaults") != -1) {
_lastCSL = new Zotero.CSL.Compat(csl); _lastCSL = new Zotero.CSL.Compat(csl);
} else { } else {
if(csl.substr(0, 6) == "\x00\x08\xFF\x00\x00\x00") {
// EN style
var enConverter = new Zotero.ENConverter(csl);
csl = enConverter.parse();
}
_lastCSL = new Zotero.CSL(csl); _lastCSL = new Zotero.CSL(csl);
} }
@ -96,12 +101,20 @@ Zotero.Cite = new function() {
/** /**
* installs a style * installs a style
**/ **/
function installStyle(cslString, loadURI) { function installStyle(cslString, loadURI, date, name) {
var error = false;
try { try {
if(cslString.substr(0, 6) == "\x00\x08\xFF\x00\x00\x00") {
// EN style
var enConverter = new Zotero.ENConverter(cslString, date, name);
var xml = enConverter.parse();
} else {
// CSL
var xml = new XML(Zotero.CSL.Global.cleanXML(cslString)); var xml = new XML(Zotero.CSL.Global.cleanXML(cslString));
} }
}
catch (e) { catch (e) {
var error = true; error = true;
Components.utils.reportError(e); Components.utils.reportError(e);
} }
@ -309,7 +322,11 @@ Zotero.Cite.MIMEHandler.StreamListener.prototype.onStopRequest = function(channe
Zotero.CSL = function(csl) { Zotero.CSL = function(csl) {
default xml namespace = "http://purl.org/net/xbiblio/csl"; with ({}); default xml namespace = "http://purl.org/net/xbiblio/csl"; with ({});
if(typeof csl != "XML") {
this._csl = new XML(Zotero.CSL.Global.cleanXML(csl)); this._csl = new XML(Zotero.CSL.Global.cleanXML(csl));
} else {
this._csl = CSL;
}
// initialize CSL // initialize CSL
Zotero.CSL.Global.init(); Zotero.CSL.Global.init();

View File

@ -35,6 +35,9 @@ Zotero.ENConverter = function(styleData, date, fileTitle) {
} }
} }
// The URI prefix for EN styles
Zotero.ENConverter.uriPrefix = "http://zotero.org/styles/en-converted/";
/** /**
* Mappings for item types * Mappings for item types
* *
@ -202,12 +205,19 @@ Zotero.ENConverter.seriesCodes = ["\x01", "\x09", "\x0A", "\x0B", "\x15", "\x1D"
Zotero.ENConverter.prototype.parseInfo = function() { Zotero.ENConverter.prototype.parseInfo = function() {
default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); default xml namespace = "http://purl.org/net/xbiblio/csl"; with({});
var guid = ""; if(this.fileTitle) {
var title = this.fileTitle;
} else {
var title = this.convertFromUTF16(this.findField(this.fields, "\x10")[0].data.replace("\xFB", "", "g"));
}
if(!title) {
var title = "Untitled Style";
var identifier = "";
for(var i=0; i<16; i++) { for(var i=0; i<16; i++) {
var bite = Math.floor(Math.random() * 255); var bite = Math.floor(Math.random() * 255);
if(i == 4 || i == 6 || i == 8 || i == 10) { if(i == 4 || i == 6 || i == 8 || i == 10) {
guid += "-"; identifier += "-";
// version // version
if(i == 6) bite = bite & 0x0f | 0x40; if(i == 6) bite = bite & 0x0f | 0x40;
@ -215,17 +225,14 @@ Zotero.ENConverter.prototype.parseInfo = function() {
if(i == 8) bite = bite & 0x3f | 0x80; if(i == 8) bite = bite & 0x3f | 0x80;
} }
var str = bite.toString(16); var str = bite.toString(16);
guid += str.length == 1 ? '0' + str : str; identifier += str.length == 1 ? '0' + str : str;
}
} else {
var identifier = encodeURIComponent(title);
} }
this.xml.info.id = "urn:uuid:"+guid;
if(this.fileTitle) {
var title = this.fileTitle;
} else {
var title = this.convertFromUTF16(this.findField(this.fields, "\x10")[0].data.replace("\xFB", "", "g"));
if(!title) title = "Untitled Style";
}
this.xml.info.title = title; this.xml.info.title = title;
this.xml.info.id = Zotero.ENConverter.uriPrefix+identifier;
if(this.date) { if(this.date) {
var date = this.date; var date = this.date;
@ -1369,6 +1376,5 @@ Zotero.ENConverter.prototype.parse = function() {
this.parseCitation(); this.parseCitation();
this.parseBibliography(); this.parseBibliography();
Zotero.debug(this.xml);
return this.xml; return this.xml;
} }

View File

@ -64,6 +64,7 @@
<!ENTITY zotero.preferences.styles.styleManager "Style Manager"> <!ENTITY zotero.preferences.styles.styleManager "Style Manager">
<!ENTITY zotero.preferences.styles.styleManager.title "Title"> <!ENTITY zotero.preferences.styles.styleManager.title "Title">
<!ENTITY zotero.preferences.styles.styleManager.updated "Updated"> <!ENTITY zotero.preferences.styles.styleManager.updated "Updated">
<!ENTITY zotero.preferences.styles.styleManager.csl "CSL">
<!ENTITY zotero.preferences.export.getAdditionalStyles "Get additional styles..."> <!ENTITY zotero.preferences.export.getAdditionalStyles "Get additional styles...">
<!ENTITY zotero.preferences.prefpane.keys "Shortcut Keys"> <!ENTITY zotero.preferences.prefpane.keys "Shortcut Keys">

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B