Possibly fixed issue 191 by adding an option in the doc props
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@951 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
e4ead69e6d
commit
899a812b4a
|
@ -678,6 +678,14 @@ span.zoom_tool {
|
|||
display: none;
|
||||
}
|
||||
|
||||
#image_save_opts label {
|
||||
font-size: .9em;
|
||||
}
|
||||
|
||||
#image_save_opts input {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#svg_docprops #svg_docprops_overlay {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
|
|
|
@ -377,7 +377,7 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
|
|||
<label><span id="svginfo_width">Width:</span> <input type="text" id="canvas_width" size="6"></label>
|
||||
|
||||
<label><span id="svginfo_height">Height:</span> <input type="text" id="canvas_height" size="6"></label>
|
||||
|
||||
|
||||
<label>
|
||||
<select id="resolution">
|
||||
<option id="selectedPredefined" selected="selected">Select predefined:</option>
|
||||
|
@ -391,6 +391,13 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
|
|||
</label>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="image_save_opts">
|
||||
<legend id="includedImages">Included Images</legend>
|
||||
<label><input type="radio" name="image_opt" value="ref" checked="checked"/> <span id="image_opt_ref">Use file reference</span> </label>
|
||||
<label><input type="radio" name="image_opt" value="embed"/> <span id="image_opt_embed">Embed data (local files)</span> </label>
|
||||
</fieldset>
|
||||
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="svg_docprops_prefs">
|
||||
|
|
|
@ -19,7 +19,8 @@ function svg_edit_setup() {
|
|||
'QmoveElemsToLayer':"Move selected elements to layer '%s'?",
|
||||
'QwantToClear':'Do you want to clear the drawing?\nThis will also erase your undo history!',
|
||||
'QerrorsRevertToSource':'There were parsing errors in your SVG source.\nRevert back to original SVG source?',
|
||||
'QignoreSourceChanges':'Ignore changes made to SVG source?'
|
||||
'QignoreSourceChanges':'Ignore changes made to SVG source?',
|
||||
'featNotSupported':'Feature not supported'
|
||||
};
|
||||
|
||||
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"]
|
||||
|
@ -71,7 +72,8 @@ function svg_edit_setup() {
|
|||
lang:'en',
|
||||
iconsize:'m',
|
||||
bg_color:'#FFF',
|
||||
bg_url:''
|
||||
bg_url:'',
|
||||
img_save:'ref'
|
||||
};
|
||||
|
||||
var setSelectMode = function() {
|
||||
|
@ -840,7 +842,12 @@ function svg_edit_setup() {
|
|||
};
|
||||
|
||||
var clickSave = function(){
|
||||
svgCanvas.save();
|
||||
// In the future, more options can be provided here
|
||||
var saveOpts = {
|
||||
'images': curPrefs.img_save,
|
||||
'round_digits': 6
|
||||
}
|
||||
svgCanvas.save(saveOpts);
|
||||
};
|
||||
|
||||
var clickOpen = function(){
|
||||
|
@ -930,10 +937,14 @@ function svg_edit_setup() {
|
|||
|
||||
$('#svg_docprops_container').draggable({cancel:'button,fieldset'});
|
||||
|
||||
|
||||
var showDocProperties = function(){
|
||||
if (docprops) return;
|
||||
docprops = true;
|
||||
|
||||
// This selects the correct radio button by using the array notation
|
||||
$('#image_save_opts input').val([curPrefs.img_save]);
|
||||
|
||||
// update resolution option with actual resolution
|
||||
// TODO: what if SVG source is changed?
|
||||
var res = svgCanvas.getResolution();
|
||||
|
@ -1005,6 +1016,9 @@ function svg_edit_setup() {
|
|||
return false;
|
||||
}
|
||||
|
||||
// set image save option
|
||||
curPrefs.img_save = $('#image_save_opts :checked').val();
|
||||
|
||||
// set background
|
||||
var color = $('#bg_blocks div.cur_background').css('background') || '#FFF';
|
||||
setBackground(color, $('#canvas_bg_url').val());
|
||||
|
@ -1210,6 +1224,7 @@ function svg_edit_setup() {
|
|||
$('#svg_docprops').hide();
|
||||
$('#canvas_width,#canvas_height').removeAttr('disabled');
|
||||
$('#resolution')[0].selectedIndex = 0;
|
||||
$('#image_save_opts input').val([curPrefs.img_save]);
|
||||
docprops = false;
|
||||
};
|
||||
|
||||
|
@ -1501,7 +1516,16 @@ function svg_edit_setup() {
|
|||
test_el.setAttribute('style','vector-effect:non-scaling-stroke');
|
||||
var supportsNonSS = (test_el.style.vectorEffect == 'non-scaling-stroke');
|
||||
test_el.removeAttribute('style');
|
||||
|
||||
|
||||
// Test for embedImage support (use timeout to not interfere with page load)
|
||||
setTimeout(function() {
|
||||
var img = svgCanvas.embedImage('images/logo.png');
|
||||
if(img.indexOf('data:') !== 0) {
|
||||
// Disable option
|
||||
$('#image_save_opts [value=embed]').attr('disabled','disabled');
|
||||
$('#image_opt_embed').css('color','#666').attr('title',uiStrings.featNotSupported);
|
||||
}
|
||||
},1000);
|
||||
|
||||
$('#fill_color').click(function(){
|
||||
colorPicker($(this));
|
||||
|
@ -1839,6 +1863,7 @@ function svg_edit_setup() {
|
|||
|
||||
function stepZoom(elem, step) {
|
||||
var orig_val = elem.value-0;
|
||||
if(orig_val === 0) return 100;
|
||||
var sug_val = orig_val + step;
|
||||
if(step === 0) return orig_val;
|
||||
|
||||
|
|
|
@ -828,7 +828,7 @@ function BatchCommand(text) {
|
|||
var all_layers = [];
|
||||
// pointer to the current layer <g>
|
||||
var current_layer = null;
|
||||
|
||||
var save_options = {round_digits: 5};
|
||||
var d_attr = null;
|
||||
var started = false;
|
||||
var obj_num = 1;
|
||||
|
@ -1107,6 +1107,15 @@ function BatchCommand(text) {
|
|||
if(!isNaN(attrVal)) {
|
||||
attrVal = shortFloat(attrVal);
|
||||
}
|
||||
|
||||
// Embed images when saving
|
||||
if(save_options.apply
|
||||
&& elem.nodeName == 'image'
|
||||
&& attr.localName == 'href'
|
||||
&& save_options.images
|
||||
&& save_options.images == 'embed') {
|
||||
attrVal = canvas.embedImage(attrVal);
|
||||
}
|
||||
// map various namespaces to our fixed namespace prefixes
|
||||
// TODO: put this into a map and do a look-up instead of if-else
|
||||
if (attr.namespaceURI == xlinkns) {
|
||||
|
@ -1164,6 +1173,44 @@ function BatchCommand(text) {
|
|||
return out.join('');
|
||||
}; // end svgToString()
|
||||
|
||||
this.embedImage = function(val, img, attempts) {
|
||||
var result;
|
||||
|
||||
if(!attempts) attempts = 0;
|
||||
// Prevent endless loop if image cannot be loaded
|
||||
if(attempts > 100) return val;
|
||||
attempts++;
|
||||
|
||||
// Below is some code to fetch the data: URL representation
|
||||
// of local image files. It is commented out until we figure out
|
||||
// a way of introducing this as an option into the UI. Also, it
|
||||
// does not work in Firefox at all :(
|
||||
|
||||
// load in the image and once it's loaded, get the dimensions
|
||||
if(!img) {
|
||||
img = document.createElement("img");
|
||||
img.setAttribute("src", val);
|
||||
}
|
||||
|
||||
if (img.width > 0 && img.height > 0) {
|
||||
// create a canvas the same size as the raster image
|
||||
var canvas = document.createElement("canvas");
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
// load the raster image into the canvas
|
||||
canvas.getContext("2d").drawImage(img,0,0);
|
||||
// retrieve the data: URL
|
||||
try {
|
||||
result = canvas.toDataURL();
|
||||
} catch(e) {
|
||||
result = val;
|
||||
}
|
||||
}
|
||||
if(result) return result;
|
||||
|
||||
return canvas.embedImage(val, img, attempts);
|
||||
}
|
||||
|
||||
// importNode, like cloneNode, causes the comma-to-period
|
||||
// issue in Opera/Win/non-en. Thankfully we can compare to the original XML
|
||||
// and simply use the original value when necessary
|
||||
|
@ -2785,7 +2832,7 @@ function BatchCommand(text) {
|
|||
}; // mouseMove()
|
||||
|
||||
var shortFloat = function(val) {
|
||||
var digits = 5;
|
||||
var digits = save_options.round_digits;
|
||||
if(!isNaN(val)) {
|
||||
return Number(Number(val).toFixed(digits));
|
||||
} else if($.isArray(val)) {
|
||||
|
@ -3843,9 +3890,12 @@ function BatchCommand(text) {
|
|||
//
|
||||
// Returns:
|
||||
// Nothing
|
||||
this.save = function() {
|
||||
this.save = function(opts) {
|
||||
// remove the selected outline before serializing
|
||||
this.clearSelection();
|
||||
// Update save options if provided
|
||||
if(opts) $.extend(save_options, opts);
|
||||
save_options.apply = true;
|
||||
|
||||
var str = "<?xml version=\"1.0\" standalone=\"no\"?>\n";
|
||||
// no need for doctype, see http://jwatt.org/svg/authoring/#doctype-declaration
|
||||
|
@ -3869,6 +3919,7 @@ function BatchCommand(text) {
|
|||
// Returns:
|
||||
// The current drawing as raw SVG XML text.
|
||||
this.getSvgString = function() {
|
||||
save_options.apply = false;
|
||||
return svgCanvasToString();
|
||||
};
|
||||
|
||||
|
@ -5042,35 +5093,6 @@ function BatchCommand(text) {
|
|||
};
|
||||
|
||||
this.setImageURL = function(val) {
|
||||
// Below is some code to fetch the data: URL representation
|
||||
// of local image files. It is commented out until we figure out
|
||||
// a way of introducing this as an option into the UI. Also, it
|
||||
// does not work in Firefox at all :(
|
||||
/*
|
||||
// load in the image and once it's loaded, get the dimensions
|
||||
var img = document.createElement("img");
|
||||
var svgCanvas = this;
|
||||
img.addEventListener("load", function(evt) {
|
||||
if (this.width > 0 && this.height > 0) {
|
||||
// create a canvas the same size as the raster image
|
||||
var canvas = document.createElement("canvas");
|
||||
canvas.width = this.width;
|
||||
canvas.height = this.height;
|
||||
// load the raster image into the canvas
|
||||
canvas.getContext("2d").drawImage(img,0,0);
|
||||
// retrieve the data: URL
|
||||
try {
|
||||
var dataurl = canvas.toDataURL();
|
||||
svgCanvas.changeSelectedAttribute("#href", dataurl);
|
||||
} catch(e) {
|
||||
// if we get an exception, just set the href to the URL
|
||||
svgCanvas.changeSelectedAttribute("#href", val);
|
||||
}
|
||||
}
|
||||
}, false);
|
||||
img.setAttribute("src", val);
|
||||
*/
|
||||
|
||||
svgCanvas.changeSelectedAttribute("#href", val);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue