Mercurial > MadButterfly
view inkscape/firefox/content/jqXMLUtils.js @ 842:76fe4afce640
The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
author | wycc |
---|---|
date | Sat, 18 Sep 2010 21:23:51 +0800 |
parents | 63aaf96209cd |
children |
line wrap: on
line source
/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ (function($) { //Converts XML DOM to JSON $.extend ({ xmlToJSON: function(xdoc) { try { if(!xdoc){ return null; } var tmpObj = {}; tmpObj.typeOf = "JSXBObject"; var xroot = (xdoc.nodeType == 9)?xdoc.documentElement:xdoc; tmpObj.RootName = xroot.nodeName || ""; if(xdoc.nodeType == 3 || xdoc.nodeType == 4) { return xdoc.nodeValue; } var isNumeric = function(s) { var testStr = ""; if(s && typeof s == "string") { testStr = s; } var pattern = /^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/; return pattern.test(testStr); }; //Alters attribute and collection names to comply with JS function formatName(name) { var regEx = /-/g; var tName = String(name).replace(regEx,"_"); return tName; } //Set Attributes of an object function setAttributes(obj, node) { if(node.attributes.length > 0) { var a = node.attributes.length-1; var attName; obj._attributes = []; do { //Order is irrelevant (speed-up) attName = String(formatName(node.attributes[a].name)); obj._attributes.push(attName); obj[attName] = $.trim(node.attributes[a].value); } while(a--); } } //Set collections function setHelpers(grpObj) { //Selects a node withing array where attribute = value grpObj.getNodeByAttribute = function(attr, obj) { if(this.length > 0) { var cNode; var maxLen = this.length -1; try { do { cNode = this[maxLen]; if(cNode[attr] == obj) { return cNode; } } while(maxLen--); } catch(e) {return false;} return false; } }; grpObj.contains = function(attr, obj) { if(this.length > 0) { var maxLen = this.length -1; try { do { if(this[maxLen][attr] == obj) { return true; } } while(maxLen--); } catch(e) {return false;} return false; } }; grpObj.indexOf = function(attr, obj) { var pos = -1; if(this.length > 0) { var maxLen = this.length -1; try { do { if(this[maxLen][attr] == obj) { pos = maxLen; } } while(maxLen--); } catch(e) {return -1;} return pos; } }; grpObj.SortByAttribute = function(col, dir) { if(this.length) { function getValue(pair, idx) { var out = pair[idx]; out = (isNumeric(out))?parseFloat(out):out; return out; } function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a, col); tB = getValue(b, col); if(tA < tB) { res = -1; } else if(tB < tA) { res = 1; } if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res; } return res; } this.sort(sortFn); } }; grpObj.SortByValue = function(dir) { if(this.length) { function getValue(pair) { var out = pair.Text; out = (isNumeric(out))?parseFloat(out):out; return out; } function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a); tB = getValue(b); if(tA < tB) { res = -1; } else if(tB < tA) { res = 1; } if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res; } return res; } this.sort(sortFn); } }; grpObj.SortByNode = function(node, dir) { if(this.length) { function getValue(pair, node) { var out = pair[node][0].Text; out = (isNumeric(out))?parseFloat(out):out; return out; } function sortFn(a, b) { var res = 0; var tA, tB; tA = getValue(a, node); tB = getValue(b, node); if(tA < tB) { res = -1; } else if(tB < tA) { res = 1; } if(dir) { res = (dir.toUpperCase() == "DESC")?(0 - res):res; } return res; } this.sort(sortFn); } }; } //Recursive JSON Assembler //Set Object Nodes function setObjects(obj, node) { var elemName; //Element name var cnode; //Current Node var tObj; //New subnode var cName = ""; if(!node) { return null; } //Set node attributes if any if(node.attributes.length > 0){setAttributes(obj, node);} obj.Text = ""; if(node.hasChildNodes()) { var nodeCount = node.childNodes.length - 1; var n = 0; do { //Order is irrelevant (speed-up) cnode = node.childNodes[n]; switch(cnode.nodeType) { case 1: //Node //Process child nodes obj._children = []; //SOAP XML FIX to remove namespaces (i.e. soapenv:) elemName = (cnode.localName)?cnode.localName:cnode.baseName; elemName = formatName(elemName); if(cName != elemName) { obj._children.push(elemName); } //Create sub elemns array if(!obj[elemName]) { obj[elemName] = []; //Create Collection } tObj = {}; obj[elemName].push(tObj); if(cnode.attributes.length > 0) { setAttributes(tObj, cnode); } //Set Helper functions (contains, indexOf, sort, etc); if(!obj[elemName].contains) { setHelpers(obj[elemName]); } cName = elemName; if(cnode.hasChildNodes()) { setObjects(tObj, cnode); //Recursive Call } break; case 3: //Text Value obj.Text += $.trim(cnode.nodeValue); break; case 4: //CDATA obj.Text += (cnode.text)?$.trim(cnode.text):$.trim(cnode.nodeValue); break; } } while(n++ < nodeCount); } } //RUN setObjects(tmpObj, xroot); //Clean-up memmory xdoc = null; xroot = null; return tmpObj; } catch(e) { return null; } } }); //Converts Text to XML DOM $.extend({ textToXML: function(strXML) { var xmlDoc = null; try { xmlDoc = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); xmlDoc.async = false; } catch(e) {throw new Error("XML Parser could not be instantiated");} var out; try { if($.browser.msie) { out = (xmlDoc.loadXML(strXML))?xmlDoc:false; } else { out = xmlDoc.parseFromString(strXML, "text/xml"); } } catch(e) { throw new Error("Error parsing XML string"); } return out; } }); })(jQuery);