Skip to content

Commit

Permalink
Fixed oversight causing XML reserved characters to be encoded twice.
Browse files Browse the repository at this point in the history
Removed "Don't format illegal characters" XML option since it can no longer be used.
Moved the "Root element" option to the general XML section.
Updated release notes and version to 52.
  • Loading branch information
Synthoid committed Dec 9, 2018
1 parent 3f32ec0 commit c989f3a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 74 deletions.
Binary file modified ReleaseNotes.pdf
Binary file not shown.
54 changes: 5 additions & 49 deletions src/ExportSheetData.gs
@@ -1,4 +1,4 @@
var esdVersion = 51;
var esdVersion = 52;

//Popup message
var messageLineHeight = 10;
Expand Down Expand Up @@ -351,46 +351,6 @@ function formatXmlName(value, replacement)
return xmlName;
}

//Encodes illegal XML characters into a format readable to XML
function formatXmlString(value)
{
if(!isNaN(value)) return value;

var xmlString = "";

for(var i=0; i < value.length; i++)
{
switch(value[i])
{
case '&':
xmlString += '&amp;';
break;

case '<':
xmlString += '&lt;';
break;

case '>':
xmlString += '&gt;';
break;

case '"':
xmlString += '&quot;';
break;

case "'":
xmlString += '&apos;';
break;

default:
xmlString += value[i];
break;
}
}

return xmlString;
}


function formatJsonString(value, asObject)
{
Expand All @@ -416,7 +376,7 @@ function formatJsonString(value, asObject)
return JSON.stringify(value);
}


//Returns true if a key starts with the specified prefix.
function keyHasPrefix(key, prefix)
{
if(prefix.length > key.length || prefix.length === 0) return false;
Expand Down Expand Up @@ -736,7 +696,6 @@ function exportSpreadsheetXml(formatSettings)

//XML settings
var useChildElements = settings["exportChildElements"];
var replaceIllegal = settings["formatContent"];
var includeFirstColumnXml = settings["includeFirstColumn"];
var rootElement = settings["rootElement"];
var nameReplacementChar = settings["nameReplacementChar"];
Expand Down Expand Up @@ -866,17 +825,15 @@ function exportSpreadsheetXml(formatSettings)
//Set attributes
for(var k=0; k < attributes.length; k++)
{
if(replaceIllegal) rowXml.setAttribute(formatXmlName(attributeKeys[k], nameReplacementChar), formatXmlString(attributes[k]));
else rowXml.setAttribute(formatXmlName(attributeKeys[k], nameReplacementChar), attributes[k]);
rowXml.setAttribute(formatXmlName(attributeKeys[k], nameReplacementChar), attributes[k]);
}

//Set child elements
for(var k=0; k < childElements.length; k++)
{
var childXml = XmlService.createElement(formatXmlName(childElementKeys[k], nameReplacementChar));

if(replaceIllegal) childXml.setText(formatXmlString(childElements[k]));
else childXml.setText(childElements[k]);
childXml.setText(childElements[k]);

rowXml.addContent(childXml);
}
Expand All @@ -888,8 +845,7 @@ function exportSpreadsheetXml(formatSettings)

for(var k=0; k < innerTextElements.length; k++)
{
if(replaceIllegal) innerText += formatXmlString(innerTextElements[k]);
else innerText += innerTextElements[k];
innerText += innerTextElements[k];

if(k < innerTextElements.length - 1) innerText += "\n";
}
Expand Down
31 changes: 6 additions & 25 deletions src/Sidebar.html
Expand Up @@ -229,8 +229,6 @@
//XML Options
//Export values as child elements instead of attributes
var exportChildElementXml = false;
//Replace illegal XML characters with their XML compatible codes
var formatContentXml = false;
//Include the first column in the export in addition to using it as the name for the row element.
var includeFirstColumnXml = false;

Expand Down Expand Up @@ -348,7 +346,6 @@

//XML
exportChildElementXml = settings["exportChildElements"] != null ? settings["exportChildElements"] === true : exportChildElementXml;
formatContentXml = settings["formatContent"] != null ? settings["formatContent"] === true : formatContentXml;
includeFirstColumnXml = settings["includeFirstColumn"] != null ? settings["includeFirstColumn"] === true : includeFirstColumnXml;
rootElementXml = settings["rootElement"] != null ? (settings["rootElement"] === "" ? rootElementXml : settings["rootElement"]) : rootElementXml;
nameReplacementCharXml = settings["nameReplacementChar"] != null ? (settings["nameReplacementChar"] === "" ? nameReplacementCharXml : settings["nameReplacementChar"]) : nameReplacementCharXml;
Expand Down Expand Up @@ -402,7 +399,6 @@
"forceArrayPrefix" : (forceArrayPrefixJson === "" ? JSON_JA_DEFAULT : forceArrayPrefixJson),
//XML
"exportChildElements" : exportChildElementXml,
"formatContent" : formatContentXml,
"includeFirstColumn" : includeFirstColumnXml,
"rootElement" : getRootElement(),
"nameReplacementChar" : nameReplacementCharXml,
Expand Down Expand Up @@ -564,11 +560,6 @@
exportChildElementXml = !exportChildElementXml;
}

