Update citeproc-js to 1.1.25
And split off Zotero additions
This commit is contained in:
parent
b69e6fc3ab
commit
bf58de7e62
3 changed files with 1558 additions and 882 deletions
390
chrome/content/zotero/xpcom/citeproc-prereqs.js
Normal file
390
chrome/content/zotero/xpcom/citeproc-prereqs.js
Normal file
|
@ -0,0 +1,390 @@
|
|||
var CSL_HOST = {
|
||||
debug: function (str) {
|
||||
Zotero.debug("CSL: " + str);
|
||||
},
|
||||
error: function (str) {
|
||||
Zotero.debug("CSL error: " + str);
|
||||
}
|
||||
};
|
||||
function DOMParser() {
|
||||
return Components.classes["@mozilla.org/xmlextras/domparser;1"]
|
||||
.createInstance(Components.interfaces.nsIDOMParser);
|
||||
};
|
||||
|
||||
var CSL_IS_IE;
|
||||
var CSL_CHROME = function () {
|
||||
if ("undefined" == typeof DOMParser || CSL_IS_IE) {
|
||||
CSL_IS_IE = true;
|
||||
DOMParser = function() {};
|
||||
DOMParser.prototype.parseFromString = function(str, contentType) {
|
||||
if ("undefined" != typeof ActiveXObject) {
|
||||
var xmldata = new ActiveXObject('MSXML.DomDocument');
|
||||
xmldata.async = false;
|
||||
xmldata.loadXML(str);
|
||||
return xmldata;
|
||||
} else if ("undefined" != typeof XMLHttpRequest) {
|
||||
var xmldata = new XMLHttpRequest;
|
||||
if (!contentType) {
|
||||
contentType = 'text/xml';
|
||||
}
|
||||
xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);
|
||||
if(xmldata.overrideMimeType) {
|
||||
xmldata.overrideMimeType(contentType);
|
||||
}
|
||||
xmldata.send(null);
|
||||
return xmldata.responseXML;
|
||||
}
|
||||
};
|
||||
this.hasAttributes = function (node) {
|
||||
var ret;
|
||||
if (node.attributes && node.attributes.length) {
|
||||
ret = true;
|
||||
} else {
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
} else {
|
||||
this.hasAttributes = function (node) {
|
||||
var ret;
|
||||
if (node.attributes && node.attributes.length) {
|
||||
ret = true;
|
||||
} else {
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
this.importNode = function (doc, srcElement) {
|
||||
if ("undefined" == typeof doc.importNode) {
|
||||
var ret = this._importNode(doc, srcElement, true);
|
||||
} else {
|
||||
var ret = doc.importNode(srcElement, true);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
this._importNode = function(doc, node, allChildren) {
|
||||
switch (node.nodeType) {
|
||||
case 1:
|
||||
var newNode = doc.createElement(node.nodeName);
|
||||
if (node.attributes && node.attributes.length > 0)
|
||||
for (var i = 0, il = node.attributes.length; i < il;)
|
||||
newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i++].nodeName));
|
||||
if (allChildren && node.childNodes && node.childNodes.length > 0)
|
||||
for (var i = 0, il = node.childNodes.length; i < il;)
|
||||
newNode.appendChild(this._importNode(doc, node.childNodes[i++], allChildren));
|
||||
return newNode;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
case 8:
|
||||
}
|
||||
};
|
||||
this.parser = new DOMParser();
|
||||
var str = "<docco><institution institution-parts=\"long\" delimiter=\", \" substitute-use-first=\"1\" use-last=\"1\"><institution-part name=\"long\"/></institution></docco>";
|
||||
var inst_doc = this.parser.parseFromString(str, "text/xml");
|
||||
var inst_node = inst_doc.getElementsByTagName("institution");
|
||||
this.institution = inst_node.item(0);
|
||||
var inst_part_node = inst_doc.getElementsByTagName("institution-part");
|
||||
this.institutionpart = inst_part_node.item(0);
|
||||
this.ns = "http://purl.org/net/xbiblio/csl";
|
||||
};
|
||||
CSL_CHROME.prototype.clean = function (xml) {
|
||||
xml = xml.replace(/<\?[^?]+\?>/g, "");
|
||||
xml = xml.replace(/<![^>]+>/g, "");
|
||||
xml = xml.replace(/^\s+/, "");
|
||||
xml = xml.replace(/\s+$/, "");
|
||||
xml = xml.replace(/^\n*/, "");
|
||||
return xml;
|
||||
};
|
||||
CSL_CHROME.prototype.getStyleId = function (myxml, styleName) {
|
||||
var text = "";
|
||||
var tagName = "id";
|
||||
if (styleName) {
|
||||
tagName = "title";
|
||||
}
|
||||
var node = myxml.getElementsByTagName(tagName);
|
||||
if (node && node.length) {
|
||||
node = node.item(0);
|
||||
}
|
||||
if (node) {
|
||||
text = node.textContent;
|
||||
}
|
||||
if (!text) {
|
||||
text = node.innerText;
|
||||
}
|
||||
if (!text) {
|
||||
text = node.innerHTML;
|
||||
}
|
||||
return text;
|
||||
};
|
||||
CSL_CHROME.prototype.children = function (myxml) {
|
||||
var children, pos, len, ret;
|
||||
if (myxml) {
|
||||
ret = [];
|
||||
children = myxml.childNodes;
|
||||
for (pos = 0, len = children.length; pos < len; pos += 1) {
|
||||
if (children[pos].nodeName != "#text") {
|
||||
ret.push(children[pos]);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
CSL_CHROME.prototype.nodename = function (myxml) {
|
||||
var ret = myxml.nodeName;
|
||||
return ret;
|
||||
};
|
||||
CSL_CHROME.prototype.attributes = function (myxml) {
|
||||
var ret, attrs, attr, key, xml, pos, len;
|
||||
ret = new Object();
|
||||
if (myxml && this.hasAttributes(myxml)) {
|
||||
attrs = myxml.attributes;
|
||||
for (pos = 0, len=attrs.length; pos < len; pos += 1) {
|
||||
attr = attrs[pos];
|
||||
ret["@" + attr.name] = attr.value;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
CSL_CHROME.prototype.content = function (myxml) {
|
||||
var ret;
|
||||
if ("undefined" != typeof myxml.textContent) {
|
||||
ret = myxml.textContent;
|
||||
} else if ("undefined" != typeof myxml.innerText) {
|
||||
ret = myxml.innerText;
|
||||
} else {
|
||||
ret = myxml.txt;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
CSL_CHROME.prototype.namespace = {
|
||||
"xml":"http://www.w3.org/XML/1998/namespace"
|
||||
}
|
||||
CSL_CHROME.prototype.numberofnodes = function (myxml) {
|
||||
if (myxml) {
|
||||
return myxml.length;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
CSL_CHROME.prototype.getAttributeName = function (attr) {
|
||||
var ret = attr.name;
|
||||
return ret;
|
||||
}
|
||||
CSL_CHROME.prototype.getAttributeValue = function (myxml,name,namespace) {
|
||||
var ret = "";
|
||||
if (namespace) {
|
||||
name = namespace+":"+name;
|
||||
}
|
||||
if (myxml && this.hasAttributes(myxml) && myxml.getAttribute(name)) {
|
||||
ret = myxml.getAttribute(name);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
CSL_CHROME.prototype.getNodeValue = function (myxml,name) {
|
||||
var ret = null;
|
||||
if (name){
|
||||
var vals = myxml.getElementsByTagName(name);
|
||||
if (vals.length > 0) {
|
||||
if ("undefined" != typeof vals[0].textContent) {
|
||||
ret = vals[0].textContent;
|
||||
} else if ("undefined" != typeof vals[0].innerText) {
|
||||
ret = vals[0].innerText;
|
||||
} else {
|
||||
ret = vals[0].text;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ret === null && myxml && myxml.childNodes && (myxml.childNodes.length == 0 || (myxml.childNodes.length == 1 && myxml.firstChild.nodeName == "#text"))) {
|
||||
if ("undefined" != typeof myxml.textContent) {
|
||||
ret = myxml.textContent;
|
||||
} else if ("undefined" != typeof myxml.innerText) {
|
||||
ret = myxml.innerText;
|
||||
} else {
|
||||
ret = myxml.text;
|
||||
}
|
||||
}
|
||||
if (ret === null) {
|
||||
ret = myxml;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
CSL_CHROME.prototype.setAttributeOnNodeIdentifiedByNameAttribute = function (myxml,nodename,partname,attrname,val) {
|
||||
var pos, len, xml, nodes, node;
|
||||
if (attrname.slice(0,1) === '@'){
|
||||
attrname = attrname.slice(1);
|
||||
}
|
||||
nodes = myxml.getElementsByTagName(nodename);
|
||||
for (pos = 0, len = nodes.length; pos < len; pos += 1) {
|
||||
node = nodes[pos];
|
||||
if (node.getAttribute("name") != partname) {
|
||||
continue;
|
||||
}
|
||||
node.setAttribute(attrname, val);
|
||||
}
|
||||
}
|
||||
CSL_CHROME.prototype.deleteNodeByNameAttribute = function (myxml,val) {
|
||||
var pos, len, node, nodes;
|
||||
nodes = myxml.childNodes;
|
||||
for (pos = 0, len = nodes.length; pos < len; pos += 1) {
|
||||
node = nodes[pos];
|
||||
if (!node || node.nodeType == node.TEXT_NODE) {
|
||||
continue;
|
||||
}
|
||||
if (this.hasAttributes(node) && node.getAttribute("name") == val) {
|
||||
myxml.removeChild(nodes[pos]);
|
||||
}
|
||||
}
|
||||
}
|
||||
CSL_CHROME.prototype.deleteAttribute = function (myxml,attr) {
|
||||
myxml.removeAttribute(attr);
|
||||
}
|
||||
CSL_CHROME.prototype.setAttribute = function (myxml,attr,val) {
|
||||
if (!myxml.ownerDocument) {
|
||||
myxml = myxml.firstChild;
|
||||
}
|
||||
if (["function", "unknown"].indexOf(typeof myxml.setAttribute) > -1) {
|
||||
myxml.setAttribute(attr, val);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
CSL_CHROME.prototype.nodeCopy = function (myxml) {
|
||||
var cloned_node = myxml.cloneNode(true);
|
||||
return cloned_node;
|
||||
}
|
||||
CSL_CHROME.prototype.getNodesByName = function (myxml,name,nameattrval) {
|
||||
var ret, nodes, node, pos, len;
|
||||
ret = [];
|
||||
nodes = myxml.getElementsByTagName(name);
|
||||
for (pos = 0, len = nodes.length; pos < len; pos += 1) {
|
||||
node = nodes.item(pos);
|
||||
if (nameattrval && !(this.hasAttributes(node) && node.getAttribute("name") == nameattrval)) {
|
||||
continue;
|
||||
}
|
||||
ret.push(node);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
CSL_CHROME.prototype.nodeNameIs = function (myxml,name) {
|
||||
if (name == myxml.nodeName) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
CSL_CHROME.prototype.makeXml = function (myxml) {
|
||||
var ret, topnode;
|
||||
if (!myxml) {
|
||||
myxml = "<docco><bogus/></docco>";
|
||||
}
|
||||
myxml = myxml.replace(/\s*<\?[^>]*\?>\s*\n*/g, "");
|
||||
var nodetree = this.parser.parseFromString(myxml, "application/xml");
|
||||
return nodetree.firstChild;
|
||||
};
|
||||
CSL_CHROME.prototype.insertChildNodeAfter = function (parent,node,pos,datexml) {
|
||||
var myxml, xml;
|
||||
myxml = this.importNode(node.ownerDocument, datexml);
|
||||
parent.replaceChild(myxml, node);
|
||||
return parent;
|
||||
};
|
||||
CSL_CHROME.prototype.insertPublisherAndPlace = function(myxml) {
|
||||
var group = myxml.getElementsByTagName("group");
|
||||
for (var i = 0, ilen = group.length; i < ilen; i += 1) {
|
||||
var node = group.item(i);
|
||||
var skippers = [];
|
||||
for (var j = 0, jlen = node.childNodes.length; j < jlen; j += 1) {
|
||||
if (node.childNodes.item(j).nodeType !== 1) {
|
||||
skippers.push(j);
|
||||
}
|
||||
}
|
||||
if (node.childNodes.length - skippers.length === 2) {
|
||||
var twovars = [];
|
||||
for (var j = 0, jlen = 2; j < jlen; j += 1) {
|
||||
if (skippers.indexOf(j) > -1) {
|
||||
continue;
|
||||
}
|
||||
var child = node.childNodes.item(j);
|
||||
var subskippers = [];
|
||||
for (var k = 0, klen = child.childNodes.length; k < klen; k += 1) {
|
||||
if (child.childNodes.item(k).nodeType !== 1) {
|
||||
subskippers.push(k);
|
||||
}
|
||||
}
|
||||
if (child.childNodes.length - subskippers.length === 0) {
|
||||
twovars.push(child.getAttribute('variable'));
|
||||
if (child.getAttribute('suffix')
|
||||
|| child.getAttribute('prefix')) {
|
||||
twovars = [];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (twovars.indexOf("publisher") > -1 && twovars.indexOf("publisher-place") > -1) {
|
||||
node.setAttribute('has-publisher-and-publisher-place', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
CSL_CHROME.prototype.addMissingNameNodes = function(myxml) {
|
||||
var nameslist = myxml.getElementsByTagName("names");
|
||||
for (var i = 0, ilen = nameslist.length; i < ilen; i += 1) {
|
||||
var names = nameslist.item(i);
|
||||
var namelist = names.getElementsByTagName("name");
|
||||
if ((!namelist || namelist.length === 0)
|
||||
&& names.parentNode.tagName.toLowerCase() !== "substitute") {
|
||||
var doc = names.ownerDocument;
|
||||
var name = doc.createElement("name");
|
||||
names.appendChild(name);
|
||||
}
|
||||
}
|
||||
};
|
||||
CSL_CHROME.prototype.addInstitutionNodes = function(myxml) {
|
||||
var names, thenames, institution, theinstitution, name, thename, xml, pos, len;
|
||||
names = myxml.getElementsByTagName("names");
|
||||
for (pos = 0, len = names.length; pos < len; pos += 1) {
|
||||
thenames = names.item(pos);
|
||||
name = thenames.getElementsByTagName("name");
|
||||
if (name.length == 0) {
|
||||
continue;
|
||||
}
|
||||
institution = thenames.getElementsByTagName("institution");
|
||||
if (institution.length == 0) {
|
||||
theinstitution = this.importNode(myxml.ownerDocument, this.institution);
|
||||
theinstitutionpart = theinstitution.getElementsByTagName("institution-part").item(0);
|
||||
thename = name.item(0);
|
||||
thenames.insertBefore(theinstitution, thename.nextSibling);
|
||||
for (var j = 0, jlen = CSL.INSTITUTION_KEYS.length; j < jlen; j += 1) {
|
||||
var attrname = CSL.INSTITUTION_KEYS[j];
|
||||
var attrval = thename.getAttribute(attrname);
|
||||
if (attrval) {
|
||||
theinstitutionpart.setAttribute(attrname, attrval);
|
||||
}
|
||||
}
|
||||
var nameparts = thename.getElementsByTagName("name-part");
|
||||
for (var j = 0, jlen = nameparts.length; j < jlen; j += 1) {
|
||||
if ('family' === nameparts[j].getAttribute('name')) {
|
||||
for (var k = 0, klen = CSL.INSTITUTION_KEYS.length; k < klen; k += 1) {
|
||||
var attrname = CSL.INSTITUTION_KEYS[k];
|
||||
var attrval = nameparts[j].getAttribute(attrname);
|
||||
if (attrval) {
|
||||
theinstitutionpart.setAttribute(attrname, attrval);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
CSL_CHROME.prototype.flagDateMacros = function(myxml) {
|
||||
var pos, len, thenode, thedate;
|
||||
nodes = myxml.getElementsByTagName("macro");
|
||||
for (pos = 0, len = nodes.length; pos < len; pos += 1) {
|
||||
thenode = nodes.item(pos);
|
||||
thedate = thenode.getElementsByTagName("date");
|
||||
if (thedate.length) {
|
||||
thenode.setAttribute('macro-has-date', 'true');
|
||||
}
|
||||
}
|
||||
};
|
File diff suppressed because it is too large
Load diff
|
@ -224,6 +224,7 @@ function makeZoteroContext(isConnector) {
|
|||
|
||||
// Load CiteProc into Zotero.CiteProc namespace
|
||||
zContext.Zotero.CiteProc = {"Zotero":zContext.Zotero};
|
||||
subscriptLoader.loadSubScript("chrome://zotero/content/xpcom/citeproc-prereqs.js", zContext.Zotero.CiteProc);
|
||||
subscriptLoader.loadSubScript("chrome://zotero/content/xpcom/citeproc.js", zContext.Zotero.CiteProc);
|
||||
|
||||
// Load XRegExp object into Zotero.XRegExp
|
||||
|
|
Loading…
Reference in a new issue