Issue 392: Can now open local files in SVG-edit in Firefox 3.6 (File API).
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1196 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
f00068c02c
commit
5bd91643bd
|
@ -307,7 +307,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
#svg_editor div.toolset,
|
#svg_editor div.toolset,
|
||||||
#svg_editor div.toolset > *{
|
#svg_editor div.toolset > * {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,6 +442,35 @@ span.zoom_tool {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.fileinputs {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.fakefile {
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
left: 2px;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.fileinputs svg {
|
||||||
|
position: relative;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
z-index: 2;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* the file input control is placed on top but made invisible */
|
||||||
|
/* TODO: is moz-opacity really needed? filter? */
|
||||||
|
input.file {
|
||||||
|
position: relative;
|
||||||
|
text-align: right;
|
||||||
|
-moz-opacity: 0;
|
||||||
|
filter:alpha(opacity: 0);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
#svg_editor .tool_button_current,
|
#svg_editor .tool_button_current,
|
||||||
#svg_editor .push_button_pressed {
|
#svg_editor .push_button_pressed {
|
||||||
border-left: 1px solid #808080;
|
border-left: 1px solid #808080;
|
||||||
|
@ -608,6 +637,7 @@ span.zoom_tool {
|
||||||
/* width: 450px;*/
|
/* width: 450px;*/
|
||||||
font-family: Verdana, Helvetica, sans-serif;
|
font-family: Verdana, Helvetica, sans-serif;
|
||||||
font-size: .8em;
|
font-size: .8em;
|
||||||
|
z-index: 20001;
|
||||||
}
|
}
|
||||||
|
|
||||||
#svg_docprops #resolution {
|
#svg_docprops #resolution {
|
||||||
|
@ -723,6 +753,7 @@ span.zoom_tool {
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
background-color: black;
|
background-color: black;
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
|
z-index: 20000;
|
||||||
}
|
}
|
||||||
|
|
||||||
button#tool_source_save,
|
button#tool_source_save,
|
||||||
|
|
|
@ -84,7 +84,13 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
|
||||||
<!-- File-like buttons: New, Save, Source -->
|
<!-- File-like buttons: New, Save, Source -->
|
||||||
<div id="file_panel">
|
<div id="file_panel">
|
||||||
<div class="push_button" id="tool_clear" title="New Image [N]"></div>
|
<div class="push_button" id="tool_clear" title="New Image [N]"></div>
|
||||||
<div class="push_button" id="tool_open" title="Open Image [O]" style="display:none"></div>
|
|
||||||
|
<div id="fileinputs" class="fileinputs push_button" style="display: none">
|
||||||
|
<div class="fakefile">
|
||||||
|
<div id="tool_open" title="Open Image [O]" ></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="push_button" id="tool_save" title="Save Image [S]"></div>
|
<div class="push_button" id="tool_save" title="Save Image [S]"></div>
|
||||||
<div class="push_button" id="tool_docprops" title="Document Properties [I]"></div>
|
<div class="push_button" id="tool_docprops" title="Document Properties [I]"></div>
|
||||||
<div class="push_button" id="tool_source" title="Edit Source [U]"></div>
|
<div class="push_button" id="tool_source" title="Edit Source [U]"></div>
|
||||||
|
|
|
@ -1081,7 +1081,6 @@ function svg_edit_setup() {
|
||||||
|
|
||||||
$('#svg_docprops_container').draggable({cancel:'button,fieldset'});
|
$('#svg_docprops_container').draggable({cancel:'button,fieldset'});
|
||||||
|
|
||||||
|
|
||||||
var showDocProperties = function(){
|
var showDocProperties = function(){
|
||||||
if (docprops) return;
|
if (docprops) return;
|
||||||
docprops = true;
|
docprops = true;
|
||||||
|
@ -1212,7 +1211,7 @@ function svg_edit_setup() {
|
||||||
var size_num = icon_sizes[size];
|
var size_num = icon_sizes[size];
|
||||||
|
|
||||||
// Change icon size
|
// Change icon size
|
||||||
$('.tool_button, .push_button, .tool_button_current, .tool_button_disabled, .tool_flyout_button, #url_notice')
|
$('.tool_button, .push_button, .tool_button_current, .tool_button_disabled, .tool_flyout_button, #url_notice, #fileinputs, #tool_open')
|
||||||
.find('> svg, > img').each(function() {
|
.find('> svg, > img').each(function() {
|
||||||
this.setAttribute('width',size_num);
|
this.setAttribute('width',size_num);
|
||||||
this.setAttribute('height',size_num);
|
this.setAttribute('height',size_num);
|
||||||
|
@ -1948,6 +1947,11 @@ function svg_edit_setup() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var fileOpen = function(window, str) {
|
||||||
|
svgCanvas.setSvgString(str);
|
||||||
|
populateLayers();
|
||||||
|
};
|
||||||
|
|
||||||
$(window).resize( centerCanvasIfNeeded );
|
$(window).resize( centerCanvasIfNeeded );
|
||||||
|
|
||||||
function stepFontSize(elem, step) {
|
function stepFontSize(elem, step) {
|
||||||
|
@ -2006,7 +2010,6 @@ function svg_edit_setup() {
|
||||||
w_area[0].scrollLeft = scroll_x;
|
w_area[0].scrollLeft = scroll_x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$('#resolution').change(function(){
|
$('#resolution').change(function(){
|
||||||
var wh = $('#canvas_width,#canvas_height');
|
var wh = $('#canvas_width,#canvas_height');
|
||||||
|
@ -2200,7 +2203,7 @@ function svg_edit_setup() {
|
||||||
|
|
||||||
svgCanvas.setCustomHandlers = function(opts) {
|
svgCanvas.setCustomHandlers = function(opts) {
|
||||||
if(opts.open) {
|
if(opts.open) {
|
||||||
$('#tool_open').show();
|
// $('#tool_open').show();
|
||||||
svgCanvas.bind("opened", opts.open);
|
svgCanvas.bind("opened", opts.open);
|
||||||
}
|
}
|
||||||
if(opts.save) {
|
if(opts.save) {
|
||||||
|
@ -2208,6 +2211,43 @@ function svg_edit_setup() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use HTML5 File API: http://www.w3.org/TR/FileAPI/
|
||||||
|
// if browser has HTML5 File API support, then provide the Open button
|
||||||
|
// clicking the button will bring up a file chooser dialog, once a file is chosen
|
||||||
|
// then the change() event will fire on the file input, will call svgCanvas.open()
|
||||||
|
// svgCanvas.open() will fire the 'opened' handler back here,
|
||||||
|
// which is file_open here
|
||||||
|
if (window.FileReader) {
|
||||||
|
$("#fileinputs").show();
|
||||||
|
var fi = document.getElementById("fileinputs");
|
||||||
|
var svgns = "http://www.w3.org/2000/svg";
|
||||||
|
// we dynamically create an SVG with a foreignObject with a file input
|
||||||
|
// then we stretch and clip that file input so that it takes up exactly 24x24
|
||||||
|
// this is all thanks to there being no other way to bring up a file picker :(
|
||||||
|
// until Mozilla Bug 36619 is fixed, this is the only way I know how to do it
|
||||||
|
// TODO: fix this for when icon size is changed
|
||||||
|
var fi_holder = document.createElementNS(svgns, "svg");
|
||||||
|
fi_holder.setAttribute("viewBox", "0 0 24 24");
|
||||||
|
fi_holder.setAttribute("className", "svg_icon");
|
||||||
|
var fo = document.createElementNS(svgns, "foreignObject");
|
||||||
|
fo.setAttribute("width", "100%");
|
||||||
|
fo.setAttribute("height", "100%");
|
||||||
|
fo.setAttribute("transform", "translate(-5,-30) scale(3)");
|
||||||
|
var input = document.createElementNS("http://www.w3.org/1999/xhtml", "input");
|
||||||
|
input.setAttribute("type", "file");
|
||||||
|
|
||||||
|
input.setAttribute("onchange", "if(this.files.length==1) { \
|
||||||
|
var reader = new FileReader(); \
|
||||||
|
reader.onloadend = function(e) {console.log(e.target.result); svgCanvas.open(e.target.result);}; \
|
||||||
|
reader.readAsText(this.files[0]);}");
|
||||||
|
input.className = "file";
|
||||||
|
fo.appendChild(input);
|
||||||
|
fi_holder.appendChild(fo);
|
||||||
|
fi.insertBefore(fi_holder, fi.firstChild);
|
||||||
|
|
||||||
|
svgCanvas.setCustomHandlers( {open: fileOpen} );
|
||||||
|
}
|
||||||
|
|
||||||
// set starting resolution (centers canvas)
|
// set starting resolution (centers canvas)
|
||||||
setResolution(640,480);
|
setResolution(640,480);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue