reorder namespaces (put all W3C ones first); align a few lines; tweak comments for consistency and clarity.

git-svn-id: http://svg-edit.googlecode.com/svn/trunk@2379 eee81c28-f429-11dd-99c0-75d572ba1ddd
master
Waldir Pimenta 2013-02-13 17:09:12 +00:00
parent f43adb25fa
commit 5dcdc76912
1 changed files with 28 additions and 22 deletions

View File

@ -23,20 +23,20 @@ if (!svgedit.sanitize) {
// Namespace constants
var svgns = "http://www.w3.org/2000/svg",
xlinkns = "http://www.w3.org/1999/xlink",
xmlns = "http://www.w3.org/XML/1998/namespace",
xmlns = "http://www.w3.org/XML/1998/namespace",
xmlnsns = "http://www.w3.org/2000/xmlns/", // see http://www.w3.org/TR/REC-xml-names/#xmlReserved
se_ns = "http://svg-edit.googlecode.com",
htmlns = "http://www.w3.org/1999/xhtml",
mathns = "http://www.w3.org/1998/Math/MathML";
htmlns = "http://www.w3.org/1999/xhtml",
mathns = "http://www.w3.org/1998/Math/MathML",
se_ns = "http://svg-edit.googlecode.com";
// map namespace URIs to prefixes
var nsMap_ = {};
nsMap_[xlinkns] = 'xlink';
nsMap_[xmlns] = 'xml';
nsMap_[xmlns] = 'xml';
nsMap_[xmlnsns] = 'xmlns';
nsMap_[se_ns] = 'se';
nsMap_[htmlns] = 'xhtml';
nsMap_[mathns] = 'mathml';
nsMap_[htmlns] = 'xhtml';
nsMap_[mathns] = 'mathml';
nsMap_[se_ns] = 'se';
// temporarily expose these
svgedit.sanitize.getNSMap = function() { return nsMap_; }
@ -137,17 +137,23 @@ $.each(svgWhiteList_, function(elt,atts){
// It only keeps what is allowed from our whitelist defined above
//
// Parameters:
// node - The DOM element to be checked, will also check its children
// node - The DOM element to be checked (we'll also check its children)
svgedit.sanitize.sanitizeSvg = function(node) {
// we only care about element nodes
// automatically return for all comment, etc nodes
// for text, we do a whitespace trim
if (node.nodeType == 3) {
// Cleanup text nodes
if (node.nodeType == 3) { // 3 == TEXT_NODE
// Trim whitespace
node.nodeValue = node.nodeValue.replace(/^\s+|\s+$/g, "");
// Remove empty text nodes
if(!node.nodeValue.length) node.parentNode.removeChild(node);
// Remove if empty
if(node.nodeValue.length == 0) node.parentNode.removeChild(node);
}
if (node.nodeType != 1) return;
// We only care about element nodes.
// Automatically return for all non-element nodes,
// such as comments, etc.
if (node.nodeType != 1) { // 1 == ELEMENT_NODE
return;
}
var doc = node.ownerDocument;
var parent = node.parentNode;
// can parent ever be null here? I think the root node's parent is the document...
@ -156,7 +162,7 @@ svgedit.sanitize.sanitizeSvg = function(node) {
var allowedAttrs = svgWhiteList_[node.nodeName];
var allowedAttrsNS = svgWhiteListNS_[node.nodeName];
// if this element is allowed
// if this element is supported, sanitize it
if (allowedAttrs != undefined) {
var se_attrs = [];
@ -175,8 +181,8 @@ svgedit.sanitize.sanitizeSvg = function(node) {
!(attrNsURI == xmlnsns && nsMap_[attr.nodeValue]) )
{
// TODO(codedread): Programmatically add the se: attributes to the NS-aware whitelist.
// Bypassing the whitelist to allow se: prefixes. Is there
// a more appropriate way to do this?
// Bypassing the whitelist to allow se: prefixes.
// Is there a more appropriate way to do this?
if(attrName.indexOf('se:') == 0) {
se_attrs.push([attrName, attr.nodeValue]);
}
@ -194,7 +200,7 @@ svgedit.sanitize.sanitizeSvg = function(node) {
}
}
// for the style attribute, rewrite it in terms of XML presentational attributes
// For the style attribute, rewrite it in terms of XML presentational attributes
if (attrName == "style") {
var props = attr.nodeValue.split(";"),
p = props.length;
@ -202,7 +208,7 @@ svgedit.sanitize.sanitizeSvg = function(node) {
var nv = props[p].split(":");
var attrname = $.trim(nv[0]);
var attrval = $.trim(nv[1]);
// now check that this attribute is supported
// Now check that this attribute is supported
if (allowedAttrs.indexOf(attrname) >= 0) {
node.setAttribute(attrname, attrval);
}
@ -253,7 +259,7 @@ svgedit.sanitize.sanitizeSvg = function(node) {
i = node.childNodes.length;
while (i--) { svgedit.sanitize.sanitizeSvg(node.childNodes.item(i)); }
}
// else, remove this element
// else (element not supported), remove it
else {
// remove all children from this node and insert them before this node
// FIXME: in the case of animation elements this will hardly ever be correct