Merge branch 'bzr/golem' of /Users/distler/Sites/code/instiki
This commit is contained in:
commit
a8428ada2f
|
@ -3,74 +3,82 @@
|
|||
*
|
||||
* Licensed under the Apache License, Version 2
|
||||
*
|
||||
* Copyright(c) 2009 Narendra Sisodya
|
||||
* Copyright(c) 2010 Narendra Sisodya
|
||||
* Copyright(c) 2010 Alexis Deveria
|
||||
*
|
||||
*/
|
||||
var put_locale = function(svgEditor, given_param, good_langs){
|
||||
var lang_param;
|
||||
|
||||
if(given_param) {
|
||||
lang_param = given_param;
|
||||
} else {
|
||||
lang_param = $.pref('lang');
|
||||
if(!lang_param) {
|
||||
if (navigator.userLanguage) // Explorer
|
||||
lang_param = navigator.userLanguage;
|
||||
else if (navigator.language) // FF, Opera, ...
|
||||
lang_param = navigator.language;
|
||||
if (lang_param == "")
|
||||
return;
|
||||
}
|
||||
var svgEditor = (function($, Editor) {
|
||||
Editor.putLocale = function(given_param, good_langs){
|
||||
var lang_param;
|
||||
|
||||
// Set to English if language is not in list of good langs
|
||||
if($.inArray(lang_param, good_langs) == -1) {
|
||||
lang_param = "en";
|
||||
}
|
||||
|
||||
// don't bother on first run if language is English
|
||||
if(lang_param.indexOf("en") == 0) return;
|
||||
}
|
||||
|
||||
var url = "locale/lang." + lang_param + ".js";
|
||||
|
||||
var processFile = function(data){
|
||||
var LangData = eval(data), js_strings;
|
||||
var more = svgEditor.canvas.runExtensions("addLangData", lang_param, true);
|
||||
$.each(more, function(i, m) {
|
||||
if(m.data) {
|
||||
LangData = $.merge(LangData, m.data);
|
||||
if(given_param) {
|
||||
lang_param = given_param;
|
||||
} else {
|
||||
lang_param = $.pref('lang');
|
||||
if(!lang_param) {
|
||||
if (navigator.userLanguage) // Explorer
|
||||
lang_param = navigator.userLanguage;
|
||||
else if (navigator.language) // FF, Opera, ...
|
||||
lang_param = navigator.language;
|
||||
if (lang_param == "")
|
||||
return;
|
||||
}
|
||||
});
|
||||
$.each(LangData, function(i, data) {
|
||||
if(data.id) {
|
||||
var elem = $('#svg_editor').parent().find('#'+data.id)[0];
|
||||
if(elem) {
|
||||
if(data.title)
|
||||
elem.title = data.title;
|
||||
if(data.textContent) {
|
||||
// Only replace non-empty text nodes, not elements
|
||||
$.each(elem.childNodes, function(j, node) {
|
||||
if(node.nodeType == 3 && $.trim(node.textContent)) {
|
||||
node.textContent = data.textContent;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Set to English if language is not in list of good langs
|
||||
if($.inArray(lang_param, good_langs) == -1) {
|
||||
lang_param = "en";
|
||||
}
|
||||
|
||||
// don't bother on first run if language is English
|
||||
if(lang_param.indexOf("en") == 0) return;
|
||||
}
|
||||
|
||||
var conf = Editor.curConfig;
|
||||
|
||||
var url = conf.langPath + "lang." + lang_param + ".js";
|
||||
|
||||
var processFile = function(data){
|
||||
var LangData = eval(data), js_strings;
|
||||
var more = Editor.canvas.runExtensions("addLangData", lang_param, true);
|
||||
$.each(more, function(i, m) {
|
||||
if(m.data) {
|
||||
LangData = $.merge(LangData, m.data);
|
||||
}
|
||||
});
|
||||
$.each(LangData, function(i, data) {
|
||||
if(data.id) {
|
||||
var elem = $('#svg_editor').parent().find('#'+data.id)[0];
|
||||
if(elem) {
|
||||
if(data.title)
|
||||
elem.title = data.title;
|
||||
if(data.textContent) {
|
||||
// Only replace non-empty text nodes, not elements
|
||||
$.each(elem.childNodes, function(j, node) {
|
||||
if(node.nodeType == 3 && $.trim(node.textContent)) {
|
||||
node.textContent = data.textContent;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if(data.js_strings) {
|
||||
js_strings = data.js_strings;
|
||||
}
|
||||
});
|
||||
Editor.setLang(lang_param, js_strings);
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
'url': url,
|
||||
'dataType': "text",
|
||||
success: processFile,
|
||||
error: function(xhr) {
|
||||
if(xhr.responseText) {
|
||||
processFile(xhr.responseText);
|
||||
}
|
||||
} else if(data.js_strings) {
|
||||
js_strings = data.js_strings;
|
||||
}
|
||||
});
|
||||
svgEditor.setLang(lang_param, js_strings);
|
||||
}
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
'url': url,
|
||||
'dataType': "text",
|
||||
success: processFile,
|
||||
error: function(xhr) {
|
||||
if(xhr.responseText) {
|
||||
processFile(xhr.responseText);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
return Editor;
|
||||
}(jQuery, svgEditor));
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
<script type="text/javascript" src="svgicons/jquery.svgicons.js"></script>
|
||||
<script type="text/javascript" src="jquerybbq/jquery.bbq.min.js"></script>
|
||||
<script type="text/javascript" src="spinbtn/JQuerySpinBtn.js"></script>
|
||||
<script type="text/javascript" src="locale/locale.js"></script>
|
||||
<script type="text/javascript" src="svgcanvas.js"></script>
|
||||
<script type="text/javascript" src="svg-editor.js"></script>
|
||||
<script type="text/javascript" src="locale/locale.js"></script>
|
||||
<script type="text/javascript" src="extensions/ext-closepath.js"></script>
|
||||
<script type="text/javascript" src="extensions/ext-arrows.js"></script>
|
||||
<script type="text/javascript" src="extensions/ext-connector.js"></script>
|
||||
|
@ -358,7 +358,7 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
|
|||
</div> <!-- tools_top -->
|
||||
|
||||
<div id="tools_left" class="tools_panel">
|
||||
<div class="tool_button_current" id="tool_select" title="Select Tool [1]"></div>
|
||||
<div class="tool_button" id="tool_select" title="Select Tool [1]"></div>
|
||||
<div class="tool_button" id="tool_fhpath" title="Pencil Tool [2]"></div>
|
||||
<div class="tool_button" id="tool_line" title="Line Tool [3]"></div>
|
||||
<div class="tool_button flyout_current" id="tools_rect_show" title="Square/Rect Tool [4/Shift+4]">
|
||||
|
@ -376,7 +376,6 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
|
|||
<div id="tool_rect" title="Rectangle"></div>
|
||||
<div id="tool_square" title="Square"></div>
|
||||
<div id="tool_fhrect" title="Free-Hand Rectangle"></div>
|
||||
|
||||
<div id="tool_ellipse" title="Ellipse"></div>
|
||||
<div id="tool_circle" title="Circle"></div>
|
||||
<div id="tool_fhellipse" title="Free-Hand Ellipse"></div>
|
||||
|
|
|
@ -12,8 +12,7 @@
|
|||
|
||||
(function() {
|
||||
|
||||
|
||||
if(!window.svgEditor) window.svgEditor = function() {
|
||||
if(!window.svgEditor) window.svgEditor = function($) {
|
||||
var svgCanvas;
|
||||
var Editor = {};
|
||||
var is_ready = false;
|
||||
|
@ -38,11 +37,15 @@
|
|||
opacity: 1
|
||||
},
|
||||
initStroke: {
|
||||
width: 1,
|
||||
width: 5,
|
||||
color: '000000', // solid black
|
||||
opacity: 1
|
||||
},
|
||||
initOpacity: 1
|
||||
initOpacity: 1,
|
||||
imgPath: 'images/',
|
||||
langPath: 'locale/',
|
||||
initTool: 'select',
|
||||
wireframe: false
|
||||
},
|
||||
uiStrings = {
|
||||
'invalidAttrValGiven':'Invalid value given',
|
||||
|
@ -68,6 +71,8 @@
|
|||
|
||||
var curPrefs = {}; //$.extend({}, defaultPrefs);
|
||||
|
||||
Editor.curConfig = curConfig;
|
||||
|
||||
// Store and retrieve preferences
|
||||
$.pref = function(key, val) {
|
||||
if(val) curPrefs[key] = val;
|
||||
|
@ -141,10 +146,9 @@
|
|||
}
|
||||
|
||||
Editor.init = function() {
|
||||
|
||||
(function() {
|
||||
// Load config/data from URL if given
|
||||
var urldata = $.deparam.querystring();
|
||||
var urldata = $.deparam.querystring(true);
|
||||
if(!$.isEmptyObject(urldata)) {
|
||||
if(urldata.dimensions) {
|
||||
urldata.dimensions = urldata.dimensions.split(',');
|
||||
|
@ -154,6 +158,10 @@
|
|||
urldata.bkgd_color = '#' + urldata.bkgd_color;
|
||||
}
|
||||
|
||||
if(urldata.bkgd_color) {
|
||||
urldata.bkgd_color = '#' + urldata.bkgd_color;
|
||||
}
|
||||
|
||||
svgEditor.setConfig(urldata);
|
||||
|
||||
var src = urldata.source;
|
||||
|
@ -172,6 +180,163 @@
|
|||
}
|
||||
})();
|
||||
|
||||
$.svgIcons(curConfig.imgPath + 'svg_edit_icons.svg', {
|
||||
w:24, h:24,
|
||||
id_match: false,
|
||||
no_img: true,
|
||||
fallback_path: curConfig.imgPath,
|
||||
fallback:{
|
||||
'new_image':'clear.png',
|
||||
'save':'save.png',
|
||||
'open':'open.png',
|
||||
'source':'source.png',
|
||||
'docprops':'document-properties.png',
|
||||
'wireframe':'wireframe.png',
|
||||
|
||||
'undo':'undo.png',
|
||||
'redo':'redo.png',
|
||||
|
||||
'select':'select.png',
|
||||
'select_node':'select_node.png',
|
||||
'pencil':'fhpath.png',
|
||||
'pen':'line.png',
|
||||
'square':'square.png',
|
||||
'rect':'rect.png',
|
||||
'fh_rect':'freehand-square.png',
|
||||
'circle':'circle.png',
|
||||
'ellipse':'ellipse.png',
|
||||
'fh_ellipse':'freehand-circle.png',
|
||||
'path':'path.png',
|
||||
'text':'text.png',
|
||||
'image':'image.png',
|
||||
'zoom':'zoom.png',
|
||||
|
||||
'clone':'clone.png',
|
||||
'delete':'delete.png',
|
||||
'group':'shape_group.png',
|
||||
'ungroup':'shape_ungroup.png',
|
||||
'move_top':'move_top.png',
|
||||
'move_bottom':'move_bottom.png',
|
||||
'to_path':'to_path.png',
|
||||
'link_controls':'link_controls.png',
|
||||
'reorient':'reorient.png',
|
||||
|
||||
'align_left':'align-left.png',
|
||||
'align_center':'align-center',
|
||||
'align_right':'align-right',
|
||||
'align_top':'align-top',
|
||||
'align_middle':'align-middle',
|
||||
'align_bottom':'align-bottom',
|
||||
|
||||
'go_up':'go-up.png',
|
||||
'go_down':'go-down.png',
|
||||
|
||||
'ok':'save.png',
|
||||
'cancel':'cancel.png',
|
||||
|
||||
'arrow_right':'flyouth.png',
|
||||
'arrow_down':'dropdown.gif'
|
||||
},
|
||||
placement: {
|
||||
'#logo':'logo',
|
||||
|
||||
'#tool_clear div,#layer_new':'new_image',
|
||||
'#tool_save div':'save',
|
||||
'#tool_open div div':'open',
|
||||
'#tool_import div div':'import',
|
||||
'#tool_source':'source',
|
||||
'#tool_docprops > div':'docprops',
|
||||
'#tool_wireframe':'wireframe',
|
||||
|
||||
'#tool_undo':'undo',
|
||||
'#tool_redo':'redo',
|
||||
|
||||
'#tool_select':'select',
|
||||
'#tool_fhpath':'pencil',
|
||||
'#tool_line':'pen',
|
||||
'#tool_rect,#tools_rect_show':'rect',
|
||||
'#tool_square':'square',
|
||||
'#tool_fhrect':'fh_rect',
|
||||
'#tool_ellipse,#tools_ellipse_show':'ellipse',
|
||||
'#tool_circle':'circle',
|
||||
'#tool_fhellipse':'fh_ellipse',
|
||||
'#tool_path':'path',
|
||||
'#tool_text,#layer_rename':'text',
|
||||
'#tool_image':'image',
|
||||
'#tool_zoom':'zoom',
|
||||
|
||||
'#tool_clone,#tool_clone_multi,#tool_node_clone':'clone',
|
||||
'#layer_delete,#tool_delete,#tool_delete_multi,#tool_node_delete':'delete',
|
||||
'#tool_add_subpath':'add_subpath',
|
||||
'#tool_move_top':'move_top',
|
||||
'#tool_move_bottom':'move_bottom',
|
||||
'#tool_topath':'to_path',
|
||||
'#tool_node_link':'link_controls',
|
||||
'#tool_reorient':'reorient',
|
||||
'#tool_group':'group',
|
||||
'#tool_ungroup':'ungroup',
|
||||
|
||||
'#tool_alignleft':'align_left',
|
||||
'#tool_aligncenter':'align_center',
|
||||
'#tool_alignright':'align_right',
|
||||
'#tool_aligntop':'align_top',
|
||||
'#tool_alignmiddle':'align_middle',
|
||||
'#tool_alignbottom':'align_bottom',
|
||||
|
||||
'#url_notice':'warning',
|
||||
|
||||
'#layer_up':'go_up',
|
||||
'#layer_down':'go_down',
|
||||
'#layerlist td.layervis':'eye',
|
||||
|
||||
'#tool_source_save,#tool_docprops_save':'ok',
|
||||
'#tool_source_cancel,#tool_docprops_cancel':'cancel',
|
||||
|
||||
'.flyout_arrow_horiz':'arrow_right',
|
||||
'.dropdown button, #main_button .dropdown':'arrow_down',
|
||||
'#palette .palette_item:first, #fill_bg, #stroke_bg':'no_color'
|
||||
},
|
||||
resize: {
|
||||
'#logo .svg_icon': 32,
|
||||
'.flyout_arrow_horiz .svg_icon': 5,
|
||||
'.layer_button .svg_icon, #layerlist td.layervis .svg_icon': 14,
|
||||
'.dropdown button .svg_icon': 7,
|
||||
'#main_button .dropdown .svg_icon': 9,
|
||||
'.palette_item:first .svg_icon, #fill_bg .svg_icon, #stroke_bg .svg_icon': 16,
|
||||
'.toolbar_button button .svg_icon':16
|
||||
},
|
||||
callback: function(icons) {
|
||||
$('.toolbar_button button > svg, .toolbar_button button > img').each(function() {
|
||||
$(this).parent().prepend(this);
|
||||
});
|
||||
|
||||
// Use small icons by default if not all left tools are visible
|
||||
var tleft = $('#tools_left');
|
||||
var min_height = tleft.offset().top + tleft.outerHeight();
|
||||
var size = $.pref('iconsize');
|
||||
if(size && size != 'm') {
|
||||
svgEditor.setIconSize(size);
|
||||
} else if($(window).height() < min_height) {
|
||||
// Make smaller
|
||||
svgEditor.setIconSize('s');
|
||||
}
|
||||
|
||||
// Look for any missing flyout icons from plugins
|
||||
$('.tools_flyout').each(function() {
|
||||
var shower = $('#' + this.id + '_show');
|
||||
var sel = shower.attr('data-curopt');
|
||||
// Check if there's an icon here
|
||||
if(!shower.children('svg, img').length) {
|
||||
var clone = $(sel).children().clone();
|
||||
clone[0].removeAttribute('style'); //Needed for Opera
|
||||
shower.append(clone);
|
||||
}
|
||||
});
|
||||
|
||||
svgEditor.runCallbacks();
|
||||
}
|
||||
});
|
||||
|
||||
Editor.canvas = svgCanvas = new $.SvgCanvas(document.getElementById("svgcanvas"), curConfig);
|
||||
|
||||
var palette = ["#000000","#202020","#404040","#606060","#808080","#a0a0a0","#c0c0c0","#e0e0e0","#ffffff","#800000","#ff0000","#808000","#ffff00","#008000","#00ff00","#008080","#00ffff","#000080","#0000ff","#800080","#ff00ff","#2b0000","#550000","#800000","#aa0000","#d40000","#ff0000","#ff2a2a","#ff5555","#ff8080","#ffaaaa","#ffd5d5","#280b0b","#501616","#782121","#a02c2c","#c83737","#d35f5f","#de8787","#e9afaf","#f4d7d7","#241c1c","#483737","#6c5353","#916f6f","#ac9393","#c8b7b7","#e3dbdb","#2b1100","#552200","#803300","#aa4400","#d45500","#ff6600","#ff7f2a","#ff9955","#ffb380","#ffccaa","#ffe6d5","#28170b","#502d16","#784421","#a05a2c","#c87137","#d38d5f","#deaa87","#e9c6af","#f4e3d7","#241f1c","#483e37","#6c5d53","#917c6f","#ac9d93","#c8beb7","#e3dedb","#2b2200","#554400","#806600","#aa8800","#d4aa00","#ffcc00","#ffd42a","#ffdd55","#ffe680","#ffeeaa","#fff6d5","#28220b","#504416","#786721","#a0892c","#c8ab37","#d3bc5f","#decd87","#e9ddaf","#f4eed7","#24221c","#484537","#6c6753","#918a6f","#aca793","#c8c4b7","#e3e2db","#222b00","#445500","#668000","#88aa00","#aad400","#ccff00","#d4ff2a","#ddff55","#e5ff80","#eeffaa","#f6ffd5","#22280b","#445016","#677821","#89a02c","#abc837","#bcd35f","#cdde87","#dde9af","#eef4d7","#22241c","#454837","#676c53","#8a916f","#a7ac93","#c4c8b7","#e2e3db","#112b00","#225500","#338000","#44aa00","#55d400","#66ff00","#7fff2a","#99ff55","#b3ff80","#ccffaa","#e5ffd5","#17280b","#2d5016","#447821","#5aa02c","#71c837","#8dd35f","#aade87","#c6e9af","#e3f4d7","#1f241c","#3e4837","#5d6c53","#7c916f","#9dac93","#bec8b7","#dee3db","#002b00","#005500","#008000","#00aa00","#00d400","#00ff00","#2aff2a","#55ff55","#80ff80","#aaffaa","#d5ffd5","#0b280b","#165016","#217821","#2ca02c","#37c837","#5fd35f","#87de87","#afe9af","#d7f4d7","#1c241c","#374837","#536c53","#6f916f","#93ac93","#b7c8b7","#dbe3db","#002b11","#005522","#008033","#00aa44","#00d455","#00ff66","#2aff80","#55ff99","#80ffb3","#aaffcc","#d5ffe6","#0b2817","#16502d","#217844","#2ca05a","#37c871","#5fd38d","#87deaa","#afe9c6","#d7f4e3","#1c241f","#37483e","#536c5d","#6f917c","#93ac9d","#b7c8be","#dbe3de","#002b22","#005544","#008066","#00aa88","#00d4aa","#00ffcc","#2affd5","#55ffdd","#80ffe6","#aaffee","#d5fff6","#0b2822","#165044","#217867","#2ca089","#37c8ab","#5fd3bc","#87decd","#afe9dd","#d7f4ee","#1c2422","#374845","#536c67","#6f918a","#93aca7","#b7c8c4","#dbe3e2","#00222b","#004455","#006680","#0088aa","#00aad4","#00ccff","#2ad4ff","#55ddff","#80e5ff","#aaeeff","#d5f6ff","#0b2228","#164450","#216778","#2c89a0","#37abc8","#5fbcd3","#87cdde","#afdde9","#d7eef4","#1c2224","#374548","#53676c","#6f8a91","#93a7ac","#b7c4c8","#dbe2e3","#00112b","#002255","#003380","#0044aa","#0055d4","#0066ff","#2a7fff","#5599ff","#80b3ff","#aaccff","#d5e5ff","#0b1728","#162d50","#214478","#2c5aa0","#3771c8","#5f8dd3","#87aade","#afc6e9","#d7e3f4","#1c1f24","#373e48","#535d6c","#6f7c91","#939dac","#b7bec8","#dbdee3","#00002b","#000055","#000080","#0000aa","#0000d4","#0000ff","#2a2aff","#5555ff","#8080ff","#aaaaff","#d5d5ff","#0b0b28","#161650","#212178","#2c2ca0","#3737c8","#5f5fd3","#8787de","#afafe9","#d7d7f4","#1c1c24","#373748","#53536c","#6f6f91","#9393ac","#b7b7c8","#dbdbe3","#11002b","#220055","#330080","#4400aa","#5500d4","#6600ff","#7f2aff","#9955ff","#b380ff","#ccaaff","#e5d5ff","#170b28","#2d1650","#442178","#5a2ca0","#7137c8","#8d5fd3","#aa87de","#c6afe9","#e3d7f4","#1f1c24","#3e3748","#5d536c","#7c6f91","#9d93ac","#beb7c8","#dedbe3","#22002b","#440055","#660080","#8800aa","#aa00d4","#cc00ff","#d42aff","#dd55ff","#e580ff","#eeaaff","#f6d5ff","#220b28","#441650","#672178","#892ca0","#ab37c8","#bc5fd3","#cd87de","#ddafe9","#eed7f4","#221c24","#453748","#67536c","#8a6f91","#a793ac","#c4b7c8","#e2dbe3","#2b0022","#550044","#800066","#aa0088","#d400aa","#ff00cc","#ff2ad4","#ff55dd","#ff80e5","#ffaaee","#ffd5f6","#280b22","#501644","#782167","#a02c89","#c837ab","#d35fbc","#de87cd","#e9afdd","#f4d7ee","#241c22","#483745","#6c5367","#916f8a","#ac93a7","#c8b7c4","#e3dbe2","#2b0011","#550022","#800033","#aa0044","#d40055","#ff0066","#ff2a7f","#ff5599","#ff80b2","#ffaacc","#ffd5e5","#280b17","#50162d","#782144","#a02c5a","#c83771","#d35f8d","#de87aa","#e9afc6","#f4d7e3","#241c1f","#48373e","#6c535d","#916f7c","#ac939d","#c8b7be","#e3dbde"],
|
||||
|
@ -179,7 +344,7 @@
|
|||
isMac = false, //(navigator.platform.indexOf("Mac") != -1);
|
||||
modKey = "", //(isMac ? "meta+" : "ctrl+");
|
||||
path = svgCanvas.pathActions,
|
||||
default_img_url = "images/logo.png",
|
||||
default_img_url = curConfig.imgPath + "logo.png",
|
||||
workarea = $("#workarea");
|
||||
|
||||
// This sets up alternative dialog boxes. They mostly work the same way as
|
||||
|
@ -424,6 +589,7 @@
|
|||
}
|
||||
|
||||
$(this).mouseup(func);
|
||||
|
||||
if(opts.key) {
|
||||
$(document).bind('keydown', {combi: opts.key+'', disableInInput:true}, func);
|
||||
}
|
||||
|
@ -1788,7 +1954,7 @@
|
|||
// set language
|
||||
var lang = $('#lang_select').val();
|
||||
if(lang != curPrefs.lang) {
|
||||
put_locale(Editor, lang);
|
||||
Editor.putLocale(lang);
|
||||
}
|
||||
|
||||
// set icon size
|
||||
|
@ -2774,6 +2940,30 @@
|
|||
|
||||
Actions.setAll();
|
||||
|
||||
// Select given tool
|
||||
Editor.ready(function() {
|
||||
var itool = curConfig.initTool,
|
||||
container = $("#tools_left, #svg_editor .tools_flyout"),
|
||||
pre_tool = container.find("#tool_" + itool),
|
||||
reg_tool = container.find("#" + itool);
|
||||
if(pre_tool.length) {
|
||||
tool = pre_tool;
|
||||
} else if(reg_tool.length){
|
||||
tool = reg_tool;
|
||||
} else {
|
||||
tool = $("#tool_select");
|
||||
}
|
||||
tool.click().mouseup();
|
||||
|
||||
if(curConfig.wireframe) {
|
||||
$('#tool_wireframe').click();
|
||||
}
|
||||
|
||||
if(curConfig.showlayers) {
|
||||
toggleSidePanel();
|
||||
}
|
||||
});
|
||||
|
||||
$('#rect_rx').SpinButton({ min: 0, max: 1000, step: 1, callback: changeRectRadius });
|
||||
$('#stroke_width').SpinButton({ min: 0, max: 99, step: 1, smallStep: 0.1, callback: changeStrokeWidth });
|
||||
$('#angle').SpinButton({ min: -180, max: 180, step: 5, callback: changeRotationAngle });
|
||||
|
@ -2879,7 +3069,7 @@
|
|||
updateCanvas(true);
|
||||
// });
|
||||
|
||||
// var revnums = "svg-editor.js ($Rev: 1461 $) ";
|
||||
// var revnums = "svg-editor.js ($Rev: 1468 $) ";
|
||||
// revnums += svgCanvas.getVersion();
|
||||
// $('#copyright')[0].setAttribute("title", revnums);
|
||||
|
||||
|
@ -2890,7 +3080,7 @@
|
|||
});
|
||||
|
||||
// var lang = ('lang' in curPrefs) ? curPrefs.lang : null;
|
||||
put_locale(Editor, null, good_langs);
|
||||
Editor.putLocale(null, good_langs);
|
||||
|
||||
try{
|
||||
json_encode = function(obj){
|
||||
|
@ -3021,166 +3211,12 @@
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return Editor;
|
||||
}();
|
||||
|
||||
// This process starts before document.ready so the icons appear ASAP
|
||||
$.svgIcons('images/svg_edit_icons.svg', {
|
||||
w:24, h:24,
|
||||
id_match: false,
|
||||
no_img: true,
|
||||
fallback_path:'images/',
|
||||
fallback:{
|
||||
'new_image':'clear.png',
|
||||
'save':'save.png',
|
||||
'open':'open.png',
|
||||
'source':'source.png',
|
||||
'docprops':'document-properties.png',
|
||||
'wireframe':'wireframe.png',
|
||||
|
||||
'undo':'undo.png',
|
||||
'redo':'redo.png',
|
||||
|
||||
'select':'select.png',
|
||||
'select_node':'select_node.png',
|
||||
'pencil':'fhpath.png',
|
||||
'pen':'line.png',
|
||||
'square':'square.png',
|
||||
'rect':'rect.png',
|
||||
'fh_rect':'freehand-square.png',
|
||||
'circle':'circle.png',
|
||||
'ellipse':'ellipse.png',
|
||||
'fh_ellipse':'freehand-circle.png',
|
||||
'path':'path.png',
|
||||
'text':'text.png',
|
||||
'image':'image.png',
|
||||
'zoom':'zoom.png',
|
||||
|
||||
'clone':'clone.png',
|
||||
'delete':'delete.png',
|
||||
'group':'shape_group.png',
|
||||
'ungroup':'shape_ungroup.png',
|
||||
'move_top':'move_top.png',
|
||||
'move_bottom':'move_bottom.png',
|
||||
'to_path':'to_path.png',
|
||||
'link_controls':'link_controls.png',
|
||||
'reorient':'reorient.png',
|
||||
|
||||
'align_left':'align-left.png',
|
||||
'align_center':'align-center',
|
||||
'align_right':'align-right',
|
||||
'align_top':'align-top',
|
||||
'align_middle':'align-middle',
|
||||
'align_bottom':'align-bottom',
|
||||
|
||||
'go_up':'go-up.png',
|
||||
'go_down':'go-down.png',
|
||||
|
||||
'ok':'save.png',
|
||||
'cancel':'cancel.png',
|
||||
|
||||
'arrow_right':'flyouth.png',
|
||||
'arrow_down':'dropdown.gif'
|
||||
},
|
||||
placement: {
|
||||
'#logo':'logo',
|
||||
|
||||
'#tool_clear div,#layer_new':'new_image',
|
||||
'#tool_save div':'save',
|
||||
'#tool_open div div':'open',
|
||||
'#tool_import div div':'import',
|
||||
'#tool_source':'source',
|
||||
'#tool_docprops > div':'docprops',
|
||||
'#tool_wireframe':'wireframe',
|
||||
|
||||
'#tool_undo':'undo',
|
||||
'#tool_redo':'redo',
|
||||
|
||||
'#tool_select':'select',
|
||||
'#tool_fhpath':'pencil',
|
||||
'#tool_line':'pen',
|
||||
'#tool_rect,#tools_rect_show':'rect',
|
||||
'#tool_square':'square',
|
||||
'#tool_fhrect':'fh_rect',
|
||||
'#tool_ellipse,#tools_ellipse_show':'ellipse',
|
||||
'#tool_circle':'circle',
|
||||
'#tool_fhellipse':'fh_ellipse',
|
||||
'#tool_path':'path',
|
||||
'#tool_text,#layer_rename':'text',
|
||||
'#tool_image':'image',
|
||||
'#tool_zoom':'zoom',
|
||||
|
||||
'#tool_clone,#tool_clone_multi,#tool_node_clone':'clone',
|
||||
'#layer_delete,#tool_delete,#tool_delete_multi,#tool_node_delete':'delete',
|
||||
'#tool_add_subpath':'add_subpath',
|
||||
'#tool_move_top':'move_top',
|
||||
'#tool_move_bottom':'move_bottom',
|
||||
'#tool_topath':'to_path',
|
||||
'#tool_node_link':'link_controls',
|
||||
'#tool_reorient':'reorient',
|
||||
'#tool_group':'group',
|
||||
'#tool_ungroup':'ungroup',
|
||||
|
||||
'#tool_alignleft':'align_left',
|
||||
'#tool_aligncenter':'align_center',
|
||||
'#tool_alignright':'align_right',
|
||||
'#tool_aligntop':'align_top',
|
||||
'#tool_alignmiddle':'align_middle',
|
||||
'#tool_alignbottom':'align_bottom',
|
||||
|
||||
'#url_notice':'warning',
|
||||
|
||||
'#layer_up':'go_up',
|
||||
'#layer_down':'go_down',
|
||||
'#layerlist td.layervis':'eye',
|
||||
|
||||
'#tool_source_save,#tool_docprops_save':'ok',
|
||||
'#tool_source_cancel,#tool_docprops_cancel':'cancel',
|
||||
|
||||
'.flyout_arrow_horiz':'arrow_right',
|
||||
'.dropdown button, #main_button .dropdown':'arrow_down',
|
||||
'#palette .palette_item:first, #fill_bg, #stroke_bg':'no_color'
|
||||
},
|
||||
resize: {
|
||||
'#logo .svg_icon': 32,
|
||||
'.flyout_arrow_horiz .svg_icon': 5,
|
||||
'.layer_button .svg_icon, #layerlist td.layervis .svg_icon': 14,
|
||||
'.dropdown button .svg_icon': 7,
|
||||
'#main_button .dropdown .svg_icon': 9,
|
||||
'.palette_item:first .svg_icon, #fill_bg .svg_icon, #stroke_bg .svg_icon': 16,
|
||||
'.toolbar_button button .svg_icon':16
|
||||
},
|
||||
callback: function(icons) {
|
||||
$('.toolbar_button button > svg, .toolbar_button button > img').each(function() {
|
||||
$(this).parent().prepend(this);
|
||||
});
|
||||
|
||||
// Use small icons by default if not all left tools are visible
|
||||
var tleft = $('#tools_left');
|
||||
var min_height = tleft.offset().top + tleft.outerHeight();
|
||||
var size = $.pref('iconsize');
|
||||
if(size && size != 'm') {
|
||||
svgEditor.setIconSize(size);
|
||||
} else if($(window).height() < min_height) {
|
||||
// Make smaller
|
||||
svgEditor.setIconSize('s');
|
||||
}
|
||||
|
||||
// Look for any missing flyout icons from plugins
|
||||
$('.tools_flyout').each(function() {
|
||||
var shower = $('#' + this.id + '_show');
|
||||
var sel = shower.attr('data-curopt');
|
||||
// Check if there's an icon here
|
||||
if(!shower.children('svg, img').length) {
|
||||
var clone = $(sel).children().clone();
|
||||
clone[0].removeAttribute('style'); //Needed for Opera
|
||||
shower.append(clone);
|
||||
}
|
||||
});
|
||||
|
||||
svgEditor.runCallbacks();
|
||||
}
|
||||
});
|
||||
}(jQuery);
|
||||
|
||||
// Run init once DOM is loaded
|
||||
$(svgEditor.init);
|
||||
|
@ -3190,6 +3226,7 @@
|
|||
// ?iconsize=s&bkgd_color=555
|
||||
|
||||
// svgEditor.setConfig({
|
||||
// // imgPath: 'foo',
|
||||
// dimensions: [800, 600],
|
||||
// canvas_expansion: 5,
|
||||
// initStroke: {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* svgcanvas.js
|
||||
*
|
||||
* Licensed under the Apache License, Version 2
|
||||
|
@ -450,6 +450,7 @@ function BatchCommand(text) {
|
|||
"stroke-width": "1"
|
||||
}
|
||||
}) );
|
||||
|
||||
this.rotateGrip = this.selectorGroup.appendChild( addSvgElementFromJson({
|
||||
"element": "circle",
|
||||
"attr": {
|
||||
|
@ -458,7 +459,7 @@ function BatchCommand(text) {
|
|||
"r": 4,
|
||||
"stroke": "#22C",
|
||||
"stroke-width": 2,
|
||||
"style": "cursor:url(images/rotate.png) 12 12, auto;"
|
||||
"style": "cursor:url(" + curConfig.imgPath + "rotate.png) 12 12, auto;"
|
||||
}
|
||||
}) );
|
||||
|
||||
|
@ -968,33 +969,33 @@ function BatchCommand(text) {
|
|||
|
||||
// map namespace URIs to prefixes
|
||||
var nsMap = {};
|
||||
nsMap[xlinkns] = 'xlink';
|
||||
nsMap[xmlns] = 'xml';
|
||||
nsMap[xmlnsns] = 'xmlns';
|
||||
nsMap[se_ns] = 'se';
|
||||
nsMap[htmlns] = 'xhtml';
|
||||
nsMap[mathns] = 'mathml';
|
||||
nsMap[xlinkns] = 'xlink';
|
||||
nsMap[xmlns] = 'xml';
|
||||
nsMap[xmlnsns] = 'xmlns';
|
||||
nsMap[se_ns] = 'se';
|
||||
nsMap[htmlns] = 'xhtml';
|
||||
nsMap[mathns] = 'mathml';
|
||||
|
||||
// map prefixes to namespace URIs
|
||||
var nsRevMap = {};
|
||||
$.each(nsMap, function(key,value){
|
||||
nsRevMap[value] = key;
|
||||
// map prefixes to namespace URIs
|
||||
var nsRevMap = {};
|
||||
$.each(nsMap, function(key,value){
|
||||
nsRevMap[value] = key;
|
||||
});
|
||||
|
||||
// Produce a Namespace-aware version of svgWhitelist
|
||||
var svgWhiteListNS = {};
|
||||
// Produce a Namespace-aware version of svgWhitelist
|
||||
var svgWhiteListNS = {};
|
||||
$.each(svgWhiteList, function(elt,atts){
|
||||
var attNS = {};
|
||||
$.each(atts, function(i, att){
|
||||
if (att.indexOf(':') != -1) {
|
||||
$.each(atts, function(i, att){
|
||||
if (att.indexOf(':') != -1) {
|
||||
var v = att.split(':');
|
||||
attNS[v[1]] = nsRevMap[v[0]];
|
||||
} else {
|
||||
attNS[att] = att == 'xmlns' ? xmlnsns : null;
|
||||
}
|
||||
});
|
||||
svgWhiteListNS[elt] = attNS;
|
||||
});
|
||||
attNS[v[1]] = nsRevMap[v[0]];
|
||||
} else {
|
||||
attNS[att] = att == 'xmlns' ? xmlnsns : null;
|
||||
}
|
||||
});
|
||||
svgWhiteListNS[elt] = attNS;
|
||||
});
|
||||
|
||||
var svgcontent = svgdoc.createElementNS(svgns, "svg");
|
||||
$(svgcontent).attr({
|
||||
|
@ -1192,7 +1193,7 @@ function BatchCommand(text) {
|
|||
// the first layer is the one at the bottom of the rendering
|
||||
var all_layers = [],
|
||||
encodableImages = {},
|
||||
last_good_img_url = 'images/logo.png',
|
||||
last_good_img_url = curConfig.imgPath + 'logo.png',
|
||||
// pointer to the current layer <g>
|
||||
current_layer = null,
|
||||
save_options = {round_digits: 5},
|
||||
|
@ -1326,7 +1327,7 @@ function BatchCommand(text) {
|
|||
if (randomize_ids) {
|
||||
return idprefix + nonce +'_' + obj_num;
|
||||
} else {
|
||||
return idprefix + obj_num;
|
||||
return idprefix + obj_num;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1382,7 +1383,7 @@ function BatchCommand(text) {
|
|||
// Check that an attribute with the correct localName in the correct namespace is on
|
||||
// our whitelist or is a namespace declaration for one of our allowed namespaces
|
||||
if (!(allowedAttrsNS.hasOwnProperty(attrLocalName) && attrNsURI == allowedAttrsNS[attrLocalName] && attrNsURI != xmlnsns) &&
|
||||
!(attrNsURI == xmlnsns && nsMap[attr.nodeValue]) )
|
||||
!(attrNsURI == xmlnsns && nsMap[attr.nodeValue]) )
|
||||
{
|
||||
// Bypassing the whitelist to allow se: prefixes. Is there
|
||||
// a more appropriate way to do this?
|
||||
|
@ -1577,21 +1578,21 @@ function BatchCommand(text) {
|
|||
// Process root element separately
|
||||
var res = canvas.getResolution();
|
||||
out.push(' width="' + res.w + '" height="' + res.h + '" xmlns="'+svgns+'"');
|
||||
var i = attrs.length;
|
||||
while (i--) {
|
||||
attr = attrs.item(i);
|
||||
var attrVal = toXml(attr.nodeValue);
|
||||
// only serialize attributes we don't use internally
|
||||
if (attrVal != "" &&
|
||||
$.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1)
|
||||
{
|
||||
if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
|
||||
var i = attrs.length;
|
||||
while (i--) {
|
||||
attr = attrs.item(i);
|
||||
var attrVal = toXml(attr.nodeValue);
|
||||
// only serialize attributes we don't use internally
|
||||
if (attrVal != "" &&
|
||||
$.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1)
|
||||
{
|
||||
if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
|
||||
out.push(' ');
|
||||
out.push(attr.nodeName); out.push("=\"");
|
||||
out.push(attrVal); out.push("\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
out.push(attrVal); out.push("\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (var i=attrs.length-1; i>=0; i--) {
|
||||
attr = attrs.item(i);
|
||||
|
@ -1618,12 +1619,12 @@ function BatchCommand(text) {
|
|||
}
|
||||
|
||||
// map various namespaces to our fixed namespace prefixes
|
||||
// (the default xmlns attribute itself does not get a prefix)
|
||||
// (the default xmlns attribute itself does not get a prefix)
|
||||
if(!attr.namespaceURI || attr.namespaceURI == svgns || nsMap[attr.namespaceURI]) {
|
||||
out.push(attr.nodeName); out.push("=\"");
|
||||
out.push(attrVal); out.push("\"");
|
||||
}
|
||||
}
|
||||
out.push(attr.nodeName); out.push("=\"");
|
||||
out.push(attrVal); out.push("\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2211,14 +2212,14 @@ function BatchCommand(text) {
|
|||
var childTlist = canvas.getTransformList(child);
|
||||
// some children might not have a transform (<metadata>, <defs>, etc)
|
||||
if (childTlist) {
|
||||
var newxlate = svgroot.createSVGTransform();
|
||||
newxlate.setTranslate(tx,ty);
|
||||
childTlist.insertItemBefore(newxlate, 0);
|
||||
batchCmd.addSubCommand( recalculateDimensions(child) );
|
||||
start_transform = old_start_transform;
|
||||
var newxlate = svgroot.createSVGTransform();
|
||||
newxlate.setTranslate(tx,ty);
|
||||
childTlist.insertItemBefore(newxlate, 0);
|
||||
batchCmd.addSubCommand( recalculateDimensions(child) );
|
||||
start_transform = old_start_transform;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
start_transform = old_start_transform;
|
||||
}
|
||||
}
|
||||
|
@ -3142,7 +3143,7 @@ function BatchCommand(text) {
|
|||
$.each(ext_result, function(i, r) {
|
||||
if(r && r.started) {
|
||||
started = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -3667,7 +3668,7 @@ function BatchCommand(text) {
|
|||
keep = r.keep || keep;
|
||||
element = r.element;
|
||||
started = r.started || started;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!keep && element != null) {
|
||||
|
@ -3711,19 +3712,19 @@ function BatchCommand(text) {
|
|||
// but that doesn't seem to be supported in Webkit
|
||||
setTimeout(function() {
|
||||
if(c_ani) c_ani.remove();
|
||||
element.setAttribute("opacity", cur_shape.opacity);
|
||||
element.setAttribute("style", "pointer-events:inherit");
|
||||
cleanupElement(element);
|
||||
if(current_mode == "path") {
|
||||
pathActions.toEditMode(element);
|
||||
} else if (current_mode == "text" || current_mode == "image" || current_mode == "foreignObject") {
|
||||
// keep us in the tool we were in unless it was a text or image element
|
||||
canvas.addToSelection([element], true);
|
||||
}
|
||||
// we create the insert command that is stored on the stack
|
||||
// undo means to call cmd.unapply(), redo means to call cmd.apply()
|
||||
addCommandToHistory(new InsertElementCommand(element));
|
||||
call("changed",[element]);
|
||||
element.setAttribute("opacity", cur_shape.opacity);
|
||||
element.setAttribute("style", "pointer-events:inherit");
|
||||
cleanupElement(element);
|
||||
if(current_mode == "path") {
|
||||
pathActions.toEditMode(element);
|
||||
} else if (current_mode == "text" || current_mode == "image" || current_mode == "foreignObject") {
|
||||
// keep us in the tool we were in unless it was a text or image element
|
||||
canvas.addToSelection([element], true);
|
||||
}
|
||||
// we create the insert command that is stored on the stack
|
||||
// undo means to call cmd.unapply(), redo means to call cmd.apply()
|
||||
addCommandToHistory(new InsertElementCommand(element));
|
||||
call("changed",[element]);
|
||||
}, ani_dur * 1000);
|
||||
}
|
||||
|
||||
|
@ -3861,15 +3862,15 @@ function BatchCommand(text) {
|
|||
grip.dblclick(function() {
|
||||
path.setSegType();
|
||||
});
|
||||
}
|
||||
}
|
||||
if(x && y) {
|
||||
// set up the point grip element and display it
|
||||
assignAttributes(pointGrip, {
|
||||
'cx': x,
|
||||
'cy': y,
|
||||
'display': "inline"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
return pointGrip;
|
||||
};
|
||||
|
||||
|
@ -3884,7 +3885,7 @@ function BatchCommand(text) {
|
|||
'cy': pt.y,
|
||||
'display': "inline"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return pointGrip;
|
||||
}
|
||||
|
@ -3927,9 +3928,9 @@ function BatchCommand(text) {
|
|||
}
|
||||
|
||||
replacePathSeg(seg.type, 1, pts, segLine);
|
||||
}
|
||||
}
|
||||
return segLine;
|
||||
}
|
||||
}
|
||||
|
||||
var getControlPoints = function(seg) {
|
||||
var item = seg.item;
|
||||
|
@ -3987,17 +3988,17 @@ function BatchCommand(text) {
|
|||
'xlink:title': uiStrings.pathCtrlPtTooltip
|
||||
});
|
||||
pointGripContainer.appendChild(pointGrip);
|
||||
}
|
||||
}
|
||||
|
||||
assignAttributes(pointGrip, {
|
||||
'cx': pt.x,
|
||||
'cy': pt.y,
|
||||
'display': "inline"
|
||||
});
|
||||
});
|
||||
cpt['c' + i] = pointGrip;
|
||||
}
|
||||
return cpt;
|
||||
}
|
||||
}
|
||||
|
||||
function getGripPt(seg, alt_pt) {
|
||||
var out = {
|
||||
|
@ -4015,7 +4016,7 @@ function BatchCommand(text) {
|
|||
out.y *= current_zoom;
|
||||
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
function getPointFromGrip(pt, path) {
|
||||
var out = {
|
||||
|
@ -4057,7 +4058,7 @@ function BatchCommand(text) {
|
|||
|
||||
// Show/hide all control points if available
|
||||
s.showCtrlPts(y);
|
||||
}
|
||||
}
|
||||
}
|
||||
s.select = function(y) {
|
||||
if(grip) {
|
||||
|
@ -4101,9 +4102,9 @@ function BatchCommand(text) {
|
|||
if(cur.ctrlpts) {
|
||||
var cur_pts = [item.x += dx, item.y += dy,
|
||||
item.x1, item.y1, item.x2 += dx, item.y2 += dy];
|
||||
} else {
|
||||
} else {
|
||||
var cur_pts = [item.x += dx, item.y += dy];
|
||||
}
|
||||
}
|
||||
replacePathSeg(cur.type, cur.index, cur_pts);
|
||||
|
||||
if(s.next && s.next.ctrlpts) {
|
||||
|
@ -4161,7 +4162,7 @@ function BatchCommand(text) {
|
|||
|
||||
replacePathSeg(s.type, s.index, pts);
|
||||
s.update(true);
|
||||
}
|
||||
}
|
||||
s.setType = function(new_type, pts) {
|
||||
replacePathSeg(new_type, index, pts);
|
||||
s.type = new_type;
|
||||
|
@ -4169,15 +4170,15 @@ function BatchCommand(text) {
|
|||
s.showCtrlPts(new_type === 6);
|
||||
s.ctrlpts = getControlPoints(s);
|
||||
s.update(true);
|
||||
}
|
||||
}
|
||||
s.showCtrlPts = function(y) {
|
||||
if(s.ctrlpts) {
|
||||
for (var o in s.ctrlpts) {
|
||||
s.ctrlpts[o].setAttribute("display", y?"inline":"none");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Path(elem) {
|
||||
if(!elem || elem.tagName !== "path") return false;
|
||||
|
@ -4202,7 +4203,7 @@ function BatchCommand(text) {
|
|||
var segment = new Segment(i, item);
|
||||
segment.path = p;
|
||||
p.segs.push(segment);
|
||||
}
|
||||
}
|
||||
|
||||
var segs = p.segs;
|
||||
var start_i = null;
|
||||
|
@ -4234,7 +4235,7 @@ function BatchCommand(text) {
|
|||
seg.addGrip();
|
||||
if(!p.first_seg) {
|
||||
p.first_seg = seg;
|
||||
}
|
||||
}
|
||||
} else if(!next_seg) {
|
||||
if(seg.type !== 1) {
|
||||
// Last seg, doesn't close so add a grip
|
||||
|
@ -4258,11 +4259,11 @@ function BatchCommand(text) {
|
|||
if(next_seg && next_seg.type !== 2) {
|
||||
seg.next = next_seg;
|
||||
seg.next.prev = seg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
this.init();
|
||||
|
||||
|
@ -4272,7 +4273,7 @@ function BatchCommand(text) {
|
|||
var tlist = canvas.getTransformList(path.elem);
|
||||
p.matrix = transformListToTransform(tlist).matrix;
|
||||
p.imatrix = p.matrix.inverse();
|
||||
}
|
||||
}
|
||||
|
||||
p.eachSeg(function(i) {
|
||||
this.item = elem.pathSegList.getItem(i);
|
||||
|
@ -4301,7 +4302,7 @@ function BatchCommand(text) {
|
|||
var newseg = elem.createSVGPathSegLinetoAbs(new_x, new_y);
|
||||
if(support.pathInsertItemBefore) {
|
||||
list.insertItemBefore(newseg, index);
|
||||
} else {
|
||||
} else {
|
||||
insertItemBefore(elem, newseg, index);
|
||||
}
|
||||
|
||||
|
@ -4339,7 +4340,7 @@ function BatchCommand(text) {
|
|||
var cmd = new ChangeElementCommand(elem, {d: p.last_d}, text);
|
||||
addCommandToHistory(cmd);
|
||||
call("changed", [elem]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.addPtsToSelection = function(indexes) {
|
||||
|
@ -4365,7 +4366,7 @@ function BatchCommand(text) {
|
|||
}
|
||||
pathActions.canDeleteNodes = true;
|
||||
call("selected", grips);
|
||||
}
|
||||
}
|
||||
|
||||
this.removePtFromSelection = function(index) {
|
||||
var pos = $.inArray(index, p.selected_pts);
|
||||
|
@ -4424,8 +4425,8 @@ function BatchCommand(text) {
|
|||
while(i--) {
|
||||
var seg = p.segs[p.selected_pts[i]];
|
||||
seg.move(d_x, d_y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.moveCtrl = function(d_x, d_y) {
|
||||
var seg = p.segs[p.selected_pts[0]];
|
||||
|
@ -4454,7 +4455,7 @@ function BatchCommand(text) {
|
|||
var old_type = cur.type;
|
||||
|
||||
new_type = (old_type == 6) ? 4 : 6;
|
||||
}
|
||||
}
|
||||
|
||||
new_type = new_type-0;
|
||||
|
||||
|
@ -4477,7 +4478,7 @@ function BatchCommand(text) {
|
|||
var ct2_x = (cur_x + (diff_y/2));
|
||||
var ct2_y = (cur_y - (diff_x/2));
|
||||
points = [cur_x,cur_y, ct1_x,ct1_y, ct2_x,ct2_y];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
points = [cur_x,cur_y];
|
||||
|
@ -4546,20 +4547,20 @@ function BatchCommand(text) {
|
|||
prevArr[3] = newpts[0].y;
|
||||
d[d.length-1] = prevArr.join(',');
|
||||
ct1 = newpts[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d.push([ct1.x,ct1.y,ct2.x,ct2.y,end.x,end.y].join(','));
|
||||
|
||||
curpos = end;
|
||||
prevCtlPt = ct2;
|
||||
}
|
||||
}
|
||||
// handle remaining line segments
|
||||
d.push("L");
|
||||
for(;i < N;++i) {
|
||||
var pt = points.getItem(i);
|
||||
d.push([pt.x,pt.y].join(","));
|
||||
}
|
||||
}
|
||||
d = d.join(" ");
|
||||
|
||||
// create new path element
|
||||
|
@ -4576,10 +4577,10 @@ function BatchCommand(text) {
|
|||
"stroke-opacity": cur_shape.stroke_opacity,
|
||||
"fill-opacity": cur_shape.fill_opacity,
|
||||
"style": "pointer-events:inherit"
|
||||
}
|
||||
}
|
||||
});
|
||||
call("changed",[element]);
|
||||
}
|
||||
}
|
||||
return element;
|
||||
};
|
||||
|
||||
|
@ -4610,7 +4611,7 @@ function BatchCommand(text) {
|
|||
}
|
||||
}
|
||||
|
||||
// If the path was rotated, we must now pay the piper:
|
||||
// If the path was rotated, we must now pay the piper:
|
||||
// Every path point must be rotated into the rotated coordinate system of
|
||||
// its old center, then determine the new center, then rotate it back
|
||||
// This is because we want the path to remember its rotation
|
||||
|
@ -4961,7 +4962,7 @@ function BatchCommand(text) {
|
|||
|
||||
if(hasMoved) {
|
||||
path.endChanges("Move path point(s)");
|
||||
}
|
||||
}
|
||||
|
||||
if(!evt.shiftKey && !hasMoved) {
|
||||
path.selectPt(last_pt);
|
||||
|
@ -5156,7 +5157,7 @@ function BatchCommand(text) {
|
|||
while(i--) {
|
||||
var pt = sel_pts[i];
|
||||
path.deleteSeg(pt);
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
var cleanup = function() {
|
||||
|
@ -5264,13 +5265,13 @@ function BatchCommand(text) {
|
|||
var newseg = elem.createSVGPathSegLinetoAbs(last_m.x, last_m.y);
|
||||
if(support.pathInsertItemBefore) {
|
||||
segList.insertItemBefore(newseg, i);
|
||||
} else {
|
||||
} else {
|
||||
insertItemBefore(elem, newseg, i);
|
||||
}
|
||||
}
|
||||
// Can this be done better?
|
||||
pathActions.fixEnd(elem);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -5463,9 +5464,9 @@ function BatchCommand(text) {
|
|||
// TODO: make this list global so that we can properly maintain it
|
||||
// TODO: what about @transform, @clip-rule, @fill-rule, etc?
|
||||
$.each(['marker-start', 'marker-end', 'marker-mid', 'filter', 'clip-path'], function() {
|
||||
if (elem.getAttribute(this)) {
|
||||
attrs[this] = elem.getAttribute(this);
|
||||
}
|
||||
if (elem.getAttribute(this)) {
|
||||
attrs[this] = elem.getAttribute(this);
|
||||
}
|
||||
});
|
||||
|
||||
var path = addSvgElementFromJson({
|
||||
|
@ -5781,7 +5782,7 @@ function BatchCommand(text) {
|
|||
} else {
|
||||
attrs[dim] = convertToNum(dim, val);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
content.attr(attrs);
|
||||
|
@ -5840,7 +5841,7 @@ function BatchCommand(text) {
|
|||
// import new svg document into our document
|
||||
var importedNode = svgdoc.importNode(newDoc.documentElement, true);
|
||||
|
||||
if (current_layer) {
|
||||
if (current_layer) {
|
||||
// TODO: properly handle if width/height are not specified or if in percentages
|
||||
// TODO: properly handle if width/height are in units (px, etc)
|
||||
var innerw = importedNode.getAttribute("width"),
|
||||
|
@ -5864,8 +5865,8 @@ function BatchCommand(text) {
|
|||
if (vb[0] != 0 || vb[1] != 0)
|
||||
ts = "translate(" + (-vb[0]) + "," + (-vb[1]) + ") " + ts;
|
||||
|
||||
// add all children of the imported <svg> to the <g> we create
|
||||
var g = svgdoc.createElementNS(svgns, "g");
|
||||
// add all children of the imported <svg> to the <g> we create
|
||||
var g = svgdoc.createElementNS(svgns, "g");
|
||||
while (importedNode.hasChildNodes())
|
||||
g.appendChild(importedNode.firstChild);
|
||||
if (ts)
|
||||
|
@ -6732,13 +6733,13 @@ function BatchCommand(text) {
|
|||
while (i--) {
|
||||
var og = existing_grads[i];
|
||||
if(grad.tagName == "linearGradient") {
|
||||
if (grad.getAttribute('x1') != og.getAttribute('x1') ||
|
||||
grad.getAttribute('y1') != og.getAttribute('y1') ||
|
||||
grad.getAttribute('x2') != og.getAttribute('x2') ||
|
||||
grad.getAttribute('y2') != og.getAttribute('y2'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (grad.getAttribute('x1') != og.getAttribute('x1') ||
|
||||
grad.getAttribute('y1') != og.getAttribute('y1') ||
|
||||
grad.getAttribute('x2') != og.getAttribute('x2') ||
|
||||
grad.getAttribute('y2') != og.getAttribute('y2'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
var grad_attrs = $(grad).attr(rad_attrs);
|
||||
var og_attrs = $(og).attr(rad_attrs);
|
||||
|
@ -7815,10 +7816,10 @@ function BatchCommand(text) {
|
|||
$.each(elems, function(i, elem) {
|
||||
var cur_bb = getCheckedBBox(elem);
|
||||
if(cur_bb) {
|
||||
var offset = getOffset(elem);
|
||||
min_x = Math.min(min_x, cur_bb.x - offset);
|
||||
min_y = Math.min(min_y, cur_bb.y - offset);
|
||||
bboxes.push(cur_bb);
|
||||
var offset = getOffset(elem);
|
||||
min_x = Math.min(min_x, cur_bb.x - offset);
|
||||
min_y = Math.min(min_y, cur_bb.y - offset);
|
||||
bboxes.push(cur_bb);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -7829,9 +7830,9 @@ function BatchCommand(text) {
|
|||
var cur_bb = bboxes[i];
|
||||
// ensure that elem is really an element node
|
||||
if (cur_bb && elem.nodeType == 1) {
|
||||
var offset = getOffset(elem);
|
||||
max_x = Math.max(max_x, cur_bb.x + cur_bb.width + offset);
|
||||
max_y = Math.max(max_y, cur_bb.y + cur_bb.height + offset);
|
||||
var offset = getOffset(elem);
|
||||
max_x = Math.max(max_x, cur_bb.x + cur_bb.width + offset);
|
||||
max_y = Math.max(max_y, cur_bb.y + cur_bb.height + offset);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -8110,7 +8111,7 @@ function BatchCommand(text) {
|
|||
// Function: getVersion
|
||||
// Returns a string which describes the revision number of SvgCanvas.
|
||||
this.getVersion = function() {
|
||||
return "svgcanvas.js ($Rev: 1459 $)";
|
||||
return "svgcanvas.js ($Rev: 1464 $)";
|
||||
};
|
||||
|
||||
this.setUiStrings = function(strs) {
|
||||
|
|
Loading…
Reference in a new issue