function toggleFormatContentXml()
{
formatContentXml = !formatContentXml;
}

function toggleIncludeFirstColumnXml()
{
includeFirstColumnXml = !includeFirstColumnXml;
Expand Down Expand Up @@ -1056,22 +1047,18 @@
xmlText += "<div class='sectionWrapper'><input id='elementToggle' type='checkbox' value='false'";
if(exportChildElementXml) xmlText += " checked";
xmlText += "/><div class='option'>Export columns as child elements<div class='tooltip note'>Export a sheet's columns as child elements instead of attributes for each row.</div></div></div>";
//Format xml content
xmlText += "<div class='sectionWrapper'><input id='formatToggle' type='checkbox' value='false'";
if(formatContentXml) xmlText += " checked";
xmlText += "/><div class='option'>Don't format illegal characters<div class='tooltip note'>Don't replace illegal XML characters in values with their appropriate XML encoding. (keys are always encoded)</div></div></div>";
//Include first column in export
xmlText += "<div class='sectionWrapper'><input id='firstColumnXmlToggle' type='checkbox' value='false'";
if(includeFirstColumnXml) xmlText += " checked";
xmlText += "/><div class='option'>Include first column in export<div class='tooltip note'>Export the first column as a distinct element in addition to the name of the row element.</div></div></div></div>";
xmlText += "/><div class='option'>Include first column in export<div class='tooltip note'>Export the first column as a distinct element in addition to using it as the name of each row element.</div></div></div>";
//Root element value
xmlText += "<div class='sectionWrapper'><div class='option'>Root element<div class='tooltip note padded'>Root element for the exported XML document.</div></div><input id='xmlRootField' type='text' value=";
xmlText += "'" + rootElementXml + "'";
xmlText += " placeholder='" + XML_ROOT_DEFAULT + "'/></div>";
xmlText += "</div>";

//Advanced Options
var advancedXmlText = "<div class='accordion active'><h1>Advanced XML</h1></div><div class='accordionPanel'>";
//Root element value
advancedXmlText += "<div class='sectionWrapper'><div class='option'>Root element<div class='tooltip note padded'>Root element for the exported XML document.</div></div><input id='xmlRootField' type='text' value=";
advancedXmlText += "'" + rootElementXml + "'";
advancedXmlText += " placeholder='" + XML_ROOT_DEFAULT + "'";
advancedXmlText += "/></div>";
//Invalid element name char replacement
advancedXmlText += "<div class='sectionWrapper'><div class='option'><label for='select'>Name replacement char</label><div class='tooltip note padded'>What character to use when replacing illegal characters in XML element names.</div></div><select class='dropdown' id='xmlNameReplaceCharDropdown' onchange='changeNameReplacementCharXml()'><option value='_'";
if(nameReplacementCharXml === "_") advancedXmlText += " selected";
Expand Down Expand Up @@ -1175,7 +1162,6 @@
document.getElementById("advancedOptions").innerHTML = advancedXmlText;
//XML Options
document.getElementById('elementToggle').addEventListener("change", toggleElement);
document.getElementById('formatToggle').addEventListener("change", toggleFormatContentXml);
document.getElementById('firstColumnXmlToggle').addEventListener("change", toggleIncludeFirstColumnXml);
//Advanced Options
document.getElementById('xmlRootField').addEventListener("change", updateRootElementXml);
Expand Down Expand Up @@ -1507,10 +1493,6 @@
{
document.getElementById('elementToggle').removeEventListener("change", toggleElement);
}
if(document.getElementById('formatToggle') != null)
{
document.getElementById('formatToggle').removeEventListener("change", toggleFormatContentXml);
}
if(document.getElementById('firstColumnXmlToggle') != null)
{
document.getElementById('firstColumnXmlToggle').removeEventListener("change", toggleIncludeFirstColumnXml);
Expand Down Expand Up @@ -1610,7 +1592,6 @@
"collapsePrefix":getCollapsePrefix(),
"targetSheets" : exportSheets,
"exportChildElements" : exportChildElementXml,
"formatContent" : !formatContentXml,
"includeFirstColumn" : includeFirstColumnXml,
"rootElement" : getRootElement(),
"nameReplacementChar" : nameReplacementCharXml,
Expand Down

0 comments on commit c989f3a

Please sign in to comment.