After Width: | Height: | Size: 83 KiB |
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> |
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1"/> |
||||
<link rel="icon" type="image/png" href="images/logo.png"/> |
||||
<link rel="stylesheet" href="svg-editor.css" type="text/css"/> |
||||
<script src="jquery.js"></script> |
||||
<title>Browser does not support SVG | SVG-edit</title> |
||||
</head> |
||||
<body> |
||||
|
||||
<div id="browser-not-supported"> |
||||
<img style="float:left;padding:10px;" src="images/logo.png" width="48" height="48" alt="SVG-edit logo" /><br /> |
||||
<p>Sorry, but your browser does not support SVG. Below is a list of alternate browsers and versions that support SVG and SVG-edit (from <a href="http://caniuse.com/#cats=SVG">caniuse.com</a>).</p> |
||||
<p>Try the latest version of <a href="http://www.getfirefox.com">Firefox</a>, <a href="http://www.google.com/chrome/">Google Chrome</a>, <a href="http://www.apple.com/safari/download/">Safari</a>, <a href="http://www.opera.com/download/">Opera</a> or <a href="http://windows.microsoft.com/ie9">Internet Explorer</a>.</p> |
||||
<p>If you are unable to install one of these and must use an old version of Internet Explorer, you can install the <a href="http://code.google.com/chrome/chromeframe/">Google Chrome Frame plugin</a>.</p> |
||||
|
||||
</div> |
||||
|
||||
<script> |
||||
/*globals $*/ |
||||
var viewportHeight = window.innerHeight || ($(window).height() - 140); |
||||
var iframe = document.createElement('iframe'); |
||||
iframe.style.width = '100%'; |
||||
iframe.style.height = viewportHeight + 'px'; |
||||
iframe.src = 'http://caniuse.com/#cats=SVG'; |
||||
document.body.appendChild(iframe); |
||||
</script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,180 @@
|
||||
/*globals $, svgedit*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/** |
||||
* Package: svgedit.browser |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Jeff Schiller |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) jQuery (for $.alert())
|
||||
|
||||
(function() {'use strict'; |
||||
|
||||
if (!svgedit.browser) { |
||||
svgedit.browser = {}; |
||||
} |
||||
|
||||
// alias
|
||||
var NS = svgedit.NS; |
||||
|
||||
var supportsSvg_ = (function() { |
||||
return !!document.createElementNS && !!document.createElementNS(NS.SVG, 'svg').createSVGRect; |
||||
}()); |
||||
|
||||
svgedit.browser.supportsSvg = function() { return supportsSvg_; }; |
||||
if(!svgedit.browser.supportsSvg()) { |
||||
window.location = 'browser-not-supported.html'; |
||||
return; |
||||
} |
||||
|
||||
var userAgent = navigator.userAgent; |
||||
var svg = document.createElementNS(NS.SVG, 'svg'); |
||||
|
||||
// Note: Browser sniffing should only be used if no other detection method is possible
|
||||
var isOpera_ = !!window.opera; |
||||
var isWebkit_ = userAgent.indexOf('AppleWebKit') >= 0; |
||||
var isGecko_ = userAgent.indexOf('Gecko/') >= 0; |
||||
var isIE_ = userAgent.indexOf('MSIE') >= 0; |
||||
var isChrome_ = userAgent.indexOf('Chrome/') >= 0; |
||||
var isWindows_ = userAgent.indexOf('Windows') >= 0; |
||||
var isMac_ = userAgent.indexOf('Macintosh') >= 0; |
||||
var isTouch_ = 'ontouchstart' in window; |
||||
|
||||
var supportsSelectors_ = (function() { |
||||
return !!svg.querySelector; |
||||
}()); |
||||
|
||||
var supportsXpath_ = (function() { |
||||
return !!document.evaluate; |
||||
}()); |
||||
|
||||
// segList functions (for FF1.5 and 2.0)
|
||||
var supportsPathReplaceItem_ = (function() { |
||||
var path = document.createElementNS(NS.SVG, 'path'); |
||||
path.setAttribute('d', 'M0,0 10,10'); |
||||
var seglist = path.pathSegList; |
||||
var seg = path.createSVGPathSegLinetoAbs(5,5); |
||||
try { |
||||
seglist.replaceItem(seg, 0); |
||||
return true; |
||||
} catch(err) {} |
||||
return false; |
||||
}()); |
||||
|
||||
var supportsPathInsertItemBefore_ = (function() { |
||||
var path = document.createElementNS(NS.SVG, 'path'); |
||||
path.setAttribute('d', 'M0,0 10,10'); |
||||
var seglist = path.pathSegList; |
||||
var seg = path.createSVGPathSegLinetoAbs(5,5); |
||||
try { |
||||
seglist.insertItemBefore(seg, 0); |
||||
return true; |
||||
} catch(err) {} |
||||
return false; |
||||
}()); |
||||
|
||||
// text character positioning (for IE9)
|
||||
var supportsGoodTextCharPos_ = (function() { |
||||
var svgroot = document.createElementNS(NS.SVG, 'svg'); |
||||
var svgcontent = document.createElementNS(NS.SVG, 'svg'); |
||||
document.documentElement.appendChild(svgroot); |
||||
svgcontent.setAttribute('x', 5); |
||||
svgroot.appendChild(svgcontent); |
||||
var text = document.createElementNS(NS.SVG, 'text'); |
||||
text.textContent = 'a'; |
||||
svgcontent.appendChild(text); |
||||
var pos = text.getStartPositionOfChar(0).x; |
||||
document.documentElement.removeChild(svgroot); |
||||
return (pos === 0); |
||||
}()); |
||||
|
||||
var supportsPathBBox_ = (function() { |
||||
var svgcontent = document.createElementNS(NS.SVG, 'svg'); |
||||
document.documentElement.appendChild(svgcontent); |
||||
var path = document.createElementNS(NS.SVG, 'path'); |
||||
path.setAttribute('d', 'M0,0 C0,0 10,10 10,0'); |
||||
svgcontent.appendChild(path); |
||||
var bbox = path.getBBox(); |
||||
document.documentElement.removeChild(svgcontent); |
||||
return (bbox.height > 4 && bbox.height < 5); |
||||
}()); |
||||
|
||||
// Support for correct bbox sizing on groups with horizontal/vertical lines
|
||||
var supportsHVLineContainerBBox_ = (function() { |
||||
var svgcontent = document.createElementNS(NS.SVG, 'svg'); |
||||
document.documentElement.appendChild(svgcontent); |
||||
var path = document.createElementNS(NS.SVG, 'path'); |
||||
path.setAttribute('d', 'M0,0 10,0'); |
||||
var path2 = document.createElementNS(NS.SVG, 'path'); |
||||
path2.setAttribute('d', 'M5,0 15,0'); |
||||
var g = document.createElementNS(NS.SVG, 'g'); |
||||
g.appendChild(path); |
||||
g.appendChild(path2); |
||||
svgcontent.appendChild(g); |
||||
var bbox = g.getBBox(); |
||||
document.documentElement.removeChild(svgcontent); |
||||
// Webkit gives 0, FF gives 10, Opera (correctly) gives 15
|
||||
return (bbox.width == 15); |
||||
}()); |
||||
|
||||
var supportsEditableText_ = (function() { |
||||
// TODO: Find better way to check support for this
|
||||
return isOpera_; |
||||
}()); |
||||
|
||||
var supportsGoodDecimals_ = (function() { |
||||
// Correct decimals on clone attributes (Opera < 10.5/win/non-en)
|
||||
var rect = document.createElementNS(NS.SVG, 'rect'); |
||||
rect.setAttribute('x', 0.1); |
||||
var crect = rect.cloneNode(false); |
||||
var retValue = (crect.getAttribute('x').indexOf(',') == -1); |
||||
if(!retValue) { |
||||
$.alert('NOTE: This version of Opera is known to contain bugs in SVG-edit.\n'+ |
||||
'Please upgrade to the <a href="http://opera.com">latest version</a> in which the problems have been fixed.'); |
||||
} |
||||
return retValue; |
||||
}()); |
||||
|
||||
var supportsNonScalingStroke_ = (function() { |
||||
var rect = document.createElementNS(NS.SVG, 'rect'); |
||||
rect.setAttribute('style', 'vector-effect:non-scaling-stroke'); |
||||
return rect.style.vectorEffect === 'non-scaling-stroke'; |
||||
}()); |
||||
|
||||
var supportsNativeSVGTransformLists_ = (function() { |
||||
var rect = document.createElementNS(NS.SVG, 'rect'); |
||||
var rxform = rect.transform.baseVal; |
||||
var t1 = svg.createSVGTransform(); |
||||
rxform.appendItem(t1); |
||||
return rxform.getItem(0) == t1; |
||||
}()); |
||||
|
||||
// Public API
|
||||
|
||||
svgedit.browser.isOpera = function() { return isOpera_; }; |
||||
svgedit.browser.isWebkit = function() { return isWebkit_; }; |
||||
svgedit.browser.isGecko = function() { return isGecko_; }; |
||||
svgedit.browser.isIE = function() { return isIE_; }; |
||||
svgedit.browser.isChrome = function() { return isChrome_; }; |
||||
svgedit.browser.isWindows = function() { return isWindows_; }; |
||||
svgedit.browser.isMac = function() { return isMac_; }; |
||||
svgedit.browser.isTouch = function() { return isTouch_; }; |
||||
|
||||
svgedit.browser.supportsSelectors = function() { return supportsSelectors_; }; |
||||
svgedit.browser.supportsXpath = function() { return supportsXpath_; }; |
||||
|
||||
svgedit.browser.supportsPathReplaceItem = function() { return supportsPathReplaceItem_; }; |
||||
svgedit.browser.supportsPathInsertItemBefore = function() { return supportsPathInsertItemBefore_; }; |
||||
svgedit.browser.supportsPathBBox = function() { return supportsPathBBox_; }; |
||||
svgedit.browser.supportsHVLineContainerBBox = function() { return supportsHVLineContainerBBox_; }; |
||||
svgedit.browser.supportsGoodTextCharPos = function() { return supportsGoodTextCharPos_; }; |
||||
svgedit.browser.supportsEditableText = function() { return supportsEditableText_; }; |
||||
svgedit.browser.supportsGoodDecimals = function() { return supportsGoodDecimals_; }; |
||||
svgedit.browser.supportsNonScalingStroke = function() { return supportsNonScalingStroke_; }; |
||||
svgedit.browser.supportsNativeTransformLists = function() { return supportsNativeSVGTransformLists_; }; |
||||
|
||||
}()); |
@ -0,0 +1,294 @@
|
||||
/*jslint vars: true*/ |
||||
/** |
||||
* A class to parse color values |
||||
* @author Stoyan Stefanov <sstoo@gmail.com> |
||||
* @link http://www.phpied.com/rgb-color-parser-in-javascript/
|
||||
* @license Use it if you like it |
||||
*/ |
||||
function RGBColor(color_string) { 'use strict'; |
||||
this.ok = false; |
||||
|
||||
// strip any leading #
|
||||
if (color_string.charAt(0) === '#') { // remove # if any
|
||||
color_string = color_string.substr(1,6); |
||||
} |
||||
|
||||
color_string = color_string.replace(/ /g,''); |
||||
color_string = color_string.toLowerCase(); |
||||
|
||||
// before getting into regexps, try simple matches
|
||||
// and overwrite the input
|
||||
var simple_colors = { |
||||
aliceblue: 'f0f8ff', |
||||
antiquewhite: 'faebd7', |
||||
aqua: '00ffff', |
||||
aquamarine: '7fffd4', |
||||
azure: 'f0ffff', |
||||
beige: 'f5f5dc', |
||||
bisque: 'ffe4c4', |
||||
black: '000000', |
||||
blanchedalmond: 'ffebcd', |
||||
blue: '0000ff', |
||||
blueviolet: '8a2be2', |
||||
brown: 'a52a2a', |
||||
burlywood: 'deb887', |
||||
cadetblue: '5f9ea0', |
||||
chartreuse: '7fff00', |
||||
chocolate: 'd2691e', |
||||
coral: 'ff7f50', |
||||
cornflowerblue: '6495ed', |
||||
cornsilk: 'fff8dc', |
||||
crimson: 'dc143c', |
||||
cyan: '00ffff', |
||||
darkblue: '00008b', |
||||
darkcyan: '008b8b', |
||||
darkgoldenrod: 'b8860b', |
||||
darkgray: 'a9a9a9', |
||||
darkgreen: '006400', |
||||
darkkhaki: 'bdb76b', |
||||
darkmagenta: '8b008b', |
||||
darkolivegreen: '556b2f', |
||||
darkorange: 'ff8c00', |
||||
darkorchid: '9932cc', |
||||
darkred: '8b0000', |
||||
darksalmon: 'e9967a', |
||||
darkseagreen: '8fbc8f', |
||||
darkslateblue: '483d8b', |
||||
darkslategray: '2f4f4f', |
||||
darkturquoise: '00ced1', |
||||
darkviolet: '9400d3', |
||||
deeppink: 'ff1493', |
||||
deepskyblue: '00bfff', |
||||
dimgray: '696969', |
||||
dodgerblue: '1e90ff', |
||||
feldspar: 'd19275', |
||||
firebrick: 'b22222', |
||||
floralwhite: 'fffaf0', |
||||
forestgreen: '228b22', |
||||
fuchsia: 'ff00ff', |
||||
gainsboro: 'dcdcdc', |
||||
ghostwhite: 'f8f8ff', |
||||
gold: 'ffd700', |
||||
goldenrod: 'daa520', |
||||
gray: '808080', |
||||
green: '008000', |
||||
greenyellow: 'adff2f', |
||||
honeydew: 'f0fff0', |
||||
hotpink: 'ff69b4', |
||||
indianred : 'cd5c5c', |
||||
indigo : '4b0082', |
||||
ivory: 'fffff0', |
||||
khaki: 'f0e68c', |
||||
lavender: 'e6e6fa', |
||||
lavenderblush: 'fff0f5', |
||||
lawngreen: '7cfc00', |
||||
lemonchiffon: 'fffacd', |
||||
lightblue: 'add8e6', |
||||
lightcoral: 'f08080', |
||||
lightcyan: 'e0ffff', |
||||
lightgoldenrodyellow: 'fafad2', |
||||
lightgrey: 'd3d3d3', |
||||
lightgreen: '90ee90', |
||||
lightpink: 'ffb6c1', |
||||
lightsalmon: 'ffa07a', |
||||
lightseagreen: '20b2aa', |
||||
lightskyblue: '87cefa', |
||||
lightslateblue: '8470ff', |
||||
lightslategray: '778899', |
||||
lightsteelblue: 'b0c4de', |
||||
lightyellow: 'ffffe0', |
||||
lime: '00ff00', |
||||
limegreen: '32cd32', |
||||
linen: 'faf0e6', |
||||
magenta: 'ff00ff', |
||||
maroon: '800000', |
||||
mediumaquamarine: '66cdaa', |
||||
mediumblue: '0000cd', |
||||
mediumorchid: 'ba55d3', |
||||
mediumpurple: '9370d8', |
||||
mediumseagreen: '3cb371', |
||||
mediumslateblue: '7b68ee', |
||||
mediumspringgreen: '00fa9a', |
||||
mediumturquoise: '48d1cc', |
||||
mediumvioletred: 'c71585', |
||||
midnightblue: '191970', |
||||
mintcream: 'f5fffa', |
||||
mistyrose: 'ffe4e1', |
||||
moccasin: 'ffe4b5', |
||||
navajowhite: 'ffdead', |
||||
navy: '000080', |
||||
oldlace: 'fdf5e6', |
||||
olive: '808000', |
||||
olivedrab: '6b8e23', |
||||
orange: 'ffa500', |
||||
orangered: 'ff4500', |
||||
orchid: 'da70d6', |
||||
palegoldenrod: 'eee8aa', |
||||
palegreen: '98fb98', |
||||
paleturquoise: 'afeeee', |
||||
palevioletred: 'd87093', |
||||
papayawhip: 'ffefd5', |
||||
peachpuff: 'ffdab9', |
||||
peru: 'cd853f', |
||||
pink: 'ffc0cb', |
||||
plum: 'dda0dd', |
||||
powderblue: 'b0e0e6', |
||||
purple: '800080', |
||||
red: 'ff0000', |
||||
rosybrown: 'bc8f8f', |
||||
royalblue: '4169e1', |
||||
saddlebrown: '8b4513', |
||||
salmon: 'fa8072', |
||||
sandybrown: 'f4a460', |
||||
seagreen: '2e8b57', |
||||
seashell: 'fff5ee', |
||||
sienna: 'a0522d', |
||||
silver: 'c0c0c0', |
||||
skyblue: '87ceeb', |
||||
slateblue: '6a5acd', |
||||
slategray: '708090', |
||||
snow: 'fffafa', |
||||
springgreen: '00ff7f', |
||||
steelblue: '4682b4', |
||||
tan: 'd2b48c', |
||||
teal: '008080', |
||||
thistle: 'd8bfd8', |
||||
tomato: 'ff6347', |
||||
turquoise: '40e0d0', |
||||
violet: 'ee82ee', |
||||
violetred: 'd02090', |
||||
wheat: 'f5deb3', |
||||
white: 'ffffff', |
||||
whitesmoke: 'f5f5f5', |
||||
yellow: 'ffff00', |
||||
yellowgreen: '9acd32' |
||||
}; |
||||
var key; |
||||
for (key in simple_colors) { |
||||
if (simple_colors.hasOwnProperty(key)) { |
||||
if (color_string == key) { |
||||
color_string = simple_colors[key]; |
||||
} |
||||
} |
||||
} |
||||
// emd of simple type-in colors
|
||||
|
||||
// array of color definition objects
|
||||
var color_defs = [ |
||||
{ |
||||
re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, |
||||
example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], |
||||
process: function (bits){ |
||||
return [ |
||||
parseInt(bits[1], 10), |
||||
parseInt(bits[2], 10), |
||||
parseInt(bits[3], 10) |
||||
]; |
||||
} |
||||
}, |
||||
{ |
||||
re: /^(\w{2})(\w{2})(\w{2})$/, |
||||
example: ['#00ff00', '336699'], |
||||
process: function (bits){ |
||||
return [ |
||||
parseInt(bits[1], 16), |
||||
parseInt(bits[2], 16), |
||||
parseInt(bits[3], 16) |
||||
]; |
||||
} |
||||
}, |
||||
{ |
||||
re: /^(\w{1})(\w{1})(\w{1})$/, |
||||
example: ['#fb0', 'f0f'], |
||||
process: function (bits){ |
||||
return [ |
||||
parseInt(bits[1] + bits[1], 16), |
||||
parseInt(bits[2] + bits[2], 16), |
||||
parseInt(bits[3] + bits[3], 16) |
||||
]; |
||||
} |
||||
} |
||||
]; |
||||
|
||||
var i; |
||||
// search through the definitions to find a match
|
||||
for (i = 0; i < color_defs.length; i++) { |
||||
var re = color_defs[i].re; |
||||
var processor = color_defs[i].process; |
||||
var bits = re.exec(color_string); |
||||
if (bits) { |
||||
var channels = processor(bits); |
||||
this.r = channels[0]; |
||||
this.g = channels[1]; |
||||
this.b = channels[2]; |
||||
this.ok = true; |
||||
} |
||||
|
||||
} |
||||
|
||||
// validate/cleanup values
|
||||
this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r); |
||||
this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g); |
||||
this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b); |
||||
|
||||
// some getters
|
||||
this.toRGB = function () { |
||||
return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; |
||||
}; |
||||
this.toHex = function () { |
||||
var r = this.r.toString(16); |
||||
var g = this.g.toString(16); |
||||
var b = this.b.toString(16); |
||||
if (r.length === 1) {r = '0' + r;} |
||||
if (g.length === 1) {g = '0' + g;} |
||||
if (b.length === 1) {b = '0' + b;} |
||||
return '#' + r + g + b; |
||||
}; |
||||
|
||||
// help
|
||||
this.getHelpXML = function () { |
||||
var i, j; |
||||
var examples = []; |
||||
// add regexps
|
||||
for (i = 0; i < color_defs.length; i++) { |
||||
var example = color_defs[i].example; |
||||
for (j = 0; j < example.length; j++) { |
||||
examples[examples.length] = example[j]; |
||||
} |
||||
} |
||||
// add type-in colors
|
||||
var sc; |
||||
for (sc in simple_colors) { |
||||
if (simple_colors.hasOwnProperty(sc)) { |
||||
examples[examples.length] = sc; |
||||
} |
||||
} |
||||
|
||||
var xml = document.createElement('ul'); |
||||
xml.setAttribute('id', 'rgbcolor-examples'); |
||||
for (i = 0; i < examples.length; i++) { |
||||
try { |
||||
var list_item = document.createElement('li'); |
||||
var list_color = new RGBColor(examples[i]); |
||||
var example_div = document.createElement('div'); |
||||
example_div.style.cssText = |
||||
'margin: 3px; ' |
||||
+ 'border: 1px solid black; ' |
||||
+ 'background:' + list_color.toHex() + '; ' |
||||
+ 'color:' + list_color.toHex() |
||||
; |
||||
example_div.appendChild(document.createTextNode('test')); |
||||
var list_item_value = document.createTextNode( |
||||
' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex() |
||||
); |
||||
list_item.appendChild(example_div); |
||||
list_item.appendChild(list_item_value); |
||||
xml.appendChild(list_item); |
||||
|
||||
} catch(e){} |
||||
} |
||||
return xml; |
||||
|
||||
}; |
||||
|
||||
} |
@ -0,0 +1,145 @@
|
||||
// DO NOT EDIT THIS FILE!
|
||||
// THIS FILE IS JUST A SAMPLE; TO APPLY, YOU MUST
|
||||
// CREATE A NEW FILE config.js AND ADD CONTENTS
|
||||
// SUCH AS SHOWN BELOW INTO THAT FILE.
|
||||
|
||||
/*globals svgEditor*/ |
||||
/* |
||||
The config.js file is intended for the setting of configuration or |
||||
preferences which must run early on; if this is not needed, it is |
||||
recommended that you create an extension instead (for greater |
||||
reusability and modularity). |
||||
*/ |
||||
|
||||
// CONFIG AND EXTENSION SETTING
|
||||
/* |
||||
See defaultConfig and defaultExtensions in svg-editor.js for a list |
||||
of possible configuration settings. |
||||
|
||||
See svg-editor.js for documentation on using setConfig(). |
||||
*/ |
||||
|
||||
// URL OVERRIDE CONFIG
|
||||
svgEditor.setConfig({ |
||||
/** |
||||
To override the ability for URLs to set URL-based SVG content, |
||||
uncomment the following: |
||||
*/ |
||||
// preventURLContentLoading: true,
|
||||
/** |
||||
To override the ability for URLs to set other configuration (including |
||||
extensions), uncomment the following: |
||||
*/ |
||||
// preventAllURLConfig: true,
|
||||
/** |
||||
To override the ability for URLs to set their own extensions, |
||||
uncomment the following (note that if setConfig() is used in |
||||
extension code, it will still be additive to extensions, |
||||
however): |
||||
*/ |
||||
// lockExtensions: true,
|
||||
}); |
||||
|
||||
svgEditor.setConfig({ |
||||
/* |
||||
Provide default values here which differ from that of the editor but |
||||
which the URL can override |
||||
*/ |
||||
}, {allowInitialUserOverride: true}); |
||||
|
||||
// EXTENSION CONFIG
|
||||
svgEditor.setConfig({ |
||||
extensions: [ |
||||
// 'ext-overview_window.js', 'ext-markers.js', 'ext-connector.js', 'ext-eyedropper.js', 'ext-shapes.js', 'ext-imagelib.js', 'ext-grid.js', 'ext-polygon.js', 'ext-star.js', 'ext-panning.js', 'ext-storage.js'
|
||||
] |
||||
// , noDefaultExtensions: false, // noDefaultExtensions can only be meaningfully used in config.js or in the URL
|
||||
}); |
||||
|
||||
// OTHER CONFIG
|
||||
svgEditor.setConfig({
|
||||
// canvasName: 'default',
|
||||
// canvas_expansion: 3,
|
||||
// initFill: {
|
||||
// color: 'FF0000', // solid red
|
||||
// opacity: 1
|
||||
// },
|
||||
// initStroke: {
|
||||
// width: 5,
|
||||
// color: '000000', // solid black
|
||||
// opacity: 1
|
||||
// },
|
||||
// initOpacity: 1,
|
||||
// colorPickerCSS: null,
|
||||
// initTool: 'select',
|
||||
// wireframe: false,
|
||||
// showlayers: false,
|
||||
// no_save_warning: false,
|
||||
// PATH CONFIGURATION
|
||||
// imgPath: 'images/',
|
||||
// langPath: 'locale/',
|
||||
// extPath: 'extensions/',
|
||||
// jGraduatePath: 'jgraduate/images/',
|
||||
/* |
||||
Uncomment the following to allow at least same domain (embedded) access, |
||||
including file:// access.
|
||||
Setting as `['*']` would allow any domain to access but would be unsafe to |
||||
data privacy and integrity. |
||||
*/ |
||||
// allowedOrigins: [window.location.origin || 'null'], // May be 'null' (as a string) when used as a file:// URL
|
||||
// DOCUMENT PROPERTIES
|
||||
// dimensions: [640, 480],
|
||||
// EDITOR OPTIONS
|
||||
// gridSnapping: false,
|
||||
// gridColor: '#000',
|
||||
// baseUnit: 'px',
|
||||
// snappingStep: 10,
|
||||
// showRulers: true,
|
||||
// EXTENSION-RELATED (GRID)
|
||||
// showGrid: false, // Set by ext-grid.js
|
||||
// EXTENSION-RELATED (STORAGE)
|
||||
// noStorageOnLoad: false, // Some interaction with ext-storage.js; prevent even the loading of previously saved local storage
|
||||
// forceStorage: false, // Some interaction with ext-storage.js; strongly discouraged from modification as it bypasses user privacy by preventing them from choosing whether to keep local storage or not
|
||||
// emptyStorageOnDecline: true, // Used by ext-storage.js; empty any prior storage if the user declines to store
|
||||
}); |
||||
|
||||
// PREF CHANGES
|
||||
/** |
||||
setConfig() can also be used to set preferences in addition to |
||||
configuration (see defaultPrefs in svg-editor.js for a list of |
||||
possible settings), but at least if you are using ext-storage.js |
||||
to store preferences, it will probably be better to let your |
||||
users control these. |
||||
As with configuration, one may use allowInitialUserOverride, but |
||||
in the case of preferences, any previously stored preferences |
||||
will also thereby be enabled to override this setting (and at a |
||||
higher priority than any URL preference setting overrides). |
||||
Failing to use allowInitialUserOverride will ensure preferences |
||||
are hard-coded here regardless of URL or prior user storage setting. |
||||
*/ |
||||
svgEditor.setConfig( |
||||
{ |
||||
// lang: '', // Set dynamically within locale.js if not previously set
|
||||
// iconsize: '', // Will default to 's' if the window height is smaller than the minimum height and 'm' otherwise
|
||||
/** |
||||
* When showing the preferences dialog, svg-editor.js currently relies |
||||
* on curPrefs instead of $.pref, so allowing an override for bkgd_color |
||||
* means that this value won't have priority over block auto-detection as |
||||
* far as determining which color shows initially in the preferences |
||||
* dialog (though it can be changed and saved). |
||||
*/ |
||||
// bkgd_color: '#FFF',
|
||||
// bkgd_url: '',
|
||||
// img_save: 'embed',
|
||||
// Only shows in UI as far as alert notices
|
||||
// save_notice_done: false,
|
||||
// export_notice_done: false
|
||||
} |
||||
); |
||||
svgEditor.setConfig( |
||||
{ |
||||
// Indicate pref settings here if you wish to allow user storage or URL settings
|
||||
// to be able to override your default preferences (unless other config options
|
||||
// have already explicitly prevented one or the other)
|
||||
}, |
||||
{allowInitialUserOverride: true} |
||||
); |
@ -0,0 +1,12 @@
|
||||
/*globals svgEditor*/ |
||||
|
||||
svgEditor.setConfig({ |
||||
// extensions: [
|
||||
// 'ext-eyedropper.js',
|
||||
// 'ext-shapes.js',
|
||||
// 'ext-polygon.js',
|
||||
// 'ext-star.js'
|
||||
//],
|
||||
//emptyStorageOnDecline: true
|
||||
allowedOrigins: [window.location.origin] // May be 'null' (as a string) when used as a file:// URL
|
||||
}); |
@ -0,0 +1,66 @@
|
||||
/*globals $, svgEditor*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/** |
||||
* Package: svgedit.contextmenu |
||||
*
|
||||
* Licensed under the Apache License, Version 2 |
||||
*
|
||||
* Author: Adam Bender |
||||
*/ |
||||
// Dependencies:
|
||||
// 1) jQuery (for dom injection of context menus)
|
||||
var svgedit = svgedit || {}; |
||||
(function() { |
||||
var self = this; |
||||
if (!svgedit.contextmenu) { |
||||
svgedit.contextmenu = {}; |
||||
} |
||||
self.contextMenuExtensions = {}; |
||||
var menuItemIsValid = function(menuItem) { |
||||
return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function'; |
||||
}; |
||||
var addContextMenuItem = function(menuItem) { |
||||
// menuItem: {id, label, shortcut, action}
|
||||
if (!menuItemIsValid(menuItem)) { |
||||
console.error("Menu items must be defined and have at least properties: id, label, action, where action must be a function"); |
||||
return; |
||||
} |
||||
if (menuItem.id in self.contextMenuExtensions) { |
||||
console.error('Cannot add extension "' + menuItem.id + '", an extension by that name already exists"'); |
||||
return; |
||||
} |
||||
// Register menuItem action, see below for deferred menu dom injection
|
||||
console.log("Registed contextmenu item: {id:"+ menuItem.id+", label:"+menuItem.label+"}"); |
||||
self.contextMenuExtensions[menuItem.id] = menuItem; |
||||
//TODO: Need to consider how to handle custom enable/disable behavior
|
||||
}; |
||||
var hasCustomHandler = function(handlerKey) { |
||||
return self.contextMenuExtensions[handlerKey] && true; |
||||
}; |
||||
var getCustomHandler = function(handlerKey) { |
||||
return self.contextMenuExtensions[handlerKey].action; |
||||
}; |
||||
var injectExtendedContextMenuItemIntoDom = function(menuItem) { |
||||
if (Object.keys(self.contextMenuExtensions).length === 0) { |
||||
// all menuItems appear at the bottom of the menu in their own container.
|
||||
// if this is the first extension menu we need to add the separator.
|
||||
$("#cmenu_canvas").append("<li class='separator'>"); |
||||
} |
||||
var shortcut = menuItem.shortcut || ""; |
||||
$("#cmenu_canvas").append("<li class='disabled'><a href='#" + menuItem.id + "'>" |
||||
+ menuItem.label + "<span class='shortcut'>" |
||||
+ shortcut + "</span></a></li>"); |
||||
}; |
||||
// Defer injection to wait out initial menu processing. This probably goes away once all context
|
||||
// menu behavior is brought here.
|
||||
svgEditor.ready(function() { |
||||
var menuItem; |
||||
for (menuItem in contextMenuExtensions) { |
||||
injectExtendedContextMenuItemIntoDom(contextMenuExtensions[menuItem]); |
||||
} |
||||
}); |
||||
svgedit.contextmenu.resetCustomMenus = function(){self.contextMenuExtensions = {};}; |
||||
svgedit.contextmenu.add = addContextMenuItem; |
||||
svgedit.contextmenu.hasCustomHandler = hasCustomHandler; |
||||
svgedit.contextmenu.getCustomHandler = getCustomHandler; |
||||
}()); |
@ -0,0 +1,203 @@
|
||||
// jQuery Context Menu Plugin
|
||||
//
|
||||
// Version 1.01
|
||||
//
|
||||
// Cory S.N. LaViska
|
||||
// A Beautiful Site (http://abeautifulsite.net/)
|
||||
// Modified by Alexis Deveria
|
||||
//
|
||||
// More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/
|
||||
//
|
||||
// Terms of Use
|
||||
//
|
||||
// This plugin is dual-licensed under the GNU General Public License
|
||||
// and the MIT License and is copyright A Beautiful Site, LLC.
|
||||
//
|
||||
if(jQuery)( function() { |
||||
var win = $(window); |
||||
var doc = $(document); |
||||
|
||||
$.extend($.fn, { |
||||
|
||||
contextMenu: function(o, callback) { |
||||
// Defaults
|
||||
if( o.menu == undefined ) return false; |
||||
if( o.inSpeed == undefined ) o.inSpeed = 150; |
||||
if( o.outSpeed == undefined ) o.outSpeed = 75; |
||||
// 0 needs to be -1 for expected results (no fade)
|
||||
if( o.inSpeed == 0 ) o.inSpeed = -1; |
||||
if( o.outSpeed == 0 ) o.outSpeed = -1; |
||||
// Loop each context menu
|
||||
$(this).each( function() { |
||||
var el = $(this); |
||||
var offset = $(el).offset(); |
||||
|
||||
var menu = $('#' + o.menu); |
||||
|
||||
// Add contextMenu class
|
||||
menu.addClass('contextMenu'); |
||||
// Simulate a true right click
|
||||
$(this).bind( "mousedown", function(e) { |
||||
var evt = e; |
||||
$(this).mouseup( function(e) { |
||||
var srcElement = $(this); |
||||
srcElement.unbind('mouseup'); |
||||
if( evt.button === 2 || o.allowLeft || (evt.ctrlKey && svgedit.browser.isMac()) ) { |
||||
e.stopPropagation(); |
||||
// Hide context menus that may be showing
|
||||
$(".contextMenu").hide(); |
||||
// Get this context menu
|
||||
|
||||
if( el.hasClass('disabled') ) return false; |
||||
|
||||
// Detect mouse position
|
||||
var d = {}, x = e.pageX, y = e.pageY; |
||||
|
||||
var x_off = win.width() - menu.width(),
|
||||
y_off = win.height() - menu.height(); |
||||
|
||||
if(x > x_off - 15) x = x_off-15; |
||||
if(y > y_off - 30) y = y_off-30; // 30 is needed to prevent scrollbars in FF
|
||||
|
||||
// Show the menu
|
||||
doc.unbind('click'); |
||||
menu.css({ top: y, left: x }).fadeIn(o.inSpeed); |
||||
// Hover events
|
||||
menu.find('A').mouseover( function() { |
||||
menu.find('LI.hover').removeClass('hover'); |
||||
$(this).parent().addClass('hover'); |
||||
}).mouseout( function() { |
||||
menu.find('LI.hover').removeClass('hover'); |
||||
}); |
||||
|
||||
// Keyboard
|
||||
doc.keypress( function(e) { |
||||
switch( e.keyCode ) { |
||||
case 38: // up
|
||||
if( !menu.find('LI.hover').length ) { |
||||
menu.find('LI:last').addClass('hover'); |
||||
} else { |
||||
menu.find('LI.hover').removeClass('hover').prevAll('LI:not(.disabled)').eq(0).addClass('hover'); |
||||
if( !menu.find('LI.hover').length ) menu.find('LI:last').addClass('hover'); |
||||
} |
||||
break; |
||||
case 40: // down
|
||||
if( menu.find('LI.hover').length == 0 ) { |
||||
menu.find('LI:first').addClass('hover'); |
||||
} else { |
||||
menu.find('LI.hover').removeClass('hover').nextAll('LI:not(.disabled)').eq(0).addClass('hover'); |
||||
if( !menu.find('LI.hover').length ) menu.find('LI:first').addClass('hover'); |
||||
} |
||||
break; |
||||
case 13: // enter
|
||||
menu.find('LI.hover A').trigger('click'); |
||||
break; |
||||
case 27: // esc
|
||||
doc.trigger('click'); |
||||
break |
||||
} |
||||
}); |
||||
|
||||
// When items are selected
|
||||
menu.find('A').unbind('mouseup'); |
||||
menu.find('LI:not(.disabled) A').mouseup( function() { |
||||
doc.unbind('click').unbind('keypress'); |
||||
$(".contextMenu").hide(); |
||||
// Callback
|
||||
if( callback ) callback( $(this).attr('href').substr(1), $(srcElement), {x: x - offset.left, y: y - offset.top, docX: x, docY: y} ); |
||||
return false; |
||||
}); |
||||
|
||||
// Hide bindings
|
||||
setTimeout( function() { // Delay for Mozilla
|
||||
doc.click( function() { |
||||
doc.unbind('click').unbind('keypress'); |
||||
menu.fadeOut(o.outSpeed); |
||||
return false; |
||||
}); |
||||
}, 0); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
// Disable text selection
|
||||
if( $.browser.mozilla ) { |
||||
$('#' + o.menu).each( function() { $(this).css({ 'MozUserSelect' : 'none' }); }); |
||||
} else if( $.browser.msie ) { |
||||
$('#' + o.menu).each( function() { $(this).bind('selectstart.disableTextSelect', function() { return false; }); }); |
||||
} else { |
||||
$('#' + o.menu).each(function() { $(this).bind('mousedown.disableTextSelect', function() { return false; }); }); |
||||
} |
||||
// Disable browser context menu (requires both selectors to work in IE/Safari + FF/Chrome)
|
||||
$(el).add($('UL.contextMenu')).bind('contextmenu', function() { return false; }); |
||||
|
||||
}); |
||||
return $(this); |
||||
}, |
||||
|
||||
// Disable context menu items on the fly
|
||||
disableContextMenuItems: function(o) { |
||||
if( o == undefined ) { |
||||
// Disable all
|
||||
$(this).find('LI').addClass('disabled'); |
||||
return( $(this) ); |
||||
} |
||||
$(this).each( function() { |
||||
if( o != undefined ) { |
||||
var d = o.split(','); |
||||
for( var i = 0; i < d.length; i++ ) { |
||||
$(this).find('A[href="' + d[i] + '"]').parent().addClass('disabled'); |
||||
|
||||
} |
||||
} |
||||
}); |
||||
return( $(this) ); |
||||
}, |
||||
|
||||
// Enable context menu items on the fly
|
||||
enableContextMenuItems: function(o) { |
||||
if( o == undefined ) { |
||||
// Enable all
|
||||
$(this).find('LI.disabled').removeClass('disabled'); |
||||
return( $(this) ); |
||||
} |
||||
$(this).each( function() { |
||||
if( o != undefined ) { |
||||
var d = o.split(','); |
||||
for( var i = 0; i < d.length; i++ ) { |
||||
$(this).find('A[href="' + d[i] + '"]').parent().removeClass('disabled'); |
||||
|
||||
} |
||||
} |
||||
}); |
||||
return( $(this) ); |
||||
}, |
||||
|
||||
// Disable context menu(s)
|
||||
disableContextMenu: function() { |
||||
$(this).each( function() { |
||||
$(this).addClass('disabled'); |
||||
}); |
||||
return( $(this) ); |
||||
}, |
||||
|
||||
// Enable context menu(s)
|
||||
enableContextMenu: function() { |
||||
$(this).each( function() { |
||||
$(this).removeClass('disabled'); |
||||
}); |
||||
return( $(this) ); |
||||
}, |
||||
|
||||
// Destroy context menu(s)
|
||||
destroyContextMenu: function() { |
||||
// Destroy specified context menus
|
||||
$(this).each( function() { |
||||
// Disable action
|
||||
$(this).unbind('mousedown').unbind('mouseup'); |
||||
}); |
||||
return( $(this) ); |
||||
} |
||||
|
||||
}); |
||||
})(jQuery); |
@ -0,0 +1,316 @@
|
||||
/*globals $, svgroot */ |
||||
/*jslint vars: true, eqeq: true, forin: true*/ |
||||
/** |
||||
* Coords. |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) jquery.js
|
||||
// 2) math.js
|
||||
// 3) browser.js
|
||||
// 4) svgutils.js
|
||||
// 5) units.js
|
||||
// 6) svgtransformlist.js
|
||||
|
||||
var svgedit = svgedit || {}; |
||||
|
||||
(function() {'use strict'; |
||||
|
||||
if (!svgedit.coords) { |
||||
svgedit.coords = {}; |
||||
} |
||||
|
||||
// this is how we map paths to our preferred relative segment types
|
||||
var pathMap = [0, 'z', 'M', 'm', 'L', 'l', 'C', 'c', 'Q', 'q', 'A', 'a',
|
||||
'H', 'h', 'V', 'v', 'S', 's', 'T', 't']; |
||||
|
||||
/** |
||||
* @typedef editorContext |
||||
* @type {?object} |
||||
* @property {function} getGridSnapping |
||||
* @property {function} getDrawing |
||||
*/ |
||||
var editorContext_ = null; |
||||
|
||||
/** |
||||
* @param {editorContext} editorContext |
||||
*/ |
||||
svgedit.coords.init = function(editorContext) { |
||||
editorContext_ = editorContext; |
||||
}; |
||||
|
||||
/** |
||||
* Applies coordinate changes to an element based on the given matrix |
||||
* @param {Element} selected - DOM element to be changed |
||||
* @param {object} changes - Object with changes to be remapped |
||||
* @param {SVGMatrix} m - Matrix object to use for remapping coordinates |
||||
*/ |
||||
svgedit.coords.remapElement = function(selected, changes, m) { |
||||
var i, type, |
||||
remap = function(x, y) { return svgedit.math.transformPoint(x, y, m); }, |
||||
scalew = function(w) { return m.a * w; }, |
||||
scaleh = function(h) { return m.d * h; }, |
||||
doSnapping = editorContext_.getGridSnapping() && selected.parentNode.parentNode.localName === 'svg', |
||||
finishUp = function() { |
||||
var o; |
||||
if (doSnapping) { |
||||
for (o in changes) { |
||||
changes[o] = svgedit.utilities.snapToGrid(changes[o]); |
||||
} |
||||
} |
||||
svgedit.utilities.assignAttributes(selected, changes, 1000, true); |
||||
}, |
||||
box = svgedit.utilities.getBBox(selected); |
||||
|
||||
for (i = 0; i < 2; i++) { |
||||
type = i === 0 ? 'fill' : 'stroke'; |
||||
var attrVal = selected.getAttribute(type); |
||||
if (attrVal && attrVal.indexOf('url(') === 0) { |
||||
if (m.a < 0 || m.d < 0) { |
||||
var grad = svgedit.utilities.getRefElem(attrVal); |
||||
var newgrad = grad.cloneNode(true); |
||||
if (m.a < 0) { |
||||
// flip x
|
||||
var x1 = newgrad.getAttribute('x1'); |
||||
var x2 = newgrad.getAttribute('x2'); |
||||
newgrad.setAttribute('x1', -(x1 - 1)); |
||||
newgrad.setAttribute('x2', -(x2 - 1)); |
||||
}
|
||||
|
||||
if (m.d < 0) { |
||||
// flip y
|
||||
var y1 = newgrad.getAttribute('y1'); |
||||
var y2 = newgrad.getAttribute('y2'); |
||||
newgrad.setAttribute('y1', -(y1 - 1)); |
||||
newgrad.setAttribute('y2', -(y2 - 1)); |
||||
} |
||||
newgrad.id = editorContext_.getDrawing().getNextId(); |
||||
svgedit.utilities.findDefs().appendChild(newgrad); |
||||
selected.setAttribute(type, 'url(#' + newgrad.id + ')'); |
||||
} |
||||
|
||||
// Not really working :(
|
||||
// if (selected.tagName === 'path') {
|
||||
// reorientGrads(selected, m);
|
||||
// }
|
||||
} |
||||
} |
||||
|
||||
var elName = selected.tagName; |
||||
var chlist, mt; |
||||
if (elName === 'g' || elName === 'text' || elName == 'tspan' || elName === 'use') { |
||||
// if it was a translate, then just update x,y
|
||||
if (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 && (m.e != 0 || m.f != 0) ) { |
||||
// [T][M] = [M][T']
|
||||
// therefore [T'] = [M_inv][T][M]
|
||||
var existing = svgedit.math.transformListToTransform(selected).matrix, |
||||
t_new = svgedit.math.matrixMultiply(existing.inverse(), m, existing); |
||||
changes.x = parseFloat(changes.x) + t_new.e; |
||||
changes.y = parseFloat(changes.y) + t_new.f; |
||||
} else { |
||||
// we just absorb all matrices into the element and don't do any remapping
|
||||
chlist = svgedit.transformlist.getTransformList(selected); |
||||
mt = svgroot.createSVGTransform(); |
||||
mt.setMatrix(svgedit.math.matrixMultiply(svgedit.math.transformListToTransform(chlist).matrix, m)); |
||||
chlist.clear(); |
||||
chlist.appendItem(mt); |
||||
} |
||||
} |
||||
var c, pt, pt1, pt2, len; |
||||
// now we have a set of changes and an applied reduced transform list
|
||||
// we apply the changes directly to the DOM
|
||||
switch (elName) { |
||||
case 'foreignObject': |
||||
case 'rect': |
||||
case 'image': |
||||
// Allow images to be inverted (give them matrix when flipped)
|
||||
if (elName === 'image' && (m.a < 0 || m.d < 0)) { |
||||
// Convert to matrix
|
||||
chlist = svgedit.transformlist.getTransformList(selected); |
||||
mt = svgroot.createSVGTransform(); |
||||
mt.setMatrix(svgedit.math.matrixMultiply(svgedit.math.transformListToTransform(chlist).matrix, m)); |
||||
chlist.clear(); |
||||
chlist.appendItem(mt); |
||||
} else { |
||||
pt1 = remap(changes.x, changes.y); |
||||
changes.width = scalew(changes.width); |
||||
changes.height = scaleh(changes.height); |
||||
changes.x = pt1.x + Math.min(0, changes.width); |
||||
changes.y = pt1.y + Math.min(0, changes.height); |
||||
changes.width = Math.abs(changes.width); |
||||
changes.height = Math.abs(changes.height); |
||||
} |
||||
finishUp(); |
||||
break; |
||||
case 'ellipse': |
||||
c = remap(changes.cx, changes.cy); |
||||
changes.cx = c.x; |
||||
changes.cy = c.y; |
||||
changes.rx = scalew(changes.rx); |
||||
changes.ry = scaleh(changes.ry); |
||||
changes.rx = Math.abs(changes.rx); |
||||
changes.ry = Math.abs(changes.ry); |
||||
finishUp(); |
||||
break; |
||||
case 'circle': |
||||
c = remap(changes.cx,changes.cy); |
||||
changes.cx = c.x; |
||||
changes.cy = c.y; |
||||
// take the minimum of the new selected box's dimensions for the new circle radius
|
||||
var tbox = svgedit.math.transformBox(box.x, box.y, box.width, box.height, m); |
||||
var w = tbox.tr.x - tbox.tl.x, h = tbox.bl.y - tbox.tl.y; |
||||
changes.r = Math.min(w/2, h/2); |
||||
|
||||
if (changes.r) {changes.r = Math.abs(changes.r);} |
||||
finishUp(); |
||||
break; |
||||
case 'line': |
||||
pt1 = remap(changes.x1, changes.y1); |
||||
pt2 = remap(changes.x2, changes.y2); |
||||
changes.x1 = pt1.x; |
||||
changes.y1 = pt1.y; |
||||
changes.x2 = pt2.x; |
||||
changes.y2 = pt2.y; |
||||
// deliberately fall through here
|
||||
case 'text': |
||||
case 'tspan': |
||||
case 'use': |
||||
finishUp(); |
||||
break; |
||||
case 'g': |
||||
var gsvg = $(selected).data('gsvg'); |
||||
if (gsvg) { |
||||
svgedit.utilities.assignAttributes(gsvg, changes, 1000, true); |
||||
} |
||||
break; |
||||
case 'polyline': |
||||
case 'polygon': |
||||
len = changes.points.length; |
||||
for (i = 0; i < len; ++i) { |
||||
pt = changes.points[i]; |
||||
pt = remap(pt.x, pt.y); |
||||
changes.points[i].x = pt.x; |
||||
changes.points[i].y = pt.y; |
||||
} |
||||
|
||||
len = changes.points.length; |
||||
var pstr = ''; |
||||
for (i = 0; i < len; ++i) { |
||||
pt = changes.points[i]; |
||||
pstr += pt.x + ',' + pt.y + ' '; |
||||
} |
||||
selected.setAttribute('points', pstr); |
||||
break; |
||||
case 'path': |
||||
var seg; |
||||
var segList = selected.pathSegList; |
||||
len = segList.numberOfItems; |
||||
changes.d = []; |
||||
for (i = 0; i < len; ++i) { |
||||
seg = segList.getItem(i); |
||||
changes.d[i] = { |
||||
type: seg.pathSegType, |
||||
x: seg.x, |
||||
y: seg.y, |
||||
x1: seg.x1, |
||||
y1: seg.y1, |
||||
x2: seg.x2, |
||||
y2: seg.y2, |
||||
r1: seg.r1, |
||||
r2: seg.r2, |
||||
angle: seg.angle, |
||||
largeArcFlag: seg.largeArcFlag, |
||||
sweepFlag: seg.sweepFlag |
||||
}; |
||||
} |
||||
|
||||
len = changes.d.length; |
||||
var firstseg = changes.d[0], |
||||
currentpt = remap(firstseg.x, firstseg.y); |
||||
changes.d[0].x = currentpt.x; |
||||
changes.d[0].y = currentpt.y; |
||||
for (i = 1; i < len; ++i) { |
||||
seg = changes.d[i]; |
||||
type = seg.type; |
||||
// if absolute or first segment, we want to remap x, y, x1, y1, x2, y2
|
||||
// if relative, we want to scalew, scaleh
|
||||
if (type % 2 == 0) { // absolute
|
||||
var thisx = (seg.x != undefined) ? seg.x : currentpt.x, // for V commands
|
||||
thisy = (seg.y != undefined) ? seg.y : currentpt.y; // for H commands
|
||||
pt = remap(thisx,thisy); |
||||
pt1 = remap(seg.x1, seg.y1); |
||||
pt2 = remap(seg.x2, seg.y2); |
||||
seg.x = pt.x; |
||||
seg.y = pt.y; |
||||
seg.x1 = pt1.x; |
||||
seg.y1 = pt1.y; |
||||
seg.x2 = pt2.x; |
||||
seg.y2 = pt2.y; |
||||
seg.r1 = scalew(seg.r1); |
||||
seg.r2 = scaleh(seg.r2); |
||||
} |
||||
else { // relative
|
||||
seg.x = scalew(seg.x); |
||||
seg.y = scaleh(seg.y); |
||||
seg.x1 = scalew(seg.x1); |
||||
seg.y1 = scaleh(seg.y1); |
||||
seg.x2 = scalew(seg.x2); |
||||
seg.y2 = scaleh(seg.y2); |
||||
seg.r1 = scalew(seg.r1); |
||||
seg.r2 = scaleh(seg.r2); |
||||
} |
||||
} // for each segment
|
||||
|
||||
var dstr = ''; |
||||
len = changes.d.length; |
||||
for (i = 0; i < len; ++i) { |
||||
seg = changes.d[i]; |
||||
type = seg.type; |
||||
dstr += pathMap[type]; |
||||
switch (type) { |
||||
case 13: // relative horizontal line (h)
|
||||
case 12: // absolute horizontal line (H)
|
||||
dstr += seg.x + ' '; |
||||
break; |
||||
case 15: // relative vertical line (v)
|
||||
case 14: // absolute vertical line (V)
|
||||
dstr += seg.y + ' '; |
||||
break; |
||||
case 3: // relative move (m)
|
||||
case 5: // relative line (l)
|
||||
case 19: // relative smooth quad (t)
|
||||
case 2: // absolute move (M)
|
||||
case 4: // absolute line (L)
|
||||
case 18: // absolute smooth quad (T)
|
||||
dstr += seg.x + ',' + seg.y + ' '; |
||||
break; |
||||
case 7: // relative cubic (c)
|
||||
case 6: // absolute cubic (C)
|
||||
dstr += seg.x1 + ',' + seg.y1 + ' ' + seg.x2 + ',' + seg.y2 + ' ' + |
||||
seg.x + ',' + seg.y + ' '; |
||||
break; |
||||
case 9: // relative quad (q)
|
||||
case 8: // absolute quad (Q)
|
||||
dstr += seg.x1 + ',' + seg.y1 + ' ' + seg.x + ',' + seg.y + ' '; |
||||
break; |
||||
case 11: // relative elliptical arc (a)
|
||||
case 10: // absolute elliptical arc (A)
|
||||
dstr += seg.r1 + ',' + seg.r2 + ' ' + seg.angle + ' ' + (+seg.largeArcFlag) + |
||||
' ' + (+seg.sweepFlag) + ' ' + seg.x + ',' + seg.y + ' '; |
||||
break; |
||||
case 17: // relative smooth cubic (s)
|
||||
case 16: // absolute smooth cubic (S)
|
||||
dstr += seg.x2 + ',' + seg.y2 + ' ' + seg.x + ',' + seg.y + ' '; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
selected.setAttribute('d', dstr); |
||||
break; |
||||
} |
||||
}; |
||||
|
||||
}()); |
@ -0,0 +1,537 @@
|
||||
/*globals $, svgedit*/ |
||||
/*jslint vars: true, eqeq: true, todo: true*/ |
||||
/** |
||||
* Package: svgedit.draw |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2011 Jeff Schiller |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) jQuery
|
||||
// 2) browser.js
|
||||
// 3) svgutils.js
|
||||
|
||||
(function() {'use strict'; |
||||
|
||||
if (!svgedit.draw) { |
||||
svgedit.draw = {}; |
||||
} |
||||
// alias
|
||||
var NS = svgedit.NS; |
||||
|
||||
var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use'.split(','); |
||||
|
||||
var RandomizeModes = { |
||||
LET_DOCUMENT_DECIDE: 0, |
||||
ALWAYS_RANDOMIZE: 1, |
||||
NEVER_RANDOMIZE: 2 |
||||
}; |
||||
var randomize_ids = RandomizeModes.LET_DOCUMENT_DECIDE; |
||||
|
||||
/** |
||||
* This class encapsulates the concept of a layer in the drawing |
||||
* @param {String} name - Layer name |
||||
* @param {SVGGElement} child - Layer SVG group. |
||||
*/ |
||||
svgedit.draw.Layer = function(name, group) { |
||||
this.name_ = name; |
||||
this.group_ = group; |
||||
}; |
||||
|
||||
/** |
||||
* @returns {string} The layer name |
||||
*/ |
||||
svgedit.draw.Layer.prototype.getName = function() { |
||||
return this.name_; |
||||
}; |
||||
|
||||
/** |
||||
* @returns {SVGGElement} The layer SVG group |
||||
*/ |
||||
svgedit.draw.Layer.prototype.getGroup = function() { |
||||
return this.group_; |
||||
}; |
||||
|
||||
|
||||
/** |
||||
* Called to ensure that drawings will or will not have randomized ids. |
||||
* The currentDrawing will have its nonce set if it doesn't already. |
||||
* @param {boolean} enableRandomization - flag indicating if documents should have randomized ids |
||||
* @param {svgedit.draw.Drawing} currentDrawing |
||||
*/ |
||||
svgedit.draw.randomizeIds = function(enableRandomization, currentDrawing) { |
||||
randomize_ids = enableRandomization === false ? |
||||
RandomizeModes.NEVER_RANDOMIZE : |
||||
RandomizeModes.ALWAYS_RANDOMIZE; |
||||
|
||||
if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE && !currentDrawing.getNonce()) { |
||||
currentDrawing.setNonce(Math.floor(Math.random() * 100001)); |
||||
} else if (randomize_ids == RandomizeModes.NEVER_RANDOMIZE && currentDrawing.getNonce()) { |
||||
currentDrawing.clearNonce(); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* This class encapsulates the concept of a SVG-edit drawing |
||||
* @param {SVGSVGElement} svgElem - The SVG DOM Element that this JS object |
||||
* encapsulates. If the svgElem has a se:nonce attribute on it, then |
||||
* IDs will use the nonce as they are generated. |
||||
* @param {String=svg_} [opt_idPrefix] - The ID prefix to use. |
||||
*/ |
||||
svgedit.draw.Drawing = function(svgElem, opt_idPrefix) { |
||||
if (!svgElem || !svgElem.tagName || !svgElem.namespaceURI || |
||||
svgElem.tagName != 'svg' || svgElem.namespaceURI != NS.SVG) { |
||||
throw "Error: svgedit.draw.Drawing instance initialized without a <svg> element"; |
||||
} |
||||
|
||||
/** |
||||
* The SVG DOM Element that represents this drawing. |
||||
* @type {SVGSVGElement} |
||||
*/ |
||||
this.svgElem_ = svgElem; |
||||
|
||||
/** |
||||
* The latest object number used in this drawing. |
||||
* @type {number} |
||||
*/ |
||||
this.obj_num = 0; |
||||
|
||||
/** |
||||
* The prefix to prepend to each element id in the drawing. |
||||
* @type {String} |
||||
*/ |
||||
this.idPrefix = opt_idPrefix || "svg_"; |
||||
|
||||
/** |
||||
* An array of released element ids to immediately reuse. |
||||
* @type {Array.<number>} |
||||
*/ |
||||
this.releasedNums = []; |
||||
|
||||
/** |
||||
* The z-ordered array of tuples containing layer names and <g> elements. |
||||
* The first layer is the one at the bottom of the rendering. |
||||
* TODO: Turn this into an Array.<Layer> |
||||
* @type {Array.<Array.<String, SVGGElement>>} |
||||
*/ |
||||
this.all_layers = []; |
||||
|
||||
/** |
||||
* The current layer being used. |
||||
* TODO: Make this a {Layer}. |
||||
* @type {SVGGElement} |
||||
*/ |
||||
this.current_layer = null; |
||||
|
||||
/** |
||||
* The nonce to use to uniquely identify elements across drawings. |
||||
* @type {!String} |
||||
*/ |
||||
this.nonce_ = ''; |
||||
var n = this.svgElem_.getAttributeNS(NS.SE, 'nonce'); |
||||
// If already set in the DOM, use the nonce throughout the document
|
||||
// else, if randomizeIds(true) has been called, create and set the nonce.
|
||||
if (!!n && randomize_ids != RandomizeModes.NEVER_RANDOMIZE) { |
||||
this.nonce_ = n; |
||||
} else if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE) { |
||||
this.setNonce(Math.floor(Math.random() * 100001)); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* @param {string} id Element ID to retrieve |
||||
* @returns {Element} SVG element within the root SVGSVGElement |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getElem_ = function (id) { |
||||
if (this.svgElem_.querySelector) { |
||||
// querySelector lookup
|
||||
return this.svgElem_.querySelector('#' + id); |
||||
} |
||||
// jQuery lookup: twice as slow as xpath in FF
|
||||
return $(this.svgElem_).find('[id=' + id + ']')[0]; |
||||
}; |
||||
|
||||
/** |
||||
* @returns {SVGSVGElement} |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getSvgElem = function () { |
||||
return this.svgElem_; |
||||
}; |
||||
|
||||
/** |
||||
* @returns {!string|number} The previously set nonce |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getNonce = function() { |
||||
return this.nonce_; |
||||
}; |
||||
|
||||
/** |
||||
* @param {!string|number} n The nonce to set |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.setNonce = function(n) { |
||||
this.svgElem_.setAttributeNS(NS.XMLNS, 'xmlns:se', NS.SE); |
||||
this.svgElem_.setAttributeNS(NS.SE, 'se:nonce', n); |
||||
this.nonce_ = n; |
||||
}; |
||||
|
||||
/** |
||||
* Clears any previously set nonce |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.clearNonce = function () { |
||||
// We deliberately leave any se:nonce attributes alone,
|
||||
// we just don't use it to randomize ids.
|
||||
this.nonce_ = ''; |
||||
}; |
||||
|
||||
/** |
||||
* Returns the latest object id as a string. |
||||
* @return {String} The latest object Id. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getId = function () { |
||||
return this.nonce_ ? |
||||
this.idPrefix + this.nonce_ + '_' + this.obj_num : |
||||
this.idPrefix + this.obj_num; |
||||
}; |
||||
|
||||
/** |
||||
* Returns the next object Id as a string. |
||||
* @return {String} The next object Id to use. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getNextId = function () { |
||||
var oldObjNum = this.obj_num; |
||||
var restoreOldObjNum = false; |
||||
|
||||
// If there are any released numbers in the release stack,
|
||||
// use the last one instead of the next obj_num.
|
||||
// We need to temporarily use obj_num as that is what getId() depends on.
|
||||
if (this.releasedNums.length > 0) { |
||||
this.obj_num = this.releasedNums.pop(); |
||||
restoreOldObjNum = true; |
||||
} else { |
||||
// If we are not using a released id, then increment the obj_num.
|
||||
this.obj_num++; |
||||
} |
||||
|
||||
// Ensure the ID does not exist.
|
||||
var id = this.getId(); |
||||
while (this.getElem_(id)) { |
||||
if (restoreOldObjNum) { |
||||
this.obj_num = oldObjNum; |
||||
restoreOldObjNum = false; |
||||
} |
||||
this.obj_num++; |
||||
id = this.getId(); |
||||
} |
||||
// Restore the old object number if required.
|
||||
if (restoreOldObjNum) { |
||||
this.obj_num = oldObjNum; |
||||
} |
||||
return id; |
||||
}; |
||||
|
||||
/** |
||||
* Releases the object Id, letting it be used as the next id in getNextId(). |
||||
* This method DOES NOT remove any elements from the DOM, it is expected |
||||
* that client code will do this. |
||||
* @param {string} id - The id to release. |
||||
* @returns {boolean} True if the id was valid to be released, false otherwise. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.releaseId = function (id) { |
||||
// confirm if this is a valid id for this Document, else return false
|
||||
var front = this.idPrefix + (this.nonce_ ? this.nonce_ + '_' : ''); |
||||
if (typeof id !== 'string' || id.indexOf(front) !== 0) { |
||||
return false; |
||||
} |
||||
// extract the obj_num of this id
|
||||
var num = parseInt(id.substr(front.length), 10); |
||||
|
||||
// if we didn't get a positive number or we already released this number
|
||||
// then return false.
|
||||
if (typeof num !== 'number' || num <= 0 || this.releasedNums.indexOf(num) != -1) { |
||||
return false; |
||||
} |
||||
|
||||
// push the released number into the released queue
|
||||
this.releasedNums.push(num); |
||||
|
||||
return true; |
||||
}; |
||||
|
||||
/** |
||||
* Returns the number of layers in the current drawing. |
||||
* @returns {integer} The number of layers in the current drawing. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getNumLayers = function() { |
||||
return this.all_layers.length; |
||||
}; |
||||
|
||||
/** |
||||
* Check if layer with given name already exists |
||||
* @param {string} name - The layer name to check |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.hasLayer = function (name) { |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); i++) { |
||||
if(this.all_layers[i][0] == name) {return true;} |
||||
} |
||||
return false; |
||||
}; |
||||
|
||||
|
||||
/** |
||||
* Returns the name of the ith layer. If the index is out of range, an empty string is returned. |
||||
* @param {integer} i - The zero-based index of the layer you are querying. |
||||
* @returns {string} The name of the ith layer (or the empty string if none found) |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getLayerName = function (i) { |
||||
if (i >= 0 && i < this.getNumLayers()) { |
||||
return this.all_layers[i][0]; |
||||
} |
||||
return ''; |
||||
}; |
||||
|
||||
/** |
||||
* @returns {SVGGElement} The SVGGElement representing the current layer. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getCurrentLayer = function() { |
||||
return this.current_layer; |
||||
}; |
||||
|
||||
/** |
||||
* Returns the name of the currently selected layer. If an error occurs, an empty string
|
||||
* is returned. |
||||
* @returns The name of the currently active layer (or the empty string if none found). |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getCurrentLayerName = function () { |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (this.all_layers[i][1] == this.current_layer) { |
||||
return this.getLayerName(i); |
||||
} |
||||
} |
||||
return ''; |
||||
}; |
||||
|
||||
/** |
||||
* Sets the current layer. If the name is not a valid layer name, then this |
||||
* function returns false. Otherwise it returns true. This is not an |
||||
* undo-able action. |
||||
* @param {string} name - The name of the layer you want to switch to. |
||||
* @returns {boolean} true if the current layer was switched, otherwise false |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.setCurrentLayer = function(name) { |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (name == this.getLayerName(i)) { |
||||
if (this.current_layer != this.all_layers[i][1]) { |
||||
this.current_layer.setAttribute("style", "pointer-events:none"); |
||||
this.current_layer = this.all_layers[i][1]; |
||||
this.current_layer.setAttribute("style", "pointer-events:all"); |
||||
} |
||||
return true; |
||||
} |
||||
} |
||||
return false; |
||||
}; |
||||
|
||||
|
||||
/** |
||||
* Deletes the current layer from the drawing and then clears the selection. |
||||
* This function then calls the 'changed' handler. This is an undoable action. |
||||
* @returns {SVGGElement} The SVGGElement of the layer removed or null. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.deleteCurrentLayer = function() { |
||||
if (this.current_layer && this.getNumLayers() > 1) { |
||||
// actually delete from the DOM and return it
|
||||
var parent = this.current_layer.parentNode; |
||||
var nextSibling = this.current_layer.nextSibling; |
||||
var oldLayerGroup = parent.removeChild(this.current_layer); |
||||
this.identifyLayers(); |
||||
return oldLayerGroup; |
||||
} |
||||
return null; |
||||
}; |
||||
|
||||
/** |
||||
* Updates layer system and sets the current layer to the |
||||
* top-most layer (last <g> child of this drawing). |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.identifyLayers = function() { |
||||
this.all_layers = []; |
||||
var numchildren = this.svgElem_.childNodes.length; |
||||
// loop through all children of SVG element
|
||||
var orphans = [], layernames = []; |
||||
var a_layer = null; |
||||
var childgroups = false; |
||||
var i; |
||||
for (i = 0; i < numchildren; ++i) { |
||||
var child = this.svgElem_.childNodes.item(i); |
||||
// for each g, find its layer name
|
||||
if (child && child.nodeType == 1) { |
||||
if (child.tagName == "g") { |
||||
childgroups = true; |
||||
var name = $("title", child).text(); |
||||
|
||||
// Hack for Opera 10.60
|
||||
if(!name && svgedit.browser.isOpera() && child.querySelectorAll) { |
||||
name = $(child.querySelectorAll('title')).text(); |
||||
} |
||||
|
||||
// store layer and name in global variable
|
||||
if (name) { |
||||
layernames.push(name); |
||||
this.all_layers.push( [name, child] ); |
||||
a_layer = child; |
||||
svgedit.utilities.walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");}); |
||||
a_layer.setAttribute("style", "pointer-events:none"); |
||||
} |
||||
// if group did not have a name, it is an orphan
|
||||
else { |
||||
orphans.push(child); |
||||
} |
||||
} |
||||
// if child has is "visible" (i.e. not a <title> or <defs> element), then it is an orphan
|
||||
else if(~visElems.indexOf(child.nodeName)) { |
||||
var bb = svgedit.utilities.getBBox(child); |
||||
orphans.push(child); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// create a new layer and add all the orphans to it
|
||||
var svgdoc = this.svgElem_.ownerDocument; |
||||
if (orphans.length > 0 || !childgroups) { |
||||
i = 1; |
||||
// TODO(codedread): What about internationalization of "Layer"?
|
||||
while (layernames.indexOf(("Layer " + i)) >= 0) { i++; } |
||||
var newname = "Layer " + i; |
||||
a_layer = svgdoc.createElementNS(NS.SVG, "g"); |
||||
var layer_title = svgdoc.createElementNS(NS.SVG, "title"); |
||||
layer_title.textContent = newname; |
||||
a_layer.appendChild(layer_title); |
||||
var j; |
||||
for (j = 0; j < orphans.length; ++j) { |
||||
a_layer.appendChild(orphans[j]); |
||||
} |
||||
this.svgElem_.appendChild(a_layer); |
||||
this.all_layers.push( [newname, a_layer] ); |
||||
} |
||||
svgedit.utilities.walkTree(a_layer, function(e){e.setAttribute("style", "pointer-events:inherit");}); |
||||
this.current_layer = a_layer; |
||||
this.current_layer.setAttribute("style", "pointer-events:all"); |
||||
}; |
||||
|
||||
/** |
||||
* Creates a new top-level layer in the drawing with the given name and
|
||||
* sets the current layer to it. |
||||
* @param {string} name - The given name |
||||
* @returns {SVGGElement} The SVGGElement of the new layer, which is |
||||
* also the current layer of this drawing. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.createLayer = function(name) { |
||||
var svgdoc = this.svgElem_.ownerDocument; |
||||
var new_layer = svgdoc.createElementNS(NS.SVG, "g"); |
||||
var layer_title = svgdoc.createElementNS(NS.SVG, "title"); |
||||
layer_title.textContent = name; |
||||
new_layer.appendChild(layer_title); |
||||
this.svgElem_.appendChild(new_layer); |
||||
this.identifyLayers(); |
||||
return new_layer; |
||||
}; |
||||
|
||||
/** |
||||
* Returns whether the layer is visible. If the layer name is not valid, |
||||
* then this function returns false. |
||||
* @param {string} layername - The name of the layer which you want to query. |
||||
* @returns {boolean} The visibility state of the layer, or false if the layer name was invalid. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getLayerVisibility = function(layername) { |
||||
// find the layer
|
||||
var layer = null; |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (this.getLayerName(i) == layername) { |
||||
layer = this.all_layers[i][1]; |
||||
break; |
||||
} |
||||
} |
||||
if (!layer) {return false;} |
||||
return (layer.getAttribute('display') !== 'none'); |
||||
}; |
||||
|
||||
/** |
||||
* Sets the visibility of the layer. If the layer name is not valid, this |
||||
* function returns false, otherwise it returns true. This is an |
||||
* undo-able action. |
||||
* @param {string} layername - The name of the layer to change the visibility |
||||
* @param {boolean} bVisible - Whether the layer should be visible |
||||
* @returns {?SVGGElement} The SVGGElement representing the layer if the |
||||
* layername was valid, otherwise null. |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.setLayerVisibility = function(layername, bVisible) { |
||||
if (typeof bVisible !== 'boolean') { |
||||
return null; |
||||
} |
||||
// find the layer
|
||||
var layer = null; |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (this.getLayerName(i) == layername) { |
||||
layer = this.all_layers[i][1]; |
||||
break; |
||||
} |
||||
} |
||||
if (!layer) {return null;} |
||||
|
||||
var oldDisplay = layer.getAttribute("display"); |
||||
if (!oldDisplay) {oldDisplay = "inline";} |
||||
layer.setAttribute("display", bVisible ? "inline" : "none"); |
||||
return layer; |
||||
}; |
||||
|
||||
|
||||
/** |
||||
* Returns the opacity of the given layer. If the input name is not a layer, null is returned. |
||||
* @param {string} layername - name of the layer on which to get the opacity |
||||
* @returns {?number} The opacity value of the given layer. This will be a value between 0.0 and 1.0, or null |
||||
* if layername is not a valid layer |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.getLayerOpacity = function(layername) { |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (this.getLayerName(i) == layername) { |
||||
var g = this.all_layers[i][1]; |
||||
var opacity = g.getAttribute('opacity'); |
||||
if (!opacity) { |
||||
opacity = '1.0'; |
||||
} |
||||
return parseFloat(opacity); |
||||
} |
||||
} |
||||
return null; |
||||
}; |
||||
|
||||
/** |
||||
* Sets the opacity of the given layer. If the input name is not a layer, |
||||
* nothing happens. If opacity is not a value between 0.0 and 1.0, then |
||||
* nothing happens. |
||||
* @param {string} layername - Name of the layer on which to set the opacity |
||||
* @param {number} opacity - A float value in the range 0.0-1.0 |
||||
*/ |
||||
svgedit.draw.Drawing.prototype.setLayerOpacity = function(layername, opacity) { |
||||
if (typeof opacity !== 'number' || opacity < 0.0 || opacity > 1.0) { |
||||
return; |
||||
} |
||||
var i; |
||||
for (i = 0; i < this.getNumLayers(); ++i) { |
||||
if (this.getLayerName(i) == layername) { |
||||
var g = this.all_layers[i][1]; |
||||
g.setAttribute("opacity", opacity); |
||||
break; |
||||
} |
||||
} |
||||
}; |
||||
|
||||
}()); |
@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<title>Embed API</title> |
||||
<script src="jquery.js"></script> |
||||
<script src="embedapi.js"></script> |
||||
<script> |
||||
/*globals $, EmbeddedSVGEdit*/ |
||||
var initEmbed; |
||||
$(function () {'use strict'; |
||||
|
||||
var svgCanvas = null; |
||||
|
||||
initEmbed = function () { |
||||
var doc, mainButton, |
||||
frame = document.getElementById('svgedit'); |
||||
svgCanvas = new EmbeddedSVGEdit(frame); |
||||
// Hide main button, as we will be controlling new, load, save, etc. from the host document |
||||
doc = frame.contentDocument || frame.contentWindow.document; |
||||
mainButton = doc.getElementById('main_button'); |
||||
mainButton.style.display = 'none'; |
||||
}; |
||||
|
||||
function handleSvgData(data, error) { |
||||
if (error) { |
||||
alert('error ' + error); |
||||
} else { |
||||
alert('Congratulations. Your SVG string is back in the host page, do with it what you will\n\n' + data); |
||||
} |
||||
} |
||||
|
||||
function loadSvg() { |
||||
var svgexample = '<svg width="640" height="480" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><g><title>Layer 1<\/title><rect stroke-width="5" stroke="#000000" fill="#FF0000" id="svg_1" height="35" width="51" y="35" x="32"/><ellipse ry="15" rx="24" stroke-width="5" stroke="#000000" fill="#0000ff" id="svg_2" cy="60" cx="66"/><\/g><\/svg>'; |
||||
svgCanvas.setSvgString(svgexample); |
||||
} |
||||
|
||||
function saveSvg() { |
||||
svgCanvas.getSvgString()(handleSvgData); |
||||
} |
||||
|
||||
// Add event handlers |
||||
$('#load').click(loadSvg); |
||||
$('#save').click(saveSvg); |
||||
$('body').append( |
||||
$('<iframe src="svg-editor.html?extensions=ext-xdomain-messaging.js' + |
||||
window.location.href.replace(/\?(.*)$/, '&$1') + // Append arguments to this file onto the iframe |
||||
'" width="900px" height="600px" id="svgedit" onload="initEmbed();"></iframe>' |
||||
) |
||||
); |
||||
}); |
||||
</script> |
||||
</head> |
||||
<body> |
||||
<button id="load">Load example</button> |
||||
<button id="save">Save data</button> |
||||
<br/> |
||||
</body> |
||||
</html> |
@ -0,0 +1,187 @@
|
||||
/* |
||||
Embedded SVG-edit API |
||||
|
||||
General usage: |
||||
- Have an iframe somewhere pointing to a version of svg-edit > r1000 |
||||
- Initialize the magic with: |
||||
var svgCanvas = new EmbeddedSVGEdit(window.frames.svgedit); |
||||
- Pass functions in this format: |
||||
svgCanvas.setSvgString('string') |
||||
- Or if a callback is needed: |
||||
svgCanvas.setSvgString('string')(function(data, error){ |
||||
if (error){ |
||||
// There was an error
|
||||
} else{ |
||||
// Handle data
|
||||
} |
||||
}) |
||||
|
||||
Everything is done with the same API as the real svg-edit, |
||||
and all documentation is unchanged. |
||||
|
||||
However, this file depends on the postMessage API which |
||||
can only support JSON-serializable arguments and |
||||
return values, so, for example, arguments whose value is |
||||
'undefined', a function, a non-finite number, or a built-in |
||||
object like Date(), RegExp(), etc. will most likely not behave |
||||
as expected. In such a case one may need to host |
||||
the SVG editor on the same domain and reference the |
||||
JavaScript methods on the frame itself. |
||||
|
||||
The only other difference is |
||||
when handling returns: the callback notation is used instead. |
||||
|
||||
var blah = new EmbeddedSVGEdit(window.frames.svgedit); |
||||
blah.clearSelection('woot', 'blah', 1337, [1, 2, 3, 4, 5, 'moo'], -42, {a: 'tree',b:6, c: 9})(function(){console.log('GET DATA',arguments)}) |
||||
*/ |
||||
|
||||
(function () {'use strict'; |
||||
|
||||
var cbid = 0; |
||||
|
||||
function getCallbackSetter (d) { |
||||
return function () { |
||||
var t = this, // New callback
|
||||
args = [].slice.call(arguments), |
||||
cbid = t.send(d, args, function(){}); // The callback (currently it's nothing, but will be set later)
|
||||
|
||||
return function(newcallback){ |
||||
t.callbacks[cbid] = newcallback; // Set callback
|
||||
}; |
||||
}; |
||||
} |
||||
|
||||
/* |
||||
* Having this separate from messageListener allows us to |
||||
* avoid using JSON parsing (and its limitations) in the case |
||||
* of same domain control |
||||
*/ |
||||
function addCallback (t, data) { |
||||
var result = data.result || data.error; |
||||
cbid = data.id; |
||||
if (t.callbacks[cbid]) { |
||||
if (data.result) { |
||||
t.callbacks[cbid](result); |
||||
} else { |
||||
t.callbacks[cbid](result, 'error'); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function messageListener (e) { |
||||
// We accept and post strings as opposed to objects for the sake of IE9 support; this
|
||||
// will most likely be changed in the future
|
||||
if (typeof e.data !== 'string') { |
||||
return; |
||||
} |
||||
var allowedOrigins = this.allowedOrigins, |
||||
data = e.data && JSON.parse(e.data); |
||||
if (!data || typeof data !== 'object' || data.namespace !== 'svg-edit' || |
||||
e.source !== this.frame.contentWindow || |
||||
(allowedOrigins.indexOf('*') === -1 && allowedOrigins.indexOf(e.origin) === -1) |
||||
) { |
||||
return; |
||||
} |
||||
addCallback(this, data); |
||||
} |
||||
|
||||
function getMessageListener (t) { |
||||
return function (e) { |
||||
messageListener.call(t, e); |
||||
}; |
||||
} |
||||
|
||||
/** |
||||
* @param {HTMLIFrameElement} frame |
||||
* @param {array} [allowedOrigins=[]] Array of origins from which incoming |
||||
* messages will be allowed when same origin is not used; defaults to none. |
||||
* If supplied, it should probably be the same as svgEditor's allowedOrigins |
||||
*/ |
||||
function EmbeddedSVGEdit (frame, allowedOrigins) { |
||||
if (!(this instanceof EmbeddedSVGEdit)) { // Allow invocation without 'new' keyword
|
||||
return new EmbeddedSVGEdit(frame); |
||||
} |
||||
this.allowedOrigins = allowedOrigins || []; |
||||
// Initialize communication
|
||||
this.frame = frame; |
||||
this.callbacks = {}; |
||||
// List of functions extracted with this:
|
||||
// Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html
|
||||
|
||||
// for (var i=0,q=[],f = document.querySelectorAll('div.CFunction h3.CTitle a'); i < f.length; i++) { q.push(f[i].name); }; q
|
||||
// var functions = ['clearSelection', 'addToSelection', 'removeFromSelection', 'open', 'save', 'getSvgString', 'setSvgString',
|
||||
// 'createLayer', 'deleteCurrentLayer', 'setCurrentLayer', 'renameCurrentLayer', 'setCurrentLayerPosition', 'setLayerVisibility',
|
||||
// 'moveSelectedToLayer', 'clear'];
|
||||
|
||||
// Newer, well, it extracts things that aren't documented as well. All functions accessible through the normal thingy can now be accessed though the API
|
||||
// var l = []; for (var i in svgCanvas){ if (typeof svgCanvas[i] == 'function') { l.push(i);} };
|
||||
// Run in svgedit itself
|
||||
var i, |
||||
functions = ['updateElementFromJson', 'embedImage', 'fixOperaXML', 'clearSelection', |
||||
'addToSelection', |
||||
'removeFromSelection', 'addNodeToSelection', 'open', 'save', 'getSvgString', 'setSvgString', 'createLayer', |
||||
'deleteCurrentLayer', 'getCurrentDrawing', 'setCurrentLayer', 'renameCurrentLayer', 'setCurrentLayerPosition', |
||||
'setLayerVisibility', 'moveSelectedToLayer', 'clear', 'clearPath', 'getNodePoint', 'clonePathNode', 'deletePathNode', |
||||
'getResolution', 'getImageTitle', 'setImageTitle', 'setResolution', 'setBBoxZoom', 'setZoom', 'getMode', 'setMode', |
||||
'getStrokeColor', 'setStrokeColor', 'getFillColor', 'setFillColor', 'setStrokePaint', 'setFillPaint', 'getStrokeWidth', |
||||
'setStrokeWidth', 'getStrokeStyle', 'setStrokeStyle', 'getOpacity', 'setOpacity', 'getFillOpacity', 'setFillOpacity', |
||||
'getStrokeOpacity', 'setStrokeOpacity', 'getTransformList', 'getBBox', 'getRotationAngle', 'setRotationAngle', 'each', |
||||
'bind', 'setIdPrefix', 'getBold', 'setBold', 'getItalic', 'setItalic', 'getFontFamily', 'setFontFamily', 'getFontSize', |
||||
'setFontSize', 'getText', 'setTextContent', 'setImageURL', 'setRectRadius', 'setSegType', 'quickClone', |
||||
'changeSelectedAttributeNoUndo', 'changeSelectedAttribute', 'deleteSelectedElements', 'groupSelectedElements', 'zoomChanged', |
||||
'ungroupSelectedElement', 'moveToTopSelectedElement', 'moveToBottomSelectedElement', 'moveSelectedElements', |
||||
'getStrokedBBox', 'getVisibleElements', 'cycleElement', 'getUndoStackSize', 'getRedoStackSize', 'getNextUndoCommandText', |
||||
'getNextRedoCommandText', 'undo', 'redo', 'cloneSelectedElements', 'alignSelectedElements', 'getZoom', 'getVersion', |
||||
'setIconSize', 'setLang', 'setCustomHandlers']; |
||||
|
||||
// TODO: rewrite the following, it's pretty scary.
|
||||
for (i = 0; i < functions.length; i++) { |
||||
this[functions[i]] = getCallbackSetter(functions[i]); |
||||
} |
||||
|
||||
// Older IE may need a polyfill for addEventListener, but so it would for SVG
|
||||
window.addEventListener('message', getMessageListener(this), false); |
||||
} |
||||
|
||||
EmbeddedSVGEdit.prototype.send = function (name, args, callback){ |
||||
var t = this; |
||||
cbid++; |
||||
|
||||
this.callbacks[cbid] = callback; |
||||
setTimeout(function () { // Delay for the callback to be set in case its synchronous
|
||||
/* |
||||
* Todo: Handle non-JSON arguments and return values (undefined, |
||||
* nonfinite numbers, functions, and built-in objects like Date, |
||||
* RegExp), etc.? Allow promises instead of callbacks? Review |
||||
* SVG-Edit functions for whether JSON-able parameters can be |
||||
* made compatile with all API functionality |
||||
*/ |
||||
// We accept and post strings for the sake of IE9 support
|
||||
if (window.location.origin === t.frame.contentWindow.location.origin) { |
||||
// Although we do not really need this API if we are working same
|
||||
// domain, it could allow us to write in a way that would work
|
||||
// cross-domain as well, assuming we stick to the argument limitations
|
||||
// of the current JSON-based communication API (e.g., not passing
|
||||
// callbacks). We might be able to address these shortcomings; see
|
||||
// the todo elsewhere in this file.
|
||||
var message = {id: cbid}, |
||||
svgCanvas = t.frame.contentWindow.svgCanvas; |
||||
try { |
||||
message.result = svgCanvas[name].apply(svgCanvas, args); |
||||
} |
||||
catch (err) { |
||||
message.error = err.message; |
||||
} |
||||
addCallback(t, message); |
||||
} |
||||
else { // Requires the ext-xdomain-messaging.js extension
|
||||
t.frame.contentWindow.postMessage(JSON.stringify({namespace: 'svgCanvas', id: cbid, name: name, args: args}), '*'); |
||||
} |
||||
}, 0); |
||||
return cbid; |
||||
}; |
||||
|
||||
window.embedded_svg_edit = EmbeddedSVGEdit; // Export old, deprecated API
|
||||
window.EmbeddedSVGEdit = EmbeddedSVGEdit; // Follows common JS convention of CamelCase and, as enforced in JSLint, of initial caps for constructors
|
||||
|
||||
}()); |
@ -0,0 +1,11 @@
|
||||
<?php |
||||
|
||||
$allowedMimeTypesBySuffix = array( |
||||
'svg' => 'image/svg+xml;charset=utf-8', |
||||
'png' => 'image/png', |
||||
'jpeg' => 'image/jpeg', |
||||
'bmp' => 'image/bmp', |
||||
'webp' => 'image/webp' |
||||
); |
||||
|
||||
?> |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 708 B |
@ -0,0 +1,293 @@
|
||||
/*globals svgEditor, svgCanvas, $*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-arrows.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension('Arrows', function(S) { |
||||
var svgcontent = S.svgcontent, |
||||
addElem = S.addSvgElementFromJson, |
||||
nonce = S.nonce, |
||||
randomize_ids = S.randomize_ids, |
||||
selElems, pathdata, |
||||
lang_list = { |
||||
'en':[ |
||||
{'id': 'arrow_none', 'textContent': 'No arrow' } |
||||
], |
||||
'fr':[ |
||||
{'id': 'arrow_none', 'textContent': 'Sans flèche' } |
||||
] |
||||
}, |
||||
arrowprefix, |
||||
prefix = 'se_arrow_'; |
||||
|
||||
function setArrowNonce(window, n) { |
||||
randomize_ids = true; |
||||
arrowprefix = prefix + n + '_'; |
||||
pathdata.fw.id = arrowprefix + 'fw'; |
||||
pathdata.bk.id = arrowprefix + 'bk'; |
||||
} |
||||
|
||||
function unsetArrowNonce(window) { |
||||
randomize_ids = false; |
||||
arrowprefix = prefix; |
||||
pathdata.fw.id = arrowprefix + 'fw'; |
||||
pathdata.bk.id = arrowprefix + 'bk'; |
||||
} |
||||
|
||||
|
||||
svgCanvas.bind('setnonce', setArrowNonce); |
||||
svgCanvas.bind('unsetnonce', unsetArrowNonce); |
||||
|
||||
if (randomize_ids) { |
||||
arrowprefix = prefix + nonce + '_'; |
||||
} else { |
||||
arrowprefix = prefix; |
||||
} |
||||
|
||||
pathdata = { |
||||
fw: {d: 'm0,0l10,5l-10,5l5,-5l-5,-5z', refx: 8, id: arrowprefix + 'fw'}, |
||||
bk: {d: 'm10,0l-10,5l10,5l-5,-5l5,-5z', refx: 2, id: arrowprefix + 'bk'} |
||||
}; |
||||
|
||||
function getLinked(elem, attr) { |
||||
var str = elem.getAttribute(attr); |
||||
if(!str) {return null;} |
||||
var m = str.match(/\(\#(.*)\)/); |
||||
if(!m || m.length !== 2) { |
||||
return null; |
||||
} |
||||
return S.getElem(m[1]); |
||||
} |
||||
|
||||
function showPanel(on) { |
||||
$('#arrow_panel').toggle(on); |
||||
if(on) { |
||||
var el = selElems[0]; |
||||
var end = el.getAttribute('marker-end'); |
||||
var start = el.getAttribute('marker-start'); |
||||
var mid = el.getAttribute('marker-mid'); |
||||
var val; |
||||
|
||||
if (end && start) { |
||||
val = 'both'; |
||||
} else if (end) { |
||||
val = 'end'; |
||||
} else if (start) { |
||||
val = 'start'; |
||||
} else if (mid) { |
||||
val = 'mid'; |
||||
if (mid.indexOf('bk') !== -1) { |
||||
val = 'mid_bk'; |
||||
} |
||||
} |
||||
|
||||
if (!start && !mid && !end) { |
||||
val = 'none'; |
||||
} |
||||
|
||||
$('#arrow_list').val(val); |
||||
} |
||||
} |
||||
|
||||
function resetMarker() { |
||||
var el = selElems[0]; |
||||
el.removeAttribute('marker-start'); |
||||
el.removeAttribute('marker-mid'); |
||||
el.removeAttribute('marker-end'); |
||||
} |
||||
|
||||
function addMarker(dir, type, id) { |
||||
// TODO: Make marker (or use?) per arrow type, since refX can be different
|
||||
id = id || arrowprefix + dir; |
||||
|
||||
var marker = S.getElem(id); |
||||
var data = pathdata[dir]; |
||||
|
||||
if (type == 'mid') { |
||||
data.refx = 5; |
||||
} |
||||
|
||||
if (!marker) { |
||||
marker = addElem({ |
||||
'element': 'marker', |
||||
'attr': { |
||||
'viewBox': '0 0 10 10', |
||||
'id': id, |
||||
'refY': 5, |
||||
'markerUnits': 'strokeWidth', |
||||
'markerWidth': 5, |
||||
'markerHeight': 5, |
||||
'orient': 'auto', |
||||
'style': 'pointer-events:none' // Currently needed for Opera
|
||||
} |
||||
}); |
||||
var arrow = addElem({ |
||||
'element': 'path', |
||||
'attr': { |
||||
'd': data.d, |
||||
'fill': '#000000' |
||||
} |
||||
}); |
||||
marker.appendChild(arrow); |
||||
S.findDefs().appendChild(marker); |
||||
} |
||||
|
||||
marker.setAttribute('refX', data.refx); |
||||
|
||||
return marker; |
||||
} |
||||
|
||||
function setArrow() { |
||||
var type = this.value; |
||||
resetMarker(); |
||||
|
||||
if (type == 'none') { |
||||
return; |
||||
} |
||||
|
||||
// Set marker on element
|
||||
var dir = 'fw'; |
||||
if (type == 'mid_bk') { |
||||
type = 'mid'; |
||||
dir = 'bk'; |
||||
} else if (type == 'both') { |
||||
addMarker('bk', type); |
||||
svgCanvas.changeSelectedAttribute('marker-start', 'url(#' + pathdata.bk.id + ')'); |
||||
type = 'end'; |
||||
dir = 'fw'; |
||||
} else if (type == 'start') { |
||||
dir = 'bk'; |
||||
} |
||||
|
||||
addMarker(dir, type); |
||||
svgCanvas.changeSelectedAttribute('marker-' + type, 'url(#' + pathdata[dir].id + ')'); |
||||
S.call('changed', selElems); |
||||
} |
||||
|
||||
function colorChanged(elem) { |
||||
var color = elem.getAttribute('stroke'); |
||||
var mtypes = ['start', 'mid', 'end']; |
||||
var defs = S.findDefs(); |
||||
|
||||
$.each(mtypes, function(i, type) { |
||||
var marker = getLinked(elem, 'marker-'+type); |
||||
if(!marker) {return;} |
||||
|
||||
var cur_color = $(marker).children().attr('fill'); |
||||
var cur_d = $(marker).children().attr('d'); |
||||
var new_marker = null; |
||||
if(cur_color === color) {return;} |
||||
|
||||
var all_markers = $(defs).find('marker'); |
||||
// Different color, check if already made
|
||||
all_markers.each(function() { |
||||
var attrs = $(this).children().attr(['fill', 'd']); |
||||
if(attrs.fill === color && attrs.d === cur_d) { |
||||
// Found another marker with this color and this path
|
||||
new_marker = this; |
||||
} |
||||
}); |
||||
|
||||
if(!new_marker) { |
||||
// Create a new marker with this color
|
||||
var last_id = marker.id; |
||||
var dir = last_id.indexOf('_fw') !== -1?'fw':'bk'; |
||||
|
||||
new_marker = addMarker(dir, type, arrowprefix + dir + all_markers.length); |
||||
|
||||
$(new_marker).children().attr('fill', color); |
||||
} |
||||
|
||||
$(elem).attr('marker-'+type, 'url(#' + new_marker.id + ')'); |
||||
|
||||
// Check if last marker can be removed
|
||||
var remove = true; |
||||
$(S.svgcontent).find('line, polyline, path, polygon').each(function() { |
||||
var elem = this; |
||||
$.each(mtypes, function(j, mtype) { |
||||
if($(elem).attr('marker-' + mtype) === 'url(#' + marker.id + ')') { |
||||
remove = false; |
||||
return remove; |
||||
} |
||||
}); |
||||
if(!remove) {return false;} |
||||
}); |
||||
|
||||
// Not found, so can safely remove
|
||||
if(remove) { |
||||
$(marker).remove(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
return { |
||||
name: 'Arrows', |
||||
context_tools: [{ |
||||
type: 'select', |
||||
panel: 'arrow_panel', |
||||
title: 'Select arrow type', |
||||
id: 'arrow_list', |
||||
options: { |
||||
none: 'No arrow', |
||||
end: '---->', |
||||
start: '<----', |
||||
both: '<--->', |
||||
mid: '-->--', |
||||
mid_bk: '--<--' |
||||
}, |
||||
defval: 'none', |
||||
events: { |
||||
change: setArrow |
||||
} |
||||
}], |
||||
callback: function() { |
||||
$('#arrow_panel').hide(); |
||||
// Set ID so it can be translated in locale file
|
||||
$('#arrow_list option')[0].id = 'connector_no_arrow'; |
||||
}, |
||||
addLangData: function(lang) { |
||||
return { |
||||
data: lang_list[lang] |
||||
}; |
||||
}, |
||||
selectedChanged: function(opts) { |
||||
// Use this to update the current selected elements
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
var marker_elems = ['line', 'path', 'polyline', 'polygon']; |
||||
while(i--) { |
||||
var elem = selElems[i]; |
||||
if(elem && $.inArray(elem.tagName, marker_elems) !== -1) { |
||||
if(opts.selectedElement && !opts.multiselected) { |
||||
showPanel(true); |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
}, |
||||
elementChanged: function(opts) { |
||||
var elem = opts.elems[0]; |
||||
if(elem && ( |
||||
elem.getAttribute('marker-start') || |
||||
elem.getAttribute('marker-mid') || |
||||
elem.getAttribute('marker-end') |
||||
)) { |
||||
// var start = elem.getAttribute('marker-start');
|
||||
// var mid = elem.getAttribute('marker-mid');
|
||||
// var end = elem.getAttribute('marker-end');
|
||||
// Has marker, so see if it should match color
|
||||
colorChanged(elem); |
||||
} |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,91 @@
|
||||
/*globals svgEditor, $*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-closepath.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Jeff Schiller |
||||
* |
||||
*/ |
||||
|
||||
// This extension adds a simple button to the contextual panel for paths
|
||||
// The button toggles whether the path is open or closed
|
||||
svgEditor.addExtension('ClosePath', function() {'use strict'; |
||||
var selElems, |
||||
updateButton = function(path) { |
||||
var seglist = path.pathSegList, |
||||
closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType == 1, |
||||
showbutton = closed ? '#tool_openpath' : '#tool_closepath', |
||||
hidebutton = closed ? '#tool_closepath' : '#tool_openpath'; |
||||
$(hidebutton).hide(); |
||||
$(showbutton).show(); |
||||
}, |
||||
showPanel = function(on) { |
||||
$('#closepath_panel').toggle(on); |
||||
if (on) { |
||||
var path = selElems[0]; |
||||
if (path) {updateButton(path);} |
||||
} |
||||
}, |
||||
toggleClosed = function() { |
||||
var path = selElems[0]; |
||||
if (path) { |
||||
var seglist = path.pathSegList, |
||||
last = seglist.numberOfItems - 1; |
||||
// is closed
|
||||
if (seglist.getItem(last).pathSegType == 1) { |
||||
seglist.removeItem(last); |
||||
} else { |
||||
seglist.appendItem(path.createSVGPathSegClosePath()); |
||||
} |
||||
updateButton(path); |
||||
} |
||||
}; |
||||
|
||||
return { |
||||
name: 'ClosePath', |
||||
svgicons: svgEditor.curConfig.extPath + 'closepath_icons.svg', |
||||
buttons: [{ |
||||
id: 'tool_openpath', |
||||
type: 'context', |
||||
panel: 'closepath_panel', |
||||
title: 'Open path', |
||||
events: { |
||||
click: function() { |
||||
toggleClosed(); |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
id: 'tool_closepath', |
||||
type: 'context', |
||||
panel: 'closepath_panel', |
||||
title: 'Close path', |
||||
events: { |
||||
click: function() { |
||||
toggleClosed(); |
||||
} |
||||
} |
||||
}], |
||||
callback: function() { |
||||
$('#closepath_panel').hide(); |
||||
}, |
||||
selectedChanged: function(opts) { |
||||
selElems = opts.elems; |
||||
var i = selElems.length; |
||||
while (i--) { |
||||
var elem = selElems[i]; |
||||
if (elem && elem.tagName == 'path') { |
||||
if (opts.selectedElement && !opts.multiselected) { |
||||
showPanel(true); |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,593 @@
|
||||
/*globals svgEditor, svgCanvas, $*/ |
||||
/*jslint vars: true, continue: true, eqeq: true, todo: true*/ |
||||
/* |
||||
* ext-connector.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("Connector", function(S) { |
||||
var svgcontent = S.svgcontent, |
||||
svgroot = S.svgroot, |
||||
getNextId = S.getNextId, |
||||
getElem = S.getElem, |
||||
addElem = S.addSvgElementFromJson, |
||||
selManager = S.selectorManager, |
||||
curConfig = svgEditor.curConfig, |
||||
started = false, |
||||
start_x, |
||||
start_y, |
||||
cur_line, |
||||
start_elem, |
||||
end_elem, |
||||
connections = [], |
||||
conn_sel = ".se_connector", |
||||
se_ns, |
||||
// connect_str = "-SE_CONNECT-",
|
||||
selElems = [], |
||||
elData = $.data; |
||||
|
||||
var lang_list = { |
||||
"en":[ |
||||
{"id": "mode_connect", "title": "Connect two objects" } |
||||
], |
||||
"fr":[ |
||||
{"id": "mode_connect", "title": "Connecter deux objets"} |
||||
] |
||||
}; |
||||
|
||||
function getBBintersect(x, y, bb, offset) { |
||||
if(offset) { |
||||
offset -= 0; |
||||
bb = $.extend({}, bb); |
||||
bb.width += offset; |
||||
bb.height += offset; |
||||
bb.x -= offset/2; |
||||
bb.y -= offset/2; |
||||
} |
||||
|
||||
var mid_x = bb.x + bb.width/2; |
||||
var mid_y = bb.y + bb.height/2; |
||||
var len_x = x - mid_x; |
||||
var len_y = y - mid_y; |
||||
|
||||
var slope = Math.abs(len_y/len_x); |
||||
|
||||
var ratio; |
||||
|
||||
if(slope < bb.height/bb.width) { |
||||
ratio = (bb.width/2) / Math.abs(len_x); |
||||
} else { |
||||
ratio = (bb.height/2) / Math.abs(len_y); |
||||
} |
||||
|
||||
|
||||
return { |
||||
x: mid_x + len_x * ratio, |
||||
y: mid_y + len_y * ratio |
||||
}; |
||||
} |
||||
|
||||
function getOffset(side, line) { |
||||
var give_offset = !!line.getAttribute('marker-' + side); |
||||
// var give_offset = $(line).data(side+'_off');
|
||||
|
||||
// TODO: Make this number (5) be based on marker width/height
|
||||
var size = line.getAttribute('stroke-width') * 5; |
||||
return give_offset ? size : 0; |
||||
} |
||||
|
||||
function showPanel(on) { |
||||
var conn_rules = $('#connector_rules'); |
||||
if(!conn_rules.length) { |
||||
conn_rules = $('<style id="connector_rules"><\/style>').appendTo('head'); |
||||
}
|
||||
conn_rules.text(!on?"":"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }"); |
||||
$('#connector_panel').toggle(on); |
||||
} |
||||
|
||||
function setPoint(elem, pos, x, y, setMid) { |
||||
var i, pts = elem.points; |
||||
var pt = svgroot.createSVGPoint(); |
||||
pt.x = x; |
||||
pt.y = y; |
||||
if (pos === 'end') {pos = pts.numberOfItems - 1;} |
||||
// TODO: Test for this on init, then use alt only if needed
|
||||
try { |
||||
pts.replaceItem(pt, pos); |
||||
} catch(err) { |
||||
// Should only occur in FF which formats points attr as "n,n n,n", so just split
|
||||
var pt_arr = elem.getAttribute("points").split(" "); |
||||
for (i = 0; i < pt_arr.length; i++) { |
||||
if (i === pos) { |
||||
pt_arr[i] = x + ',' + y; |
||||
} |
||||
} |
||||
elem.setAttribute("points",pt_arr.join(" "));
|
||||
} |
||||
|
||||
if(setMid) { |
||||
// Add center point
|
||||
var pt_start = pts.getItem(0); |
||||
var pt_end = pts.getItem(pts.numberOfItems-1); |
||||
setPoint(elem, 1, (pt_end.x + pt_start.x)/2, (pt_end.y + pt_start.y)/2); |
||||
} |
||||
} |
||||
|
||||
function updateLine(diff_x, diff_y) { |
||||
// Update line with element
|
||||
var i = connections.length; |
||||
while(i--) { |
||||
var conn = connections[i]; |
||||
var line = conn.connector; |
||||
var elem = conn.elem; |
||||
|
||||
var pre = conn.is_start?'start':'end'; |
||||
// var sw = line.getAttribute('stroke-width') * 5;
|
||||
|
||||
// Update bbox for this element
|
||||
var bb = elData(line, pre+'_bb'); |
||||
bb.x = conn.start_x + diff_x; |
||||
bb.y = conn.start_y + diff_y; |
||||
elData(line, pre+'_bb', bb); |
||||
|
||||
var alt_pre = conn.is_start?'end':'start'; |
||||
|
||||
// Get center pt of connected element
|
||||
var bb2 = elData(line, alt_pre+'_bb'); |
||||
var src_x = bb2.x + bb2.width/2; |
||||
var src_y = bb2.y + bb2.height/2; |
||||
|
||||
// Set point of element being moved
|
||||
var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0
|
||||
setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true); |
||||
|
||||
// Set point of connected element
|
||||
var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line)); |
||||
setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true); |
||||
|
||||
} |
||||
} |
||||
|
||||
function findConnectors(elems) { |
||||
var i; |
||||
if (!elems) {elems = selElems;} |
||||
var connectors = $(svgcontent).find(conn_sel); |
||||
connections = []; |
||||
|
||||
// Loop through connectors to see if one is connected to the element
|
||||
connectors.each(function() { |
||||
var add_this; |
||||
function add () { |
||||
if ($.inArray(this, elems) !== -1) { |
||||
// Pretend this element is selected
|
||||
add_this = true; |
||||
} |
||||
} |
||||
var start = elData(this, "c_start"); |
||||
var end = elData(this, "c_end"); |
||||
|
||||
var parts = [getElem(start), getElem(end)]; |
||||
for (i = 0; i < 2; i++) { |
||||
var c_elem = parts[i]; |
||||
add_this = false; |
||||
// The connected element might be part of a selected group
|
||||
$(c_elem).parents().each(add); |
||||
|
||||
if(!c_elem || !c_elem.parentNode) { |
||||
$(this).remove(); |
||||
continue; |
||||
} |
||||
if($.inArray(c_elem, elems) !== -1 || add_this) { |
||||
var bb = svgCanvas.getStrokedBBox([c_elem]); |
||||
connections.push({ |
||||
elem: c_elem, |
||||
connector: this, |
||||
is_start: (i === 0), |
||||
start_x: bb.x, |
||||
start_y: bb.y |
||||
});
|
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
function updateConnectors(elems) { |
||||
// Updates connector lines based on selected elements
|
||||
// Is not used on mousemove, as it runs getStrokedBBox every time,
|
||||
// which isn't necessary there.
|
||||
var i, j; |
||||
findConnectors(elems); |
||||
if (connections.length) { |
||||
// Update line with element
|
||||
i = connections.length; |
||||
while (i--) { |
||||
var conn = connections[i]; |
||||
var line = conn.connector; |
||||
var elem = conn.elem; |
||||
|
||||
var sw = line.getAttribute('stroke-width') * 5; |
||||
var pre = conn.is_start?'start':'end'; |
||||
|
||||
// Update bbox for this element
|
||||
var bb = svgCanvas.getStrokedBBox([elem]); |
||||
bb.x = conn.start_x; |
||||
bb.y = conn.start_y; |
||||
elData(line, pre+'_bb', bb); |
||||
var add_offset = elData(line, pre+'_off'); |
||||
|
||||
var alt_pre = conn.is_start?'end':'start'; |
||||
|
||||
// Get center pt of connected element
|
||||
var bb2 = elData(line, alt_pre+'_bb'); |
||||
var src_x = bb2.x + bb2.width/2; |
||||
var src_y = bb2.y + bb2.height/2; |
||||
|
||||
// Set point of element being moved
|
||||
var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); |
||||
setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true); |
||||
|
||||
// Set point of connected element
|
||||
var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line)); |
||||
setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true); |
||||
|
||||
// Update points attribute manually for webkit
|
||||
if (navigator.userAgent.indexOf('AppleWebKit') !== -1) { |
||||
var pts = line.points; |
||||
var len = pts.numberOfItems; |
||||
var pt_arr = []; |
||||
for (j = 0; j < len; j++) { |
||||
pt = pts.getItem(j); |
||||
pt_arr[j] = pt.x + ',' + pt.y; |
||||
} |
||||
line.setAttribute('points', pt_arr.join(' '));
|
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Do once
|
||||
(function() { |
||||
var gse = svgCanvas.groupSelectedElements; |
||||
|
||||
svgCanvas.groupSelectedElements = function() { |
||||
svgCanvas.removeFromSelection($(conn_sel).toArray()); |
||||
return gse.apply(this, arguments); |
||||
}; |
||||
|
||||
var mse = svgCanvas.moveSelectedElements; |
||||
|
||||
svgCanvas.moveSelectedElements = function() { |
||||
svgCanvas.removeFromSelection($(conn_sel).toArray()); |
||||
var cmd = mse.apply(this, arguments); |
||||
updateConnectors(); |
||||
return cmd; |
||||
}; |
||||
|
||||
se_ns = svgCanvas.getEditorNS(); |
||||
}()); |
||||
|
||||
// Do on reset
|
||||
function init() { |
||||
// Make sure all connectors have data set
|
||||
$(svgcontent).find('*').each(function() {
|
||||
var conn = this.getAttributeNS(se_ns, "connector"); |
||||
if(conn) { |
||||
this.setAttribute('class', conn_sel.substr(1)); |
||||
var conn_data = conn.split(' '); |
||||
var sbb = svgCanvas.getStrokedBBox([getElem(conn_data[0])]); |
||||
var ebb = svgCanvas.getStrokedBBox([getElem(conn_data[1])]); |
||||
$(this).data('c_start',conn_data[0]) |
||||
.data('c_end',conn_data[1]) |
||||
.data('start_bb', sbb) |
||||
.data('end_bb', ebb); |
||||
svgCanvas.getEditorNS(true); |
||||
} |
||||
}); |
||||
// updateConnectors();
|
||||
} |
||||
|
||||
// $(svgroot).parent().mousemove(function(e) {
|
||||
// // if(started
|
||||
// // || svgCanvas.getMode() != "connector"
|
||||
// // || e.target.parentNode.parentNode != svgcontent) return;
|
||||
//
|
||||
// console.log('y')
|
||||
// // if(e.target.parentNode.parentNode === svgcontent) {
|
||||
// //
|
||||
// // }
|
||||
// });
|
||||
|
||||
return { |
||||
name: "Connector", |
||||
svgicons: svgEditor.curConfig.imgPath + "conn.svg", |
||||
buttons: [{ |
||||
id: "mode_connect", |
||||
type: "mode", |
||||
icon: svgEditor.curConfig.imgPath + "cut.png", |
||||
title: "Connect two objects", |
||||
includeWith: { |
||||
button: '#tool_line', |
||||
isDefault: false, |
||||
position: 1 |
||||
}, |
||||
events: { |
||||
'click': function() { |
||||
svgCanvas.setMode("connector"); |
||||
} |
||||
} |
||||
}], |
||||
addLangData: function(lang) { |
||||
return { |
||||
data: lang_list[lang] |
||||
}; |
||||
}, |
||||
mouseDown: function(opts) { |
||||
var e = opts.event; |
||||
start_x = opts.start_x; |
||||
start_y = opts.start_y; |
||||
var mode = svgCanvas.getMode(); |
||||
|
||||
if (mode == "connector") { |
||||
|
||||
if (started) {return;} |
||||
|
||||
var mouse_target = e.target; |
||||
|
||||
var parents = $(mouse_target).parents(); |
||||
|
||||
if($.inArray(svgcontent, parents) !== -1) { |
||||
// Connectable element
|
||||
|
||||
// If child of foreignObject, use parent
|
||||
var fo = $(mouse_target).closest("foreignObject"); |
||||
start_elem = fo.length ? fo[0] : mouse_target; |
||||
|
||||
// Get center of source element
|
||||
var bb = svgCanvas.getStrokedBBox([start_elem]); |
||||
var x = bb.x + bb.width/2; |
||||
var y = bb.y + bb.height/2; |
||||
|
||||
started = true; |
||||
cur_line = addElem({ |
||||
"element": "polyline", |
||||
"attr": { |
||||
"id": getNextId(), |
||||
"points": (x+','+y+' '+x+','+y+' '+start_x+','+start_y), |
||||
"stroke": '#' + curConfig.initStroke.color, |
||||
"stroke-width": (!start_elem.stroke_width || start_elem.stroke_width == 0) ? curConfig.initStroke.width : start_elem.stroke_width, |
||||
"fill": "none", |
||||
"opacity": curConfig.initStroke.opacity, |
||||
"style": "pointer-events:none" |
||||
} |
||||
}); |
||||
elData(cur_line, 'start_bb', bb); |
||||
} |
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
if (mode == "select") { |
||||
findConnectors(); |
||||
} |
||||
}, |
||||
mouseMove: function(opts) { |
||||
var zoom = svgCanvas.getZoom(); |
||||
var e = opts.event; |
||||
var x = opts.mouse_x/zoom; |
||||
var y = opts.mouse_y/zoom; |
||||
|
||||
var diff_x = x - start_x, |
||||
diff_y = y - start_y; |
||||
|
||||
var mode = svgCanvas.getMode(); |
||||
|
||||
if (mode == "connector" && started) { |
||||
|
||||
var sw = cur_line.getAttribute('stroke-width') * 3; |
||||
// Set start point (adjusts based on bb)
|
||||
var pt = getBBintersect(x, y, elData(cur_line, 'start_bb'), getOffset('start', cur_line)); |
||||
start_x = pt.x; |
||||
start_y = pt.y; |
||||
|
||||
setPoint(cur_line, 0, pt.x, pt.y, true); |
||||
|
||||
// Set end point
|
||||
setPoint(cur_line, 'end', x, y, true); |
||||
} else if (mode == "select") { |
||||
var slen = selElems.length; |
||||
|
||||
while(slen--) { |
||||
var elem = selElems[slen]; |
||||
// Look for selected connector elements
|
||||
if(elem && elData(elem, 'c_start')) { |
||||
// Remove the "translate" transform given to move
|
||||
svgCanvas.removeFromSelection([elem]); |
||||
svgCanvas.getTransformList(elem).clear(); |
||||
|
||||
} |
||||
} |
||||
if(connections.length) { |
||||
updateLine(diff_x, diff_y); |
||||
|
||||
|
||||
} |
||||
}
|
||||
}, |
||||
mouseUp: function(opts) { |
||||
var zoom = svgCanvas.getZoom(); |
||||
var e = opts.event, |
||||
x = opts.mouse_x/zoom, |
||||
y = opts.mouse_y/zoom, |
||||
mouse_target = e.target; |
||||
|
||||
if(svgCanvas.getMode() == "connector") { |
||||
var fo = $(mouse_target).closest("foreignObject"); |
||||
if (fo.length) {mouse_target = fo[0];} |
||||
|
||||
var parents = $(mouse_target).parents(); |
||||
|
||||
if (mouse_target == start_elem) { |
||||
// Start line through click
|
||||
started = true; |
||||
return { |
||||
keep: true, |
||||
element: null, |
||||
started: started |
||||
}; |
||||
} |
||||
if ($.inArray(svgcontent, parents) === -1) { |
||||
// Not a valid target element, so remove line
|
||||
$(cur_line).remove(); |
||||
started = false; |
||||
return { |
||||
keep: false, |
||||
element: null, |
||||
started: started |
||||
}; |
||||
} |
||||
// Valid end element
|
||||
end_elem = mouse_target; |
||||
|
||||
var start_id = start_elem.id, end_id = end_elem.id; |
||||
var conn_str = start_id + " " + end_id; |
||||
var alt_str = end_id + " " + start_id; |
||||
// Don't create connector if one already exists
|
||||
var dupe = $(svgcontent).find(conn_sel).filter(function() { |
||||
var conn = this.getAttributeNS(se_ns, "connector"); |
||||
if (conn == conn_str || conn == alt_str) {return true;} |
||||
}); |
||||
if(dupe.length) { |
||||
$(cur_line).remove(); |
||||
return { |
||||
keep: false, |
||||
element: null, |
||||
started: false |
||||
}; |
||||
} |
||||
|
||||
var bb = svgCanvas.getStrokedBBox([end_elem]); |
||||
|
||||
var pt = getBBintersect(start_x, start_y, bb, getOffset('start', cur_line)); |
||||
setPoint(cur_line, 'end', pt.x, pt.y, true); |
||||
$(cur_line) |
||||
.data("c_start", start_id) |
||||
.data("c_end", end_id) |
||||
.data("end_bb", bb); |
||||
se_ns = svgCanvas.getEditorNS(true); |
||||
cur_line.setAttributeNS(se_ns, "se:connector", conn_str); |
||||
cur_line.setAttribute('class', conn_sel.substr(1)); |
||||
cur_line.setAttribute('opacity', 1); |
||||
svgCanvas.addToSelection([cur_line]); |
||||
svgCanvas.moveToBottomSelectedElement(); |
||||
selManager.requestSelector(cur_line).showGrips(false); |
||||
started = false; |
||||
return { |
||||
keep: true, |
||||
element: cur_line, |
||||
started: started |
||||
}; |
||||
} |
||||
}, |
||||
selectedChanged: function(opts) { |
||||
// TODO: Find better way to skip operations if no connectors are in use
|
||||
if(!$(svgcontent).find(conn_sel).length) {return;} |
||||
|
||||
if(svgCanvas.getMode() == 'connector') { |
||||
svgCanvas.setMode('select'); |
||||
} |
||||
|
||||
// Use this to update the current selected elements
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
|
||||
while(i--) { |
||||
var elem = selElems[i]; |
||||
if(elem && elData(elem, 'c_start')) { |
||||
selManager.requestSelector(elem).showGrips(false); |
||||
if(opts.selectedElement && !opts.multiselected) { |
||||
// TODO: Set up context tools and hide most regular line tools
|
||||
showPanel(true); |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
updateConnectors(); |
||||
}, |
||||
elementChanged: function(opts) { |
||||
var elem = opts.elems[0]; |
||||
if (elem && elem.tagName === 'svg' && elem.id === 'svgcontent') { |
||||
// Update svgcontent (can change on import)
|
||||
svgcontent = elem; |
||||
init(); |
||||
} |
||||
|
||||
// Has marker, so change offset
|
||||
var start; |
||||
if (elem && ( |
||||
elem.getAttribute("marker-start") || |
||||
elem.getAttribute("marker-mid") || |
||||
elem.getAttribute("marker-end") |
||||
)) { |
||||
start = elem.getAttribute("marker-start"); |
||||
var mid = elem.getAttribute("marker-mid"); |
||||
var end = elem.getAttribute("marker-end"); |
||||
cur_line = elem; |
||||
$(elem) |
||||
.data("start_off", !!start) |
||||
.data("end_off", !!end); |
||||
|
||||
if (elem.tagName === 'line' && mid) { |
||||
// Convert to polyline to accept mid-arrow
|
||||
|
||||
var x1 = Number(elem.getAttribute('x1')); |
||||
var x2 = Number(elem.getAttribute('x2')); |
||||
var y1 = Number(elem.getAttribute('y1')); |
||||
var y2 = Number(elem.getAttribute('y2')); |
||||
var id = elem.id; |
||||
|
||||
var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' '); |
||||
var pline = addElem({ |
||||
"element": "polyline", |
||||
"attr": { |
||||
"points": (x1+','+y1+ mid_pt +x2+','+y2), |
||||
"stroke": elem.getAttribute('stroke'), |
||||
"stroke-width": elem.getAttribute('stroke-width'), |
||||
"marker-mid": mid, |
||||
"fill": "none", |
||||
"opacity": elem.getAttribute('opacity') || 1 |
||||
} |
||||
}); |
||||
$(elem).after(pline).remove(); |
||||
svgCanvas.clearSelection(); |
||||
pline.id = id; |
||||
svgCanvas.addToSelection([pline]); |
||||
elem = pline; |
||||
} |
||||
} |
||||
// Update line if it's a connector
|
||||
if (elem.getAttribute('class') == conn_sel.substr(1)) { |
||||
start = getElem(elData(elem, 'c_start')); |
||||
updateConnectors([start]); |
||||
} else { |
||||
updateConnectors(); |
||||
} |
||||
}, |
||||
toolButtonStateUpdate: function(opts) { |
||||
if (opts.nostroke) { |
||||
if ($('#mode_connect').hasClass('tool_button_current')) { |
||||
svgEditor.clickSelect(); |
||||
} |
||||
} |
||||
$('#mode_connect') |
||||
.toggleClass('disabled',opts.nostroke); |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,67 @@
|
||||
/*globals svgEditor*/ |
||||
/* |
||||
Depends on Firefox add-on and executables from https://github.com/brettz9/webappfind
|
||||
|
||||
Todos: |
||||
1. See WebAppFind Readme for SVG-related todos |
||||
*/ |
||||
(function () {'use strict'; |
||||
|
||||
var pathID, |
||||
saveMessage = 'webapp-save', |
||||
readMessage = 'webapp-read', |
||||
excludedMessages = [readMessage, saveMessage]; |
||||
|
||||
window.addEventListener('message', function(e) { |
||||
if (e.origin !== window.location.origin || // PRIVACY AND SECURITY! (for viewing and saving, respectively)
|
||||
(!Array.isArray(e.data) || excludedMessages.indexOf(e.data[0]) > -1) // Validate format and avoid our post below
|
||||
) { |
||||
return; |
||||
} |
||||
var svgString, |
||||
messageType = e.data[0]; |
||||
switch (messageType) { |
||||
case 'webapp-view': |
||||
// Populate the contents
|
||||
pathID = e.data[1]; |
||||
|
||||
svgString = e.data[2]; |
||||
svgEditor.loadFromString(svgString); |
||||
|
||||
/*if ($('#tool_save_file')) { |
||||
$('#tool_save_file').disabled = false; |
||||
}*/ |
||||
break; |
||||
case 'webapp-save-end': |
||||
alert('save complete for pathID ' + e.data[1] + '!'); |
||||
break; |
||||
default: |
||||
throw 'Unexpected mode'; |
||||
} |
||||
}, false); |
||||
|
||||
window.postMessage([readMessage], window.location.origin !== 'null' ? window.location.origin : '*'); // Avoid "null" string error for file: protocol (even though file protocol not currently supported by add-on)
|
||||
|
||||
svgEditor.addExtension('WebAppFind', function() { |
||||
|
||||
return { |
||||
name: 'WebAppFind', |
||||
svgicons: svgEditor.curConfig.extPath + 'executablebuilder-icocreator.svg', |
||||
buttons: [{ |
||||
id: 'webappfind_ico_export', //
|
||||
type: 'app_menu', |
||||
title: 'Export ICO Image back to Disk', |
||||
position: 4, // Before 0-based index position 4 (after the regular "Save Image (S)")
|
||||
events: { |
||||
click: function () { |
||||
if (!pathID) { // Not ready yet as haven't received first payload
|
||||
return; |
||||
} |
||||
window.postMessage([saveMessage, pathID, svgEditor.canvas.getSvgString()], window.location.origin); |
||||
} |
||||
} |
||||
}] |
||||
}; |
||||
}); |
||||
|
||||
}()); |
@ -0,0 +1,112 @@
|
||||
/*globals svgEditor, svgedit, $*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-eyedropper.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Jeff Schiller |
||||
* |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) jQuery
|
||||
// 2) history.js
|
||||
// 3) svg_editor.js
|
||||
// 4) svgcanvas.js
|
||||
|
||||
svgEditor.addExtension("eyedropper", function(S) {'use strict'; |
||||
var // NS = svgedit.NS,
|
||||
// svgcontent = S.svgcontent,
|
||||
// svgdoc = S.svgroot.parentNode.ownerDocument,
|
||||
svgCanvas = svgEditor.canvas, |
||||
ChangeElementCommand = svgedit.history.ChangeElementCommand, |
||||
addToHistory = function(cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); }, |
||||
currentStyle = { |
||||
fillPaint: "red", fillOpacity: 1.0, |
||||
strokePaint: "black", strokeOpacity: 1.0,
|
||||
strokeWidth: 5, strokeDashArray: null, |
||||
opacity: 1.0, |
||||
strokeLinecap: 'butt', |
||||
strokeLinejoin: 'miter' |
||||
}; |
||||
|
||||
function getStyle(opts) { |
||||
// if we are in eyedropper mode, we don't want to disable the eye-dropper tool
|
||||
var mode = svgCanvas.getMode(); |
||||
if (mode == "eyedropper") {return;} |
||||
|
||||
var elem = null; |
||||
var tool = $('#tool_eyedropper'); |
||||
// enable-eye-dropper if one element is selected
|
||||
if (!opts.multiselected && opts.elems[0] && |
||||
$.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) === -1 |
||||
) { |
||||
elem = opts.elems[0]; |
||||
tool.removeClass('disabled'); |
||||
// grab the current style
|
||||
currentStyle.fillPaint = elem.getAttribute("fill") || "black"; |
||||
currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0; |
||||
currentStyle.strokePaint = elem.getAttribute("stroke"); |
||||
currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0; |
||||
currentStyle.strokeWidth = elem.getAttribute("stroke-width"); |
||||
currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray"); |
||||
currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap"); |
||||
currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin"); |
||||
currentStyle.opacity = elem.getAttribute("opacity") || 1.0; |
||||
} |
||||
// disable eye-dropper tool
|
||||
else { |
||||
tool.addClass('disabled'); |
||||
} |
||||
|
||||
} |
||||
|
||||
return { |
||||
name: "eyedropper", |
||||
svgicons: svgEditor.curConfig.extPath + "eyedropper-icon.xml", |
||||
buttons: [{ |
||||
id: "tool_eyedropper", |
||||
type: "mode", |
||||
title: "Eye Dropper Tool", |
||||
key: "I", |
||||
events: { |
||||
"click": function() { |
||||
svgCanvas.setMode("eyedropper"); |
||||
} |
||||
} |
||||
}], |
||||
|
||||
// if we have selected an element, grab its paint and enable the eye dropper button
|
||||
selectedChanged: getStyle, |
||||
elementChanged: getStyle, |
||||
|
||||
mouseDown: function(opts) { |
||||
var mode = svgCanvas.getMode(); |
||||
if (mode == "eyedropper") { |
||||
var e = opts.event; |
||||
var target = e.target; |
||||
if ($.inArray(target.nodeName, ['svg', 'g', 'use']) === -1) { |
||||
var changes = {}; |
||||
|
||||
var change = function(elem, attrname, newvalue) { |
||||
changes[attrname] = elem.getAttribute(attrname); |
||||
elem.setAttribute(attrname, newvalue); |
||||
}; |
||||
|
||||
if (currentStyle.fillPaint) {change(target, "fill", currentStyle.fillPaint);} |
||||
if (currentStyle.fillOpacity) {change(target, "fill-opacity", currentStyle.fillOpacity);} |
||||
if (currentStyle.strokePaint) {change(target, "stroke", currentStyle.strokePaint);} |
||||
if (currentStyle.strokeOpacity) {change(target, "stroke-opacity", currentStyle.strokeOpacity);} |
||||
if (currentStyle.strokeWidth) {change(target, "stroke-width", currentStyle.strokeWidth);} |
||||
if (currentStyle.strokeDashArray) {change(target, "stroke-dasharray", currentStyle.strokeDashArray);} |
||||
if (currentStyle.opacity) {change(target, "opacity", currentStyle.opacity);} |
||||
if (currentStyle.strokeLinecap) {change(target, "stroke-linecap", currentStyle.strokeLinecap);} |
||||
if (currentStyle.strokeLinejoin) {change(target, "stroke-linejoin", currentStyle.strokeLinejoin);} |
||||
|
||||
addToHistory(new ChangeElementCommand(target, changes)); |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,268 @@
|
||||
/*globals svgEditor, svgedit, svgCanvas, $*/ |
||||
/*jslint vars: true, eqeq: true, todo: true*/ |
||||
/* |
||||
* ext-foreignobject.js |
||||
* |
||||
* Licensed under the Apache License, Version 2 |
||||
* |
||||
* Copyright(c) 2010 Jacques Distler
|
||||
* Copyright(c) 2010 Alexis Deveria
|
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("foreignObject", function(S) { |
||||
var NS = svgedit.NS, |
||||
Utils = svgedit.utilities, |
||||
svgcontent = S.svgcontent, |
||||
addElem = S.addSvgElementFromJson, |
||||
selElems, |
||||
editingforeign = false, |
||||
svgdoc = S.svgroot.parentNode.ownerDocument, |
||||
started, |
||||
newFO; |
||||
|
||||
var properlySourceSizeTextArea = function () { |
||||
// TODO: remove magic numbers here and get values from CSS
|
||||
var height = $('#svg_source_container').height() - 80; |
||||
$('#svg_source_textarea').css('height', height); |
||||
}; |
||||
|
||||
function showPanel(on) { |
||||
var fc_rules = $('#fc_rules'); |
||||
if(!fc_rules.length) { |
||||
fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head'); |
||||
} |
||||
fc_rules.text(!on?"":" #tool_topath { display: none !important; }"); |
||||
$('#foreignObject_panel').toggle(on); |
||||
} |
||||
|
||||
function toggleSourceButtons(on) { |
||||
$('#tool_source_save, #tool_source_cancel').toggle(!on); |
||||
$('#foreign_save, #foreign_cancel').toggle(on); |
||||
} |
||||
|
||||
// Function: setForeignString(xmlString, elt)
|
||||
// This function sets the content of element elt to the input XML.
|
||||
//
|
||||
// Parameters:
|
||||
// xmlString - The XML text.
|
||||
// elt - the parent element to append to
|
||||
//
|
||||
// Returns:
|
||||
// This function returns false if the set was unsuccessful, true otherwise.
|
||||
function setForeignString(xmlString) { |
||||
var elt = selElems[0]; |
||||
try { |
||||
// convert string into XML document
|
||||
var newDoc = Utils.text2xml('<svg xmlns="' + NS.SVG + '" xmlns:xlink="' + NS.XLINK + '">' + xmlString + '</svg>'); |
||||
// run it through our sanitizer to remove anything we do not support
|
||||
S.sanitizeSvg(newDoc.documentElement); |
||||
elt.parentNode.replaceChild(svgdoc.importNode(newDoc.documentElement.firstChild, true), elt); |
||||
S.call("changed", [elt]); |
||||
svgCanvas.clearSelection(); |
||||
} catch(e) { |
||||
console.log(e); |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
function showForeignEditor() { |
||||
var elt = selElems[0]; |
||||
if (!elt || editingforeign) {return;} |
||||
editingforeign = true; |
||||
toggleSourceButtons(true); |
||||
elt.removeAttribute('fill'); |
||||
|
||||
var str = S.svgToString(elt, 0); |
||||
$('#svg_source_textarea').val(str); |
||||
$('#svg_source_editor').fadeIn(); |
||||
properlySourceSizeTextArea(); |
||||
$('#svg_source_textarea').focus(); |
||||
} |
||||
|
||||
function setAttr(attr, val) { |
||||
svgCanvas.changeSelectedAttribute(attr, val); |
||||
S.call("changed", selElems); |
||||
} |
||||
|
||||
return { |
||||
name: "foreignObject", |
||||
svgicons: svgEditor.curConfig.extPath + "foreignobject-icons.xml", |
||||
buttons: [{ |
||||
id: "tool_foreign", |
||||
type: "mode", |
||||
title: "Foreign Object Tool", |
||||
events: { |
||||
'click': function() { |
||||
svgCanvas.setMode('foreign'); |
||||
} |
||||
} |
||||
},{ |
||||
id: "edit_foreign", |
||||
type: "context", |
||||
panel: "foreignObject_panel", |
||||
title: "Edit ForeignObject Content", |
||||
events: { |
||||
'click': function() { |
||||
showForeignEditor(); |
||||
} |
||||
} |
||||
}], |
||||
|
||||
context_tools: [{ |
||||
type: "input", |
||||
panel: "foreignObject_panel", |
||||
title: "Change foreignObject's width", |
||||
id: "foreign_width", |
||||
label: "w", |
||||
size: 3, |
||||
events: { |
||||
change: function() { |
||||
setAttr('width', this.value); |
||||
} |
||||
} |
||||
},{ |
||||
type: "input", |
||||
panel: "foreignObject_panel", |
||||
title: "Change foreignObject's height", |
||||
id: "foreign_height", |
||||
label: "h", |
||||
events: { |
||||
change: function() { |
||||
setAttr('height', this.value); |
||||
} |
||||
} |
||||
}, { |
||||
type: "input", |
||||
panel: "foreignObject_panel", |
||||
title: "Change foreignObject's font size", |
||||
id: "foreign_font_size", |
||||
label: "font-size", |
||||
size: 2, |
||||
defval: 16, |
||||
events: { |
||||
change: function() { |
||||
setAttr('font-size', this.value); |
||||
} |
||||
} |
||||
} |
||||
|
||||
], |
||||
callback: function() { |
||||
$('#foreignObject_panel').hide(); |
||||
|
||||
var endChanges = function() { |
||||
$('#svg_source_editor').hide(); |
||||
editingforeign = false; |
||||
$('#svg_source_textarea').blur(); |
||||
toggleSourceButtons(false); |
||||
}; |
||||
|
||||
// TODO: Needs to be done after orig icon loads
|
||||
setTimeout(function() { |
||||
// Create source save/cancel buttons
|
||||
var save = $('#tool_source_save').clone() |
||||
.hide().attr('id', 'foreign_save').unbind() |
||||
.appendTo("#tool_source_back").click(function() { |
||||
|
||||
if (!editingforeign) {return;} |
||||
|
||||
if (!setForeignString($('#svg_source_textarea').val())) { |
||||
$.confirm("Errors found. Revert to original?", function(ok) { |
||||
if(!ok) {return false;} |
||||
endChanges(); |
||||
}); |
||||
} else { |
||||
endChanges(); |
||||
} |
||||
// setSelectMode();
|
||||
}); |
||||
|
||||
var cancel = $('#tool_source_cancel').clone() |
||||
.hide().attr('id', 'foreign_cancel').unbind() |
||||
.appendTo("#tool_source_back").click(function() { |
||||
endChanges(); |
||||
}); |
||||
}, 3000); |
||||
}, |
||||
mouseDown: function(opts) { |
||||
var e = opts.event; |
||||
|
||||
if(svgCanvas.getMode() == "foreign") { |
||||
|
||||
started = true; |
||||
newFO = S.addSvgElementFromJson({ |
||||
"element": "foreignObject", |
||||
"attr": { |
||||
"x": opts.start_x, |
||||
"y": opts.start_y, |
||||
"id": S.getNextId(), |
||||
"font-size": 16, //cur_text.font_size,
|
||||
"width": "48", |
||||
"height": "20", |
||||
"style": "pointer-events:inherit" |
||||
} |
||||
}); |
||||
var m = svgdoc.createElementNS(NS.MATH, 'math'); |
||||
m.setAttributeNS(NS.XMLNS, 'xmlns', NS.MATH); |
||||
m.setAttribute('display', 'inline'); |
||||
var mi = svgdoc.createElementNS(NS.MATH, 'mi'); |
||||
mi.setAttribute('mathvariant', 'normal'); |
||||
mi.textContent = "\u03A6"; |
||||
var mo = svgdoc.createElementNS(NS.MATH, 'mo'); |
||||
mo.textContent = "\u222A"; |
||||
var mi2 = svgdoc.createElementNS(NS.MATH, 'mi'); |
||||
mi2.textContent = "\u2133"; |
||||
m.appendChild(mi); |
||||
m.appendChild(mo); |
||||
m.appendChild(mi2); |
||||
newFO.appendChild(m); |
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
}, |
||||
mouseUp: function(opts) { |
||||
var e = opts.event; |
||||
if(svgCanvas.getMode() == "foreign" && started) { |
||||
var attrs = $(newFO).attr(["width", "height"]); |
||||
var keep = (attrs.width != 0 || attrs.height != 0); |
||||
svgCanvas.addToSelection([newFO], true); |
||||
|
||||
return { |
||||
keep: keep, |
||||
element: newFO |
||||
}; |
||||
|
||||
} |
||||
|
||||
}, |
||||
selectedChanged: function(opts) { |
||||
// Use this to update the current selected elements
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
|
||||
while(i--) { |
||||
var elem = selElems[i]; |
||||
if(elem && elem.tagName === 'foreignObject') { |
||||
if(opts.selectedElement && !opts.multiselected) { |
||||
$('#foreign_font_size').val(elem.getAttribute("font-size")); |
||||
$('#foreign_width').val(elem.getAttribute("width")); |
||||
$('#foreign_height').val(elem.getAttribute("height")); |
||||
showPanel(true); |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
}, |
||||
elementChanged: function(opts) { |
||||
var elem = opts.elems[0]; |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,155 @@
|
||||
/*globals svgEditor, svgedit, svgCanvas, $*/ |
||||
/*jslint vars: true*/ |
||||
/* |
||||
* ext-grid.js |
||||
* |
||||
* Licensed under the Apache License, Version 2 |
||||
* |
||||
* Copyright(c) 2010 Redou Mine |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) units.js
|
||||
// 2) everything else
|
||||
|
||||
svgEditor.addExtension('view_grid', function() { 'use strict'; |
||||
|
||||
var NS = svgedit.NS, |
||||
svgdoc = document.getElementById('svgcanvas').ownerDocument, |
||||
showGrid = false, |
||||
assignAttributes = svgCanvas.assignAttributes, |
||||
hcanvas = document.createElement('canvas'), |
||||
canvBG = $('#canvasBackground'), |
||||
units = svgedit.units.getTypeMap(), |
||||
intervals = [0.01, 0.1, 1, 10, 100, 1000]; |
||||
|
||||
$(hcanvas).hide().appendTo('body'); |
||||
|
||||
var canvasGrid = svgdoc.createElementNS(NS.SVG, 'svg'); |
||||
assignAttributes(canvasGrid, { |
||||
'id': 'canvasGrid', |
||||
'width': '100%', |
||||
'height': '100%', |
||||
'x': 0, |
||||
'y': 0, |
||||
'overflow': 'visible', |
||||
'display': 'none' |
||||
}); |
||||
canvBG.append(canvasGrid); |
||||
|
||||
// grid-pattern
|
||||
var gridPattern = svgdoc.createElementNS(NS.SVG, 'pattern'); |
||||
assignAttributes(gridPattern, { |
||||
'id': 'gridpattern', |
||||
'patternUnits': 'userSpaceOnUse', |
||||
'x': 0, //-(value.strokeWidth / 2), // position for strokewidth
|
||||
'y': 0, //-(value.strokeWidth / 2), // position for strokewidth
|
||||
'width': 100, |
||||
'height': 100 |
||||
}); |
||||
|
||||
var gridimg = svgdoc.createElementNS(NS.SVG, 'image'); |
||||
assignAttributes(gridimg, { |
||||
'x': 0, |
||||
'y': 0, |
||||
'width': 100, |
||||
'height': 100 |
||||
}); |
||||
gridPattern.appendChild(gridimg); |
||||
$('#svgroot defs').append(gridPattern); |
||||
|
||||
// grid-box
|
||||
var gridBox = svgdoc.createElementNS(NS.SVG, 'rect'); |
||||
assignAttributes(gridBox, { |
||||
'width': '100%', |
||||
'height': '100%', |
||||
'x': 0, |
||||
'y': 0, |
||||
'stroke-width': 0, |
||||
'stroke': 'none', |
||||
'fill': 'url(#gridpattern)', |
||||
'style': 'pointer-events: none; display:visible;' |
||||
}); |
||||
$('#canvasGrid').append(gridBox); |
||||
|
||||
function updateGrid(zoom) { |
||||
var i; |
||||
// TODO: Try this with <line> elements, then compare performance difference
|
||||
var unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px
|
||||
var u_multi = unit * zoom; |
||||
// Calculate the main number interval
|
||||
var raw_m = 100 / u_multi; |
||||
var multi = 1; |
||||
for (i = 0; i < intervals.length; i++) { |
||||
var num = intervals[i]; |
||||
multi = num; |
||||
if (raw_m <= num) { |
||||
break; |
||||
} |
||||
} |
||||
var big_int = multi * u_multi; |
||||
|
||||
// Set the canvas size to the width of the container
|
||||
hcanvas.width = big_int; |
||||
hcanvas.height = big_int; |
||||
var ctx = hcanvas.getContext('2d'); |
||||
var cur_d = 0.5; |
||||
var part = big_int / 10; |
||||
|
||||
ctx.globalAlpha = 0.2; |
||||
ctx.strokeStyle = svgEditor.curConfig.gridColor; |
||||
for (i = 1; i < 10; i++) { |
||||
var sub_d = Math.round(part * i) + 0.5; |
||||
// var line_num = (i % 2)?12:10;
|
||||
var line_num = 0; |
||||
ctx.moveTo(sub_d, big_int); |
||||
ctx.lineTo(sub_d, line_num); |
||||
ctx.moveTo(big_int, sub_d); |
||||
ctx.lineTo(line_num ,sub_d); |
||||
} |
||||
ctx.stroke(); |
||||
ctx.beginPath(); |
||||
ctx.globalAlpha = 0.5; |
||||
ctx.moveTo(cur_d, big_int); |
||||
ctx.lineTo(cur_d, 0); |
||||
|
||||
ctx.moveTo(big_int, cur_d); |
||||
ctx.lineTo(0, cur_d); |
||||
ctx.stroke(); |
||||
|
||||
var datauri = hcanvas.toDataURL('image/png'); |
||||
gridimg.setAttribute('width', big_int); |
||||
gridimg.setAttribute('height', big_int); |
||||
gridimg.parentNode.setAttribute('width', big_int); |
||||
gridimg.parentNode.setAttribute('height', big_int); |
||||
svgCanvas.setHref(gridimg, datauri); |
||||
} |
||||
|
||||
return { |
||||
name: 'view_grid', |
||||
svgicons: svgEditor.curConfig.extPath + 'grid-icon.xml', |
||||
|
||||
zoomChanged: function(zoom) { |
||||
if (showGrid) {updateGrid(zoom);} |
||||
}, |
||||
|
||||
buttons: [{ |
||||
id: 'view_grid', |
||||
type: 'context', |
||||
panel: 'editor_panel', |
||||
title: 'Show/Hide Grid', |
||||
events: { |
||||
click: function() { |
||||
svgEditor.curConfig.showGrid = showGrid = !showGrid; |
||||
if (showGrid) { |
||||
updateGrid(svgCanvas.getZoom()); |
||||
} |
||||
$('#canvasGrid').toggle(showGrid); |
||||
$('#view_grid').toggleClass('push_button_pressed tool_button'); |
||||
} |
||||
} |
||||
}] |
||||
}; |
||||
}); |
@ -0,0 +1,80 @@
|
||||
/*globals svgEditor, svgCanvas, $*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-helloworld.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
/* |
||||
This is a very basic SVG-Edit extension. It adds a "Hello World" button in |
||||
the left panel. Clicking on the button, and then the canvas will show the |
||||
user the point on the canvas that was clicked on. |
||||
*/ |
||||
|
||||
svgEditor.addExtension("Hello World", function() {'use strict'; |
||||
|
||||
return { |
||||
name: "Hello World", |
||||
// For more notes on how to make an icon file, see the source of
|
||||
// the hellorworld-icon.xml
|
||||
svgicons: svgEditor.curConfig.extPath + "helloworld-icon.xml", |
||||
|
||||
// Multiple buttons can be added in this array
|
||||
buttons: [{ |
||||
// Must match the icon ID in helloworld-icon.xml
|
||||
id: "hello_world",
|
||||
|
||||
// This indicates that the button will be added to the "mode"
|
||||
// button panel on the left side
|
||||
type: "mode",
|
||||
|
||||
// Tooltip text
|
||||
title: "Say 'Hello World'",
|
||||
|
||||
// Events
|
||||
events: { |
||||
'click': function() { |
||||
// The action taken when the button is clicked on.
|
||||
// For "mode" buttons, any other button will
|
||||
// automatically be de-pressed.
|
||||
svgCanvas.setMode("hello_world"); |
||||
} |
||||
} |
||||
}], |
||||
// This is triggered when the main mouse button is pressed down
|
||||
// on the editor canvas (not the tool panels)
|
||||
mouseDown: function() { |
||||
// Check the mode on mousedown
|
||||
if(svgCanvas.getMode() == "hello_world") { |
||||
|
||||
// The returned object must include "started" with
|
||||
// a value of true in order for mouseUp to be triggered
|
||||
return {started: true}; |
||||
} |
||||
}, |
||||
|
||||
// This is triggered from anywhere, but "started" must have been set
|
||||
// to true (see above). Note that "opts" is an object with event info
|
||||
mouseUp: function(opts) { |
||||
// Check the mode on mouseup
|
||||
if(svgCanvas.getMode() == "hello_world") { |
||||
var zoom = svgCanvas.getZoom(); |
||||
|
||||
// Get the actual coordinate by dividing by the zoom value
|
||||
var x = opts.mouse_x / zoom; |
||||
var y = opts.mouse_y / zoom; |
||||
|
||||
var text = "Hello World!\n\nYou clicked here: "
|
||||
+ x + ", " + y; |
||||
|
||||
// Show the text using the custom alert function
|
||||
$.alert(text); |
||||
} |
||||
} |
||||
}; |
||||
}); |
||||
|
@ -0,0 +1,460 @@
|
||||
/*globals $, svgEditor, svgedit, svgCanvas, DOMParser*/ |
||||
/*jslint vars: true, eqeq: true, es5: true, todo: true */ |
||||
/* |
||||
* ext-imagelib.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("imagelib", function() {'use strict'; |
||||
|
||||
var uiStrings = svgEditor.uiStrings; |
||||
|
||||
$.extend(uiStrings, { |
||||
imagelib: { |
||||
select_lib: 'Select an image library', |
||||
show_list: 'Show library list', |
||||
import_single: 'Import single', |
||||
import_multi: 'Import multiple', |
||||
open: 'Open as new document' |
||||
} |
||||
}); |
||||
|
||||
var img_libs = [{ |
||||
name: 'Demo library (local)', |
||||
url: svgEditor.curConfig.extPath + 'imagelib/index.html', |
||||
description: 'Demonstration library for SVG-edit on this server' |
||||
}, |
||||
{ |
||||
name: 'IAN Symbol Libraries', |
||||
url: 'http://ian.umces.edu/symbols/catalog/svgedit/album_chooser.php', |
||||
description: 'Free library of illustrations' |
||||
} |
||||
]; |
||||
|
||||
function closeBrowser() { |
||||
$('#imgbrowse_holder').hide(); |
||||
} |
||||
|
||||
function importImage(url) { |
||||
var newImage = svgCanvas.addSvgElementFromJson({ |
||||
"element": "image", |
||||
"attr": { |
||||
"x": 0, |
||||
"y": 0, |
||||
"width": 0, |
||||
"height": 0, |
||||
"id": svgCanvas.getNextId(), |
||||
"style": "pointer-events:inherit" |
||||
} |
||||
}); |
||||
svgCanvas.clearSelection(); |
||||
svgCanvas.addToSelection([newImage]); |
||||
svgCanvas.setImageURL(url); |
||||
} |
||||
|
||||
var mode = 's'; |
||||
var multi_arr = []; |
||||
var cur_meta; |
||||
var tranfer_stopped = false; |
||||
var pending = {}; |
||||
var preview, submit; |
||||
|
||||
window.addEventListener("message", function(evt) { |
||||
// Receive postMessage data
|
||||
var response = evt.data; |
||||
|
||||
if (!response || typeof response !== "string") { // Todo: Should namespace postMessage API for this extension and filter out here
|
||||
// Do nothing
|
||||
return; |
||||
} |
||||
try { // This block can be removed if embedAPI moves away from a string to an object (if IE9 support not needed)
|
||||
var res = JSON.parse(response); |
||||
if (res.namespace) { // Part of embedAPI communications
|
||||
return; |
||||
} |
||||
} |
||||
catch (e) {} |
||||
|
||||
var char1 = response.charAt(0); |
||||
var id; |
||||
var svg_str; |
||||
var img_str; |
||||
|
||||
if (char1 != "{" && tranfer_stopped) { |
||||
tranfer_stopped = false; |
||||
return; |
||||
} |
||||
|
||||
if (char1 == '|') { |
||||
var secondpos = response.indexOf('|', 1); |
||||
id = response.substr(1, secondpos-1); |
||||
response = response.substr(secondpos+1); |
||||
char1 = response.charAt(0); |
||||
} |
||||
|
||||
|
||||
// Hide possible transfer dialog box
|
||||
$('#dialog_box').hide(); |
||||
var entry, cur_meta; |
||||
switch (char1) { |
||||
case '{': |
||||
// Metadata
|
||||
tranfer_stopped = false; |
||||
cur_meta = JSON.parse(response); |
||||
|
||||
pending[cur_meta.id] = cur_meta; |
||||
|
||||
var name = (cur_meta.name || 'file'); |
||||
|
||||
var message = uiStrings.notification.retrieving.replace('%s', name); |
||||
|
||||
if (mode != 'm') { |
||||
$.process_cancel(message, function() { |
||||
tranfer_stopped = true; |
||||
// Should a message be sent back to the frame?
|
||||
|
||||
$('#dialog_box').hide(); |
||||
}); |
||||
} else { |
||||
entry = $('<div>' + message + '</div>').data('id', cur_meta.id); |
||||
preview.append(entry); |
||||
cur_meta.entry = entry; |
||||
} |
||||
|
||||
return; |
||||
case '<': |
||||
svg_str = true; |
||||
break; |
||||
case 'd': |
||||
if (response.indexOf('data:image/svg+xml') === 0) { |
||||
var pre = 'data:image/svg+xml;base64,'; |
||||
var src = response.substring(pre.length); |
||||
response = svgedit.utilities.decode64(src); |
||||
svg_str = true; |
||||
break; |
||||
} else if (response.indexOf('data:image/') === 0) { |
||||
img_str = true; |
||||
break; |
||||
} |
||||
// Else fall through
|
||||
default: |
||||
// TODO: See if there's a way to base64 encode the binary data stream
|
||||
// var str = 'data:;base64,' + svgedit.utilities.encode64(response, true);
|
||||
|
||||
// Assume it's raw image data
|
||||
// importImage(str);
|
||||
|
||||
// Don't give warning as postMessage may have been used by something else
|
||||
if (mode !== 'm') { |
||||
closeBrowser(); |
||||
} else { |
||||
pending[id].entry.remove(); |
||||
} |
||||
// $.alert('Unexpected data was returned: ' + response, function() {
|
||||
// if (mode !== 'm') {
|
||||
// closeBrowser();
|
||||
// } else {
|
||||
// pending[id].entry.remove();
|
||||
// }
|
||||
// });
|
||||
return; |
||||
} |
||||
|
||||
switch (mode) { |
||||
case 's': |
||||
// Import one
|
||||
if (svg_str) { |
||||
svgCanvas.importSvgString(response); |
||||
} else if (img_str) { |
||||
importImage(response); |
||||
} |
||||
closeBrowser(); |
||||
break; |
||||
case 'm': |
||||
// Import multiple
|
||||
multi_arr.push([(svg_str ? 'svg' : 'img'), response]); |
||||
var title; |
||||
cur_meta = pending[id]; |
||||
if (svg_str) { |
||||
if (cur_meta && cur_meta.name) { |
||||
title = cur_meta.name; |
||||
} else { |
||||
// Try to find a title
|
||||
var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement; |
||||
title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')'; |
||||
} |
||||
if (cur_meta) { |
||||
preview.children().each(function() { |
||||
if ($(this).data('id') == id) { |
||||
if (cur_meta.preview_url) { |
||||
$(this).html('<img src="' + cur_meta.preview_url + '">' + title); |
||||
} else { |
||||
$(this).text(title); |
||||
} |
||||
submit.removeAttr('disabled'); |
||||
} |
||||
}); |
||||
} else { |
||||
preview.append('<div>'+title+'</div>'); |
||||
submit.removeAttr('disabled'); |
||||
} |
||||
} else { |
||||
if (cur_meta && cur_meta.preview_url) { |
||||
title = cur_meta.name || ''; |
||||
} |
||||
if (cur_meta && cur_meta.preview_url) { |
||||
entry = '<img src="' + cur_meta.preview_url + '">' + title; |
||||
} else { |
||||
entry = '<img src="' + response + '">'; |
||||
} |
||||
|
||||
if (cur_meta) { |
||||
preview.children().each(function() { |
||||
if ($(this).data('id') == id) { |
||||
$(this).html(entry); |
||||
submit.removeAttr('disabled'); |
||||
} |
||||
}); |
||||
} else { |
||||
preview.append($('<div>').append(entry)); |
||||
submit.removeAttr('disabled'); |
||||
} |
||||
|
||||
} |
||||
break; |
||||
case 'o': |
||||
// Open
|
||||
if (!svg_str) {break;} |
||||
svgEditor.openPrep(function(ok) { |
||||
if (!ok) {return;} |
||||
svgCanvas.clear(); |
||||
svgCanvas.setSvgString(response); |
||||
// updateCanvas();
|
||||
}); |
||||
closeBrowser(); |
||||
break; |
||||
} |
||||
}, true); |
||||
|
||||
function toggleMulti(show) { |
||||
|
||||
$('#lib_framewrap, #imglib_opts').css({right: (show ? 200 : 10)}); |
||||
if (!preview) { |
||||
preview = $('<div id=imglib_preview>').css({ |
||||
position: 'absolute', |
||||
top: 45, |
||||
right: 10, |
||||
width: 180, |
||||
bottom: 45, |
||||
background: '#fff', |
||||
overflow: 'auto' |
||||
}).insertAfter('#lib_framewrap'); |
||||
|
||||
submit = $('<button disabled>Import selected</button>') |
||||
.appendTo('#imgbrowse') |
||||
.on("click touchend", function() { |
||||
$.each(multi_arr, function(i) { |
||||
var type = this[0]; |
||||
var data = this[1]; |
||||
if (type == 'svg') { |
||||
svgCanvas.importSvgString(data); |
||||
} else { |
||||
importImage(data); |
||||
} |
||||
svgCanvas.moveSelectedElements(i*20, i*20, false); |
||||
}); |
||||
preview.empty(); |
||||
multi_arr = []; |
||||
$('#imgbrowse_holder').hide(); |
||||
}).css({ |
||||
position: 'absolute', |
||||
bottom: 10, |
||||
right: -10 |
||||
}); |
||||
|
||||
} |
||||
|
||||
preview.toggle(show); |
||||
submit.toggle(show); |
||||
} |
||||
|
||||
function showBrowser() { |
||||
|
||||
var browser = $('#imgbrowse'); |
||||
if (!browser.length) { |
||||
$('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>\ |
||||
</div></div>').insertAfter('#svg_docprops'); |
||||
browser = $('#imgbrowse'); |
||||
|
||||
var all_libs = uiStrings.imagelib.select_lib; |
||||
|
||||
var lib_opts = $('<ul id=imglib_opts>').appendTo(browser); |
||||
var frame = $('<iframe/>').prependTo(browser).hide().wrap('<div id=lib_framewrap>'); |
||||
|
||||
var header = $('<h1>').prependTo(browser).text(all_libs).css({ |
||||
position: 'absolute', |
||||
top: 0, |
||||
left: 0, |
||||
width: '100%' |
||||
}); |
||||
|
||||
var cancel = $('<button>' + uiStrings.common.cancel + '</button>') |
||||
.appendTo(browser) |
||||
.on("click touchend", function() { |
||||
$('#imgbrowse_holder').hide(); |
||||
}).css({ |
||||
position: 'absolute', |
||||
top: 5, |
||||
right: -10 |
||||
}); |
||||
|
||||
var leftBlock = $('<span>').css({position:'absolute',top:5,left:10}).appendTo(browser); |
||||
|
||||
var back = $('<button hidden>' + uiStrings.imagelib.show_list + '</button>') |
||||
.appendTo(leftBlock) |
||||
.on("click touchend", function() { |
||||
frame.attr('src', 'about:blank').hide(); |
||||
lib_opts.show(); |
||||
header.text(all_libs); |
||||
back.hide(); |
||||
}).css({ |
||||
'margin-right': 5 |
||||
}).hide(); |
||||
|
||||
var type = $('<select><option value=s>' +
|
||||
uiStrings.imagelib.import_single + '</option><option value=m>' + |
||||
uiStrings.imagelib.import_multi + '</option><option value=o>' + |
||||
uiStrings.imagelib.open + '</option></select>').appendTo(leftBlock).change(function() { |
||||
mode = $(this).val(); |
||||
switch (mode) { |
||||
case 's': |
||||
case 'o': |
||||
toggleMulti(false); |
||||
break; |
||||
|
||||
case 'm': |
||||
// Import multiple
|
||||
toggleMulti(true); |
||||
break; |
||||
} |
||||
}).css({ |
||||
'margin-top': 10 |
||||
}); |
||||
|
||||
cancel.prepend($.getSvgIcon('cancel', true)); |
||||
back.prepend($.getSvgIcon('tool_imagelib', true)); |
||||
|
||||
$.each(img_libs, function(i, opts) { |
||||
$('<li>') |
||||
.appendTo(lib_opts) |
||||
.text(opts.name) |
||||
.on("click touchend", function() { |
||||
frame.attr('src', opts.url).show(); |
||||
header.text(opts.name); |
||||
lib_opts.hide(); |
||||
back.show(); |
||||
}).append('<span>' + opts.description + '</span>'); |
||||
}); |
||||
|
||||
} else { |
||||
$('#imgbrowse_holder').show(); |
||||
} |
||||
} |
||||
|
||||
return { |
||||
svgicons: svgEditor.curConfig.extPath + "ext-imagelib.xml", |
||||
buttons: [{ |
||||
id: "tool_imagelib", |
||||
type: "app_menu", // _flyout
|
||||
position: 4, |
||||
title: "Image library", |
||||
events: { |
||||
"mouseup": showBrowser |
||||
} |
||||
}], |
||||
callback: function() { |
||||
|
||||
$('<style>').text('\ |
||||
#imgbrowse_holder {\ |
||||
position: absolute;\ |
||||
top: 0;\ |
||||
left: 0;\ |
||||
width: 100%;\ |
||||
height: 100%;\ |
||||
background-color: rgba(0, 0, 0, .5);\ |
||||
z-index: 5;\ |
||||
}\ |
||||
\ |
||||
#imgbrowse {\ |
||||
position: absolute;\ |
||||
top: 25px;\ |
||||
left: 25px;\ |
||||
right: 25px;\ |
||||
bottom: 25px;\ |
||||
min-width: 300px;\ |
||||
min-height: 200px;\ |
||||
background: #B0B0B0;\ |
||||
border: 1px outset #777;\ |
||||
}\ |
||||
#imgbrowse h1 {\ |
||||
font-size: 20px;\ |
||||
margin: .4em;\ |
||||
text-align: center;\ |
||||
}\ |
||||
#lib_framewrap,\ |
||||
#imgbrowse > ul {\ |
||||
position: absolute;\ |
||||
top: 45px;\ |
||||
left: 10px;\ |
||||
right: 10px;\ |
||||
bottom: 10px;\ |
||||
background: white;\ |
||||
margin: 0;\ |
||||
padding: 0;\ |
||||
}\ |
||||
#imgbrowse > ul {\ |
||||
overflow: auto;\ |
||||
}\ |
||||
#imgbrowse > div {\ |
||||
border: 1px solid #666;\ |
||||
}\ |
||||
#imglib_preview > div {\ |
||||
padding: 5px;\ |
||||
font-size: 12px;\ |
||||
}\ |
||||
#imglib_preview img {\ |
||||
display: block;\ |
||||
margin: 0 auto;\ |
||||
max-height: 100px;\ |
||||
}\ |
||||
#imgbrowse li {\ |
||||
list-style: none;\ |
||||
padding: .5em;\ |
||||
background: #E8E8E8;\ |
||||
border-bottom: 1px solid #B0B0B0;\ |
||||
line-height: 1.2em;\ |
||||
font-style: sans-serif;\ |
||||
}\ |
||||
#imgbrowse li > span {\ |
||||
color: #666;\ |
||||
font-size: 15px;\ |
||||
display: block;\ |
||||
}\ |
||||
#imgbrowse li:hover {\ |
||||
background: #FFC;\ |
||||
cursor: pointer;\ |
||||
}\ |
||||
#imgbrowse iframe {\ |
||||
width: 100%;\ |
||||
height: 100%;\ |
||||
border: 0;\ |
||||
}\ |
||||
').appendTo('head'); |
||||
} |
||||
}; |
||||
}); |
||||
|
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,579 @@
|
||||
/*globals svgEditor, svgCanvas, $*/ |
||||
/*jslint vars: true, eqeq: true, todo: true */ |
||||
/* |
||||
* ext-markers.js |
||||
* |
||||
* Licensed under the Apache License, Version 2 |
||||
* |
||||
* Copyright(c) 2010 Will Schleter
|
||||
* based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
* This extension provides for the addition of markers to the either end |
||||
* or the middle of a line, polyline, path, polygon.
|
||||
*
|
||||
* Markers may be either a graphic or arbitary text |
||||
*
|
||||
* to simplify the coding and make the implementation as robust as possible, |
||||
* markers are not shared - every object has its own set of markers. |
||||
* this relationship is maintained by a naming convention between the |
||||
* ids of the markers and the ids of the object |
||||
*
|
||||
* The following restrictions exist for simplicty of use and programming |
||||
* objects and their markers to have the same color |
||||
* marker size is fixed |
||||
* text marker font, size, and attributes are fixed |
||||
* an application specific attribute - se_type - is added to each marker element |
||||
* to store the type of marker |
||||
* |
||||
* TODO: |
||||
* remove some of the restrictions above |
||||
* add option for keeping text aligned to horizontal |
||||
* add support for dimension extension lines |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("Markers", function(S) { |
||||
var // svgcontent = S.svgcontent,
|
||||
addElem = S.addSvgElementFromJson, |
||||
selElems; |
||||
|
||||
var mtypes = ['start','mid','end']; |
||||
|
||||
var marker_prefix = 'se_marker_'; |
||||
var id_prefix = 'mkr_'; |
||||
|
||||
// note - to add additional marker types add them below with a unique id
|
||||
// and add the associated icon(s) to marker-icons.svg
|
||||
// the geometry is normallized to a 100x100 box with the origin at lower left
|
||||
// Safari did not like negative values for low left of viewBox
|
||||
// remember that the coordinate system has +y downward
|
||||
var marker_types = { |
||||
nomarker: {},
|
||||
leftarrow:
|
||||
{element:'path', attr:{d:'M0,50 L100,90 L70,50 L100,10 Z'}}, |
||||
rightarrow: |
||||
{element:'path', attr:{d:'M100,50 L0,90 L30,50 L0,10 Z'}}, |
||||
textmarker: |
||||
{element:'text', attr: {x:0, y:0,'stroke-width':0,'stroke':'none','font-size':75,'font-family':'serif','text-anchor':'left', |
||||
'xml:space': 'preserve'}}, |
||||
forwardslash: |
||||
{element:'path', attr:{d:'M30,100 L70,0'}}, |
||||
reverseslash: |
||||
{element:'path', attr:{d:'M30,0 L70,100'}}, |
||||
verticalslash: |
||||
{element:'path', attr:{d:'M50,0 L50,100'}}, |
||||
box: |
||||
{element:'path', attr:{d:'M20,20 L20,80 L80,80 L80,20 Z'}}, |
||||
star: |
||||
{element:'path', attr:{d:'M10,30 L90,30 L20,90 L50,10 L80,90 Z'}}, |
||||
xmark: |
||||
{element:'path', attr:{d:'M20,80 L80,20 M80,80 L20,20'}}, |
||||
triangle: |
||||
{element:'path', attr:{d:'M10,80 L50,20 L80,80 Z'}}, |
||||
mcircle: |
||||
{element:'circle', attr:{r:30, cx:50, cy:50}}
|
||||
}; |
||||
|
||||
|
||||
var lang_list = { |
||||
"en":[ |
||||
{id: "start_marker_list", title: "Select start marker type" }, |
||||
{id: "mid_marker_list", title: "Select mid marker type" }, |
||||
{id: "end_marker_list", title: "Select end marker type" }, |
||||
{id: "nomarker", title: "No Marker" }, |
||||
{id: "leftarrow", title: "Left Arrow" }, |
||||
{id: "rightarrow", title: "Right Arrow" }, |
||||
{id: "textmarker", title: "Text Marker" }, |
||||
{id: "forwardslash", title: "Forward Slash" }, |
||||
{id: "reverseslash", title: "Reverse Slash" }, |
||||
{id: "verticalslash", title: "Vertical Slash" }, |
||||
{id: "box", title: "Box" }, |
||||
{id: "star", title: "Star" }, |
||||
{id: "xmark", title: "X" }, |
||||
{id: "triangle", title: "Triangle" }, |
||||
{id: "mcircle", title: "Circle" }, |
||||
{id: "leftarrow_o", title: "Open Left Arrow" }, |
||||
{id: "rightarrow_o", title: "Open Right Arrow" }, |
||||
{id: "box_o", title: "Open Box" }, |
||||
{id: "star_o", title: "Open Star" }, |
||||
{id: "triangle_o", title: "Open Triangle" }, |
||||
{id: "mcircle_o", title: "Open Circle" } |
||||
] |
||||
}; |
||||
|
||||
|
||||
// duplicate shapes to support unfilled (open) marker types with an _o suffix
|
||||
$.each(['leftarrow','rightarrow','box','star','mcircle','triangle'],function(i,v) { |
||||
marker_types[v+'_o'] = marker_types[v]; |
||||
}); |
||||
|
||||
// elem = a graphic element will have an attribute like marker-start
|
||||
// attr - marker-start, marker-mid, or marker-end
|
||||
// returns the marker element that is linked to the graphic element
|
||||
function getLinked(elem, attr) { |
||||
var str = elem.getAttribute(attr); |
||||
if(!str) {return null;} |
||||
var m = str.match(/\(\#(.*)\)/); |
||||
if(!m || m.length !== 2) { |
||||
return null; |
||||
} |
||||
return S.getElem(m[1]); |
||||
} |
||||
|
||||
function setIcon(pos,id) { |
||||
if (id.substr(0,1) !== '\\') {id = '\\textmarker';} |
||||
var ci = '#'+id_prefix+pos+'_'+id.substr(1); |
||||
svgEditor.setIcon('#cur_' + pos +'_marker_list', $(ci).children()); |
||||
$(ci).addClass('current').siblings().removeClass('current'); |
||||
} |
||||
|
||||
// toggles context tool panel off/on
|
||||
//sets the controls with the selected element's settings
|
||||
function showPanel(on) { |
||||
$('#marker_panel').toggle(on); |
||||
|
||||
if(on) { |
||||
var el = selElems[0]; |
||||
var val; |
||||
var ci; |
||||
|
||||
$.each(mtypes, function(i, pos) { |
||||
var m = getLinked(el, "marker-" + pos); |
||||
var txtbox = $('#' + pos + '_marker'); |
||||
if (!m) { |
||||
val = '\\nomarker'; |
||||
ci = val; |
||||
txtbox.hide(); // hide text box
|
||||
} else { |
||||
if (!m.attributes.se_type) {return;} // not created by this extension
|
||||
val = '\\' + m.attributes.se_type.textContent; |
||||
ci = val; |
||||
if (val === '\\textmarker') { |
||||
val = m.lastChild.textContent; |
||||
//txtbox.show(); // show text box
|
||||
} else { |
||||
txtbox.hide(); // hide text box
|
||||
} |
||||
} |
||||
txtbox.val(val);
|
||||
setIcon(pos,ci); |
||||
}); |
||||
} |
||||
}
|
||||
|
||||
function addMarker(id, val) { |
||||
var txt_box_bg = '#ffffff'; |
||||
var txt_box_border = 'none'; |
||||
var txt_box_stroke_width = 0; |
||||
|
||||
var marker = S.getElem(id); |
||||
|
||||
if (marker) {return;} |
||||
|
||||
if (val == '' || val == '\\nomarker') {return;} |
||||
|
||||
var el = selElems[0];
|
||||
var color = el.getAttribute('stroke'); |
||||
//NOTE: Safari didn't like a negative value in viewBox
|
||||
//so we use a standardized 0 0 100 100
|
||||
//with 50 50 being mapped to the marker position
|
||||
var refX = 50; |
||||
var refY = 50; |
||||
var viewBox = "0 0 100 100"; |
||||
var markerWidth = 5; |
||||
var markerHeight = 5; |
||||
var strokeWidth = 10; |
||||
var se_type; |
||||
if (val.substr(0,1) === '\\') {se_type = val.substr(1);} |
||||
else {se_type = 'textmarker';} |
||||
|
||||
if (!marker_types[se_type]) {return;} // an unknown type!
|
||||
|
||||
// create a generic marker
|
||||
marker = addElem({ |
||||
"element": "marker", |
||||
"attr": { |
||||
"id": id, |
||||
"markerUnits": "strokeWidth", |
||||
"orient": "auto", |
||||
"style": "pointer-events:none", |
||||
"se_type": se_type |
||||
} |
||||
}); |
||||
|
||||
if (se_type != 'textmarker') { |
||||
var mel = addElem(marker_types[se_type]); |
||||
var fillcolor = color; |
||||
if (se_type.substr(-2) === '_o') {fillcolor = 'none';} |
||||
mel.setAttribute('fill', fillcolor); |
||||
mel.setAttribute('stroke', color); |
||||
mel.setAttribute('stroke-width', strokeWidth); |
||||
marker.appendChild(mel); |
||||
} else { |
||||
var text = addElem(marker_types[se_type]); |
||||
// have to add text to get bounding box
|
||||
text.textContent = val; |
||||
var tb = text.getBBox(); |
||||
//alert( tb.x + " " + tb.y + " " + tb.width + " " + tb.height);
|
||||
var pad = 1; |
||||
var bb = tb; |
||||
bb.x = 0; |
||||
bb.y = 0; |
||||
bb.width += pad*2; |
||||
bb.height += pad*2; |
||||
// shift text according to its size
|
||||
text.setAttribute('x', pad); |
||||
text.setAttribute('y', bb.height - pad - tb.height/4); // kludge?
|
||||
text.setAttribute('fill',color); |
||||
refX = bb.width/2 + pad; |
||||
refY = bb.height/2 + pad; |
||||
viewBox = bb.x + " " + bb.y + " " + bb.width + " " + bb.height; |
||||
markerWidth = bb.width/10; |
||||
markerHeight = bb.height/10; |
||||
|
||||
var box = addElem({ |
||||
"element": "rect", |
||||
"attr": { |
||||
"x": bb.x, |
||||
"y": bb.y, |
||||
"width": bb.width, |
||||
"height": bb.height, |
||||
"fill": txt_box_bg, |
||||
"stroke": txt_box_border, |
||||
"stroke-width": txt_box_stroke_width |
||||
} |
||||
}); |
||||
marker.setAttribute("orient",0); |
||||
marker.appendChild(box); |
||||
marker.appendChild(text); |
||||
}
|
||||
|
||||
marker.setAttribute("viewBox",viewBox); |
||||
marker.setAttribute("markerWidth", markerWidth); |
||||
marker.setAttribute("markerHeight", markerHeight); |
||||
marker.setAttribute("refX", refX); |
||||
marker.setAttribute("refY", refY); |
||||
S.findDefs().appendChild(marker); |
||||
|
||||
return marker; |
||||
} |
||||
|
||||
function convertline(elem) { |
||||
// this routine came from the connectors extension
|
||||
// it is needed because midpoint markers don't work with line elements
|
||||
if (!(elem.tagName === 'line')) {return elem;} |
||||
|
||||
// Convert to polyline to accept mid-arrow
|
||||
|
||||
var x1 = Number(elem.getAttribute('x1')); |
||||
var x2 = Number(elem.getAttribute('x2')); |
||||
var y1 = Number(elem.getAttribute('y1')); |
||||
var y2 = Number(elem.getAttribute('y2')); |
||||
var id = elem.id; |
||||
|
||||
var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' '); |
||||
var pline = addElem({ |
||||
"element": "polyline", |
||||
"attr": { |
||||
"points": (x1+','+y1+ mid_pt +x2+','+y2), |
||||
"stroke": elem.getAttribute('stroke'), |
||||
"stroke-width": elem.getAttribute('stroke-width'), |
||||
"fill": "none", |
||||
"opacity": elem.getAttribute('opacity') || 1 |
||||
} |
||||
}); |
||||
$.each(mtypes, function(i, pos) { // get any existing marker definitions
|
||||
var nam = 'marker-'+pos; |
||||
var m = elem.getAttribute(nam); |
||||
if (m) {pline.setAttribute(nam,elem.getAttribute(nam));} |
||||
}); |
||||
|
||||
var batchCmd = new S.BatchCommand(); |
||||
batchCmd.addSubCommand(new S.RemoveElementCommand(elem, elem.parentNode)); |
||||
batchCmd.addSubCommand(new S.InsertElementCommand(pline)); |
||||
|
||||
$(elem).after(pline).remove(); |
||||
svgCanvas.clearSelection(); |
||||
pline.id = id; |
||||
svgCanvas.addToSelection([pline]); |
||||
S.addCommandToHistory(batchCmd); |
||||
return pline; |
||||
} |
||||
|
||||
function setMarker() { |
||||
var poslist={'start_marker':'start','mid_marker':'mid','end_marker':'end'}; |
||||
var pos = poslist[this.id]; |
||||
var marker_name = 'marker-'+pos; |
||||
var val = this.value; |
||||
var el = selElems[0]; |
||||
var marker = getLinked(el, marker_name); |
||||
if (marker) {$(marker).remove();} |
||||
el.removeAttribute(marker_name); |
||||
if (val == '') {val = '\\nomarker';} |
||||
if (val == '\\nomarker') { |
||||
setIcon(pos,val); |
||||
S.call("changed", selElems); |
||||
return; |
||||
} |
||||
// Set marker on element
|
||||
var id = marker_prefix + pos + '_' + el.id; |
||||
addMarker(id, val); |
||||
svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")"); |
||||
if (el.tagName === 'line' && pos == 'mid') {el = convertline(el);} |
||||
S.call("changed", selElems); |
||||
setIcon(pos,val); |
||||
} |
||||
|
||||
// called when the main system modifies an object
|
||||
// this routine changes the associated markers to be the same color
|
||||
function colorChanged(elem) { |
||||
var color = elem.getAttribute('stroke'); |
||||
|
||||
$.each(mtypes, function(i, pos) { |
||||
var marker = getLinked(elem, 'marker-'+pos); |
||||
if (!marker) {return;} |
||||
if (!marker.attributes.se_type) {return;} // not created by this extension
|
||||
var ch = marker.lastElementChild; |
||||
if (!ch) {return;} |
||||
var curfill = ch.getAttribute('fill'); |
||||
var curstroke = ch.getAttribute('stroke'); |
||||
if (curfill && curfill != 'none') {ch.setAttribute('fill', color);} |
||||
if (curstroke && curstroke != 'none') {ch.setAttribute('stroke', color);} |
||||
}); |
||||
} |
||||
|
||||
// called when the main system creates or modifies an object
|
||||
// primary purpose is create new markers for cloned objects
|
||||
function updateReferences(el) { |
||||
$.each(mtypes, function (i, pos) { |
||||
var id = marker_prefix + pos + '_' + el.id; |
||||
var marker_name = 'marker-'+pos; |
||||
var marker = getLinked(el, marker_name); |
||||
if (!marker || !marker.attributes.se_type) {return;} // not created by this extension
|
||||
var url = el.getAttribute(marker_name); |
||||
if (url) { |
||||
var len = el.id.length; |
||||
var linkid = url.substr(-len-1, len); |
||||
if (el.id != linkid) { |
||||
var val = $('#'+pos + '_marker').attr('value'); |
||||
addMarker(id, val); |
||||
svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")"); |
||||
if (el.tagName === 'line' && pos == 'mid') {el = convertline(el);} |
||||
S.call("changed", selElems); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// simulate a change event a text box that stores the current element's marker type
|
||||
function triggerTextEntry(pos, val) { |
||||
$('#'+pos+'_marker').val(val); |
||||
$('#'+pos+'_marker').change(); |
||||
// var txtbox = $('#'+pos+'_marker');
|
||||
// if (val.substr(0,1)=='\\') {txtbox.hide();}
|
||||
// else {txtbox.show();}
|
||||
} |
||||
|
||||
function showTextPrompt(pos) { |
||||
var def = $('#'+pos+'_marker').val(); |
||||
if (def.substr(0,1) === '\\') {def = '';} |
||||
$.prompt('Enter text for ' + pos + ' marker', def , function(txt) { |
||||
if (txt) {triggerTextEntry(pos, txt);} |
||||
}); |
||||
} |
||||
|
||||
/* |
||||
function setMarkerSet(obj) { |
||||
var parts = this.id.split('_'); |
||||
var set = parts[2]; |
||||
switch (set) { |
||||
case 'off': |
||||
triggerTextEntry('start','\\nomarker'); |
||||
triggerTextEntry('mid','\\nomarker'); |
||||
triggerTextEntry('end','\\nomarker'); |
||||
break; |
||||
case 'dimension': |
||||
triggerTextEntry('start','\\leftarrow'); |
||||
triggerTextEntry('end','\\rightarrow'); |
||||
showTextPrompt('mid'); |
||||
break; |
||||
case 'label': |
||||
triggerTextEntry('mid','\\nomarker'); |
||||
triggerTextEntry('end','\\rightarrow'); |
||||
showTextPrompt('start'); |
||||
break; |
||||
} |
||||
} |
||||
*/ |
||||
// callback function for a toolbar button click
|
||||
function setArrowFromButton(obj) { |
||||
|
||||
var parts = this.id.split('_'); |
||||
var pos = parts[1]; |
||||
var val = parts[2]; |
||||
if (parts[3]) { val += '_' + parts[3];} |
||||
|
||||
if (val != 'textmarker') { |
||||
triggerTextEntry(pos, '\\'+val); |
||||
} else { |
||||
showTextPrompt(pos); |
||||
} |
||||
} |
||||
|
||||
function getTitle(lang, id) { |
||||
var i, list = lang_list[lang]; |
||||
for (i in list) { |
||||
if (list.hasOwnProperty(i) && list[i].id == id) { |
||||
return list[i].title; |
||||
} |
||||
} |
||||
return id; |
||||
} |
||||
|
||||
|
||||
// build the toolbar button array from the marker definitions
|
||||
// TODO: need to incorporate language specific titles
|
||||
function buildButtonList() { |
||||
var buttons=[]; |
||||
// var i = 0;
|
||||
/* |
||||
buttons.push({ |
||||
id:id_prefix + 'markers_off', |
||||
title:'Turn off all markers', |
||||
type:'context', |
||||
events: { 'click': setMarkerSet }, |
||||
panel: 'marker_panel' |
||||
}); |
||||
buttons.push({ |
||||
id:id_prefix + 'markers_dimension', |
||||
title:'Dimension', |
||||
type:'context', |
||||
events: { 'click': setMarkerSet }, |
||||
panel: 'marker_panel' |
||||
}); |
||||
buttons.push({ |
||||
id:id_prefix + 'markers_label', |
||||
title:'Label', |
||||
type:'context', |
||||
events: { 'click': setMarkerSet }, |
||||
panel: 'marker_panel' |
||||
}); |
||||
*/ |
||||
$.each(mtypes, function (k, pos) { |
||||
var listname = pos + "_marker_list"; |
||||
var def = true; |
||||
$.each(marker_types, function (id, v) { |
||||
var title = getTitle('en', id); |
||||
buttons.push({ |
||||
id: id_prefix + pos + '_' + id, |
||||
svgicon: id, |
||||
title: title, |
||||
type: 'context', |
||||
events: {'click': setArrowFromButton}, |
||||
panel: 'marker_panel', |
||||
list: listname, |
||||
isDefault: def |
||||
}); |
||||
def = false; |
||||
}); |
||||
}); |
||||
return buttons; |
||||
} |
||||
|
||||
return { |
||||
name: "Markers", |
||||
svgicons: svgEditor.curConfig.extPath + "markers-icons.xml", |
||||
buttons: buildButtonList(), |
||||
context_tools: [ |
||||
{ |
||||
type: "input", |
||||
panel: "marker_panel", |
||||
title: "Start marker", |
||||
id: "start_marker", |
||||
label: "s", |
||||
size: 3, |
||||
events: { change: setMarker } |
||||
},{ |
||||
type: "button-select", |
||||
panel: "marker_panel", |
||||
title: getTitle('en', 'start_marker_list'), |
||||
id: "start_marker_list", |
||||
colnum: 3, |
||||
events: { change: setArrowFromButton } |
||||
},{ |
||||
type: "input", |
||||
panel: "marker_panel", |
||||
title: "Middle marker", |
||||
id: "mid_marker", |
||||
label: "m", |
||||
defval: "", |
||||
size: 3, |
||||
events: { change: setMarker } |
||||
},{ |
||||
type: "button-select", |
||||
panel: "marker_panel", |
||||
title: getTitle('en', 'mid_marker_list'), |
||||
id: "mid_marker_list", |
||||
colnum: 3, |
||||
events: { change: setArrowFromButton } |
||||
},{ |
||||
type: "input", |
||||
panel: "marker_panel", |
||||
title: "End marker", |
||||
id: "end_marker", |
||||
label: "e", |
||||
size: 3, |
||||
events: { change: setMarker } |
||||
},{ |
||||
type: "button-select", |
||||
panel: "marker_panel", |
||||
title: getTitle('en', 'end_marker_list'), |
||||
id: "end_marker_list", |
||||
colnum: 3, |
||||
events: { change: setArrowFromButton } |
||||
} ], |
||||
callback: function() { |
||||
$('#marker_panel').addClass('toolset').hide(); |
||||
|
||||
}, |
||||
addLangData: function(lang) { |
||||
return { data: lang_list[lang] }; |
||||
}, |
||||
|
||||
selectedChanged: function(opts) { |
||||
// Use this to update the current selected elements
|
||||
//console.log('selectChanged',opts);
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
var marker_elems = ['line','path','polyline','polygon']; |
||||
|
||||
while(i--) { |
||||
var elem = selElems[i]; |
||||
if(elem && $.inArray(elem.tagName, marker_elems) !== -1) { |
||||
if (opts.selectedElement && !opts.multiselected) { |
||||
showPanel(true); |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
}, |
||||
|
||||
elementChanged: function(opts) {
|
||||
//console.log('elementChanged',opts);
|
||||
var elem = opts.elems[0]; |
||||
if (elem && ( |
||||
elem.getAttribute("marker-start") || |
||||
elem.getAttribute("marker-mid") || |
||||
elem.getAttribute("marker-end") |
||||
)) { |
||||
colorChanged(elem); |
||||
updateReferences(elem); |
||||
} |
||||
// changing_flag = false; // Not apparently in use
|
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,273 @@
|
||||
/*globals MathJax, svgEditor, svgCanvas, $*/ |
||||
/*jslint es5: true, todo: true, vars: true*/ |
||||
/* |
||||
* ext-mathjax.js |
||||
* |
||||
* Licensed under the Apache License |
||||
* |
||||
* Copyright(c) 2013 Jo Segaert |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("mathjax", function() {'use strict'; |
||||
// Configuration of the MathJax extention.
|
||||
|
||||
// This will be added to the head tag before MathJax is loaded.
|
||||
var /*mathjaxConfiguration = '<script type="text/x-mathjax-config">\ |
||||
MathJax.Hub.Config({\ |
||||
extensions: ["tex2jax.js"],\ |
||||
jax: ["input/TeX","output/SVG"],\ |
||||
showProcessingMessages: true,\ |
||||
showMathMenu: false,\ |
||||
showMathMenuMSIE: false,\ |
||||
errorSettings: {\ |
||||
message: ["[Math Processing Error]"],\ |
||||
style: {color: "#CC0000", "font-style":"italic"}\ |
||||
},\ |
||||
elements: [],\ |
||||
tex2jax: {\ |
||||
ignoreClass: "tex2jax_ignore2", processClass: "tex2jax_process2",\ |
||||
},\ |
||||
TeX: {\ |
||||
extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"]\ |
||||
},\ |
||||
"SVG": {\ |
||||
}\ |
||||
});\ |
||||
</script>',*/ |
||||
// mathjaxSrc = 'http://cdn.mathjax.org/mathjax/latest/MathJax.js',
|
||||
mathjaxSrcSecure = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_SVG.js', |
||||
math, |
||||
locationX, |
||||
locationY, |
||||
mathjaxLoaded = false, |
||||
uiStrings = svgEditor.uiStrings; |
||||
|
||||
// TODO: Implement language support. Move these uiStrings to the locale files and the code to the langReady callback.
|
||||
$.extend(uiStrings, { |
||||
mathjax: { |
||||
embed_svg: 'Save as mathematics', |
||||
embed_mathml: 'Save as figure', |
||||
svg_save_warning: 'The math will be transformed into a figure is manipulatable like everything else. You will not be able to manipulate the TeX-code anymore. ', |
||||
mathml_save_warning: 'Advised. The math will be saved as a figure.', |
||||
title: 'Mathematics code editor' |
||||
} |
||||
}); |
||||
|
||||
|
||||
function saveMath() { |
||||
var code = $('#mathjax_code_textarea').val(); |
||||
// displaystyle to force MathJax NOT to use the inline style. Because it is
|
||||
// less fancy!
|
||||
MathJax.Hub.queue.Push(['Text', math, '\\displaystyle{' + code + '}']); |
||||
|
||||
/* |
||||
* The MathJax library doesn't want to bloat your webpage so it creates
|
||||
* every symbol (glymph) you need only once. These are saved in a <svg> on
|
||||
* the top of your html document, just under the body tag. Each glymph has |
||||
* its unique id and is saved as a <path> in the <defs> tag of the <svg> |
||||
*
|
||||
* Then when the symbols are needed in the rest of your html document they |
||||
* are refferd to by a <use> tag. |
||||
* Because of bug 1076 we can't just grab the defs tag on the top and add it
|
||||
* to your formula's <svg> and copy the lot. So we have to replace each
|
||||
* <use> tag by it's <path>. |
||||
*/ |
||||
MathJax.Hub.queue.Push( |
||||
function() { |
||||
var mathjaxMath = $('.MathJax_SVG'); |
||||
var svg = $(mathjaxMath.html()); |
||||
svg.find('use').each(function() { |
||||
var x, y, id, transform; |
||||
|
||||
// TODO: find a less pragmatic and more elegant solution to this.
|
||||
if ($(this).attr('href')) { |
||||
id = $(this).attr('href').slice(1); // Works in Chrome.
|
||||
} else { |
||||
id = $(this).attr('xlink:href').slice(1); // Works in Firefox.
|
||||
} |
||||
|
||||
var glymph = $('#' + id).clone().removeAttr('id'); |
||||
x = $(this).attr('x'); |
||||
y = $(this).attr('y'); |
||||
transform = $(this).attr('transform'); |
||||
if (transform && ( x || y )) { |
||||
glymph.attr('transform', transform + ' translate(' + x + ',' + y + ')'); |
||||
} |
||||
else if (transform) { |
||||
glymph.attr('transform', transform); |
||||
} |
||||
else if (x || y) { |
||||
glymph.attr('transform', 'translate(' + x + ',' + y + ')'); |
||||
} |
||||
$(this).replaceWith(glymph); |
||||
}); |
||||
// Remove the style tag because it interferes with SVG-Edit.
|
||||
svg.removeAttr('style'); |
||||
svg.attr('xmlns', 'http://www.w3.org/2000/svg'); |
||||
svgCanvas.importSvgString($('<div>').append(svg.clone()).html(), true); |
||||
svgCanvas.ungroupSelectedElement(); |
||||
// TODO: To undo the adding of the Formula you now have to undo twice.
|
||||
// This should only be once!
|
||||
svgCanvas.moveSelectedElements(locationX, locationY, true); |
||||
} |
||||
); |
||||
} |
||||
|
||||
return { |
||||
name: "MatJax", |
||||
svgicons: svgEditor.curConfig.extPath + "mathjax-icons.xml", |
||||
buttons: [{ |
||||
id: "tool_mathjax", |
||||
type: "mode", |
||||
title: "Add Mathematics", |
||||
events: { |
||||
'click': function() { |
||||
// Only load Mathjax when needed, we don't want to strain Svg-Edit any more.
|
||||
// From this point on it is very probable that it will be needed, so load it.
|
||||
if (mathjaxLoaded === false) { |
||||
|
||||
$('<div id="mathjax">\ |
||||
<!-- Here is where MathJax creates the math -->\ |
||||
<div id="mathjax_creator" class="tex2jax_process" style="display:none">\ |
||||
$${}$$\ |
||||
</div>\ |
||||
<div id="mathjax_overlay"></div>\ |
||||
<div id="mathjax_container">\ |
||||
<div id="tool_mathjax_back" class="toolbar_button">\ |
||||
<button id="tool_mathjax_save">OK</button>\ |
||||
<button id="tool_mathjax_cancel">Cancel</button>\ |
||||
</div>\ |
||||
<fieldset>\ |
||||
<legend id="mathjax_legend">Mathematics Editor</legend>\ |
||||
<label>\ |
||||
<span id="mathjax_explication">Please type your mathematics in \ |
||||
<a href="http://en.wikipedia.org/wiki/Help:Displaying_a_formula" target="_blank">TeX</a> code.</span></label>\ |
||||
<textarea id="mathjax_code_textarea" spellcheck="false"></textarea>\ |
||||
</fieldset>\ |
||||
</div>\ |
||||
</div>' |
||||
).insertAfter('#svg_prefs').hide(); |
||||
|
||||
// Make the MathEditor draggable.
|
||||
$('#mathjax_container').draggable({cancel: 'button,fieldset', containment: 'window'}); |
||||
|
||||
// Add functionality and picture to cancel button.
|
||||
$('#tool_mathjax_cancel').prepend($.getSvgIcon('cancel', true)) |
||||
.on("click touched", function() { |
||||
$('#mathjax').hide(); |
||||
}); |
||||
|
||||
// Add functionality and picture to the save button.
|
||||
$('#tool_mathjax_save').prepend($.getSvgIcon('ok', true)) |
||||
.on("click touched", function() { |
||||
saveMath(); |
||||
$('#mathjax').hide(); |
||||
}); |
||||
|
||||
// MathJax preprocessing has to ignore most of the page.
|
||||
$('body').addClass('tex2jax_ignore'); |
||||
|
||||
// Now get (and run) the MathJax Library.
|
||||
$.getScript(mathjaxSrcSecure) |
||||
.done(function(script, textStatus) { |
||||
|
||||
// When MathJax is loaded get the div where the math will be rendered.
|
||||
MathJax.Hub.queue.Push(function() { |
||||
math = MathJax.Hub.getAllJax('#mathjax_creator')[0]; |
||||
console.log(math); |
||||
mathjaxLoaded = true; |
||||
console.log('MathJax Loaded'); |
||||
}); |
||||
|
||||
}) |
||||
// If it fails.
|
||||
.fail(function() { |
||||
console.log("Failed loadeing MathJax."); |
||||
$.alert("Failed loading MathJax. You will not be able to change the mathematics."); |
||||
}); |
||||
} |
||||
// Set the mode.
|
||||
svgCanvas.setMode("mathjax"); |
||||
} |
||||
} |
||||
}], |
||||
|
||||
mouseDown: function() { |
||||
if (svgCanvas.getMode() === "mathjax") { |
||||
return {started: true}; |
||||
} |
||||
}, |
||||
mouseUp: function(opts) { |
||||
if (svgCanvas.getMode() === "mathjax") { |
||||
// Get the coordinates from your mouse.
|
||||
var zoom = svgCanvas.getZoom(); |
||||
// Get the actual coordinate by dividing by the zoom value
|
||||
locationX = opts.mouse_x / zoom; |
||||
locationY = opts.mouse_y / zoom; |
||||
|
||||
$('#mathjax').show(); |
||||
return {started: false}; // Otherwise the last selected object dissapears.
|
||||
} |
||||
}, |
||||
callback: function() { |
||||
$('<style>').text('\ |
||||
#mathjax fieldset{\ |
||||
padding: 5px;\ |
||||
margin: 5px;\ |
||||
border: 1px solid #DDD;\ |
||||
}\ |
||||
#mathjax label{\ |
||||
display: block;\ |
||||
margin: .5em;\ |
||||
}\ |
||||
#mathjax legend {\ |
||||
max-width:195px;\ |
||||
}\ |
||||
#mathjax_overlay {\ |
||||
position: absolute;\ |
||||
top: 0;\ |
||||
left: 0;\ |
||||
right: 0;\ |
||||
bottom: 0;\ |
||||
background-color: black;\ |
||||
opacity: 0.6;\ |
||||
z-index: 20000;\ |
||||
}\ |
||||
\ |
||||
#mathjax_container {\ |
||||
position: absolute;\ |
||||
top: 50px;\ |
||||
padding: 10px;\ |
||||
background-color: #B0B0B0;\ |
||||
border: 1px outset #777;\ |
||||
opacity: 1.0;\ |
||||
font-family: Verdana, Helvetica, sans-serif;\ |
||||
font-size: .8em;\ |
||||
z-index: 20001;\ |
||||
}\ |
||||
\ |
||||
#tool_mathjax_back {\ |
||||
margin-left: 1em;\ |
||||
overflow: auto;\ |
||||
}\ |
||||
\ |
||||
#mathjax_legend{\ |
||||
font-weight: bold;\ |
||||
font-size:1.1em;\ |
||||
}\ |
||||
\ |
||||
#mathjax_code_textarea {\\n\ |
||||
margin: 5px .7em;\ |
||||
overflow: hidden;\ |
||||
width: 416px;\ |
||||
display: block;\ |
||||
height: 100px;\ |
||||
}\ |
||||
').appendTo('head'); |
||||
|
||||
// Add the MathJax configuration.
|
||||
//$(mathjaxConfiguration).appendTo('head');
|
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,142 @@
|
||||
/*globals svgEditor, svgedit, $ */ |
||||
/*jslint es5: true, vars: true*/ |
||||
/* |
||||
* ext-overview_window.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2013 James Sacksteder |
||||
* |
||||
*/ |
||||
|
||||
var overviewWindowGlobals = {}; |
||||
svgEditor.addExtension("overview_window", function() { 'use strict'; |
||||
//define and insert the base html element
|
||||
var propsWindowHtml= "\ |
||||
<div id=\"overview_window_content_pane\" style=\" width:100%; word-wrap:break-word; display:inline-block; margin-top:20px;\">\ |
||||
<div id=\"overview_window_content\" style=\"position:relative; left:12px; top:0px;\">\ |
||||
<div style=\"background-color:#A0A0A0; display:inline-block; overflow:visible;\">\ |
||||
<svg id=\"overviewMiniView\" width=\"150\" height=\"100\" x=\"0\" y=\"0\" viewBox=\"0 0 4800 3600\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\ |
||||
<use x=\"0\" y=\"0\" xlink:href=\"#svgroot\"> <\/use>\ |
||||
</svg>\ |
||||
<div id=\"overview_window_view_box\" style=\"min-width:50px; min-height:50px; position:absolute; top:30px; left:30px; z-index:5; background-color:rgba(255,0,102,0.3);\">\ |
||||
<\/div>\ |
||||
<\/div>\ |
||||
<\/div>\ |
||||
<\/div>"; |
||||
$("#sidepanels").append(propsWindowHtml); |
||||
|
||||
//define dynamic animation of the view box.
|
||||
var updateViewBox = function(){ |
||||
var portHeight=parseFloat($("#workarea").css("height")); |
||||
var portWidth=parseFloat($("#workarea").css("width")); |
||||
var portX=$("#workarea").scrollLeft(); |
||||
var portY=$("#workarea").scrollTop(); |
||||
var windowWidth=parseFloat($("#svgcanvas").css("width")); |
||||
var windowHeight=parseFloat($("#svgcanvas").css("height")); |
||||
var overviewWidth=$("#overviewMiniView").attr("width"); |
||||
var overviewHeight=$("#overviewMiniView").attr("height"); |
||||
|
||||
var viewBoxX=portX/windowWidth*overviewWidth; |
||||
var viewBoxY=portY/windowHeight*overviewHeight; |
||||
var viewBoxWidth=portWidth/windowWidth*overviewWidth; |
||||
var viewBoxHeight=portHeight/windowHeight*overviewHeight; |
||||
|
||||
$("#overview_window_view_box").css("min-width",viewBoxWidth+"px"); |
||||
$("#overview_window_view_box").css("min-height",viewBoxHeight+"px"); |
||||
$("#overview_window_view_box").css("top",viewBoxY+"px"); |
||||
$("#overview_window_view_box").css("left",viewBoxX+"px"); |
||||
}; |
||||
$("#workarea").scroll(function(){ |
||||
if(!(overviewWindowGlobals.viewBoxDragging)){ |
||||
updateViewBox(); |
||||
} |
||||
}); |
||||
$("#workarea").resize(updateViewBox); |
||||
updateViewBox(); |
||||
|
||||
//comphensate for changes in zoom and canvas size
|
||||
var updateViewDimensions= function(){ |
||||
var viewWidth=$("#svgroot").attr("width"); |
||||
var viewHeight=$("#svgroot").attr("height"); |
||||
var viewX=640; |
||||
var viewY=480; |
||||
|
||||
if(svgedit.browser.isIE()) |
||||
{ |
||||
//This has only been tested with Firefox 10 and IE 9 (without chrome frame).
|
||||
//I am not sure if if is Firefox or IE that is being non compliant here.
|
||||
//Either way the one that is noncompliant may become more compliant later.
|
||||
//TAG:HACK
|
||||
//TAG:VERSION_DEPENDENT
|
||||
//TAG:BROWSER_SNIFFING
|
||||
viewX=0; |
||||
viewY=0; |
||||
} |
||||
|
||||
var svgWidth_old=$("#overviewMiniView").attr("width"); |
||||
var svgHeight_new=viewHeight/viewWidth*svgWidth_old; |
||||
$("#overviewMiniView").attr("viewBox",viewX+" "+viewY+" "+viewWidth+" "+viewHeight); |
||||
$("#overviewMiniView").attr("height",svgHeight_new); |
||||
updateViewBox(); |
||||
}; |
||||
updateViewDimensions(); |
||||
|
||||
//set up the overview window as a controller for the view port.
|
||||
overviewWindowGlobals.viewBoxDragging=false; |
||||
var updateViewPortFromViewBox = function(){ |
||||
|
||||
var windowWidth =parseFloat($("#svgcanvas").css("width" )); |
||||
var windowHeight=parseFloat($("#svgcanvas").css("height")); |
||||
var overviewWidth =$("#overviewMiniView").attr("width" ); |
||||
var overviewHeight=$("#overviewMiniView").attr("height"); |
||||
var viewBoxX=parseFloat($("#overview_window_view_box").css("left")); |
||||
var viewBoxY=parseFloat($("#overview_window_view_box").css("top" )); |
||||
|
||||
var portX=viewBoxX/overviewWidth *windowWidth; |
||||
var portY=viewBoxY/overviewHeight*windowHeight; |
||||
|
||||
$("#workarea").scrollLeft(portX); |
||||
$("#workarea").scrollTop(portY); |
||||
}; |
||||
$( "#overview_window_view_box" ).draggable({ containment: "parent" |
||||
,drag: updateViewPortFromViewBox |
||||
,start:function(){overviewWindowGlobals.viewBoxDragging=true; } |
||||
,stop :function(){overviewWindowGlobals.viewBoxDragging=false;} |
||||
});
|
||||
$("#overviewMiniView").click(function(evt){ |
||||
//Firefox doesn't support evt.offsetX and evt.offsetY
|
||||
var mouseX=(evt.offsetX || evt.originalEvent.layerX); |
||||
var mouseY=(evt.offsetY || evt.originalEvent.layerY); |
||||
var overviewWidth =$("#overviewMiniView").attr("width" ); |
||||
var overviewHeight=$("#overviewMiniView").attr("height"); |
||||
var viewBoxWidth =parseFloat($("#overview_window_view_box").css("min-width" )); |
||||
var viewBoxHeight=parseFloat($("#overview_window_view_box").css("min-height")); |
||||
|
||||
var viewBoxX=mouseX - 0.5 * viewBoxWidth; |
||||
var viewBoxY=mouseY- 0.5 * viewBoxHeight; |
||||
//deal with constraints
|
||||
if(viewBoxX<0){ |
||||
viewBoxX=0; |
||||
} |
||||
if(viewBoxY<0){ |
||||
viewBoxY=0; |
||||
} |
||||
if(viewBoxX+viewBoxWidth>overviewWidth){ |
||||
viewBoxX=overviewWidth-viewBoxWidth; |
||||
} |
||||
if(viewBoxY+viewBoxHeight>overviewHeight){ |
||||
viewBoxY=overviewHeight-viewBoxHeight; |
||||
} |
||||
|
||||
$("#overview_window_view_box").css("top",viewBoxY+"px"); |
||||
$("#overview_window_view_box").css("left",viewBoxX+"px"); |
||||
updateViewPortFromViewBox(); |
||||
}); |
||||
|
||||
return{ |
||||
name: "overview window", |
||||
canvasUpdated:updateViewDimensions, |
||||
workareaResized:updateViewBox |
||||
}; |
||||
}); |
@ -0,0 +1,46 @@
|
||||
/*globals svgEditor, svgCanvas*/ |
||||
/*jslint eqeq: true*/ |
||||
/* |
||||
* ext-panning.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2013 Luis Aguirre |
||||
* |
||||
*/ |
||||
|
||||
/* |
||||
This is a very basic SVG-Edit extension to let tablet/mobile devices panning without problem |
||||
*/ |
||||
|
||||
svgEditor.addExtension('ext-panning', function() {'use strict'; |
||||
return { |
||||
name: 'Extension Panning', |
||||
svgicons: svgEditor.curConfig.extPath + 'ext-panning.xml', |
||||
buttons: [{ |
||||
id: 'ext-panning', |
||||
type: 'mode', |
||||
title: 'Panning', |
||||
events: { |
||||
click: function() { |
||||
svgCanvas.setMode('ext-panning'); |
||||
} |
||||
} |
||||
}], |
||||
mouseDown: function() { |
||||
if (svgCanvas.getMode() == 'ext-panning') { |
||||
svgEditor.setPanning(true); |
||||
return {started: true}; |
||||
} |
||||
}, |
||||
mouseUp: function() { |
||||
if (svgCanvas.getMode() == 'ext-panning') { |
||||
svgEditor.setPanning(false); |
||||
return { |
||||
keep: false, |
||||
element: null |
||||
}; |
||||
} |
||||
} |
||||
}; |
||||
}); |
After Width: | Height: | Size: 732 B |
@ -0,0 +1,23 @@
|
||||
/*globals $, svgCanvas, svgEditor*/ |
||||
/*jslint regexp:true*/ |
||||
// TODO: Might add support for "exportImage" custom
|
||||
// handler as in "ext-server_opensave.js" (and in savefile.php)
|
||||
|
||||
svgEditor.addExtension("php_savefile", { |
||||
callback: function() { |
||||
'use strict'; |
||||
function getFileNameFromTitle () { |
||||
var title = svgCanvas.getDocumentTitle(); |
||||
return $.trim(title); |
||||
} |
||||
var save_svg_action = svgEditor.curConfig.extPath + 'savefile.php'; |
||||
svgEditor.setCustomHandlers({ |
||||
save: function(win, data) { |
||||
var svg = '<?xml version="1.0" encoding="UTF-8"?>\n' + data, |
||||
filename = getFileNameFromTitle(); |
||||
|
||||
$.post(save_svg_action, {output_svg: svg, filename: filename}); |
||||
} |
||||
}); |
||||
} |
||||
}); |
@ -0,0 +1,295 @@
|
||||
/*globals svgEditor, svgCanvas, svgedit, $*/ |
||||
/*jslint vars: true, eqeq: true, todo: true */ |
||||
/* |
||||
* ext-polygon.js |
||||
* |
||||
* |
||||
* Copyright(c) 2010 CloudCanvas, Inc. |
||||
* All rights reserved |
||||
* |
||||
*/ |
||||
svgEditor.addExtension("polygon", function(S) {'use strict'; |
||||
|
||||
var // NS = svgedit.NS,
|
||||
// svgcontent = S.svgcontent,
|
||||
// addElem = S.addSvgElementFromJson,
|
||||
selElems, |
||||
editingitex = false, |
||||
// svgdoc = S.svgroot.parentNode.ownerDocument,
|
||||
// newFOG, newFOGParent, newDef, newImageName, newMaskID, modeChangeG,
|
||||
// edg = 0,
|
||||
// undoCommand = "Not image";
|
||||
started, newFO; |
||||
|
||||
// var ccZoom;
|
||||
// var wEl, hEl;
|
||||
// var wOffset, hOffset;
|
||||
// var ccRBG;
|
||||
var ccRgbEl; |
||||
// var ccOpacity;
|
||||
// var brushW, brushH;
|
||||
var shape; |
||||
|
||||
// var ccDebug = document.getElementById('debugpanel');
|
||||
|
||||
/* var properlySourceSizeTextArea = function(){ |
||||
// TODO: remove magic numbers here and get values from CSS
|
||||
var height = $('#svg_source_container').height() - 80; |
||||
$('#svg_source_textarea').css('height', height); |
||||
}; */ |
||||
function showPanel(on){ |
||||
var fc_rules = $('#fc_rules'); |
||||
if (!fc_rules.length) { |
||||
fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head'); |
||||
} |
||||
fc_rules.text(!on ? "" : " #tool_topath { display: none !important; }"); |
||||
$('#polygon_panel').toggle(on); |
||||
} |
||||
|
||||
/* |
||||
function toggleSourceButtons(on){ |
||||
$('#tool_source_save, #tool_source_cancel').toggle(!on); |
||||
$('#polygon_save, #polygon_cancel').toggle(on); |
||||
} |
||||
*/ |
||||
|
||||
function setAttr(attr, val){ |
||||
svgCanvas.changeSelectedAttribute(attr, val); |
||||
S.call("changed", selElems); |
||||
} |
||||
|
||||
function cot(n){ |
||||
return 1 / Math.tan(n); |
||||
} |
||||
|
||||
function sec(n){ |
||||
return 1 / Math.cos(n); |
||||
} |
||||
|
||||
/** |
||||
* Obtained from http://code.google.com/p/passenger-top/source/browse/instiki/public/svg-edit/editor/extensions/ext-itex.js?r=3
|
||||
* This function sets the content of of the currently-selected foreignObject element, |
||||
* based on the itex contained in string. |
||||
* @param {string} tex The itex text. |
||||
* @returns This function returns false if the set was unsuccessful, true otherwise. |
||||
*/ |
||||
/* |
||||
function setItexString(tex) { |
||||
var mathns = 'http://www.w3.org/1998/Math/MathML', |
||||
xmlnsns = 'http://www.w3.org/2000/xmlns/', |
||||
ajaxEndpoint = '../../itex'; |
||||
var elt = selElems[0]; |
||||
try { |
||||
var math = svgdoc.createElementNS(mathns, 'math'); |
||||
math.setAttributeNS(xmlnsns, 'xmlns', mathns); |
||||
math.setAttribute('display', 'inline'); |
||||
var semantics = document.createElementNS(mathns, 'semantics'); |
||||
var annotation = document.createElementNS(mathns, 'annotation'); |
||||
annotation.setAttribute('encoding', 'application/x-tex'); |
||||
annotation.textContent = tex; |
||||
var mrow = document.createElementNS(mathns, 'mrow'); |
||||
semantics.appendChild(mrow); |
||||
semantics.appendChild(annotation); |
||||
math.appendChild(semantics); |
||||
// make an AJAX request to the server, to get the MathML
|
||||
$.post(ajaxEndpoint, {'tex': tex, 'display': 'inline'}, function(data){ |
||||
var children = data.documentElement.childNodes; |
||||
while (children.length > 0) { |
||||
mrow.appendChild(svgdoc.adoptNode(children[0], true)); |
||||
} |
||||
S.sanitizeSvg(math); |
||||
S.call("changed", [elt]); |
||||
}); |
||||
elt.replaceChild(math, elt.firstChild); |
||||
S.call("changed", [elt]); |
||||
svgCanvas.clearSelection(); |
||||
} catch(e) { |
||||
console.log(e); |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
*/ |
||||
return { |
||||
name: "polygon", |
||||
svgicons: svgEditor.curConfig.extPath + "polygon-icons.svg", |
||||
buttons: [{ |
||||
id: "tool_polygon", |
||||
type: "mode", |
||||
title: "Polygon Tool", |
||||
position: 11, |
||||
events: { |
||||
'click': function(){ |
||||
svgCanvas.setMode('polygon'); |
||||
showPanel(true); |
||||
} |
||||
} |
||||
}], |
||||
|
||||
context_tools: [{ |
||||
type: "input", |
||||
panel: "polygon_panel", |
||||
title: "Number of Sides", |
||||
id: "polySides", |
||||
label: "sides", |
||||
size: 3, |
||||
defval: 5, |
||||
events: { |
||||
change: function(){ |
||||
setAttr('sides', this.value); |
||||
|
||||
} |
||||
} |
||||
}], |
||||
|
||||
callback: function(){ |
||||
|
||||
$('#polygon_panel').hide(); |
||||
|
||||
var endChanges = function(){ |
||||
}; |
||||
|
||||
// TODO: Needs to be done after orig icon loads
|
||||
setTimeout(function(){ |
||||
// Create source save/cancel buttons
|
||||
var save = $('#tool_source_save').clone().hide().attr('id', 'polygon_save').unbind().appendTo("#tool_source_back").click(function(){ |
||||
|
||||
if (!editingitex) { |
||||
return; |
||||
} |
||||
// Todo: Uncomment the setItexString() function above and handle ajaxEndpoint?
|
||||
if (!setItexString($('#svg_source_textarea').val())) { |
||||
$.confirm("Errors found. Revert to original?", function(ok){ |
||||
if (!ok) { |
||||
return false; |
||||
} |
||||
endChanges(); |
||||
}); |
||||
} |
||||
else { |
||||
endChanges(); |
||||
} |
||||
// setSelectMode();
|
||||
}); |
||||
|
||||
var cancel = $('#tool_source_cancel').clone().hide().attr('id', 'polygon_cancel').unbind().appendTo("#tool_source_back").click(function(){ |
||||
endChanges(); |
||||
}); |
||||
|
||||
}, 3000); |
||||
}, |
||||
mouseDown: function(opts){ |
||||
// var e = opts.event;
|
||||
var rgb = svgCanvas.getColor("fill"); |
||||
ccRgbEl = rgb.substring(1, rgb.length); |
||||
var sRgb = svgCanvas.getColor("stroke"); |
||||
// ccSRgbEl = sRgb.substring(1, rgb.length);
|
||||
var sWidth = svgCanvas.getStrokeWidth(); |
||||
|
||||
if (svgCanvas.getMode() == "polygon") { |
||||
started = true; |
||||
|
||||
newFO = S.addSvgElementFromJson({ |
||||
"element": "polygon", |
||||
"attr": { |
||||
"cx": opts.start_x, |
||||
"cy": opts.start_y, |
||||
"id": S.getNextId(), |
||||
"shape": "regularPoly", |
||||
"sides": document.getElementById("polySides").value, |
||||
"orient": "x", |
||||
"edge": 0, |
||||
"fill": rgb, |
||||
"strokecolor": sRgb, |
||||
"strokeWidth": sWidth |
||||
} |
||||
}); |
||||
|
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
}, |
||||
mouseMove: function(opts){ |
||||
if (!started) { |
||||
return; |
||||
} |
||||
if (svgCanvas.getMode() == "polygon") { |
||||
// var e = opts.event;
|
||||
var x = opts.mouse_x; |
||||
var y = opts.mouse_y; |
||||
var c = $(newFO).attr(["cx", "cy", "sides", "orient", "fill", "strokecolor", "strokeWidth"]); |
||||
var cx = c.cx, cy = c.cy, fill = c.fill, strokecolor = c.strokecolor, strokewidth = c.strokeWidth, sides = c.sides, |
||||
// orient = c.orient,
|
||||
edg = (Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy))) / 1.5; |
||||
newFO.setAttributeNS(null, "edge", edg); |
||||
|
||||
var inradius = (edg / 2) * cot(Math.PI / sides); |
||||
var circumradius = inradius * sec(Math.PI / sides); |
||||
var points = ''; |
||||
var s; |
||||
for (s = 0; sides >= s; s++) { |
||||
var angle = 2.0 * Math.PI * s / sides; |
||||
x = (circumradius * Math.cos(angle)) + cx; |
||||
y = (circumradius * Math.sin(angle)) + cy; |
||||
|
||||
points += x + ',' + y + ' '; |
||||
} |
||||
|
||||
//var poly = newFO.createElementNS(NS.SVG, 'polygon');
|
||||
newFO.setAttributeNS(null, 'points', points); |
||||
newFO.setAttributeNS(null, 'fill', fill); |
||||
newFO.setAttributeNS(null, 'stroke', strokecolor); |
||||
newFO.setAttributeNS(null, 'stroke-width', strokewidth); |
||||
// newFO.setAttributeNS(null, 'transform', "rotate(-90)");
|
||||
shape = newFO.getAttributeNS(null, 'shape'); |
||||
//newFO.appendChild(poly);
|
||||
//DrawPoly(cx, cy, sides, edg, orient);
|
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
|
||||
}, |
||||
|
||||
mouseUp: function(opts){ |
||||
if (svgCanvas.getMode() == "polygon") { |
||||
var attrs = $(newFO).attr("edge"); |
||||
var keep = (attrs.edge != 0); |
||||
// svgCanvas.addToSelection([newFO], true);
|
||||
return { |
||||
keep: keep, |
||||
element: newFO |
||||
}; |
||||
} |
||||
|
||||
}, |
||||
selectedChanged: function(opts){ |
||||
// Use this to update the current selected elements
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
|
||||
while (i--) { |
||||
var elem = selElems[i]; |
||||
if (elem && elem.getAttributeNS(null, 'shape') === 'regularPoly') { |
||||
if (opts.selectedElement && !opts.multiselected) { |
||||
$('#polySides').val(elem.getAttribute("sides")); |
||||
|
||||
showPanel(true); |
||||
} |
||||
else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
}, |
||||
elementChanged: function(opts){ |
||||
// var elem = opts.elems[0];
|
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,59 @@
|
||||
/*globals svgEditor, svgedit, svgCanvas, canvg, $, top*/ |
||||
/*jslint vars: true*/ |
||||
/* |
||||
* ext-server_moinsave.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* 2011 MoinMoin:ReimarBauer |
||||
* adopted for moinmoins item storage. it sends in one post png and svg data |
||||
* (I agree to dual license my work to additional GPLv2 or later) |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("server_opensave", { |
||||
callback: function() {'use strict'; |
||||
|
||||
var save_svg_action = '/+modify'; |
||||
|
||||
// Create upload target (hidden iframe)
|
||||
var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body'); |
||||
|
||||
svgEditor.setCustomHandlers({ |
||||
save: function(win, data) { |
||||
var svg = "<?xml version=\"1.0\"?>\n" + data; |
||||
var qstr = $.param.querystring(); |
||||
var name = qstr.substr(9).split('/+get/')[1]; |
||||
var svg_data = svgedit.utilities.encode64(svg); |
||||
if(!$('#export_canvas').length) { |
||||
$('<canvas>', {id: 'export_canvas'}).hide().appendTo('body'); |
||||
} |
||||
var c = $('#export_canvas')[0]; |
||||
c.width = svgCanvas.contentW; |
||||
c.height = svgCanvas.contentH; |
||||
$.getScript('canvg/canvg.js', function() { |
||||
canvg(c, svg, {renderCallback: function() { |
||||
var datauri = c.toDataURL('image/png'); |
||||
// var uiStrings = svgEditor.uiStrings;
|
||||
var png_data = svgedit.utilities.encode64(datauri); |
||||
var form = $('<form>').attr({ |
||||
method: 'post', |
||||
action: save_svg_action + '/' + name, |
||||
target: 'output_frame' |
||||
}).append('<input type="hidden" name="png_data" value="' + png_data + '">') |
||||
.append('<input type="hidden" name="filepath" value="' + svg_data + '">') |
||||
.append('<input type="hidden" name="filename" value="' + 'drawing.svg">') |
||||
.append('<input type="hidden" name="contenttype" value="application/x-svgdraw">') |
||||
.appendTo('body') |
||||
.submit().remove(); |
||||
}}); |
||||
}); |
||||
alert("Saved! Return to Item View!"); |
||||
top.window.location = '/'+name; |
||||
} |
||||
}); |
||||
|
||||
} |
||||
}); |
||||
|
@ -0,0 +1,210 @@
|
||||
/*globals svgEditor, svgedit, svgCanvas, canvg, $*/ |
||||
/*jslint eqeq: true*/ |
||||
/* |
||||
* ext-server_opensave.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension("server_opensave", { |
||||
callback: function() { |
||||
'use strict'; |
||||
function getFileNameFromTitle () { |
||||
var title = svgCanvas.getDocumentTitle(); |
||||
// We convert (to underscore) only those disallowed Win7 file name characters
|
||||
return $.trim(title).replace(/[\/\\:*?"<>|]/g, '_'); |
||||
} |
||||
function xhtmlEscape(str) { |
||||
return str.replace(/&(?!amp;)/g, '&').replace(/"/g, '"').replace(/</g, '<'); // < is actually disallowed above anyways
|
||||
} |
||||
function clientDownloadSupport (filename, suffix, uri) { |
||||
var a, |
||||
support = $('<a>')[0].download === ''; |
||||
if (support) { |
||||
a = $('<a>hidden</a>').attr({download: (filename || 'image') + suffix, href: uri}).css('display', 'none').appendTo('body'); |
||||
a[0].click(); |
||||
return true; |
||||
} |
||||
} |
||||
var open_svg_action, import_svg_action, import_img_action, |
||||
open_svg_form, import_svg_form, import_img_form, |
||||
save_svg_action = svgEditor.curConfig.extPath + 'filesave.php', |
||||
save_img_action = svgEditor.curConfig.extPath + 'filesave.php', |
||||
// Create upload target (hidden iframe)
|
||||
cancelled = false; |
||||
|
||||
$('<iframe name="output_frame" src="#"/>').hide().appendTo('body'); |
||||
svgEditor.setCustomHandlers({ |
||||
save: function(win, data) { |
||||
var svg = '<?xml version="1.0" encoding="UTF-8"?>\n' + data, // Firefox doesn't seem to know it is UTF-8 (no matter whether we use or skip the clientDownload code) despite the Content-Disposition header containing UTF-8, but adding the encoding works
|
||||
filename = getFileNameFromTitle(); |
||||
|
||||
if (clientDownloadSupport(filename, '.svg', 'data:image/svg+xml;charset=UTF-8;base64,' + svgedit.utilities.encode64(svg))) { |
||||
return; |
||||
} |
||||
|
||||
$('<form>').attr({ |
||||
method: 'post', |
||||
action: save_svg_action, |
||||
target: 'output_frame' |
||||
}).append('<input type="hidden" name="output_svg" value="' + xhtmlEscape(svg) + '">') |
||||
.append('<input type="hidden" name="filename" value="' + xhtmlEscape(filename) + '">') |
||||
.appendTo('body') |
||||
.submit().remove(); |
||||
}, |
||||
exportImage: function(win, data) { |
||||
var c, |
||||
issues = data.issues, |
||||
mimeType = data.mimeType, |
||||
quality = data.quality; |
||||
|
||||
if(!$('#export_canvas').length) { |
||||
$('<canvas>', {id: 'export_canvas'}).hide().appendTo('body'); |
||||
} |
||||
c = $('#export_canvas')[0]; |
||||
|
||||
c.width = svgCanvas.contentW; |
||||
c.height = svgCanvas.contentH; |
||||
canvg(c, data.svg, {renderCallback: function() { |
||||
var pre, filename, suffix, |
||||
datauri = quality ? c.toDataURL(mimeType, quality) : c.toDataURL(mimeType), |
||||
// uiStrings = svgEditor.uiStrings,
|
||||
note = ''; |
||||
|
||||
// Check if there are issues
|
||||
if (issues.length) { |
||||
pre = "\n \u2022 "; |
||||
note += ("\n\n" + pre + issues.join(pre)); |
||||
}
|
||||
|
||||
if(note.length) { |
||||
alert(note); |
||||
} |
||||
|
||||
filename = getFileNameFromTitle(); |
||||
suffix = '.' + data.type.toLowerCase(); |
||||
|
||||
if (clientDownloadSupport(filename, suffix, datauri)) { |
||||
return; |
||||
} |
||||
|
||||
$('<form>').attr({ |
||||
method: 'post', |
||||
action: save_img_action, |
||||
target: 'output_frame' |
||||
}).append('<input type="hidden" name="output_img" value="' + datauri + '">') |
||||
.append('<input type="hidden" name="mime" value="' + mimeType + '">') |
||||
.append('<input type="hidden" name="filename" value="' + xhtmlEscape(filename) + '">') |
||||
.appendTo('body') |
||||
.submit().remove(); |
||||
}}); |
||||
|
||||
|
||||
} |
||||
}); |
||||
|
||||
// Do nothing if client support is found
|
||||
if (window.FileReader) {return;} |
||||
|
||||
// Change these to appropriate script file
|
||||
open_svg_action = svgEditor.curConfig.extPath + 'fileopen.php?type=load_svg'; |
||||
import_svg_action = svgEditor.curConfig.extPath + 'fileopen.php?type=import_svg'; |
||||
import_img_action = svgEditor.curConfig.extPath + 'fileopen.php?type=import_img'; |
||||
|
||||
// Set up function for PHP uploader to use
|
||||
svgEditor.processFile = function(str64, type) { |
||||
var xmlstr; |
||||
if (cancelled) { |
||||
cancelled = false; |
||||
return; |
||||
} |
||||
|
||||
$('#dialog_box').hide(); |
||||
|
||||
if (type !== 'import_img') { |
||||
xmlstr = svgedit.utilities.decode64(str64); |
||||
} |
||||
|
||||
switch (type) { |
||||
case 'load_svg': |
||||
svgCanvas.clear(); |
||||
svgCanvas.setSvgString(xmlstr); |
||||
svgEditor.updateCanvas(); |
||||
break; |
||||
case 'import_svg': |
||||
svgCanvas.importSvgString(xmlstr); |
||||
svgEditor.updateCanvas();
|
||||
break; |
||||
case 'import_img': |
||||
svgCanvas.setGoodImage(str64); |
||||
break; |
||||
} |
||||
}; |
||||
|
||||
// Create upload form
|
||||
open_svg_form = $('<form>'); |
||||
open_svg_form.attr({ |
||||
enctype: 'multipart/form-data', |
||||
method: 'post', |
||||
action: open_svg_action, |
||||
target: 'output_frame' |
||||
}); |
||||
|
||||
// Create import form
|
||||
import_svg_form = open_svg_form.clone().attr('action', import_svg_action); |
||||
|
||||
// Create image form
|
||||
import_img_form = open_svg_form.clone().attr('action', import_img_action); |
||||
|
||||
// It appears necessary to rebuild this input every time a file is
|
||||
// selected so the same file can be picked and the change event can fire.
|
||||
function rebuildInput(form) { |
||||
form.empty(); |
||||
var inp = $('<input type="file" name="svg_file">').appendTo(form); |
||||
|
||||
|
||||
function submit() { |
||||
// This submits the form, which returns the file data using svgEditor.processFile()
|
||||
form.submit(); |
||||
|
||||
rebuildInput(form); |
||||
$.process_cancel("Uploading...", function() { |
||||
cancelled = true; |
||||
$('#dialog_box').hide(); |
||||
}); |
||||
} |
||||
|
||||
if(form[0] == open_svg_form[0]) { |
||||
inp.change(function() { |
||||
// This takes care of the "are you sure" dialog box
|
||||
svgEditor.openPrep(function(ok) { |
||||
if(!ok) { |
||||
rebuildInput(form); |
||||
return; |
||||
} |
||||
submit(); |
||||
}); |
||||
}); |
||||
} else { |
||||
inp.change(function() { |
||||
// This submits the form, which returns the file data using svgEditor.processFile()
|
||||
submit(); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
// Create the input elements
|
||||
rebuildInput(open_svg_form); |
||||
rebuildInput(import_svg_form); |
||||
rebuildInput(import_img_form); |
||||
|
||||
// Add forms to buttons
|
||||
$("#tool_open").show().prepend(open_svg_form); |
||||
$("#tool_import").show().prepend(import_svg_form); |
||||
$("#tool_image").prepend(import_img_form); |
||||
} |
||||
}); |
||||
|
@ -0,0 +1,357 @@
|
||||
/*globals svgEditor, $, DOMParser*/ |
||||
/*jslint es5: true, vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-shapes.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Christian Tzurcanu |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension('shapes', function() {'use strict'; |
||||
var current_d, cur_shape_id; |
||||
var canv = svgEditor.canvas; |
||||
var cur_shape; |
||||
var start_x, start_y; |
||||
var svgroot = canv.getRootElem(); |
||||
var lastBBox = {}; |
||||
|
||||
// This populates the category list
|
||||
var categories = { |
||||
basic: 'Basic', |
||||
object: 'Objects', |
||||
symbol: 'Symbols', |
||||
arrow: 'Arrows', |
||||
flowchart: 'Flowchart', |
||||
animal: 'Animals', |
||||
game: 'Cards & Chess', |
||||
dialog_balloon: 'Dialog balloons', |
||||
electronics: 'Electronics', |
||||
math: 'Mathematical', |
||||
music: 'Music', |
||||
misc: 'Miscellaneous', |
||||
raphael_1: 'raphaeljs.com set 1', |
||||
raphael_2: 'raphaeljs.com set 2' |
||||
}; |
||||
|
||||
var library = { |
||||
basic: { |
||||
data: { |
||||
'heart': 'm150,73c61,-175 300,0 0,225c-300,-225 -61,-400 0,-225z', |
||||
'frame': 'm0,0l300,0l0,300l-300,0zm35,-265l0,230l230,0l0,-230z', |
||||
'donut': 'm1,150l0,0c0,-82.29042 66.70958,-149 149,-149l0,0c39.51724,0 77.41599,15.69816 105.35889,43.64108c27.94293,27.94293 43.64111,65.84165 43.64111,105.35892l0,0c0,82.29041 -66.70958,149 -149,149l0,0c-82.29041,0 -149,-66.70959 -149,-149zm74.5,0l0,0c0,41.1452 33.35481,74.5 74.5,74.5c41.14522,0 74.5,-33.3548 74.5,-74.5c0,-41.1452 -33.3548,-74.5 -74.5,-74.5l0,0c-41.14519,0 -74.5,33.35481 -74.5,74.5z', |
||||
'triangle': 'm1,280.375l149,-260.75l149,260.75z', |
||||
'right_triangle': 'm1,299l0,-298l298,298z', |
||||
'diamond': 'm1,150l149,-149l149,149l-149,149l-149,-149z', |
||||
'pentagon': 'm1.00035,116.97758l148.99963,-108.4053l148.99998,108.4053l-56.91267,175.4042l-184.1741,0l-56.91284,-175.4042z', |
||||
'hexagon': 'm1,149.99944l63.85715,-127.71428l170.28572,0l63.85713,127.71428l-63.85713,127.71428l-170.28572,0l-63.85715,-127.71428z', |
||||
'septagon1': 'm0.99917,191.06511l29.51249,-127.7108l119.48833,-56.83673l119.48836,56.83673l29.51303,127.7108l-82.69087,102.41679l-132.62103,0l-82.69031,-102.41679z', |
||||
'heptagon': 'm1,88.28171l87.28172,-87.28171l123.43653,0l87.28172,87.28171l0,123.43654l-87.28172,87.28172l-123.43653,0l-87.28172,-87.28172l0,-123.43654z', |
||||
'decagon': 'm1,150.00093l28.45646,-88.40318l74.49956,-54.63682l92.08794,0l74.50002,54.63682l28.45599,88.40318l-28.45599,88.40318l-74.50002,54.63681l-92.08794,0l-74.49956,-54.63681l-28.45646,-88.40318z', |
||||
'dodecagon': 'm1,110.07421l39.92579,-69.14842l69.14842,-39.92579l79.85159,0l69.14842,39.92579l39.92578,69.14842l0,79.85159l-39.92578,69.14842l-69.14842,39.92578l-79.85159,0l-69.14842,-39.92578l-39.92579,-69.14842l0,-79.85159z', |
||||
'star_points_5': 'm1,116.58409l113.82668,0l35.17332,-108.13487l35.17334,108.13487l113.82666,0l-92.08755,66.83026l35.17514,108.13487l-92.08759,-66.83208l-92.08757,66.83208l35.17515,-108.13487l-92.08758,-66.83026z', |
||||
'trapezoid': 'm1,299l55.875,-298l186.25001,0l55.87498,298z', |
||||
'arrow_up': 'm1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z', |
||||
'vertical_scrool': 'm37.375,261.625l0,-242.9375l0,0c0,-10.32083 8.36669,-18.6875 18.6875,-18.6875l224.25,0c10.32083,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36667,18.6875 -18.6875,18.6875l-18.6875,0l0,242.9375c0,10.32083 -8.36668,18.6875 -18.6875,18.6875l-224.25,0l0,0c-10.32083,0 -18.6875,-8.36667 -18.6875,-18.6875c0,-10.32083 8.36667,-18.6875 18.6875,-18.6875zm37.375,-261.625l0,0c10.32081,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36669,18.6875 -18.6875,18.6875c-5.1604,0 -9.34375,-4.18335 -9.34375,-9.34375c0,-5.16041 4.18335,-9.34375 9.34375,-9.34375l18.6875,0m186.875,18.6875l-205.5625,0m-37.375,224.25l0,0c5.1604,0 9.34375,4.18335 9.34375,9.34375c0,5.1604 -4.18335,9.34375 -9.34375,9.34375l18.6875,0m-18.6875,18.6875l0,0c10.32081,0 18.6875,-8.36667 18.6875,-18.6875l0,-18.6875', |
||||
'smiley': 'm68.49886,214.78838q81.06408,55.67332 161.93891,0m-144.36983,-109.9558c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57948,6.97517 15.57948,15.57949c0,8.60431 -6.97517,15.57947 -15.57948,15.57947c-8.60431,0 -15.57948,-6.97516 -15.57948,-15.57947m95.83109,0c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57947,6.97517 15.57947,15.57949c0,8.60431 -6.97516,15.57947 -15.57947,15.57947c-8.60429,0 -15.57948,-6.97516 -15.57948,-15.57947m-181.89903,44.73038l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296zm0,0l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296z', |
||||
'left_braket': 'm174.24565,298.5c-13.39009,0 -24.24489,-1.80908 -24.24489,-4.04065l0,-140.4187c0,-2.23158 -10.85481,-4.04065 -24.2449,-4.04065l0,0c13.39009,0 24.2449,-1.80907 24.2449,-4.04065l0,-140.4187l0,0c0,-2.23159 10.8548,-4.04066 24.24489,-4.04066', |
||||
'uml_actor': 'm40.5,100l219,0m-108.99991,94.00006l107,105m-107.00009,-106.00006l-100,106m99.5,-231l0,125m33.24219,-158.75781c0,18.35916 -14.88303,33.24219 -33.24219,33.24219c-18.35916,0 -33.2422,-14.88303 -33.2422,-33.24219c0.00002,-18.35915 14.88304,-33.24219 33.2422,-33.24219c18.35916,0 33.24219,14.88304 33.24219,33.24219z', |
||||
'dialog_balloon_1': 'm0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z', |
||||
'cloud': 'm182.05086,34.31005c-0.64743,0.02048 -1.27309,0.07504 -1.92319,0.13979c-10.40161,1.03605 -19.58215,7.63722 -24.24597,17.4734l-2.47269,7.44367c0.53346,-2.57959 1.35258,-5.08134 2.47269,-7.44367c-8.31731,-8.61741 -19.99149,-12.59487 -31.52664,-10.72866c-11.53516,1.8662 -21.55294,9.3505 -27.02773,20.19925c-15.45544,-9.51897 -34.72095,-8.94245 -49.62526,1.50272c-14.90431,10.44516 -22.84828,28.93916 -20.43393,47.59753l1.57977,7.58346c-0.71388,-2.48442 -1.24701,-5.01186 -1.57977,-7.58346l-0.2404,0.69894c-12.95573,1.4119 -23.58103,11.46413 -26.34088,24.91708c-2.75985,13.45294 2.9789,27.25658 14.21789,34.21291l17.54914,4.26352c-6.1277,0.50439 -12.24542,-0.9808 -17.54914,-4.26352c-8.66903,9.71078 -10.6639,24.08736 -4.94535,35.96027c5.71854,11.87289 17.93128,18.70935 30.53069,17.15887l7.65843,-2.02692c-2.46413,1.0314 -5.02329,1.70264 -7.65843,2.02692c7.15259,13.16728 19.01251,22.77237 32.93468,26.5945c13.92217,3.82214 28.70987,1.56322 41.03957,-6.25546c10.05858,15.86252 27.91113,24.19412 45.81322,21.38742c17.90208,-2.8067 32.66954,-16.26563 37.91438,-34.52742l1.82016,-10.20447c-0.27254,3.46677 -0.86394,6.87508 -1.82016,10.20447c12.31329,8.07489 27.80199,8.52994 40.52443,1.18819c12.72244,-7.34175 20.6609,-21.34155 20.77736,-36.58929l-4.56108,-22.7823l-17.96776,-15.41455c13.89359,8.70317 22.6528,21.96329 22.52884,38.19685c16.5202,0.17313 30.55292,-13.98268 36.84976,-30.22897c6.29684,-16.24631 3.91486,-34.76801 -6.2504,-48.68089c4.21637,-10.35873 3.96622,-22.14172 -0.68683,-32.29084c-4.65308,-10.14912 -13.23602,-17.69244 -23.55914,-20.65356c-2.31018,-13.45141 -11.83276,-24.27162 -24.41768,-27.81765c-12.58492,-3.54603 -25.98557,0.82654 -34.41142,11.25287l-5.11707,8.63186c1.30753,-3.12148 3.01521,-6.03101 5.11707,-8.63186c-5.93959,-8.19432 -15.2556,-12.8181 -24.96718,-12.51096z', |
||||
'cylinder': 'm299.0007,83.77844c0,18.28676 -66.70958,33.11111 -149.00002,33.11111m149.00002,-33.11111l0,0c0,18.28676 -66.70958,33.11111 -149.00002,33.11111c-82.29041,0 -148.99997,-14.82432 -148.99997,-33.11111m0,0l0,0c0,-18.28674 66.70956,-33.1111 148.99997,-33.1111c82.29044,0 149.00002,14.82436 149.00002,33.1111l0,132.44449c0,18.28674 -66.70958,33.11105 -149.00002,33.11105c-82.29041,0 -148.99997,-14.82431 -148.99997,-33.11105z', |
||||
'arrow_u_turn': 'm1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z', |
||||
'arrow_left_up': 'm0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z', |
||||
'maximize': 'm1.00037,150.34581l55.30305,-55.30267l0,27.65093l22.17356,0l0,-44.21833l44.21825,0l0,-22.17357l-27.65095,0l55.30267,-55.30292l55.3035,55.30292l-27.65175,0l0,22.17357l44.21835,0l0,44.21833l22.17357,0l0,-27.65093l55.30345,55.30267l-55.30345,55.3035l0,-27.65175l-22.17357,0l0,44.21834l-44.21835,0l0,22.17355l27.65175,0l-55.3035,55.30348l-55.30267,-55.30348l27.65095,0l0,-22.17355l-44.21825,0l0,-44.21834l-22.17356,0l0,27.65175l-55.30305,-55.3035z', |
||||
'cross': 'm0.99844,99.71339l98.71494,0l0,-98.71495l101.26279,0l0,98.71495l98.71495,0l0,101.2628l-98.71495,0l0,98.71494l-101.26279,0l0,-98.71494l-98.71494,0z', |
||||
'plaque': 'm-0.00197,49.94376l0,0c27.5829,0 49.94327,-22.36036 49.94327,-49.94327l199.76709,0l0,0c0,27.5829 22.36037,49.94327 49.94325,49.94327l0,199.7671l0,0c-27.58289,0 -49.94325,22.36034 -49.94325,49.94325l-199.76709,0c0,-27.58292 -22.36037,-49.94325 -49.94327,-49.94325z', |
||||
'page': 'm249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234' |
||||
|
||||
}, |
||||
buttons: [] |
||||
} |
||||
}; |
||||
|
||||
var cur_lib = library.basic; |
||||
var mode_id = 'shapelib'; |
||||
var startClientPos = {}; |
||||
|
||||
function loadIcons() { |
||||
$('#shape_buttons').empty().append(cur_lib.buttons); |
||||
} |
||||
|
||||
function makeButtons(cat, shapes) { |
||||
var size = cur_lib.size || 300; |
||||
var fill = cur_lib.fill || false; |
||||
var off = size * 0.05; |
||||
var vb = [-off, -off, size + off*2, size + off*2].join(' '); |
||||
var stroke = fill ? 0: (size/30); |
||||
var shape_icon = new DOMParser().parseFromString( |
||||
'<svg xmlns="http://www.w3.org/2000/svg"><svg viewBox="' + vb + '"><path fill="'+(fill?'#333':'none')+'" stroke="#000" stroke-width="' + stroke + '" /><\/svg><\/svg>', |
||||
'text/xml'); |
||||
|
||||
var width = 24; |
||||
var height = 24; |
||||
shape_icon.documentElement.setAttribute('width', width); |
||||
shape_icon.documentElement.setAttribute('height', height); |
||||
var svg_elem = $(document.importNode(shape_icon.documentElement,true)); |
||||
|
||||
var data = shapes.data; |
||||
|
||||
cur_lib.buttons = []; |
||||
var id; |
||||
for (id in data) { |
||||
var path_d = data[id]; |
||||
var icon = svg_elem.clone(); |
||||
icon.find('path').attr('d', path_d); |
||||
|
||||
var icon_btn = icon.wrap('<div class="tool_button">').parent().attr({ |
||||
id: mode_id + '_' + id, |
||||
title: id |
||||
}); |
||||
// Store for later use
|
||||
cur_lib.buttons.push(icon_btn[0]); |
||||
} |
||||
} |
||||
|
||||
function loadLibrary(cat_id) { |
||||
|
||||
var lib = library[cat_id]; |
||||
|
||||
if (!lib) { |
||||
$('#shape_buttons').html('Loading...'); |
||||
$.getJSON(svgEditor.curConfig.extPath + 'shapelib/' + cat_id + '.json', function(result) { |
||||
cur_lib = library[cat_id] = { |
||||
data: result.data, |
||||
size: result.size, |
||||
fill: result.fill |
||||
}; |
||||
makeButtons(cat_id, result); |
||||
loadIcons(); |
||||
}); |
||||
return; |
||||
} |
||||
cur_lib = lib; |
||||
if (!lib.buttons.length) {makeButtons(cat_id, lib);} |
||||
loadIcons(); |
||||
} |
||||
|
||||
return { |
||||
svgicons: svgEditor.curConfig.extPath + 'ext-shapes.xml', |
||||
buttons: [{ |
||||
id: 'tool_shapelib', |
||||
type: 'mode_flyout', // _flyout
|
||||
position: 6, |
||||
title: 'Shape library', |
||||
events: { |
||||
click: function() { |
||||
canv.setMode(mode_id); |
||||
} |
||||
} |
||||
}], |
||||
callback: function() { |
||||
$('<style>').text('\ |
||||
#shape_buttons {\ |
||||
overflow: auto;\ |
||||
width: 180px;\ |
||||
max-height: 300px;\ |
||||
display: table-cell;\ |
||||
vertical-align: middle;\ |
||||
}\ |
||||
\ |
||||
#shape_cats {\ |
||||
min-width: 110px;\ |
||||
display: table-cell;\ |
||||
vertical-align: middle;\ |
||||
height: 300px;\ |
||||
}\ |
||||
#shape_cats > div {\ |
||||
line-height: 1em;\ |
||||
padding: .5em;\ |
||||
border:1px solid #B0B0B0;\ |
||||
background: #E8E8E8;\ |
||||
margin-bottom: -1px;\ |
||||
}\ |
||||
#shape_cats div:hover {\ |
||||
background: #FFFFCC;\ |
||||
}\ |
||||
#shape_cats div.current {\ |
||||
font-weight: bold;\ |
||||
}').appendTo('head'); |
||||
|
||||
var btn_div = $('<div id="shape_buttons">'); |
||||
$('#tools_shapelib > *').wrapAll(btn_div); |
||||
|
||||
var shower = $('#tools_shapelib_show'); |
||||
|
||||
loadLibrary('basic'); |
||||
|
||||
// Do mouseup on parent element rather than each button
|
||||
$('#shape_buttons').mouseup(function(evt) { |
||||
var btn = $(evt.target).closest('div.tool_button'); |
||||
|
||||
if (!btn.length) {return;} |
||||
|
||||
var copy = btn.children().clone(); |
||||
shower.children(':not(.flyout_arrow_horiz)').remove(); |
||||
shower |
||||
.append(copy) |
||||
.attr('data-curopt', '#' + btn[0].id) // This sets the current mode
|
||||
.mouseup(); |
||||
canv.setMode(mode_id); |
||||
|
||||
cur_shape_id = btn[0].id.substr((mode_id+'_').length); |
||||
current_d = cur_lib.data[cur_shape_id]; |
||||
|
||||
$('.tools_flyout').fadeOut(); |
||||
}); |
||||
|
||||
var shape_cats = $('<div id="shape_cats">'); |
||||
var cat_str = ''; |
||||
|
||||
$.each(categories, function(id, label) { |
||||
cat_str += '<div data-cat=' + id + '>' + label + '</div>'; |
||||
}); |
||||
|
||||
shape_cats.html(cat_str).children().bind('mouseup', function() { |
||||
var catlink = $(this); |
||||
catlink.siblings().removeClass('current'); |
||||
catlink.addClass('current'); |
||||
|
||||
loadLibrary(catlink.attr('data-cat')); |
||||
// Get stuff
|
||||
return false; |
||||
}); |
||||
|
||||
shape_cats.children().eq(0).addClass('current'); |
||||
|
||||
$('#tools_shapelib').append(shape_cats); |
||||
|
||||
shower.mouseup(function() { |
||||
canv.setMode(current_d ? mode_id : 'select'); |
||||
}); |
||||
$('#tool_shapelib').remove(); |
||||
|
||||
var h = $('#tools_shapelib').height(); |
||||
$('#tools_shapelib').css({ |
||||
'margin-top': -(h/2 - 15), |
||||
'margin-left': 3 |
||||
}); |
||||
}, |
||||
mouseDown: function(opts) { |
||||
var mode = canv.getMode(); |
||||
if (mode !== mode_id) {return;} |
||||
|
||||
start_x = opts.start_x; |
||||
var x = start_x; |
||||
start_y = opts.start_y; |
||||
var y = start_y; |
||||
var cur_style = canv.getStyle(); |
||||
|
||||
startClientPos.x = opts.event.clientX; |
||||
startClientPos.y = opts.event.clientY; |
||||
|
||||
cur_shape = canv.addSvgElementFromJson({ |
||||
'element': 'path', |
||||
'curStyles': true, |
||||
'attr': { |
||||
'd': current_d, |
||||
'id': canv.getNextId(), |
||||
'opacity': cur_style.opacity / 2, |
||||
'style': 'pointer-events:none' |
||||
} |
||||
}); |
||||
|
||||
// Make sure shape uses absolute values
|
||||
if (/[a-z]/.test(current_d)) { |
||||
current_d = cur_lib.data[cur_shape_id] = canv.pathActions.convertPath(cur_shape); |
||||
cur_shape.setAttribute('d', current_d); |
||||
canv.pathActions.fixEnd(cur_shape); |
||||
} |
||||
cur_shape.setAttribute('transform', 'translate(' + x + ',' + y + ') scale(0.005) translate(' + -x + ',' + -y + ')'); |
||||
|
||||
canv.recalculateDimensions(cur_shape); |
||||
|
||||
var tlist = canv.getTransformList(cur_shape); |
||||
|
||||
lastBBox = cur_shape.getBBox(); |
||||
|
||||
return { |
||||
started: true |
||||
}; |
||||
}, |
||||
mouseMove: function(opts) { |
||||
var mode = canv.getMode(); |
||||
if (mode !== mode_id) {return;} |
||||
|
||||
var zoom = canv.getZoom(); |
||||
var evt = opts.event; |
||||
|
||||
var x = opts.mouse_x/zoom; |
||||
var y = opts.mouse_y/zoom; |
||||
|
||||
var tlist = canv.getTransformList(cur_shape), |
||||
box = cur_shape.getBBox(), |
||||
left = box.x, top = box.y, width = box.width, |
||||
height = box.height; |
||||
var dx = (x-start_x), dy = (y-start_y); |
||||
|
||||
var newbox = { |
||||
'x': Math.min(start_x,x), |
||||
'y': Math.min(start_y,y), |
||||
'width': Math.abs(x-start_x), |
||||
'height': Math.abs(y-start_y) |
||||
}; |
||||
|
||||
var tx = 0, ty = 0, |
||||
sy = height ? (height+dy)/height : 1, |
||||
sx = width ? (width+dx)/width : 1; |
||||
|
||||
sx = (newbox.width / lastBBox.width) || 1; |
||||
sy = (newbox.height / lastBBox.height) || 1; |
||||
|
||||
// Not perfect, but mostly works...
|
||||
if (x < start_x) { |
||||
tx = lastBBox.width; |
||||
} |
||||
if (y < start_y) {ty = lastBBox.height;} |
||||
|
||||
// update the transform list with translate,scale,translate
|
||||
var translateOrigin = svgroot.createSVGTransform(), |
||||
scale = svgroot.createSVGTransform(), |
||||
translateBack = svgroot.createSVGTransform(); |
||||
|
||||
translateOrigin.setTranslate(-(left+tx), -(top+ty)); |
||||
if (!evt.shiftKey) { |
||||
var max = Math.min(Math.abs(sx), Math.abs(sy)); |
||||
|
||||
sx = max * (sx < 0 ? -1 : 1); |
||||
sy = max * (sy < 0 ? -1 : 1); |
||||
} |
||||
scale.setScale(sx,sy); |
||||
|
||||
translateBack.setTranslate(left+tx, top+ty); |
||||
tlist.appendItem(translateBack); |
||||
tlist.appendItem(scale); |
||||
tlist.appendItem(translateOrigin); |
||||
|
||||
canv.recalculateDimensions(cur_shape); |
||||
|
||||
lastBBox = cur_shape.getBBox(); |
||||
}, |
||||
mouseUp: function(opts) { |
||||
var mode = canv.getMode(); |
||||
if (mode !== mode_id) {return;} |
||||
|
||||
var keepObject = (opts.event.clientX != startClientPos.x && opts.event.clientY != startClientPos.y); |
||||
|
||||
return { |
||||
keep: keepObject, |
||||
element: cur_shape, |
||||
started: false |
||||
}; |
||||
} |
||||
}; |
||||
}); |
||||
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,236 @@
|
||||
/*globals svgEditor, svgedit, svgCanvas, $*/ |
||||
/*jslint vars: true, eqeq: true*/ |
||||
/* |
||||
* ext-star.js |
||||
* |
||||
* |
||||
* Copyright(c) 2010 CloudCanvas, Inc. |
||||
* All rights reserved |
||||
* |
||||
*/ |
||||
|
||||
svgEditor.addExtension('star', function(S){'use strict'; |
||||
|
||||
var // NS = svgedit.NS,
|
||||
// svgcontent = S.svgcontent,
|
||||
selElems, |
||||
// editingitex = false,
|
||||
// svgdoc = S.svgroot.parentNode.ownerDocument,
|
||||
started, |
||||
newFO, |
||||
// edg = 0,
|
||||
// newFOG, newFOGParent, newDef, newImageName, newMaskID,
|
||||
// undoCommand = 'Not image',
|
||||
// modeChangeG, ccZoom, wEl, hEl, wOffset, hOffset, ccRgbEl, brushW, brushH,
|
||||
shape; |
||||
|
||||
function showPanel(on){ |
||||
var fc_rules = $('#fc_rules'); |
||||
if (!fc_rules.length) { |
||||
fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head'); |
||||
} |
||||
fc_rules.text(!on ? '' : ' #tool_topath { display: none !important; }'); |
||||
$('#star_panel').toggle(on); |
||||
} |
||||
|
||||
/* |
||||
function toggleSourceButtons(on){ |
||||
$('#star_save, #star_cancel').toggle(on); |
||||
} |
||||
*/ |
||||
|
||||
function setAttr(attr, val){ |
||||
svgCanvas.changeSelectedAttribute(attr, val); |
||||
S.call('changed', selElems); |
||||
} |
||||
|
||||
/* |
||||
function cot(n){ |
||||
return 1 / Math.tan(n); |
||||
} |
||||
|
||||
function sec(n){ |
||||
return 1 / Math.cos(n); |
||||
} |
||||
*/ |
||||
|
||||
return { |
||||
name: 'star', |
||||
svgicons: svgEditor.curConfig.extPath + 'star-icons.svg', |
||||
buttons: [{ |
||||
id: 'tool_star', |
||||
type: 'mode', |
||||
title: 'Star Tool', |
||||
position: 12, |
||||
events: { |
||||
click: function(){ |
||||
showPanel(true); |
||||
svgCanvas.setMode('star'); |
||||
} |
||||
} |
||||
}], |
||||
|
||||
context_tools: [{ |
||||
type: 'input', |
||||
panel: 'star_panel', |
||||
title: 'Number of Sides', |
||||
id: 'starNumPoints', |
||||
label: 'points', |
||||
size: 3, |
||||
defval: 5, |
||||
events: { |
||||
change: function(){ |
||||
setAttr('point', this.value); |
||||
} |
||||
} |
||||
}, { |
||||
type: 'input', |
||||
panel: 'star_panel', |
||||
title: 'Pointiness', |
||||
id: 'starRadiusMulitplier', |
||||
label: 'Pointiness', |
||||
size: 3, |
||||
defval: 2.5 |
||||
}, { |
||||
type: 'input', |
||||
panel: 'star_panel', |
||||
title: 'Twists the star', |
||||
id: 'radialShift', |
||||
label: 'Radial Shift', |
||||
size: 3, |
||||
defval: 0, |
||||
events: { |
||||
change: function(){ |
||||
setAttr('radialshift', this.value); |
||||
} |
||||
} |
||||
}], |
||||
callback: function(){ |
||||
$('#star_panel').hide(); |
||||
// var endChanges = function(){};
|
||||
}, |
||||
mouseDown: function(opts){ |
||||
var rgb = svgCanvas.getColor('fill'); |
||||
// var ccRgbEl = rgb.substring(1, rgb.length);
|
||||
var sRgb = svgCanvas.getColor('stroke'); |
||||
// var ccSRgbEl = sRgb.substring(1, rgb.length);
|
||||
var sWidth = svgCanvas.getStrokeWidth(); |
||||
|
||||
if (svgCanvas.getMode() == 'star') { |
||||
started = true; |
||||
|
||||
newFO = S.addSvgElementFromJson({ |
||||
'element': 'polygon', |
||||
'attr': { |
||||
'cx': opts.start_x, |
||||
'cy': opts.start_y, |
||||
'id': S.getNextId(), |
||||
'shape': 'star', |
||||
'point': document.getElementById('starNumPoints').value, |
||||
'r': 0, |
||||
'radialshift': document.getElementById('radialShift').value, |
||||
'r2': 0, |
||||
'orient': 'point', |
||||
'fill': rgb, |
||||
'strokecolor': sRgb, |
||||
'strokeWidth': sWidth |
||||
} |
||||
}); |
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
}, |
||||
mouseMove: function(opts){ |
||||
if (!started) { |
||||
return; |
||||
} |
||||
if (svgCanvas.getMode() == 'star') { |
||||
var x = opts.mouse_x; |
||||
var y = opts.mouse_y; |
||||
var c = $(newFO).attr(['cx', 'cy', 'point', 'orient', 'fill', 'strokecolor', 'strokeWidth', 'radialshift']); |
||||
|
||||
var cx = c.cx, cy = c.cy, fill = c.fill, strokecolor = c.strokecolor, strokewidth = c.strokeWidth, radialShift = c.radialshift, point = c.point, orient = c.orient, circumradius = (Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy))) / 1.5, inradius = circumradius / document.getElementById('starRadiusMulitplier').value; |
||||
newFO.setAttributeNS(null, 'r', circumradius); |
||||
newFO.setAttributeNS(null, 'r2', inradius); |
||||
|
||||
var polyPoints = ''; |
||||
var s; |
||||
for (s = 0; point >= s; s++) { |
||||
var angle = 2.0 * Math.PI * (s / point); |
||||
if ('point' == orient) { |
||||
angle -= (Math.PI / 2); |
||||
} else if ('edge' == orient) { |
||||
angle = (angle + (Math.PI / point)) - (Math.PI / 2); |
||||
} |
||||
|
||||
x = (circumradius * Math.cos(angle)) + cx; |
||||
y = (circumradius * Math.sin(angle)) + cy; |
||||
|
||||
polyPoints += x + ',' + y + ' '; |
||||
|
||||
if (null != inradius) { |
||||
angle = (2.0 * Math.PI * (s / point)) + (Math.PI / point); |
||||
if ('point' == orient) { |
||||
angle -= (Math.PI / 2); |
||||
} else if ('edge' == orient) { |
||||
angle = (angle + (Math.PI / point)) - (Math.PI / 2); |
||||
} |
||||
angle += radialShift; |
||||
|
||||
x = (inradius * Math.cos(angle)) + cx; |
||||
y = (inradius * Math.sin(angle)) + cy; |
||||
|
||||
polyPoints += x + ',' + y + ' '; |
||||
} |
||||
} |
||||
newFO.setAttributeNS(null, 'points', polyPoints); |
||||
newFO.setAttributeNS(null, 'fill', fill); |
||||
newFO.setAttributeNS(null, 'stroke', strokecolor); |
||||
newFO.setAttributeNS(null, 'stroke-width', strokewidth); |
||||
shape = newFO.getAttributeNS(null, 'shape'); |
||||
|
||||
return { |
||||
started: true |
||||
}; |
||||
} |
||||
|
||||
}, |
||||
mouseUp: function(){ |
||||
if (svgCanvas.getMode() == 'star') { |
||||
var attrs = $(newFO).attr(['r']); |
||||
// svgCanvas.addToSelection([newFO], true);
|
||||
return { |
||||
keep: (attrs.r != 0), |
||||
element: newFO |
||||
}; |
||||
} |
||||
}, |
||||
selectedChanged: function(opts){ |
||||
// Use this to update the current selected elements
|
||||
selElems = opts.elems; |
||||
|
||||
var i = selElems.length; |
||||
|
||||
while (i--) { |
||||
var elem = selElems[i]; |
||||
if (elem && elem.getAttributeNS(null, 'shape') === 'star') { |
||||
if (opts.selectedElement && !opts.multiselected) { |
||||
// $('#starRadiusMulitplier').val(elem.getAttribute('r2'));
|
||||
$('#starNumPoints').val(elem.getAttribute('point')); |
||||
$('#radialShift').val(elem.getAttribute('radialshift')); |
||||
showPanel(true); |
||||
} |
||||
else { |
||||
showPanel(false); |
||||
} |
||||
} else { |
||||
showPanel(false); |
||||
} |
||||
} |
||||
}, |
||||
elementChanged: function(opts){ |
||||
// var elem = opts.elems[0];
|
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,230 @@
|
||||
/*globals svgEditor, Editor, svgCanvas, $, widget*/ |
||||
/*jslint vars: true, eqeq: true, regexp: true, continue: true*/ |
||||
/* |
||||
* ext-storage.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Brett Zamir |
||||
* |
||||
*/ |
||||
/** |
||||
* This extension allows automatic saving of the SVG canvas contents upon |
||||
* page unload and and automatic retrieval of the contents upon editor load. |
||||
* The functionality was originally part of the SVG Editor, but moved to a |
||||
* separate extension to make the behavior optional, and adapted to inform |
||||
* the user of its setting of local data. |
||||
*/ |
||||
|
||||
/* |
||||
TODOS |
||||
1. Revisit on whether to use $.pref over directly setting curConfig in all |
||||
extensions for a more public API (not only for extPath and imagePath, |
||||
but other currently used config in the extensions) |
||||
*/ |
||||
svgEditor.addExtension('storage', function() { 'use strict'; |
||||
// We could empty any already-set data for them, but it
|
||||
// would be a risk for users who wanted to store but accidentally
|
||||
// said "no"; instead, we'll let those who already set it, delete it themselves;
|
||||
// to change, change the following line to true.
|
||||
var emptyStorageOnDecline = false; |
||||
|
||||
function replaceStoragePrompt (val) { |
||||
val = val ? 'storagePrompt=' + val : ''; |
||||
if (window.location.href.indexOf('storagePrompt=') > -1) { |
||||
window.location.href = window.location.href.replace(/([&?])storagePrompt=[^&]*/, (val ? '$1' : '') + val); |
||||
} |
||||
else { |
||||
window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + val; |
||||
} |
||||
} |
||||
function setSVGContentStorage (val) { |
||||
if (window.localStorage) { |
||||
var name = 'svgedit-' + svgEditor.curConfig.canvasName; |
||||
window.localStorage.setItem(name, val); |
||||
} |
||||
} |
||||
function emptyLocalStorage() { |
||||
document.cookie = 'store='; |
||||
setSVGContentStorage(''); |
||||
} |
||||
|
||||
//emptyLocalStorage();
|
||||
|
||||
/** |
||||
* Listen for unloading: If and only if opted in by the user, set the content |
||||
* document and preferences into storage: |
||||
* 1. Prevent save warnings (since we're automatically saving unsaved |
||||
* content into storage) |
||||
* 2. Use localStorage to set SVG contents (potentially too large to allow in cookies) |
||||
* 3. Use localStorage (where available) or cookies to set preferences. |
||||
*/ |
||||
function setupBeforeUnloadListener () { |
||||
window.addEventListener('beforeunload', function(e) { |
||||
// Don't save anything unless the user opted in to storage
|
||||
if (!document.cookie.match(/store=(?:prefsAndContent|prefsOnly)/)) { |
||||
return; |
||||
} |
||||
var key; |
||||
setSVGContentStorage(svgCanvas.getSvgString()); |
||||
|
||||
svgEditor.showSaveWarning = false; |
||||
|
||||
var curConfig = svgEditor.curConfig; |
||||
for (key in curConfig) { |
||||
if (curConfig.hasOwnProperty(key)) { // It's our own config, so we don't need to iterate up the prototype chain
|
||||
var d, |
||||
storage = svgEditor.storage, |
||||
val = curConfig[key], |
||||
store = (val != undefined); |
||||
key = 'svg-edit-' + key; |
||||
|
||||
if (!store) { |
||||
continue; |
||||
} |
||||
if (storage) { |
||||
storage.setItem(key, val); |
||||
} |
||||
else if (window.widget) { |
||||
widget.setPreferenceForKey(val, key); |
||||
} |
||||
else { |
||||
d = new Date(); |
||||
d.setTime(d.getTime() + 31536000000); |
||||
val = encodeURIComponent(val); |
||||
document.cookie = key + '=' + val + '; expires=' + d.toUTCString(); |
||||
} |
||||
} |
||||
} |
||||
}, false); |
||||
} |
||||
|
||||
var userStoragePref = 'noPrefsOrContent'; |
||||
|
||||
/* |
||||
// We could add locales here instead (and also thereby avoid the need
|
||||
// to keep our content within "langReady"), but this would be less
|
||||
// convenient for translators.
|
||||
$.extend(uiStrings, {confirmSetStorage: { |
||||
message: "By default and where supported, SVG-Edit can store your editor "+ |
||||
"preferences and SVG content locally on your machine so you do not "+ |
||||
"need to add these back each time you load SVG-Edit. If, for privacy "+ |
||||
"reasons, you do not wish to store this information on your machine, "+ |
||||
"you can change away from the default option below.", |
||||
storagePrefsAndContent: "Store preferences and SVG content locally", |
||||
storagePrefsOnly: "Only store preferences locally", |
||||
storagePrefs: "Store preferences locally", |
||||
storageNoPrefsOrContent: "Do not store my preferences or SVG content locally", |
||||
storageNoPrefs: "Do not store my preferences locally", |
||||
rememberLabel: "Remember this choice?", |
||||
rememberTooltip: "If you choose to opt out of storage while remembering this choice, the URL will change so as to avoid asking again." |
||||
}}); |
||||
*/ |
||||
|
||||
return { |
||||
name: 'storage', |
||||
langReady: function (lang, uiStrings) { |
||||
var storagePrompt = $.deparam.querystring(true).storagePrompt; |
||||
if ( |
||||
// If explicitly set to always prompt (e.g., so a user can alter
|
||||
// their settings)...
|
||||
storagePrompt === true || |
||||
// ...or...the user hasn't visited page preventing storage prompt (for
|
||||
// users who don't want to set cookies at all but don't want
|
||||
// continual prompts)...
|
||||
(storagePrompt !== false && |
||||
// ...and user hasn't already indicated a desire for storage
|
||||
!document.cookie.match(/store=(?:prefsAndContent|prefsOnly)/) |
||||
) |
||||
// ...then show the storage prompt.
|
||||
) { |
||||
var options = []; |
||||
if (window.localStorage) { |
||||
options.unshift( |
||||
{value: 'prefsAndContent', text: uiStrings.confirmSetStorage.storagePrefsAndContent}, |
||||
{value: 'prefsOnly', text: uiStrings.confirmSetStorage.storagePrefsOnly}, |
||||
{value: 'noPrefsOrContent', text: uiStrings.confirmSetStorage.storageNoPrefsOrContent} |
||||
); |
||||
} |
||||
else { |
||||
options.unshift( |
||||
{value: 'prefsOnly', text: uiStrings.confirmSetStorage.storagePrefs}, |
||||
{value: 'noPrefsOrContent', text: uiStrings.confirmSetStorage.storageNoPrefs} |
||||
); |
||||
} |
||||
|
||||
// Hack to temporarily provide a wide and high enough dialog
|
||||
var oldContainerWidth = $('#dialog_container')[0].style.width, |
||||
oldContainerMarginLeft = $('#dialog_container')[0].style.marginLeft, |
||||
oldContentHeight = $('#dialog_content')[0].style.height, |
||||
oldContainerHeight = $('#dialog_container')[0].style.height; |
||||
$('#dialog_content')[0].style.height = '120px'; |
||||
$('#dialog_container')[0].style.height = '170px'; |
||||
$('#dialog_container')[0].style.width = '800px'; |
||||
$('#dialog_container')[0].style.marginLeft = '-400px'; |
||||
|
||||
// Open select-with-checkbox dialog
|
||||
$.select( |
||||
uiStrings.confirmSetStorage.message, |
||||
options, |
||||
function (pref, checked) { |
||||
// If the URL was configured to always insist on a prompt, if
|
||||
// the user does indicate a wish to store their info, we
|
||||
// don't want ask them again upon page refresh so move
|
||||
// them instead to a URL which does not always prompt
|
||||
if (storagePrompt === true && pref && pref !== 'noPrefsOrContent') { |
||||
replaceStoragePrompt(); |
||||
return; |
||||
} |
||||
if (pref && pref !== 'noPrefsOrContent') { |
||||
// Regardless of whether the user opted
|
||||
// to remember the choice (and move to a URL which won't
|
||||
// ask them again), we have to assume the user
|
||||
// doesn't even want to remember their not wanting
|
||||
// storage, so we don't set the cookie or continue on with
|
||||
// setting storage on beforeunload
|
||||
document.cookie = 'store=' + pref; // 'prefsAndContent' | 'prefsOnly'
|
||||
} |
||||
else { |
||||
if (emptyStorageOnDecline) { |
||||
emptyLocalStorage(); |
||||
} |
||||
if (checked) { |
||||
// Open a URL which won't set storage and won't prompt user about storage
|
||||
replaceStoragePrompt('false'); |
||||
} |
||||
} |
||||
|
||||
// Store the preference in memory (not currently in use)
|
||||
userStoragePref = pref; |
||||
// Reset width/height of dialog (e.g., for use by Export)
|
||||
$('#dialog_container')[0].style.width = oldContainerWidth; |
||||
$('#dialog_container')[0].style.marginLeft = oldContainerMarginLeft;
|
||||
$('#dialog_content')[0].style.height = oldContentHeight; |
||||
$('#dialog_container')[0].style.height = oldContainerHeight; |
||||
|
||||
// It should be enough to (conditionally) add to storage on
|
||||
// beforeunload, but if we wished to update immediately,
|
||||
// we might wish to try setting:
|
||||
// Editor.preventStorageAccessOnLoad = true;
|
||||
// and then call:
|
||||
// Editor.loadContentAndPrefs();
|
||||
setupBeforeUnloadListener(); |
||||
|
||||
Editor.storagePromptClosed = true; |
||||
}, |
||||
null, |
||||
null, |
||||
{ |
||||
label: uiStrings.confirmSetStorage.rememberLabel, |
||||
checked: false, |
||||
tooltip: uiStrings.confirmSetStorage.rememberTooltip |
||||
} |
||||
); |
||||
} |
||||
else { |
||||
setupBeforeUnloadListener(); |
||||
} |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,293 @@
|
||||
/*globals svgEditor, svgCanvas, $, widget*/ |
||||
/*jslint vars: true, eqeq: true, regexp: true, continue: true*/ |
||||
/* |
||||
* ext-storage.js |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Brett Zamir |
||||
* |
||||
*/ |
||||
/** |
||||
* This extension allows automatic saving of the SVG canvas contents upon |
||||
* page unload (which can later be automatically retrieved upon future |
||||
* editor loads). |
||||
* |
||||
* The functionality was originally part of the SVG Editor, but moved to a |
||||
* separate extension to make the setting behavior optional, and adapted |
||||
* to inform the user of its setting of local data. |
||||
*/ |
||||
|
||||
/* |
||||
TODOS |
||||
1. Revisit on whether to use $.pref over directly setting curConfig in all |
||||
extensions for a more public API (not only for extPath and imagePath, |
||||
but other currently used config in the extensions) |
||||
2. We might provide control of storage settings through the UI besides the |
||||
initial (or URL-forced) dialog. |
||||
*/ |
||||
svgEditor.addExtension('storage', function() { |
||||
// We could empty any already-set data for users when they decline storage,
|
||||
// but it would be a risk for users who wanted to store but accidentally
|
||||
// said "no"; instead, we'll let those who already set it, delete it themselves;
|
||||
// to change, set the "emptyStorageOnDecline" config setting to true
|
||||
// in config.js.
|
||||
var emptyStorageOnDecline = svgEditor.curConfig.emptyStorageOnDecline, |
||||
// When the code in svg-editor.js prevents local storage on load per
|
||||
// user request, we also prevent storing on unload here so as to
|
||||
// avoid third-party sites making XSRF requests or providing links
|
||||
// which would cause the user's local storage not to load and then
|
||||
// upon page unload (such as the user closing the window), the storage
|
||||
// would thereby be set with an empty value, erasing any of the
|
||||
// user's prior work. To change this behavior so that no use of storage
|
||||
// or adding of new storage takes place regardless of settings, set
|
||||
// the "noStorageOnLoad" config setting to true in config.js.
|
||||
noStorageOnLoad = svgEditor.curConfig.noStorageOnLoad, |
||||
forceStorage = svgEditor.curConfig.forceStorage, |
||||
storage = svgEditor.storage; |
||||
|
||||
function replaceStoragePrompt (val) { |
||||
val = val ? 'storagePrompt=' + val : ''; |
||||
var loc = top.location; // Allow this to work with the embedded editor as well
|
||||
if (loc.href.indexOf('storagePrompt=') > -1) { |
||||
loc.href = loc.href.replace(/([&?])storagePrompt=[^&]*(&?)/, function (n0, n1, amp) { |
||||
return (val ? n1 : '') + val + (!val && amp ? n1 : (amp || '')); |
||||
}); |
||||
} |
||||
else { |
||||
loc.href += (loc.href.indexOf('?') > -1 ? '&' : '?') + val; |
||||
} |
||||
} |
||||
function setSVGContentStorage (val) { |
||||
if (storage) { |
||||
var name = 'svgedit-' + svgEditor.curConfig.canvasName; |
||||
if (!val) { |
||||
storage.removeItem(name); |
||||
} |
||||
else { |
||||
storage.setItem(name, val); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function expireCookie (cookie) { |
||||
document.cookie = encodeURIComponent(cookie) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; |
||||
} |
||||
|
||||
function removeStoragePrefCookie () { |
||||
expireCookie('store'); |
||||
} |
||||
|
||||
function emptyStorage() { |
||||
setSVGContentStorage(''); |
||||
var name; |
||||
for (name in svgEditor.curPrefs) { |
||||
if (svgEditor.curPrefs.hasOwnProperty(name)) { |
||||
name = 'svg-edit-' + name; |
||||
if (storage) { |
||||
storage.removeItem(name); |
||||
} |
||||
expireCookie(name); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// emptyStorage();
|
||||
|
||||
/** |
||||
* Listen for unloading: If and only if opted in by the user, set the content |
||||
* document and preferences into storage: |
||||
* 1. Prevent save warnings (since we're automatically saving unsaved |
||||
* content into storage) |
||||
* 2. Use localStorage to set SVG contents (potentially too large to allow in cookies) |
||||
* 3. Use localStorage (where available) or cookies to set preferences. |
||||
*/ |
||||
function setupBeforeUnloadListener () { |
||||
window.addEventListener('beforeunload', function(e) { |
||||
// Don't save anything unless the user opted in to storage
|
||||
if (!document.cookie.match(/(?:^|;\s*)store=(?:prefsAndContent|prefsOnly)/)) { |
||||
return; |
||||
} |
||||
var key; |
||||
if (document.cookie.match(/(?:^|;\s*)store=prefsAndContent/)) { |
||||
setSVGContentStorage(svgCanvas.getSvgString());
|
||||
} |
||||
|
||||
svgEditor.setConfig({no_save_warning: true}); // No need for explicit saving at all once storage is on
|
||||
// svgEditor.showSaveWarning = false;
|
||||
|
||||
var curPrefs = svgEditor.curPrefs; |
||||
|
||||
for (key in curPrefs) { |
||||
if (curPrefs.hasOwnProperty(key)) { // It's our own config, so we don't need to iterate up the prototype chain
|
||||
var val = curPrefs[key], |
||||
store = (val != undefined); |
||||
key = 'svg-edit-' + key; |
||||
if (!store) { |
||||
continue; |
||||
} |
||||
if (storage) { |
||||
storage.setItem(key, val); |
||||
} |
||||
else if (window.widget) { |
||||
widget.setPreferenceForKey(val, key); |
||||
} |
||||
else { |
||||
val = encodeURIComponent(val); |
||||
document.cookie = encodeURIComponent(key) + '=' + val + '; expires=Fri, 31 Dec 9999 23:59:59 GMT'; |
||||
} |
||||
} |
||||
} |
||||
}, false); |
||||
} |
||||
|
||||
/* |
||||
// We could add locales here instead (and also thereby avoid the need
|
||||
// to keep our content within "langReady"), but this would be less
|
||||
// convenient for translators.
|
||||
$.extend(uiStrings, {confirmSetStorage: { |
||||
message: "By default and where supported, SVG-Edit can store your editor "+ |
||||
"preferences and SVG content locally on your machine so you do not "+ |
||||
"need to add these back each time you load SVG-Edit. If, for privacy "+ |
||||
"reasons, you do not wish to store this information on your machine, "+ |
||||
"you can change away from the default option below.", |
||||
storagePrefsAndContent: "Store preferences and SVG content locally", |
||||
storagePrefsOnly: "Only store preferences locally", |
||||
storagePrefs: "Store preferences locally", |
||||
storageNoPrefsOrContent: "Do not store my preferences or SVG content locally", |
||||
storageNoPrefs: "Do not store my preferences locally", |
||||
rememberLabel: "Remember this choice?", |
||||
rememberTooltip: "If you choose to opt out of storage while remembering this choice, the URL will change so as to avoid asking again." |
||||
}}); |
||||
*/ |
||||
var loaded = false; |
||||
return { |
||||
name: 'storage', |
||||
langReady: function (data) { |
||||
var // lang = data.lang,
|
||||
uiStrings = data.uiStrings, // No need to store as dialog should only run once
|
||||
storagePrompt = $.deparam.querystring(true).storagePrompt; |
||||
|
||||
// No need to run this one-time dialog again just because the user
|
||||
// changes the language
|
||||
if (loaded) { |
||||
return; |
||||
} |
||||
loaded = true; |
||||
|
||||
// Note that the following can load even if "noStorageOnLoad" is
|
||||
// set to false; to avoid any chance of storage, avoid this
|
||||
// extension! (and to avoid using any prior storage, set the
|
||||
// config option "noStorageOnLoad" to true).
|
||||
if (!forceStorage && ( |
||||
// If the URL has been explicitly set to always prompt the
|
||||
// user (e.g., so one can be pointed to a URL where one
|
||||
// can alter one's settings, say to prevent future storage)...
|
||||
storagePrompt === true || |
||||
( |
||||
// ...or...if the URL at least doesn't explicitly prevent a
|
||||
// storage prompt (as we use for users who
|
||||
// don't want to set cookies at all but who don't want
|
||||
// continual prompts about it)...
|
||||
storagePrompt !== false && |
||||
// ...and this user hasn't previously indicated a desire for storage
|
||||
!document.cookie.match(/(?:^|;\s*)store=(?:prefsAndContent|prefsOnly)/) |
||||
) |
||||
// ...then show the storage prompt.
|
||||
)) { |
||||
|
||||
var options = []; |
||||
if (storage) { |
||||
options.unshift( |
||||
{value: 'prefsAndContent', text: uiStrings.confirmSetStorage.storagePrefsAndContent}, |
||||
{value: 'prefsOnly', text: uiStrings.confirmSetStorage.storagePrefsOnly}, |
||||
{value: 'noPrefsOrContent', text: uiStrings.confirmSetStorage.storageNoPrefsOrContent} |
||||
); |
||||
} |
||||
else { |
||||
options.unshift( |
||||
{value: 'prefsOnly', text: uiStrings.confirmSetStorage.storagePrefs}, |
||||
{value: 'noPrefsOrContent', text: uiStrings.confirmSetStorage.storageNoPrefs} |
||||
); |
||||
} |
||||
|
||||
// Hack to temporarily provide a wide and high enough dialog
|
||||
var oldContainerWidth = $('#dialog_container')[0].style.width, |
||||
oldContainerMarginLeft = $('#dialog_container')[0].style.marginLeft, |
||||
oldContentHeight = $('#dialog_content')[0].style.height, |
||||
oldContainerHeight = $('#dialog_container')[0].style.height; |
||||
$('#dialog_content')[0].style.height = '120px'; |
||||
$('#dialog_container')[0].style.height = '170px'; |
||||
$('#dialog_container')[0].style.width = '800px'; |
||||
$('#dialog_container')[0].style.marginLeft = '-400px'; |
||||
|
||||
// Open select-with-checkbox dialog
|
||||
$.select( |
||||
uiStrings.confirmSetStorage.message, |
||||
options, |
||||
function (pref, checked) { |
||||
if (pref && pref !== 'noPrefsOrContent') { |
||||
// Regardless of whether the user opted
|
||||
// to remember the choice (and move to a URL which won't
|
||||
// ask them again), we have to assume the user
|
||||
// doesn't even want to remember their not wanting
|
||||
// storage, so we don't set the cookie or continue on with
|
||||
// setting storage on beforeunload
|
||||
document.cookie = 'store=' + encodeURIComponent(pref) + '; expires=Fri, 31 Dec 9999 23:59:59 GMT'; // 'prefsAndContent' | 'prefsOnly'
|
||||
// If the URL was configured to always insist on a prompt, if
|
||||
// the user does indicate a wish to store their info, we
|
||||
// don't want ask them again upon page refresh so move
|
||||
// them instead to a URL which does not always prompt
|
||||
if (storagePrompt === true && checked) { |
||||
replaceStoragePrompt(); |
||||
return; |
||||
} |
||||
} |
||||
else { // The user does not wish storage (or cancelled, which we treat equivalently)
|
||||
removeStoragePrefCookie(); |
||||
if (pref && // If the user explicitly expresses wish for no storage
|
||||
emptyStorageOnDecline |
||||
) { |
||||
emptyStorage(); |
||||
} |
||||
if (pref && checked) { |
||||
// Open a URL which won't set storage and won't prompt user about storage
|
||||
replaceStoragePrompt('false'); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
// Reset width/height of dialog (e.g., for use by Export)
|
||||
$('#dialog_container')[0].style.width = oldContainerWidth; |
||||
$('#dialog_container')[0].style.marginLeft = oldContainerMarginLeft;
|
||||
$('#dialog_content')[0].style.height = oldContentHeight; |
||||
$('#dialog_container')[0].style.height = oldContainerHeight; |
||||
|
||||
// It should be enough to (conditionally) add to storage on
|
||||
// beforeunload, but if we wished to update immediately,
|
||||
// we might wish to try setting:
|
||||
// svgEditor.setConfig({noStorageOnLoad: true});
|
||||
// and then call:
|
||||
// svgEditor.loadContentAndPrefs();
|
||||
|
||||
// We don't check for noStorageOnLoad here because
|
||||
// the prompt gives the user the option to store data
|
||||
setupBeforeUnloadListener(); |
||||
|
||||
svgEditor.storagePromptClosed = true; |
||||
}, |
||||
null, |
||||
null, |
||||
{ |
||||
label: uiStrings.confirmSetStorage.rememberLabel, |
||||
checked: false, |
||||
tooltip: uiStrings.confirmSetStorage.rememberTooltip |
||||
} |
||||
); |
||||
} |
||||
else if (!noStorageOnLoad || forceStorage) { |
||||
setupBeforeUnloadListener(); |
||||
} |
||||
} |
||||
}; |
||||
}); |
@ -0,0 +1,67 @@
|
||||
/*globals svgEditor*/ |
||||
/* |
||||
Depends on Firefox add-on and executables from https://github.com/brettz9/webappfind
|
||||
|
||||
Todos: |
||||
1. See WebAppFind Readme for SVG-related todos |
||||
*/ |
||||
(function () {'use strict'; |
||||
|
||||
var pathID, |
||||
saveMessage = 'webapp-save', |
||||
readMessage = 'webapp-read', |
||||
excludedMessages = [readMessage, saveMessage]; |
||||
|
||||
window.addEventListener('message', function(e) { |
||||
if (e.origin !== window.location.origin || // PRIVACY AND SECURITY! (for viewing and saving, respectively)
|
||||
(!Array.isArray(e.data) || excludedMessages.indexOf(e.data[0]) > -1) // Validate format and avoid our post below
|
||||
) { |
||||
return; |
||||
} |
||||
var svgString, |
||||
messageType = e.data[0]; |
||||
switch (messageType) { |
||||
case 'webapp-view': |
||||
// Populate the contents
|
||||
pathID = e.data[1]; |
||||
|
||||
svgString = e.data[2]; |
||||
svgEditor.loadFromString(svgString); |
||||
|
||||
/*if ($('#tool_save_file')) { |
||||
$('#tool_save_file').disabled = false; |
||||
}*/ |
||||
break; |
||||
case 'webapp-save-end': |
||||
alert('save complete for pathID ' + e.data[1] + '!'); |
||||
break; |
||||
default: |
||||
throw 'Unexpected mode'; |
||||
} |
||||
}, false); |
||||
|
||||
window.postMessage([readMessage], window.location.origin !== 'null' ? window.location.origin : '*'); // Avoid "null" string error for file: protocol (even though file protocol not currently supported by add-on)
|
||||
|
||||
svgEditor.addExtension('WebAppFind', function() { |
||||
|
||||
return { |
||||
name: 'WebAppFind', |
||||
svgicons: svgEditor.curConfig.extPath + 'webappfind-icon.svg', |
||||
buttons: [{ |
||||
id: 'webappfind_save', //
|
||||
type: 'app_menu', |
||||
title: 'Save Image back to Disk', |
||||
position: 4, // Before 0-based index position 4 (after the regular "Save Image (S)")
|
||||
events: { |
||||
click: function () { |
||||
if (!pathID) { // Not ready yet as haven't received first payload
|
||||
return; |
||||
} |
||||
window.postMessage([saveMessage, pathID, svgEditor.canvas.getSvgString()], window.location.origin); |
||||
} |
||||
} |
||||
}] |
||||
}; |
||||
}); |
||||
|
||||
}()); |
@ -0,0 +1,42 @@
|
||||
/** |
||||
* Should not be needed for same domain control (just call via child frame), |
||||
* but an API common for cross-domain and same domain use can be found |
||||
* in embedapi.js with a demo at embedapi.html |
||||
*/ |
||||
/*globals svgEditor, svgCanvas*/ |
||||
svgEditor.addExtension('xdomain-messaging', function() {'use strict'; |
||||
try { |
||||
window.addEventListener('message', function(e) { |
||||
// We accept and post strings for the sake of IE9 support
|
||||
if (typeof e.data !== 'string' || e.data.charAt() === '|') { |
||||
return; |
||||
} |
||||
var cbid, name, args, message, allowedOrigins, data = JSON.parse(e.data); |
||||
if (!data || typeof data !== 'object' || data.namespace !== 'svgCanvas') { |
||||
return; |
||||
} |
||||
// The default is not to allow any origins, including even the same domain or if run on a file:// URL
|
||||
// See config-sample.js for an example of how to configure
|
||||
allowedOrigins = svgEditor.curConfig.allowedOrigins; |
||||
if (allowedOrigins.indexOf('*') === -1 && allowedOrigins.indexOf(e.origin) === -1) { |
||||
return; |
||||
} |
||||
cbid = data.id; |
||||
name = data.name; |
||||
args = data.args; |
||||
message = { |
||||
namespace: 'svg-edit', |
||||
id: cbid |
||||
}; |
||||
try { |
||||
message.result = svgCanvas[name].apply(svgCanvas, args); |
||||
} catch (err) { |
||||
message.error = err.message; |
||||
} |
||||
e.source.postMessage(JSON.stringify(message), '*'); |
||||
}, false); |
||||
} |
||||
catch (err) { |
||||
console.log('Error with xdomain message listener: ' + err); |
||||
} |
||||
}); |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 718 B |
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html> |
||||
<?php |
||||
/* |
||||
* fileopen.php |
||||
* To be used with ext-server_opensave.js for SVG-edit |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
// Very minimal PHP file, all we do is Base64 encode the uploaded file and |
||||
// return it to the editor |
||||
|
||||
$type = $_REQUEST['type']; |
||||
if (!in_array($type, array('load_svg', 'import_svg', 'import_img'))) { |
||||
exit; |
||||
} |
||||
require('allowedMimeTypes.php'); |
||||
|
||||
$file = $_FILES['svg_file']['tmp_name']; |
||||
|
||||
$output = file_get_contents($file); |
||||
|
||||
$prefix = ''; |
||||
|
||||
// Make Data URL prefix for import image |
||||
if ($type == 'import_img') { |
||||
$info = getimagesize($file); |
||||
if (!in_array($info['mime'], $allowedMimeTypesBySuffix)) { |
||||
exit; |
||||
} |
||||
$prefix = 'data:' . $info['mime'] . ';base64,'; |
||||
} |
||||
?> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<script> |
||||
|
||||
top.svgEditor.processFile("<?php
|
||||
|
||||
// This should be safe since SVG edit does its own filtering (e.g., if an SVG file contains scripts) |
||||
echo $prefix . base64_encode($output); |
||||
|
||||
?>", "<?php echo $type; ?>");
|
||||
</script> |
||||
</head><body></body> |
||||
</html> |
@ -0,0 +1,60 @@
|
||||
<?php |
||||
/* |
||||
* filesave.php |
||||
* To be used with ext-server_opensave.js for SVG-edit |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Alexis Deveria |
||||
* |
||||
*/ |
||||
|
||||
function encodeRFC5987ValueChars ($str) { |
||||
// See http://tools.ietf.org/html/rfc5987#section-3.2.1 |
||||
// For better readability within headers, add back the characters escaped by rawurlencode but still allowable |
||||
// Although RFC3986 reserves "!" (%21), RFC5987 does not |
||||
return preg_replace_callback('@%(2[1346B]|5E|60|7C)@', function ($matches) { |
||||
return chr('0x' . $matches[1]); |
||||
}, rawurlencode($str)); |
||||
} |
||||
|
||||
require('allowedMimeTypes.php'); |
||||
|
||||
$mime = !isset($_POST['mime']) || !in_array($_POST['mime'], $allowedMimeTypesBySuffix) ? 'image/svg+xml;charset=UTF-8' : $_POST['mime']; |
||||
|
||||
if (!isset($_POST['output_svg']) && !isset($_POST['output_img'])) { |
||||
die('post fail'); |
||||
} |
||||
|
||||
$file = ''; |
||||
|
||||
$suffix = '.' . array_search($mime, $allowedMimeTypesBySuffix); |
||||
|
||||
if (isset($_POST['filename']) && strlen($_POST['filename']) > 0) { |
||||
$file = $_POST['filename'] . $suffix; |
||||
} else { |
||||
$file = 'image' . $suffix; |
||||
} |
||||
|
||||
if ($suffix == '.svg') { |
||||
$contents = $_POST['output_svg']; |
||||
} else { |
||||
$contents = $_POST['output_img']; |
||||
$pos = (strpos($contents, 'base64,') + 7); |
||||
$contents = base64_decode(substr($contents, $pos)); |
||||
} |
||||
|
||||
header("Cache-Control: public"); |
||||
header("Content-Description: File Transfer"); |
||||
|
||||
// See http://tools.ietf.org/html/rfc6266#section-4.1 |
||||
header("Content-Disposition: attachment; filename*=UTF-8''" . encodeRFC5987ValueChars( |
||||
// preg_replace('@[\\\\/:*?"<>|]@', '', $file) // If we wanted to strip Windows-disallowed characters server-side (but not a security issue, so we can strip client-side instead) |
||||
$file |
||||
)); |
||||
header("Content-Type: " . $mime); |
||||
header("Content-Transfer-Encoding: binary"); |
||||
|
||||
echo $contents; |
||||
|
||||
?> |
After Width: | Height: | Size: 8.1 KiB |
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<title></title> |
||||
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> |
||||
</head> |
||||
<body> |
||||
<form action="filesave.php"> |
||||
<input type="hidden" value="" name="output_svg" /> |
||||
</form> |
||||
<script> |
||||
/*globals $*/ |
||||
function xhtmlEscape(str) {'use strict'; |
||||
return str.replace(/&(?!amp;)/g, '&').replace(/"/g, '"').replace(/</g, '<'); // < is actually disallowed above anyways |
||||
} |
||||
$('<form>').attr({ |
||||
method: 'post', |
||||
action: 'filesave.php', |
||||
target: 'output_frame' |
||||
}).append('<input type="hidden" name="output_svg" value="' + xhtmlEscape('<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><script>alert(document.cookie);<\/script><\/svg>') + '">') |
||||
.appendTo('body') |
||||
.submit().remove(); |
||||
</script> |
||||
|
||||
</body> |
||||
</html> |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> |
||||
</head> |
||||
<body> |
||||
|
||||
<h1>Select an image:</h1> |
||||
<a href="smiley.svg">smiley.svg</a> |
||||
<br> |
||||
<a href="../../images/logo.png">logo.png</a> |
||||
|
||||
<script> |
||||
/*globals $*/ |
||||
/*jslint vars: true*/ |
||||
$('a').click(function() {'use strict'; |
||||
var meta_str; |
||||
var href = this.href; |
||||
var target = window.parent; |
||||
// Convert Non-SVG images to data URL first |
||||
// (this could also have been done server-side by the library) |
||||
if (this.href.indexOf('.svg') === -1) { |
||||
|
||||
meta_str = JSON.stringify({ |
||||
name: $(this).text(), |
||||
id: href |
||||
}); |
||||
target.postMessage(meta_str, '*'); |
||||
|
||||
var img = new Image(); |
||||
img.onload = function() { |
||||
var canvas = document.createElement('canvas'); |
||||
canvas.width = this.width; |
||||
canvas.height = this.height; |
||||
// load the raster image into the canvas |
||||
canvas.getContext('2d').drawImage(this, 0, 0); |
||||
// retrieve the data: URL |
||||
var dataurl; |
||||
try { |
||||
dataurl = canvas.toDataURL(); |
||||
} catch(err) { |
||||
// This fails in Firefox with file:// URLs :( |
||||
alert("Data URL conversion failed: " + err); |
||||
dataurl = ""; |
||||
} |
||||
target.postMessage('|' + href + '|' + dataurl, '*'); |
||||
}; |
||||
img.src = href; |
||||
} else { |
||||
// Send metadata (also indicates file is about to be sent) |
||||
meta_str = JSON.stringify({ |
||||
name: $(this).text(), |
||||
id: href |
||||
}); |
||||
target.postMessage(meta_str, '*'); |
||||
// Do ajax request for image's href value |
||||
$.get(href, function(data) { |
||||
data = '|' + href + '|' + data; |
||||
// This is where the magic happens! |
||||
target.postMessage(data, '*'); |
||||
|
||||
}, 'html'); // 'html' is necessary to keep returned data as a string |
||||
} |
||||
return false; |
||||
}); |
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 613 B |
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,16 @@
|
||||
<?php |
||||
// You must first create a file "savefile_config.php" in this extensions directory and do whatever |
||||
// checking of user credentials, etc. that you wish; otherwise anyone will be able to post SVG |
||||
// files to your server which may cause disk space or possibly security problems |
||||
require('savefile_config.php'); |
||||
if (!isset($_POST['output_svg'])) { |
||||
print "You must supply output_svg"; |
||||
exit; |
||||
} |
||||
$svg = $_POST['output_svg']; |
||||
$filename = (isset($_POST['filename']) && !empty($_POST['filename']) ? preg_replace('@[\\\\/:*?"<>|]@u', '_', $_POST['filename']) : 'saved') . '.svg'; // These characters are indicated as prohibited by Windows |
||||
|
||||
$fh = fopen($filename, 'w') or die("Can't open file"); |
||||
fwrite($fh, $svg); |
||||
fclose($fh); |
||||
?> |
@ -0,0 +1,3 @@
|
||||
<?php |
||||
|
||||
?> |
@ -0,0 +1,21 @@
|
||||
{"data": { |
||||
"bat": "m143.40468,206.20782c-0.49527,-8.51843 -1.60919,-23.17813 -13.91826,-16.10698c-5.69614,2.11977 -22.79842,7.51244 -14.5293,-3.62979c-4.53243,-11.10219 -22.97476,5.42294 -24.24419,-2.29205c9.91943,-10.64906 -4.7813,-22.35199 -15.17139,-14.80321c-6.39341,1.76166 -19.4276,12.91188 -21.9789,9.37552c5.93793,-7.52516 19.31312,-22.93167 3.18112,-27.55084c-17.5302,-3.97589 -32.93319,8.09392 -48.1771,14.68205c-4.57452,3.57106 -10.39707,2.94862 -4.70683,-2.99597c19.7419,-30.64111 50.72646,-53.70857 85.10566,-65.43076c8.33369,-2.70812 21.16511,-8.70424 21.41656,4.97536c5.15313,12.59007 8.81947,28.33097 22.08977,34.80917c15.28362,8.49702 4.32793,-24.52711 20.16156,-12.05241c6.66379,4.32207 20.92268,-3.91697 22.87737,0.71265c-3.88257,5.55579 -5.70456,15.41883 4.55382,10.3489c17.81406,-7.0078 30.89859,-22.70471 39.67026,-39.22318c9.16278,-1.3768 18.27335,5.56162 26.62798,9.24753c27.74529,15.70954 44.86571,45.39448 52.13728,75.65768c-7.5513,-4.24557 -14.87186,-12.828 -24.02185,-16.20273c-9.75534,-4.87419 -20.75789,-5.73363 -31.48114,-5.39867c-5.02554,5.98985 -7.99353,13.42558 -3.62529,20.86708c3.80284,14.25407 -12.13176,-4.90576 -17.88498,-6.20744c-10.74191,-7.67955 -21.03323,3.92213 -18.67635,14.82222c-2.42909,2.10051 -9.92085,-3.5218 -14.32263,-2.86926c-9.05026,-2.72606 -15.42468,1.20085 -9.97261,10.61331c-7.98315,-0.97417 -19.64474,-13.28291 -26.70493,-1.69363c-3.0779,2.89514 -4.66377,8.66307 -8.40561,10.34547z", |
||||
"bull": "m247.95622,28.12305c-12.19972,2.23394 -21.61887,16.95667 -20.74588,29.01591c1.44209,13.7284 17.93463,5.12075 22.80087,1.23941c-2.90906,11.49207 -26.14024,13.85409 -24.83565,-0.12387c-17.69467,13.05878 -30.95056,33.52913 -52.86781,40.14553c-19.77757,4.59067 -40.50726,3.0742 -60.45068,0.39017c-12.12445,-1.13604 -23.69794,-7.26224 -35.91985,-5.97962c-13.09134,3.59118 -23.59412,13.16467 -36.65408,16.93906c-13.77014,6.03062 -8.51065,22.6805 -9.70401,34.47604c0.36829,17.55977 -2.85913,36.16287 -15.09811,49.55722c-7.11563,10.54993 -7.76443,24.43282 -13.48046,35.44298c18.99679,-0.19772 7.54522,-25.59486 17.99728,-35.91756c14.58305,-6.75189 14.16003,-25.2986 16.19452,-38.95529c1.4834,-5.51941 0.74519,-25.08188 6.61763,-22.44334c7.21924,16.22275 11.33028,34.35388 9.69645,52.12326c-9.5553,8.96404 -24.74576,15.34862 -22.54872,31.87126c0.72458,14.96526 -8.38036,25.74033 -15.4907,37.48604c4.56749,6.89259 1.00608,20.69472 14.11573,16.65324c8.77115,1.68887 13.10825,-2.37698 4.45589,-8.42346c-13.07829,-12.56499 5.13552,-29.16821 12.20585,-40.168c7.30689,-12.28131 22.16195,-12.86801 33.02653,-20.13979c15.00671,-8.95824 25.97935,-22.79263 35.92999,-36.78595c8.71432,9.26259 -13.75776,17.74474 -17.07076,27.20334c-7.22755,7.75058 -20.15694,21.85651 -2.99889,26.65347c13.26358,4.53796 25.75887,13.79143 25.35975,28.30255c0.22051,9.84615 24.38135,18.76527 19.43611,2.77341c-8.3609,-14.92882 -28.34064,-20.79163 -33.65835,-37.70844c-3.6715,-12.98383 11.61318,-19.27325 18.93525,-8.74269c12.96419,-1.41862 26.57983,-10.04028 40.80356,-11.3647c14.66299,-5.4577 18.06927,14.52957 29.8145,19.76668c9.79047,9.67969 18.77974,21.93582 17.54285,36.4783c1.1926,12.30893 9.52699,25.16873 23.92239,23.90201c16.80026,-2.80963 -5.10118,-20.70317 -12.79568,-24.81631c-11.14896,-13.29695 -9.30676,-32.20113 -16.24597,-47.51259c-5.00217,-4.52083 0.22685,-26.45532 0.40694,-10.76334c-0.90044,17.98242 24.73294,7.66248 22.97939,-6.09152c4.36166,-10.95654 -11.58513,-4.19417 -9.47617,-15.24252c-1.73091,-13.74937 -0.74355,-30.75096 -12.6731,-40.17292c-6.8737,-6.7591 -4.7831,-7.41829 2.70201,-2.07212c14.59439,7.55807 11.75914,24.79303 12.78276,38.37691c4.22589,17.80225 21.30753,-5.24332 20.80711,-14.89757c2.92691,-20.96336 12.92174,-42.46973 32.42046,-52.68139c-5.2402,-2.56694 -30.94765,6.73531 -28.79092,-4.9679c10.59921,9.00244 25.18661,-0.80075 37.71524,1.85265c16.62164,0.68233 20.74963,-22.79317 2.53195,-23.94116c-11.78333,-6.98062 -21.92947,-19.31897 -37.15829,-18.35906c-22.07759,7.39931 -8.43927,-13.11165 -2.53694,-22.37832zm21.60802,9.50184c-1.66193,5.79599 -12.61478,17.62506 0.56973,12.83867c1.89221,-3.91013 1.1131,-8.97168 -0.56973,-12.83867zm-3.4996,26.34877c5.90985,9.81916 -11.80539,1.02993 0,0zm24.39551,10.15293c-2.05029,4.18517 5.51468,4.9676 -0.32553,4.96455c-3.08926,4.10121 -4.4324,-5.29953 0.32553,-4.96455z", |
||||
"camel": "m105.23692,274.01276c10.42601,-6.85904 -13.23158,-12.66162 -16.74452,-19.13904c-10.34003,-12.71768 -13.56136,-29.62202 -16.44211,-45.3219c4.95107,-8.43617 2.94567,-17.1517 4.73958,-25.91959c8.77055,-13.01825 13.62244,-28.29056 22.43666,-41.26205c9.81532,2.07159 20.42883,10.03517 30.26162,13.06094c8.8764,15.9576 -7.35719,29.2457 -5.44854,44.69498c3.72314,14.40366 -6.25101,26.40735 -8.25558,39.83173c0.06986,12.69931 11.61848,25.55493 24.23922,16.82416c-0.64038,-9.26088 -18.64324,-12.13185 -10.58395,-25.1562c2.65187,-13.46596 11.34413,-24.24693 17.91676,-35.55937c-3.71349,-13.26427 1.2287,-30.0778 9.59569,-40.02118c8.49532,8.2068 14.36288,22.63718 15.66277,34.12883c0.16464,13.17332 17.70532,21.98904 17.37173,37.50392c1.31061,13.71669 7.73416,26.77841 16.64259,34.21387c4.65822,9.68192 33.56361,4.63116 18.16859,-6.87111c-12.71291,-11.47281 -27.33986,-23.63953 -29.27029,-41.92267c-5.27388,-10.85303 6.84843,-26.2316 -8.03899,-30.76501c0.92262,-14.70679 -2.97293,-31.40077 5.40811,-44.51862c12.07202,-10.31686 29.7518,-11.08165 41.29709,-22.49498c14.0099,-9.28757 21.96306,-24.50421 26.44456,-40.2729c6.78918,-7.60537 17.33322,-24.04447 29.06323,-15.49826c11.50851,7.1165 3.01477,-10.78561 9.62354,-14.73589c-5.45358,-19.67866 -27.58679,-10.231 -41.40082,-15.14074c-12.54193,-8.39989 -25.52765,-3.55679 -34.67496,6.0378c-6.85069,3.08698 -3.14447,11.16754 3.57637,8.12783c-4.82072,16.0155 -11.46542,33.6401 -26.07742,43.1243c-16.7653,7.33572 -26.11705,-14.39821 -36.07204,-23.83146c-10.86565,-10.63506 -17.60231,-26.15123 -31.2878,-33.45204c-19.0355,-4.82 -33.49794,11.89507 -47.87449,21.30644c-14.26775,7.14342 -31.39994,10.67369 -41.13367,24.60683c-16.15372,19.41527 -5.91326,48.70807 -22.89915,67.80049c-6.99636,10.58755 -22.39972,18.21231 -20.28306,32.7636c7.50211,15.58318 0.92728,34.18239 5.02367,50.94881c3.02735,12.11708 7.50982,27.68176 22.18437,29.48123c11.54434,7.31882 17.83198,-8.01192 5.60827,-12.45197c-14.75563,-6.55614 -16.77197,-25.01053 -17.95741,-39.18628c-3.25454,-14.0275 7.86033,-23.30806 12.45064,-34.31837c-3.87635,-10.75487 9.79252,-25.37375 18.46243,-23.19664c-6.47958,9.9541 -15.94005,22.87103 -0.60315,31.06966c-0.20134,0.50305 2.25023,-9.18846 6.19941,-12.10042c-0.58951,-7.59273 -8.29086,-14.05685 -0.12206,-21.73929c14.33151,-9.55606 11.17263,18.16365 8.19696,26.02383c-0.15744,12.07039 -16.33567,21.65707 -8.0749,33.75336c9.04985,14.91904 13.29631,32.04613 16.76897,48.94904c4.98299,14.02148 17.57185,24.27618 33.31381,20.65268l2.58825,-0.02829z", |
||||
"cat": "m111.55353,268.57376c-12.38409,-9.66019 -26.54234,-3.66064 -40.17431,-4.38614c-11.9392,-10.23105 -26.45395,2.16507 -37.70551,-7.68756c-14.55057,-12.97847 10.67308,-21.10451 5.29292,-36.51207c-0.60409,-22.18257 -10.10326,-42.27484 -20.08909,-60.91698c-7.07184,-14.82233 -4.56518,-31.85568 -6.84103,-47.71686c-8.17014,-11.38815 -16.33076,-25.48726 -6.60928,-39.55753c10.981,-11.86565 5.81937,-27.47561 1.50418,-41.19728c11.10318,3.26597 23.84772,18.14071 38.4552,15.16287c9.93419,-6.39761 15.9648,-0.073 17.62218,11.6365c5.20781,15.03792 8.24681,35.60265 24.68163,40.4529c17.26196,4.92876 36.58965,6.02341 50.24171,20.484c24.96439,23.38795 36.53986,60.25828 35.56061,95.79604c2.26117,16.61917 23.11539,7.79897 33.43477,10.24997c17.3054,-0.76804 33.91818,4.66769 50.66774,8.39909c14.94962,3.97684 27.61282,-8.59756 41.65988,-10.10515c2.37341,14.53128 -16.06888,20.58582 -26.14133,25.0639c-11.95706,5.08662 -24.89989,5.20694 -37.1826,1.47655c-26.55344,-6.62021 -54.69701,-4.88251 -79.92953,6.75992c-13.61838,5.01505 -26.84254,14.51093 -41.6569,13.32327l-2.79124,-0.72549l0,0.00003z", |
||||
"chick": "m76.6114,300.49948c-0.94218,-11.68399 1.80264,-23.81186 -2.78349,-35.22473c-7.45612,-25.10127 -23.93798,-47.16536 -31.36633,-72.21014c-3.21228,-16.80365 -8.65163,-34.79272 -2.2363,-51.43718c9.2771,-20.44891 24.58445,-39.1077 45.00853,-51.46853c11.45798,-6.87112 33.39433,1.8131 33.44485,-16.51133c3.62297,-20.89642 15.43811,-40.3082 30.48538,-56.28489c17.86485,-17.49571 47.98021,-20.77926 71.28149,-10.72216c13.19823,4.36545 26.92773,11.92505 29.85556,25.342c-2.0408,13.23198 13.36339,22.40786 12.41484,34.53756c-13.98409,-0.03379 -27.4267,2.25514 -39.10866,9.99602c-8.20006,3.8867 -26.4511,6.08187 -12.88864,15.86904c12.71146,21.22634 12.39029,48.02362 0.02443,69.35255c-8.24092,16.61523 -18.78058,33.14909 -36.37866,43.00504c-13.36313,9.14961 -27.77914,16.93257 -42.68192,23.79149c-11.62872,11.1774 5.32764,27.26614 9.71201,38.8335c3.36447,3.54044 4.524,10.84882 11.15869,9.08932c15.28535,0.25418 32.76015,-1.9313 44.98404,7.81229c-8.94319,8.25949 -25.89421,-1.41025 -38.02573,4.80051c-8.78024,5.75812 -19.06332,7.43823 -31.36371,7.58014c-13.23612,4.30203 -27.23189,-3.61423 -39.08569,1.66962c-4.11388,0.41238 -8.38321,3.40195 -12.45068,2.1799zm58.28394,-16.2124c-4.84233,-9.87674 -20.53861,1.56897 -6.10292,2.32874c2.30783,-0.47092 12.8125,3.03821 6.10292,-2.32874zm-17.85122,-4.32443c14.82944,-9.3367 7.74453,-25.48042 -1.79045,-35.63309c-3.24258,-2.97528 -4.73457,-8.94336 -9.13439,-9.94019c-6.73362,0 -13.46722,0 -20.20084,0c-4.65086,8.49229 -2.48404,17.86589 0.89217,26.43201c3.51066,10.88467 6.16319,28.60654 23.56189,23.00385c2.6806,-0.4599 4.89924,-2.07458 6.67162,-3.86258z", |
||||
"cormorant": "m143.5415,0.99936c-4.24326,11.41716 -19.29625,4.15632 -24.74561,12.50427c0.52748,6.07653 -8.29025,7.80436 -13.00653,8.43892c-8.50133,3.84879 -22.80692,-4.79845 -26.45377,4.01417c10.96676,1.70561 23.50823,0.97173 33.37776,7.63992c6.81084,8.30698 18.80501,9.32233 23.86815,19.00227c5.01492,11.90637 0.21405,24.79235 -6.1066,35.16777c-5.40714,11.63457 -14.24293,22.0266 -17.15868,34.6068c0.20795,13.02319 4.72718,25.69211 3.20084,38.80902c0.9605,10.14279 6.64024,19.14648 10.04536,28.64983c5.00912,10.57565 9.93535,21.70013 17.62276,30.53665c7.02892,8.87558 29.89705,11.67009 23.64502,24.91443c-4.01926,11.10844 -7.40147,24.48637 -19.39478,29.5565c-9.50977,5.9848 -21.3932,8.93677 -29.06369,17.37073c3.84956,0.36453 28.16327,-14.36331 23.8996,1.69739c-9.52658,11.2518 16.95053,-0.69223 23.42963,-2.18207c4.74442,-0.99915 4.29691,14.62488 8.52766,3.80228c5.95903,-10.08762 6.23502,-21.34366 11.26126,-30.51312c2.4781,-10.25645 3.82962,7.94009 9.64467,10.12222c7.07556,9.50238 7.79694,-14.07236 11.23129,-19.70615c2.62747,-8.54028 4.63826,-23.31885 8.02322,-27.91885c0.19868,-2.83281 6.58795,3.93147 5.0274,-3.78851c0.90347,-23.48584 -1.83659,-48.86755 -15.67365,-68.59196c-9.60602,-8.62669 -13.22336,-21.57266 -21.36568,-31.47811c-10.01912,-4.8186 -8.05391,-19.66993 -20.19205,-21.12443c-2.75856,-10.2361 2.62035,-22.86311 4.63016,-33.73514c2.78795,-10.12834 8.4742,-20.66132 3.52232,-31.15684c-3.76698,-10.86702 -11.83783,-21.03737 -23.57631,-23.51091c-5.21049,-2.63619 -9.89668,-4.17218 -2.89241,-7.84742c4.71588,-7.73713 -7.28709,7.39913 -1.58588,-2.982l0.25854,-2.29765l-0.00003,0zm-57.08003,24.11987c12.78673,0.33177 -8.83535,0.35227 0,0zm92.46721,218.72338c11.05893,4.6954 0.80228,21.55537 -5.46918,26.98338c-13.1071,-3.20859 2.39713,-19.21964 5.46918,-26.98338l0,0zm-10.64413,31.82323c-5.88483,2.41168 -15.44353,4.13849 -3.83093,0.46683l1.97208,-0.34274l1.85886,-0.12408z", |
||||
"cow": "m28.0749,243.56958c-11.25466,-1.13762 -0.26117,-18.72878 -4.5063,-26.87576c-0.04291,-11.99254 -4.49496,-23.80263 -3.04635,-35.73141c8.85702,-21.03091 1.47632,-43.99974 -0.46577,-65.6628c-0.878,-4.78294 -0.85219,-17.06834 -3.03475,-6.14601c-6.04425,18.41563 -0.13999,41.17824 -5.30961,59.82921c-8.64015,10.38419 -15.16653,-6.09071 -6.91858,-12.40807c9.63606,-15.16887 7.3071,-35.6004 7.63113,-54.51396c-0.41477,-11.95865 4.38277,-26.97649 18.58104,-27.31744c12.14677,-0.91866 23.64877,4.86966 35.90276,4.15359c35.73927,0.55689 71.83095,0.86755 107.11801,-5.64501c17.61354,-4.0591 35.14902,3.10693 52.79015,0.20057c9.91351,1.07068 15.15811,-3.56471 10.78886,-12.26689c7.38425,-5.09429 13.06598,9.66071 16.34573,-3.48148c11.89191,-8.19559 13.54935,15.99933 26.71921,9.16614c15.88589,2.05862 -6.90274,16.26875 6.39813,23.38159c8.04169,6.20473 20.35629,21.57409 4.35831,26.00379c-13.75446,-0.96602 -27.54028,-0.06377 -41.30312,0.60226c-6.36993,10.6367 -19.62016,18.61491 -18.16837,32.55296c-1.1003,16.62756 -12.74783,33.02081 -28.69196,38.18489c-6.81386,-1.34894 -9.78644,0.85432 -8.9351,7.83342c-3.52046,9.11967 -4.14098,18.73875 -3.72333,28.43974c-1.04204,5.34808 1.17265,9.50755 4.32187,13.62691c-3.70361,6.41692 -24.92326,2.61598 -16.88379,-9.5238c2.05592,-15.92261 -0.36317,-31.91132 -2.16568,-47.74242c-8.4565,-6.01532 -18.70856,-3.81294 -27.26753,1.0208c-18.88187,6.9252 -40.73763,13.48228 -60.10471,4.59438c-10.79734,-3.01547 -27.0833,-5.25847 -35.10848,3.84904c-3.611,13.73518 -2.64567,28.48619 -5.7238,42.42607c-0.05178,7.28806 6.88112,13.54532 -4.86428,11.51134c-4.90851,0.11278 -9.83028,0.26732 -14.73372,-0.06165zm10.02217,-15.5108c1.93175,-6.52728 -2.78621,-23.11049 -3.1906,-7.64299c-1.60691,4.90746 0.4367,28.47777 2.83738,12.83046c0.15187,-1.72662 0.25968,-3.45683 0.35322,-5.18747z", |
||||
"crow_2": "m299.86716,62.24508c-8.36279,-13.35279 -25.79254,-10.94299 -38.7652,-13.97612c-10.77151,-4.46517 -27.26852,-8.74568 -34.93257,4.02601c-10.22766,11.92024 -19.30536,24.77381 -27.38379,38.20519c-16.9417,18.56395 -37.51366,33.44937 -58.19264,47.49408c-17.41919,8.55826 -36.48907,15.23247 -50.59015,29.17691c-26.77713,17.17799 -59.39612,20.30975 -89.00278,30.37996c5.24787,1.82477 28.48156,-4.80739 12.86404,2.45506c-11.61908,3.82678 4.57293,7.38318 9.74338,4.83008c-4.08242,4.36552 -5.2054,4.72249 -0.18473,4.65681c-9.12115,5.09712 20.25491,-1.58305 4.07883,5.5506c-7.04263,2.05971 -24.35976,21.06046 -8.48079,12.5005c14.76321,-6.14401 30.50038,-9.23448 45.85791,-13.45705c-11.48634,11.80891 -27.85513,19.19374 -35.74965,34.16698c0.17943,3.86479 12.21982,-7.85281 17.31087,-9.77229c28.95095,-17.49719 59.28473,-33.71347 91.89844,-43.16046c4.45381,1.07288 5.32478,12.99994 14.00563,6.90237c0.76199,7.59987 19.82927,-11.92125 14.84979,3.30377c8.25793,-13.03635 -0.01482,14.1528 7.62892,18.26904c3.90089,5.15268 19.92041,12.26512 6.86195,14.03082c-5.77165,8.63597 8.09146,-3.46425 11.11865,4.62627c11.3129,4.10901 3.07231,8.32173 -5.11652,5.83363c-6.27592,-0.83809 -7.57079,7.40965 -1.22719,2.29182c7.57507,5.19347 19.60568,3.32813 29.26515,5.56088c9.65308,0.80066 21.35422,-9.88435 25.01279,-7.29437c-8.89755,-6.38512 -21.77765,1.41119 -31.54323,-3.51736c-2.05963,-6.62599 22.89082,2.37143 22.94131,-8.82851c11.68727,-1.08766 -9.82895,-2.59717 -14.00406,0.04509c-14.38026,0.76889 -21.75813,-12.59969 -31.88164,-20.19017c0.30659,-15.75429 11.86186,-29.28856 23.95569,-38.18524c15.77855,-9.50124 31.96706,-21.73888 36.43575,-40.70174c4.63271,-16.88809 7.21239,-34.29048 9.31848,-51.60873c2.84918,-11.17406 11.03882,-21.49306 23.60089,-20.65947c6.77469,-0.94415 13.57404,-1.72816 20.30646,-2.95438z", |
||||
"crow": "m65.63132,15.69366c7.23991,-11.19251 23.71874,-13.17996 36.20271,-14.69413c13.92134,1.25098 24.65079,12.10254 32.81262,22.59631c9.49452,8.5772 21.08662,15.85565 25.83853,28.41352c12.01437,5.95259 26.19815,9.13653 33.55229,21.87244c11.11548,14.36729 17.52112,31.75739 23.31628,48.60368c0.92021,12.5585 6.47,24.01521 8.36046,36.46043c3.24197,12.33818 5.82637,24.53572 9.31963,36.76498c3.88237,12.71416 9.39792,24.81319 13.2628,37.54517c7.05891,11.17328 13.48564,22.96204 17.86821,35.4054c-10.48648,-0.88873 0.96857,15.8573 2.93524,22.45895c2.86746,13.58783 -12.84537,5.80856 -15.59308,-0.46634c-9.70456,9.1796 -29.57259,11.24072 -38.3669,-0.80743c-9.26392,-12.20752 -14.38051,-27.69696 -27.16855,-36.53391c-5.02811,-4.18506 -9.90665,-22.45958 -11.7061,-6.32031c6.38489,16.05743 -18.74254,6.90547 -27.66772,9.78912c-15.99664,-3.21661 6.07263,-12.35889 12.86923,-11.27576c6.38602,-6.35408 17.01372,-16.99594 1.7589,-20.33147c-10.44731,-4.15326 -23.84068,-14.68553 -29.71439,0.99188c-7.37552,3.90117 -20.59412,22.40862 -5.95329,23.77255c5.91614,12.10878 -17.0737,3.35048 -23.49316,6.21452c-6.05255,1.90814 -21.13758,-1.4375 -7.08788,-4.49867c12.08796,-1.9845 17.85132,-16.8317 25.44044,-25.82515c-0.25166,-11.53856 -9.48829,-20.69617 -16.41167,-29.40816c-7.36517,-12.27962 -17.64172,-22.79747 -22.75925,-36.23717c-3.35689,-13.95544 -9.74807,-26.85826 -12.98938,-40.84583c-3.65936,-14.01762 -7.85575,-29.82359 0.01893,-43.25633c3.58914,-11.78534 5.08364,-22.78083 -2.44828,-32.4814c-10.40722,-8.4583 -25.19866,-5.06594 -37.19873,-10.67507c-1.4463,-9.05923 17.76661,-12.5158 26.11695,-14.53937c3.17027,-0.11009 5.59681,-2.76167 8.88516,-2.69248z", |
||||
"dog": "m100.16203,296.98279c-8.8212,-9.63385 1.38332,-24.43997 -0.42293,-36.27057c0.75693,-11.26283 0.70357,-22.55605 0.97627,-33.83612c-5.62751,-3.03004 -11.14646,-9.8163 -17.39571,-9.15442c-9.39647,12.28885 -8.36188,28.63301 -15.80033,41.86707c-4.14935,12.68604 -14.20047,25.1369 -28.95629,23.20023c-15.78228,0.24448 -5.31179,-12.67972 3.94138,-14.51392c15.5036,-7.47278 14.489,-27.14363 17.24157,-41.59114c1.02824,-10.18478 3.24236,-20.5625 3.54647,-30.63432c-6.4542,-14.31418 -15.78849,-28.37114 -13.67442,-44.85196c-0.91037,-17.78856 4.2768,-37.23788 -5.08019,-53.53189c-5.56927,-15.61405 3.8713,-31.59072 2.9399,-47.52759c0.9721,-14.78285 -5.20505,-30.54867 1.20562,-44.61136c13.7762,-15.53139 12.97964,13.29988 18.95111,20.54415c5.64886,15.40877 24.7487,10.76537 35.50636,4.24826c7.2022,-4.10769 16.87807,-28.32801 24.44378,-14.32351c3.37997,14.22579 -6.14093,25.38077 -12.22646,36.88495c-6.86581,22.01683 5.86861,44.08519 20.93388,59.44197c24.83763,26.97977 44.07555,59.68134 54.0882,95.03609c1.31316,14.68071 3.98535,28.23558 12.82726,40.18617c10.20438,10.1714 26.16472,9.68739 39.32852,13.25957c9.22101,2.52521 30.75206,5.14639 26.47435,17.3808c-14.74448,2.4689 -30.09541,0.23105 -44.90068,-1.32291c-17.28331,-2.73001 -35.00906,-7.2897 -49.09666,-18.1597c-14.62904,-9.61427 -18.7715,20.00995 -34.01671,10.65375c-2.19362,-7.70334 10.66454,-19.74266 -6.53938,-19.26297c-6.33104,0.30879 -15.00338,1.82024 -19.76239,4.89166c1.07452,12.16098 2.04812,24.36316 4.2893,36.36713c-1.78267,6.00809 -14.15643,12.93057 -18.82182,5.63058z", |
||||
"duck": "m185.95239,299.43112c-13.71118,-7.29123 11.45862,-7.3541 17.23322,-7.85522c14.99724,-0.2811 17.02971,-18.28448 15.48773,-29.74414c-2.1938,-4.69699 -0.04752,-14.89349 -7.7746,-13.37029c-15.43901,-0.71622 -30.7112,-4.55923 -44.14467,-12.22302c-0.82443,12.88171 -7.29927,24.66777 -11.6053,36.85115c-5.66316,6.16721 14.39644,28.18469 0.43378,18.34869c-9.04433,-8.40845 0.06526,8.74658 -11.16418,3.91656c-15.23827,-0.31436 -31.02578,2.40784 -45.91216,-1.24551c-5.00268,-2.09833 -20.66561,0.51883 -9.25531,-6.49301c6.4804,-1.18185 12.15667,4.48007 17.05421,-2.03778c11.5948,4.79346 30.04866,4.82639 34.25867,-10.28015c7.00595,-11.43338 11.29851,-24.25136 11.56012,-37.68254c-8.2043,-6.31854 -14.70296,-14.48831 -18.43434,-24.21049c-8.62861,-14.22275 -24.3753,-22.02206 -37.28508,-31.87471c-17.12926,-11.15475 -36.8522,-23.99915 -40.20823,-46.00098c-4.08031,-16.32172 0.02216,-34.19492 11.59384,-46.57394c7.80417,-11.16946 22.31328,-21.55052 18.99293,-36.88489c-8.43674,-15.00933 -26.68094,1.9423 -34.96601,9.23433c-9.98,7.06196 -20.71845,24.17017 -34.34288,16.49594c-1.7172,-11.61691 13.7034,-18.90693 17.498,-29.74388c7.8585,-12.19844 12.51045,-26.37627 18.95516,-38.92993c11.65712,-10.85135 30.93148,-10.91782 42.45155,0.28526c14.7008,11.44654 23.86826,29.5425 22.42876,48.35335c1.4173,12.98959 -4.14301,29.91504 8.25453,38.93287c17.92052,9.9613 39.04935,12.35098 57.26444,21.89838c22.77972,10.51788 39.86913,29.49796 59.04057,45.11781c11.7964,10.71736 23.92368,21.11819 35.13879,32.44618c-7.49713,-2.24278 -14.43054,-6.05879 -21.60767,-9.15805c9.28815,12.08043 13.46152,26.94177 15.66077,41.78857c3.61584,15.73579 13.73315,31.11919 8.65729,47.77711c-4.42633,13.85214 -18.52838,-8.55096 -25.42393,-12.47198c-7.88147,-7.42908 -15.67812,-16.62666 -27.10399,-17.90884c-2.06194,13.35767 -4.18094,27.25305 -1.83514,40.63339c1.37479,11.84998 25.0215,4.73886 21.59566,13.51175c-19.80942,-2.16162 -39.69846,-0.3399 -59.55595,-0.59872l-2.94055,-0.30328l0,0z", |
||||
"eagle": "m42.43982,248.02586c11.79883,-9.19574 37.51548,5.68584 36.59332,-18.29665c11.6873,-8.23552 20.68873,-26.28419 1.79099,-32.32607c-10.7688,-5.1657 -15.8233,11.42451 -19.57125,12.4706c-7.77777,-10.83765 -3.38924,-28.5033 -0.32791,-39.95343c9.78217,-6.08578 25.82187,-13.03094 14.50231,-26.59097c-2.34529,-14.80103 -3.78094,-32.06657 -17.7612,-41.01302c-10.43393,-6.26692 -25.16679,-12.24148 -20.04643,-26.95332c-6.73619,-10.16047 -14.53631,-24.05076 -10.06464,-36.59579c10.19879,-1.80737 9.00111,23.96806 10.94535,18.5213c-3.83083,-8.28799 9.1568,-27.37077 8.41371,-9.7762c-0.78397,6.31187 -0.27625,19.10084 3.19139,6.43372c9.40052,-13.9652 0.18064,24.20846 9.40782,9.05938c6.50935,-2.10711 4.52592,9.32912 10.80828,3.67456c6.87772,5.25431 11.91442,6.4291 11.89108,15.161c9.16496,3.3132 16.00232,8.79374 14.18665,17.50479c17.88632,-4.31568 2.59483,17.992 15.32488,24.21275c6.86198,10.87837 9.94656,21.77702 9.45206,34.69591c14.12406,-3.90332 23.43909,-19.96727 38.02612,-24.96548c16.37712,-7.58971 22.24484,-26.45808 25.80173,-42.75597c1.58806,-7.86366 11.55658,-7.47865 8.4944,1.35465c11.47125,-12.36288 6.68346,-30.36211 9.92291,-45.39627c1.03862,-8.40902 -2.33224,-26.94658 4.74805,-28.67765c10.56419,9.48252 -2.34641,30.44621 7.95137,36.7387c7.25935,-13.5451 4.68625,-29.74639 5.07938,-44.52987c-0.17744,-8.53332 8.28981,-14.18234 7.88048,-2.00179c3.55096,10.5139 -0.40492,32.21981 1.64958,36.04613c8.07187,-12.48013 6.34647,-29.28694 14.90497,-41.01045c11.77513,4.41697 -3.33727,24.23894 -2.9549,34.73938c1.57841,8.06398 13.11919,-23.61583 13.7003,-6.1498c-5.31714,4.6162 -4.42737,17.32646 1.51364,7.08835c2.29477,-8.40776 17.99155,-5.58858 7.86148,2.08536c-7.52231,6.5335 13.19769,6.07413 4.12683,13.25697c6.05191,9.99521 -10.41388,15.90605 -0.99213,23.11055c-0.5419,2.90166 7.51996,8.55031 3.95645,15.5176c3.55255,6.41606 -12.64786,10.58171 -2.07687,14.97137c0.61145,14.96265 -18.29834,25.28072 -14.15472,39.25008c-1.22144,16.83496 -13.92377,30.96262 -27.51764,39.86047c-12.55846,2.38141 -22.29991,7.42523 -33.09448,14.38452c-7.10794,0.12218 -9.63133,0.08891 -13.34837,5.21904c-5.85042,-4.53848 -15.49744,-11.39697 -13.84404,2.34781c2.50378,17.06932 24.15945,18.76619 35.67772,27.84688c12.28496,4.33621 28.35258,18.74889 15.04837,30.03174c-1.28722,16.03848 -22.62962,6.43207 -28.17253,11.98065c-7.95277,1.1889 -7.12421,6.80249 -14.18958,0.10867c-6.88124,9.22229 -22.27397,-0.76007 -29.61287,-4.75983c-11.90405,5.67993 -17.34648,-22.86903 -19.53539,-2.88507c-4.83576,13.58316 -24.476,-1.01483 -24.37943,16.35269c-8.98567,-1.84631 -9.40855,12.19781 -19.04626,10.78702c6.06173,-2.81454 10.18479,-18.90897 -0.69688,-11.14999c-8.89938,-6.76031 -3.76038,16.63571 -11.0985,4.45398c-1.61417,-15.81525 16.34735,-16.12735 26.46889,-18.96848c3.63502,-9.19174 8.23714,-21.27525 7.27283,-30.1396c-9.56728,3.84567 -17.9573,12.08994 -29.11918,12.79019c0.69484,8.35417 -5.77779,21.85307 -15.72966,14.08031c14.30752,5.57813 7.98567,-25.05467 -0.66062,-9.91721c-3.38933,9.9873 -2.96938,-14.429 -12.7722,-7.32185c-5.13792,3.73692 -1.64958,12.39018 -6.75386,2.35237c-0.99273,-2.02373 -1.14814,-4.89752 0.9282,-6.35475z", |
||||
"elk": "m55.44169,70.04322c-9.46609,7.85901 -22.89024,10.68682 -35.01687,12.13352c-10.34381,-1.03976 -26.56821,7.31529 -15.97385,18.70621c7.56154,15.8879 23.87035,2.81345 34.83344,1.97973c6.74288,1.81747 9.04052,25.43575 14.68986,9.83006c3.84105,-12.93275 21.02425,-8.87709 30.14005,-4.40716c14.1686,4.39434 8.46609,22.12076 16.61138,31.95892c12.24081,12.85411 -1.67636,29.24428 -12.4499,37.76401c-12.75361,7.58044 -18.55984,19.76834 -16.78767,34.30325c0.04941,14.73842 -3.99104,30.75432 3.85034,44.19391c11.85099,1.57538 1.64103,-19.88701 4.92331,-27.40918c1.21214,-13.46214 -1.9274,-30.30058 10.90484,-39.28947c11.4828,-10.01157 23.57063,-19.55112 36.47411,-27.62581c12.21095,-0.62399 10.39299,17.77295 13.97888,26.40175c2.87054,13.20355 4.12752,27.58423 3.69688,40.50841c3.125,10.64038 5.51489,24.0757 -1.41217,31.57294c12.91045,1.34732 24.73607,-12.8914 14.16034,-24.30435c-4.26125,-15.94153 -5.71083,-32.54619 -8.8824,-48.75049c-1.29825,-11.53598 -3.35872,-25.34232 4.83759,-34.86038c12.05826,-0.41389 24.32834,12.14566 37.60088,4.59509c11.65439,-7.49344 33.21696,-6.53802 31.62036,11.82347c-3.2142,14.87534 1.55244,29.61519 2.2346,43.81203c-3.42354,18.43187 -22.15714,27.36267 -29.50255,43.57849c6.98146,9.64319 17.6196,-4.17101 24.65466,-8.5957c-1.74142,-12.99426 11.64835,-19.92599 15.71536,-30.922c6.9856,-14.97188 -3.20459,-32.25409 -2.75711,-46.36688c-5.96602,-12.06912 6.08081,-14.98056 11.07512,-3.9678c8.02901,10.14059 21.03195,16.80963 23.7973,30.43394c7.39731,10.39175 10.8736,22.49284 15.64307,34.03711c4.08353,6.21262 10.6907,18.02594 12.81412,3.55118c3.85464,-8.67506 1.42859,-14.46745 -6.31488,-15.1647c-13.17899,-14.6283 -10.83514,-37.51031 -25.72766,-51.16437c-10.90161,-6.89407 -22.06673,-14.37312 -25.85289,-27.85638c-6.71298,-10.98305 -8.98033,-24.34339 -5.63237,-36.85001c4.36508,-2.10748 7.17406,6.33847 3.86676,-3.07584c-7.08252,-11.81364 -21.74017,-16.42101 -34.30881,-20.12214c-13.86351,-4.31435 -28.287,-5.60372 -42.65346,-3.49644c-12.2518,3.14196 -25.56529,6.21495 -37.68355,0.56779c-10.80199,-6.45414 -23.34553,-5.2407 -34.37726,-0.35921c-8.31817,4.58586 -24.95089,-0.17232 -13.39404,-9.69791c-4.65558,-4.05794 -21.26908,7.53993 -8.94252,-2.36752c5.90361,-6.02524 8.73024,-18.58166 6.56192,-25.10496c-2.33636,8.03588 -5.7029,7.70039 -5.40219,-0.79288c-2.03959,15.14413 -12.13537,5.38195 -10.55587,1.00194c0.66773,6.1233 -2.56635,12.84344 -5.72467,3.23117c-0.3636,6.21597 2.87773,15.15818 -3.77972,17.71219c10.15314,9.32419 -13.24982,2.42432 -13.20099,-4.96754c-6.18471,-9.39983 -7.12771,-4.31873 -4.60736,3.21883c-4.59348,-3.34352 -10.47613,-9.66862 -5.36225,0.14767c5.84781,13.3303 21.7189,7.94385 31.61781,10.45553z", |
||||
"fish": "m127.20683,242.3436c1.50244,-15.94504 5.02446,-32.41927 12.88557,-46.10178c7.51215,-8.98547 19.63693,-8.71681 29.76314,-11.79086c-14.18819,-3.80443 -27.43222,-10.54059 -40.42705,-17.66788c-21.27006,-9.23157 -42.92073,4.06975 -62.09324,13.40138c-14.23518,6.80144 -28.31641,14.82532 -43.64474,18.1933c-10.05519,-6.98578 -1.65744,-26.80461 5.41335,-35.17271c8.9525,-11.55655 22.2043,-17.52696 31.90982,-28.07993c4.26963,-14.90575 -15.40321,-18.57297 -24.24153,-24.42971c-13.70577,-6.20512 -25.35116,-16.36843 -35.77064,-27.71589c24.19748,-1.40994 45.60231,13.61476 67.43612,22.73716c11.80957,4.27464 22.94788,10.28683 33.98999,16.23396c5.06265,-0.02556 22.24189,3.73252 20.52978,-2.03984c-12.8773,-0.57095 -11.58655,-17.22836 -2.92075,-23.83247c12.73701,-10.02242 28.26479,-15.93932 38.86842,-29.21478c4.65193,-3.7341 7.09996,-12.86792 11.03157,-15.74994c16.95282,13.24852 26.87143,34.14735 36.22475,53.96581c15.23062,3.44089 30.61246,6.23184 46.13637,7.07419c15.15991,6.93107 28.10406,19.01068 39.97369,31.27808c8.99451,6.78525 11.39157,25.24843 -0.83481,28.95241c-30.16479,16.24658 -63.84666,21.21309 -97.06413,22.77441c-4.67992,-0.32996 -8.75485,0.18372 -8.78621,6.33609c-2.92581,8.76227 -4.12184,18.94467 -9.62984,26.07907c-6.07878,-1.55455 -0.31998,-19.45975 -6.56294,-10.95245c-12.27982,13.32922 -27.04962,23.32567 -42.18671,32.26515c0,-2.18091 -0.00002,-4.36198 0.00002,-6.54276z", |
||||
"hare": "m95.22337,299.53546c-10.68459,-4.81824 3.25798,-14.45154 8.53654,-18.71286c3.55556,-3.28177 -20.37717,0.46036 -10.27298,-10.93198c11.08577,-9.30692 6.89815,-25.05217 -4.18282,-32.37115c-15.24973,-10.2968 -34.81611,-19.10942 -40.44992,-38.33635c-5.69662,-11.9756 7.81301,-24.58835 -0.87631,-35.40263c-6.99412,-14.0412 1.177,-28.68323 6.25594,-41.69022c2.33568,-17.99253 -11.97227,-32.2212 -19.84076,-47.00306c-9.74298,-14.12588 -15.35928,-30.58578 -16.16633,-47.73895c-2.11884,-7.3217 0.22601,-18.6921 8.68694,-8.82097c17.71845,14.18765 37.17033,27.65002 49.57116,47.06949c2.34735,7.01447 11.74658,27.34441 12.27144,8.93449c0.24582,-25.30315 7.97399,-52.90002 27.77682,-69.85634c13.46954,-12.2734 20.73361,9.21683 21.36209,20.13735c3.50587,21.487 -2.30553,42.79486 -8.78146,63.09225c-2.37738,9.43285 -8.56868,35.2823 9.08899,25.75117c40.67693,-15.70451 89.96005,0.78945 116.45525,34.52606c12.17961,16.33485 17.5135,37.32133 17.39308,57.47189c-6.27155,11.83836 17.03061,-0.22177 8.58704,13.43613c-4.97064,15.1297 -19.01465,23.33925 -28.85207,34.75906c-10.01038,9.15085 -2.58298,28.71576 -19.13725,31.59863c-24.15469,7.44629 -49.5191,10.70804 -74.66498,12.6066c-14.07156,2.88287 -20.90056,-13.20758 -7.41347,-19.89679c6.46608,-9.96799 24.96535,-10.66653 30.46185,-12.24564c-13.13484,1.28516 -29.33337,-4.0759 -40.40141,4.05872c-6.70294,10.88138 -12.07141,25.20364 -26.12755,28.30951c-6.3168,1.75439 -12.8116,3.16129 -19.27982,1.25558z", |
||||
"he_hen": "m176.04681,296.29803c-8.82596,-3.77927 -18.43298,1.74493 -27.86224,-3.75964c7.62581,-0.4744 19.08463,-0.03574 17.06104,-11.34488c3.33665,-13.20654 -3.43475,-27.06163 2.20258,-38.55534c-8.82878,-8.42361 -18.09561,-18.39673 -22.80272,-30.16238c-0.9447,4.74663 -1.81537,8.52257 -3.158,0.33916c-0.76965,-4.00471 -0.30261,9.89931 -3.24527,0.14346c-3.10373,-8.67493 -11.4597,-31.29446 -14.05236,-10.31462c-1.0768,10.8262 -4.45592,3.14465 -6.0004,-3.72562c-1.56924,-13.22943 -7.23737,-25.48523 -8.72193,-38.68883c5.80227,-8.36407 -0.82715,-9.5029 -3.91098,-1.15848c-3.39584,13.23767 -6.30494,26.33923 -2.7624,39.9769c-4.70789,3.85124 -13.79493,-17.92216 -9.61541,-26.27414c3.62592,-9.45018 2.81974,-19.09607 3.42313,-25.48878c3.31529,-7.21146 -3.22571,-15.04807 0.25123,-22.73853c-8.88477,9.68631 -16.83011,16.38615 -14.33428,31.58234c-1.10283,3.79079 3.703,25.58844 0.64231,17.56184c-5.77861,-15.66916 -5.78305,-33.02271 -1.43442,-49.01125c0.00535,-12.20366 -9.89253,21.0744 -9.16187,4.76299c-0.93676,-12.30159 4.13303,-25.82869 8.93452,-35.55499c-5.46675,-6.50523 -23.17289,-1.89566 -14.79648,-15.70558c8.24343,-7.01884 7.35999,-16.67057 -3.85936,-8.18394c-17.3246,12.72424 -31.69814,29.07174 -47.58007,43.52234c15.25898,-19.61487 32.46107,-38.59572 53.7519,-51.75492c20.64337,-12.99951 50.5769,-14.34346 68.38963,4.28573c4.53072,7.97979 15.06177,13.26968 17.57275,20.45337c-1.84586,10.76744 5.10652,16.10654 5.85289,25.57021c4.38731,7.30244 -3.95828,20.43125 8.52597,16.64671c14.20137,-0.01996 33.63664,-3.16645 34.74754,-20.87874c5.66772,-25.50935 8.27689,-54.0092 26.4256,-74.31131c10.08655,-5.89642 3.82147,-4.32716 -3.54926,-5.29837c-6.51613,-7.58361 6.57724,-19.75743 13.02319,-21.14511c-1.112,-17.9227 10.53479,10.74471 13.86426,-2.41437c4.99586,0.09501 7.43144,12.08141 10.46855,2.29789c9.05719,7.66376 18.6297,19.25661 6.66562,29.92943c13.61102,6.52517 -13.86911,2.29947 -2.14532,12.29652c9.6759,9.35194 2.83621,26.62759 -5.10654,34.15639c-0.3085,5.66077 9.31277,13.88494 11.24728,20.75249c9.99454,19.34809 11.9986,42.36646 8.16797,63.56847c-5.39346,19.98318 -25.46588,28.67906 -39.65833,41.37386c-12.12337,9.93893 -7.85776,27.37115 -13.59781,40.42342c0.57072,7.5369 4.77751,16.1196 10.7547,20.66925c8.66214,4.84064 18.81006,7.96561 25.81393,15.05286c-6.39667,3.34055 -19.43893,-10.21753 -19.56508,0.39017c-9.50252,-12.34393 -23.7677,-4.06104 -34.21234,-13.55405c8.69193,1.65643 19.99033,0.8027 10.47188,-9.61145c-3.75841,-8.80696 -15.07852,-11.84618 -15.37883,-22.49022c-10.66643,6.69647 -17.92447,15.81358 -25.66988,24.90395c-12.85808,-0.80322 -13.41248,25.11618 0.47165,24.73163c5.7019,1.45825 27.10161,9.40335 10.25006,7.35107c-5.02289,-0.89746 -10.47203,-4.04099 -10.31842,1.85727c-2.30338,-0.41431 -4.35982,-1.56003 -6.48019,-2.47418z", |
||||
"hen": "m131.70792,299.20142c-2.65045,-8.04401 -50.59061,2.01245 -25.50379,-8.40613c9.71836,-2.24731 29.67359,0.57056 9.8335,-5.50568c22.5928,7.62228 32.60569,-19.08859 34.06422,-37.09636c-21.02885,-6.55212 -24.67069,-31.02429 -46.83106,-37.61485c-16.88445,-13.23645 -41.63732,-12.83168 -52.35418,-33.24014c-10.17476,-18.17259 -4.4284,-40.29292 -2.74405,-59.92338c4.00956,-20.72375 12.14967,-41.69897 10.53991,-62.75727c-16.41068,9.44812 -22.4106,-11.67328 -22.78485,-18.27062c-12.07958,3.08904 -19.7317,3.22594 -6.59584,-7.5194c5.87008,-8.14037 8.78346,-25.92081 18.16113,-23.25189c2.47408,-10.763 9.04029,4.89351 16.30021,-4.61621c4.44867,3.35889 13.85731,7.10325 3.42817,13.02555c18.83147,9.50194 34.07959,23.95835 41.92437,42.43233c7.86127,18.77559 23.52317,39.06593 48.8149,33.98585c22.90038,3.93186 49.73083,-9.80992 48.68822,-32.86776c0.44391,-16.33654 16.52325,-54.48924 38.19395,-35.09801c16.24046,6.22802 34.92778,21.65468 31.09642,39.16159c-2.21887,18.0508 -0.50452,36.25767 1.60162,54.45551c-13.60181,10.0825 -11.15982,27.59631 -20.65894,40.7838c7.8804,18.56862 0.29095,38.62871 -12.60841,53.70848c-12.90314,13.89935 -31.76248,26.24356 -52.66508,24.4381c-7.98578,13.29396 9.42929,24.99069 15.57339,25.73553c-16.01053,-5.1321 -13.75549,4.70874 -8.47672,15.2244c4.94576,19.6875 -10.58037,-17.53909 -20.60904,0.27255c-7.77597,7.68976 -38.86531,10.29276 -13.69539,1.07587c21.48048,-7.96875 -24.12099,-12.95142 -13.99879,5.00586c3.34996,7.49203 22.77361,10.79092 2.32814,7.93628c-9.02753,-4.74515 -13.85625,12.10397 -21.02202,8.92599zm43.09088,-34.62769c7.8596,-9.56569 10.12141,-37.24054 -6.87671,-17.06372c-13.43553,10.88889 -18.29311,29.6301 6.87671,17.06372z", |
||||
"mouse": "m0.99942,221.57315c18.97592,-5.2153 38.89368,-5.72223 58.37582,-7.77921c22.496,-2.19991 45.89505,-1.95135 67.14781,-10.93486c14.09158,-5.66957 18.06422,-22.34355 18.92189,-36.61246c3.853,-24.50212 17.5325,-49.94102 40.26784,-59.44455c8.81084,-4.72752 21.73279,1.24299 28.77051,-3.16475c-8.53821,-11.67851 9.86266,-25.18666 17.60304,-12.64201c9.90706,2.44754 20.13632,-4.12984 22.40773,-13.63184c8.92409,7.01573 17.55354,16.51189 28.21455,21.93088c10.14639,3.852 24.18005,17.58312 11.18048,27.34964c-8.74753,9.55273 -22.39651,8.48746 -31.55023,16.51577c-9.2032,7.60971 -8.39032,20.69223 -4.77994,31.13091c0.58701,11.39519 9.68161,13.02966 17.70996,16.03508c1.32019,7.11591 -9.48019,9.15216 -14.76065,10.85889c-11.37581,1.93378 -22.26419,-2.9012 -30.79645,-10.59497c-7.75803,-9.73157 -17.02081,0.98111 -14.42018,10.56955c-13.10742,11.20265 10.79541,5.32968 13.63931,12.79547c-11.33516,4.36475 -24.3324,2.06448 -36.29933,1.86723c-15.70055,0.23059 -28.91441,-10.20818 -44.0015,-12.87645c-9.31265,3.4888 -17.24791,11.49408 -27.66536,12.5939c-30.59707,5.30119 -61.77245,4.85931 -92.6703,6.59238c-8.95057,-0.1062 -18.97236,1.51553 -27.29502,-0.55859z" |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
{"data": { |
||||
"10": "m0.99679,148.19614c0.277,-34.75176 -0.17724,-69.54997 2.27791,-104.24061c60.32762,11.41171 119.94372,30.08407 179.25477,46.87597c3.18407,-17.04019 1.68541,-31.17523 4.4519,-46.93008c38.1039,33.15254 75.86421,66.77718 112.07695,102.003c-34.74261,39.95821 -74.59364,74.65916 -113.71667,110.1933c-1.26689,-16.54773 -2.53401,-33.09534 -3.80092,-49.64307c-57.66159,16.00916 -118.64064,32.56108 -176.67504,47.19652c-3.94662,-33.77068 -3.83062,-70.54794 -3.8689,-105.45503z", |
||||
"11": "m136.44681,226.75766l47.24773,-47.40907l-91.35118,0l-91.35098,0l0,-29.34846l0,-29.34849l90.303,0c49.66658,0 90.30293,-1.48752 90.30293,-3.30561c0,-1.81805 -19.77211,-23.15214 -43.93797,-47.40906l-43.93811,-44.1035l40.61224,0l40.61209,0l62.02386,62.14279l62.02383,62.14276l-62.14281,62.02386l-62.14279,62.02386l-42.75481,0l-42.75491,0l47.24786,-47.40909z", |
||||
"12": "m116.00724,294.49442c-8.01179,-8.01181 -6.96065,-12.86337 12.51841,-57.77466c9.83598,-22.67787 17.88353,-41.89153 17.88353,-42.69699c0,-0.8054 -27.16052,-1.46442 -60.3569,-1.46442l-60.3569,0l0,-42.47337l0,-42.47337l60.83526,0c46.90741,0 60.31158,-1.27951 58.54825,-5.58862c-1.25784,-3.07373 -9.83818,-23.47047 -19.06743,-45.32602c-17.39725,-41.19823 -17.39179,-52.24659 0.02688,-55.67119c8.66862,-1.70424 143.62872,129.24032 148.26757,143.85621c-44.95403,52.18671 -98.68933,106.81281 -148.18829,154.97751c-2.60997,0 -7.15958,-2.41428 -10.11037,-5.36508z", |
||||
"13": "m167.5984,129.81894c13.45454,0 26.90909,0 40.36363,0c0,13.45454 0,26.90909 0,40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-13.45454 0,-26.90909 0,-40.36363zm-58.30304,0c14.9494,0 29.89909,0 44.8485,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.8485,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84849,0c0,13.45454 0,26.90909 0,40.36363c-14.94941,0 -29.89908,0 -44.84849,0c0,-13.45454 0,-26.90909 0,-40.36363zm165.9394,83.23706c14.2021,-0.91132 28.40395,0.64389 42.60606,-0.26743c0.91125,-14.20201 0.48917,-28.40405 1.40042,-42.60606c13.29086,0 27.91505,0 41.20563,0c0,-13.45454 0,-26.9091 0,-40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-14.94952 0,-29.899 0,-44.84848c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c13.29059,0 27.91478,-0.66666 41.20563,-0.66666c0.91125,14.20197 0.48918,29.0707 1.40044,43.27271c14.20209,0.91129 28.60425,-0.07731 42.80637,0.83398c0,13.29074 -0.20032,28.48132 -0.20032,41.77208c-14.9494,0 -29.89908,0 -44.84848,0c0,14.94951 0,29.89897 0,44.84848c-13.45454,0 -26.90909,0 -40.36363,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.29074 0,-29.0479 0,-42.33865z", |
||||
"14": "m158.38327,149.9911l-83.00266,-148.9972l149.24145,148.9972l-149.24145,148.99712l83.00266,-148.99712z", |
||||
"15": "m175.41861,150.04552l-148.89816,-149.05299l98.06119,0l148.89816,149.05299l-148.89816,149.05287l-98.06119,0l148.89816,-149.05287z", |
||||
"16": "m227.52928,183.22569c6.14276,-5.95375 12.01762,-12.81764 17.19296,-18.97911l-155.07133,-2.82724l-21.27044,24.3479l-67.38522,-2.09119c8.44345,-11.0853 17.69294,-24.10754 24.55062,-33.88853l-24.39403,-32.88164l71.89852,0l14.62907,20.54468l158.32403,0l-19.63887,-20.4987c6.06082,-6.45992 15.03049,-15.08081 19.89622,-19.60087l53.24701,52.24467l-53.36812,53.05513l-18.61044,-19.42511z", |
||||
"bent_up": "m1.00136,224.73827l204.13,0l0,-149.15997l-31.28999,0l62.57999,-74.57997l62.58002,74.57997l-31.29001,0l0,223.73997l-266.71,0z", |
||||
"callout": "m0.99757,0.99642l193.63145,0l0,111.75l53.81497,0l0,-37.25l50.55357,74.49999l-50.55357,74.50003l0,-37.25002l-53.81497,0l0,111.75l-193.63145,0z", |
||||
"chevron": "m0.99844,0.99688l223.49919,0l74.49986,149.00068l-74.49986,149.00134l-223.49919,0l74.49984,-149.00134l-74.49984,-149.00068z", |
||||
"corners": "m78.29672,150l-55.17469,-55.1747l0,27.58735l-22.12203,0l0,-121.41265l121.41265,0l0,22.12203l-27.58736,0l55.17471,55.17471l55.17471,-55.17471l-27.58736,0l0,-22.12203l121.41264,0l0,121.41265l-22.12204,0l0,-27.58735l-55.1747,55.1747l55.1747,55.17471l0,-27.58736l22.12204,0l0,121.41264l-121.41264,0l0,-22.12204l27.58736,0l-55.17471,-55.17468l-55.17471,55.17468l27.58736,0l0,22.12204l-121.41265,0l0,-121.41264l22.12203,0l0,27.58736l55.17469,-55.17471z", |
||||
"diamond": "m228.23334,205.75699c-12.96465,-22.71989 -62.74901,-33.9996 -160.88079,-36.45064l-66.35706,-1.65739l0,-19.88501l0,-19.88482l50.08599,0c59.04541,0 101.26503,-4.08251 135.71376,-13.12332c20.32901,-5.33509 27.0845,-8.73719 36.27359,-18.26725l11.29199,-11.71121l32.38853,32.49907l32.38852,32.49925l-32.75113,32.72415l-32.75122,32.72433l-5.40219,-9.46716z", |
||||
"dotted": "m164.76302,54.29618c-12.89404,-14.08136 13.13254,-37.91006 24.83243,-21.67826c9.98653,14.06865 -12.21164,31.95572 -24.83243,21.67826zm34.52623,32.04741c-10.53665,-15.50334 18.2944,-32.06738 27.41472,-16.58083c10.82574,16.19412 -18.42853,34.68893 -27.41472,16.58083zm39.30569,38.77469c-13.16362,-8.91086 -0.08168,-29.46533 13.54875,-27.63215c18.93346,2.88981 13.87328,34.44158 -4.59297,32.89478c-3.58466,-0.41574 -6.77832,-2.45136 -8.95578,-5.26263zm32.87781,34.23642c-11.00845,-13.99648 14.37656,-32.37918 25.04797,-19.05171c11.60712,14.82527 -14.29718,34.39392 -25.04797,19.05171zm-63.84386,0.7675c-12.23796,-11.58463 5.72536,-30.30273 19.24007,-25.41679c19.63696,6.28566 5.03751,36.50668 -12.48737,29.64096c-2.41074,-1.14194 -4.56958,-2.71278 -6.7527,-4.22417zm-52.05359,0c-14.38365,-13.43323 11.89731,-35.50046 24.20743,-21.44815c12.48965,14.64734 -10.94827,35.43011 -24.20743,21.44815zm-51.41751,-0.7675c-11.01524,-13.99239 14.38364,-32.38554 25.04439,-19.04626c11.57417,14.84886 -14.25791,34.38168 -25.04439,19.04626zm-48.97159,0.7675c-14.38364,-13.43323 11.89733,-35.50046 24.20746,-21.44815c12.48962,14.64734 -10.94829,35.43011 -24.20746,21.44815zm-51.41319,-0.75569c-12.62148,-16.51503 21.51373,-34.53826 27.20482,-13.82039c4.20761,13.86485 -18.57945,25.93829 -27.20482,13.82039zm232.73729,36.71002c-12.26451,-12.7252 9.54947,-34.95583 22.63777,-23.37347c16.16324,11.53831 -5.25334,38.27226 -20.09267,25.93422c-0.83693,-0.86462 -1.69453,-1.70929 -2.5451,-2.56075zm-37.22105,31.5554c-10.33875,-14.74719 16.53384,-30.93315 26.24101,-17.10368c12.66234,14.69044 -12.76988,34.70573 -24.48114,20.0298l-1.75987,-2.92612zm-33.2933,39.2449c-11.17,-10.21844 4.17313,-26.31229 16.33257,-23.575c18.50797,4.77472 6.84483,34.45702 -10.13109,28.82402c-2.6304,-0.90369 -4.76476,-2.91159 -6.20148,-5.24902z", |
||||
"hand_2": "m166.23018,238.662c7.92778,-2.90976 14.43034,-5.61938 2.1153,-5.69868c-10.87593,1.46172 -39.01099,-9.28242 -16.4619,-14.56342c14.10701,-5.508 46.21144,7.21423 46.38257,-14.54736c-2.55197,-13.63786 -43.96396,-2.98952 -30.34076,-21.27969c15.00345,-6.1348 44.75407,8.31958 49.78708,-10.66391c-4.61371,-18.40675 -33.47118,-6.65964 -47.97568,-11.74664c-14.06097,2.90031 -17.76392,-15.58949 -1.98296,-12.79868c36.48125,-1.96817 73.21696,0.92035 109.57253,-3.09619c5.87265,-3.2529 10.21371,-23.26295 2.80267,-24.61046c-52.95885,-1.09735 -106.01129,-0.08873 -158.88631,-3.36192c-18.99625,-0.19729 -4.48207,-20.48157 9.55508,-15.71787c13.37119,-4.37856 18.67023,-15.85947 28.4838,-27.19597c5.01488,-24.77942 -19.08717,-15.58241 -28.93028,-8.33138c-10.99126,7.20572 -29.89664,22.16276 -39.92577,30.01463c-8.79154,6.3571 -29.0466,13.41131 -41.36795,21.93291c-10.53185,3.7428 -22.05687,1.87943 -32.40108,2.55152c0,33.57336 0,67.14623 0,100.71958c29.2655,12.743 60.06093,23.93646 92.50566,22.65599c19.00592,-0.07739 38.55775,0.63341 57.06799,-4.26245zm-120.57521,10.76822c-14.93961,-5.74022 -29.85212,-11.55359 -44.65637,-17.63553c0.70846,-41.92598 1.41691,-83.85243 2.12533,-125.77841c11.81984,-0.44887 29.35853,5.41407 37.78343,-3.21891c22.65079,-7.26991 37.35686,-23.34933 57.21348,-35.41785c13.97373,-10.98014 25.13529,-14.72766 39.56827,-23.05481c10.96249,-5.06954 16.89815,-2.48073 29.24257,-0.27045c5.38396,8.81045 12.06773,13.36412 8.59946,30.1482c-7.23705,3.64039 -16.6288,28.10783 -2.4068,28.30228c39.59416,3.79424 79.82585,-1.53866 119.10855,5.09266c9.78171,13.24281 11.64719,42.99407 -6.25568,51.39202c-17.13269,4.95341 -35.19667,2.49629 -52.7989,3.09193c-0.00107,12.52824 2.07022,28.51608 -11.83537,34.80946c-10.26779,13.39197 -10.98985,33.06551 -27.53502,42.86476c-13.91499,14.25851 -33.72333,18.66306 -53.04445,18.19296c-31.68189,0.4295 -65.02994,3.46667 -95.10849,-8.51738l0,-0.00095z", |
||||
"hand": "m136.98543,214.15889c-14.70618,-5.74251 -4.62521,-24.05643 -14.3905,-33.27538c-12.96347,-7.75244 -2.12349,-24.16507 -12.57821,-33.28812c-7.48801,-6.64952 -5.24203,-16.62421 -3.67915,-25.18983c-29.75101,-0.23549 -59.53337,0.62366 -89.25697,-0.78464c-15.11522,1.28053 -20.03182,-18.26941 -12.80666,-28.85114c7.00419,-11.24166 21.87759,-8.31262 33.12609,-9.4029c64.97946,-0.76864 129.97618,-0.61134 194.95673,0.02921c17.26189,0.80067 37.01695,-1.19489 50.6566,11.68779c16.24808,15.16693 16.0166,39.34441 16.04852,59.94771c-0.42267,19.21857 -2.90109,42.02173 -20.4863,53.46951c-16.36914,10.95175 -36.93741,7.66907 -55.55533,8.62302c-27.94264,-0.30014 -56.07063,1.04456 -83.86891,-2.2673l-2.16592,-0.69792l0,0zm69.33224,-10.55814c9.631,-11.23128 -3.5211,-20.50227 -14.65393,-17.55965c-16.14473,-0.10535 -32.65453,-1.7021 -48.52592,1.75482c-13.67432,5.19589 -4.85582,21.54512 7.46478,18.25877c18.04872,1.02443 36.47603,1.82143 54.28616,-1.68709l1.42891,-0.76686zm65.93199,-2.17656c15.66348,-8.69865 15.78064,-28.60548 16.25079,-44.24881c-0.34195,-16.50655 1.70639,-34.58434 -7.04581,-49.36581c-7.23798,-10.84158 -20.71933,-14.52557 -33.13705,-14.12024c-23.36646,0.0377 -47.0793,-1.82723 -70.16504,2.52512c-15.66467,3.36275 -22.23152,20.93031 -23.45795,35.19015c-0.48341,13.80043 -1.82124,28.00842 1.22505,41.56039c7.24641,5.02983 15.89499,-9.13847 19.17191,-15.4227c4.31766,-11.67575 -0.61995,-26.25061 8.10953,-36.19362c8.72269,-9.46424 24.96402,-8.53419 32.52521,1.88722c8.3812,9.23244 -0.48325,21.69592 1.82307,32.51563c4.15211,9.93069 -0.70021,19.45959 -0.85791,28.5067c4.13835,6.87068 2.87872,15.02933 1.61143,22.50597c16.21062,-0.57724 32.86133,1.70529 48.65034,-2.71872c1.84845,-0.69202 3.61401,-1.59238 5.29642,-2.62128zm-126.53741,-35.9437c2.18771,-13.69858 -18.65493,-12.59653 -20.49308,-1.57007c-4.38604,12.23279 17.61123,15.56906 20.78048,7.03215c0.03699,-1.82657 -0.14053,-3.64476 -0.2874,-5.46208zm62.45076,0.42249c1.41585,-11.79691 -20.5592,-11.91444 -24.75133,-3.63126c-2.34377,5.03215 -10.03961,15.25429 1.13329,12.59268c7.54675,-1.70357 25.12254,3.75204 23.61804,-8.96143zm-62.44263,-31.11197c-0.75351,-2.94205 3.03209,-10.28735 -1.13232,-9.92064c-9.20967,1.01493 -19.08115,-0.45296 -27.70964,3.18962c-7.77171,10.63712 5.24397,21.0274 15.9218,17.53934c7.79146,0.11475 13.91219,-1.24452 12.92017,-10.80832zm61.0041,7.53122c8.85812,-9.53879 -4.95708,-21.9593 -14.94496,-15.6684c-10.39732,5.40628 -7.29182,25.10663 6.58635,19.17703c2.96956,-0.54494 6.1384,-1.30057 8.35861,-3.50864zm-53.18405,-38.39041c2.00339,-3.50816 4.00681,-7.01634 6.01019,-10.52453c-44.99024,0.24061 -90.00227,-0.61648 -134.97418,0.73022c-12.21447,-3.32573 -22.07768,15.22181 -6.82234,18.35822c24.02138,3.10667 48.39057,1.52395 72.56345,1.97845c19.07089,-0.00607 38.14179,-0.01187 57.21268,-0.01793c2.0034,-3.50815 4.00681,-7.01634 6.01019,-10.52452z", |
||||
"in_circle_1": "m5.82933,197.43428c40.71335,-0.01967 134.41318,-0.35846 180.09581,-0.39397c0,16.34004 0,32.68033 0,49.02061c32.58316,-32.50494 65.16631,-65.00987 97.74948,-97.51482c-31.92815,-31.66348 -63.85603,-63.3272 -95.78392,-94.99068c-0.78604,15.0691 -1.57207,30.13822 -2.35809,45.20756c-59.53047,-0.36446 -119.11517,1.07731 -178.59646,-1.67522c0.61495,-72.0702 150.25177,-122.40517 212.67849,-79.3467c34.44215,24.58492 61.89983,56.78898 72.41017,96.54306c3.07645,22.14599 2.45142,44.78936 0.58615,67.02389c-6.63419,36.33044 -31.19992,67.07545 -59.56813,89.58617c-20.38606,15.81168 -45.18452,26.98569 -71.36909,26.70041c-75.26421,9.28406 -124.16029,-34.86111 -155.84441,-100.16032z", |
||||
"inner": "m197.26169,150.29735l-74.64867,-74.64867l0,37.32433l-80.12502,0l0,-111.97301l215.02399,0l0,298.5947l-215.02399,0l0,-111.97301l80.12502,0l0,37.32433l74.64867,-74.64867z", |
||||
"left_right": "m0.99835,150.00092l86.49609,-86.49651l0,43.24814l125.35546,0l0,-43.24814l86.49605,86.49651l-86.49605,86.49605l0,-43.24803l-125.35546,0l0,43.24803l-86.49609,-86.49605z", |
||||
"left_up": "m0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z", |
||||
"pentagon": "m0.99791,0.9981l162.54547,0l135.45454,149.40899l-135.45454,149.40898l-162.54547,0z", |
||||
"recycle_3": "m28.22058,93.28644c0.00678,-2.58051 2.31667,-18.40222 5.13495,-35.15953c8.78786,-52.25238 8.91713,-52.48297 20.07468,-35.82898l6.60126,9.85321l19.30534,-9.74535c25.53492,-12.88995 56.00401,-17.65838 84.01221,-13.14781c11.88918,1.91477 24.50447,5.02692 28.034,6.91587c7.00751,3.7502 6.55832,6.97083 -4.61034,33.05528c-6.12129,14.29643 -6.70886,14.70388 -17.2827,11.98577c-17.99704,-4.62608 -47.30141,-3.16897 -61.44969,3.05553l-13.26538,5.83627l9.31132,9.7189c5.12125,5.34554 8.02238,10.51565 6.44702,11.48924c-1.57542,0.97362 -20.7427,2.87124 -42.59392,4.21677c-32.78424,2.01891 -39.72768,1.62653 -39.71874,-2.24516zm168.81314,144.07051l-14.20186,-18.81009l12.93088,-12.50398c13.30882,-12.86928 22.90733,-30.93761 27.13603,-51.08145l2.41319,-11.49524l-13.91847,2.22554c-7.65517,1.22421 -13.96558,1.06514 -14.02313,-0.35333c-0.26878,-6.62247 36.12752,-71.90508 39.66528,-71.14616c5.56261,1.19325 61.9985,50.07314 61.9985,53.6975c0,1.61765 -5.93121,3.88967 -13.18036,5.04884l-13.18039,2.10753l-1.30084,22.476c-1.66846,28.82635 -16.85831,62.09589 -38.00682,83.24434c-8.4704,8.47049 -16.91487,15.4008 -18.76544,15.4008c-1.85062,0 -9.75555,-8.46469 -17.56657,-18.81029zm-128.20031,52.72328c0,-2.07986 2.23119,-8.0961 4.95819,-13.36954c4.94765,-9.56766 4.91901,-9.61411 -13.52617,-21.86105c-28.85884,-19.16116 -50.30965,-53.17105 -57.05687,-90.46291l-2.21202,-12.22588l15.77176,-2.16168c32.51166,-4.45622 32.80855,-4.32152 39.31982,17.83711c4.39381,14.95265 9.79779,23.91347 21.44681,35.56244c8.5651,8.56514 16.76965,14.83324 18.23236,13.92926c1.46265,-0.90396 3.57973,-6.24536 4.70464,-11.86984c1.1249,-5.62448 3.47056,-10.22638 5.21256,-10.22638c3.99942,0 41.66188,59.38374 42.2598,66.63249c0.39931,4.84137 -19.96001,13.22382 -73.01952,30.06421c-3.38333,1.07379 -6.09135,0.25229 -6.09135,-1.84824z", |
||||
"turn_17": "m187.66985,234.28424l2.06375,-22.20483l-24.28615,-3.86421c-61.48712,-9.78288 -121.75832,-51.26649 -155.31676,-106.90179c-6.02069,-9.98148 -10.05047,-19.59818 -8.95503,-21.37048c2.51272,-4.06578 63.74106,-36.43469 68.91894,-36.43469c2.11224,0 7.18627,5.95309 11.27556,13.22911c17.44035,31.03078 62.57552,63.39609 94.35383,67.65826l12.88387,1.7281l-2.21523,-19.19039c-2.29968,-19.92216 -1.65292,-24.10554 3.72659,-24.10554c3.43987,0 106.12749,76.50481 109.06303,81.25475c2.22696,3.60321 -11.89679,16.9705 -62.46501,59.11911c-21.96555,18.30804 -42.4514,33.28745 -45.52422,33.28745c-4.91821,0 -5.33987,-2.65765 -3.52318,-22.20483z", |
||||
"turn_reverse": "m298.99997,168.62498c0,-51.43148 -133.41916,-93.12499 -297.99997,-93.12499l0,-74.49999l0,0c164.58081,0 297.99997,41.69347 297.99997,93.12499l0,74.49999c0,42.46484 -91.92749,79.55168 -223.49998,90.16789l0,37.25l-74.49999,-71.54289l74.49999,-77.45709l0,37.25l0,0c88.72033,-7.15858 161.96952,-26.67409 198.62153,-52.91789", |
||||
"u_turn": "m1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z", |
||||
"up": "m1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z" |
||||
} |
||||
} |
@ -0,0 +1,9 @@
|
||||
{"data": { |
||||
"1": "m0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z", |
||||
"4": "m1,1l49.66667,0l0,0l74.5,0l173.83334,0l0,115.8889l0,0l0,49.66666l0,33.11111l-173.83334,0l-123.68433,97.37498l49.18433,-97.37498l-49.66667,0l0,-33.11111l0,-49.66666l0,0z", |
||||
"5": "m3.88165,296.34811l58.64952,-105.30074l0,0c-62.13446,-31.76456 -79.86445,-91.6022 -40.96117,-138.24044c38.90255,-46.63797 121.70818,-64.81269 191.29914,-41.98796c69.59094,22.8246 103.19446,79.17835 77.63046,130.19172c-25.56265,51.01335 -101.92546,79.99094 -176.41714,66.94487l-110.20081,88.39255z", |
||||
"6": "m4.33333,266.6662c0,-1.854 2.23757,-3.35571 5,-3.35571c2.76243,0 5,1.50171 5,3.35571c0,1.85394 -2.23757,3.35565 -5,3.35565c-2.76243,0 -5,-1.50171 -5,-3.35565zm10.25,-24.11072c0,-4.6351 5.59392,-8.38943 12.50001,-8.38943c6.90608,0 12.5,3.75433 12.5,8.38943c0,4.63489 -5.59392,8.38928 -12.5,8.38928c-6.90609,0 -12.50001,-3.75433 -12.50001,-8.38928zm23.75001,-36.55524c0,-12.81482 19.46685,-23.19473 43.50002,-23.19473c24.0331,0 43.49996,10.37991 43.49996,23.19473c0,12.81473 -19.46686,23.19455 -43.49996,23.19455c-24.03317,0 -43.50002,-10.37982 -43.50002,-23.19455zm-37.33334,-104.99994c0,-55.2486 66.67956,-100 149,-100c82.32047,0 149,44.7514 149,100c0,55.24866 -66.67953,100 -149,100c-82.32044,0 -149,-44.75134 -149,-100z", |
||||
"scream": "m299.67374,132.67729l-35.72574,1.97192l-9.55817,48.04506l-31.60561,-11.61551l-45.83566,36.86661l-17.45096,-21.51509l-146.98414,92.00807l81.6677,-102.60858l-67.83573,-13.33963l21.22697,-19.84731l-46.57336,-36.42733l33.47025,-8.80944l-10.52427,-47.94958l35.08694,5.02536l28.86619,-44.2482l25.5638,17.26465l59.09183,-26.49832l7.92432,24.02253l70.55626,-0.33542l-12.23108,23.15343l59.61954,25.93398l-28.50317,14.93327l29.75409,43.96953z", |
||||
"thought": "m12,1c-6.094,0 -11,4.906 -11,11l0,147c0,6.09399 4.906,11 11,11l49.15625,0c-2.03143,2.32526 -3.15625,4.84886 -3.15625,7.5c0,11.32597 20.36188,20.5 45.5,20.5c25.13812,0 45.5,-9.17403 45.5,-20.5c0,-2.65114 -1.12482,-5.17474 -3.15625,-7.5l142.15625,0c6.09399,0 11,-4.90601 11,-11l0,-147c0,-6.094 -4.90601,-11 -11,-11l-276,0zm54,199c-13.81215,0 -25,5.37016 -25,12c0,6.62984 11.18785,12 25,12c13.81216,0 25,-5.37016 25,-12c0,-6.62984 -11.18784,-12 -25,-12zm-25,30c-7.73481,0 -14,4.02762 -14,9c0,4.97238 6.26519,9 14,9c7.73481,0 14,-4.02762 14,-9c0,-4.97238 -6.26519,-9 -14,-9zm-24,22c-4.97238,0 -9,2.23756 -9,5c0,2.76242 4.02762,5 9,5c4.97238,0 9,-2.23758 9,-5c0,-2.76244 -4.02762,-5 -9,-5z" |
||||
} |
||||
} |
@ -0,0 +1,20 @@
|
||||
{"data": { |
||||
"capacitor": "m292.103577,149.999374l-117.073944,-0.445328m-167.175035,0.445328l116.628588,0m0.44532,-72.035179l11.364601,0l0,144.640358l-11.364601,0l0,-144.640358zm38.244209,-0.569977l11.364594,0l0,144.640297l-11.364594,0l0,-144.640297zm-162.171733,68.98156l6.905184,0l0,6.905212l-6.905184,0l0,-6.905212zm291.101741,0.325241l6.905182,0l0,6.905212l-6.905182,0l0,-6.905212z", |
||||
"diode": "m180.228439,90.39769l21.70816,0l0,117.211075l-21.70816,0l0,-117.211075zm23.345947,59.602753l88.556381,0m-284.3409,-1.995804l85.541058,0l0,-65.011185l87.251961,66.722031l-87.250778,67.291931l0,-68.720001m-92.331572,-3.917542l6.811423,0l0,6.811447l-6.811423,0l0,-6.811447zm291.20439,2.03891l6.811401,0l0,6.811462l-6.811401,0l0,-6.811462z", |
||||
"gate_and": "m7.454795,178.082489l67.605378,0m-67.605378,-54.850876l67.605393,0.000015m-0.155602,-30.065033l0,113.750015c194.70015,10.208389 199.234482,-124.687454 0,-113.750015zm217.618942,56.662766l-70.312149,0m-221.397258,-29.817062l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm-0.314375,54.532364l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm291.95109,-27.976547l6.683685,0l0,6.683685l-6.683685,0l0,-6.683685z", |
||||
"gate_inverter": "m292.351624,149.998962l-70.506393,0m-0.189026,0a19.883057,19.883057 0 1 1-39.766113,0a19.883057,19.883057 0 1 139.766113,0zm-213.972072,2.405243l69.321826,0l0,-61.05407l101.250404,58.4571l-101.19664,58.840652l0,-56.176727m-76.061115,-3.699677l6.780182,0l0,6.779526l-6.780182,0l0,-6.779526zm291.428455,-2.135864l6.780518,0l0,6.780548l-6.780518,0l0,-6.780548z", |
||||
"gate_nand": "m8.042537,173.038879l60.699101,-0.672531m-60.699101,-49.879471l61.371335,0m-0.785973,-24.868042l0,104.835098c179.441437,9.408417 183.619827,-114.915443 0,-104.835098zm223.921448,50.643158l-64.591507,0m0.637238,0a11.937837,11.937837 0 1 1-23.87648,0a11.937837,11.937837 0 1 123.87648,0zm-227.445681,-29.373505l6.739111,0l0,6.739143l-6.739111,0l0,-6.739143zm-0.150617,50.613495l6.73911,0l0,6.739151l-6.73911,0l0,-6.739151zm291.47287,-24.654327l6.739105,0l0,6.739151l-6.739105,0l0,-6.739151z", |
||||
"gate_nor": "m292.610077,150.214462l-69.483139,-0.215668m0.147217,0.215668a12.942393,12.942393 0 1 1-25.884689,0a12.942393,12.942393 0 1 125.884689,0zm-215.590108,29.264374l63.620397,0m-63.620397,-54.805801l65.561368,-0.431335m-20.75433,-33.139984c129.343479,0 143.580387,58.405624 143.580387,58.405624l-0.347778,0c-18.514755,69.097885 -143.580379,58.057999 -143.580379,58.057999c59.7962,-58.405655 0.347775,-116.463623 0.347775,-116.463623zm-51.490408,30.117874l6.644974,0l0,6.645012l-6.644974,0l0,-6.645012zm0.003831,54.852463l6.644983,0l0,6.64502l-6.644983,0l0,-6.64502zm291.530706,-29.571609l6.644989,0l0,6.64502l-6.644989,0l0,-6.64502z", |
||||
"gate_or": "m7.681484,183.57515l71.7616,0m-71.7616,-60.67144l73.093784,-0.000015m-23.092442,-37.784157c143.186604,0 158.947315,64.65654 158.947315,64.65654l75.817307,0l-76.202316,0c-20.49614,76.493118 -158.94717,64.271667 -158.94717,64.271667c66.195942,-64.656525 0.385136,-128.928207 0.385136,-128.928207zm-56.684011,33.939781l6.677925,0l0,6.677956l-6.677925,0l0,-6.677956zm291.510831,27.410866l6.677948,0l0,6.677948l-6.677948,0l0,-6.677948zm-291.404498,33.607208l6.677927,0l0,6.677917l-6.677927,0l0,-6.677917z", |
||||
"gate_xor": "m80.450493,91.498093c129.22271,0 143.446312,58.351089 143.446312,58.351089l68.423569,0l-68.770889,0c-18.497391,69.033295 -143.446304,58.003708 -143.446304,58.003708c59.740372,-58.351089 0.347511,-116.354797 0.347511,-116.354797zm-22.576313,4.515259c43.415966,54.530457 0,108.018921 0,108.018921m-50.015199,-26.867355l63.560987,0m-63.560987,-54.7547l63.560987,0m-70.418914,-3.722206l6.82584,0l0,6.825867l-6.82584,0l0,-6.825867zm0.057968,54.832268l6.825839,0l0,6.825867l-6.825839,0l0,-6.825867zm291.170364,-27.096024l6.825836,0l0,6.825867l-6.825836,0l0,-6.825867z", |
||||
"inductor": "m7.783882,182.663147l59.679306,0c0,0 -30.829735,-67.744125 15.054253,-68.81945c42.462807,-0.995041 37.635605,69.357201 24.194321,69.357201c-13.441284,0 -12.903625,-68.81955 22.043701,-68.81955c34.947357,0 40.323868,68.819366 20.968399,68.819366c-19.355423,0 -11.828323,-68.819366 22.58139,-68.819366c34.409683,0 41.399155,68.81955 19.893112,68.81955c-21.506073,0 -9.67775,-68.81955 24.19429,-68.81955c33.87207,0 29.570831,68.819366 18.280151,68.819366c-11.290665,0 57.528732,-0.537659 57.528732,-0.537659m-291.202282,-3.571106l6.772959,0l0,6.772995l-6.772959,0l0,-6.772995zm291.221844,0.301132l6.772949,0l0,6.772995l-6.772949,0l0,-6.772995z", |
||||
"junction_1": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l283.11684,0m0.72388,-3.35979l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35944,-0.72348l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0z", |
||||
"junction_2": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l121.77922,0c0,-29.3896 38.77921,-31.3896 38.77921,0l122.55841,0m0.72391,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35945,-0.72348l0,-6.71786l6.71794,0l0,6.71786l-6.71794,0z", |
||||
"junction_3": "m143.58945,150.00009c0,-3.49425 2.83032,-6.32455 6.32455,-6.32455c3.49423,0 6.32455,2.83031 6.32455,6.32455c0,3.49423 -2.83032,6.32455 -6.32455,6.32455c-3.49423,0 -6.32455,-2.83032 -6.32455,-6.32455zm-142.59006,-3.35985l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z", |
||||
"junction_tee": "m149.914,143.67554zm-148.91461,2.96471l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-141.61324,2.91669l-0.66661,-141.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z", |
||||
"resistor": "m7.868202,151.620193l82.343018,0l11.393402,-32.392784l18.643684,62.356071l20.71521,-63.165901l18.12587,62.356071l19.679459,-61.546242l19.679443,61.951149l10.875488,-30.368195l82.860886,0m-291.18655,-2.813812l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635zm291.194058,-0.465622l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635z", |
||||
"source_AC_h": "m7.841724,149.837311l67.250737,0m149.928139,0.389923l67.250793,0m-67.653702,-0.227753a74.615135,74.615135 0 1 1-149.230286,0a74.615135,74.615135 0 1 1149.230286,0zm-126.528297,-1.996506c49.250984,-78.535637 61.230949,87.853104 103.826454,2.662094m-200.917796,-4.522659l6.717863,0l0,6.717896l-6.717863,0l0,-6.717896zm291.36706,0.642181l6.717865,0l0,6.717896l-6.717865,0l0,-6.717896z", |
||||
"source_DC": "m221.862747,94.98175l0,31.813873m-21.510544,-15.906944l43.020996,0m48.613678,39.407722l-121.593582,0m-162.447085,0l115.809275,0m1.040596,-37.757935l7.284134,0l0,75.963058l-7.284134,0l0,-75.963058zm37.461227,-41.623596l7.284134,0l0,158.169647l-7.284134,0l0,-158.169647zm-161.255614,75.613235l6.954941,0l0,6.954971l-6.954941,0l0,-6.954971zm291.012953,0.175003l6.954956,0l0,6.954971l-6.954956,0l0,-6.954971z", |
||||
"speaker": "m21.35352,187l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm6.70878,-76.11937l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm155.70878,-32.61937l115,-83l0,296.5l-115,-82.5l0,-131zm-70.99999,0l70.99999,0l0,131l-70.99999,0l0,-131z" |
||||
} |
||||
} |
@ -0,0 +1,25 @@
|
||||
{"data": { |
||||
"manual_input": "m1,103.64394l298,-30.9037l0,154.51852l-298,0z", |
||||
"callout_left_right": "m1,150.0006l58.10869,-58.1087l0,29.05434l46.81141,0l0,-87.16304l87.1598,0l0,87.16304l46.8114,0l0,-29.05434l58.1087,58.1087l-58.1087,58.10869l0,-29.05435l-46.8114,0l0,87.16306l-87.1598,0l0,-87.16306l-46.81141,0l0,29.05435l-58.10869,-58.10869z", |
||||
"card": "m1,60.5l59.5,-59.5l238.5,0l0,298l-298,0l0,-238.5z", |
||||
"collate": "m0,1l299,0l-149.5,149l149.5,149l-299.00031,0l149.50031,-149l-149.5,-149z", |
||||
"connector_offpage": "m0.99775,0.99775l297.99984,0l0,238.39982l-149.00002,59.60002l-148.99999,-59.60002l0.00017,-238.39982z", |
||||
"data_stored": "m50.83397,0.99813l249.16667,0c-27.52219,0 -49.83333,66.78392 -49.83333,149.16604c0,82.38213 22.31114,149.16603 49.83333,149.16603l-249.16667,0l0,0c-27.52219,0 -49.83333,-66.78391 -49.83333,-149.16603c0,-82.38212 22.31114,-149.16604 49.83333,-149.16604z", |
||||
"data": "m1.00038,249.33351l59.60001,-198.66668l238.40001,0l-59.60001,198.66668z", |
||||
"decision": "m0.99837,149.99953l148.79352,-102.86476l148.79387,102.86476l-148.79387,102.86476l-148.79352,-102.86476z", |
||||
"delay": "m1,1l149,0l0,0c82.29044,0 149,66.70957 149,149c0,82.29044 -66.70956,149 -149,149l-149,0z", |
||||
"display": "m1,149.99924l49.66672,-97.42307l198.66612,0c27.43034,0 49.66716,43.61774 49.66716,97.42307c0,53.80476 -22.23682,97.42308 -49.66716,97.42308l-198.66612,0l-49.66672,-97.42308z", |
||||
"document_multiple": "m1.00054,45.02563l253.99998,0l0,206.43799c-126.99997,0 -126.99997,78.65668 -253.99998,33.96539zm21.49946,-240.92902l0,-19.5l255,0l0,207l-22.5,1m-210.5,-207l0,-25l255,0l0,207l-21.5,0", |
||||
"document": "m1.00064,1.00098l298,0l0,242.19891c-149,0 -149,92.28223 -298,39.84915z", |
||||
"filter1": "m75.5,150l74.5,-149l74.5,149l-74.5,149l-74.5,-149zm0,0l149,0", |
||||
"or_junction": "m0.99865,149.9991l0,0c0,-82.29043 66.70957,-149 149.00001,-149l0,0c39.51724,0 77.41597,15.69817 105.3589,43.64109c27.94292,27.94292 43.64107,65.84166 43.64107,105.35891l0,0c0,82.29041 -66.70956,148.99998 -148.99997,148.99998l0,0c-82.29044,0 -149.00001,-66.70958 -149.00001,-148.99998zm149.00001,-149l0,297.99998m-149.00001,-148.99998l297.99998,0", |
||||
"preparation": "m1.00063,150.00006l59.58485,-82.24058l178.75446,0l59.58505,82.24058l-59.58505,82.24086l-178.75446,0l-59.58485,-82.24086z", |
||||
"process": "m1,51.87891l298,0l0,196.24391l-298,0zm37.25,-196.24391l0,196.24391m223.5,-196.24391l0,196.24391", |
||||
"punched_tape": "m1.00047,30.80047l0,0c0,16.45808 33.35479,29.8 74.50001,29.8c41.1452,0 74.49998,-13.34192 74.49998,-29.8l0,0c0,-16.45809 33.3548,-29.8 74.50002,-29.8c41.14522,0 74.49998,13.34192 74.49998,29.8l0,238.4c0,-16.45808 -33.35477,-29.80002 -74.49998,-29.80002c-41.14522,0 -74.50002,13.34193 -74.50002,29.80002c0,16.45807 -33.35478,29.79999 -74.49998,29.79999c-41.14522,0 -74.50001,-13.34192 -74.50001,-29.79999z", |
||||
"sequential_data_storage": "m150,299l0,0c-82.29043,0 -149,-66.70955 -149,-149l0,0c0,-82.29043 66.70957,-149 149,-149l0,0c39.51726,0 77.41599,15.69817 105.3589,43.64108c27.94292,27.94293 43.6411,65.84165 43.6411,105.35892l0,0c0,39.51726 -15.69818,77.41599 -43.6411,105.3589l43.6411,0l0,43.6411z", |
||||
"sort": "m-0.0038,150.00102l299.00334,0m-299.00334,-0.00002l149.50209,-150.00059l149.50131,150.00059l-149.50131,150.00018l-149.50209,-150.00018z", |
||||
"storage_internal": "m1,1l297.99997,0l0,297.99997l-297.99997,0zm37.25,-297.99997l0,297.99997m-37.25,-260.74997l297.99997,0", |
||||
"terminal": "m48.94167,99.12235l202.11729,0l0,0c26.47794,0 47.9425,22.7794 47.9425,50.8792c0,28.09979 -21.46457,50.87918 -47.9425,50.87918l-202.11729,0l0,0c-26.47791,0 -47.9425,-22.77939 -47.9425,-50.87918c0,-28.09981 21.46459,-50.8792 47.9425,-50.8792z", |
||||
"wave": "m1,37.20809c99.33355,-125.42461 198.66708,125.4246 298.00061,0l0,225.76426c-99.33353,125.42462 -198.66706,-125.42459 -298.00061,0z" |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
{"data": { |
||||
"cards_clubs": "m107.57338,275.50809c15.10838,-15.77673 27.93053,-34.56763 33.34637,-55.90254c-16.19595,12.31328 -31.05006,32.11845 -53.64258,31.36813c-17.05595,0.97891 -37.37346,0.99548 -49.37947,-13.26945c-26.83,-21.5751 -34.03729,-64.69673 -12.00568,-92.15404c15.07669,-19.82526 41.4039,-28.23172 65.56467,-25.25816c15.22319,-6.45935 -2.97749,-22.81502 -4.80785,-33.02267c-11.33012,-37.02704 15.36169,-81.44029 54.60988,-85.70572c28.15103,-4.0415 55.67099,14.18231 69.44571,37.83293c7.4856,16.54877 3.58533,35.33045 1.83887,52.49866c-5.88113,8.62766 -20.94342,29.50022 0.55099,27.85616c21.2518,-0.33633 43.69397,5.90277 57.70761,22.8026c20.49747,22.76067 22.37766,60.37286 1.7551,83.63007c-10.90869,14.16582 -27.2782,25.50356 -45.80551,24.87234c-18.13391,1.83067 -37.77023,-2.10338 -50.62924,-15.92061c-5.48438,-3.84309 -18.92297,-18.36311 -18.91833,-15.17883c13.43222,27.98354 28.62112,57.04413 55.49167,74.38477c9.60062,7.71954 -14.62323,2.41226 -20.4874,3.98563c-35.53012,0.0314 -71.06009,0.06342 -106.59021,0.09497c7.31842,-7.63818 14.6373,-15.27603 21.9554,-22.91422z", |
||||
"cards_diamonds": "m34.92883,153.9321c25.56111,-56.62673 71.64644,-104.95768 110.85236,-152.92286c45.60773,30.78102 85.01025,98.49872 119.29071,145.66264c-30.57587,54.55344 -74.58923,104.23671 -114.23947,153.1615c-42.74368,-44.7616 -79.29648,-95.90262 -115.90359,-145.90128z", |
||||
"cards_hearts": "m106.76112,245.09012c-77.74644,-57.80281 -105.54389,-94.36783 -105.76917,-139.13003c-0.20544,-40.80623 34.10907,-80.19025 69.67002,-79.96313c17.75755,0.11364 55.84863,15.13257 69.33681,27.33919c6.79614,6.1504 10.01512,5.54391 25.146,-4.73779c41.17987,-27.98239 81.39243,-28.56973 107.43585,-1.56907c41.62292,43.15273 34.04501,94.68497 -21.78392,148.13782c-29.68187,28.41864 -94.50056,78.8349 -101.35565,78.8349c-2.08591,0 -21.29187,-13.01038 -42.67994,-28.9119z", |
||||
"cards_spades": "m92.84135,287.13989c18.3756,-17.73279 31.81261,-40.18849 43.07161,-62.94162c6.87787,-9.075 0.36623,-17.01425 -9.00183,-9.3188c-24.07579,16.07495 -56.84848,21.58751 -82.91551,6.92194c-29.46779,-15.23779 -42.75618,-51.47162 -36.07021,-83.04361c4.23415,-31.99545 27.52112,-57.07481 52.80524,-75.08997c29.04437,-20.7771 60.40868,-38.61331 86.95355,-62.67224c11.08365,0.22219 19.42508,17.61496 31.35349,22.21747c31.67316,23.59131 69.20874,40.95643 94.15042,72.50237c12.60098,17.9752 19.78281,40.10946 20.58459,61.98948c-3.83926,29.67093 -21.5314,60.96272 -52.04169,69.41241c-26.37521,7.98038 -53.51129,-2.14038 -76.49545,-15.01619c-2.80743,-0.60251 -13.10471,-8.7151 -9.02362,-2.41039c13.74066,28.19803 28.79581,56.19804 50.59952,79.09325c1.28156,2.89285 11.33243,9.75613 5.98334,9.64709c-44.76935,0 -89.53856,0 -134.30794,0c4.78471,-3.7637 9.5696,-7.5275 14.35449,-11.2912z", |
||||
"chess_bishop": "m61.92021,296.91153c0.43627,-9.82327 20.22808,-4.98053 9.33225,-14.55078c3.63447,-11.80536 14.91982,-19.66748 21.741,-29.79436c5.22913,-8.62125 17.00826,-19.01086 11.31252,-29.67047c-10.46021,-5.58662 -7.49181,-18.00824 5.30239,-15.28014c8.2272,-7.58801 8.79371,-20.26302 11.57766,-30.59467c2.52694,-12.36574 4.07327,-24.95554 3.66998,-37.5896c-14.99698,0.03661 -30.27584,-0.68196 -44.73978,-4.74928c2.8019,-11.20453 20.86148,-8.79659 28.26084,-15.67982c-6.87532,-6.18329 13.89957,-5.56496 8.46355,-15.34472c-0.37302,-11.20033 -9.19685,-14.44135 -16.26585,-22.60765c-9.44371,-12.76132 5.36173,-25.51221 13.58463,-34.13964c9.16566,-9.37672 19.64847,-19.36716 22.45389,-32.62941c-3.77451,-3.10155 -12.3967,-7.54239 -3.59866,-11.78228c12.01596,-2.03703 24.83499,-2.28521 36.61118,1.05654c7.81644,7.61585 -11.93045,8.03119 -3.43417,17.63365c10.07373,12.07176 -3.50795,18.30174 -11.52704,25.27969c-4.66763,5.89621 -18.59915,13.67189 -16.20224,19.78346c13.63968,-0.47554 21.5871,-13.67976 31.31615,-21.49704c10.67101,-13.68708 20.99446,8.43092 27.81822,15.94714c8.40642,11.39094 2.60674,26.70086 -10.05556,31.59287c-6.28001,6.46729 -10.44972,24.88914 4.57674,22.14657c8.72636,3.17196 -8.52979,3.51371 1.37608,6.446c6.58298,2.52787 32.25821,8.30554 18.1142,16.0547c-12.00471,2.71368 -24.40523,2.6017 -36.6002,1.50584c-0.75204,18.52477 1.89484,36.97644 7.35446,54.6958c1.35513,5.04123 2.71027,10.08244 4.06541,15.12361c6.52129,-0.129 19.98573,-1.55484 13.76321,9.18311c-13.08994,7.21928 -5.0789,22.41203 2.17738,31.05447c8.99446,11.37192 22.40833,22.01788 22.98288,37.58719c3.59734,2.14404 15.56946,8.03415 12.10645,12.64545c-57.30759,-0.2937 -114.6481,0.84897 -171.9265,-1.25046l-1.98901,-0.18246l-1.62205,-0.39337l0,0z", |
||||
"chess_king": "m75.6993,294.60599c-8.08068,-9.43317 12.65705,-9.68567 9.39906,-20.14252c5.95673,-13.85672 21.44485,-22.24414 23.72572,-37.99019c-6.28166,-4.37628 -9.89445,-14.96013 2.0899,-13.70361c8.78859,-6.61539 7.6902,-20.15297 10.33321,-30.0876c2.47588,-16.03471 3.03656,-32.26408 4.10001,-48.43053c-10.16894,-0.78108 -20.58942,-0.23701 -30.49778,-2.84268c0.28501,-10.75136 20.44619,-6.62604 21.3638,-16.77121c14.65907,-0.2649 0.81196,-22.15992 -5.15776,-27.38371c-7.64118,-8.81222 -12.7306,-22.72323 -6.92168,-33.60618c8.30865,-5.52043 27.09519,-2.1601 26.24604,-16.66769c-5.65058,-3.22095 -12.82484,-1.17552 -19.15805,-1.74514c0.38948,-6.7649 0.77895,-13.52979 1.16843,-20.29469c8.37558,-0.64424 16.75118,-1.28853 25.12676,-1.93283c-4.25133,-4.41846 -10.61392,-7.6702 -12.20608,-13.92034c5.41558,-8.90246 18.46751,-8.1166 27.81776,-8.03243c9.09207,-0.62713 25.66919,5.43749 13.27614,15.20592c-1.00447,2.39887 -10.78024,8.36352 -4.73895,7.71326c7.73515,0 15.47028,0 23.20541,0c-0.02223,6.6133 -0.20001,13.29232 1.35312,19.76423c-5.90448,4.39723 -25.05112,-3.75612 -19.59946,9.81149c6.13853,5.67249 15.53992,5.52279 23.32581,8.02098c4.54138,0.45371 8.15405,1.63713 6.5175,6.94557c0.85359,9.85596 -1.63307,19.77049 -8.40776,27.25217c-4.79567,7.80693 -15.56667,17.58031 -12.3781,26.61691c6.03265,-0.98199 10.87871,2.97905 6.06032,7.43356c4.94479,3.66121 22.35728,2.82278 18.59119,11.98875c-8.82205,2.92029 -18.29916,1.70366 -27.45192,2.00166c2.43703,25.01987 5.80666,50.04211 11.43709,74.54305c3.28979,5.43672 16.35808,9.61523 5.63309,16.70296c-4.00256,13.19919 8.78183,23.08223 16.81097,31.55379c8.82797,6.61176 4.54482,19.91519 17.0338,22.03693c9.83562,9.52774 -13.5036,9.27408 -19.49568,9.29486c-39.66827,0.42773 -79.37933,1.02615 -119.03208,-0.25211c-3.24605,-0.40967 -7.25645,-0.31595 -9.56982,-3.08264z", |
||||
"chess_knight": "m100.17753,299.2356c-10.0382,0.34137 -24.72987,-4.84531 -14.46609,-16.41525c11.17445,-4.40472 -1.98608,-19.00409 9.21265,-25.88123c8.98889,-12.79953 21.20518,-24.48807 24.89179,-40.11865c-0.57252,-10.60066 -13.22608,-16.87427 -7.18922,-28.60765c-5.92265,-18.77635 -4.55389,-40.38806 6.25748,-57.26643c9.18032,-15.67659 20.32635,-32.28713 19.15084,-51.25797c-11.5139,4.80804 -23.70148,9.0206 -36.37307,6.83708c-11.91311,-1.1064 -22.59742,8.54017 -34.74928,3.29494c-12.31807,-2.55921 -19.64501,-19.02957 -10.4606,-28.65753c10.03679,-8.57325 24.78339,-8.84916 34.35549,-18.41713c12.62932,-10.46186 24.31081,-24.61204 41.71716,-26.46155c7.69322,-1.76131 10.99294,-9.49197 15.25148,-15.2854c3.53894,9.18849 9.69408,17.31353 18.95801,21.387c18.83824,10.9118 23.5276,33.98066 30.47462,52.94444c5.13654,14.85179 9.41592,30.35814 18.01733,43.6171c0.09145,6.36343 -9.56343,9.05308 -3.04225,16.51302c3.39153,20.2325 3.53752,40.95071 3.23686,61.41966c-5.72005,10.01691 -10.93028,21.19722 -3.29993,32.69295c5.09689,14.05096 17.7905,23.26645 24.03563,36.52565c3.53024,6.8656 -6.88226,16.83319 6.09091,15.10654c11.84755,6.2681 2.28101,21.56821 -9.50232,17.11713c-44.15834,1.12289 -88.41394,2.24417 -132.5675,0.9133z", |
||||
"chess_pawn": "m76.17518,297.98557c-10.50418,1.59836 -25.59558,-8.37918 -12.29734,-17.44669c11.25366,-5.8967 0.45475,-21.25174 12.35514,-28.71019c12.10069,-16.52 24.98341,-33.40712 31.01369,-53.22789c-0.84142,-9.49573 -19.64921,-25.21422 -0.595,-28.29408c15.7114,1.82648 9.96503,-21.69583 15.39529,-31.88779c3.26528,-15.46995 5.63882,-31.19783 5.05293,-47.04268c-10.94164,-0.30554 -22.10724,0.96841 -32.83411,-1.63306c-6.84238,-8.98132 15.45903,-13.45317 19.13895,-21.55999c7.72121,-11.65172 -11.3031,-24.52544 -3.15941,-38.29919c5.20168,-20.85055 29.26575,-34.36854 49.62741,-26.73076c21.08499,5.46792 36.67119,30.37529 26.64961,51.09357c-0.80009,3.99703 -7.062,9.17959 -4.97066,12.36269c9.12987,6.33601 19.70087,11.85771 25.48528,21.64108c-8.18987,5.93826 -21.89375,1.4159 -32.1122,4.23674c-9.29645,8.24593 -0.11353,25.10609 0.36266,36.41936c2.90009,12.9261 5.46037,25.96617 8.78381,38.77452c6.98657,2.72525 21.33679,5.88095 13.4649,17.20207c-11.22217,9.11032 -5.7289,23.62137 0.60231,33.84465c7.87996,15.78793 21.40668,27.84862 29.69345,43.27188c3.07736,7.12057 -7.92374,19.7316 5.78708,16.78259c14.86404,3.15744 5.96938,23.76761 -7.3875,18.8981c-49.21407,1.73288 -98.52922,2.43631 -147.74446,0.51953l-2.31185,-0.21448l0,0z", |
||||
"chess_queen": "m59.54884,298.46313c-11.18457,2.51251 -19.80814,-14.30008 -5.94004,-16.129c12.20336,0.23074 -3.0349,-11.94995 7.98012,-16.05304c12.67021,-12.36537 25.23749,-25.26018 33.3575,-41.17609c-4.09126,-5.42482 -10.84344,-10.60782 -9.96117,-18.03085c7.964,-2.71161 19.82806,-0.87375 20.29981,-13.44502c7.24239,-22.68985 9.1741,-46.67986 10.76167,-70.3136c-7.99255,-6.33596 -24.45116,-0.33371 -35.62089,-3.56097c-16.94488,-4.5746 6.31873,-13.33291 13.78075,-12.6113c6.70493,0.01006 16.63324,-4.12222 5.41084,-7.2804c9.46686,-0.43687 23.08297,-12.44518 7.51486,-16.77373c11.54188,-8.28655 2.64816,-26.31929 -2.17102,-36.68976c-7.265,-12.52285 -19.21146,-21.59242 -32.71435,-26.42871c-2.18616,-12.77 18.63421,-8.99565 27.07909,-9.65835c12.78728,0.48775 25.82639,-0.15282 36.96732,-7.11507c15.05278,-6.96464 27.8495,4.65901 41.61934,7.11611c13.92807,0.89699 28.41634,-2.50577 41.97807,1.44028c4.20209,2.98911 11.18788,7.71034 2.77457,9.97613c-16.06789,8.94404 -31.07338,22.15693 -35.10127,40.92605c-6.0766,10.44077 4.6955,19.50048 -5.15381,26.98807c-0.10249,8.80961 22.85634,10.04067 10.00395,14.37878c8.80815,4.77542 27.69864,1.76332 29.62625,12.3696c-7.99612,6.2903 -19.2092,3.80788 -28.79007,4.39512c-3.2489,1.10706 -11.41316,-2.70125 -10.17032,2.89742c-0.6366,25.08775 5.87923,49.75521 12.1806,73.83221c0.00804,11.79608 29.09497,5.10777 12.92737,18.49597c-11.94247,10.28146 5.56685,24.68452 11.63272,33.82986c8.25099,10.03221 22.89711,15.11021 21.67468,29.8362c8.40468,0.60507 18.40166,13.69095 6.78131,16.95151c-62.8902,1.31946 -125.82766,2.22778 -188.72791,1.83258z", |
||||
"chess_rock": "m70.40736,299.11804c-15.60727,2.87628 -15.90823,-19.81082 -1.8931,-20.53482c-4.2011,-9.73361 -0.98556,-21.67557 5.22356,-30.68398c8.90442,-15.05035 22.29623,-30.00999 19.52936,-48.8515c-0.95786,-9.8022 -13.10349,-27.37677 5.72565,-24.85997c5.09087,-9.77498 2.13017,-24.16621 5.9483,-35.39389c3.33424,-21.28385 10.75552,-43.9948 2.86147,-65.09612c-4.97705,-11.23243 -17.62387,-18.62589 -16.26645,-32.35733c-1.42947,-13.39034 -0.95647,-26.88279 0.60455,-40.23392c6.07738,0.50975 12.84039,-1.27954 18.38155,1.475c-0.04153,12.96106 12.26991,10.08973 10.7935,-0.92486c3.23881,-1.28251 8.60017,-0.18413 12.6562,-0.55014c18.03256,0 36.06522,0 54.09778,0c-2.06311,7.51434 3.5195,17.19948 10.5887,8.35272c-1.93379,-11.75267 14.25911,-7.86334 10.37854,2.24694c0.22855,13.39515 1.87041,27.25403 -1.89201,40.29753c-6.12787,5.2086 -6.22449,15.45995 -13.90137,21.60233c-6.16908,11.51656 -3.45045,25.43306 -2.7644,37.9428c2.61279,18.51363 6.92676,36.79671 8.00221,55.52328c-0.76923,10.18126 20.18948,7.18474 11.15244,19.71645c-9.87662,8.41151 -4.0954,22.61668 -0.18413,32.66171c7.71916,17.36203 23.99019,32.95758 21.5343,53.32025c-1.94743,8.89606 14.16618,5.88821 9.97758,17.34372c-0.12151,14.11871 -21.10172,5.04239 -30.39526,8.00793c-46.7146,0.56656 -93.44374,1.44144 -140.159,0.99585z" |
||||
} |
||||
} |
@ -0,0 +1,9 @@
|
||||
{"data": { |
||||
"divide": "m150,0.99785l0,0c25.17819,0 45.58916,20.41097 45.58916,45.58916c0,25.17821 -20.41096,45.58916 -45.58916,45.58916c-25.17822,0 -45.58916,-20.41093 -45.58916,-45.58916c0,-25.1782 20.41093,-45.58916 45.58916,-45.58916zm0,296.25203c-25.17822,0 -45.58916,-20.41095 -45.58916,-45.58917c0,-25.17819 20.41093,-45.58916 45.58916,-45.58916c25.17819,0 45.58916,20.41096 45.58916,45.58916c0,25.17822 -20.41096,45.58917 -45.58916,45.58917zm-134.06754,-193.71518l268.13507,0l0,91.17833l-268.13507,0z", |
||||
"equal": "m0.99915,31.03476l297.3767,0l0,95.17349l-297.3767,0zm0,47.58677l297.3767,0l0,95.17349l-297.3767,0z", |
||||
"minus": "m0.99887,102.39503l297.49445,0l0,95.2112l-297.49445,0z", |
||||
"not_equal": "m40.81188,62.2131l103.7978,0l22.27972,-61.2131l65.67503,23.90375l-13.5795,37.30935l40.20317,0l0,69.88993l-65.64099,0l-12.71893,34.94495l78.35992,0l0,69.88991l-103.79779,0l-22.27972,61.21309l-65.67503,-23.90378l13.57949,-37.30933l-40.20319,0l0,-69.88991l65.64102,0l12.71894,-34.94498l-78.35995,0z", |
||||
"times": "m1.00089,73.36786l72.36697,-72.36697l76.87431,76.87368l76.87431,-76.87368l72.36765,72.36697l-76.87433,76.87431l76.87433,76.87431l-72.36765,72.36765l-76.87431,-76.87433l-76.87431,76.87433l-72.36697,-72.36765l76.87368,-76.87431l-76.87368,-76.87431z", |
||||
"plus": "m1.00211,102.40185l101.39974,0l0,-101.39975l95.45412,0l0,101.39975l101.3997,0l0,95.45412l-101.3997,0l0,101.3997l-95.45412,0l0,-101.3997l-101.39974,0z" |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
{"data": { |
||||
"3_ways": "m1,159.61292l52.87097,-52.87097l0,26.43549l69.69355,0l0,-79.30646l-26.43549,0l52.87096,-52.87097l52.87097,52.87097l-26.43549,0l0,79.30646l69.69356,0l0,-26.43549l52.87096,52.87097l-52.87096,52.87097l0,-26.43549l-192.25807,0l0,26.43549l-52.87097,-52.87097z", |
||||
"3D_plane_1": "m1,187.25l74.49999,-74.5l223.49998,0l-74.5,74.5l-223.49997,0z", |
||||
"3D_plane_2": "m112.75,75.50002l74.5,-74.50002l0,223.50002l-74.5,74.49998l0,-223.49998z", |
||||
"babe": "m299.04794,205.18787c-3.77606,12.02469 -14.23288,15.70245 -23.42029,7.51477c-4.99579,-3.63025 -15.93668,-4.01721 -8.27643,4.11765c4.3663,3.89154 12.96597,18.43826 2.6701,7.63031c-6.72076,-9.88528 -21.45963,-10.97299 -26.80637,-21.01428c-0.7126,-12.09052 -19.01982,-9.85156 -28.21417,-13.29294c-7.97734,0.2787 -20.34282,-8.29872 -23.22426,-8.2877c7.17442,8.54059 6.05238,22.25063 13.10196,29.89879c9.38933,2.61444 12.97119,14.02899 0.81691,15.99643c-14.79422,5.33719 -12.22833,-12.63193 -20.04561,-20.07751c-5.76567,-2.6597 -0.17117,23.97388 -5.6981,17.70459c0.14073,-11.08301 -5.26385,-21.19345 -7.43376,-31.72055c3.66939,-3.90994 3.24513,-15.0824 -1.24792,-6.28702c-9.32401,15.52066 -21.53839,29.02148 -33.42717,42.58749c-12.32529,3.3429 -25.61986,1.75922 -38.28926,0.99091c-13.33909,0.21539 -16.41985,-23.40515 -24.5597,-24.14911c-1.69956,6.7645 0.04348,10.7413 3.54543,14.16528c-5.43895,6.35352 -17.0083,4.24969 -24.32439,1.67859c-12.99512,4.18167 4.10523,-7.37332 9.39456,-5.37735c0.12955,-9.23239 1.69711,-21.43146 -1.15234,-30.31955c-4.26376,-4.21536 -13.54346,-25.27448 -12.61225,-10.56541c-2.43563,17.92097 -10.72475,34.53096 -12.64814,52.59737c-1.6411,10.13943 -15.83897,5.33594 -23.08624,5.82672c-7.30112,2.27881 -6.50991,0.30469 -13.11051,0.69199c7.01961,-9.43863 23.73587,-3.27213 28.50491,-13.30713c2.12957,-14.98691 1.05568,-30.67914 6.12082,-45.11276c-2.11474,-14.92252 -6.78208,-29.69904 -6.85915,-44.79436c2.37534,-9.86703 8.15515,-18.85688 7.95601,-29.33565c4.35726,-11.70351 7.18935,-24.90283 15.98966,-34.19202c9.32926,-10.04192 23.95938,-2.34001 28.82026,8.23518c5.23969,11.5593 -2.89557,23.16132 -3.7411,34.79802c10.97217,2.97472 2.07053,18.22128 16.21945,16.77118c11.11885,1.02463 7.90206,16.12445 0.58741,20.71976c-0.2656,7.05571 8.13246,16.23514 6.20955,25.48418c5.50479,6.05925 12.30074,9.05171 12.7784,-1.61943c3.7646,-14.17346 5.15414,-29.11295 11.81579,-42.45001c2.65157,-10.67883 13.6115,-24.48097 25.27724,-15.69678c10.81068,5.92413 13.54153,23.94177 22.32231,28.34891c10.75034,-9.00977 20.01573,4.53285 28.83136,9.38853c13.27853,7.35518 24.98924,17.12993 37.79256,25.23851c13.37863,6.81644 27.61211,12.28633 40.07347,20.72394c8.47791,4.65475 17.41223,-4.71762 19.34897,6.49048zm-149.77098,-49.39249c-1.45267,7.65393 4.38054,3.60388 0,0z", |
||||
"bevel": "m24.5,277l-24,23m276,-22l23,22m-23,-274l23,-24m-275,23l-23,-22m23,21.5l252,0l0,252l-252,0l0,-252zm-23.5,-23.5l299,0l0,299l-299,0l0,-299z", |
||||
"bone": "m273.3559,119.27242c-11.58661,5.90293 -23.89537,9.95385 -36.67676,12.27164c-53.42084,0.2984 -105.13121,0.41397 -158.74251,2.97562c-14.28426,-2.65407 -30.58815,0.18161 -42.82426,-9.13783c-9.06827,-7.25944 -28.17529,-2.4415 -25.05096,11.36483c6.17649,14.08824 -14.61965,21.70474 -7.59176,36.00003c6.11589,14.67987 24.54805,9.02721 35.59484,4.1729c20.29636,-4.79665 40.55842,-9.8537 60.92737,-14.38416c42.52868,-4.82219 82.54949,-1.83121 124.59118,1.02063c11.68694,2.54654 23.55803,4.03351 35.45654,5.38187c10.1839,0.16006 18.34979,7.46698 27.92017,8.65919c12.6539,-1.22533 16.41983,-19.19981 7.59747,-27.17406c-13.18918,-8.72406 6.75436,-24.14882 -8.14166,-31.38885c-4.25287,-2.31086 -8.733,-0.75754 -13.05966,0.23817z", |
||||
"chord": "m277.04315,255.07486c-47.63342,47.63342 -121.3194,57.33392 -179.65791,23.65366c-58.33851,-33.6824 -86.78111,-102.34741 -69.34571,-167.41564c17.43547,-65.06779 76.39998,-110.31287 143.76268,-110.31287l105.24094,254.07486z", |
||||
"circle_band": "m1,224.5l0,0c0,-82.29044 66.70957,-149 149,-149c82.29042,0 149,66.70956 149,149l-74.5,0c0,-41.14522 -33.3548,-74.5 -74.5,-74.5c-41.1452,0 -74.5,33.35478 -74.5,74.5z", |
||||
"circle_pie": "m299,150l0,0c0,82.29044 -66.70956,149 -149,149c-82.29044,0 -149,-66.70956 -149,-149c0,-82.29043 66.70956,-149 149,-149l0,149z", |
||||
"cube": "m30.42785,1.56129l-29.42785,29.42785l0,268.21907l264.28937,0.68124l33.35693,-30.10974l0,-268.21843l-268.21845,0zm236.46521,28.94674l0,269.42122m0,-269.42122l33.35693,-29.50804m-33.35693,30.791l-265.57233,-1.28296", |
||||
"dagger": "m1.57422,47.21264c-2.775,14.24454 5.08469,27.79975 11.2199,40.10517c13.07098,21.70464 28.2358,42.59465 47.26681,59.46329c12.98537,10.6889 24.68548,22.99878 39.38902,31.4678c19.22253,12.95224 39.86254,23.55869 61.26455,32.3793c15.9138,6.93546 32.60274,11.85577 49.65401,15.08282c4.95967,1.28564 18.82625,4.91663 10.19991,-3.60251c-7.15544,-3.02133 -14.76756,-5.22583 -21.96236,-8.37695c-34.92769,-14.34082 -72.04247,-26.94104 -100.21951,-53.10463c-4.66899,-6.20064 8.95855,3.3492 11.3067,5.96803c23.50703,16.73581 50.36192,27.95749 76.84653,39.04178c13.47301,4.46384 28.20039,13.97903 42.51408,7.22675c12.36502,-4.72467 -2.95702,-5.44891 -8.42033,-7.24844c-24.28337,-6.90491 -48.85286,-13.54227 -71.13893,-25.76019c-12.72568,-4.65573 -23.42126,-13.22678 -34.85331,-20.29132c-12.35065,-8.53128 -23.65424,-18.49934 -35.67798,-27.49634c-7.86864,-5.96642 -15.68669,-11.98865 -22.20108,-19.46664c-11.01625,-11.02383 -21.70009,-22.36108 -31.68482,-34.33246c-6.52307,-7.36439 -13.86146,-14.10685 -18.44664,-22.93894l-5.05655,-8.11652zm256.45175,139.13108c-1.50562,-0.04745 -3.06,0.28214 -4.36211,1.15021c-9.72246,4.86124 -7.63908,13.88922 -13.19478,20.83386c-4.16678,5.55569 -9.028,8.33356 -15.97261,10.41693c1.38892,2.77783 4.16675,6.94461 4.16675,10.41693c0,7.63907 -9.02798,14.58368 -15.97261,13.88922c-2.77786,-0.69446 -9.028,-4.16678 -11.11139,0c-0.69446,1.38895 -0.69446,2.77786 0,3.47232c0,2.77786 3.47231,4.16678 6.25015,5.55569c7.63908,2.08337 15.97263,-0.69446 22.22279,-4.86124c4.86122,-2.77783 8.33353,-7.63907 9.72246,-13.19479l1.38892,-9.02798c0.69446,-2.77783 3.47232,-3.47232 6.94463,-8.33353c4.16676,-5.55569 8.33354,-15.2782 13.88924,-19.44495c2.08337,-1.38892 4.16675,-2.0834 6.94461,-2.77786c-1.38892,-2.08337 -2.77786,-3.47229 -4.16678,-5.55566c-1.38892,-0.69449 -2.77783,-2.0834 -4.16675,-2.0834c-0.78128,-0.26041 -1.6792,-0.42728 -2.58252,-0.45575zm29.4061,26.21594c-2.61084,-0.02899 -5.33868,0.54254 -8.07312,1.32382l5.55569,3.47232c-1.38895,2.77783 -4.86121,8.33353 -4.16678,11.80585c0.69449,6.94461 10.41693,6.94461 14.58371,2.77783c4.86124,-5.55569 4.86124,-13.88922 -2.08337,-18.056c-1.82297,-0.91147 -3.78549,-1.30127 -5.81613,-1.32382zm-13.39011,3.40723c-0.54364,0.00192 -1.07498,0.00705 -1.60593,0.0217c-3.8486,0.21091 -7.69568,0.50116 -11.54541,0.67276c-2.41867,0.03116 -4.88754,-0.00473 -7.22676,0.69446c-3.17285,2.02515 -5.29396,5.38272 -6.53229,8.87607c-0.16666,0.50345 -0.30807,1.02072 -0.41234,1.54083c3.86218,1.74924 8.17189,1.5618 12.30499,1.41064c2.50439,-0.06696 5.00949,0.24561 7.50888,0.36893c1.7876,0.07916 3.57104,0.32327 5.36038,0.26044c2.19412,-0.07278 4.22598,-1.3168 5.38205,-3.16849c0.99927,-1.58255 1.9447,-3.21933 2.56085,-4.99146c0.49768,-1.59048 0.5896,-3.80087 -1.06339,-4.75272c-1.43857,-0.79446 -3.10013,-0.93906 -4.73105,-0.93317zm2.53915,15.9726c-0.69449,0.69446 -1.38892,0.69446 -2.0834,1.38892c-0.69446,3.47232 8.33356,11.80588 9.72247,4.16678c-3.47232,-1.38892 -5.55573,-2.77786 -7.63907,-5.55569z", |
||||
"diamonds": "m79.28394,70.5173l69.51914,-69.51918l69.53062,69.51918l-69.53062,69.5193l-69.51914,-69.5193zm-78.28265,78.73502l69.53064,-69.51916l69.51917,69.51916l-69.51917,69.53081l-69.53064,-69.53081zm158.04381,1.41991l69.53076,-69.50788l69.50775,69.50788l-69.50775,69.53059l-69.53076,-69.53059zm-78.26005,78.74646l69.50779,-69.51927l69.53087,69.51927l-69.53087,69.5197l-69.50779,-69.5197z", |
||||
"dog": "m244.35188,22.54387l-69.54898,69.54889c-119.32899,0.00291 -120.2569,-0.00142 -121.18423,0c-10.16035,0.01348 -20.31404,-0.04446 -30.47281,0.1654c-17.41192,-3.13311 -29.41997,20.08429 -17.10143,32.59326c9.91919,10.04415 24.91881,5.84701 37.58711,6.70858c0.082,39.19679 0.15858,78.39276 0.24066,117.58955c-1.93424,11.60912 7.01076,23.37389 18.92138,24.38115c10.04872,1.3252 21.64701,-4.10141 24.54638,-14.3645c2.0378,-20.77086 0.69009,-41.75818 1.06802,-62.62978c15.7105,0 58.3028,0.55273 93.34407,0.94731c0.05244,10.48698 0.11156,36.08763 0.16484,43.1525c-0.20064,9.60797 -0.94731,36.79358 17.44778,36.82019c18.39429,0.02664 19.96759,-19.29745 19.74867,-23.16328c-0.13904,-5.1078 0.14149,-42.99934 0.54108,-56.44814c2.24173,0.01166 4.87888,0.02997 6.54291,0.02997c-0.00998,-0.00999 -0.01997,-0.01997 -0.02995,-0.02997c0.10487,0.06078 0.2106,0.11987 0.31549,0.18065c0.19894,-16.80684 -0.38959,-50.0226 -0.04497,-66.82692c15.38005,-0.19313 30.76425,-0.09573 46.14514,-0.13486c13.52618,3.45377 34.10559,-4.10139 23.59946,-20.81667c-16.37396,-18.52205 -34.58011,-35.37009 -51.83061,-53.07936l0,-34.62398z", |
||||
"frame_half": "m1,1l297,0l-98.99899,98.99902l-99.00199,0l0,99.00198l-98.99902,98.99901z", |
||||
"hand_stop": "m136.25574,297.49808c-29.33714,-5.08954 -54.45634,-27.86633 -62.06976,-56.71431c-3.62096,-14.72525 -1.50079,-30.17319 -2.21442,-45.21799c-0.13461,-38.62221 -0.20337,-77.24464 -0.30453,-115.86696c3.44471,-11.98872 17.98409,-18.29414 29.04424,-12.36688c0.96214,-3.14931 0.25692,-8.79729 0.59418,-12.8885c-1.96137,-11.24498 6.05913,-22.68389 17.70836,-23.44487c6.68523,-0.04347 14.68906,5.03699 11.64235,-6.21321c-2.06573,-11.58701 7.02885,-24.78486 19.46753,-23.71677c11.8866,-1.10308 20.91313,10.99307 19.47894,22.20545c0.55293,6.69356 15.04739,-4.38583 20.11427,3.0555c6.46245,3.83537 10.88301,11.15349 9.66263,18.71955c0.37462,20.72639 -0.50464,41.58417 0.94255,62.21075c10.62856,-5.38028 25.7729,1.23052 27.94981,13.06696c-0.24077,36.77421 0.61372,73.57438 -0.64664,110.32743c-4.27835,37.80429 -40.23309,69.77301 -78.61711,67.50256c-4.25351,0.01132 -8.54422,0.05313 -12.75241,-0.65872zm26.24695,-10.04156c32.22029,-5.44516 57.56776,-36.59567 55.75252,-69.35173c0.24638,-31.65953 1.24834,-63.36566 0.07516,-95.00381c-0.74966,-11.56753 -19.92574,-8.76712 -18.68594,1.90652c-0.00584,23.46449 -0.01172,46.92897 -0.01762,70.39346c-5.97046,6.15695 -16.65688,2.44864 -23.81619,7.45261c-15.91585,6.94403 -26.02902,23.94809 -26.37592,41.0688c-8.5842,13.31046 -12.47054,-8.35147 -7.54663,-15.48785c5.69263,-21.52615 25.72418,-37.58736 47.72688,-39.6965c-0.18001,-49.52237 0.46608,-99.06258 -0.57811,-148.57061c-6.22968,-14.02401 -23.68619,-1.72364 -19.04016,10.55674c-0.45773,37.44105 -0.04761,74.89084 -0.68825,112.32923c-4.16106,6.65674 -12.04573,0.3437 -9.47389,-5.79948c-0.17776,-46.90031 -0.35556,-93.80062 -0.53333,-140.70093c-3.33864,-8.28292 -18.12991,-6.98883 -18.3627,2.10197c-0.18286,48.40011 -0.36572,96.80021 -0.5486,145.20032c-3.89212,5.48285 -11.88664,0.71593 -9.73376,-5.26897c-0.14377,-36.45805 0.40013,-72.93186 -0.55034,-109.37686c-0.24316,-10.84745 -18.40633,-10.5788 -18.64873,-0.51889c-0.36327,37.37112 0.09734,74.76224 -0.99649,112.11712c1.02982,9.51479 -12.37218,4.97615 -9.28424,-2.22137c-0.16375,-25.39479 0.44627,-50.81747 -0.58949,-76.18918c-6.1088,-15.65501 -24.37704,-2.73073 -19.28278,10.2811c0.06127,45.03139 -0.41048,90.08521 0.72834,135.10263c2.79378,34.58762 36.09247,63.06729 70.73276,60.79437c3.26721,-0.13614 6.52469,-0.50925 9.73752,-1.11868z", |
||||
"L_shape": "m1,1l149,0l0,149l149,0l0,149l-298,0l0,-298z", |
||||
"lightning_bolt": "m117.48906,0.99793l60.3351,83.60071l-24.88768,9.85823l75.99797,71.63888l-24.88768,11.96198l93.95412,119.94316l-159.33742,-91.91997l30.38835,-12.76016l-99.00077,-58.87717l35.47526,-18.19279l-104.52837,-61.76487l116.49113,-53.48799z", |
||||
"logo_apple": "m209.28954,1.00088c-43.04727,7.92585 -57.33284,43.96882 -57.8894,64.561c23.68694,1.71168 38.47275,-11.65597 44.5219,-19.4791c9.85237,-11.09263 12.25443,-26.71591 13.36751,-45.0819zm5.28372,71.19604c-31.11621,-0.01418 -48.48506,12.70539 -57.04939,12.84402c-9.82712,-0.76584 -38.46593,-12.28108 -55.16231,-12.46661c-58.47802,1.74345 -75.23289,65.28636 -74.50751,92.61087c4.76329,104.60263 68.59296,131.60016 79.02421,134.12564c8.36713,1.64984 36.57712,-12.89731 57.32939,-12.23529c22.65837,2.3606 38.49214,11.76068 47.58983,11.10309c11.51012,-0.79871 49.05655,-31.14218 60.37299,-77.89201c-22.81836,-19.29358 -36.89403,-36.77824 -38.15468,-53.37267c-0.584,-7.50279 10.70016,-49.91425 28.69514,-61.83392c2.59723,-14.65567 -24.13031,-33.25182 -45.08191,-32.83442c-1.03252,-0.02777 -2.05203,-0.0482 -3.05577,-0.04871z", |
||||
"man": "m125.90131,25.2503c0,-13.33112 10.79823,-24.12934 24.12934,-24.12934c13.33113,0 24.12932,10.79822 24.12932,24.12934c0,13.33112 -10.79819,24.12934 -24.12932,24.12934c-13.33113,0 -24.12934,-10.79822 -24.12934,-24.12934zm81.12696,68.30144v-12.18601c0,-12.82147 -10.38806,-23.21696 -23.21696,-23.21696h-67.63607c-12.82147,0 -23.21695,10.39549 -23.21695,23.21696v12.18601c-0.02242,0.2766 -0.03739,0.56071 -0.03739,0.84853v70.18918c0,5.4538 4.41839,9.87215 9.87218,9.87215c5.44633,0 9.87589,-4.41837 9.87589,-9.87215v-69.14999h6.62006v79.02961h0.04859v111.66646c0,7.25925 5.89491,13.15787 13.16164,13.15787c7.27048,0 13.16164,-5.89114 13.16164,-13.15787v-111.66646h8.68347v111.66646c0,7.25925 5.89856,13.15787 13.16162,13.15787c7.27045,0 13.16161,-5.89114 13.16161,-13.15787v-111.66646h0.04112v-79.02961h6.62007v69.14623c0,5.45381 4.42955,9.8759 9.8759,9.8759c5.45386,0 9.87218,-4.42209 9.87218,-9.8759v-70.18916c-0.00371,-0.29156 -0.02617,-0.56819 -0.0486,-0.8448z", |
||||
"maximize_2": "m1,149.99998l67.05,-67.05l0,33.52501l48.425,0l0,-48.425l-33.52501,0l67.05,-67.05l67.04999,67.05l-33.52499,0l0,48.425l48.42502,0l0,-33.52501l67.04997,67.05l-67.04997,67.04999l0,-33.52499l-48.42502,0l0,48.42502l33.52499,0l-67.04999,67.04997l-67.05,-67.04997l33.52501,0l0,-48.42502l-48.425,0l0,33.52499l-67.05,-67.04999z", |
||||
"moon": "m227,299.94119l0,0c-85.05185,0 -154,-66.92029 -154,-149.4706c0,-82.55034 68.94815,-149.4706 154,-149.4706l0,0c-48.47263,35.28521 -77,90.6619 -77,149.4706c0,58.80869 28.52737,114.18535 77,149.4706z", |
||||
"mythic_unicorn_2": "m182.0204,297.85391c-5.77818,-7.90314 -14.7635,-8.80438 -16.9241,-20.05347c-1.69348,-6.11859 -17.65829,-14.32483 -8.20955,-3.3428c7.2961,6.61768 15.96432,31.02682 -1.98563,23.31473c-13.65228,-5.01041 -14.2377,-20.48209 -17.89716,-32.06519c-11.90031,-8.25644 3.07674,-25.71408 -9.73651,-36.29276c-10.87482,-11.04288 -3.30119,-31.72456 -18.8404,-39.55457c-7.79965,-3.16566 -11.1757,18.69177 -12.48895,2.70163c-4.27309,-16.17242 -19.36451,7.86156 -29.42789,5.31358c-8.12057,-0.70595 13.58361,-6.35143 3.22626,-7.87068c-6.08933,3.33348 -11.72343,9.09727 -12.68681,-0.44351c-7.3251,-4.35046 -22.68599,-11.29797 -22.28696,-18.20909c6.3611,-1.99829 27.83545,3.78387 24.11403,-4.25029c-6.38573,-2.42343 -7.54573,-9.04803 0.27553,-4.60205c15.41352,0.48352 33.48255,-5.66917 46.30758,6.09853c6.68958,4.11612 13.26701,18.87857 16.84827,4.53223c11.5443,-13.92389 34.83883,-15.10329 41.95536,-33.13124c1.72211,-8.72215 -5.28903,-13.69839 -11.24521,-15.46512c-1.15878,-2.86641 -3.13139,-15.03612 -8.05675,-8.8949c0.22449,-5.37502 4.84473,-18.22859 -5.38927,-12.53831c-1.03801,-11.44846 8.74879,-22.87025 -4.19783,-31.20716c12.13029,2.25027 9.73825,-11.57887 7.09616,-13.77212c7.19073,-1.02106 15.62939,-7.49186 11.66467,-15.50808c7.80894,14.17675 8.07971,-17.19902 14.50877,-3.67512c11.83272,1.93988 -3.67599,-10.57163 7.20721,-7.77902c6.21443,0.21264 4.83423,-6.80917 10.41692,-1.50957c7.3886,-4.03149 -5.66409,-16.21531 6.26559,-7.74985c4.01033,3.484 16.77809,12.60911 14.48726,0.56772c11.33586,12.0923 20.25659,-11.23169 29.67625,-16.06186c3.73633,-4.47003 11.8613,-9.20071 4.36795,-0.66791c-4.97461,10.87669 -21.85179,22.64296 -17.31131,33.45053c-4.10985,3.74163 8.29224,8.44421 -1.58034,7.02768c-5.8488,6.31351 7.84134,18.1257 8.93388,28.06219c-3.13588,6.80826 -15.07657,14.53744 -19.90688,14.29315c1.76543,-8.76564 -2.06178,-20.19066 -13.24036,-15.23595c6.26202,11.45789 14.72818,22.40379 20.03253,34.86404c5.18462,12.24902 13.59059,26.39416 24.64981,10.62966c7.04883,-10.04763 27.18559,-9.90218 21.65419,6.41521c-2.82767,16.0232 4.74286,37.1706 -9.80374,48.20794c-8.77531,16.90973 -18.50392,-6.2874 -11.60965,-15.06308c-1.75673,-2.50781 -3.11575,-4.27809 2.02489,-7.7061c-1.06146,-2.57137 14.7939,-12.24554 6.80286,-18.18176c-9.0885,10.30594 -22.38708,22.23511 -18.69125,37.55475c2.99957,10.26601 -21.73944,27.86615 -19.76117,10.82875c0.44312,-6.62131 9.89648,-19.45415 7.72044,-21.10741c-6.90181,12.95006 -16.71997,25.39136 -31.55621,29.23625c-12.34084,0.73132 -18.80547,10.66779 -12.94504,21.69241c1.11998,15.62238 -7.12646,29.76141 -9.02499,44.972c3.52914,16.13283 25.01552,19.39287 27.93198,35.84959c5.01138,11.05234 -7.52405,9.41898 -13.36446,6.32639zm-30.55545,-48.12944c-1.80891,-7.29253 -5.53151,18.95699 -0.94273,5.02481l0.68695,-2.46143l0.25578,-2.56339z", |
||||
"page": "m249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234", |
||||
"people_business_woman_1": "m152.09991,291.25156c-2.47678,-44.58551 4.65103,-89.4209 -0.87244,-133.89311c-8.95648,25.8877 -13.19429,53.17113 -13.68393,80.52692c-0.41364,17.0155 -0.16316,34.03816 -0.23213,51.05714c-6.59424,1.84573 -15.25726,1.21277 -19.31381,7.46753c-5.79991,2.60486 -12.31924,1.35736 -18.48087,1.65521c6.01304,-4.82208 13.37695,-9.59021 13.6609,-18.23849c6.31746,-52.60599 2.67181,-105.66583 3.06088,-158.49306c0.43537,-21.1868 -1.16552,-42.66898 2.64828,-63.61227c2.03822,-10.62624 19.15558,-5.1272 18.60609,-18.67488c3.03041,-11.80116 0.67964,-26.03735 9.52867,-35.60117c10.5938,-7.7376 21.95103,4.42952 20.767,15.48053c1.06621,11.41806 -1.19225,25.92375 9.12468,33.77226c11.50188,2.75379 13.11151,17.72176 18.13281,26.80961c4.23164,10.69022 9.72182,23.87735 0.08774,33.44124c-5.93716,8.68594 -16.90076,16.78377 -12.99744,28.7057c-0.60452,31.03065 -6.76558,61.62357 -9.34036,92.51013c-2.09418,17.62329 -2.81628,35.5533 -6.9491,52.84404c-0.55614,5.69342 -5.84515,19.49838 -12.14343,10.53711c-0.87442,-1.99588 -1.26941,-4.15509 -1.60355,-6.29443zm-31.23076,-126.74179c-4.61314,-4.02649 0.43039,13.47859 0.48324,1.7234l-0.48324,-1.7234l0,0zm6.80929,-33.43718c-1.88333,-6.96362 -7.13425,10.3817 -5.38842,14.89726c-0.28574,6.8293 0.74596,4.17953 2.10389,-0.81731c1.48602,-4.58557 2.79638,-9.27054 3.28453,-14.07996zm61.63647,-23.18116c5.52028,-11.36497 -2.7056,-23.94508 -11.13263,-31.31998c-8.36171,1.6476 -4.1756,17.26677 -4.09579,24.50607c-0.37729,9.19583 11.31773,21.60236 15.22842,6.8139zm-59.09369,-11.57291c-3.00658,-5.39182 -0.968,23.24248 0.49254,8.1709c0.11818,-2.72906 0.0034,-5.48079 -0.49254,-8.1709z", |
||||
"plant_tree_1": "m122.82124,295.43991c-9.60714,-8.11343 -1.74962,-22.4458 -1.18428,-32.9653c4.14859,-11.24323 3.96359,-85.81235 -10.94936,-86.09872c-15.83897,-4.80884 -33.8653,1.83771 -48.3958,-7.59918c-9.84084,-5.82912 -12.90007,-17.71764 -12.64209,-28.40579c0.19444,-11.07701 -10.96857,-15.73981 -14.56149,-25.02111c-4.85892,-11.57952 -0.66407,-24.81283 7.67092,-33.63805c7.87535,-8.99152 0.96225,-20.76784 4.99341,-30.60822c5.74977,-13.3805 22.92119,-7.46461 32.14548,-16.67288c9.90182,-6.99356 18.35265,-19.09785 32.07681,-17.29906c13.25371,0.83774 28.05221,3.21463 39.26759,-5.80136c10.45538,-8.74133 25.08881,-13.41753 38.21471,-8.04486c12.4521,3.84588 26.61226,11.87612 26.66945,26.64145c-3.79947,15.14795 10.55962,14.96229 20.88582,17.05112c12.22475,5.50745 24.82689,14.06517 29.88231,26.94686c1.34924,14.72554 -15.32854,26.93484 -7.76337,41.96729c2.96521,14.64848 -9.76962,22.78136 -18.92447,30.72028c-3.76666,14.33221 -18.04883,25.98621 -33.39958,22.57785c-12.36432,-2.02824 -19.98886,11.49191 -32.59709,10.30693c-8.35739,8.60075 -2.66228,82.40933 -1.11533,92.59302c6.29385,12.59021 -2.48013,26.51376 -16.65036,26.0885c-11.10333,1.33105 -23.19679,1.95465 -33.62328,-2.73877z", |
||||
"rectangle_2_rounded": "m50.66998,1l198.6639,0l0,0c13.17268,0 25.80577,5.2328 35.12022,14.54726c9.31445,9.31446 14.54727,21.94758 14.54727,35.12021l0,248.33141c0,0.00134 -0.00116,0.00247 -0.0025,0.00247l-297.99637,-0.00247l0,0c-0.00136,0 -0.0025,-0.0011 -0.0025,-0.0025l0.0025,-248.3289l0,0c0,-27.43059 22.23686,-49.66747 49.66748,-49.66747z", |
||||
"rectangle_3_rounded": "m50.66972,1l248.33028,0c0.0007,0 0.00134,0.00024 0.00177,0.00072c0.00049,0.00048 0.00076,0.00108 0.00076,0.0018l-0.00253,248.32779c0,27.43044 -22.23679,49.66722 -49.66722,49.66722l-248.3303,0l0,0c-0.00138,0 -0.00248,-0.00113 -0.00248,-0.0025l0.00248,-248.32779l0,0c0,-27.43045 22.23678,-49.66723 49.66724,-49.66723z", |
||||
"ribbon_up": "m0.99887,298.99884l37.37486,-124.16641l-37.37486,-124.16684l74.74943,0l0,-37.25092l0,0c0,-6.85776 4.18383,-12.41691 9.34372,-12.41691l130.81201,0c5.16063,0 9.34372,5.55916 9.34372,12.41691l0,37.25092l0,0l74.74974,0l-37.37488,124.16684l37.37488,124.16641l-102.7809,0c-5.15987,0 -9.3437,-5.55884 -9.3437,-12.41577c0,-6.85834 4.18384,-12.41724 9.3437,-12.41724l18.68744,0c5.16063,0 9.34372,-5.5603 9.34372,-12.41721c0,-6.85834 -4.18309,-12.41722 -9.34372,-12.41722l-130.81201,0c-5.15989,0 -9.34372,5.55888 -9.34372,12.41722c0,6.85693 4.18383,12.41721 9.34372,12.41721l18.68743,0c5.1606,0 9.34372,5.5589 9.34372,12.41724c0,6.85693 -4.18312,12.41577 -9.34372,12.41577zm121.79819,-30.86179l-0.71873,-217.77046m-149.49945,214.90504l0.71875,-213.47234m110.6871,199.14535l0.71873,41.54834m-74.03098,-1.43271l-0.71874,-40.11563", |
||||
"sflowchart_filter2": "m1,75.5l298,0l-149,74.5l149,74.5l-298,0l149,-74.5l-149,-74.5z", |
||||
"sign_no": "m0.99794,149.99951l0,0c0,-82.29002 66.70967,-148.99969 148.99992,-148.99969l0,0c39.51779,0 77.41692,15.69819 105.35898,43.64116c27.94318,27.94297 43.64124,65.84185 43.64124,105.35853l0,0c0,82.29103 -66.7092,149.00024 -149.00021,149.00024l0,0c-82.29025,0 -148.99992,-66.70921 -148.99992,-149.00024zm240.6012,66.65504l0,0c32.80489,-45.08388 27.92851,-107.33437 -11.49672,-146.75905c-39.42525,-39.42501 -101.67574,-44.30139 -146.75847,-11.49616l158.25519,158.25521zm-183.20167,-133.30872c-32.80512,45.08364 -27.92886,107.33413 11.49615,146.75825c39.4249,39.42525 101.67541,44.30159 146.75814,11.49672l-158.2543,-158.25497z", |
||||
"skull": "m74.9404,81.44109c-2.88919,16.35929 -10.26919,31.99403 -10.76614,48.86361c0.66122,9.76746 -5.89156,15.01402 -14.86213,14.8293c-9.64813,10.00099 1.19087,25.80647 12.10749,29.84357c11.14103,7.47832 24.96226,-0.87791 35.99846,5.83044c14.65424,11.4554 20.77205,31.76607 15.71635,49.57211c-5.02672,14.69893 20.70476,9.35306 11.02628,-2.39693c-7.47506,-11.48471 14.09103,-7.68764 8.56998,3.21603c-1.04326,8.75262 6.45616,11.58562 3.11867,20.06531c8.69472,4.98558 -0.72885,7.77708 -6.02475,8.71843c-12.40178,6.18225 2.24324,-11.07452 -7.58144,-16.17874c-8.99694,1.95532 -2.90059,17.02136 -5.98875,15.28125c-6.3575,-4.97824 -6.35281,-23.59047 -17.02285,-11.44621c-3.54128,-14.96387 2.92009,-30.54814 -2.05737,-45.42514c2.03897,-11.11034 -15.50281,-14.9426 -13.28409,-2.05647c0.88449,19.66696 -5.0876,39.29475 -1.66005,58.86481c4.72071,12.07065 17.92378,17.50833 26.2104,26.82291c6.80557,7.18207 15.6284,14.86087 26.22089,12.5997c12.0141,-0.52078 24.05035,-1.63034 36.01024,0.2771c15.04311,0.47446 26.52666,-11.41623 39.36443,-17.5242c15.0918,-11.98355 12.71564,-33.38867 11.21118,-50.43889c-1.84476,-10.52664 2.20334,-21.05807 1.44894,-31.48618c-10.88037,-13.31276 -19.80722,10.08708 -16.70779,20.14043c-0.00076,12.64635 2.42783,28.93701 -9.63577,37.17496c-9.95572,-0.25104 -19.43069,3.36517 -29.4632,1.4744c-8.14081,4.83435 -21.32692,4.71021 -24.01404,-6.79811c-1.07281,-10.22015 3.55807,-20.93494 -2.73401,-30.47318c5.52835,4.7614 15.17361,-4.11226 9.79822,6.56248c-6.55643,8.68922 5.55173,22.07874 10.10989,9.25331c1.51227,-8.60512 -6.54141,-20.02596 6.69714,-18.18237c2.6998,3.03528 -9.21959,24.26701 7.07346,18.90152c11.61606,-2.54445 -2.06659,-20.76607 13.66382,-20.82939c7.61295,-8.9626 5.56317,-25.76184 17.20825,-32.56114c12.98419,-8.78706 33.2569,-2.44315 42.52423,-17.32399c7.89911,-7.61507 4.18182,-28.72154 -9.44128,-21.72794c-17.02448,1.65962 -3.51318,-23.0582 -3.98819,-32.32024c4.01126,-8.06691 -4.87137,-25.04774 -1.81268,-26.84933c5.77948,8.84253 7.84946,19.18484 6.60651,29.51878c-0.10681,8.76352 -3.8233,32.51385 8.36014,17.87288c4.12442,-10.20347 2.92487,-21.76073 5.86331,-32.37626c5.66748,-22.91865 -4.48026,-45.85004 -15.79309,-65.262c-9.63495,-10.45038 -21.86679,-18.78104 -33.35342,-26.98327c-19.32092,-7.26658 -40.65421,-8.56836 -61.06006,-6.74718c-18.04979,3.12863 -37.13738,6.42709 -51.51633,18.73374c-14.01352,8.25707 -27.43441,19.22373 -32.97453,35.08961c-4.82798,12.78156 -13.28239,25.798 -9.43994,39.99647c3.67479,11.83601 1.72576,24.12813 2.32075,36.22574c6.26442,13.82637 12.1788,-7.07504 11.59255,-13.98853c0.3468,-13.11021 7.26362,-24.71465 12.36033,-36.35318zm115.06042,28.12622c12.88235,0.92311 29.19336,8.09689 29.54492,23.0528c1.95883,15.00865 -10.16846,29.55684 -25.7099,28.08501c-14.11661,-1.15955 -23.14499,-13.35332 -22.20761,-27.06258c-4.7262,-9.82969 2.6286,-20.35741 12.49942,-22.61709c1.91415,-0.64365 3.88168,-1.12543 5.87317,-1.45815zm-86.93419,1.27835c14.94448,-2.65778 31.94749,6.61306 31.99739,23.15527c1.40359,15.99194 -15.57494,19.12508 -27.15695,23.1313c-8.01422,5.17467 -16.3391,0.35667 -22.99829,-4.85698c-8.63997,-9.0434 -6.10048,-27.26721 3.02245,-35.52229c4.42388,-3.27404 9.90028,-4.56108 15.1354,-5.9073zm51.1378,42.18812c7.2348,9.94383 15.92023,25.10751 6.56407,36.39339c-8.30571,6.66107 -9.35284,-9.47466 -18.07048,-1.8754c-8.17816,-7.1624 -0.63536,-21.73717 5.10291,-29.01329c1.8913,-2.09525 4.05559,-3.93987 6.4035,-5.5047z", |
||||
"star_32": "m1,150l37.78866,-10.95375l-34.9264,-18.11479l39.19976,-3.37057l-30.72019,-24.58047l39.1037,4.34019l-25.33452,-30.10049l37.5051,11.88636l-18.97492,-34.46539l34.46528,18.97503l-11.88614,-37.50511l30.10025,25.33441l-4.34019,-39.10359l24.58048,30.72008l3.37057,-39.19964l18.11479,34.92639l10.95375,-37.78866l10.95375,37.78866l18.11479,-34.92639l3.37057,39.19964l24.58047,-30.72008l-4.34018,39.10359l30.10023,-25.33441l-11.88614,37.50511l34.4653,-18.97503l-18.97491,34.46539l37.50508,-11.88636l-25.33452,30.10049l39.10347,-4.34019l-30.71994,24.58047l39.1994,3.37057l-34.92581,18.11479l37.78842,10.95375l-37.78842,10.95375l34.92581,18.11479l-39.1994,3.37057l30.71994,24.58047l-39.10347,-4.34018l25.33452,30.10025l-37.50508,-11.88615l18.97491,34.4653l-34.4653,-18.97493l11.88614,37.5051l-30.10023,-25.33452l4.34018,39.10347l-24.58047,-30.71994l-3.37057,39.1994l-18.11479,-34.92581l-10.95375,37.78842l-10.95375,-37.78842l-18.11479,34.92581l-3.37057,-39.1994l-24.58048,30.71994l4.34019,-39.10347l-30.10025,25.33452l11.88614,-37.5051l-34.46528,18.97493l18.97492,-34.4653l-37.5051,11.88615l25.33452,-30.10025l-39.1037,4.34018l30.72019,-24.58047l-39.19976,-3.37057l34.9264,-18.11479l-37.78866,-10.95375z", |
||||
"sun": "m298.99939,149.99919l-60.12755,21.3835l0,-42.76601l60.12755,21.38251zm-43.65198,-105.36193l-27.38881,57.64266l-30.23897,-30.23995l57.62778,-27.40271zm-105.34804,-43.63768l21.38251,60.12764l-42.76602,0l21.38351,-60.12764zm-105.36263,43.63768l57.64236,27.40271l-30.23955,30.23995l-27.40281,-57.64266zm-43.63767,105.36193l60.12774,-21.38251l0,42.76601l-60.12774,-21.3835zm43.63767,105.34903l27.40281,-57.62877l30.23955,30.23996l-57.64236,27.38881zm105.36263,43.65096l-21.38351,-60.12753l42.76602,0l-21.38251,60.12753zm105.34804,-43.65096l-57.62778,-27.38881l30.23897,-30.23996l27.38881,57.62877zm-179.84834,-105.34903l0,0c0,-41.14515 33.35516,-74.5 74.50031,-74.5c41.14514,0 74.5,33.35485 74.5,74.5c0,41.14514 -33.35486,74.49998 -74.5,74.49998c-41.14514,0 -74.50031,-33.35484 -74.50031,-74.49998z", |
||||
"woman": "m150.04984,49.03255c13.33249,0 24.15346,-10.81348 24.15346,-24.15346c0,-13.34748 -10.82097,-24.16844 -24.15346,-24.16844c-13.34375,0 -24.16843,10.82096 -24.16843,24.16844c0,13.33998 10.82095,24.15346 24.16843,24.15346zm67.74049,104.1672l-21.67561,-80.39177c-0.20212,-0.72988 -0.48662,-1.42607 -0.83093,-2.06987c-2.46291,-7.53088 -9.53339,-12.9844 -17.88399,-12.9844h-54.86088c-8.70618,0 -16.01627,5.9214 -18.16845,13.95758c-0.14598,0.35184 -0.26575,0.7224 -0.37429,1.10417l-21.2901,80.38803c-1.41861,5.2701 1.71053,10.6862 6.98811,12.1048c5.27014,1.4111 10.68626,-1.71803 12.10487,-6.98813l16.71989,-63.14786h6.96569l-30.34438,114.25453h28.5927v78.87959c0,6.06738 4.91077,10.9819 10.98564,10.9819c6.05989,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h8.73613v78.87959c0,6.06738 4.91826,10.9819 10.99315,10.9819c6.05988,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h28.57767l-30.45665,-114.25453h7.14911l17.02679,63.14786c1.41859,5.2701 6.83472,8.39923 12.10481,6.98813c5.2589,-1.41859 8.38803,-6.83842 6.97693,-12.10854z" |
||||
} |
||||
} |
@ -0,0 +1,21 @@
|
||||
{"data": { |
||||
"clef_alto": "m51.25065,150.28749c0,-49.53207 0,-99.06413 0,-148.5962c11.59261,0 23.18523,0 34.77784,0c0,99.06413 0,198.12827 0,297.1924c-11.59261,0 -23.18522,0 -34.77784,0c0,-49.53209 0,-99.06413 0,-148.59621zm51.37634,0c0,-49.53207 0,-99.06413 0,-148.5962c8.48285,-2.46703 12.93837,1.84261 11.08508,10.0007c0.12527,45.40251 0.25053,90.80502 0.37581,136.20751c21.44767,-15.32626 29.57346,-41.86327 36.21976,-66.10667c3.81448,15.78812 9.88112,35.01518 27.29865,40.16045c16.60112,4.98381 31.30354,-10.63891 31.13045,-26.64445c2.89955,-20.45341 3.30077,-41.70258 -1.14742,-61.93042c-4.16455,-12.79745 -16.64639,-23.36595 -30.52771,-22.52039c-11.42384,-5.25948 -24.23628,10.96936 -9.59547,16.90924c12.31264,13.08186 -1.99968,35.47687 -19.11742,30.23324c-16.59583,-3.55596 -21.00951,-25.43777 -11.40723,-37.80838c13.77419,-17.97563 39.16574,-20.24264 60.03438,-17.62625c27.15413,3.08944 47.80745,27.56302 50.7352,54.02297c3.73869,23.61245 -2.35521,50.29027 -22.12251,65.37829c-16.57411,13.95533 -40.93645,15.69794 -60.41183,7.1722c-4.73631,7.1261 -9.47264,14.25217 -14.20895,21.37825c4.65338,6.95274 9.30673,13.90549 13.96008,20.8582c23.58311,-10.57065 54.40877,-5.07518 69.99907,16.43117c21.95821,28.96715 17.67499,75.52599 -10.84692,98.64314c-17.91376,14.62869 -43.09233,14.67899 -64.38158,8.83109c-16.11131,-4.2995 -31.82996,-19.966 -26.84735,-37.82117c2.51375,-15.55998 23.9128,-21.41389 34.33803,-9.83356c14.19543,12.82462 -6.37968,25.74036 -5.32516,38.10141c15.79561,11.97195 41.38054,0.70062 45.05746,-18.39487c5.84576,-20.96526 4.47285,-43.25116 1.61388,-64.56879c-1.53316,-14.33195 -14.00139,-28.78069 -29.45882,-24.78352c-16.25957,3.69221 -24.37509,20.62003 -27.1602,35.64745c-3.41434,11.00523 -4.50349,-10.5222 -7.16806,-14.04636c-5.53896,-17.66304 -15.20212,-35.01096 -30.07851,-46.1468c-1.53252,4.76282 -0.13866,10.70403 -0.62897,15.96893c-0.11874,43.15994 -0.2375,86.31984 -0.35623,129.47978c-8.48793,2.46848 -12.93407,-1.8443 -11.0575,-10.00076c0,-46.19846 0,-92.39696 0,-138.59544z", |
||||
"clef_bass": "m21.53929,297.24106c0.11552,-13.50244 21.89277,-17.95071 30.83244,-27.31851c34.50853,-23.15955 68.13189,-49.8976 89.28437,-86.39645c22.47179,-37.29227 34.65842,-82.97259 25.51732,-126.22972c-4.84746,-26.84145 -30.93637,-48.32386 -58.5412,-44.96438c-18.18078,2.48732 -39.18159,6.6724 -49.70108,23.45858c-11.41858,8.57642 -5.13639,28.67733 10.08619,21.04295c19.47556,-7.4344 43.93666,7.72539 43.16644,29.21231c0.02258,20.3737 -20.60109,34.74615 -39.82058,32.83379c-21.40677,-0.21405 -42.59771,-17.48695 -42.15028,-39.87929c-1.48358,-36.0903 29.74187,-65.56665 63.16554,-73.13066c29.88613,-9.31284 64.6309,-5.56545 89.8325,13.80772c18.75227,12.81883 33.51952,32.25211 36.60045,55.18989c6.65193,29.82199 -1.94455,60.59844 -16.85703,86.54317c-19.16537,34.9521 -48.44911,63.56561 -82.44233,84.09172c-31.5721,20.13449 -64.41224,38.31845 -98.38529,54.07944c-0.19582,-0.78018 -0.39163,-1.56039 -0.58745,-2.34058zm226.81013,-147.1503c-16.25441,-7.36092 -12.66826,-37.2715 6.2514,-37.94421c14.1568,-3.30239 27.38025,11.49424 23.01007,25.17739c-2.75677,12.80446 -18.12839,18.35408 -29.26147,12.76682zm0,-81.82211c-16.25441,-7.36089 -12.66826,-37.2715 6.2514,-37.9442c14.1568,-3.30238 27.38025,11.49425 23.01007,25.17739c-2.82837,12.84788 -18.04926,18.33069 -29.26147,12.76681z", |
||||
"clef_treble": "m142.57787,298.08936c-19.93291,-3.16858 -30.69543,-32.78793 -10.77837,-43.63799c20.76305,-10.6983 33.11169,27.38725 10.4319,31.10985c-12.41878,4.65247 16.12379,12.44363 21.44362,4.62054c16.62259,-8.04572 14.05481,-28.98639 10.0555,-43.73428c-1.38792,-11.29834 -3.1236,-23.3942 -17.37872,-16.97299c-34.39165,2.76706 -61.61951,-32.12309 -58.88461,-64.7627c0.92851,-30.78641 26.14601,-51.87253 44.81895,-73.25146c-6.13037,-27.96899 -7.98138,-60.28084 9.78998,-84.65368c16.36949,-19.81244 24.67825,16.44271 27.44722,28.74505c6.15059,28.7567 -6.11317,58.97542 -26.51985,79.24646c1.94853,9.61536 3.86572,19.23715 5.85146,28.84491c21.56471,-4.16351 42.14922,14.0585 43.32542,35.40215c3.33209,19.27364 -9.02991,37.47516 -25.91515,45.75842c-0.27765,16.55051 8.86742,33.71834 5.58147,50.80913c-3.15567,17.67035 -22.97263,26.33539 -39.26881,22.47659zm22.51283,-75.40413c6.10963,-11.46864 -4.97238,-31.72308 -5.58083,-46.4445c0.2393,-25.67101 -26.99069,4.97273 -18.89308,17.57916c2.40038,7.45953 23.23523,21.13914 4.09677,12.70238c-19.98106,-11.95877 -19.06588,-42.72807 -0.80893,-55.71979c15.31693,-3.39279 5.96193,-23.83228 3.07584,-30.54592c-18.81245,17.14481 -40.13555,38.73356 -36.89114,66.48257c2.4439,26.00902 30.79729,41.78694 55.00137,35.94611zm12.65782,-4.96449c17.94263,-11.51868 17.35378,-41.74863 -2.27676,-51.12454c-20.94589,-11.06784 -6.59929,17.92804 -6.2155,28.9649c2.90686,4.22505 1.26024,28.84393 8.49226,22.15964zm-22.11331,-138.56764c11.03699,-13.35171 23.65346,-32.62746 15.90224,-50.28019c-16.69221,-11.01859 -25.9682,18.77171 -26.37872,31.81623c-0.15186,8.45836 -1.39836,37.61288 10.47649,18.46396l0,0z", |
||||
"note_16th": "m88.44206,298.30295c-13.87988,-2.82538 -24.35809,-16.50861 -20.88289,-30.73529c4.91499,-19.9595 23.53616,-33.76636 42.17206,-40.32825c12.41348,-4.12247 26.50006,-3.4993 38.15588,2.63036c1.0408,-76.23686 0.44647,-152.49294 0.60452,-228.73842c4.20728,-0.00103 9.6062,-1.35928 8.46304,4.73352c0.58707,13.69153 7.31578,26.22541 17.65646,35.05743c23.06891,21.49232 49.01909,44.8303 54.31831,77.58647c1.50432,13.81924 -0.10796,27.74641 -3.17799,41.24139c9.09166,16.96843 8.54382,37.52667 4.8522,55.93042c-2.39383,9.71803 -6.29839,19.07953 -11.26178,27.74855c-11.71941,5.45538 1.38908,-8.91675 1.22467,-14.09427c6.33897,-15.55397 7.06616,-32.87975 4.18297,-49.26376c-6.28082,-23.96758 -30.02579,-35.67821 -49.12051,-48.20921c-6.90894,-2.70374 -21.67717,-19.0106 -18.74876,-3.03152c-0.64005,43.31421 -0.53076,86.63467 -0.73126,129.95221c-8.01517,20.08276 -26.40254,35.40967 -47.75954,39.25299c-6.54287,1.13068 -13.39496,1.54416 -19.94739,0.2674zm133.16364,-163.77284c0.19041,-24.65028 -18.17068,-44.59457 -36.16211,-59.2127c-9.00275,-6.78731 -18.53905,-13.97798 -28.66229,-18.37087c0.62265,14.17498 7.10901,27.98635 14.87303,39.75766c14.63148,19.60416 36.7207,32.71725 48.97745,54.30224c1.46973,-5.35919 1.02641,-10.98389 0.97392,-16.47633z", |
||||
"note_2_16th": "m49.3958,299.54056c-16.81947,-3.04166 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96074 64.07959,-20.53789c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61466,-11.21983 111.34956,-21.8626 166.98527,-32.98482c-0.12048,77.7042 -0.24097,155.40843 -0.36145,233.1126c-8.71588,23.50243 -36.87907,39.79991 -61.40202,32.51219c-14.59976,-4.3703 -18.09988,-23.21532 -9.97012,-34.76195c11.13289,-17.22395 31.85399,-29.0497 52.68539,-25.82347c5.94469,-0.60136 14.69865,9.02304 12.18605,-1.86462c0,-54.46642 0,-108.93282 0,-163.39921c-51.0519,10.27703 -102.20471,20.06591 -153.28023,30.23172c-0.17435,63.38239 0.43399,126.77441 -0.45506,190.14903c-1.62524,19.24988 -20.10281,32.38318 -37.35132,37.51443c-6.81397,1.14908 -13.90893,1.86209 -20.78043,0.8699zm133.17406,-258.40903c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59628,-4.66015 -18.89926,-4.33564c-44.78732,8.84114 -89.60051,17.55139 -134.38097,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56081,-3.65804 37.12405,-7.30357 55.688,-10.94555z", |
||||
"note_2_32nd": "m49.39585,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77521,-32.96077 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.9971c55.61465,-11.21984 111.34956,-21.86261 166.98528,-32.98483c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40204,32.51218c-14.59978,-4.3703 -18.09987,-23.21533 -9.97015,-34.76193c11.13292,-17.22395 31.854,-29.0497 52.68541,-25.82347c5.9447,-0.60136 14.69868,9.02304 12.18605,-1.86462c0,-46.71117 0,-93.42232 0,-140.13348c-51.05188,10.27702 -102.20473,20.0659 -153.28023,30.23172c-0.22871,56.35212 0.56696,112.72466 -0.58765,169.06043c-3.51923,18.91183 -22.11423,32.00891 -40.05743,35.8262c-5.92716,0.70624 -12.00983,1.31848 -17.94172,0.38101zm133.17405,-235.14331c26.23065,-5.16204 52.47366,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59628,-4.66015 -18.89923,-4.33564c-44.78734,8.84113 -89.60054,17.55138 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66015 18.89925,4.33564c18.56078,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59628,-4.66015 -18.89923,-4.33563c-44.78734,8.84113 -89.60054,17.55139 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66016 18.89925,4.33564c18.56078,-3.65804 37.12405,-7.30358 55.688,-10.94555z", |
||||
"note_2_64th": "m49.39639,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77522,-32.9608 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61465,-11.21983 111.34957,-21.86261 166.98528,-32.98482c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40205,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.85399,-29.0497 52.68539,-25.8235c5.94467,-0.60133 14.69868,9.02307 12.18605,-1.86459c0,-38.95592 0,-77.91182 0,-116.86773c-51.0519,10.27703 -102.20474,20.06591 -153.28024,30.23172c-0.23563,48.66071 0.58183,97.34513 -0.58977,145.98728c-3.69252,18.80173 -22.14742,31.83179 -40.05531,35.63361c-5.92716,0.70627 -12.00984,1.31848 -17.94173,0.38101zm133.17406,-211.87756c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42688c-3.33676,13.29302 11.59627,4.66015 18.89925,4.33562c18.56079,-3.65804 37.12405,-7.30356 55.688,-10.94553zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56079,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59627,-4.66015 -18.89925,-4.33563c-44.78732,8.84113 -89.60051,17.55139 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66016 18.89925,4.33564c18.56079,-3.65804 37.12405,-7.30357 55.688,-10.94554z", |
||||
"note_2_8th": "m49.39571,299.54196c-16.81947,-3.04169 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96077 64.07959,-20.53792c0.44447,-69.55862 0.18803,-139.12106 0.25597,-208.68139c55.61337,-11.00192 111.35248,-21.38966 166.98529,-32.30051c-0.12051,77.70421 -0.24097,155.40842 -0.36145,233.11263c-8.71594,23.50241 -36.8791,39.7999 -61.40207,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.854,-29.0497 52.68538,-25.82347c5.9447,-0.60136 14.69872,9.02304 12.18608,-1.86462c-0.20636,-61.46065 0.51324,-122.93768 -0.53098,-184.38539c-9.07608,-3.36956 -25.21706,4.38308 -36.83795,5.01031c-38.86079,7.56314 -77.80466,14.7255 -116.5762,22.73074c1.16985,68.10055 0.62434,136.24279 0.45018,204.35774c2.05843,15.54877 -6.51154,30.19547 -19.54225,38.30072c-11.24453,8.17932 -25.1371,11.12784 -38.82984,9.35175z", |
||||
"note_3_16th": "m15.05685,274.22351c-14.31707,-1.91919 -18.42601,-20.36026 -8.93697,-29.99135c10.38879,-13.67648 30.27091,-22.30884 46.50806,-13.88651c0.66153,-52.11798 0.28726,-104.24728 0.38611,-156.37085c81.97754,-16.40272 164.06679,-32.26359 246.07988,-48.4937c-0.2363,57.62228 0.57657,115.26416 -0.57095,172.87157c-1.96915,14.86053 -17.13602,24.73001 -30.79037,27.8163c-11.96523,3.66803 -28.81345,-4.27913 -25.97942,-18.60889c3.50381,-15.4984 19.49126,-26.6657 34.85991,-28.02376c8.59586,-2.14986 20.61923,9.25734 16.69226,-5.91415c0.09525,-39.33675 -0.07153,-78.67297 -0.13177,-118.00977c-38.18202,7.50178 -76.35632,15.04294 -114.54555,22.50813c-0.23268,48.18274 0.55394,96.38557 -0.57504,144.55286c-2.30531,15.49788 -18.60167,25.74417 -33.19453,27.71848c-14.44766,3.90948 -29.61349,-11.1328 -21.45115,-25.13463c9.01589,-16.79831 32.00478,-28.23689 49.88007,-18.48071c0.13591,-41.88866 0.57454,-83.7979 -0.20747,-125.67833c-9.66763,-2.10095 -24.53024,4.47319 -35.97192,5.4189c-26.23273,5.15636 -52.45877,10.34411 -78.68841,15.51694c-0.35831,49.24326 0.12716,98.5107 -1.08934,147.73389c-6.17624,16.23714 -25.20985,26.82423 -42.27338,24.45558l0,0zm101.53641,-195.02805c18.87659,-3.72421 37.75267,-7.44825 56.62927,-11.17233c3.17946,-13.298 -14.34059,-1.80056 -21.35852,-2.54169c-31.16307,6.26984 -62.32049,12.56754 -93.49695,18.76997c-1.80596,13.61728 18.79422,-0.36912 26.46645,1.18459c10.58865,-2.07109 21.17471,-4.15247 31.75974,-6.24054zm119.43625,-23.77348c18.94301,-3.80857 37.98227,-7.27608 56.8645,-11.31118c2.82892,-13.23786 -18.20215,0.42724 -25.56601,-1.09475c-29.37257,5.74051 -58.85892,11.05022 -88.16765,17.02801c-3.13623,14.00632 18.26294,0.04643 25.92744,1.45249c10.31323,-2.02774 20.62746,-4.05219 30.94171,-6.07457z", |
||||
"note_3_32th": "m15.05685,274.22333c-14.31707,-1.91882 -18.42601,-20.36018 -8.93697,-29.99106c10.3888,-13.67676 30.27089,-22.30908 46.50806,-13.88647c0.66166,-52.11824 0.28732,-104.24765 0.38611,-156.37099c81.97754,-16.40273 164.06694,-32.2636 246.07988,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.57123,172.87143c-1.96881,14.86089 -17.13586,24.73018 -30.79025,27.81644c-11.96498,3.66806 -28.81322,-4.27921 -25.97935,-18.60878c3.50368,-15.49834 19.49123,-26.6657 34.86018,-28.02408c8.67697,-2.20874 20.51364,9.40097 16.68222,-5.83759c-0.09845,-33.39989 0.78769,-66.86396 -0.50803,-100.22556c-37.99194,7.33447 -75.93604,14.91556 -113.90202,22.38341c-0.40428,43.27432 0.22905,86.58281 -1.10269,129.83c-6.66052,18.05263 -29.74564,30.16772 -47.98743,22.50237c-14.38366,-7.43967 -7.95995,-27.06667 2.9687,-34.4792c10.34322,-10.82147 29.63336,-12.35156 40.562,-8.05225c0.25528,-36.18434 0.11931,-72.37016 0.15388,-108.55522c-38.40674,7.73776 -76.89246,15.09384 -115.31775,22.74432c-0.2578,42.95952 0.63174,85.96188 -0.70086,128.88727c-5.20541,16.91916 -25.24538,27.88303 -42.40446,25.48965zm99.21976,-176.85336c19.73389,-3.88507 39.47778,-7.71994 59.20331,-11.64712c1.63908,-13.07382 -17.1093,-0.27914 -24.42491,-1.54683c-30.21908,5.91451 -60.4242,11.89998 -90.63543,17.85444c-2.77443,12.63378 14.55762,1.2752 21.41661,2.10594c11.47932,-2.25961 22.95964,-4.51424 34.44042,-6.76643zm2.31665,-18.17461c18.87643,-3.72409 37.75285,-7.44817 56.62927,-11.17224c3.17953,-13.298 -14.34081,-1.80056 -21.35843,-2.5417c-31.16306,6.26989 -62.32067,12.56752 -93.49722,18.77c-1.80564,13.61723 18.7942,-0.36929 26.46687,1.1845c10.58833,-2.07081 21.17455,-4.15248 31.7595,-6.24056zm119.82236,-6.10279c19.00511,-3.73167 38.01025,-7.46333 57.01538,-11.195c2.25488,-12.51775 -14.43167,-1.31337 -21.22391,-2.14778c-31.1899,6.14801 -62.39635,12.21269 -93.57906,18.3969c-0.48149,12.89743 19.70058,-0.51178 28.22481,0.73691c9.85522,-1.92534 19.70935,-3.85638 29.56277,-5.79102zm-0.38611,-17.67059c18.94318,-3.80859 37.98227,-7.27608 56.86438,-11.31118c2.82913,-13.23785 -18.20197,0.42724 -25.56577,-1.09474c-29.37247,5.74053 -58.85913,11.0502 -88.1676,17.028c-3.13618,14.00631 18.26254,0.04646 25.92732,1.45247c10.31334,-2.02773 20.6273,-4.05214 30.94167,-6.07454z", |
||||
"note_3_64th": "m15.05833,274.22296c-14.317,-1.9187 -18.42625,-20.3604 -8.93719,-29.99104c10.38896,-13.67708 30.27131,-22.30949 46.50857,-13.88661c0.66169,-52.1188 0.28732,-104.24842 0.38611,-156.37186c81.97786,-16.40303 164.06815,-32.26401 246.08122,-48.49419c-0.23633,57.62288 0.57712,115.26462 -0.57092,172.87238c-1.96869,14.86116 -17.13614,24.73065 -30.79056,27.81697c-11.96483,3.66806 -28.81317,-4.27963 -25.97963,-18.60901c3.50381,-15.49847 19.49141,-26.66583 34.8607,-28.02443c7.61099,-2.92159 20.18073,9.65431 16.68201,-4.30438c0.21829,-27.96678 0.10867,-55.9346 0.13544,-83.90191c-38.27235,7.48128 -76.53494,15.0156 -114.80267,22.52314c-0.22958,36.48441 0.55602,72.99504 -0.58997,109.45938c-3.18001,15.89902 -20.29759,26.40845 -35.74976,27.23267c-14.89929,2.89737 -27.08599,-14.42255 -17.93506,-27.04372c9.64191,-15.67046 31.65898,-26.22467 48.93309,-16.72427c0.33206,-30.58104 0.14311,-61.16617 0.19254,-91.74873c-38.39642,7.82673 -76.92161,15.04803 -115.31823,22.87476c-0.25736,36.94054 0.62957,73.92738 -0.70087,110.83084c-5.2055,16.9194 -25.24553,27.88339 -42.40482,25.49002l0,0zm101.38524,-159.31403c18.83891,-3.75145 37.70946,-7.35722 56.50069,-11.3393c2.95145,-13.53962 -17.91554,0.08701 -25.35307,-1.30814c-29.80621,5.87558 -59.6283,11.67136 -89.42722,17.5835c-2.26596,13.04952 15.28052,1.23864 22.46973,2.11949c11.93564,-2.35683 23.87244,-4.70798 35.80987,-7.05554zm-2.1648,-17.54025c19.73418,-3.88531 39.47784,-7.72015 59.20348,-11.64717c1.63916,-13.07402 -17.10936,-0.27902 -24.42487,-1.54701c-30.21927,5.9147 -60.42458,11.89994 -90.63596,17.8548c-2.77449,12.63354 14.55767,1.27519 21.41672,2.10558c11.47937,-2.25951 22.95979,-4.51389 34.44062,-6.7662zm123.16869,-6.50159c18.66148,-3.66445 37.32301,-7.3289 55.98506,-10.99284c1.75296,-13.03485 -16.50751,-0.89732 -23.95999,-1.87753c-30.19955,5.92758 -60.38982,11.90097 -90.58421,17.8548c-3.55789,11.04535 8.5943,3.94657 14.87352,3.58826c14.56204,-2.85567 29.12408,-5.71393 43.68562,-8.57269zm-120.85203,-11.67342c18.8765,-3.72417 37.75323,-7.44803 56.62942,-11.17215c3.18001,-13.29807 -14.34068,-1.80056 -21.35812,-2.54169c-31.16348,6.26993 -62.3213,12.56734 -93.49802,18.77035c-1.80566,13.61685 18.79432,-0.36964 26.46704,1.18407c10.58839,-2.07059 21.17467,-4.1525 31.75968,-6.24059zm119.82291,-6.10266c19.0054,-3.73169 38.01082,-7.46337 57.01573,-11.19506c2.25491,-12.51782 -14.4313,-1.3134 -21.22379,-2.14781c-31.19003,6.14807 -62.39655,12.21279 -93.5799,18.39685c-0.48135,12.89765 19.70091,-0.51173 28.22522,0.73721c9.8551,-1.92541 19.70967,-3.85648 29.56273,-5.7912zm-0.38611,-17.67071c18.94363,-3.8086 37.9825,-7.27608 56.86485,-11.31125c2.82944,-13.23789 -18.20175,0.42725 -25.56567,-1.09475c-29.37276,5.7406 -58.85979,11.05029 -88.16818,17.02811c-3.13626,14.0062 18.26253,0.04649 25.9276,1.4525c10.31329,-2.02775 20.62709,-4.05215 30.94141,-6.07461z", |
||||
"note_3_8th": "m15.02169,274.2272c-14.31707,-1.91879 -18.42601,-20.36015 -8.93697,-29.99103c10.3888,-13.67676 30.27088,-22.3091 46.50806,-13.88649c0.66166,-52.11824 0.28732,-104.24764 0.38611,-156.37097c81.97754,-16.40273 164.06694,-32.2636 246.07985,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.5712,172.87141c-1.96884,14.86089 -17.13589,24.73018 -30.79025,27.81644c-11.965,3.66806 -28.81323,-4.27919 -25.97937,-18.60878c3.50368,-15.49834 19.49124,-26.66568 34.8602,-28.02408c8.2316,-2.53128 20.41348,9.51646 16.65692,-5.23953c-0.07721,-45.31436 0.85016,-90.69309 -0.45593,-135.96806c-37.90379,6.83744 -76.18053,14.4211 -114.18623,21.74638c-0.22679,54.0925 0.53969,108.20272 -0.57019,162.28107c-1.77496,14.91302 -17.02997,24.75598 -30.69292,27.71687c-13.90182,4.60379 -31.50981,-7.66069 -24.80507,-22.93971c8.1866,-17.99985 32.25569,-30.36769 50.72748,-20.3566c0.32813,-48.569 0.14423,-97.14091 0.19258,-145.71125c-38.34256,7.86306 -76.73341,15.50194 -115.11303,23.18613c-0.70871,54.82025 0.60002,109.69145 -0.90556,164.48224c-5.27564,16.97054 -25.17379,27.85027 -42.40448,25.48964z", |
||||
"note_32nd": "m96.7115,298.78342c-12.19044,-1.97687 -21.5796,-13.65018 -18.87752,-26.14322c3.19898,-16.4884 18.16196,-28.11014 32.8273,-34.56326c11.8622,-4.83313 26.35187,-5.63437 37.63535,1.13913c0.44954,-79.35593 0.19681,-158.71518 0.26346,-238.07262c3.98198,-0.1698 8.54333,-0.99947 7.45644,4.60387c0.32353,13.2127 8.16176,24.35488 17.90031,32.62089c20.68701,19.0793 43.62003,41.1507 45.44289,71.03391c1.94933,11.70761 -4.32771,23.23071 -1.67,34.59584c2.53688,11.20206 1.78056,22.8308 0.17831,34.09036c7.53368,20.20854 5.71452,43.47615 -2.49284,63.20886c0.75815,6.16689 -13.8391,16.22797 -7.44476,5.95023c8.63434,-18.74539 13.17647,-41.8004 3.81317,-61.08943c-11.33986,-18.69514 -31.97612,-28.28085 -48.89772,-41.04474c-11.778,-11.86667 -5.42902,11.18993 -7.18364,18.06325c-0.26184,33.71661 -0.28255,67.43445 -0.41075,101.15173c-5.27325,12.84436 -14.94577,23.71875 -27.82796,29.29456c-9.44402,4.40988 -20.29373,7.32529 -30.71203,5.16064zm114.86545,-145.34879c-7.29857,-26.18551 -30.51866,-43.93251 -53.18727,-56.72259c-6.20538,-0.86809 1.83978,14.15399 3.5831,18.80585c8.11926,15.92772 24.10783,25.32948 35.63724,38.48439c5.02966,4.16844 10.75517,12.77017 14.6803,15.07132c0.57034,-5.18866 0.22502,-10.51091 -0.71336,-15.63898zm0.91826,-35.72012c-0.11551,-22.00919 -16.64085,-39.55235 -32.65781,-52.65142c-7.46819,-4.94457 -16.49954,-13.27054 -24.16978,-14.26883c1.45969,12.25124 6.9503,24.24821 17.03656,31.76259c14.34996,13.93145 29.52126,27.82796 39.47783,45.32379c1.14618,-3.04146 0.13112,-6.92123 0.3132,-10.16613z", |
||||
"note_4th": "m126.58881,297.40149c-11.87886,-2.65546 -23.26585,-13.54025 -21.01448,-26.56512c0.1731,-16.24911 13.85612,-27.71617 25.94878,-36.50977c15.62231,-10.78831 37.15717,-14.20154 54.34061,-5.04248c1.02979,-75.90828 0.44815,-151.83525 0.60191,-227.75206c3.00182,0.70564 9.53603,-2.12083 8.02534,3.09698c-0.14726,78.93155 0.33716,157.8673 -0.38513,236.79541c-0.07584,10.70851 -0.22026,22.31233 -7.75522,30.804c-13.91748,17.52454 -37.15509,29.1525 -59.76181,25.17303z", |
||||
"note_64th": "m104.92412,299.31976c-12.00094,-1.27536 -20.94641,-13.79388 -17.06551,-25.49271c6.43043,-17.60776 24.98182,-29.7767 43.42287,-30.74879c7.6006,-2.50558 20.88075,10.01114 17.93382,-3.27145c0.48503,-79.47305 0.24155,-158.94821 0.30153,-238.42232c5.75809,-1.70799 6.23006,2.55972 6.32732,7.33913c1.78415,17.85563 19.14293,26.89136 29.82072,39.25721c15.39714,15.12255 27.5349,36.04512 24.51741,58.34038c-3.08612,10.64033 -0.83701,20.84729 0.30066,31.5748c0.06851,11.58006 -4.18433,22.62605 -0.40593,34.00638c1.68036,11.01886 -3.23894,22.12428 2.03442,32.51251c2.40002,18.25101 0.69795,38.47595 -10.52008,53.59502c-7.11406,1.93207 2.97337,-8.35378 2.33067,-11.88858c6.3118,-18.25085 7.27405,-41.79056 -8.5262,-55.64728c-12.36734,-10.82431 -26.50575,-19.43405 -39.98901,-28.77931c-0.71652,35.81755 -0.4848,71.65158 -0.68907,107.47679c-5.08496,13.03387 -16.00215,23.09641 -29.22493,27.57315c-6.53331,2.3526 -13.63996,3.72845 -20.5687,2.57507zm98.72386,-126.48091c-6.34319,-22.74789 -26.51086,-38.16362 -46.20412,-49.27464c-5.25957,0.57732 2.32552,14.64314 4.87614,19.57021c8.86444,13.06609 22.37558,21.98311 32.7415,33.78232c3.44377,1.45969 10.43367,15.90742 9.37975,5.93784c0.13239,-3.35165 -0.09975,-6.73082 -0.79327,-10.01572zm0.7843,-31.02991c0.01227,-19.15482 -14.53879,-34.37045 -28.41721,-45.78492c-6.00691,-3.41928 -16.78343,-14.40513 -20.81033,-10.93629c1.48004,11.20951 7.52783,21.1048 16.47551,27.9065c11.85971,11.75211 24.67769,23.13779 32.59132,38.04211c0.77432,-2.77734 0.04828,-6.25352 0.16071,-9.2274zm0.01279,-39.15976c-0.40309,-21.71703 -17.74644,-38.41104 -34.56728,-49.83583c-4.69977,-2.50358 -18.46306,-14.73891 -13.78862,-1.7836c3.12802,17.13914 19.8609,25.3779 30.46255,37.43516c7.16287,5.47251 13.39691,18.87303 18.00247,22.03555c0.14136,-2.61625 -0.03749,-5.23595 -0.10913,-7.85128z", |
||||
"note_8th": "m92.11929,299.44888c-12.88673,-2.17523 -24.85642,-14.0065 -22.42534,-27.8176c1.23042,-15.16177 13.28207,-27.36446 25.40788,-35.40434c16.13786,-10.9864 38.20284,-15.06764 55.98708,-5.59207c1.04205,-76.42476 0.44817,-152.86866 0.60602,-229.30206c11.21484,-2.71548 7.58873,11.96767 10.1358,18.75797c2.43044,19.96716 15.82285,35.63469 29.15343,49.62502c16.53877,17.58521 34.10059,36.23084 39.47629,60.59399c5.87012,28.26657 -3.51422,57.18356 -15.69261,82.51581c-0.88187,8.11874 -15.77403,19.86469 -8.67888,5.1937c11.94699,-25.09727 21.81674,-54.00095 13.66216,-81.79225c-7.76553,-27.73048 -31.97011,-50.88958 -60.78398,-55.04219c-0.18622,58.55498 0.45346,117.12103 -0.68288,175.66663c-2.83272,17.24548 -17.81155,30.04147 -32.83268,37.34811c-10.35778,4.50974 -22.04797,7.23831 -33.33228,5.2493z", |
||||
"note_half": "m126.15042,298.46863c-16.82465,-2.00256 -23.94094,-21.72537 -20.50175,-36.48892c5.91676,-23.32147 29.06407,-39.43811 52.28738,-42.05833c8.81128,-0.72736 18.52644,-0.60411 25.78337,4.94891c5.95566,-2.36537 1.76544,-11.69408 2.85246,-17.2854c0,-68.81003 0,-137.6201 0,-206.43012c14.97716,-2.18183 5.30603,19.02521 7.94768,27.71113c-0.09924,75.95386 0.62134,151.91534 -0.76007,227.86198c-7.30341,28.38443 -39.39244,46.36703 -67.60907,41.74075zm2.8452,-12.40747c22.98492,-7.3089 44.37535,-22.56259 55.31068,-44.49013c0.95541,-13.55527 -16.00528,-10.73553 -23.6718,-6.15868c-13.5024,6.76553 -26.21068,15.65268 -36.74068,26.51123c-6.99238,6.4256 -15.89267,26.17618 0.78696,25.05563l2.30408,-0.3252l2.01074,-0.59286l0,0z", |
||||
"note_whole": "m130.51953,195.65829c-18.47874,-2.9818 -38.13104,-9.41365 -49.81914,-24.96915c-4.87284,-6.5025 -6.85786,-14.78229 -6.23731,-22.81049c-0.81288,-10.41815 5.23877,-19.78279 13.11027,-26.04227c15.71593,-12.69998 36.4436,-17.12403 56.18739,-18.21444c21.01479,-0.84168 42.85126,2.6237 61.20964,13.32044c11.19275,6.86285 21.10484,18.66567 20.54733,32.45548c0.612,8.09668 -0.91914,16.68852 -6.59294,22.84065c-11.24144,13.63681 -28.92738,19.59387 -45.72455,22.87505c-14.06622,2.54445 -28.55254,2.69426 -42.68069,0.54472zm34.33258,-7.95905c9.06644,-1.9348 15.01314,-11.03741 14.88672,-20.03276c1.54852,-18.89767 -4.73529,-39.56404 -20.09192,-51.52234c-8.61502,-6.06224 -20.8895,-6.65757 -30.00668,-1.42353c-6.79661,4.10276 -9.33514,12.23845 -9.31819,19.7824c-0.73656,16.04378 3.97748,32.8201 14.66045,45.0217c7.49542,7.87076 19.3475,12.08484 29.86963,8.17453z" |
||||
} |
||||
} |
@ -0,0 +1,18 @@
|
||||
{"data": { |
||||
"ball": "m1.36762,144.54343c-0.61252,-24.33647 11.43968,-48.24649 31.71385,-61.85355c33.0555,-25.12355 76.68359,-36.57172 117.69406,-29.65477c20.30775,-3.13354 29.29549,17.94864 22.15137,34.18353c-11.04268,10.79923 -30.25032,0.52836 -44.5518,6.11385c-46.3661,5.97041 -92.1348,26.12911 -123.47163,61.54787c-0.19116,-3.78908 -5.04203,-6.31387 -3.53584,-10.33693zm0.56006,21.59657c2.46893,-17.16783 19.59014,-26.10648 31.49495,-36.53964c40.07716,-28.36518 90.31613,-39.61352 138.89854,-37.70576c1.20387,19.56051 -8.00084,38.23036 -19.07559,53.7263c-15.20721,8.47826 -34.11861,-1.17561 -50.23914,6.54221c-28.27367,6.8441 -59.74523,15.46761 -77.84163,40.11734c-6.57559,19.79451 -20.47401,-0.35286 -21.54921,-12.00313c-1.52846,-4.62877 -1.3158,-9.384 -1.6879,-14.13731zm7.76269,-58.70418c2.42006,-21.53997 16.61662,-39.35048 29.64042,-55.76294c14.68114,-17.49181 34.66698,-30.31521 57.12629,-35.01287c17.80165,-4.64955 36.14864,-6.58389 54.39959,-8.53692c13.84103,10.63111 22.64574,29.11792 20.32661,46.60463c-10.75017,2.72292 -29.7578,-6.48294 -44.25362,-4.23798c-41.11142,0.38721 -83.13954,16.86419 -110.9226,47.60359c-2.31326,2.96635 -4.3931,6.11006 -6.31669,9.34248zm-2.20363,84.97105c15.37329,12.3277 15.8773,33.69405 25.32488,49.77684c-11.32475,-14.57886 -21.29314,-31.61081 -25.32488,-49.77684zm12.17333,11.7446c4.82258,-13.28815 19.94093,-31.96367 32.55468,-30.57486c5.04242,12.98813 7.22698,27.06129 15.42273,38.77007c22.00548,40.39473 62.27551,75.33984 110.15025,76.43997c7.82913,1.58691 28.58411,-3.6853 27.74063,-1.50394c-20.00963,9.82742 -43.17618,11.98239 -65.22374,11.19174c-40.94611,-2.71915 -81.7309,-22.38535 -106.34646,-55.65858c-6.96676,-11.95032 -10.92698,-25.33659 -14.29809,-38.66251zm33.70255,-33.88084c11.04849,-5.13829 31.74819,-20.7682 40.05036,-8.17067c20.26116,39.90601 54.51507,73.83781 96.68548,89.7942c21.8947,7.30453 46.52556,7.18939 67.87685,-1.92662c-8.90472,13.82597 -23.64018,22.69292 -37.52655,30.83714c-35.49046,15.14874 -78.39111,6.93469 -108.29421,-16.68286c-28.94243,-22.9118 -51.66176,-55.70389 -58.71476,-92.285l-0.04169,-0.84726l-0.03548,-0.71893l0,0l0,0zm14.80587,-143.69432c26.85995,-18.47492 60.14433,-27.13922 92.60995,-24.83766c-16.61871,10.60714 -37.47179,6.57748 -55.695,12.32051c-12.71339,2.76803 -25.33243,6.4903 -36.91495,12.51714zm23.19239,130.17215c17.68391,-8.37067 37.80864,-8.2348 56.92004,-7.08942c11.52194,17.94525 19.73788,38.80402 37.6284,51.74121c20.84937,18.617 51.18832,23.87227 77.45898,15.12419c9.02167,-6.09496 19.03778,-2.20023 14.1109,9.88971c-5.93085,20.07378 -26.98962,28.88977 -46.28781,29.86346c-39.48146,3.94382 -75.60028,-18.48682 -102.27098,-45.57831c-15.55914,-15.57706 -28.70033,-33.74123 -37.55954,-53.95085zm59.9713,-149.25921c14.39017,-11.41684 33.98842,-1.08634 48.71259,4.37706c14.6449,12.52997 16.60739,33.37817 20.47758,51.17717c6.47049,41.78263 3.85324,86.6684 -15.69031,124.8082c-4.67027,13.36929 -18.09242,20.61154 -26.69522,6.15724c-9.99724,-11.02568 -17.64142,-23.85532 -24.85538,-36.77173c-4.26648,-12.35977 9.69913,-21.07201 12.62395,-32.37317c5.6987,-11.2672 7.1479,-23.94022 7.7876,-36.27168c2.68518,-18.44756 0.04341,-37.58501 -4.80806,-55.44724c-3.40224,-9.88385 -8.92734,-19.45691 -17.55275,-25.65586zm41.36089,197.33399c28.32747,-32.0033 32.81847,-77.44762 30.6862,-118.36129c-1.29825,-24.12249 -4.96657,-49.05092 -17.68674,-70.0582c13.14473,0.40704 27.28206,12.75397 37.58124,21.8466c29.18982,37.11403 37.77368,91.40852 15.58273,134.05255c-8.72922,17.24329 -20.55305,32.80717 -34.43375,46.22929c-11.62009,-0.9548 -23.39864,-5.3515 -31.72969,-13.70895zm32.30334,13.89389c30.50691,-29.40305 52.59978,-71.66214 46.00664,-114.99303c-2.62479,-20.29454 -10.03497,-39.89902 -21.13239,-57.06778c20.32477,12.66527 31.62595,35.09759 41.79111,55.93748c14.61285,36.42265 6.66864,80.8159 -19.44537,109.92648c-13.41086,7.60643 -32.33356,8.77071 -47.21999,6.19685zm50.22404,-6.80072c10.46527,-18.28113 22.34006,-36.81323 23.43076,-58.50224c1.62656,-7.25171 -0.89633,14.22787 -1.77191,18.74721c-2.78329,15.96013 -6.41766,32.99399 -16.3092,46.01608c-2.27573,-1.26239 -1.2605,-7.4102 -5.34964,-6.26105z", |
||||
"bolt": "m178.14388,74.00616l-108.49727,68.79685l107.15599,23.63498l-99.04335,73.85934l-39.98779,-12.47227l28.36194,71.19228l112.7131,-31.06076l-47.58928,-12.98325l129.22581,-106.08589l-118.12698,-19.22734l114.07071,-71.6874l-65.0681,-10.76349l70.86891,-45.56109l-26.03423,-0.65478l-109.97452,62.50492l51.92505,10.50792z", |
||||
"bulb": "m148.28435,1.01645c-19.71313,-0.08707 -41.0383,4.93402 -53.87904,21.08005c-10.00002,11.90277 -20.52196,24.53872 -22.82235,40.47736c-5.18059,28.1529 -4.92928,57.93743 3.64143,85.4047c4.96631,13.63997 16.45209,23.50325 23.37698,36.11604c9.14968,13.20706 13.47519,29.26166 12.26267,45.27029c24.17088,0 48.34173,0 72.5126,0c0.07924,-23.9402 14.94635,-43.62665 28.19687,-62.22926c9.25131,-10.94521 15.23657,-24.20433 17.34691,-38.38177c4.07767,-25.40971 5.00331,-52.60092 -4.43568,-76.9665c-8.96201,-18.6421 -19.94247,-39.09958 -40.93047,-46.16479c-11.25407,-4.11034 -23.39734,-4.80265 -35.26991,-4.60611zm-36.97603,226.70836c24.34058,0 48.68115,0 73.0217,0c-4.36798,8.93942 -9.9079,18.74007 -6.84158,28.88942c-4.05983,8.82452 1.13719,17.61151 -5.54364,25.68655c-2.46005,11.06699 -16.46573,11.92905 -25.84717,12.23193c-10.13806,1.12546 -21.40701,-1.68927 -25.2739,-12.25085c-8.04343,-5.6481 1.65114,-12.52795 -4.58124,-18.87732c7.18661,-7.80208 -5.34555,-11.88156 -0.88777,-20.35059c-1.22452,-5.78517 -5.73284,-8.48584 -4.0464,-15.32915zm-0.15865,0.0249c24.34056,0 48.68114,0 73.02171,0c-1.83408,8.68544 -9.76653,16.89687 -6.75067,25.63821c1.71628,7.25716 -5.42461,13.19765 -1.14021,20.86113c-3.26378,9.1944 -9.79655,19.57855 -20.90657,19.54898c-10.7323,0.01825 -25.30243,3.58121 -31.95258,-7.11847c-2.51509,-6.44772 -10.6368,-10.31369 -4.40095,-17.31061c-7.73209,-5.79929 5.18552,-14.38748 -4.75156,-18.20934c4.72482,-9.15317 -5.09683,-14.41997 -3.11917,-23.40991l0,0zm-0.30553,-0.19208c24.34058,0 48.68115,0 73.02173,0c-1.83408,8.68544 -9.76651,16.89688 -6.75064,25.63823c1.71623,7.25714 -5.42465,13.19763 -1.14023,20.86111c-4.2211,6.69464 -8.74136,17.62585 -17.58711,18.4115c-9.70837,0.11472 -19.41676,0.2294 -29.12514,0.34415c-6.65182,-7.13144 -16.14077,-15.45563 -10.92694,-24.96432c-7.35572,-5.15384 5.77059,-13.49446 -4.37249,-16.88078c4.72483,-9.15317 -5.09684,-14.41994 -3.11918,-23.40988l0,0zm19.95543,64.05962c10.3149,0 20.62982,0 30.94472,0c-3.3429,2.41727 -5.36609,8.04688 -10.20465,6.82349c-4.97464,-0.38892 -10.5618,0.58282 -15.16096,-0.64023c-1.8597,-2.0611 -3.71941,-4.12219 -5.5791,-6.18326zm11.23076,-64.53401c-3.56728,-52.49875 -7.20926,-74.75493 -20.64074,-106.52489c-13.43148,-31.76996 -2.88758,-21.17014 27.12348,-24.60654c30.01106,-3.43639 13.46907,9.90684 13.48128,34.43486c0.01221,24.52803 1.7489,36.82391 3.69955,58.10826c-1.9278,20.61055 1.80084,20.75101 -2.79076,37.25708", |
||||
"car_smart": "m28.92024,238.37814c-20.54175,-8.15092 -27.36674,-32.3504 -27.6178,-52.52942c-2.7836,-14.94118 14.71887,-25.93048 8.95686,-41.2937c-2.18657,-22.71175 4.68564,-45.20703 14.9548,-65.22043c0.32475,-12.85873 10.87969,-17.84956 22.37955,-17.11762c37.15603,-4.71741 74.98359,-4.84966 112.15372,-0.39277c22.18198,4.11681 39.85953,19.32546 58.61859,30.81274c11.63586,8.63808 25.21985,14.32888 36.92355,22.63131c12.64026,10.62529 24.51556,22.47708 33.27448,36.57193c3.15143,14.09033 7.38165,28.09947 9.54742,42.2829c4.39661,13.27223 -4.6037,21.62047 -11.41214,30.84103c-10.34,12.57306 -29.90723,17.53416 -44.71561,10.78313c-10.28528,-3.75465 -14.07077,-19.70746 -25.7968,-18.60466c-44.20906,-0.65964 -88.41812,-1.31926 -132.62719,-1.97884c-10.24168,13.44736 -24.40165,28.14365 -42.91705,26.05086c-4.02312,-0.33679 -7.97831,-1.33774 -11.7224,-2.83646z", |
||||
"car": "m26.77284,183.48201c-8.08779,-6.80998 -23.25337,0.56996 -25.08215,-11.86069c-3.52016,-11.04616 7.23365,-19.6761 14.38957,-26.36473c12.51913,-6.23676 26.95447,-6.99092 40.49323,-9.84883c16.2238,-2.35439 33.11552,-4.36668 47.10119,-13.71207c15.9294,-9.9651 33.67083,-18.25834 52.86141,-18.11141c26.44141,-0.91634 53.7986,-0.02856 78.2453,11.26058c15.36688,6.93465 31.87709,10.4591 48.27711,13.85143c13.95395,1.83385 10.70889,16.88237 15.35007,26.15973c3.54291,10.65329 -4.11594,21.25732 -15.32654,21.59605c-11.85318,2.69405 -25.72552,2.95921 -34.00009,13.30453c-8.47623,9.38277 -23.69647,9.05888 -32.32811,0.09547c-3.56866,-2.21568 -5.9512,-7.58008 -10.70335,-6.65411c-44.31184,0.24008 -88.64653,-0.63266 -132.93902,0.78894c-11.57394,-0.92139 -16.38131,13.44077 -28.69251,12.44249c-6.30352,0.19554 -12.27285,-9.98318 -17.64611,-12.94739z", |
||||
"coud": "m193.50864,67.27344c-28.56444,0 -53.08249,14.81322 -65.08365,36.1982c-4.7932,-2.67596 -10.08009,-4.29625 -15.72245,-4.29625c-17.06268,0 -31.26126,13.72618 -35.64974,32.35901c-7.49058,-2.96072 -16.20005,-4.7533 -25.50328,-4.7533c-27.90971,0 -50.54951,15.27039 -50.54951,34.09579c0,16.99312 18.56764,30.96303 42.68829,33.54732c-1.08106,1.83421 -1.91961,3.65059 -1.91961,5.57599c0,18.02431 49.38134,32.72462 110.23999,32.72462c60.85864,0 110.24005,-14.70032 110.23999,-32.72462c0,-1.21274 -0.75272,-2.29501 -1.18832,-3.47357c2.66562,0.6629 5.30496,1.37115 8.22687,1.37115c16.28061,0.00005 29.5253,-11.06223 29.5253,-24.6806c0,-13.61838 -13.24469,-24.68059 -29.5253,-24.68059c-1.99515,0 -3.69165,0.68915 -5.57599,1.00551c1.64767,-5.44531 2.74228,-11.00153 2.74228,-16.91078c0,-36.04859 -32.63087,-65.35786 -72.94485,-65.35786z", |
||||
"drop": "m115.15536,295.759c-42.01334,-15.78687 -72.12711,-65.94934 -65.28346,-108.74701c4.3154,-26.98718 95.35947,-190.81818 103.3105,-185.90417c2.59511,1.60386 25.68835,39.79974 51.31831,84.87975c41.0565,72.21342 46.5999,85.67899 46.5999,113.19665c0,55.77716 -44.6394,101.46498 -98.23825,100.54555c-15.6409,-0.26834 -32.60906,-2.05518 -37.707,-3.97076zm42.09262,-28.05386c1.39066,-7.22116 -1.85785,-10.74289 -9.90955,-10.74289c-18.35065,0 -43.80598,-23.24161 -49.49309,-45.18889c-6.0666,-23.41179 -22.15186,-26.19615 -24.52774,-4.24574c-4.57746,42.29059 76.21872,100.22086 83.93037,60.17752z", |
||||
"electric_guitar": "m168.96899,1.09303c-2.62799,0.19977 -5.017,2.04496 -6.96899,4.55579c0.009,13.46278 -11.116,25.03858 -14.875,34.35928c2.30499,1.8475 1.13,2.9332 -1.03101,4.4286c-0.17,2.5165 0.468,4.9685 2.468,7.3554c-2.591,41.8755 -6.024,92.17889 -8.718,134.4599c6.14801,0.138 12.354,1.117 18.81201,0.687c-0.007,-32.55499 2.539,-84.562 3.282,-116.00749c-0.101,-10.2094 -0.504,-24.029 13.12399,-28.8618c-6.94499,-14.7833 5.922,-35.70095 -5.562,-40.97666c-0.146,-0.00122 -0.293,-0.00885 -0.438,0c-0.03099,0.00187 -0.062,-0.00236 -0.093,0l0,-0.00001zm11.692,171.76396c-4.715,6.66701 -11.79199,10.17 -14.146,13.60501c-5.37599,8.46799 -14.379,-3.16701 -26.89,2.99599c0.065,-1.02399 0.153,-2.172 0.21899,-3.20599c-0.07199,-0.002 -0.14699,0.00101 -0.21899,0c-6.659,1.013 -12.157,-7.713 -12.594,-15.44901c5.55199,-11.89 -14.242,-18.006 -19.5,-5.82899c-3.943,13.605 -0.41,27.51199 4.78201,40.672c5.933,16.162 -8.871,30.179 -13.2192,45.17601c-4.1375,9.502 -4.2709,20.46999 2.68719,29.192c9.486,13.58398 29.413,18.62799 47.563,18.758c3.23401,0.224 6.44801,0.414 9.68701,0.58499c57.61699,3.284 34.35399,-35.13699 25.282,-68.41299c-5.82201,-21.66299 1.48199,-36.38 6.269,-42.614c2.659,-7.35001 6.02899,-23 -9.92101,-15.472l0,-0.00101zm-34.567,-128.4203c2.43501,-11.918 -8.10399,0.709 0,0z", |
||||
"guitar": "m158.45264,1.00012c-0.96039,0.00612 -1.8884,0.06411 -2.73161,0.18457c-4.49716,0.64245 -8.99768,2.5655 -8.99768,2.5655c0,0 0.00569,8.99612 -0.63676,15.42064c-0.64244,6.42453 -3.21147,17.34015 -3.21147,17.34015l3.15611,6.32144l0.05536,-1.172l10.62189,1.86414l0.94128,0.05537c0,0 1.28059,-1.28413 2.56551,-3.21148c1.2849,-1.92736 3.85747,-3.21148 3.85747,-3.21148c0,0 0.63675,-9.63641 0.63675,-16.70339c0,-7.06698 2.57472,-18.63212 2.57472,-18.63212c0,0 -4.66991,-0.84783 -8.83156,-0.82133zm-1.74417,42.52442l-10.62189,-0.58139l-0.05536,-0.11074l-5.5278,113.65688c0.19376,0.03734 0.44296,0.08304 0.44296,0.08304c0.14801,2.18161 0.8121,3.84209 1.8549,5.14021l11.84926,5.41707c0.3562,0.09476 0.71249,0.18806 1.07048,0.28609l1.28276,-123.83578l-0.29532,-0.05537zm-0.98744,123.89115l0,0.20302l-1.07048,-0.48911c-4.80661,-1.27875 -9.3821,-2.34575 -11.84926,-5.41707l-2.5009,-1.14432l0.20303,-4.07893c-2.16553,-0.41753 -15.40038,-2.83867 -20.1179,-0.47989c-5.13962,2.56979 -8.99552,6.42279 -10.28043,14.77466c-1.2849,8.3519 2.57119,23.77351 1.92873,34.05275c-0.64246,10.27924 -7.71416,19.91469 -10.92641,28.26657c-3.21227,8.35188 -6.4202,17.99007 -2.5655,32.12404c3.85472,14.13391 17.99164,23.77151 25.70107,26.9838c7.70942,3.21225 23.7631,5.14023 23.7631,5.14023c0,0 15.42752,2.58041 25.06432,1.93796c20.23672,-3.64624 28.72404,-15.65756 29.98303,-30.66595c1.259,-15.00839 -4.71521,-33.01251 -13.40884,-48.65207c-9.50552,-17.10013 8.59656,-39.76326 -0.76596,-52.52802c-9.74182,-13.28188 -16.9409,8.64334 -23.78156,3.87593c-2.77655,-1.93504 -6.09895,-3.00655 -9.37605,-3.90359z", |
||||
"helicopter": "m145.07504,214.22588c7.36339,2.46503 20.68225,-9.04681 7.26401,-9.72079c-9.08205,-5.71648 20.13416,-1.63675 8.22827,-13.70961c-12.73747,-2.77332 -22.69479,-12.46857 -27.12979,-24.871c-5.18111,-13.36012 -22.04633,-9.68964 -33.09622,-13.54991c-22.05075,-3.93678 -44.07657,-8.59007 -66.50366,-9.73877c-7.45861,8.40495 -10.97594,26.46114 -24.24853,25.75703c-13.26779,-6.6758 0.56035,-23.43509 -3.41489,-33.00934c-7.79329,-2.62592 -6.3066,-7.72096 1.2938,-8.36586c11.59587,-8.00312 1.94812,-23.47349 -0.57486,-34.01581c-6.13778,-10.01295 7.00565,-18.8414 12.01386,-7.02641c6.38165,12.3224 10.0863,25.85204 15.15507,38.7706c1.5816,8.28716 13.30507,3.58878 19.44516,6.06101c25.89155,2.78554 51.80775,5.58556 77.83869,6.66318c13.03992,-5.6261 26.8783,-10.34038 41.29993,-8.34114c10.08574,3.05644 15.78185,-0.7104 15.3338,-11.13895c5.72609,-15.02095 -14.03151,-8.3312 -22.93935,-10.54208c-35.53757,-1.72837 -71.18015,-2.25171 -106.70476,-0.12757c-7.88696,-1.96813 10.41693,-1.78943 13.19444,-2.24187c37.48436,-1.98021 75.04819,-1.00611 112.54227,-2.69012c10.81163,-3.98792 21.54251,3.11311 32.56555,1.91049c27.80304,1.13907 55.63103,1.5356 83.45552,1.62198c-7.86588,5.84674 -22.53885,0.05771 -32.94354,1.5061c-20.90826,-0.64194 -41.94905,-1.24406 -62.73434,1.6021c-8.09567,7.82163 -3.84563,24.5245 6.28453,28.41502c10.32359,5.55025 20.91692,10.41565 30.31529,17.0117c5.93991,11.31316 22.72864,20.80537 17.77679,35.05132c-5.67494,11.7886 -26.25294,4.37625 -31.4632,7.69153c3.85466,6.8309 17.16597,7.52176 19.55997,10.01913c-13.12518,3.78056 -0.61014,11.85339 6.85498,9.29091c9.21201,2.18106 -9.36668,3.71298 -12.4339,2.99583c-14.92371,0.12004 -29.83833,-0.52202 -44.7583,-0.72722c14.41679,-0.6433 28.87468,-0.63033 43.24721,-2.05975c-3.35245,-13.78374 -21.0649,-7.04161 -31.27078,-9.43388c-4.97525,-2.55072 -21.3748,0.68501 -13.06122,5.71829c4.63876,-2.08994 15.97667,-0.09111 5.65021,2.25237c-18.67735,0.60303 -37.42494,0.87289 -56.04201,-1.0285zm45.45972,-5.72816c-5.69293,-8.23618 -25.36656,-6.65369 -28.94688,0.84814c6.97417,5.6115 21.3663,3.65866 28.78714,0.2599l0.15974,-1.10805l0,0zm41.15115,-4.79669c-8.39107,-5.92067 -23.748,-6.57408 -31.28664,-1.76099c9.46599,4.52687 21.07687,2.68456 31.28664,1.76099zm-41.46053,-2.71213c8.91602,-7.60876 -15.73071,-6.19264 -21.17932,-5.80487c-13.47525,6.12955 5.46666,7.82239 11.1256,6.8177c3.37151,-0.02223 6.75697,-0.27522 10.05373,-1.01283z", |
||||
"katana": "m127.28507,65.14041c-7.0962,-0.54353 -19.86895,7.61395 -17.02093,-6.32892c4.93732,-8.55679 18.30521,-4.48845 16.78561,5.48313l0.17354,0.62374l0.06178,0.22205l0,0zm17.16403,-18.49577c-6.77293,11.60114 -22.03173,12.43076 -33.48896,16.75148c-5.30647,3.04373 -26.81981,5.02184 -18.62814,-4.27034c11.69819,-7.75446 26.08649,-9.62626 39.25734,-13.85468c4.24069,-0.99664 9.15976,-1.38791 12.85976,1.37354zm-35.03055,12.26915c-5.16663,-17.73298 -10.33324,-35.46593 -15.49986,-53.19891c6.32053,-8.5978 20.25586,-4.8693 18.32531,6.59137c4.01678,13.78642 8.03355,27.57289 12.05032,41.35935m-5.56697,9.33072c22.56753,79.08354 48.81091,157.2375 81.6054,232.70842m-75.6467,-234.76585c22.79797,74.42342 46.12929,148.92492 77.59851,220.23124c0.43317,5.52475 14.80417,22.08911 1.77542,17.81497c-4.05151,-1.9415 -10.97104,-0.62137 -11.72156,-6.31741c-30.74268,-74.29929 -57.39734,-150.28568 -79.92033,-227.47363", |
||||
"leaf_1": "m35.63904,285.5213c9.77121,-31.99348 23.14531,-59.08864 35.83149,-72.59245c13.5912,-14.46718 7.56125,-20.74258 -6.45918,-6.72212c-5.89857,5.89853 -7.58387,1.61555 -7.58387,-19.2735c0,-49.83961 25.83589,-80.67891 87.99842,-105.04016c52.59872,-20.61333 91.37741,-43.79435 107.45589,-64.23479l13.10197,-16.65652l0,28.9807c0,35.83507 -11.11781,89.97318 -23.42422,114.0641c-13.0549,25.55626 -57.80217,72.72934 -79.76038,84.08435c-19.67261,10.17316 -61.687,13.16808 -84.14172,5.99792c-11.19011,-3.57314 -14.7415,-0.84308 -20.53963,15.78944c-3.8556,11.06018 -7.0102,26.79501 -7.0102,34.96616c0,9.27652 -3.72057,14.8566 -9.90572,14.8566c-7.3461,0 -8.78352,-3.67429 -5.56284,-14.21973z", |
||||
"menorah": "m86.17095,270.72717c9.02267,-23.09398 33.59461,-36.70894 57.45916,-38.45409c0,-4.91623 0,-9.83244 0,-14.74866c-38.305,-2.75075 -76.20534,-18.86525 -101.66333,-48.29793c-23.2569,-24.97108 -35.58256,-58.55817 -37.27682,-92.42073c-13.45491,-9.58464 12.56556,-16.55834 15.7355,-5.95607c-7.24909,8.79617 -0.22592,22.59306 0.80432,33.36646c11.47956,50.91395 56.38975,91.60496 107.78628,98.82449c13.14264,5.82442 16.6395,-2.00252 14.39308,-13.99509c2.81267,-9.48175 -7.44086,-6.60333 -13.57417,-8.37358c-40.52152,-7.1041 -75.7263,-38.65041 -86.11595,-78.75394c-2.97659,-11.47399 -3.94458,-24.11363 -7.5694,-33.51495c7.70256,-6.02401 26.19639,-1.60448 15.97076,9.15671c1.09565,45.56244 38.91488,85.76277 83.65269,91.48959c9.24995,4.52249 8.18915,-3.21457 7.85701,-9.40932c4.90146,-15.06035 -9.71606,-12.79654 -19.53952,-16.50067c-27.62657,-9.39215 -47.87568,-36.35101 -49.79039,-65.51331c-13.2153,-11.51691 15.74928,-17.53994 15.95383,-5.55531c-7.59098,8.84892 0.96818,23.21689 5.54156,32.6564c10.3335,16.84724 28.24842,28.22102 47.83452,30.47823c0,-7.52246 0,-15.04491 0,-22.56738c-18.20905,-2.81535 -32.7534,-18.72141 -34.8131,-36.97318c-12.40635,-10.10166 14.58986,-14.97282 16.53119,-5.29626c-6.736,5.28018 -1.66743,13.75206 2.28733,19.47478c2.82583,3.38407 16.81124,15.16281 15.99458,6.28913c0,-10.03232 0,-20.06463 0,-30.09695c-8.52963,-5.41637 3.21713,-9.02356 -1.91258,-15.41792c2.95047,-6.63559 4.28693,-23.79965 6.49635,-24.00391c7.40089,10.5439 4.63795,25.17949 11.62167,34.34932c-3.85376,4.14688 -4.52328,8.74758 -3.86568,14.89357c0,8.05796 0,16.11592 0,24.17388c11.03737,-3.24367 21.02812,-12.42406 21.72646,-24.48188c-12.61211,-14.80839 30.69243,-11.52931 12.71999,1.59949c-1.87195,17.85434 -17.0993,32.57059 -34.44644,35.57887c0,7.49281 0,14.98562 0,22.47842c29.68999,-2.98224 55.87296,-29.1582 56.39926,-59.47436c-12.36238,-13.6567 27.91393,-12.75137 14.12813,-0.52898c-3.16423,14.80594 -6.23018,30.54218 -16.29872,42.63571c-12.70108,17.1765 -33.04718,27.37456 -53.98901,29.78134c0.16994,9.14496 -4.65584,28.46082 11.13493,20.75519c39.31322,-6.69104 72.74197,-39.63307 78.74797,-79.43351c5.73982,-8.84732 -8.70837,-25.00382 8.28397,-22.77648c10.50046,-2.44997 11.98193,6.34405 5.8692,11.72792c-2.04736,35.89314 -21.91298,70.45303 -53.09749,88.60141c-15.52945,9.13074 -33.16388,14.88533 -51.17824,15.85547c0.17836,7.53169 -0.4761,15.16116 0.61618,22.6142c35.31798,-2.81911 70.08339,-18.10321 93.11932,-45.67516c20.51892,-23.04272 31.08511,-53.43816 32.84753,-84.00375c-10.43478,-10.04525 11.39471,-11.61442 16.59445,-7.04305c-5.883,11.66189 -5.21661,27.04671 -9.11984,40.52295c-12.68921,53.08224 -58.41412,95.84925 -111.85593,105.51876c-7.32545,1.56883 -14.77785,2.36348 -22.20172,3.29227c-0.71042,9.09981 -0.50818,18.35449 11.59822,16.61531c20.59241,4.32626 40.36211,18.55411 46.94081,39.19469c-43.09088,0 -86.18179,0 -129.2727,0c0.31159,-0.88608 0.62314,-1.77219 0.93477,-2.65823zm-82.88959,-208.5947c-0.54892,-8.1144 4.33617,-25.42208 5.66115,-27.43132c2.27143,7.42761 12.58555,23.78434 4.72879,28.60384c-3.29131,-0.38358 -8.04816,1.57556 -10.38994,-1.17252zm34.52483,0.55147c-1.7146,-10.01769 5.4567,-19.41309 4.51432,-29.75311c3.2196,8.43034 16.36395,29.47998 1.96646,30.42084c-2.16732,-0.0773 -4.38702,0.03559 -6.48078,-0.66772zm35.62526,-0.17229c-1.52428,-9.82734 5.20364,-19.12723 4.61758,-29.264c3.98769,8.50923 17.39558,32.7104 -0.82941,30.07944l-1.91212,-0.12625l-1.87605,-0.68919l0,0zm34.60818,0.26421c-1.9521,-10.01891 5.40411,-19.48301 4.43661,-29.84504c3.27068,8.4848 16.29427,29.36411 1.98981,30.63179c-2.15335,-0.08198 -4.37302,0.0215 -6.42642,-0.78675zm69.2087,-0.38279c-1.5544,-10.07727 5.31645,-19.6095 4.34973,-30.05398c2.70531,5.08463 6.32187,13.73424 7.91895,20.50951c4.77353,11.03205 -3.95122,12.51878 -12.26868,9.54446zm35.71176,0.44493c-2.89404,-9.75608 5.30412,-19.55815 4.07715,-29.90718c3.42241,8.32418 12.40758,23.15913 6.53528,30.337c-3.53609,0.01955 -7.13571,0.41735 -10.61243,-0.42982zm34.8703,-0.20629c-2.23303,-8.13288 4.34842,-24.82986 5.07388,-28.23849c3.49849,8.39077 16.5291,33.58521 -2.7937,28.93562l-2.28018,-0.69713l0,0zm35.10023,-0.15336c-1.90784,-8.93159 5.20419,-21.786 4.83258,-28.71239c3.47043,8.02287 16.97986,32.30244 -0.94669,29.60343l-1.89111,-0.14957l-1.99478,-0.74147l0,0z", |
||||
"sun": "m238.69324,135.65587c0,46.60593 -40.30034,84.38748 -90.01332,84.38748c-49.71299,0 -90.01332,-37.78156 -90.01332,-84.38748c0,-46.6059 40.30033,-84.38747 90.01332,-84.38747c49.71298,0 90.01332,37.78154 90.01332,84.38747zm-7.30318,120.56636c-4.20586,5.25757 -51.12886,-47.27794 -57.30507,-44.69331c-6.17622,2.58458 -15.51068,86.52086 -22.0425,87.47173c-6.53188,0.9509 -17.76118,-85.09837 -24.12714,-87.15329c-6.36602,-2.05495 -43.23042,49.74286 -48.75608,45.85272c-5.52563,-3.89009 13.12091,-67.11951 10.04803,-73.73549c-3.07288,-6.61595 -73.34953,-9.72229 -74.79697,-17.10284c-1.44742,-7.38055 63.69369,-26.7453 64.2322,-34.0554c0.53854,-7.31011 -43.73452,-48.6129 -41.1993,-55.02096c2.53526,-6.40806 61.81988,21.03078 65.82475,15.40928c4.00487,-5.62149 -7.80805,-76.34053 -1.73039,-78.4587c6.07763,-2.11818 42.59449,47.54089 49.0827,47.30339c6.48817,-0.23753 26.02002,-62.46352 32.64861,-61.00949c6.62865,1.45401 3.32251,66.01247 8.45366,70.32287c5.13113,4.31043 55.87381,-16.15842 59.63792,-10.29998c3.76414,5.85843 -29.09575,62.86814 -27.11681,69.62658c1.97902,6.75845 62.18188,13.20758 61.3595,20.19514c-0.82245,6.98758 -75.2742,9.96732 -78.37666,16.73535c-3.10245,6.76802 28.36942,83.35484 24.16354,88.6124z", |
||||
"chair": "m118.11539,289.55515c-7.47328,-14.4328 15.76004,-21.83389 9.75156,-35.26642c-9.58212,-8.59285 -23.93785,-6.58557 -35.88018,-5.92961c-12.89955,-1.58955 -16.67669,11.62587 -24.11323,17.11729c-14.66394,-4.57965 -9.41961,-23.5907 3.95336,-25.69879c17.48831,-7.56879 36.79559,-3.21786 54.96046,-6.57193c13.14571,-7.65541 -3.09947,-24.09541 -13.42245,-25.84244c-17.08451,-6.9008 -38.18468,-7.0844 -51.24073,-21.62146c-5.1916,-11.32457 -3.84497,-32.04767 10.15321,-36.01445c6.34414,-10.73523 5.01785,-24.55999 3.35027,-36.47948c1.42348,-12.67513 -26.70474,-5.25126 -14.90233,-18.24577c10.64336,-8.15804 24.36629,-13.15867 37.81105,-12.959c10.96933,0.36309 11.71716,12.99065 -0.37628,9.89848c-12.30081,6.18077 -7.72121,23.86169 -7.25122,35.16668c5.93514,11.39347 22.04794,5.36764 32.49831,7.07384c14.8665,0.39955 21.73593,0.44463 35.83476,5.23605c14.25958,-1.05464 8.64325,-20.61657 0.17079,-21.97119c-13.03212,-2.87206 -25.91483,-10.25501 -33.20317,-21.62909c-4.07215,-13.26593 1.69855,-27.24597 4.77583,-40.18096c9.18196,-28.0861 34.13237,-54.57027 65.33606,-54.63913c19.15414,0.28833 38.85675,14.48402 42.13089,33.82922c2.48616,20.34066 -5.57245,41.0622 -0.32005,61.11538c12.75343,7.04288 -8.70227,17.78406 -9.16336,27.50478c-5.43883,14.13736 6.97403,30.55498 -3.65417,43.29654c-6.64983,9.38159 -22.16026,14.5639 -22.43275,27.04953c-3.81845,11.24202 -21.47061,10.39703 -30.28923,17.71931c-9.74564,2.86838 -15.08257,19.17726 -0.15649,15.9317c14.55153,-0.35892 29.03516,-5.81784 43.55118,-3.3181c10.39314,7.10063 -0.45073,21.22018 -10.9113,14.54475c-5.46445,0.08383 -25.63857,2.80356 -18.76688,8.69054c17.18895,4.015 35.8273,9.2104 46.95854,24.0352c10.43184,13.90863 -12.73763,17.22995 -17.34935,5.0022c-19.29245,-15.75378 -48.30531,-24.24933 -70.97163,-10.48508c-13.71143,5.73386 -10.53542,20.53958 -11.98199,31.56015c-5.57972,6.09451 -13.26627,-2.5275 -14.84946,-7.91876zm100.26077,-153.99353c-4.62421,-8.64436 -27.69229,-17.16811 -30.82967,-4.71919c1.76141,12.68575 19.62196,15.68971 29.15408,10.51048c1.73547,-1.32053 2.45361,-3.74493 1.67558,-5.79129z" |
||||
} |
||||
} |
@ -0,0 +1,12 @@
|
||||
All Raphaël icons were retrieved from here: |
||||
http://raphaeljs.com/icons/ |
||||
|
||||
And fall under the MIT license: |
||||
|
||||
Copyright © 2008 Dmitry Baranovskiy |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. |
||||
|
||||
The software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. |
@ -0,0 +1,64 @@
|
||||
{"size": 32, |
||||
"fill": true, |
||||
"data": { |
||||
"raph_twitter": "M23.295,22.567h-7.213c-2.125,0-4.103-2.215-4.103-4.736v-1.829h11.232c1.817,0,3.291-1.469,3.291-3.281c0-1.813-1.474-3.282-3.291-3.282H11.979V6.198c0-1.835-1.375-3.323-3.192-3.323c-1.816,0-3.29,1.488-3.29,3.323v11.633c0,6.23,4.685,11.274,10.476,11.274h7.211c1.818,0,3.318-1.463,3.318-3.298S25.112,22.567,23.295,22.567z", |
||||
"raph_gear2": "M17.047,27.945c-0.34,0.032-0.688,0.054-1.046,0.054l0,0c-0.32,0-0.631-0.017-0.934-0.043l0,0l-2.626,3.375l-0.646-0.183c-0.758-0.213-1.494-0.48-2.202-0.8l0,0L8.979,30.07l0.158-4.24c-0.558-0.39-1.079-0.825-1.561-1.302l0,0L3.424,25.42l-0.379-0.557c-0.445-0.654-0.824-1.339-1.16-2.032l0,0l-0.292-0.605l2.819-3.12c-0.176-0.661-0.293-1.343-0.353-2.038l0,0l-3.736-1.975l0.068-0.669c0.08-0.801,0.235-1.567,0.42-2.303l0,0l0.165-0.653l4.167-0.577c0.297-0.627,0.647-1.221,1.041-1.78l0,0l-1.59-3.914l0.48-0.47c0.564-0.55,1.168-1.048,1.798-1.503l0,0l0.546-0.394l3.597,2.259c0.606-0.279,1.24-0.509,1.897-0.685l0,0l1.304-4.046l0.672-0.051c0.362-0.027,0.751-0.058,1.174-0.058l0,0c0.422,0,0.81,0.031,1.172,0.058l0,0l0.672,0.051l1.318,4.088c0.632,0.176,1.244,0.401,1.831,0.674l0,0l3.647-2.291l0.548,0.394c0.63,0.455,1.235,0.954,1.798,1.501l0,0l0.482,0.47l-1.639,4.031c0.357,0.519,0.679,1.068,0.954,1.646l0,0l4.297,0.595l0.167,0.653c0.188,0.735,0.342,1.501,0.42,2.303l0,0l0.068,0.669l-3.866,2.044c-0.058,0.634-0.161,1.258-0.315,1.866l0,0l2.913,3.218l-0.293,0.608c-0.335,0.695-0.712,1.382-1.159,2.034l0,0l-0.379,0.555l-4.255-0.912c-0.451,0.451-0.939,0.866-1.461,1.241l0,0l0.162,4.323l-0.615,0.278c-0.709,0.319-1.444,0.587-2.202,0.8l0,0l-0.648,0.183L17.047,27.945L17.047,27.945zM20.424,29.028c0.227-0.076,0.45-0.157,0.671-0.244l0,0l-0.152-4.083l0.479-0.307c0.717-0.466,1.37-1.024,1.95-1.658l0,0l0.386-0.423l4.026,0.862c0.121-0.202,0.238-0.409,0.351-0.62l0,0l-2.754-3.045l0.171-0.544c0.243-0.783,0.381-1.623,0.422-2.5l0,0l0.025-0.571l3.658-1.933c-0.038-0.234-0.082-0.467-0.132-0.7l0,0l-4.07-0.563l-0.219-0.527c-0.327-0.787-0.76-1.524-1.277-2.204l0,0l-0.342-0.453l1.548-3.808c-0.179-0.157-0.363-0.31-0.552-0.458l0,0l-3.455,2.169L20.649,7.15c-0.754-0.397-1.569-0.698-2.429-0.894l0,0l-0.556-0.127l-1.248-3.87c-0.121-0.006-0.239-0.009-0.354-0.009l0,0c-0.117,0-0.235,0.003-0.357,0.009l0,0l-1.239,3.845l-0.564,0.12c-0.875,0.188-1.709,0.494-2.486,0.896l0,0l-0.508,0.264L7.509,5.249c-0.188,0.148-0.372,0.301-0.55,0.458l0,0l1.507,3.708L8.112,9.869c-0.552,0.709-1.011,1.485-1.355,2.319l0,0l-0.218,0.529l-3.939,0.545c-0.05,0.233-0.094,0.466-0.131,0.7l0,0l3.531,1.867l0.022,0.575c0.037,0.929,0.192,1.82,0.459,2.653l0,0l0.175,0.548l-2.667,2.95c0.112,0.212,0.229,0.419,0.351,0.621l0,0l3.916-0.843l0.39,0.423c0.601,0.657,1.287,1.229,2.043,1.703l0,0l0.488,0.305l-0.149,4.02c0.221,0.087,0.445,0.168,0.672,0.244l0,0l2.479-3.188l0.566,0.07c0.427,0.054,0.843,0.089,1.257,0.089l0,0c0.445,0,0.894-0.039,1.353-0.104l0,0l0.571-0.08L20.424,29.028L20.424,29.028zM21.554,20.75l0.546,0.839l-3.463,2.253l-1.229-1.891l0,0c-0.447,0.109-0.917,0.173-1.406,0.173l0,0c-3.384,0-6.126-2.743-6.126-6.123l0,0c0-3.384,2.742-6.126,6.126-6.126l0,0c3.38,0,6.123,2.742,6.123,6.126l0,0c0,1.389-0.467,2.676-1.25,3.704l0,0L21.554,20.75M19.224,21.073l0.108-0.069l-0.987-1.519l0.572-0.572c0.748-0.75,1.207-1.773,1.207-2.912l0,0c-0.004-2.278-1.848-4.122-4.123-4.126l0,0c-2.28,0.004-4.122,1.846-4.126,4.126l0,0c0.004,2.275,1.848,4.119,4.126,4.123l0,0c0.509,0,0.999-0.104,1.473-0.286l0,0l0.756-0.29L19.224,21.073L19.224,21.073z", |
||||
"raph_gear": "M26.974,16.514l3.765-1.991c-0.074-0.738-0.217-1.454-0.396-2.157l-4.182-0.579c-0.362-0.872-0.84-1.681-1.402-2.423l1.594-3.921c-0.524-0.511-1.09-0.977-1.686-1.406l-3.551,2.229c-0.833-0.438-1.73-0.77-2.672-0.984l-1.283-3.976c-0.364-0.027-0.728-0.056-1.099-0.056s-0.734,0.028-1.099,0.056l-1.271,3.941c-0.967,0.207-1.884,0.543-2.738,0.986L7.458,4.037C6.863,4.466,6.297,4.932,5.773,5.443l1.55,3.812c-0.604,0.775-1.11,1.629-1.49,2.55l-4.05,0.56c-0.178,0.703-0.322,1.418-0.395,2.157l3.635,1.923c0.041,1.013,0.209,1.994,0.506,2.918l-2.742,3.032c0.319,0.661,0.674,1.303,1.085,1.905l4.037-0.867c0.662,0.72,1.416,1.351,2.248,1.873l-0.153,4.131c0.663,0.299,1.352,0.549,2.062,0.749l2.554-3.283C15.073,26.961,15.532,27,16,27c0.507,0,1.003-0.046,1.491-0.113l2.567,3.301c0.711-0.2,1.399-0.45,2.062-0.749l-0.156-4.205c0.793-0.513,1.512-1.127,2.146-1.821l4.142,0.889c0.411-0.602,0.766-1.243,1.085-1.905l-2.831-3.131C26.778,18.391,26.93,17.467,26.974,16.514zM20.717,21.297l-1.785,1.162l-1.098-1.687c-0.571,0.22-1.186,0.353-1.834,0.353c-2.831,0-5.125-2.295-5.125-5.125c0-2.831,2.294-5.125,5.125-5.125c2.83,0,5.125,2.294,5.125,5.125c0,1.414-0.573,2.693-1.499,3.621L20.717,21.297z", |
||||
"raph_wrench": "M26.834,14.693c1.816-2.088,2.181-4.938,1.193-7.334l-3.646,4.252l-3.594-0.699L19.596,7.45l3.637-4.242c-2.502-0.63-5.258,0.13-7.066,2.21c-1.907,2.193-2.219,5.229-1.039,7.693L5.624,24.04c-1.011,1.162-0.888,2.924,0.274,3.935c1.162,1.01,2.924,0.888,3.935-0.274l9.493-10.918C21.939,17.625,24.918,16.896,26.834,14.693z", |
||||
"raph_magic": "M23.043,4.649l-0.404-2.312l-1.59,1.727l-2.323-0.33l1.151,2.045l-1.032,2.108l2.302-0.463l1.686,1.633l0.271-2.332l2.074-1.099L23.043,4.649zM26.217,18.198l-0.182-1.25l-0.882,0.905l-1.245-0.214l0.588,1.118l-0.588,1.118l1.245-0.214l0.882,0.905l0.182-1.25l1.133-0.56L26.217,18.198zM4.92,7.672L5.868,7.3l0.844,0.569L6.65,6.853l0.802-0.627L6.467,5.97L6.118,5.013L5.571,5.872L4.553,5.908l0.647,0.786L4.92,7.672zM10.439,10.505l1.021-1.096l1.481,0.219l-0.727-1.31l0.667-1.341l-1.47,0.287l-1.069-1.048L10.16,7.703L8.832,8.396l1.358,0.632L10.439,10.505zM17.234,12.721c-0.588-0.368-1.172-0.618-1.692-0.729c-0.492-0.089-1.039-0.149-1.425,0.374L2.562,30.788h6.68l9.669-15.416c0.303-0.576,0.012-1.041-0.283-1.447C18.303,13.508,17.822,13.09,17.234,12.721zM13.613,21.936c-0.254-0.396-0.74-0.857-1.373-1.254c-0.632-0.396-1.258-0.634-1.726-0.69l4.421-7.052c0.064-0.013,0.262-0.021,0.543,0.066c0.346,0.092,0.785,0.285,1.225,0.562c0.504,0.313,0.908,0.677,1.133,0.97c0.113,0.145,0.178,0.271,0.195,0.335c0.002,0.006,0.004,0.011,0.004,0.015L13.613,21.936z", |
||||
"raph_download": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,28.792c-1.549,0-2.806-1.256-2.806-2.806s1.256-2.806,2.806-2.806c1.55,0,2.806,1.256,2.806,2.806S17.55,28.792,16,28.792zM16,21.087l-7.858-6.562h3.469V5.747h8.779v8.778h3.468L16,21.087z", |
||||
"raph_firefox": "M28.4,22.469c0.479-0.964,0.851-1.991,1.095-3.066c0.953-3.661,0.666-6.854,0.666-6.854l-0.327,2.104c0,0-0.469-3.896-1.044-5.353c-0.881-2.231-1.273-2.214-1.274-2.21c0.542,1.379,0.494,2.169,0.483,2.288c-0.01-0.016-0.019-0.032-0.027-0.047c-0.131-0.324-0.797-1.819-2.225-2.878c-2.502-2.481-5.943-4.014-9.745-4.015c-4.056,0-7.705,1.745-10.238,4.525C5.444,6.5,5.183,5.938,5.159,5.317c0,0-0.002,0.002-0.006,0.005c0-0.011-0.003-0.021-0.003-0.031c0,0-1.61,1.247-1.436,4.612c-0.299,0.574-0.56,1.172-0.777,1.791c-0.375,0.817-0.75,2.004-1.059,3.746c0,0,0.133-0.422,0.399-0.988c-0.064,0.482-0.103,0.971-0.116,1.467c-0.09,0.845-0.118,1.865-0.039,3.088c0,0,0.032-0.406,0.136-1.021c0.834,6.854,6.667,12.165,13.743,12.165l0,0c1.86,0,3.636-0.37,5.256-1.036C24.938,27.771,27.116,25.196,28.4,22.469zM16.002,3.356c2.446,0,4.73,0.68,6.68,1.86c-2.274-0.528-3.433-0.261-3.423-0.248c0.013,0.015,3.384,0.589,3.981,1.411c0,0-1.431,0-2.856,0.41c-0.065,0.019,5.242,0.663,6.327,5.966c0,0-0.582-1.213-1.301-1.42c0.473,1.439,0.351,4.17-0.1,5.528c-0.058,0.174-0.118-0.755-1.004-1.155c0.284,2.037-0.018,5.268-1.432,6.158c-0.109,0.07,0.887-3.189,0.201-1.93c-4.093,6.276-8.959,2.539-10.934,1.208c1.585,0.388,3.267,0.108,4.242-0.559c0.982-0.672,1.564-1.162,2.087-1.047c0.522,0.117,0.87-0.407,0.464-0.872c-0.405-0.466-1.392-1.105-2.725-0.757c-0.94,0.247-2.107,1.287-3.886,0.233c-1.518-0.899-1.507-1.63-1.507-2.095c0-0.366,0.257-0.88,0.734-1.028c0.58,0.062,1.044,0.214,1.537,0.466c0.005-0.135,0.006-0.315-0.001-0.519c0.039-0.077,0.015-0.311-0.047-0.596c-0.036-0.287-0.097-0.582-0.19-0.851c0.01-0.002,0.017-0.007,0.021-0.021c0.076-0.344,2.147-1.544,2.299-1.659c0.153-0.114,0.55-0.378,0.506-1.183c-0.015-0.265-0.058-0.294-2.232-0.286c-0.917,0.003-1.425-0.894-1.589-1.245c0.222-1.231,0.863-2.11,1.919-2.704c0.02-0.011,0.015-0.021-0.008-0.027c0.219-0.127-2.524-0.006-3.76,1.604C9.674,8.045,9.219,7.95,8.71,7.95c-0.638,0-1.139,0.07-1.603,0.187c-0.05,0.013-0.122,0.011-0.208-0.001C6.769,8.04,6.575,7.88,6.365,7.672c0.161-0.18,0.324-0.356,0.495-0.526C9.201,4.804,12.43,3.357,16.002,3.356z", |
||||
"raph_ie": "M27.998,2.266c-2.12-1.91-6.925,0.382-9.575,1.93c-0.76-0.12-1.557-0.185-2.388-0.185c-3.349,0-6.052,0.985-8.106,2.843c-2.336,2.139-3.631,4.94-3.631,8.177c0,0.028,0.001,0.056,0.001,0.084c3.287-5.15,8.342-7.79,9.682-8.487c0.212-0.099,0.338,0.155,0.141,0.253c-0.015,0.042-0.015,0,0,0c-2.254,1.35-6.434,5.259-9.146,10.886l-0.003-0.007c-1.717,3.547-3.167,8.529-0.267,10.358c2.197,1.382,6.13-0.248,9.295-2.318c0.764,0.108,1.567,0.165,2.415,0.165c5.84,0,9.937-3.223,11.399-7.924l-8.022-0.014c-0.337,1.661-1.464,2.548-3.223,2.548c-2.21,0-3.729-1.211-3.828-4.012l15.228-0.014c0.028-0.578-0.042-0.985-0.042-1.436c0-5.251-3.143-9.355-8.255-10.663c2.081-1.294,5.974-3.209,7.848-1.681c1.407,1.14,0.633,3.533,0.295,4.518c-0.056,0.254,0.24,0.296,0.296,0.057C28.814,5.573,29.026,3.194,27.998,2.266zM13.272,25.676c-2.469,1.475-5.873,2.539-7.539,1.289c-1.243-0.935-0.696-3.468,0.398-5.938c0.664,0.992,1.495,1.886,2.473,2.63C9.926,24.651,11.479,25.324,13.272,25.676zM12.714,13.046c0.042-2.435,1.787-3.49,3.617-3.49c1.928,0,3.49,1.112,3.49,3.49H12.714z", |
||||
"raph_opera": "M15.954,2.046c-7.489,0-12.872,5.432-12.872,13.581c0,7.25,5.234,13.835,12.873,13.835c7.712,0,12.974-6.583,12.974-13.835C28.929,7.413,23.375,2.046,15.954,2.046zM15.952,26.548L15.952,26.548c-2.289,0-3.49-1.611-4.121-3.796c-0.284-1.037-0.458-2.185-0.563-3.341c-0.114-1.374-0.129-2.773-0.129-4.028c0-0.993,0.018-1.979,0.074-2.926c0.124-1.728,0.386-3.431,0.89-4.833c0.694-1.718,1.871-2.822,3.849-2.822c2.5,0,3.763,1.782,4.385,4.322c0.429,1.894,0.56,4.124,0.56,6.274c0,2.299-0.103,5.153-0.763,7.442C19.473,24.979,18.242,26.548,15.952,26.548z", |
||||
"raph_chrome": "M16.277,8.655c-2.879,0-5.227,2.181-5.227,4.854s2.348,4.854,5.227,4.854c2.879,0,5.227-2.181,5.227-4.854S19.156,8.655,16.277,8.655zM29.535,13.486c-0.369-1.819-1.068-3.052-1.727-3.995c0.05,0.129,0.09,0.259,0.138,0.388c-2.34-6.355-11.704-9.8-18.937-5.43c-0.056,0.27-0.073,0.538-0.073,0.804c0-0.051-0.006-0.098-0.004-0.15c-1.743-0.134-3.854,2.061-5.731,6.083c-0.953,2.277-1.298,4.77-0.414,7.693c0.516,1.706,1.328,3.456,2.499,4.814c3.471,4.027,8.788,5.67,11.884,4.835c0.004,0.001,0.009,0.003,0.014,0.004c5.969-0.125,10.494-4.228,12.125-9.569C29.896,17.035,29.934,15.457,29.535,13.486zM6.043,23.04c-0.96-1.112-1.755-2.651-2.299-4.452c-0.733-2.42-0.612-4.65,0.379-7.015C5.129,9.42,6.111,8.005,6.956,7.154c0.15,0.742,0.521,1.628,1.113,2.649c0.218,0.379,0.459,0.701,0.692,1.012c0.179,0.237,0.356,0.474,0.513,0.729c0.124,0.202,0.239,0.445,0.354,0.737c-0.239,2.754,0.892,5.138,3.148,6.679l-2.546,2.25l-0.202,0.171c-0.208,0.171-0.447,0.373-0.651,0.589c-1.36,1.444-0.25,2.831,0.286,3.498l0.068,0.087c0.237,0.297,0.513,0.62,0.815,0.938C8.963,25.725,7.375,24.585,6.043,23.04zM28.354,18.67c-1.6,5.232-5.937,8.7-11.07,8.859c-2.485-0.583-4.362-1.78-5.586-3.557c0.004-0.004,0.01-0.008,0.015-0.013l4.944-3.836c2.226-0.124,3.854-0.888,4.847-2.278c1.222-1.412,1.792-3.025,1.693-4.861c1.817,0.377,3.389,0.903,4.855,1.883l0.116,0.078l0.134,0.043c0.156,0.049,0.311,0.076,0.459,0.081C28.87,16.309,28.74,17.402,28.354,18.67zM28.609,14.037c-1.951-1.306-4.062-1.867-6.594-2.285c0.531,2.358-0.084,4.072-1.326,5.512c-0.882,1.235-2.382,1.822-4.394,1.875l-5.22,4.052c-0.497,0.409-0.591,0.819-0.282,1.229c0.849,1.277,1.929,2.202,3.122,2.878c-0.013,0-0.026,0.002-0.039,0.003c-0.001-0.001-0.004-0.002-0.006-0.004c-0.02,0.003-0.041,0.004-0.062,0.005c-0.08,0.001-0.16-0.001-0.239-0.01c-0.156-0.021-0.314-0.064-0.459-0.118c-0.898-0.333-1.89-1.352-2.597-2.239c-0.581-0.73-1.206-1.433-0.411-2.275c0.258-0.273,0.582-0.514,0.789-0.698l2.521-2.229c0.172-0.137,0.35-0.277,0.535-0.423c0.053-0.042,0.107-0.084,0.162-0.127c0.564-0.442,0.483-0.32-0.108-0.642c-2.419-1.32-3.677-3.614-3.354-6.389c-0.149-0.41-0.317-0.792-0.518-1.124c-0.363-0.6-0.834-1.102-1.194-1.723c-0.9-1.556-1.847-3.902,0.013-3.682c-0.005-0.053-0.002-0.11-0.005-0.164c0.094,2.001,1.526,3.823,1.742,4.888c0.078,0.382,0.294,0.705,0.612,0.28c2.538-3.395,6.069-3.053,8.328-1.312c0.443,0.34,0.684,0.755,1.084,1.11c0.154,0.138,0.328,0.259,0.535,0.351c0.743,0.332,1.807,0.312,2.607,0.434c1.371,0.208,2.707,0.464,3.971,0.812c0.25,0.03,0.424-0.004,0.521-0.101c0.211-0.208-0.002-0.887-0.121-1.263c0.277,0.805,0.536,1.609,0.773,2.415C29.176,13.701,29.133,14.208,28.609,14.037z", |
||||
"raph_safari": "M16.154,5.135c-0.504,0-1,0.031-1.488,0.089l-0.036-0.18c-0.021-0.104-0.06-0.198-0.112-0.283c0.381-0.308,0.625-0.778,0.625-1.306c0-0.927-0.751-1.678-1.678-1.678s-1.678,0.751-1.678,1.678c0,0.745,0.485,1.376,1.157,1.595c-0.021,0.105-0.021,0.216,0,0.328l0.033,0.167C7.645,6.95,3.712,11.804,3.712,17.578c0,6.871,5.571,12.441,12.442,12.441c6.871,0,12.441-5.57,12.441-12.441C28.596,10.706,23.025,5.135,16.154,5.135zM16.369,8.1c4.455,0,8.183,3.116,9.123,7.287l-0.576,0.234c-0.148-0.681-0.755-1.191-1.48-1.191c-0.837,0-1.516,0.679-1.516,1.516c0,0.075,0.008,0.148,0.018,0.221l-2.771-0.028c-0.054-0.115-0.114-0.226-0.182-0.333l3.399-5.11l0.055-0.083l-4.766,4.059c-0.352-0.157-0.74-0.248-1.148-0.256l0.086-0.018l-1.177-2.585c0.64-0.177,1.111-0.763,1.111-1.459c0-0.837-0.678-1.515-1.516-1.515c-0.075,0-0.147,0.007-0.219,0.018l0.058-0.634C15.357,8.141,15.858,8.1,16.369,8.1zM12.146,3.455c0-0.727,0.591-1.318,1.318-1.318c0.727,0,1.318,0.591,1.318,1.318c0,0.425-0.203,0.802-0.516,1.043c-0.183-0.123-0.413-0.176-0.647-0.13c-0.226,0.045-0.413,0.174-0.535,0.349C12.542,4.553,12.146,4.049,12.146,3.455zM7.017,17.452c0-4.443,3.098-8.163,7.252-9.116l0.297,0.573c-0.61,0.196-1.051,0.768-1.051,1.442c0,0.837,0.678,1.516,1.515,1.516c0.068,0,0.135-0.006,0.2-0.015l-0.058,2.845l0.052-0.011c-0.442,0.204-0.824,0.513-1.116,0.895l0.093-0.147l-1.574-0.603l1.172,1.239l0.026-0.042c-0.19,0.371-0.306,0.788-0.324,1.229l-0.003-0.016l-2.623,1.209c-0.199-0.604-0.767-1.041-1.438-1.041c-0.837,0-1.516,0.678-1.516,1.516c0,0.064,0.005,0.128,0.013,0.191l-0.783-0.076C7.063,18.524,7.017,17.994,7.017,17.452zM16.369,26.805c-4.429,0-8.138-3.078-9.106-7.211l0.691-0.353c0.146,0.686,0.753,1.2,1.482,1.2c0.837,0,1.515-0.679,1.515-1.516c0-0.105-0.011-0.207-0.031-0.307l2.858,0.03c0.045,0.095,0.096,0.187,0.15,0.276l-3.45,5.277l0.227-0.195l4.529-3.92c0.336,0.153,0.705,0.248,1.094,0.266l-0.019,0.004l1.226,2.627c-0.655,0.166-1.142,0.76-1.142,1.468c0,0.837,0.678,1.515,1.516,1.515c0.076,0,0.151-0.007,0.225-0.018l0.004,0.688C17.566,26.746,16.975,26.805,16.369,26.805zM18.662,26.521l-0.389-0.6c0.661-0.164,1.152-0.759,1.152-1.47c0-0.837-0.68-1.516-1.516-1.516c-0.066,0-0.13,0.005-0.193,0.014v-2.86l-0.025,0.004c0.409-0.185,0.77-0.459,1.055-0.798l1.516,0.659l-1.104-1.304c0.158-0.335,0.256-0.704,0.278-1.095l2.552-1.164c0.19,0.618,0.766,1.068,1.447,1.068c0.838,0,1.516-0.679,1.516-1.516c0-0.069-0.006-0.137-0.016-0.204l0.65,0.12c0.089,0.517,0.136,1.049,0.136,1.591C25.722,21.826,22.719,25.499,18.662,26.521z", |
||||
"raph_view": "M16,8.286C8.454,8.286,2.5,16,2.5,16s5.954,7.715,13.5,7.715c5.771,0,13.5-7.715,13.5-7.715S21.771,8.286,16,8.286zM16,20.807c-2.649,0-4.807-2.157-4.807-4.807s2.158-4.807,4.807-4.807s4.807,2.158,4.807,4.807S18.649,20.807,16,20.807zM16,13.194c-1.549,0-2.806,1.256-2.806,2.806c0,1.55,1.256,2.806,2.806,2.806c1.55,0,2.806-1.256,2.806-2.806C18.806,14.451,17.55,13.194,16,13.194z", |
||||
"raph_noview": "M11.478,17.568c-0.172-0.494-0.285-1.017-0.285-1.568c0-2.65,2.158-4.807,4.807-4.807c0.552,0,1.074,0.113,1.568,0.285l2.283-2.283C18.541,8.647,17.227,8.286,16,8.286C8.454,8.286,2.5,16,2.5,16s2.167,2.791,5.53,5.017L11.478,17.568zM23.518,11.185l-3.056,3.056c0.217,0.546,0.345,1.138,0.345,1.76c0,2.648-2.158,4.807-4.807,4.807c-0.622,0-1.213-0.128-1.76-0.345l-2.469,2.47c1.327,0.479,2.745,0.783,4.229,0.783c5.771,0,13.5-7.715,13.5-7.715S26.859,13.374,23.518,11.185zM25.542,4.917L4.855,25.604L6.27,27.02L26.956,6.332L25.542,4.917z", |
||||
"raph_cloud": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h15.875c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z", |
||||
"raph_cloud2": "M7.562,24.812c-3.313,0-6-2.687-6-6l0,0c0.002-2.659,1.734-4.899,4.127-5.684l0,0c0.083-2.26,1.937-4.064,4.216-4.066l0,0c0.73,0,1.415,0.19,2.01,0.517l0,0c1.266-2.105,3.57-3.516,6.208-3.517l0,0c3.947,0.002,7.157,3.155,7.248,7.079l0,0c2.362,0.804,4.062,3.034,4.064,5.671l0,0c0,3.313-2.687,6-6,6l0,0H7.562L7.562,24.812zM24.163,14.887c-0.511-0.095-0.864-0.562-0.815-1.079l0,0c0.017-0.171,0.027-0.336,0.027-0.497l0,0c-0.007-2.899-2.352-5.245-5.251-5.249l0,0c-2.249-0.002-4.162,1.418-4.911,3.41l0,0c-0.122,0.323-0.406,0.564-0.748,0.63l0,0c-0.34,0.066-0.694-0.052-0.927-0.309l0,0c-0.416-0.453-0.986-0.731-1.633-0.731l0,0c-1.225,0.002-2.216,0.993-2.22,2.218l0,0c0,0.136,0.017,0.276,0.045,0.424l0,0c0.049,0.266-0.008,0.54-0.163,0.762l0,0c-0.155,0.223-0.392,0.371-0.657,0.414l0,0c-1.9,0.313-3.352,1.949-3.35,3.931l0,0c0.004,2.209,1.792,3.995,4.001,4.001l0,0h15.874c2.209-0.006,3.994-1.792,3.999-4.001l0,0C27.438,16.854,26.024,15.231,24.163,14.887L24.163,14.887", |
||||
"raph_cloudDown": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h3.404l-0.707-0.707c-0.377-0.377-0.585-0.879-0.585-1.413c0-0.533,0.208-1.035,0.585-1.412l0.556-0.557c0.4-0.399,0.937-0.628,1.471-0.628c0.027,0,0.054,0,0.08,0.002v-0.472c0-1.104,0.898-2.002,2-2.002h3.266c1.103,0,2,0.898,2,2.002v0.472c0.027-0.002,0.054-0.002,0.081-0.002c0.533,0,1.07,0.229,1.47,0.63l0.557,0.552c0.78,0.781,0.78,2.05,0,2.828l-0.706,0.707h2.403c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M21.033,20.986l-0.556-0.555c-0.39-0.389-0.964-0.45-1.276-0.137c-0.312,0.312-0.568,0.118-0.568-0.432v-1.238c0-0.55-0.451-1-1-1h-3.265c-0.55,0-1,0.45-1,1v1.238c0,0.55-0.256,0.744-0.569,0.432c-0.312-0.313-0.887-0.252-1.276,0.137l-0.556,0.555c-0.39,0.389-0.39,1.024-0.001,1.413l4.328,4.331c0.194,0.194,0.451,0.291,0.707,0.291s0.512-0.097,0.707-0.291l4.327-4.331C21.424,22.011,21.423,21.375,21.033,20.986z", |
||||
"raph_cloudUp": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h2.312c-0.126-0.266-0.2-0.556-0.2-0.859c0-0.535,0.208-1.04,0.587-1.415l4.325-4.329c0.375-0.377,0.877-0.585,1.413-0.585c0.54,0,1.042,0.21,1.417,0.587l4.323,4.329c0.377,0.373,0.585,0.878,0.585,1.413c0,0.304-0.073,0.594-0.2,0.859h1.312c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M16.706,17.916c-0.193-0.195-0.45-0.291-0.706-0.291s-0.512,0.096-0.707,0.291l-4.327,4.33c-0.39,0.389-0.389,1.025,0.001,1.414l0.556,0.555c0.39,0.389,0.964,0.449,1.276,0.137s0.568-0.119,0.568,0.432v1.238c0,0.549,0.451,1,1,1h3.265c0.551,0,1-0.451,1-1v-1.238c0-0.551,0.256-0.744,0.569-0.432c0.312,0.312,0.887,0.252,1.276-0.137l0.556-0.555c0.39-0.389,0.39-1.025,0.001-1.414L16.706,17.916z", |
||||
"raph_location": "M16,3.5c-4.142,0-7.5,3.358-7.5,7.5c0,4.143,7.5,18.121,7.5,18.121S23.5,15.143,23.5,11C23.5,6.858,20.143,3.5,16,3.5z M16,14.584c-1.979,0-3.584-1.604-3.584-3.584S14.021,7.416,16,7.416S19.584,9.021,19.584,11S17.979,14.584,16,14.584z", |
||||
"raph_volume0": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z", |
||||
"raph_volume1": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z", |
||||
"raph_volume2": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z", |
||||
"raph_volume3": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z M23.28,6.746c-0.393-0.391-1.025-0.389-1.414,0.002c-0.391,0.389-0.391,1.023,0.002,1.413h-0.002c2.009,2.009,3.248,4.773,3.248,7.839c0,3.063-1.239,5.828-3.246,7.838c-0.391,0.39-0.391,1.023,0.002,1.415c0.194,0.194,0.45,0.291,0.706,0.291s0.513-0.098,0.708-0.293c2.363-2.366,3.831-5.643,3.829-9.251C27.115,12.389,25.647,9.111,23.28,6.746z", |
||||
"raph_key": "M18.386,16.009l0.009-0.006l-0.58-0.912c1.654-2.226,1.876-5.319,0.3-7.8c-2.043-3.213-6.303-4.161-9.516-2.118c-3.212,2.042-4.163,6.302-2.12,9.517c1.528,2.402,4.3,3.537,6.944,3.102l0.424,0.669l0.206,0.045l0.779-0.447l-0.305,1.377l2.483,0.552l-0.296,1.325l1.903,0.424l-0.68,3.06l1.406,0.313l-0.424,1.906l4.135,0.918l0.758-3.392L18.386,16.009z M10.996,8.944c-0.685,0.436-1.593,0.233-2.029-0.452C8.532,7.807,8.733,6.898,9.418,6.463s1.594-0.233,2.028,0.452C11.883,7.6,11.68,8.509,10.996,8.944z", |
||||
"raph_ruler": "M6.63,21.796l-5.122,5.121h25.743V1.175L6.63,21.796zM18.702,10.48c0.186-0.183,0.48-0.183,0.664,0l1.16,1.159c0.184,0.183,0.186,0.48,0.002,0.663c-0.092,0.091-0.213,0.137-0.332,0.137c-0.121,0-0.24-0.046-0.33-0.137l-1.164-1.159C18.519,10.96,18.519,10.664,18.702,10.48zM17.101,12.084c0.184-0.183,0.48-0.183,0.662,0l2.156,2.154c0.184,0.183,0.184,0.48,0.002,0.661c-0.092,0.092-0.213,0.139-0.334,0.139s-0.24-0.046-0.33-0.137l-2.156-2.154C16.917,12.564,16.917,12.267,17.101,12.084zM15.497,13.685c0.184-0.183,0.48-0.183,0.664,0l1.16,1.161c0.184,0.183,0.182,0.48-0.002,0.663c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.24-0.046-0.332-0.138l-1.16-1.16C15.314,14.166,15.314,13.868,15.497,13.685zM13.896,15.288c0.184-0.183,0.48-0.181,0.664,0.002l1.158,1.159c0.183,0.184,0.183,0.48,0,0.663c-0.092,0.092-0.212,0.138-0.332,0.138c-0.119,0-0.24-0.046-0.332-0.138l-1.158-1.161C13.713,15.767,13.713,15.471,13.896,15.288zM12.293,16.892c0.183-0.184,0.479-0.184,0.663,0l2.154,2.153c0.184,0.184,0.184,0.481,0,0.665c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-2.153-2.155C12.11,17.371,12.11,17.075,12.293,16.892zM10.302,24.515c-0.091,0.093-0.212,0.139-0.332,0.139c-0.119,0-0.238-0.045-0.33-0.137l-2.154-2.153c-0.184-0.183-0.184-0.479,0-0.663s0.479-0.184,0.662,0l2.154,2.153C10.485,24.036,10.485,24.332,10.302,24.515zM10.912,21.918c-0.093,0.093-0.214,0.139-0.333,0.139c-0.12,0-0.24-0.045-0.33-0.137l-1.162-1.161c-0.184-0.183-0.184-0.479,0-0.66c0.184-0.185,0.48-0.187,0.664-0.003l1.161,1.162C11.095,21.438,11.095,21.735,10.912,21.918zM12.513,20.316c-0.092,0.092-0.211,0.138-0.332,0.138c-0.119,0-0.239-0.046-0.331-0.138l-1.159-1.16c-0.184-0.184-0.184-0.48,0-0.664s0.48-0.182,0.663,0.002l1.159,1.161C12.696,19.838,12.696,20.135,12.513,20.316zM22.25,21.917h-8.67l8.67-8.67V21.917zM22.13,10.7c-0.09,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-1.16-1.159c-0.184-0.183-0.184-0.479,0-0.663c0.182-0.183,0.479-0.183,0.662,0l1.16,1.159C22.312,10.221,22.313,10.517,22.13,10.7zM24.726,10.092c-0.092,0.092-0.213,0.137-0.332,0.137s-0.24-0.045-0.33-0.137l-2.154-2.154c-0.184-0.183-0.184-0.481,0-0.664s0.482-0.181,0.664,0.002l2.154,2.154C24.911,9.613,24.909,9.91,24.726,10.092z", |
||||
"raph_power": "M21.816,3.999c-0.993-0.481-2.189-0.068-2.673,0.927c-0.482,0.995-0.066,2.191,0.927,2.673c3.115,1.516,5.265,4.705,5.263,8.401c-0.01,5.154-4.18,9.324-9.333,9.333c-5.154-0.01-9.324-4.18-9.334-9.333c-0.002-3.698,2.149-6.89,5.267-8.403c0.995-0.482,1.408-1.678,0.927-2.673c-0.482-0.993-1.676-1.409-2.671-0.927C5.737,6.152,2.667,10.72,2.665,16C2.667,23.364,8.634,29.332,16,29.334c7.365-0.002,13.333-5.97,13.334-13.334C29.332,10.722,26.266,6.157,21.816,3.999z M16,13.833c1.104,0,1.999-0.894,1.999-2V2.499C17.999,1.394,17.104,0.5,16,0.5c-1.106,0-2,0.895-2,1.999v9.333C14,12.938,14.894,13.833,16,13.833z", |
||||
"raph_unlock": "M20.375,12.833h-2.209V10c0,0,0,0,0-0.001c0-2.389,1.945-4.333,4.334-4.333c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h2V9.999h-0.001c-0.001-3.498-2.836-6.333-6.334-6.333S16.166,6.502,16.166,10v2.833H3.125V25h17.25V12.833z", |
||||
"raph_flag": "M26.04,9.508c0.138-0.533,0.15-1.407,0.028-1.943l-0.404-1.771c-0.122-0.536-0.665-1.052-1.207-1.146l-3.723-0.643c-0.542-0.094-1.429-0.091-1.97,0.007l-4.033,0.726c-0.542,0.098-1.429,0.108-1.973,0.023L8.812,4.146C8.817,4.165,8.826,4.182,8.83,4.201l2.701,12.831l1.236,0.214c0.542,0.094,1.428,0.09,1.97-0.007l4.032-0.727c0.541-0.097,1.429-0.107,1.973-0.022l4.329,0.675c0.544,0.085,0.906-0.288,0.807-0.829l-0.485-2.625c-0.1-0.541-0.069-1.419,0.068-1.952L26.04,9.508zM6.667,3.636C6.126,3.75,5.78,4.279,5.894,4.819l5.763,27.378H13.7L7.852,4.409C7.736,3.867,7.207,3.521,6.667,3.636z", |
||||
"raph_tag": "M14.263,2.826H7.904L2.702,8.028v6.359L18.405,30.09l11.561-11.562L14.263,2.826zM6.495,8.859c-0.619-0.619-0.619-1.622,0-2.24C7.114,6,8.117,6,8.736,6.619c0.62,0.62,0.619,1.621,0,2.241C8.117,9.479,7.114,9.479,6.495,8.859z", |
||||
"raph_search": "M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z", |
||||
"raph_zoomout": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM8.854,11.884v4.001l9.665-0.001v-3.999L8.854,11.884z", |
||||
"raph_zoomin": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM15.687,9.051h-4v2.833H8.854v4.001h2.833v2.833h4v-2.834h2.832v-3.999h-2.833V9.051z", |
||||
"raph_cross": "M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248", |
||||
"raph_check": "M2.379,14.729 5.208,11.899 12.958,19.648 25.877,6.733 28.707,9.561 12.958,25.308", |
||||
"raph_settings": "M16.015,12.03c-2.156,0-3.903,1.747-3.903,3.903c0,2.155,1.747,3.903,3.903,3.903c0.494,0,0.962-0.102,1.397-0.27l0.836,1.285l1.359-0.885l-0.831-1.276c0.705-0.706,1.142-1.681,1.142-2.757C19.918,13.777,18.171,12.03,16.015,12.03zM16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM26.174,20.809c-0.241,0.504-0.513,0.99-0.826,1.45L22.19,21.58c-0.481,0.526-1.029,0.994-1.634,1.385l0.119,3.202c-0.507,0.23-1.028,0.421-1.569,0.57l-1.955-2.514c-0.372,0.051-0.75,0.086-1.136,0.086c-0.356,0-0.706-0.029-1.051-0.074l-1.945,2.5c-0.541-0.151-1.065-0.342-1.57-0.569l0.117-3.146c-0.634-0.398-1.208-0.88-1.712-1.427L6.78,22.251c-0.313-0.456-0.583-0.944-0.826-1.448l2.088-2.309c-0.226-0.703-0.354-1.451-0.385-2.223l-2.768-1.464c0.055-0.563,0.165-1.107,0.301-1.643l3.084-0.427c0.29-0.702,0.675-1.352,1.135-1.942L8.227,7.894c0.399-0.389,0.83-0.744,1.283-1.07l2.663,1.672c0.65-0.337,1.349-0.593,2.085-0.75l0.968-3.001c0.278-0.021,0.555-0.042,0.837-0.042c0.282,0,0.56,0.022,0.837,0.042l0.976,3.028c0.72,0.163,1.401,0.416,2.036,0.75l2.704-1.697c0.455,0.326,0.887,0.681,1.285,1.07l-1.216,2.986c0.428,0.564,0.793,1.181,1.068,1.845l3.185,0.441c0.135,0.535,0.247,1.081,0.302,1.643l-2.867,1.516c-0.034,0.726-0.15,1.43-0.355,2.1L26.174,20.809z", |
||||
"raph_settingsalt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM24.386,14.968c-1.451,1.669-3.706,2.221-5.685,1.586l-7.188,8.266c-0.766,0.88-2.099,0.97-2.979,0.205s-0.973-2.099-0.208-2.979l7.198-8.275c-0.893-1.865-0.657-4.164,0.787-5.824c1.367-1.575,3.453-2.151,5.348-1.674l-2.754,3.212l0.901,2.621l2.722,0.529l2.761-3.22C26.037,11.229,25.762,13.387,24.386,14.968z", |
||||
"raph_feed": "M4.135,16.762c3.078,0,5.972,1.205,8.146,3.391c2.179,2.187,3.377,5.101,3.377,8.202h4.745c0-9.008-7.299-16.335-16.269-16.335V16.762zM4.141,8.354c10.973,0,19.898,8.975,19.898,20.006h4.743c0-13.646-11.054-24.749-24.642-24.749V8.354zM10.701,25.045c0,1.815-1.471,3.287-3.285,3.287s-3.285-1.472-3.285-3.287c0-1.813,1.471-3.285,3.285-3.285S10.701,23.231,10.701,25.045z", |
||||
"raph_bug": "M28.589,10.903l-5.828,1.612c-0.534-1.419-1.338-2.649-2.311-3.628l3.082-5.44c0.271-0.48,0.104-1.092-0.38-1.365c-0.479-0.271-1.09-0.102-1.36,0.377l-2.924,5.162c-0.604-0.383-1.24-0.689-1.9-0.896c-0.416-1.437-1.652-2.411-3.058-2.562c-0.001-0.004-0.002-0.008-0.003-0.012c-0.061-0.242-0.093-0.46-0.098-0.65c-0.005-0.189,0.012-0.351,0.046-0.479c0.037-0.13,0.079-0.235,0.125-0.317c0.146-0.26,0.34-0.43,0.577-0.509c0.023,0.281,0.142,0.482,0.352,0.601c0.155,0.088,0.336,0.115,0.546,0.086c0.211-0.031,0.376-0.152,0.496-0.363c0.105-0.186,0.127-0.389,0.064-0.607c-0.064-0.219-0.203-0.388-0.414-0.507c-0.154-0.087-0.314-0.131-0.482-0.129c-0.167,0.001-0.327,0.034-0.481,0.097c-0.153,0.063-0.296,0.16-0.429,0.289c-0.132,0.129-0.241,0.271-0.33,0.426c-0.132,0.234-0.216,0.496-0.25,0.783c-0.033,0.286-0.037,0.565-0.009,0.84c0.017,0.16,0.061,0.301,0.094,0.449c-0.375-0.021-0.758,0.002-1.14,0.108c-0.482,0.133-0.913,0.36-1.28,0.653c-0.052-0.172-0.098-0.344-0.18-0.518c-0.116-0.249-0.263-0.486-0.438-0.716c-0.178-0.229-0.384-0.41-0.618-0.543C9.904,3.059,9.737,2.994,9.557,2.951c-0.18-0.043-0.352-0.052-0.516-0.027s-0.318,0.08-0.463,0.164C8.432,3.172,8.318,3.293,8.23,3.445C8.111,3.656,8.08,3.873,8.136,4.092c0.058,0.221,0.181,0.384,0.367,0.49c0.21,0.119,0.415,0.138,0.611,0.056C9.31,4.556,9.451,4.439,9.539,4.283c0.119-0.21,0.118-0.443-0.007-0.695c0.244-0.055,0.497-0.008,0.757,0.141c0.081,0.045,0.171,0.115,0.27,0.208c0.097,0.092,0.193,0.222,0.286,0.388c0.094,0.166,0.179,0.368,0.251,0.608c0.013,0.044,0.023,0.098,0.035,0.146c-0.911,0.828-1.357,2.088-1.098,3.357c-0.582,0.584-1.072,1.27-1.457,2.035l-5.16-2.926c-0.48-0.271-1.092-0.102-1.364,0.377C1.781,8.404,1.95,9.016,2.43,9.289l5.441,3.082c-0.331,1.34-0.387,2.807-0.117,4.297l-5.828,1.613c-0.534,0.147-0.846,0.699-0.698,1.231c0.147,0.53,0.697,0.843,1.231,0.694l5.879-1.627c0.503,1.057,1.363,2.28,2.371,3.443l-3.194,5.639c-0.272,0.481-0.104,1.092,0.378,1.363c0.239,0.137,0.512,0.162,0.758,0.094c0.248-0.068,0.469-0.229,0.604-0.471l2.895-5.109c2.7,2.594,5.684,4.123,5.778,1.053c1.598,2.56,3.451-0.338,4.502-3.976l5.203,2.947c0.24,0.138,0.514,0.162,0.762,0.094c0.246-0.067,0.467-0.229,0.603-0.471c0.272-0.479,0.104-1.091-0.377-1.362l-5.701-3.229c0.291-1.505,0.422-2.983,0.319-4.138l5.886-1.627c0.53-0.147,0.847-0.697,0.696-1.229C29.673,11.068,29.121,10.756,28.589,10.903z", |
||||
"raph_link": "M15.667,4.601c-1.684,1.685-2.34,3.985-2.025,6.173l3.122-3.122c0.004-0.005,0.014-0.008,0.016-0.012c0.21-0.403,0.464-0.789,0.802-1.126c1.774-1.776,4.651-1.775,6.428,0c1.775,1.773,1.777,4.652,0.002,6.429c-0.34,0.34-0.727,0.593-1.131,0.804c-0.004,0.002-0.006,0.006-0.01,0.01l-3.123,3.123c2.188,0.316,4.492-0.34,6.176-2.023c2.832-2.832,2.83-7.423,0-10.255C23.09,1.77,18.499,1.77,15.667,4.601zM14.557,22.067c-0.209,0.405-0.462,0.791-0.801,1.131c-1.775,1.774-4.656,1.774-6.431,0c-1.775-1.774-1.775-4.653,0-6.43c0.339-0.338,0.725-0.591,1.128-0.8c0.004-0.006,0.005-0.012,0.011-0.016l3.121-3.123c-2.187-0.316-4.489,0.342-6.172,2.024c-2.831,2.831-2.83,7.423,0,10.255c2.833,2.831,7.424,2.831,10.257,0c1.684-1.684,2.342-3.986,2.023-6.175l-3.125,3.123C14.565,22.063,14.561,22.065,14.557,22.067zM9.441,18.885l2.197,2.197c0.537,0.537,1.417,0.537,1.953,0l8.302-8.302c0.539-0.536,0.539-1.417,0.002-1.952l-2.199-2.197c-0.536-0.539-1.416-0.539-1.952-0.002l-8.302,8.303C8.904,17.469,8.904,18.349,9.441,18.885z", |
||||
"raph_calendar": "M11.758,15.318c0.312-0.3,0.408-0.492,0.408-0.492h0.024c0,0-0.012,0.264-0.012,0.528v5.469h-1.871v1.031h4.87v-1.031H13.33v-7.436h-1.055l-2.027,1.967l0.719,0.744L11.758,15.318zM16.163,21.207c0,0.205,0.024,0.42,0.06,0.647h5.457v-1.031h-4.197c0.023-1.931,4.065-2.362,4.065-5.146c0-1.463-1.114-2.436-2.674-2.436c-1.907,0-2.675,1.607-2.675,1.607l0.875,0.587c0,0,0.6-1.08,1.716-1.08c0.887,0,1.522,0.563,1.522,1.403C20.312,17.754,16.163,18.186,16.163,21.207zM12,3.604h-2v3.335h2V3.604zM23,4.77v3.17h-4V4.77h-6v3.168H9.002V4.77H6.583v21.669h18.833V4.77H23zM24.417,25.438H7.584V10.522h16.833V25.438zM22,3.604h-2v3.335h2V3.604z", |
||||
"raph_picker": "M22.221,10.853c-0.111-0.414-0.261-0.412,0.221-1.539l1.66-3.519c0.021-0.051,0.2-0.412,0.192-0.946c0.015-0.529-0.313-1.289-1.119-1.642c-1.172-0.555-1.17-0.557-2.344-1.107c-0.784-0.396-1.581-0.171-1.979,0.179c-0.42,0.333-0.584,0.7-0.609,0.75L16.58,6.545c-0.564,1.084-0.655,0.97-1.048,1.147c-0.469,0.129-1.244,0.558-1.785,1.815c-1.108,2.346-1.108,2.346-1.108,2.346l-0.276,0.586l1.17,0.553l-3.599,7.623c-0.38,0.828-0.166,1.436-0.166,2.032c0.01,0.627-0.077,1.509-0.876,3.21l-0.276,0.586l3.517,1.661l0.276-0.585c0.808-1.699,1.431-2.326,1.922-2.717c0.46-0.381,1.066-0.6,1.465-1.42l3.599-7.618l1.172,0.554l0.279-0.589c0,0,0,0,1.105-2.345C22.578,12.166,22.419,11.301,22.221,10.853zM14.623,22.83c-0.156,0.353-0.413,0.439-1.091,0.955c-0.577,0.448-1.264,1.172-2.009,2.6l-1.191-0.562c0.628-1.48,0.75-2.474,0.73-3.203c-0.031-0.851-0.128-1.104,0.045-1.449l3.599-7.621l3.517,1.662L14.623,22.83z", |
||||
"raph_no": "M16,2.939C9.006,2.942,3.338,8.61,3.335,15.605C3.335,22.6,9.005,28.268,16,28.27c6.994-0.002,12.662-5.67,12.664-12.664C28.663,8.61,22.995,2.939,16,2.939zM25.663,15.605c-0.003,1.943-0.583,3.748-1.569,5.264L10.736,7.513c1.515-0.988,3.32-1.569,5.265-1.573C21.337,5.951,25.654,10.269,25.663,15.605zM6.335,15.605c0.004-1.943,0.584-3.75,1.573-5.266l13.355,13.357c-1.516,0.986-3.32,1.566-5.264,1.569C10.664,25.26,6.346,20.941,6.335,15.605z", |
||||
"raph_commandline": "M2.021,9.748L2.021,9.748V9.746V9.748zM2.022,9.746l5.771,5.773l-5.772,5.771l2.122,2.123l7.894-7.895L4.143,7.623L2.022,9.746zM12.248,23.269h14.419V20.27H12.248V23.269zM16.583,17.019h10.084V14.02H16.583V17.019zM12.248,7.769v3.001h14.419V7.769H12.248z", |
||||
"raph_photo": "M24.25,10.25H20.5v-1.5h-9.375v1.5h-3.75c-1.104,0-2,0.896-2,2v10.375c0,1.104,0.896,2,2,2H24.25c1.104,0,2-0.896,2-2V12.25C26.25,11.146,25.354,10.25,24.25,10.25zM15.812,23.499c-3.342,0-6.06-2.719-6.06-6.061c0-3.342,2.718-6.062,6.06-6.062s6.062,2.72,6.062,6.062C21.874,20.78,19.153,23.499,15.812,23.499zM15.812,13.375c-2.244,0-4.062,1.819-4.062,4.062c0,2.244,1.819,4.062,4.062,4.062c2.244,0,4.062-1.818,4.062-4.062C19.875,15.194,18.057,13.375,15.812,13.375z", |
||||
"raph_printer": "M24.569,12.125h-2.12c-0.207-1.34-1.247-2.759-2.444-3.967c-1.277-1.24-2.654-2.234-3.784-2.37c-0.062-0.008-0.124-0.014-0.198-0.015H8.594c-0.119,0-0.235,0.047-0.319,0.132c-0.083,0.083-0.132,0.2-0.132,0.32v5.9H6.069c-1.104,0-2,0.896-2,2V23h4.074v2.079c0,0.118,0.046,0.23,0.132,0.318c0.086,0.085,0.199,0.131,0.319,0.131h13.445c0.118,0,0.232-0.046,0.318-0.131s0.138-0.199,0.138-0.318V23h4.074v-8.875C26.569,13.021,25.674,12.125,24.569,12.125zM21.589,24.626H9.043V21.5h12.546V24.626zM21.589,13.921c0-0.03,0-0.063-0.003-0.096c-0.015-0.068-0.062-0.135-0.124-0.2H9.043v-6.95h6.987v0.001c0.305-0.019,0.567,0.282,0.769,0.971c0.183,0.655,0.229,1.509,0.229,2.102c0.001,0.433-0.019,0.725-0.019,0.725l-0.037,0.478l0.48,0.005c0.002,0,1.109,0.014,2.196,0.26c1.044,0.226,1.86,0.675,1.938,1.184c0.003,0.045,0.003,0.091,0.003,0.133V13.921z", |
||||
"export": "M24.086,20.904c-1.805,3.113-5.163,5.212-9.023,5.219c-5.766-0.01-10.427-4.672-10.438-10.435C4.636,9.922,9.297,5.261,15.063,5.25c3.859,0.007,7.216,2.105,9.022,5.218l3.962,2.284l0.143,0.082C26.879,6.784,21.504,2.25,15.063,2.248C7.64,2.25,1.625,8.265,1.624,15.688c0.002,7.42,6.017,13.435,13.439,13.437c6.442-0.002,11.819-4.538,13.127-10.589l-0.141,0.081L24.086,20.904zM28.4,15.688l-7.15-4.129v2.297H10.275v3.661H21.25v2.297L28.4,15.688z", |
||||
"import": "M15.067,2.25c-5.979,0-11.035,3.91-12.778,9.309h3.213c1.602-3.705,5.271-6.301,9.565-6.309c5.764,0.01,10.428,4.674,10.437,10.437c-0.009,5.764-4.673,10.428-10.437,10.438c-4.294-0.007-7.964-2.605-9.566-6.311H2.289c1.744,5.399,6.799,9.31,12.779,9.312c7.419-0.002,13.437-6.016,13.438-13.438C28.504,8.265,22.486,2.252,15.067,2.25zM10.918,19.813l7.15-4.126l-7.15-4.129v2.297H-0.057v3.661h10.975V19.813z", |
||||
"raph_run": "M17.41,20.395l-0.778-2.723c0.228-0.2,0.442-0.414,0.644-0.643l2.721,0.778c0.287-0.418,0.534-0.862,0.755-1.323l-2.025-1.96c0.097-0.288,0.181-0.581,0.241-0.883l2.729-0.684c0.02-0.252,0.039-0.505,0.039-0.763s-0.02-0.51-0.039-0.762l-2.729-0.684c-0.061-0.302-0.145-0.595-0.241-0.883l2.026-1.96c-0.222-0.46-0.469-0.905-0.756-1.323l-2.721,0.777c-0.201-0.228-0.416-0.442-0.644-0.643l0.778-2.722c-0.418-0.286-0.863-0.534-1.324-0.755l-1.96,2.026c-0.287-0.097-0.581-0.18-0.883-0.241l-0.683-2.73c-0.253-0.019-0.505-0.039-0.763-0.039s-0.51,0.02-0.762,0.039l-0.684,2.73c-0.302,0.061-0.595,0.144-0.883,0.241l-1.96-2.026C7.048,3.463,6.604,3.71,6.186,3.997l0.778,2.722C6.736,6.919,6.521,7.134,6.321,7.361L3.599,6.583C3.312,7.001,3.065,7.446,2.844,7.907l2.026,1.96c-0.096,0.288-0.18,0.581-0.241,0.883l-2.73,0.684c-0.019,0.252-0.039,0.505-0.039,0.762s0.02,0.51,0.039,0.763l2.73,0.684c0.061,0.302,0.145,0.595,0.241,0.883l-2.026,1.96c0.221,0.46,0.468,0.905,0.755,1.323l2.722-0.778c0.2,0.229,0.415,0.442,0.643,0.643l-0.778,2.723c0.418,0.286,0.863,0.533,1.323,0.755l1.96-2.026c0.288,0.097,0.581,0.181,0.883,0.241l0.684,2.729c0.252,0.02,0.505,0.039,0.763,0.039s0.51-0.02,0.763-0.039l0.683-2.729c0.302-0.061,0.596-0.145,0.883-0.241l1.96,2.026C16.547,20.928,16.992,20.681,17.41,20.395zM11.798,15.594c-1.877,0-3.399-1.522-3.399-3.399s1.522-3.398,3.399-3.398s3.398,1.521,3.398,3.398S13.675,15.594,11.798,15.594zM27.29,22.699c0.019-0.547-0.06-1.104-0.23-1.654l1.244-1.773c-0.188-0.35-0.4-0.682-0.641-0.984l-2.122,0.445c-0.428-0.364-0.915-0.648-1.436-0.851l-0.611-2.079c-0.386-0.068-0.777-0.105-1.173-0.106l-0.974,1.936c-0.279,0.054-0.558,0.128-0.832,0.233c-0.257,0.098-0.497,0.22-0.727,0.353L17.782,17.4c-0.297,0.262-0.568,0.545-0.813,0.852l0.907,1.968c-0.259,0.495-0.437,1.028-0.519,1.585l-1.891,1.06c0.019,0.388,0.076,0.776,0.164,1.165l2.104,0.519c0.231,0.524,0.541,0.993,0.916,1.393l-0.352,2.138c0.32,0.23,0.66,0.428,1.013,0.6l1.715-1.32c0.536,0.141,1.097,0.195,1.662,0.15l1.452,1.607c0.2-0.057,0.399-0.118,0.596-0.193c0.175-0.066,0.34-0.144,0.505-0.223l0.037-2.165c0.455-0.339,0.843-0.747,1.152-1.206l2.161-0.134c0.152-0.359,0.279-0.732,0.368-1.115L27.29,22.699zM23.127,24.706c-1.201,0.458-2.545-0.144-3.004-1.345s0.143-2.546,1.344-3.005c1.201-0.458,2.547,0.144,3.006,1.345C24.931,22.902,24.328,24.247,23.127,24.706z", |
||||
"raph_magnet": "M20.812,19.5h5.002v-6.867c-0.028-1.706-0.61-3.807-2.172-5.841c-1.539-2.014-4.315-3.72-7.939-3.687C12.076,3.073,9.3,4.779,7.762,6.792C6.2,8.826,5.617,10.928,5.588,12.634V19.5h5v-6.866c-0.027-0.377,0.303-1.789,1.099-2.748c0.819-0.979,1.848-1.747,4.014-1.778c2.165,0.032,3.195,0.799,4.013,1.778c0.798,0.959,1.126,2.372,1.099,2.748V19.5L20.812,19.5zM25.814,25.579c0,0,0-2.354,0-5.079h-5.002c0,2.727,0,5.08,0,5.08l5.004-0.001H25.814zM5.588,25.58h5c0,0,0-2.354,0-5.08h-5C5.588,23.227,5.588,25.58,5.588,25.58z", |
||||
"raph_nomagnet": "M10.59,17.857v-5.225c-0.027-0.376,0.303-1.789,1.099-2.748c0.819-0.979,1.849-1.748,4.014-1.778c1.704,0.026,2.699,0.508,3.447,1.189l3.539-3.539c-1.616-1.526-4.01-2.679-6.986-2.652C12.077,3.073,9.3,4.779,7.762,6.793C6.2,8.826,5.617,10.928,5.59,12.634V19.5h3.357L10.59,17.857zM5.59,20.5v2.357L7.947,20.5H5.59zM20.812,13.29v6.21h5.002v-6.866c-0.021-1.064-0.252-2.283-0.803-3.542L20.812,13.29zM25.339,4.522L4.652,25.209l1.415,1.416L26.753,5.937L25.339,4.522zM20.812,25.58h5.002c0,0,0-2.354,0-5.08h-5.002C20.812,23.227,20.812,25.58,20.812,25.58zM10.59,25.58c0,0,0-0.827,0-2.064L8.525,25.58H10.59z", |
||||
"raph_flip": "M15.5,21.082h1.001v-2.001H15.5V21.082zM15.5,25.082h1.001v-2H15.5V25.082zM15.5,29.082h1.001v-2H15.5V29.082zM15.5,32.127h1.001v-1.045H15.5V32.127zM15.5,17.083h1.001v-2H15.5V17.083zM15.5,1.083h1.001v-2H15.5V1.083zM15.5,5.083h1.001v-2H15.5V5.083zM15.5,9.083h1.001v-2H15.5V9.083zM15.5,13.083h1.001v-2H15.5V13.083zM18.832,1.203v25.962h14.093L18.832,1.203zM19.832,5.136l11.41,21.03h-11.41V5.136zM13.113,27.165V1.203L-0.979,27.165H13.113z", |
||||
"raph_flipv": "M21.45,16.078v-1.001h-2.001v1.001H21.45zM25.45,16.078v-1.001h-2v1.001H25.45zM29.45,16.078v-1.001h-2v1.001H29.45zM32.495,16.078v-1.001H31.45v1.001H32.495zM17.451,16.078v-1.001h-2v1.001H17.451zM1.451,16.078v-1.001h-2v1.001H1.451zM5.451,16.078v-1.001h-2v1.001H5.451zM9.452,16.078v-1.001h-2v1.001H9.452zM13.452,16.078v-1.001h-2v1.001H13.452zM1.571,12.745h25.962V-1.348L1.571,12.745zM5.504,11.745l21.03-11.41v11.41H5.504zM27.533,18.464H1.571l25.962,14.093V18.464z", |
||||
"raph_connect": "M25.06,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h4.69v-3.999H25.06zM20.375,15.719c0-3.435-2.784-6.219-6.219-6.219c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h6.834c0.833,2.452,3.15,4.219,5.884,4.219C17.591,21.938,20.375,19.153,20.375,15.719z", |
||||
"raph_disconnect": "M9.219,9.5c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h1.897c0.833,2.452,3.15,4.219,5.884,4.219c3.435,0,6.219-2.784,6.219-6.219S12.653,9.5,9.219,9.5zM27.685,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h2.065v-3.999H27.685z", |
||||
"raph_folder": "M29.124,12.75c-0.004-2.208-1.792-3.997-3.999-4V8.749H12.868c-0.505-1.622-2.011-2.808-3.805-2.811H6.188c-2.208,0.002-3.997,1.792-4.001,4v14.188c0.004,2.206,1.793,3.995,4.001,3.999h18.938c2.205-0.004,3.995-1.793,3.999-3.999V12.75zM6.188,7.937h2.875c1.046-0.004,1.917,0.834,1.983,1.876l0.058,0.937h14.022c1.093,0.002,1.997,0.906,1.999,2v0.495c-0.591-0.345-1.268-0.557-2-0.558H6.187c-0.732,0.001-1.41,0.214-2,0.559V9.937C4.19,8.843,5.094,7.939,6.188,7.937zM25.125,26.125H6.188c-1.093-0.002-1.997-0.908-2.001-2v-7.438h0.001c0.002-1.095,0.906-1.999,2-2.001h18.938c1.093,0.002,1.991,0.901,2,1.991v7.447C27.122,25.219,26.218,26.123,25.125,26.125z", |
||||
"raph_man": "M21.021,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.103,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.463,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.602,21.541,22.443,18.912,21.021,16.349zM15.808,13.757c2.362,0,4.278-1.916,4.278-4.279s-1.916-4.279-4.278-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757z", |
||||
"raph_woman": "M21.022,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.104,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.579,5.192-0.351,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.167,1.213-0.167,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.464,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.603,21.541,22.444,18.912,21.022,16.349zM15.808,13.757c2.363,0,4.279-1.916,4.279-4.279s-1.916-4.279-4.279-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757zM18.731,4.974c1.235,0.455,0.492-0.725,0.492-1.531s0.762-1.792-0.492-1.391c-1.316,0.422-2.383,0.654-2.383,1.461S17.415,4.489,18.731,4.974zM15.816,4.4c0.782,0,0.345-0.396,0.345-0.884c0-0.488,0.438-0.883-0.345-0.883s-0.374,0.396-0.374,0.883C15.442,4.005,15.034,4.4,15.816,4.4zM12.884,4.974c1.316-0.484,2.383-0.654,2.383-1.461S14.2,2.474,12.884,2.052c-1.254-0.402-0.492,0.584-0.492,1.391S11.648,5.428,12.884,4.974z", |
||||
"raph_notebook": "M24.875,1.375H8c-1.033,0-1.874,0.787-1.979,1.792h1.604c1.102,0,2,0.898,2,2c0,1.102-0.898,2-2,2H6v0.999h1.625c1.104,0,2.002,0.898,2.002,2.002c0,1.104-0.898,2.001-2.002,2.001H6v0.997h1.625c1.102,0,2,0.898,2,2c0,1.104-0.898,2.004-2,2.004H6v0.994h1.625c1.102,0,2,0.898,2,2.002s-0.898,2.002-2,2.002H6v0.997h1.624c1.104,0,2.002,0.897,2.002,2.001c0,1.104-0.898,2.002-2.002,2.002H6.004C6.027,28.252,6.91,29.125,8,29.125h16.875c1.104,0,2-0.896,2-2V3.375C26.875,2.271,25.979,1.375,24.875,1.375zM25.25,8.375c0,0.552-0.447,1-1,1H14c-0.553,0-1-0.448-1-1V4c0-0.552,0.447-1,1-1h10.25c0.553,0,1,0.448,1,1V8.375zM8.625,25.166c0-0.554-0.449-1.001-1-1.001h-3.25c-0.552,0-1,0.447-1,1.001c0,0.552,0.449,1,1,1h3.25C8.176,26.166,8.625,25.718,8.625,25.166zM4.375,6.166h3.251c0.551,0,0.999-0.448,0.999-0.999c0-0.555-0.448-1-0.999-1H4.375c-0.553,0-1,0.445-1,1C3.374,5.718,3.822,6.166,4.375,6.166zM4.375,11.167h3.25c0.553,0,1-0.448,1-1s-0.448-1-1-1h-3.25c-0.553,0-1,0.448-1,1S3.822,11.167,4.375,11.167zM4.375,16.167h3.25c0.551,0,1-0.448,1-1.001s-0.448-0.999-1-0.999h-3.25c-0.553,0-1.001,0.446-1.001,0.999S3.822,16.167,4.375,16.167zM3.375,20.165c0,0.553,0.446,1.002,1,1.002h3.25c0.551,0,1-0.449,1-1.002c0-0.552-0.448-1-1-1h-3.25C3.821,19.165,3.375,19.613,3.375,20.165z", |
||||
"raph_diagram": "M6.812,17.202l7.396-3.665v-2.164h-0.834c-0.414,0-0.808-0.084-1.167-0.237v1.159l-7.396,3.667v2.912h2V17.202zM26.561,18.875v-2.913l-7.396-3.666v-1.158c-0.358,0.152-0.753,0.236-1.166,0.236h-0.832l-0.001,2.164l7.396,3.666v1.672H26.561zM16.688,18.875v-7.501h-2v7.501H16.688zM27.875,19.875H23.25c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C29.875,20.771,28.979,19.875,27.875,19.875zM8.125,19.875H3.5c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C10.125,20.771,9.229,19.875,8.125,19.875zM13.375,10.375H18c1.104,0,2-0.896,2-2V3.75c0-1.104-0.896-2-2-2h-4.625c-1.104,0-2,0.896-2,2v4.625C11.375,9.479,12.271,10.375,13.375,10.375zM18,19.875h-4.625c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2H18c1.104,0,2-0.896,2-2v-4.625C20,20.771,19.104,19.875,18,19.875z", |
||||
"raph_barchart": "M21.25,8.375V28h6.5V8.375H21.25zM12.25,28h6.5V4.125h-6.5V28zM3.25,28h6.5V12.625h-6.5V28z" |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
{"data": { |
||||
"airplane": "m150.70285,1c-3.11894,0 -5.89383,1.28033 -8.23512,3.60274c-2.33931,2.3205 -4.27426,5.64559 -5.8844,9.79826c-3.21983,8.30419 -5.20047,19.96969 -6.28387,33.94021c-1.08127,13.94364 -1.26349,30.17972 -0.81427,47.56012c-38.52657,15.80524 -116.66563,48.43882 -122.94262,55.72521c-8.35709,9.701 -5.65693,20.81889 -2.28924,28.1994l128.45827,-26.14551c2.71532,34.07207 6.57611,67.81866 9.94048,94.2617c-12.56244,3.67662 -36.01244,10.93625 -40.85281,15.43805c-6.66802,6.2016 -6.66797,26.22952 -6.66797,26.22952l52.57557,-4.27612c1.23827,8.63303 2.01266,13.67035 2.01266,13.67035l0.07683,0.45456l0.41484,0l0.96791,0l0.41483,0l0.07683,-0.45456c0,0 0.77292,-5.03741 2.01265,-13.67035l52.59094,4.27612c0,0 0.00006,-20.02792 -6.66798,-26.22952c-4.84218,-4.50354 -28.3093,-11.77963 -40.86818,-15.45499c3.35742,-26.36189 7.2114,-59.97935 9.92513,-93.94165l126.95265,25.84239c3.36765,-7.38051 6.08325,-18.4984 -2.27386,-28.1994c-6.19934,-7.19621 -82.45026,-39.10397 -121.45232,-55.11919c0.466,-17.60567 0.29471,-34.06301 -0.79893,-48.16614l0,-0.03367c-1.08395,-13.95511 -3.0667,-25.60925 -6.28384,-33.90654c-1.60968,-4.15152 -3.52888,-7.47695 -5.86903,-9.79826c-2.34131,-2.32241 -5.11617,-3.60274 -8.23509,-3.60274z", |
||||
"arrows_recycle": "m184.80963,97.86072l-33.85641,-5.99613l12.47342,-6.51318c6.86035,-3.58231 13.08063,-7.05022 13.8228,-7.70647c1.84358,-1.63009 -21.11545,-37.10833 -23.99486,-37.07896c-1.26575,0.01435 -10.08571,13.75221 -19.59988,30.53185c-9.58302,16.90081 -19.12026,29.77207 -21.38301,28.85762c-26.78106,-10.82179 -48.63238,-21.77106 -48.63238,-24.36867c0,-1.7743 8.40277,-17.60187 18.67293,-35.17241l18.67294,-31.94638l50.91241,0l50.91241,0l13.28955,21.01844l13.28966,21.01844l13.86403,-7.11266c9.61084,-4.93073 13.27039,-5.63875 11.92874,-2.30832c-11.81259,29.32658 -29.43884,63.52189 -32.57199,63.19018c-2.16919,-0.22948 -19.17931,-3.11553 -37.80035,-6.41334zm-157.90158,130.83841c-12.88431,-22.18782 -24.43164,-42.96199 -25.66062,-46.16496c-1.26128,-3.28671 2.41348,-15.03122 8.43637,-26.96236l10.67094,-21.13916l-10.90837,-6.44379c-14.51679,-8.57526 -9.12079,-11.21638 29.38814,-14.38432l30.43462,-2.50365l11.93788,31.54266c6.56593,17.34845 12.77805,33.78311 13.80486,36.52168c1.07085,2.85602 -4.05412,0.95576 -12.01902,-4.45653l-13.88588,-9.43578l-9.69341,18.71187c-5.33128,10.2917 -9.769,19.85884 -9.86144,21.26031c-0.09266,1.40147 16.26999,3.00525 36.36115,3.56384l36.52929,1.01558l2.3839,26.7207c1.3112,14.69647 2.11298,26.91713 1.78191,27.15706c-0.33105,0.23969 -17.62818,1.53915 -38.43802,2.88736l-37.83614,2.4512l-23.42616,-40.34174zm144.19484,39.20346c-22.11887,-33.38463 -22.50333,-30.90141 10.37228,-66.98763l21.10391,-23.16492l-2.24142,16.92821l-2.24152,16.92822l23.64932,0c13.0071,0 23.64944,-1.04019 23.64944,-2.31137c0,-1.27139 -7.21684,-15.55066 -16.03735,-31.73212c-8.82051,-16.18146 -16.00386,-30.77765 -15.96307,-32.436c0.09158,-3.71849 46.32753,-34.42394 48.52559,-32.22591c0.87094,0.87095 9.45139,16.38289 19.06769,34.47134l17.48441,32.8876l-23.52576,37.94727c-12.93936,20.87074 -25.37122,39.98283 -27.62622,42.47105c-2.25526,2.48822 -14.86537,5.52936 -28.02258,6.75787c-25.11388,2.34528 -24.43022,1.7804 -28.11249,23.22583c-0.64439,3.75308 -8.1586,-4.76279 -20.08223,-22.75946z", |
||||
"beverage": "m55.65598,297.84982c-28.13961,-15.0867 0.71402,-44.87836 24.17752,-35.2438c17.46051,-0.03983 34.92112,-0.01355 52.38168,-0.02121c0,-34.34088 0,-68.68181 0,-103.02271c-43.73869,-52.76227 -87.47738,-105.52454 -131.21606,-158.28681c98.99732,-0.36748 197.99556,-0.36708 296.99286,0c-42.95236,53.02298 -85.90472,106.04595 -128.85707,159.06893c0,34.08022 0,68.1604 0,102.24059c25.78079,0.22986 51.60571,-0.625 77.34869,0.87012c20.26866,5.44482 12.15504,38.73355 -7.54306,35.2244c-61.09291,-0.21259 -122.20532,0.38715 -183.28456,-0.8295zm127.03334,-186.51904c19.68919,-7.503 16.9212,-39.96898 -4.19951,-43.27924c-31.86026,-8.77637 -38.74004,46.49459 -5.25272,45.19753c3.23363,0.02124 6.51921,-0.43665 9.45222,-1.91829z", |
||||
"bicycle": "m69.04492,242.61508c10.78542,-0.13551 -10.27161,-0.62888 -14.0067,-0.90082c-31.20993,-0.75682 -57.11145,-31.7867 -53.74048,-62.58058c0.6826,-30.81444 30.36186,-57.88344 61.25282,-54.78261c8.04092,-3.41573 19.45538,7.85678 24.44781,2.47261c12.82323,-22.6207 25.24759,-45.47771 38.58752,-67.7975c11.3629,-1.62186 24.90015,-2.8755 35.9539,0.19863c5.11031,8.04987 -4.18097,10.24141 -9.97878,8.99869c-6.4711,0 -12.9422,0 -19.41331,0c-4.68463,8.54676 -9.49177,17.02541 -14.27853,25.51514c27.18877,0 54.37757,0 81.56634,0c0.60545,-2.89218 7.47321,-9.12369 1.38461,-8.44633c-11.06171,-1.39418 -4.14218,-14.17861 4.04941,-10.54169c11.49847,0.42252 23.4034,-1.13349 34.55679,1.17167c5.95799,11.9574 -11.26917,9.39215 -18.65384,9.51889c-5.46606,-1.78406 -6.59882,3.68022 -8.76302,7.4192c-8.77467,8.98817 -3.32066,18.46121 2.57677,27.22322c2.16318,3.98602 3.70422,9.51816 8.96812,5.7937c10.73436,-2.35877 22.43681,-2.44432 33.11809,0.31375c22.31958,6.63104 40.2153,27.32498 41.71356,50.76672c1.35196,14.39882 -1.7262,29.2406 -10.68872,40.85638c-10.3952,14.88928 -27.26529,23.04211 -45.01289,24.69595m-13.91446,0.14534c-16.17995,-4.15208 -31.09747,-13.81174 -39.74602,-28.39511c-5.65977,-7.28935 -6.39555,-18.57542 -9.40382,-25.8875c-7.93416,-0.10381 -15.86833,-0.20763 -23.80251,-0.31143c-16.06972,-25.85139 -30.2338,-52.8877 -45.73496,-79.09947c-3.0216,8.9735 -20.19933,21.18202 -10.71458,29.44228c23.80356,19.97299 26.97348,58.9857 6.61392,82.50262c-9.33031,10.45926 -22.27345,17.66695 -35.57853,21.74126m1.02195,-14.22214c25.6753,-5.59119 42.08234,-35.19554 33.20155,-59.88542c-2.74454,-8.04132 -10.29613,-20.88658 -16.96593,-21.01822c-7.10979,12.27542 -13.50588,24.99036 -21.29804,36.85445c-17.11086,3.00977 -1.43426,-17.82442 2.18629,-24.90399c3.88173,-8.63774 17.97784,-22.6107 0.22043,-22.40381c-12.4663,-1.24055 -25.71457,-0.04088 -35.79932,8.23351c-21.64245,14.32193 -25.73868,47.07928 -9.34899,66.82591c11.09536,14.38573 30.25585,20.50179 47.804,16.29758zm179.64028,-0.00356c21.91476,-5.14897 37.68491,-27.67265 34.8483,-50.02701c-1.50024,-24.84305 -26.27582,-44.93475 -50.90707,-41.59564c-18.45729,-1.74684 -0.78658,15.19781 1.85167,23.43547c2.5099,8.7469 16.33638,19.49011 8.6171,28.02017c-17.31352,0.72531 -35.05154,-0.50934 -52.31752,1.23642c3.1011,22.89496 24.76817,41.83401 48.14848,40.08203c3.28111,-0.02676 6.57803,-0.30434 9.75905,-1.15144zm-70.7294,-51.16617c2.08536,-17.91364 12.23944,-34.20847 27.04826,-44.4043c0.87492,-4.39421 -8.09195,-24.63332 -11.37527,-10.5231c-10.13445,18.42084 -20.32248,36.81699 -30.14639,55.40483c4.70622,0.11383 9.98186,0.93559 14.4734,-0.47743zm52.9005,-0.88846c-5.84201,-10.98254 -11.81374,-21.89917 -17.91992,-32.73703c-12.24919,6.45949 -20.3076,20.12949 -22.21249,33.77383c13.37456,-0.2851 26.97348,0.69884 40.16722,-0.71251l-0.03476,-0.3243l0,0zm-57.29515,-39.61388c5.7617,-10.63408 11.63275,-21.21213 17.21649,-31.94065c-24.2798,-0.5443 -48.61469,-0.66353 -72.88629,0.11504c12.46696,21.42642 23.73018,43.6828 37.36159,64.35614c6.59126,-10.13849 12.18927,-21.81091 18.30821,-32.53052z", |
||||
"bulb": "m145.62592,297.06863c-17.67376,-4.68848 -27.91267,-23.96384 -26.70493,-41.44981c-0.45245,-22.83995 1.65483,-46.8734 -9.26703,-67.87447c-6.22532,-15.68024 -16.83022,-29.52451 -21.2558,-45.86502c-5.50718,-25.3512 1.29536,-54.08422 21.79177,-71.10346c23.11512,-19.80671 60.02821,-22.38829 85.47337,-5.55379c17.94666,12.36192 30.89558,32.75098 30.41452,55.00024c2.10583,16.62513 -4.45561,32.2625 -12.17442,46.55451c-5.53021,11.50751 -11.98869,22.76817 -17.00821,34.40399c-1.32327,23.85774 -0.56435,47.93431 -4.15358,71.58684c-5.97899,18.328 -28.51152,30.78922 -47.11569,24.30096zm46.67903,-42.65804c-10.48888,-5.65382 -25.56134,-1.97798 -37.75313,-3.19516c-9.95908,1.99197 -27.6553,-4.08569 -32.94975,5.03105c12.10807,4.73648 26.33759,1.18594 39.22778,1.96957c10.31409,-0.9906 22.18068,0.93939 31.4751,-3.80547zm-0.78554,-10.63885c1.54361,-14.36404 -21.1709,-7.03433 -30.39838,-9.17262c-12.21318,2.47205 -31.64935,-5.2915 -39.33047,5.74487c4.5516,11.09071 24.85052,3.29074 35.50985,5.75148c11.3671,-0.4028 23.15991,0.40741 34.21899,-2.32373zm0.14142,-25.16705c2.9986,-27.98152 20.10725,-51.27968 30.01392,-76.87566c8.14517,-30.64574 -7.9861,-65.65708 -37.19159,-78.52086c-29.06958,-14.40719 -67.79967,-3.52343 -84.22785,24.70715c-15.82867,23.31919 -12.80788,55.00346 2.66266,77.68118c11.03862,19.81914 19.84574,42.09169 18.41109,65.15663c22.91359,0 45.82719,0 68.7408,0c0.53035,-4.04942 1.06052,-8.09911 1.59097,-12.14844zm-50.72687,-39.64223c-9.07846,-15.78525 -18.39817,-31.69214 -24.71996,-48.79948c5.68369,-7.35728 7.33711,-15.55251 9.10273,-24.19695c15.95243,-3.13345 -2.03056,18.17914 13.0308,18.65942c13.36925,5.81685 7.50436,-28.2252 18.61179,-15.95465c-7.9733,13.46684 15.66168,26.8638 16.5291,7.59886c-1.14578,-14.54594 14.28561,-11.82063 8.26923,1.37553c0.49657,6.78834 11.54893,8.73447 11.73816,14.19425c-7.9566,17.25854 -14.87259,35.07664 -24.29411,51.59875c-2.12068,-6.39691 8.34081,-22.42969 11.68367,-31.84341c6.45049,-8.13736 11.99347,-30.06687 -4.82256,-27.07765c-9.75478,15.21495 -22.87704,-9.5907 -32.42833,4.99055c-8.10805,2.41856 -20.86024,-14.04196 -23.2123,1.78514c6.10664,18.79854 18.8132,34.81967 25.46149,53.42416c-2.25594,-1.33008 -3.54053,-3.66359 -4.94971,-5.75453zm-12.74261,-68.89435c-4.41462,-2.15457 1.86072,11.45412 -0.00009,0l0.00009,0zm26.38611,1.60738c-5.73064,-9.69846 -2.6572,11.76727 0,0zm25.57564,0c-5.73064,-9.69846 -2.65724,11.76727 0,0zm-119.06653,-71.66327c-10.12879,-10.27977 -21.32492,-19.92564 -30.13364,-31.25677c22.0061,18.21614 42.14793,38.73141 61.97966,59.29806c5.2662,7.2365 -9.18723,-6.75771 -11.87724,-9.10345c-6.7307,-6.23349 -13.37324,-12.56173 -19.96879,-18.93784zm156.40887,29.39093c17.12013,-21.33164 33.0936,-43.69485 51.55162,-63.89019c-3.09076,8.6951 -13.04016,19.09942 -19.29597,28.05458c-10.44716,12.99739 -20.21251,26.73974 -32.1591,38.39317c-1.49106,1.57605 -3.71758,-2.15694 -0.09639,-2.55756l-0.00015,0zm-37.0826,-20.23703c5.91515,-16.91904 14.49518,-33.02397 24.06741,-48.16613c-0.22247,8.40011 -10.37453,24.32112 -15.25424,34.73693c-2.76042,4.19142 -5.08876,10.87586 -8.81317,13.4292zm-75.7492,-21.69804c-4.12045,-6.01025 -16.5241,-20.00493 -14.20815,-21.91343c11.95872,13.25933 24.12167,26.94502 32.71223,42.62532c-7.31573,-5.61084 -12.5797,-13.71475 -18.50409,-20.71189zm47.35616,-4.73013c-0.83392,-5.64444 1.75482,-32.58975 3.19298,-14.29333c0.00511,11.46356 1.20168,24.36872 -1.98915,34.80271c-1.36639,-6.70823 -1.03488,-13.69191 -1.20383,-20.50938z", |
||||
"careful": "m1,1c2.24496,29.70385 10.76853,56.9168 23.28125,80.81181l23.28125,-36.31875l-6.72569,-2.48334l-9.3125,-3.31111l4.86319,-8.48472l17.07292,-30.21389l-52.46042,0zm71.49931,0l-16.86597,29.8l7.24306,2.58681l9.82986,3.51805l-5.5875,8.69167l-33.525,52.46041c24.12122,36.61169 59.3948,61.88649 99.85071,67.36043l0,107.09373l-66.22223,0l0,26.48889l165.55556,0l0,-26.48889l-66.22223,0l0,-107.09373c70.57336,-9.43671 125.94405,-78.40826 132.44444,-164.41737l-226.50069,0z", |
||||
"cart_2": "m0.99397,46.01759l0,36.55115l57.8652,0l28.28396,104.41602l159.23965,0l52.21094,-125.30758l-237.55595,0l0,-15.65959zm53.21769,184.47131c0,12.97459 -10.51804,23.49266 -23.49261,23.49266c-12.97436,0 -23.49244,-10.51807 -23.49244,-23.49266c0,-12.97456 10.51808,-23.49228 23.49244,-23.49228c12.97457,0 23.49261,10.51772 23.49261,23.49228zm148.8,0c0,12.97459 -10.51817,23.49266 -23.4928,23.49266c-12.97446,0 -23.49258,-10.51807 -23.49258,-23.49266c0,-12.97456 10.51813,-23.49228 23.49258,-23.49228c12.97462,0 23.4928,10.51772 23.4928,23.49228z", |
||||
"coat_hanger": "m24.72351,255.83636c-16.41191,-2.33228 -27.73119,-20.33411 -22.38228,-36.1741c3.30628,-15.35616 20.22842,-19.55692 31.44893,-27.66121c35.64961,-21.14748 71.50229,-41.94997 107.26245,-62.9095c1.87845,-10.22399 -5.70195,-16.59309 -13.7997,-21.39916c-16.20296,-12.86633 -15.31998,-38.50921 -1.59858,-52.83282c16.08138,-18.88601 49.91904,-12.94907 59.95362,9.38958c9.73412,9.92804 -0.18503,34.24562 -13.8385,22.54042c-1.42418,-13.2976 -12.78993,-28.89017 -27.7881,-20.44456c-15.64833,8.98737 -6.40202,29.9363 8.0513,34.15588c9.75604,6.53233 8.45554,18.64742 8.97318,28.8608c42.85536,25.5808 86.25137,50.28574 128.51941,76.82744c16.8277,13.06401 9.90717,44.50819 -11.28448,48.76941c-16.06598,2.31227 -32.54915,0.68361 -48.77617,1.31593c-68.2437,0.05267 -136.50528,0.51715 -204.74109,-0.43811zm248.30083,-21.61086c12.28671,-12.24121 -10.69217,-18.82494 -18.26138,-24.82121c-34.85875,-20.46407 -69.60597,-41.14412 -104.87569,-60.89026c-41.32713,23.46544 -82.56062,47.16515 -123.11867,71.93832c-8.58788,3.43668 -2.61073,17.17589 5.37386,15.06004c78.53457,-0.16875 157.07672,0.41405 235.60527,-0.42499c1.73874,-0.22235 3.69772,0.07922 5.27661,-0.86191z", |
||||
"document": "m58.5474,213.36578c-0.05885,-70.73299 -0.11767,-141.466 -0.17652,-212.19898c53.12881,0.81297 106.48294,-1.9259 159.43185,2.08758c25.82027,9.16723 22.09921,66.23434 21.6799,108.85904c-1.13266,32.14426 15.08594,95.86641 -27.03937,105.4444c-21.00172,0.00113 -21.08437,8.97424 -18.9407,25.20605c2.4877,24.31731 -4.73431,78.79115 -39.2352,44.26363l-95.71997,-73.66171zm162.59977,-23.1226c0.08537,-63.57991 -0.62674,-117.82272 -4.15146,-159.71279c-31.317,-14.24883 -73.63496,-7.31453 -109.06839,-7.53106c-13.9288,6.77649 33.0414,29.27771 43.00333,38.00857c37.81908,18.77271 49.10266,52.9127 42.57201,91.49594c0,15.00871 0,30.01746 0,45.02617c6.97418,-0.00844 21.40269,-3.46487 27.64452,-7.28687z", |
||||
"gift": "m160.05605,46.22016c5.12212,-9.27578 14.49356,-21.35899 -1.60765,-24.27403c-4.48517,-2.30248 -8.9718,-6.3767 -13.45119,-1.83809c-9.96648,3.93713 -18.60622,9.44305 -8.12337,19.74747c4.64861,6.65461 8.87668,21.1743 14.1424,22.77341c3.14276,-5.39672 6.08684,-10.9068 9.03981,-16.40877zm-22.01753,25.61161c-9.14935,-16.32981 -16.51206,-33.84869 -27.71044,-48.91321c-13.62003,-14.54198 -40.45641,-8.05964 -46.55505,10.6975c-8.10131,18.54466 9.37865,40.68638 29.16686,38.36525c15.01618,0.2515 30.1178,0.92769 45.09863,-0.14954zm76.02873,0.55127c19.45964,-2.60851 30.65027,-27.10658 19.57069,-43.3727c-9.81836,-17.35883 -38.06532,-17.96398 -47.9265,-0.32358c-8.53876,14.26143 -15.94994,29.16402 -23.78549,43.81643c17.32285,0.99046 34.80862,0.75943 52.1413,-0.12016zm32.22711,20.88692c6.6339,-5.83724 32.32317,-12.71885 12.86739,-18.26252c-4.81963,-1.36767 -10.43866,-7.64191 -14.77026,-5.92492c-9.40594,11.6946 -23.86844,18.55521 -38.9686,17.83661c-2.95601,0.97167 -18.03316,-1.47781 -13.95946,1.30438c10.65262,6.07415 21.03697,12.6707 32.05554,18.0621c7.71764,-4.11029 15.20781,-8.63805 22.77539,-13.01566zm-151.5623,3.30481c5.67309,-3.30481 11.34617,-6.60963 17.01924,-9.91444c-17.34076,-0.86164 -37.18572,1.63783 -50.29088,-12.30952c-3.69488,-4.13725 -7.23799,-8.87396 -12.35892,-3.66532c-6.13381,4.22582 -25.00066,8.5563 -10.4742,13.71487c12.64928,7.47227 25.20959,15.12685 38.17151,22.0463c6.1765,-2.89648 11.99872,-6.5165 17.93326,-9.87188zm83.14041,36.87479c7.35168,-5.90694 25.15858,-11.53461 25.75348,-17.87329c-16.62141,-9.56481 -32.75868,-20.2142 -50.14796,-28.29874c-5.98431,-2.2704 -10.83618,1.22306 -15.65312,4.25735c-14.24385,8.47255 -28.83041,16.41927 -42.61077,25.63122c18.02219,11.14435 36.26101,21.95917 54.67725,32.43958c9.39328,-5.26857 18.66512,-10.75249 27.98112,-16.15611zm73.75499,18.43738c7.62694,-4.81227 15.25389,-9.62453 22.88087,-14.43683c-0.06244,-16.11785 0.19498,-32.24243 -0.24597,-48.35465c-15.39334,8.58929 -30.56776,17.60745 -45.48607,26.99785c-1.63162,16.62392 -0.80414,33.52276 -0.44952,50.23046c7.87193,-4.6378 15.55261,-9.59819 23.30069,-14.43683zm-178.87355,-10.1545c0.77462,-13.73913 2.44441,-29.40098 -14.12444,-33.4709c-10.46331,-4.88007 -24.96637,-17.38377 -33.02728,-17.25835c-0.25115,15.4809 -0.11823,30.96465 -0.14541,46.44691c15.45605,9.64543 30.63783,19.75522 46.42746,28.8476c1.53102,-7.98021 0.53017,-16.43968 0.86967,-24.56526zm110.68056,53.19621c9.14198,-5.77156 18.28395,-11.54312 27.42593,-17.31468c-0.04233,-16.63979 0.64572,-33.30351 -0.10625,-49.92543c-10.04709,2.88116 -21.5385,11.78691 -32.12366,17.31859c-7.92599,4.64276 -15.85202,9.28555 -23.77802,13.92833c0.1563,17.76723 -0.42728,35.56691 0.57802,53.30783c9.47523,-5.53633 18.69861,-11.49898 28.00397,-17.31464zm-38.32249,-9.33929c0,-8.88464 0,-17.76929 0,-26.6539c-18.35233,-10.72505 -36.64592,-21.55176 -55.0698,-32.1535c-1.01884,16.98993 -0.43661,34.04375 -0.59025,51.06303c18.34824,11.48767 36.50635,23.28906 55.08669,34.3983c0.72301,-8.85316 0.45901,-17.77696 0.57336,-26.65393zm106.97165,35.71599c7.47931,-4.98045 14.95862,-9.96091 22.43796,-14.94136c-0.31207,-15.79037 0.77045,-31.79442 -0.80399,-47.41055c-15.55414,8.87424 -30.56544,18.97736 -45.84236,28.4509c0.367,16.33781 -0.75356,32.86267 0.93411,49.06088c7.89078,-4.84329 15.54118,-10.07089 23.27428,-15.15987zm-179.49486,-8.85234c-0.06088,-8.2791 -0.12183,-16.55821 -0.18272,-24.8373c-15.452,-9.6673 -30.70933,-19.65799 -46.39347,-28.94519c-0.98154,15.8615 -0.42208,31.78482 -0.5697,47.67464c15.58812,10.31845 31.00088,20.91034 46.79801,30.90671c0.60526,-8.24165 0.30488,-16.53903 0.34788,-24.79886zm111.24078,54.40674c9.07924,-6.02985 18.15848,-12.05969 27.23772,-18.08952c-0.02109,-16.81348 0.32051,-33.6342 -0.13127,-50.44193c-18.48172,11.39566 -36.8398,23.00107 -55.0625,34.8063c-2.05943,16.23506 -0.72412,32.97392 -0.72713,49.38643c5.65578,3.44495 20.11658,-11.82266 28.68318,-15.66129zm-38.71758,-7.19754c-1.09789,-11.59346 4.72185,-27.9119 -10.01297,-32.40633c-14.85952,-9.4117 -29.65931,-18.92612 -44.71436,-28.02278c-2.19433,15.91664 0.10065,32.49809 -1.58499,48.60945c18.05386,13.0511 36.5795,25.52769 55.44263,37.37666c1.51289,-8.30347 0.57193,-17.09903 0.86969,-25.55701zm-63.13967,-3.06479c-21.97403,-14.66875 -43.94805,-29.33749 -65.92206,-44.00621c0.02491,-45.26978 -0.60055,-90.55044 0.20291,-135.81172c11.00354,-6.78941 22.71307,-12.35508 34.0373,-18.58421c-7.3143,-20.93821 3.23879,-46.38257 24.44761,-54.21996c17.77897,-7.29492 39.21008,-0.71179 50.54502,14.64528c8.23304,-4.22243 16.4661,-8.44486 24.69915,-12.66729c8.27725,4.26063 16.55455,8.52126 24.83179,12.78188c11.86055,-14.06895 32.18082,-22.09776 49.79013,-14.21312c21.13718,7.42951 32.65843,32.817 25.07826,53.72234c11.40756,6.44052 23.81024,11.47337 34.26968,19.33245c0.46368,45.00166 0.00415,90.00995 -0.0379,135.01437c-43.72298,28.93527 -86.73743,58.97507 -131.17026,86.81018c-12.92032,-0.00348 -24.07242,-14.03217 -36.06157,-19.72c-11.59096,-7.66315 -23.15266,-15.37048 -34.71011,-23.08398z", |
||||
"globe": "m33.11721,223.16701l233.44794,0.08913l-7.57544,11.19618l-218.20762,-0.26738l-7.66489,-11.01793zm1.60428,-148.93458l230.3285,-0.26738l6.68439,11.48557l-243.78651,0.08913l6.77362,-11.30732zm-22.73061,74.62911l275.61135,-0.26738l-0.35626,11.48558l-275.07684,-0.17825l-0.17825,-11.03995zm275.8395,1.06528c0,76.03723 -61.86858,137.89429 -137.92784,137.89429c-76.0264,0 -137.88345,-61.86824 -137.88345,-137.89429c0,-76.02642 61.86823,-137.88347 137.88345,-137.88347c76.05927,-0.01117 137.92784,61.85705 137.92784,137.88347zm-137.91701,-148.93459c-82.09525,0 -148.90104,66.8058 -148.90104,148.92339c0,82.12878 66.8058,148.93457 148.90104,148.93457c82.13995,0 148.93459,-66.80579 148.93459,-148.93457c0,-82.11759 -66.79463,-148.92339 -148.93459,-148.92339zm41.78581,148.93459c0,81.25211 -22.01353,137.89429 -41.78581,137.89429c-19.74991,0 -41.76309,-56.64218 -41.76309,-137.89429c0,-81.27448 22.00233,-137.88347 41.76309,-137.88347c19.76112,-0.01117 41.78581,56.60899 41.78581,137.88347zm-41.78581,-148.93459c-34.29579,0 -52.80304,76.73613 -52.80304,148.92339c0,72.2093 18.50725,148.93457 52.80304,148.93457c34.29614,0 52.83693,-76.73643 52.83693,-148.93457c-0.01118,-72.18726 -18.54079,-148.92339 -52.83693,-148.92339zm97.86217,148.93459c0,76.03723 -43.91597,137.89429 -97.86217,137.89429c-53.93499,0 -97.82862,-61.86824 -97.82862,-137.89429c0,-76.02642 43.89363,-137.88347 97.82862,-137.88347c53.9462,-0.01117 97.86217,61.85705 97.86217,137.88347zm-97.86217,-148.93459c-60.01537,0 -108.86856,66.8058 -108.86856,148.92339c0,82.12878 48.85319,148.93457 108.86856,148.93457c60.03773,0 108.88008,-66.80579 108.88008,-148.93457c0,-82.11759 -48.84235,-148.92339 -108.88008,-148.92339z", |
||||
"handle_care": "m163.84105,276.49316c0,-16.9874 0,-26.73244 0,-43.71985c0,-23.90417 32.58113,-58.75496 53.7084,-83.18626c5.78004,-5.69962 16.17278,-7.90976 21.66074,-2.49817c4.87456,4.80672 4.50662,16.61058 0.6333,22.48335c-7.09361,10.6588 -14.18712,21.31755 -21.28073,31.97632c-3.55533,6.07231 5.16899,10.98973 10.38702,4.49673c27.24385,-36.8876 34.70512,-44.36621 34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 6.34686,-16.98743 14.45584,-16.98743c7.71677,0 14.4277,7.99146 14.4277,15.52406c0,48.96381 0,67.40421 0,116.36799c0,15.08096 -47.62817,60.69775 -47.62817,81.9498c0,4.99628 0,9.99255 0,14.98889c-27.02963,0 -54.05942,0 -81.08914,0c0.00577,-7.32791 0.01431,-14.65582 0.02008,-21.9837zm-28.64365,0c0,-16.98746 0,-26.73244 0,-43.71985c0,-23.90422 -32.58104,-58.75496 -53.70833,-83.18626c-5.78003,-5.69962 -16.17277,-7.90976 -21.66072,-2.49817c-4.87465,4.80672 -4.50671,16.61058 -0.6334,22.48335c7.09362,10.6588 14.18714,21.31755 21.28075,31.97632c3.55531,6.07231 -5.16901,10.98973 -10.38705,4.49673c-27.24375,-36.8876 -34.70512,-44.36621 -34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 -6.34683,-16.98743 -14.45581,-16.98743c-7.71679,0 -14.42771,7.99146 -14.42771,15.52406c0,48.96381 0,67.40417 0,116.36799c0,15.08092 47.62818,60.69775 47.62818,81.9498c0,4.99628 0,9.99255 0,14.98889c27.02971,0 54.05941,0 81.08913,0c-0.00577,-7.32791 -0.01433,-14.65582 -0.02,-21.9837zm-42.88594,-214.71311l48.62654,36.4699l0,57.20769l-48.62654,-36.46989l0,-57.20769zm114.41537,0l-48.62654,36.4699l0,57.20769l48.62654,-36.46989l0,-57.20769zm-114.41537,-17.87738l57.20769,-42.90577l57.20769,42.90575l-57.20769,42.90577l-57.20769,-42.90574z", |
||||
"headphones": "m262.24301,276.32291c0,3.88873 -3.15054,7.03928 -7.03929,7.03928h-45.07771c-3.88873,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15054,-7.03928 7.03928,-7.03928h45.07771c3.88875,0 7.03929,3.15085 7.03929,7.03928v95.76917zm-166.89014,0c0,3.88873 -3.15116,7.03928 -7.03929,7.03928h-45.07832c-3.88813,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15115,-7.03928 7.03928,-7.03928h45.07832c3.88813,0 7.03929,3.15085 7.03929,7.03928v95.76917zm54.45998,-259.68797c-81.57039,0 -147.78664,65.61743 -148.80356,146.9389h25.82451c0.83739,-67.21309 55.56696,-121.44394 122.97905,-121.44394c67.41208,0 122.14168,54.23085 122.96928,121.44394h25.82391c-1.00656,-81.32147 -67.24229,-146.9389 -148.7932,-146.9389zm-148.59421,221.43015h25.35591v-74.64095h-25.35591v74.64095zm271.35417,-74.651v74.64127h26.29248v-74.64127h-26.29248z", |
||||
"hippie": "m126.57668,297.48117c-48.56062,-7.34268 -92.01251,-39.97321 -112.69057,-84.50511c-24.94552,-52.66977 -15.84542,-119.75688 23.8283,-162.85019c38.79855,-45.4432 106.09586,-61.79809 161.96931,-41.65034c58.35461,19.93039 100.52045,79.22475 99.29117,141.02438c1.2113,60.65196 -39.29578,118.84778 -96.0322,139.80408c-24.24886,9.49326 -50.68127,11.39462 -76.36598,8.17719zm8.7399,-92.17508c-0.08942,-7.31126 -0.17882,-14.62254 -0.26825,-21.93381c-20.52584,20.53458 -41.05166,41.06917 -61.57751,61.60378c17.64819,14.10371 39.22342,22.83827 61.57751,25.75548c0.29533,-21.80725 0.53749,-43.61626 0.26825,-65.42545zm48.5128,61.24323c14.52351,-4.28751 28.46933,-11.11562 40.24649,-20.66127c-9.32077,-13.4882 -22.68102,-24.26074 -33.95442,-36.33005c-8.88936,-8.88591 -17.77875,-17.77179 -26.66811,-26.6577c0,29.29706 0,58.59412 0,87.89117c6.88846,-0.91629 13.69307,-2.3291 20.37604,-4.24216zm-48.28273,-180.43147c0,-19.30317 0,-38.60634 0,-57.90951c-51.85052,5.59066 -97.82003,47.52976 -105.87597,99.4242c-5.92087,34.10992 2.2166,70.93011 24.35439,97.89821c27.17386,-27.16779 54.34772,-54.33559 81.52158,-81.50337c0,-19.30317 0,-38.60635 0,-57.90952zm116.00552,130.27736c29.94273,-44.68748 25.57903,-109.31516 -11.64191,-148.59046c-19.65836,-21.7875 -47.20416,-36.42821 -76.45694,-39.59642c0,38.6003 0,77.20061 0,115.80091c26.61343,26.23764 52.37032,53.38443 79.88922,78.67319c3.85712,4.56624 5.79269,-4.75352 8.20963,-6.28722z", |
||||
"house": "m21.15257,177.09065c0,-27.41002 0,-54.82008 0,-82.2301c-6.68203,1.86892 -13.14774,5.87402 -20.15257,5.63974c7.71781,-7.14793 21.82513,-9.41176 32.30949,-14.09891c45.79581,-16.133 91.60535,-32.4141 138.27387,-45.86145c13.50775,-0.66366 26.30505,7.15431 39.33269,10.42321c29.47861,10.57565 59.53784,19.97857 88.07501,32.90813c-6.51614,8.73929 -28.58875,5.06429 -25.73117,21.53019c-2.00067,45.62614 -0.83817,91.32375 -1.14786,136.98345c-18.99269,5.63184 -37.89932,11.84375 -56.94553,17.1149c-64.67134,-0.05981 -129.3426,-0.11945 -194.01394,-0.17902c0,-27.40996 0,-54.82036 0,-82.23004l0,-0.00011zm26.14161,31.25392c0,-16.12061 0,-32.24124 0,-48.36197c16.55636,0 33.11272,0 49.66908,0c0,32.24136 0,64.4827 0,96.724c38.34103,0 76.68204,0 115.02308,0c0,-54.026 0,-108.05197 0,-162.07799c-62.73987,0 -125.47972,0 -188.2196,0c0,54.02602 0,108.05199 0,162.07799c7.84248,0 15.68497,0 23.52745,0c0,-16.12067 0,-32.2413 0,-48.36203zm99.33812,-27.44867c0,-6.97108 0,-13.94214 0,-20.9133c13.07082,0 26.14162,0 39.21243,0c0,13.94221 0,27.88445 0,41.82658c-13.07082,0 -26.14162,0 -39.21243,0c0,-6.97108 0,-13.94214 0,-20.91328zm33.9841,1.30707c0,-5.66399 0,-11.32797 0,-16.99203c-9.58527,0 -19.17052,0 -28.75577,0c0,11.32805 0,22.65611 0,33.98409c9.58525,0 19.1705,0 28.75577,0c0,-5.66399 0,-11.32797 0,-16.99205zm-86.2673,28.75577c0,-15.24922 0,-30.4985 0,-45.7478c-14.8136,0 -29.62717,0 -44.44075,0c0.28782,29.49963 -0.86703,59.06848 1.39272,88.50464c7.32339,4.61035 18.6494,2.34561 27.75799,2.99103c5.09669,0 10.19335,0 15.29005,0c0,-15.24927 0,-30.49857 0,-45.74786zm150.9678,34.15282c7.18895,-2.37781 14.3779,-4.75565 21.56683,-7.13347c-0.32449,-45.85204 0.98636,-91.75861 -1.60782,-137.55795c-6.33264,-8.04385 -23.37172,10.13716 -33.97191,1.44468c-8.98801,-5.39767 -16.23575,-5.6667 -13.48424,6.8141c-0.6041,45.64783 -1.40456,91.35368 0.49997,136.97478c-2.32346,17.3029 19.61401,-1.57974 26.99716,-0.54214zm17.56241,-152.88132c5.81549,-2.74289 29.11139,-6.01917 13.28293,-11.03122c-31.02148,-13.18587 -62.53795,-25.50377 -94.87346,-35.06522c-13.26736,-1.87402 -25.71394,5.23786 -38.28336,8.42139c-7.2287,0.92986 -14.03493,6.61982 -2.78639,8.23806c33.43919,12.5762 66.81393,25.55496 101.06847,35.75281c7.2216,-1.29286 14.41238,-4.37938 21.59181,-6.31581zm-104.48328,-16.97943c-12.19943,-4.63456 -24.39883,-9.26913 -36.59824,-13.9037c-25.6514,8.95505 -51.55341,17.25012 -76.89988,27.03273c49.99152,1.67495 100.06706,0.58957 150.09639,0.77469c-12.19943,-4.6346 -24.39885,-9.26915 -36.59827,-13.90372z", |
||||
"keep_up": "m79,1l-21.3,35.5l-21.3,35.5l19.88,0l0,184.60001l45.44,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.3,-35.5zm142.00002,0l-21.30002,35.5l-21.29999,35.5l19.88,0l0,184.60001l45.43999,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.29999,-35.5zm-213.00002,269.80002l0,28.39999l284,0l0,-28.39999l-284,0z", |
||||
"new_born": "m137.15491,103.06109c-14.77614,-3.80736 -27.4188,-14.09921 -33.90258,-27.59863c-3.9915,-8.31045 -4.89106,-12.46352 -4.90182,-22.63058c-0.01103,-10.43683 0.90331,-14.55167 5.14873,-23.17045c6.5289,-13.25453 17.58841,-22.50933 32.02396,-26.7982c7.85696,-2.33434 19.44511,-2.4919 27.41292,-0.37272c10.68681,2.84234 20.56245,9.23503 27.27812,17.65763c11.44406,14.35284 14.51639,32.93808 8.33334,50.41059c-2.37558,6.7131 -5.38321,11.61306 -10.48294,17.07855c-7.51927,8.05854 -15.46124,12.82613 -25.72244,15.44125c-6.92987,1.76612 -18.2959,1.75824 -25.18729,-0.01743zm46.99359,76.71874c0,-11.66681 -0.15546,-21.21237 -0.34546,-21.21237c-0.55267,0 -23.15134,19.0079 -23.15134,19.47273c0,0.59862 22.40039,22.95203 23.00027,22.95203c0.2731,0 0.49652,-9.54558 0.49652,-21.21239zm-8.12837,89.58151c3.13896,-3.60342 5.94908,-9.57928 7.16283,-15.23215c0.75183,-3.5016 0.8862,-7.28795 0.60019,-16.91275l-0.36856,-12.40109l-33.73602,-33.39706c-29.396,-29.10065 -33.79212,-33.21501 -34.172,-31.98175c-0.2398,0.77843 -0.30579,13.66176 -0.14668,28.62961l0.28934,27.21429l28.53863,28.41072c15.69623,15.6259 28.73599,28.41826 28.97726,28.42744c0.24127,0.00919 1.52603,-1.23157 2.85503,-2.75726zm-21.12221,12.22665c0.5526,-0.21207 -6.52711,-7.73318 -19.03375,-20.22046c-15.75389,-15.72952 -20.00713,-19.64691 -20.36126,-18.75351c-0.82094,2.07094 -0.552,9.37703 0.49458,13.43619c3.03795,11.78281 12.81967,21.70416 24.49419,24.84378c3.43257,0.92316 12.65175,1.36725 14.40625,0.694zm-14.69553,16.96454c-19.19916,-3.63824 -34.22623,-17.37338 -40.35254,-36.88327l-1.52992,-4.87216l0,-51.56241c0,-48.09848 0.08022,-51.82547 1.1941,-55.47855c5.75462,-18.87271 18.67331,-31.86444 36.79293,-37.00092c7.28899,-2.06625 19.90268,-2.05429 27.24492,0.02586c17.6541,5.00159 31.24332,18.57871 36.39166,36.35935l1.50121,5.18457l0,50.90973l0,50.90971l-1.50121,5.18457c-2.97653,10.27997 -9.29736,19.97147 -17.27997,26.49481c-4.88281,3.99017 -14.22415,8.68716 -20.0538,10.08334c-6.28586,1.50537 -16.34073,1.79504 -22.40738,0.64539z", |
||||
"officer_2": "m144.87212,278.09424c0,-7.03476 0,-14.06952 0,-21.10431c34.12148,-0.13669 68.24295,-0.27335 102.36444,-0.41003c0,-6.63841 0,-13.27682 0,-19.91524c-26.94872,-0.26555 -53.89742,-0.53107 -80.84613,-0.79662c30.82893,-41.42374 61.65785,-82.8475 92.48683,-124.27124c13.28885,-1.73074 25.24835,9.13577 26.16702,22.30508c1.37796,55.08076 0.61356,110.19873 0.82785,165.29666c-46.99997,0 -94,0 -141.00003,0c0.00002,-7.03473 0,-14.06952 0.00002,-21.10431zm-0.19199,-87.83214c-0.06876,-13.74153 -0.13754,-27.48306 -0.20631,-41.22459c-14.64618,18.8075 -27.62093,39.06267 -43.91019,56.48129c-14.42976,9.56055 -27.65941,-6.01018 -38.58159,-13.69254c-15.26907,-12.11603 -30.9411,-23.83286 -45.24117,-37.08727c-8.74276,-13.13181 5.83314,-31.80238 20.70509,-26.84245c13.32168,6.5739 23.96796,17.78835 36.01906,26.44797c7.16664,7.87663 15.75377,12.89487 20.74445,-0.10861c10.61151,-12.96709 19.11472,-28.05023 32.18712,-38.75249c13.16731,-7.35264 29.1156,-2.93422 43.48628,-4.27982c21.93321,0.06611 43.87927,-0.19524 65.80286,0.42785c-29.83961,40.18141 -59.99303,80.13989 -90.45013,119.85524c-0.51442,-13.73006 -0.41658,-27.48491 -0.55545,-41.22459zm49.58183,-93.47518c-17.8813,-2.9394 -31.59131,-19.77306 -31.46613,-37.7664c-6.28482,-0.26553 -12.56969,-0.53107 -18.85452,-0.79661c5.37549,-6.77119 10.75095,-13.54238 16.12643,-20.31357c26.79919,0 53.59842,0 80.39761,0c-0.07553,16.83184 2.11966,36.40314 -12.31944,48.47567c-8.59595,8.79105 -21.9399,12.10719 -33.88396,10.40091zm-44.65282,-80.96436c-3.48923,-6.17941 -15.89734,-17.4112 -0.91945,-14.28427c30.58981,-0.43799 61.18378,-0.21775 91.77567,-0.27203c0,9.29378 0,18.58757 0,27.88137c-27.24594,0 -54.49188,0 -81.73782,0c-3.03946,-4.44169 -6.07892,-8.88338 -9.11839,-13.32506z", |
||||
"officer": "m127.65893,298.12302c-11.91827,-4.4541 -8.85096,-18.47458 -9.45842,-28.44775c-0.14007,-38.77051 -0.03694,-77.54163 -0.06789,-116.31239c21.30015,-0.31718 42.6003,-0.76093 63.90377,-0.70047c-0.02318,44.52536 0.58119,89.061 -0.14537,133.57832c-0.57059,11.93384 -13.89935,13.46393 -23.22325,12.30963c-10.33765,0.00372 -20.67488,-0.15573 -31.00884,-0.42734zm-30.7055,-116.03563c-6.74483,-0.72377 -12.32703,-17.61749 -4.40458,-17.57693c6.23801,-0.08125 12.47601,-0.16251 18.71403,-0.24377c1.007,8.20691 -1.59957,19.89343 -12.37878,18.21895l-1.93067,-0.39824l0,0zm99.85623,-0.00661c-6.98207,-0.87273 -10.75342,-15.40816 -5.67188,-17.55357c6.66685,-0.08684 13.33371,-0.17369 20.00055,-0.26053c1.00876,8.20958 -1.60458,19.90276 -12.38809,18.21675l-1.94055,-0.40263c0,0 -0.00003,0 -0.00003,0zm-107.61794,-56.49044c0.54922,-13.57674 -1.08583,-27.43726 1.69075,-40.79832c4.06557,-10.40357 13.92722,-19.77089 25.33163,-20.63995c23.60493,0.19927 47.27207,-1.00478 70.82676,0.54259c14.04367,3.09693 25.24931,16.9698 23.91605,31.57756c0.32544,21.70094 0.15948,43.40639 0.24002,65.10946c-7.41772,0.09508 -14.83545,0.19016 -22.25314,0.28525c0,-19.53377 0,-39.06755 0,-58.60133c-4.34856,-5.08821 -8.05232,1.74921 -6.5546,6.09985c-0.01697,13.17788 -0.03394,26.35577 -0.05093,39.53365c-21.48996,0 -42.97992,0 -64.46988,0c-0.17615,-15.26811 -0.35229,-30.53623 -0.52844,-45.80434c-4.21338,-4.81828 -7.17517,1.78474 -5.83627,5.79053c-0.07101,17.56546 -0.14203,35.13091 -0.21304,52.69639c-7.42339,0.09512 -14.84679,0.19028 -22.27019,0.28539c0.0571,-12.02556 0.11414,-24.05119 0.17128,-36.07671zm56.41985,-70.72921c-11.43472,-2.06434 -20.27027,-12.69278 -20.54277,-24.26873c16.53569,0 33.07137,0 49.60706,0c0.58516,15.06838 -14.48488,27.02206 -29.06429,24.26873zm-25.62941,-33.78068c2.8164,-2.81977 5.23412,-6.59949 9.76779,-5.28442c14.97531,0 29.95061,0 44.9259,0c-0.48174,3.25565 0.91423,8.389 -0.64331,10.56883c-19.77167,0 -39.54332,0 -59.31499,0c1.75487,-1.76147 3.50974,-3.52295 5.26459,-5.28442zm18.8918,-9.34585c-4.62387,-0.06122 -9.24773,-0.12243 -13.8716,-0.18365c0.48279,-3.24875 -0.91532,-8.37839 0.64332,-10.55128c16.34338,0 32.6868,0 49.0302,0c-0.48172,3.25588 0.91423,8.38858 -0.64331,10.56913c-11.722,-0.07703 -23.43608,0.45157 -35.1586,0.1658zm24.67688,286.6952c-6.54985,-2.25 -11.37944,-9.11417 -10.08943,-16.07803c-0.23178,-33.13365 0.30627,-66.28789 -0.62375,-99.40492c-7.52885,-8.41364 -5.32481,11.97667 -5.61325,16.63527c-0.40672,29.85049 0.65932,59.77377 -0.79054,89.57779c-1.03221,6.81601 -14.93086,10.39682 -2.36958,9.16388c6.49333,0.08212 12.9946,0.3678 19.48656,0.10602z", |
||||
"recycle_2": "m70.51852,115.61727c18.49814,35.46731 22.10944,46.23824 15.99329,47.70097c-11.94749,2.85741 -9.54662,19.19937 7.17589,48.84396c20.97182,37.17758 62.04919,60.008 100.6335,55.93118c14.9762,-1.5824 31.90746,-4.84808 37.62502,-7.25717c5.71753,-2.40912 2.20903,2.0788 -7.79668,9.97308c-50.05432,39.49167 -111.87362,36.74075 -161.19199,-7.17288c-19.66416,-17.50925 -46.71899,-68.66641 -46.71899,-88.33963c0,-5.57329 -4.46041,-10.97359 -9.91201,-12.0006c-8.91546,-1.67957 -7.71816,-6.10193 11.90882,-43.98632c12.00147,-23.16548 23.29887,-43.78072 25.10535,-45.81163c1.80651,-2.03091 14.03651,16.92264 27.17781,42.11903zm159.00744,68.37661c-18.49815,-35.4673 -22.10944,-46.23827 -15.99332,-47.70097c11.94749,-2.85736 9.54663,-19.19936 -7.17586,-48.84396c-20.97183,-37.17759 -62.04924,-60.00801 -100.63353,-55.9312c-14.9762,1.58238 -31.90743,4.84812 -37.62498,7.25722c-5.71756,2.40907 -2.20905,-2.07883 7.79666,-9.9731c50.05433,-39.49169 111.87363,-36.74079 161.192,7.1729c19.66417,17.50919 46.71898,68.66639 46.71898,88.33957c0,5.57333 4.46045,10.97359 9.91199,12.0006c8.9155,1.6796 7.71817,6.10193 -11.90878,43.98634c-12.00146,23.16545 -23.29889,43.7807 -25.10535,45.81163c-1.80652,2.03091 -14.03651,-16.92262 -27.17781,-42.11902z", |
||||
"shield_1": "m235.43118,0.99993c-25.8405,20.89055 -61.5569,21.09333 -87.59367,0.62283c-25.04173,19.6952 -59.05148,20.25899 -84.60652,1.69064l-45.9514,49.35802c28.26655,30.91131 28.10226,80.57548 -0.48303,111.27486c-3.79379,10.48137 -5.78214,9.97594 -6.19602,20.53111c-0.97335,25.41245 4.72666,49.11902 22.58091,66.97356c15.9491,15.9491 37.5927,22.71344 58.38308,20.29993c34.71738,1.92664 51.36115,18.07672 58.34494,27.73621c9.4303,-10.32108 24.09528,-26.91339 68.66653,-28.98181c26.60716,-4.12497 36.22241,-10.78885 48.70973,-23.10918c16.80759,-16.80759 22.6846,-38.091 22.18927,-61.73892c-0.20569,-9.81746 -1.32416,-13.23065 -6.84674,-25.76584c-28.71786,-30.84172 -28.73875,-80.82797 -0.07623,-111.70699l-47.12085,-47.18442z", |
||||
"smoking": "m1.00013,234.70761c0,-6.75858 0,-13.51718 0,-20.27576c85.15819,0 170.31638,0 255.47457,0c0,13.51718 0,27.03435 0,40.55151c-85.15819,0 -170.31638,0 -255.47457,0c0,-6.75858 0,-13.51717 0,-20.27576zm262.90899,-0.33792c0,-6.87125 0,-13.74248 0,-20.61369c4.50577,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01141,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm21.62747,0c0,-6.87125 0,-13.74248 0,-20.61369c4.50574,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01144,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm-21.62747,-38.40129c2.33044,-12.44823 -4.64667,-27.35672 -18.89619,-26.91631c-16.51076,-0.91339 -33.27669,-0.16469 -49.68698,-1.22891c-15.92004,-5.44565 -24.6412,-22.87308 -22.39098,-39.09009c-2.60393,-4.6821 -13.75305,-3.34301 -18.33653,-8.47466c-22.34129,-12.77989 -25.34413,-47.04951 -6.6355,-64.35941c6.55362,-6.74706 19.10332,-12.28213 27.40872,-10.56472c0,4.27357 0,8.54715 0,12.82071c-17.16693,0.19163 -30.20795,18.71787 -25.17886,34.95034c3.93155,16.28817 21.44681,21.17548 36.06943,21.4035c9.34369,7.54165 -5.73552,20.54516 2.38481,30.40595c5.4973,13.38734 21.79352,9.01994 33.15524,10.07909c16.32292,0.98282 36.22006,-2.88133 48.06549,11.43753c10.15674,11.08647 7.03754,26.81902 7.55853,40.56599c-4.50571,0 -9.01141,0 -13.51718,0c0,-3.67633 0,-7.35268 0,-11.02902zm21.44409,-5.02264c1.06424,-17.34164 -3.94,-36.41237 -18.82684,-46.85637c-14.2328,-10.82034 -32.68178,-7.49533 -49.35545,-8.05716c-10.44089,-9.26265 6.69904,-19.729 4.85689,-30.88184c1.16321,-14.61189 -8.86084,-28.86267 -23.32887,-32.0012c-8.26547,0.48857 -11.4507,-1.71243 -9.8101,-9.54141c-2.56769,-10.66179 12.99852,-3.08173 18.15088,-2.147c18.80948,6.74871 31.28568,27.05275 28.30017,46.93802c-0.48553,7.00495 -7.28169,16.99163 4.77028,14.2243c23.42943,-1.23563 45.83046,13.98601 54.11491,35.81352c6.09546,15.43478 4.5502,32.30844 4.8287,48.56076c-4.44968,0 -8.89935,0 -13.34903,0c-0.11716,-5.35051 -0.23438,-10.70122 -0.35153,-16.05162z", |
||||
"stairs": "m2.18934,245.58681c17.86729,-0.11601 35.73457,-0.23204 53.60186,-0.34804c0.11764,-18.34987 0.23526,-36.69974 0.35289,-55.04959c17.78193,0 35.56387,0 53.34581,0c0,-18.46245 0,-36.9249 0,-55.38734c18.2373,0 36.47458,0 54.71188,0c0,-18.01214 0,-36.02428 0,-54.03642c18.01213,0 36.02426,0 54.03641,0c0,-18.01213 0,-36.02428 0,-54.03642c26.79306,0 53.58612,0 80.37918,0c0,9.00607 0,18.01214 0,27.01821c-17.78702,0 -35.57397,0 -53.36099,0c0,18.23729 0,36.47458 0,54.71188c-18.01212,0 -36.02425,0 -54.03641,0c0,18.2373 0,36.47459 0,54.71188c-18.01215,0 -36.02426,0 -54.03641,0c0,18.23729 0,36.47459 0,54.71185c-18.2373,0 -36.47459,0 -54.71187,0c0,18.46246 0,36.9249 0,55.38733c-27.01822,0 -54.03642,0 -81.05463,0c1.20448,-8.94977 -2.05336,-19.04163 0.77228,-27.68333z", |
||||
"umbrella": "m138.31999,1l0,29.565c-75.13835,4.16908 -134.31995,48.17229 -134.31999,101.835c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c9.59525,0 18.30284,1.83565 24.81999,4.745l0,144.17499c0,6.44742 -5.23262,11.68002 -11.67999,11.68002c-6.44734,0 -11.68,-5.2326 -11.68,-11.68002l0,-5.84l-23.36,0l0,5.84c0,19.34207 15.6979,35.04001 35.04,35.04001c19.34206,0 35.04001,-15.69794 35.04001,-35.04001l0,-144.17499c6.51714,-2.90935 15.22475,-4.745 24.81999,-4.745c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-53.66274 -59.18159,-97.66592 -134.31999,-101.835l0,-29.565l-23.36002,0z", |
||||
"yin_yang": "m152.3828,1.00127c40.96666,0 74.20116,33.2665 74.20116,74.23316c0,40.96668 -33.2345,74.20117 -74.20116,74.20117c-40.96668,0 -74.20118,33.26653 -74.20118,74.23318c0,40.96667 33.2345,74.20117 74.20118,74.20117c81.93332,0 148.43431,-66.50104 148.43431,-148.43436c0,-81.93333 -66.50099,-148.43433 -148.43431,-148.43433zm0,51.0353c-12.80867,0 -23.19788,10.38917 -23.19788,23.19786c0,12.80871 10.38918,23.19786 23.19788,23.19786c12.80869,0 23.19785,-10.38917 23.19785,-23.19786c0,-12.80869 -10.38916,-23.19786 -23.19785,-23.19786zm0,148.43436c12.80206,0 23.19785,10.39577 23.19785,23.19786c0,12.80206 -10.39578,23.19788 -23.19785,23.19788c-12.80208,0 -23.19788,-10.39581 -23.19788,-23.19788c0,-12.80206 10.3958,-23.19786 23.19788,-23.19786zm145.10503,-50.94075c0,81.87245 -66.37071,148.24319 -148.24321,148.24319c-81.87246,0 -148.24321,-66.37074 -148.24321,-148.24319c0,-81.87248 66.37075,-148.24324 148.24321,-148.24324c81.8725,0 148.24321,66.37076 148.24321,148.24324z" |
||||
} |
||||
} |
After Width: | Height: | Size: 681 B |
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,613 @@
|
||||
/*globals svgedit*/ |
||||
/*jslint vars: true, eqeq: true, continue: true, forin: true*/ |
||||
/** |
||||
* Package: svedit.history |
||||
* |
||||
* Licensed under the MIT License |
||||
* |
||||
* Copyright(c) 2010 Jeff Schiller |
||||
*/ |
||||
|
||||
// Dependencies:
|
||||
// 1) jQuery
|
||||
// 2) svgtransformlist.js
|
||||
// 3) svgutils.js
|
||||
|
||||
(function() {'use strict'; |
||||
|
||||
if (!svgedit.history) { |
||||
svgedit.history = {}; |
||||
} |
||||
|
||||
// Group: Undo/Redo history management
|
||||
svgedit.history.HistoryEventTypes = { |
||||
BEFORE_APPLY: 'before_apply', |
||||
AFTER_APPLY: 'after_apply', |
||||
BEFORE_UNAPPLY: 'before_unapply', |
||||
AFTER_UNAPPLY: 'after_unapply' |
||||
}; |
||||
|
||||
var removedElements = {}; |
||||
|
||||
/** |
||||
* An interface that all command objects must implement. |
||||
* @typedef svgedit.history.HistoryCommand |
||||
* @type {object} |
||||
* void apply(svgedit.history.HistoryEventHandler); |
||||
* void unapply(svgedit.history.HistoryEventHandler); |
||||
* Element[] elements(); |
||||
* String getText(); |
||||
* |
||||
* static String type(); |
||||
* } |
||||
* |
||||
* Interface: svgedit.history.HistoryEventHandler |
||||
* An interface for objects that will handle history events. |
||||
* |
||||
* interface svgedit.history.HistoryEventHandler { |
||||
* void handleHistoryEvent(eventType, command); |
||||
* } |
||||
* |
||||
* eventType is a string conforming to one of the HistoryEvent types. |
||||
* command is an object fulfilling the HistoryCommand interface. |
||||
*/ |
||||
|
||||
/** |
||||
* @class svgedit.history.MoveElementCommand |
||||
* @implements svgedit.history.HistoryCommand |
||||
* History command for an element that had its DOM position changed |
||||
* @param {Element} elem - The DOM element that was moved |
||||
* @param {Element} oldNextSibling - The element's next sibling before it was moved |
||||
* @param {Element} oldParent - The element's parent before it was moved |
||||
* @param {string} [text] - An optional string visible to user related to this change |
||||
*/ |
||||
svgedit.history.MoveElementCommand = function(elem, oldNextSibling, oldParent, text) { |
||||
this.elem = elem; |
||||
this.text = text ? ("Move " + elem.tagName + " to " + text) : ("Move " + elem.tagName); |
||||
this.oldNextSibling = oldNextSibling; |
||||
this.oldParent = oldParent; |
||||
this.newNextSibling = elem.nextSibling; |
||||
this.newParent = elem.parentNode; |
||||
}; |
||||
svgedit.history.MoveElementCommand.type = function() { return 'svgedit.history.MoveElementCommand'; }; |
||||
svgedit.history.MoveElementCommand.prototype.type = svgedit.history.MoveElementCommand.type; |
||||
|
||||
svgedit.history.MoveElementCommand.prototype.getText = function() { |
||||
return this.text; |
||||
}; |
||||
|
||||
/** |
||||
* Re-positions the element |
||||
* @param {handleHistoryEvent: function} |
||||
*/ |
||||
svgedit.history.MoveElementCommand.prototype.apply = function(handler) { |
||||
// TODO(codedread): Refactor this common event code into a base HistoryCommand class.
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this); |
||||
} |
||||
|
||||
this.elem = this.newParent.insertBefore(this.elem, this.newNextSibling); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* Positions the element back to its original location |
||||
* @param {handleHistoryEvent: function} |
||||
*/ |
||||
svgedit.history.MoveElementCommand.prototype.unapply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this); |
||||
} |
||||
|
||||
this.elem = this.oldParent.insertBefore(this.elem, this.oldNextSibling); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.MoveElementCommand.elements
|
||||
// Returns array with element associated with this command
|
||||
svgedit.history.MoveElementCommand.prototype.elements = function() { |
||||
return [this.elem]; |
||||
}; |
||||
|
||||
|
||||
// Class: svgedit.history.InsertElementCommand
|
||||
// implements svgedit.history.HistoryCommand
|
||||
// History command for an element that was added to the DOM
|
||||
//
|
||||
// Parameters:
|
||||
// elem - The newly added DOM element
|
||||
// text - An optional string visible to user related to this change
|
||||
svgedit.history.InsertElementCommand = function(elem, text) { |
||||
this.elem = elem; |
||||
this.text = text || ("Create " + elem.tagName); |
||||
this.parent = elem.parentNode; |
||||
this.nextSibling = this.elem.nextSibling; |
||||
}; |
||||
svgedit.history.InsertElementCommand.type = function() { return 'svgedit.history.InsertElementCommand'; }; |
||||
svgedit.history.InsertElementCommand.prototype.type = svgedit.history.InsertElementCommand.type; |
||||
|
||||
// Function: svgedit.history.InsertElementCommand.getText
|
||||
svgedit.history.InsertElementCommand.prototype.getText = function() { |
||||
return this.text; |
||||
}; |
||||
|
||||
// Function: svgedit.history.InsertElementCommand.apply
|
||||
// Re-Inserts the new element
|
||||
svgedit.history.InsertElementCommand.prototype.apply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this); |
||||
} |
||||
|
||||
this.elem = this.parent.insertBefore(this.elem, this.nextSibling); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.InsertElementCommand.unapply
|
||||
// Removes the element
|
||||
svgedit.history.InsertElementCommand.prototype.unapply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this); |
||||
} |
||||
|
||||
this.parent = this.elem.parentNode; |
||||
this.elem = this.elem.parentNode.removeChild(this.elem); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.InsertElementCommand.elements
|
||||
// Returns array with element associated with this command
|
||||
svgedit.history.InsertElementCommand.prototype.elements = function() { |
||||
return [this.elem]; |
||||
}; |
||||
|
||||
|
||||
// Class: svgedit.history.RemoveElementCommand
|
||||
// implements svgedit.history.HistoryCommand
|
||||
// History command for an element removed from the DOM
|
||||
//
|
||||
// Parameters:
|
||||
// elem - The removed DOM element
|
||||
// oldNextSibling - the DOM element's nextSibling when it was in the DOM
|
||||
// oldParent - The DOM element's parent
|
||||
// text - An optional string visible to user related to this change
|
||||
svgedit.history.RemoveElementCommand = function(elem, oldNextSibling, oldParent, text) { |
||||
this.elem = elem; |
||||
this.text = text || ("Delete " + elem.tagName); |
||||
this.nextSibling = oldNextSibling; |
||||
this.parent = oldParent; |
||||
|
||||
// special hack for webkit: remove this element's entry in the svgTransformLists map
|
||||
svgedit.transformlist.removeElementFromListMap(elem); |
||||
}; |
||||
svgedit.history.RemoveElementCommand.type = function() { return 'svgedit.history.RemoveElementCommand'; }; |
||||
svgedit.history.RemoveElementCommand.prototype.type = svgedit.history.RemoveElementCommand.type; |
||||
|
||||
// Function: svgedit.history.RemoveElementCommand.getText
|
||||
svgedit.history.RemoveElementCommand.prototype.getText = function() { |
||||
return this.text; |
||||
}; |
||||
|
||||
// Function: RemoveElementCommand.apply
|
||||
// Re-removes the new element
|
||||
svgedit.history.RemoveElementCommand.prototype.apply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this); |
||||
} |
||||
|
||||
svgedit.transformlist.removeElementFromListMap(this.elem); |
||||
this.parent = this.elem.parentNode; |
||||
this.elem = this.parent.removeChild(this.elem); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: RemoveElementCommand.unapply
|
||||
// Re-adds the new element
|
||||
svgedit.history.RemoveElementCommand.prototype.unapply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this); |
||||
} |
||||
|
||||
svgedit.transformlist.removeElementFromListMap(this.elem); |
||||
if (this.nextSibling == null) { |
||||
if (window.console) { |
||||
console.log('Error: reference element was lost'); |
||||
} |
||||
} |
||||
this.parent.insertBefore(this.elem, this.nextSibling); |
||||
|
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: RemoveElementCommand.elements
|
||||
// Returns array with element associated with this command
|
||||
svgedit.history.RemoveElementCommand.prototype.elements = function() { |
||||
return [this.elem]; |
||||
}; |
||||
|
||||
|
||||
// Class: svgedit.history.ChangeElementCommand
|
||||
// implements svgedit.history.HistoryCommand
|
||||
// History command to make a change to an element.
|
||||
// Usually an attribute change, but can also be textcontent.
|
||||
//
|
||||
// Parameters:
|
||||
// elem - The DOM element that was changed
|
||||
// attrs - An object with the attributes to be changed and the values they had *before* the change
|
||||
// text - An optional string visible to user related to this change
|
||||
svgedit.history.ChangeElementCommand = function(elem, attrs, text) { |
||||
this.elem = elem; |
||||
this.text = text ? ("Change " + elem.tagName + " " + text) : ("Change " + elem.tagName); |
||||
this.newValues = {}; |
||||
this.oldValues = attrs; |
||||
var attr; |
||||
for (attr in attrs) { |
||||
if (attr == "#text") {this.newValues[attr] = elem.textContent;} |
||||
else if (attr == "#href") {this.newValues[attr] = svgedit.utilities.getHref(elem);} |
||||
else {this.newValues[attr] = elem.getAttribute(attr);} |
||||
} |
||||
}; |
||||
svgedit.history.ChangeElementCommand.type = function() { return 'svgedit.history.ChangeElementCommand'; }; |
||||
svgedit.history.ChangeElementCommand.prototype.type = svgedit.history.ChangeElementCommand.type; |
||||
|
||||
// Function: svgedit.history.ChangeElementCommand.getText
|
||||
svgedit.history.ChangeElementCommand.prototype.getText = function() { |
||||
return this.text; |
||||
}; |
||||
|
||||
// Function: svgedit.history.ChangeElementCommand.apply
|
||||
// Performs the stored change action
|
||||
svgedit.history.ChangeElementCommand.prototype.apply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this); |
||||
} |
||||
|
||||
var bChangedTransform = false; |
||||
var attr; |
||||
for (attr in this.newValues ) { |
||||
if (this.newValues[attr]) { |
||||
if (attr == "#text") {this.elem.textContent = this.newValues[attr];} |
||||
else if (attr == "#href") {svgedit.utilities.setHref(this.elem, this.newValues[attr]);} |
||||
else {this.elem.setAttribute(attr, this.newValues[attr]);} |
||||
} |
||||
else { |
||||
if (attr == "#text") { |
||||
this.elem.textContent = ""; |
||||
} |
||||
else { |
||||
this.elem.setAttribute(attr, ""); |
||||
this.elem.removeAttribute(attr); |
||||
} |
||||
} |
||||
|
||||
if (attr == "transform") { bChangedTransform = true; } |
||||
} |
||||
|
||||
// relocate rotational transform, if necessary
|
||||
if (!bChangedTransform) { |
||||
var angle = svgedit.utilities.getRotationAngle(this.elem); |
||||
if (angle) { |
||||
// TODO: These instances of elem either need to be declared as global
|
||||
// (which would not be good for conflicts) or declare/use this.elem
|
||||
var bbox = elem.getBBox(); |
||||
var cx = bbox.x + bbox.width/2, |
||||
cy = bbox.y + bbox.height/2; |
||||
var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join(''); |
||||
if (rotate != elem.getAttribute("transform")) { |
||||
elem.setAttribute("transform", rotate); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this); |
||||
} |
||||
|
||||
return true; |
||||
}; |
||||
|
||||
// Function: svgedit.history.ChangeElementCommand.unapply
|
||||
// Reverses the stored change action
|
||||
svgedit.history.ChangeElementCommand.prototype.unapply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this); |
||||
} |
||||
|
||||
var bChangedTransform = false; |
||||
var attr; |
||||
for (attr in this.oldValues ) { |
||||
if (this.oldValues[attr]) { |
||||
if (attr == "#text") {this.elem.textContent = this.oldValues[attr];} |
||||
else if (attr == "#href") {svgedit.utilities.setHref(this.elem, this.oldValues[attr]);} |
||||
else { |
||||
this.elem.setAttribute(attr, this.oldValues[attr]); |
||||
} |
||||
} |
||||
else { |
||||
if (attr == "#text") { |
||||
this.elem.textContent = ""; |
||||
} |
||||
else {this.elem.removeAttribute(attr);} |
||||
} |
||||
if (attr == "transform") { bChangedTransform = true; } |
||||
} |
||||
// relocate rotational transform, if necessary
|
||||
if (!bChangedTransform) { |
||||
var angle = svgedit.utilities.getRotationAngle(this.elem); |
||||
if (angle) { |
||||
var bbox = elem.getBBox(); |
||||
var cx = bbox.x + bbox.width/2, |
||||
cy = bbox.y + bbox.height/2; |
||||
var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join(''); |
||||
if (rotate != elem.getAttribute("transform")) { |
||||
elem.setAttribute("transform", rotate); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Remove transformlist to prevent confusion that causes bugs like 575.
|
||||
svgedit.transformlist.removeElementFromListMap(this.elem); |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this); |
||||
} |
||||
|
||||
return true; |
||||
}; |
||||
|
||||
// Function: ChangeElementCommand.elements
|
||||
// Returns array with element associated with this command
|
||||
svgedit.history.ChangeElementCommand.prototype.elements = function() { |
||||
return [this.elem]; |
||||
}; |
||||
|
||||
|
||||
// TODO: create a 'typing' command object that tracks changes in text
|
||||
// if a new Typing command is created and the top command on the stack is also a Typing
|
||||
// and they both affect the same element, then collapse the two commands into one
|
||||
|
||||
|
||||
// Class: svgedit.history.BatchCommand
|
||||
// implements svgedit.history.HistoryCommand
|
||||
// History command that can contain/execute multiple other commands
|
||||
//
|
||||
// Parameters:
|
||||
// text - An optional string visible to user related to this change
|
||||
svgedit.history.BatchCommand = function(text) { |
||||
this.text = text || "Batch Command"; |
||||
this.stack = []; |
||||
}; |
||||
svgedit.history.BatchCommand.type = function() { return 'svgedit.history.BatchCommand'; }; |
||||
svgedit.history.BatchCommand.prototype.type = svgedit.history.BatchCommand.type; |
||||
|
||||
// Function: svgedit.history.BatchCommand.getText
|
||||
svgedit.history.BatchCommand.prototype.getText = function() { |
||||
return this.text; |
||||
}; |
||||
|
||||
// Function: svgedit.history.BatchCommand.apply
|
||||
// Runs "apply" on all subcommands
|
||||
svgedit.history.BatchCommand.prototype.apply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this); |
||||
} |
||||
|
||||
var i, |
||||
len = this.stack.length; |
||||
for (i = 0; i < len; ++i) { |
||||
this.stack[i].apply(handler); |
||||
} |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.BatchCommand.unapply
|
||||
// Runs "unapply" on all subcommands
|
||||
svgedit.history.BatchCommand.prototype.unapply = function(handler) { |
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this); |
||||
} |
||||
|
||||
var i; |
||||
for (i = this.stack.length-1; i >= 0; i--) { |
||||
this.stack[i].unapply(handler); |
||||
} |
||||
|
||||
if (handler) { |
||||
handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.BatchCommand.elements
|
||||
// Iterate through all our subcommands and returns all the elements we are changing
|
||||
svgedit.history.BatchCommand.prototype.elements = function() { |
||||
var elems = []; |
||||
var cmd = this.stack.length; |
||||
while (cmd--) { |
||||
var thisElems = this.stack[cmd].elements(); |
||||
var elem = thisElems.length; |
||||
while (elem--) { |
||||
if (elems.indexOf(thisElems[elem]) == -1) {elems.push(thisElems[elem]);} |
||||
} |
||||
} |
||||
return elems; |
||||
}; |
||||
|
||||
// Function: svgedit.history.BatchCommand.addSubCommand
|
||||
// Adds a given command to the history stack
|
||||
//
|
||||
// Parameters:
|
||||
// cmd - The undo command object to add
|
||||
svgedit.history.BatchCommand.prototype.addSubCommand = function(cmd) { |
||||
this.stack.push(cmd); |
||||
}; |
||||
|
||||
// Function: svgedit.history.BatchCommand.isEmpty
|
||||
// Returns a boolean indicating whether or not the batch command is empty
|
||||
svgedit.history.BatchCommand.prototype.isEmpty = function() { |
||||
return this.stack.length === 0; |
||||
}; |
||||
|
||||
|
||||
// Class: svgedit.history.UndoManager
|
||||
// Parameters:
|
||||
// historyEventHandler - an object that conforms to the HistoryEventHandler interface
|
||||
// (see above)
|
||||
svgedit.history.UndoManager = function(historyEventHandler) { |
||||
this.handler_ = historyEventHandler || null; |
||||
this.undoStackPointer = 0; |
||||
this.undoStack = []; |
||||
|
||||
// this is the stack that stores the original values, the elements and
|
||||
// the attribute name for begin/finish
|
||||
this.undoChangeStackPointer = -1; |
||||
this.undoableChangeStack = []; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.resetUndoStack
|
||||
// Resets the undo stack, effectively clearing the undo/redo history
|
||||
svgedit.history.UndoManager.prototype.resetUndoStack = function() { |
||||
this.undoStack = []; |
||||
this.undoStackPointer = 0; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.getUndoStackSize
|
||||
// Returns:
|
||||
// Integer with the current size of the undo history stack
|
||||
svgedit.history.UndoManager.prototype.getUndoStackSize = function() { |
||||
return this.undoStackPointer; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.getRedoStackSize
|
||||
// Returns:
|
||||
// Integer with the current size of the redo history stack
|
||||
svgedit.history.UndoManager.prototype.getRedoStackSize = function() { |
||||
return this.undoStack.length - this.undoStackPointer; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.getNextUndoCommandText
|
||||
// Returns:
|
||||
// String associated with the next undo command
|
||||
svgedit.history.UndoManager.prototype.getNextUndoCommandText = function() { |
||||
return this.undoStackPointer > 0 ? this.undoStack[this.undoStackPointer-1].getText() : ""; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.getNextRedoCommandText
|
||||
// Returns:
|
||||
// String associated with the next redo command
|
||||
svgedit.history.UndoManager.prototype.getNextRedoCommandText = function() { |
||||
return this.undoStackPointer < this.undoStack.length ? this.undoStack[this.undoStackPointer].getText() : ""; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.undo
|
||||
// Performs an undo step
|
||||
svgedit.history.UndoManager.prototype.undo = function() { |
||||
if (this.undoStackPointer > 0) { |
||||
var cmd = this.undoStack[--this.undoStackPointer]; |
||||
cmd.unapply(this.handler_); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.redo
|
||||
// Performs a redo step
|
||||
svgedit.history.UndoManager.prototype.redo = function() { |
||||
if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) { |
||||
var cmd = this.undoStack[this.undoStackPointer++]; |
||||
cmd.apply(this.handler_); |
||||
} |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.addCommandToHistory
|
||||
// Adds a command object to the undo history stack
|
||||
//
|
||||
// Parameters:
|
||||
// cmd - The command object to add
|
||||
svgedit.history.UndoManager.prototype.addCommandToHistory = function(cmd) { |
||||
// FIXME: we MUST compress consecutive text changes to the same element
|
||||
// (right now each keystroke is saved as a separate command that includes the
|
||||
// entire text contents of the text element)
|
||||
// TODO: consider limiting the history that we store here (need to do some slicing)
|
||||
|
||||
// if our stack pointer is not at the end, then we have to remove
|
||||
// all commands after the pointer and insert the new command
|
||||
if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) { |
||||
this.undoStack = this.undoStack.splice(0, this.undoStackPointer); |
||||
} |
||||
this.undoStack.push(cmd); |
||||
this.undoStackPointer = this.undoStack.length; |
||||
}; |
||||
|
||||
|
||||
// Function: svgedit.history.UndoManager.beginUndoableChange
|
||||
// This function tells the canvas to remember the old values of the
|
||||
// attrName attribute for each element sent in. The elements and values
|
||||
// are stored on a stack, so the next call to finishUndoableChange() will
|
||||
// pop the elements and old values off the stack, gets the current values
|
||||
// from the DOM and uses all of these to construct the undo-able command.
|
||||
//
|
||||
// Parameters:
|
||||
// attrName - The name of the attribute being changed
|
||||
// elems - Array of DOM elements being changed
|
||||
svgedit.history.UndoManager.prototype.beginUndoableChange = function(attrName, elems) { |
||||
var p = ++this.undoChangeStackPointer; |
||||
var i = elems.length; |
||||
var oldValues = new Array(i), elements = new Array(i); |
||||
while (i--) { |
||||
var elem = elems[i]; |
||||
if (elem == null) {continue;} |
||||
elements[i] = elem; |
||||
oldValues[i] = elem.getAttribute(attrName); |
||||
} |
||||
this.undoableChangeStack[p] = { |
||||
'attrName': attrName, |
||||
'oldValues': oldValues, |
||||
'elements': elements |
||||
}; |
||||
}; |
||||
|
||||
// Function: svgedit.history.UndoManager.finishUndoableChange
|
||||
// This function returns a BatchCommand object which summarizes the
|
||||
// change since beginUndoableChange was called. The command can then
|
||||
// be added to the command history
|
||||
//
|
||||
// Returns:
|
||||
// Batch command object with resulting changes
|
||||
svgedit.history.UndoManager.prototype.finishUndoableChange = function() { |
||||
var p = this.undoChangeStackPointer--; |
||||
var changeset = this.undoableChangeStack[p]; |
||||
var i = changeset.elements.length; |
||||
var attrName = changeset.attrName; |
||||
var batchCmd = new svgedit.history.BatchCommand("Change " + attrName); |
||||
while (i--) { |
||||
var elem = changeset.elements[i]; |
||||
if (elem == null) {continue;} |
||||
var changes = {}; |
||||
changes[attrName] = changeset.oldValues[i]; |
||||
if (changes[attrName] != elem.getAttribute(attrName)) { |
||||
batchCmd.addSubCommand(new svgedit.history.ChangeElementCommand(elem, changes, attrName)); |
||||
} |
||||
} |
||||
this.undoableChangeStack[p] = null; |
||||
return batchCmd; |
||||
}; |
||||
|
||||
}()); |
@ -0,0 +1,61 @@
|
||||
filename origin |
||||
|
||||
align-bottom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.png |
||||
align-bottom.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.svg |
||||
align-center.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.png |
||||
align-center.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.svg |
||||
align-left.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.png |
||||
align-left.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.svg |
||||
align-middle.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.png |
||||
align-middle.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.svg |
||||
align-right.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.png |
||||
align-right.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.svg |
||||
align-top.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.png |
||||
align-top.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.svg |
||||
bold.png |
||||
cancel.png |
||||
circle.png |
||||
clear.png |
||||
clone.png |
||||
copy.png |
||||
cut.png |
||||
delete.png |
||||
document-properties.png |
||||
dropdown.gif |
||||
ellipse.png |
||||
eye.png |
||||
flyouth.png |
||||
flyup.gif |
||||
freehand-circle.png |
||||
freehand-square.png |
||||
go-down.png |
||||
go-up.png |
||||
image.png |
||||
italic.png |
||||
line.png |
||||
logo.png |
||||
logo.svg |
||||
move_bottom.png |
||||
move_top.png |
||||
none.png |
||||
open.png |
||||
paste.png |
||||
path.png |
||||
polygon.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.png |
||||
polygon.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.svg |
||||
rect.png |
||||
redo.png |
||||
rotate.png |
||||
save.png |
||||
select.png |
||||
sep.png |
||||
shape_group_elements.png |
||||
shape_ungroup.png |
||||
source.png |
||||
square.png |
||||
text.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.png |
||||
text.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.svg |
||||
undo.png |
||||
view-refresh.png |
||||
wave.png |
||||
zoom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/page-magnifier.png |
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 449 B |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 305 B |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 459 B |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 339 B |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 287 B |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 812 B |
After Width: | Height: | Size: 715 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 852 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 663 B |
After Width: | Height: | Size: 688 B |