| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-draw-engine-SvgExporter'>/**
 
- </span> * A utility class for exporting a {@link Ext.draw.Surface Surface} to a string
 
-  * that may be saved or used for processing on the server.
 
-  *
 
-  * @singleton
 
-  */
 
- Ext.define('Ext.draw.engine.SvgExporter', function(){
 
-    var commaRe = /,/g,
 
-        fontRegex = /(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)\s('*.*'*)/,
 
-        rgbColorRe = /rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 
-        rgbaColorRe = /rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,([\d\.]+)\)/g,
 
-        surface, len, width, height,
 
-    init = function(s){
 
-        surface = s;
 
-        len = surface.length;
 
-        width = surface.width;
 
-        height = surface.height;
 
-    },
 
-    spriteProcessor = {
 
-        path: function(sprite){
 
-            var attr = sprite.attr,
 
-                path = attr.path,
 
-                pathString = '',
 
-                props, p, pLen;
 
-            if (Ext.isArray(path[0])) {
 
-                pLen = path.length;
 
-                for (p = 0; p < pLen; p++) {
 
-                    pathString += path[p].join(' ');
 
-                }
 
-            } else if (Ext.isArray(path)) {
 
-                pathString = path.join(' ');
 
-            } else {
 
-                pathString = path.replace(commaRe,' ');
 
-            }
 
-            props = toPropertyString({
 
-                d: pathString,
 
-                fill: attr.fill || 'none',
 
-                stroke: attr.stroke,
 
-                'fill-opacity': attr.opacity,
 
-                'stroke-width': attr['stroke-width'],
 
-                'stroke-opacity': attr['stroke-opacity'],
 
-                "z-index": attr.zIndex,
 
-                transform: sprite.matrix.toSvg()
 
-            });
 
-            return '<path ' + props + '/>';
 
-        },
 
-        text: function(sprite){
 
-            // TODO
 
-            // implement multi line support (@see Svg.js tuneText)
 
-            var attr = sprite.attr,
 
-                match = fontRegex.exec(attr.font),
 
-                size = (match && match[1]) || "12",
 
-                // default font family is Arial
 
-                family = (match && match[3]) || 'Arial',
 
-                text = attr.text,
 
-                factor = (Ext.isFF3_0 || Ext.isFF3_5) ? 2 : 4,
 
-                tspanString = '',
 
-                props;
 
-            sprite.getBBox();
 
-            tspanString += '<tspan x="' + (attr.x || '') + '" dy="';
 
-            tspanString += (size/factor)+'">';
 
-            tspanString += Ext.htmlEncode(text) + '</tspan>';
 
-            props = toPropertyString({
 
-                x: attr.x,
 
-                y: attr.y,
 
-                'font-size': size,
 
-                'font-family': family,
 
-                'font-weight': attr['font-weight'],
 
-                'text-anchor': attr['text-anchor'],
 
-                // if no fill property is set it will be black
 
-                fill: attr.fill || '#000',
 
-                'fill-opacity': attr.opacity,
 
-                transform: sprite.matrix.toSvg()
 
-            });
 
-            return '<text '+ props + '>' +  tspanString + '</text>';
 
-        },
 
-        rect: function(sprite){
 
-            var attr = sprite.attr,
 
-                props =  toPropertyString({
 
-                    x: attr.x,
 
-                    y: attr.y,
 
-                    rx: attr.rx,
 
-                    ry: attr.ry,
 
-                    width: attr.width,
 
-                    height: attr.height,
 
-                    fill: attr.fill || 'none',
 
-                    'fill-opacity': attr.opacity,
 
-                    stroke: attr.stroke,
 
-                    'stroke-opacity': attr['stroke-opacity'],
 
-                    'stroke-width':attr['stroke-width'],
 
-                    transform: sprite.matrix && sprite.matrix.toSvg()
 
-                });
 
-            return '<rect ' + props + '/>';
 
-        },
 
-        circle: function(sprite){
 
-            var attr = sprite.attr,
 
-                props = toPropertyString({
 
-                    cx: attr.x,
 
-                    cy: attr.y,
 
-                    r: attr.radius,
 
-                    fill: attr.translation.fill || attr.fill || 'none',
 
-                    'fill-opacity': attr.opacity,
 
-                    stroke: attr.stroke,
 
-                    'stroke-opacity': attr['stroke-opacity'],
 
-                    'stroke-width':attr['stroke-width'],
 
-                    transform: sprite.matrix.toSvg()
 
-                });
 
-            return '<circle ' + props + ' />';
 
-        },
 
-        image: function(sprite){
 
-            var attr = sprite.attr,
 
-                props = toPropertyString({
 
-                    x: attr.x - (attr.width/2 >> 0),
 
-                    y: attr.y - (attr.height/2 >> 0),
 
-                    width: attr.width,
 
-                    height: attr.height,
 
-                    'xlink:href': attr.src,
 
-                    transform: sprite.matrix.toSvg()
 
-                });
 
-            return '<image ' + props + ' />';
 
-        }
 
-    },
 
-    svgHeader = function(){
 
-        var svg = '<?xml version="1.0" standalone="yes"?>';
 
-        svg += '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">';
 
-        return svg;
 
-    },
 
-    svgContent = function(){
 
-        var svg = '<svg width="'+width+'px" height="'+height+'px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">',
 
-            defs = '', item, itemsLen, items, gradient,
 
-            getSvgString, colorstops, stop,
 
-            coll, keys, colls, k, kLen, key, collI, i, j, stopsLen, sortedItems, za, zb;
 
-        items = surface.items.items;
 
-        itemsLen = items.length;
 
-        getSvgString = function(node){
 
-            var childs = node.childNodes,
 
-                childLength = childs.length,
 
-                i = 0,
 
-                attrLength,
 
-                j,
 
-                svgString = '', child, attr, tagName, attrItem;
 
-                for(; i < childLength; i++){
 
-                    child = childs[i];
 
-                    attr = child.attributes;
 
-                    tagName = child.tagName;
 
-                    svgString += '<' +tagName;
 
-                    for(j = 0, attrLength = attr.length; j < attrLength; j++){
 
-                        attrItem = attr.item(j);
 
-                        svgString += ' '+attrItem.name+'="'+attrItem.value+'"';
 
-                    }
 
-                    svgString += '>';
 
-                    if(child.childNodes.length > 0){
 
-                        svgString += getSvgString(child);
 
-                    }
 
-                    svgString += '</' + tagName + '>';
 
-                }
 
-            return svgString;
 
-        };
 
-        if(surface.getDefs){
 
-            defs = getSvgString(surface.getDefs());
 
-        }else{
 
-            // IE
 
-            coll = surface.gradientsColl;
 
-            if (coll) {
 
-                keys  = coll.keys;
 
-                colls = coll.items;
 
-                k     = 0;
 
-                kLen  = keys.length;
 
-            }
 
-            for (; k < kLen; k++) {
 
-                key   = keys[k];
 
-                collI = colls[k];
 
-                gradient = surface.gradientsColl.getByKey(key);
 
-                defs += '<linearGradient id="' + key + '" x1="0" y1="0" x2="1" y2="1">';
 
-                var color = gradient.colors.replace(rgbColorRe, 'rgb($1|$2|$3)');
 
-                color = color.replace(rgbaColorRe, 'rgba($1|$2|$3|$4)')
 
-                colorstops = color.split(',');
 
-                for(i=0, stopsLen = colorstops.length; i < stopsLen; i++){
 
-                    stop = colorstops[i].split(' ');
 
-                    color = Ext.draw.Color.fromString(stop[1].replace(/\|/g,','));
 
-                    defs += '<stop offset="'+stop[0]+'" stop-color="' + color.toString() + '" stop-opacity="1"></stop>';
 
-                }
 
-                defs += '</linearGradient>';
 
-            }
 
-        }
 
-        svg += '<defs>' + defs + '</defs>';
 
-        // thats the background rectangle
 
-        svg += spriteProcessor.rect({
 
-            attr: {
 
-                    width: '100%',
 
-                    height: '100%',
 
-                    fill: '#fff',
 
-                    stroke: 'none',
 
-                    opacity: '0'
 
-            }
 
-        });
 
-        // Sort the items (stable sort guaranteed)
 
-        sortedItems = new Array(itemsLen);
 
-        for(i = 0; i < itemsLen; i++){
 
-            sortedItems[i] = i;
 
-        }
 
-        sortedItems.sort(function (a, b) {
 
-            za = items[a].attr.zIndex || 0;
 
-            zb = items[b].attr.zIndex || 0;
 
-            if (za == zb) {
 
-                return a - b;
 
-            }
 
-            return za - zb;
 
-        });
 
-        for(i = 0; i < itemsLen; i++){
 
-            item = items[sortedItems[i]];
 
-            if(!item.attr.hidden){
 
-                svg += spriteProcessor[item.type](item);
 
-            }
 
-        }
 
-        svg += '</svg>';
 
-        return svg;
 
-    },
 
-    toPropertyString = function(obj){
 
-        var propString = '',
 
-            key;
 
-        for(key in obj){
 
-            if(obj.hasOwnProperty(key) && obj[key] != null){
 
-                propString += key +'="'+ obj[key]+'" ';
 
-            }
 
-        }
 
-        return propString;
 
-    };
 
-    return {
 
-        singleton: true,
 
- <span id='Ext-draw-engine-SvgExporter-method-generate'>       /**
 
- </span>        * Exports the passed surface to a SVG string representation
 
-         * @param {Ext.draw.Surface} surface The surface to export
 
-         * @param {Object} [config] Any configuration for the export. Currently this is
 
-         * unused but may provide more options in the future
 
-         * @return {String} The SVG as a string
 
-         */
 
-        generate: function(surface, config){
 
-            config = config || {};
 
-            init(surface);
 
-            return svgHeader() + svgContent();
 
-        }
 
-    };
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |