www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 089909c95efb9d846e24e71eb05d93bffbf6ba7b
parent 1f53fc8202659e5f09a770cb572fd5f717964845
Author: Simon Kornblith <simon@simonster.com>
Date:   Sun, 24 Jun 2012 22:29:15 -0400

Kill E4X in Zotero.Cite.makeFormattedBibliography

Diffstat:
Mchrome/content/zotero/xpcom/cite.js | 71+++++++++++++++++++++++++++++++++++++++++------------------------------
1 file changed, 41 insertions(+), 30 deletions(-)

diff --git a/chrome/content/zotero/xpcom/cite.js b/chrome/content/zotero/xpcom/cite.js @@ -293,13 +293,14 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { if(lineSpacing == NaN) throw "Invalid linespacing"; var str; - default xml namespace = ''; with({}); - try { - XML.prettyPrinting = false; - XML.ignoreWhitespace = false; - var xml = new XML(html); + try { + var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"] + .createInstance(Components.interfaces.nsIDOMParser), + doc = parser.parseFromString(html, "application/xml"); - var multiField = !!xml..div.(@class == "csl-left-margin").length(); + var leftMarginDivs = Zotero.Utilities.xpath(doc, '//div[@class="csl-left-margin"]'), + multiField = !!leftMarginDivs.length, + clearEntries = multiField; // One of the characters is usually a period, so we can adjust this down a bit maxOffset = Math.max(1, maxOffset - 2); @@ -307,7 +308,9 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { // Force a minimum line height if(lineSpacing <= 1.35) lineSpacing = 1.35; - xml.@style += "line-height: " + lineSpacing + "; "; + var style = doc.documentElement.getAttribute("style"); + if(!style) style = ""; + style += "line-height: " + lineSpacing + "; "; if(hangingIndent) { if (multiField && !secondFieldAlign) { @@ -315,32 +318,28 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { } // If only one field, apply hanging indent on root else if (!multiField) { - xml.@style += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; + style += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; } } - var leftMarginDivs = xml..div.(@class == "csl-left-margin"); - var clearEntries = leftMarginDivs.length() > 0; + if(style) doc.documentElement.setAttribute("style", style); // csl-entry - var divs = xml..div.(@class == "csl-entry"); - var num = divs.length(); - var i = 0; - for each(var div in divs) { - var first = i == 0; - var last = i == num - 1; + var divs = Zotero.Utilities.xpath(doc, '//div[@class="csl-entry"]'); + for(var i=0, n=divs.length; i<n; i++) { + var div = divs[i], + divStyle = div.getAttribute("style"); + if(!divStyle) divStyle = ""; if (clearEntries) { - div.@style += "clear: left; "; + divStyle += "clear: left; "; } - if(entrySpacing) { - if(!last) { - div.@style += "margin-bottom: " + entrySpacing + "em;"; - } + if(entrySpacing && i !== n - 1) { + divStyle += "margin-bottom: " + entrySpacing + "em;"; } - i++; + if(divStyle) div.setAttribute("style", divStyle); } // Padding on the label column, which we need to include when @@ -349,32 +348,44 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { // div.csl-left-margin for each(var div in leftMarginDivs) { - div.@style = "float: left; padding-right: " + rightPadding + "em;"; + var divStyle = div.getAttribute("style"); + if(!divStyle) divStyle = ""; + + divStyle = "float: left; padding-right: " + rightPadding + "em;"; // Right-align the labels if aligning second line, since it looks // better and we don't need the second line of text to align with // the left edge of the label if (secondFieldAlign) { - div.@style += "text-align: right; width: " + maxOffset + "em;"; + divStyle += "text-align: right; width: " + maxOffset + "em;"; } + + div.setAttribute("style", divStyle); } // div.csl-right-inline - for each(var div in xml..div.(@class == "csl-right-inline")) { - div.@style = "margin: 0 .4em 0 " + (secondFieldAlign ? maxOffset + rightPadding : "0") + "em;"; + for each(var div in Zotero.Utilities.xpath(doc, '//div[@class="csl-right-inline"]')) { + var divStyle = div.getAttribute("style"); + if(!divStyle) divStyle = ""; + + divStyle = "margin: 0 .4em 0 " + (secondFieldAlign ? maxOffset + rightPadding : "0") + "em;"; if (hangingIndent) { - div.@style += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; + divSstyle += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; } + + div.setAttribute("style", divStyle); } // div.csl-indent - for each(var div in xml..div.(@class == "csl-indent")) { - div.@style = "margin: .5em 0 0 2em; padding: 0 0 .2em .5em; border-left: 5px solid #ccc;"; + for each(var div in Zotero.Utilities.xpath(doc, '//div[@class="csl-indent"]')) { + div.setAttribute("style", "margin: .5em 0 0 2em; padding: 0 0 .2em .5em; border-left: 5px solid #ccc;"); } //Zotero.debug(xml); - str = xml.toXMLString(); + var s = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"] + .createInstance(Components.interfaces.nsIDOMSerializer); + str = s.serializeToString(doc); } finally { XML.prettyPrinting = true; XML.ignoreWhitespace = true;