Merge branch 'bzr/golem' of /Users/distler/Sites/code/instiki

This commit is contained in:
Jacques Distler 2010-02-17 14:45:31 -06:00
commit da25e27263
6 changed files with 78 additions and 24 deletions

View file

@ -85,8 +85,23 @@ function setupSVGedit(path){
var editor = window.open(path, 'Edit SVG graphic', 'status=1,resizable=1,scrollbars=1'); var editor = window.open(path, 'Edit SVG graphic', 'status=1,resizable=1,scrollbars=1');
if (selected) { if (selected) {
editor.addEventListener("load", function() { editor.addEventListener("load", function() {
editor.svgCanvas.setCustomHandlers({
'save': function(window,svg){
window.opener.postMessage(svg, window.location.protocol + '//' + window.location.host);
window.close();
}
});
editor.svgCanvas.setSvgString(selected); editor.svgCanvas.setSvgString(selected);
}, true); }, true);
} else {
editor.addEventListener("load", function() {
editor.svgCanvas.setCustomHandlers({
'save': function(window,svg){
window.opener.postMessage(svg, window.location.protocol + '//' + window.location.host);
window.close();
}
});
}, true);
} }
SVGeditButton.disabled = true; SVGeditButton.disabled = true;
SVGeditButton.value = 'Create SVG graphic'; SVGeditButton.value = 'Create SVG graphic';

View file

@ -1,4 +1,4 @@
body { body {
background: #D8D8D8; background: #D8D8D8;
} }
@ -734,6 +734,7 @@ span.zoom_tool {
#tool_docprops_back { #tool_docprops_back {
margin-left: 1em; margin-left: 1em;
overflow: auto;
} }
#svg_docprops_container #svg_docprops_docprops, #svg_docprops_container #svg_docprops_docprops,

View file

@ -312,7 +312,10 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
</div> </div>
<div class="toolset" id="tool_font_family"> <div class="toolset" id="tool_font_family">
<label>
<!-- Font family -->
<input id="font_family" type="text" title="Change Font Family" size="12"/> <input id="font_family" type="text" title="Change Font Family" size="12"/>
</label>
<div id="font_family_dropdown" class="dropdown"> <div id="font_family_dropdown" class="dropdown">
<button></button> <button></button>
<ul> <ul>
@ -329,7 +332,10 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
<span id="font_sizeLabel">size:</span> <span id="font_sizeLabel">size:</span>
<input id="font_size" title="Change Font Size" size="3" value="0" type="text"/> <input id="font_size" title="Change Font Size" size="3" value="0" type="text"/>
</label> </label>
<label>
<!-- Text content -->
<input id="text" type="text" title="Change text contents" size="35"/> <input id="text" type="text" title="Change text contents" size="35"/>
</label>
</div> </div>
<div id="path_node_panel"> <div id="path_node_panel">

View file

@ -171,9 +171,9 @@ function svg_edit_setup() {
var strokePaint = new $.jGraduate.Paint({solidColor: "000000"}); // solid black var strokePaint = new $.jGraduate.Paint({solidColor: "000000"}); // solid black
var saveHandler = function(window,svg) { var saveHandler = function(window,svg) {
// by default, we add the XML prolog back, systems integrating SVG-edit (wikis, CMSs)
window.opener.postMessage(svg, window.location.protocol + '//' + window.location.host); // can just provide their own custom save handler and might not want the XML prolog
return; svg = "<?xml version='1.0'?>\n" + svg;
// Creates and opens an HTML page that provides a link to the SVG, a preview, and the markup. // Creates and opens an HTML page that provides a link to the SVG, a preview, and the markup.
// Also includes warning about Mozilla bug #308590 when applicable // Also includes warning about Mozilla bug #308590 when applicable
@ -1738,7 +1738,7 @@ function svg_edit_setup() {
'margin-top': {s: '2px', l: '4px', xl: '5px'}, 'margin-top': {s: '2px', l: '4px', xl: '5px'},
'height': {s: 'auto', l: 'auto', xl: 'auto'}, 'height': {s: 'auto', l: 'auto', xl: 'auto'},
'border': {s: '1px solid #555', l: 'auto', xl: 'auto'}, 'border': {s: '1px solid #555', l: 'auto', xl: 'auto'},
'font-size': {s: '.9em', l: '2em', xl: '2.5em'} 'font-size': {s: '.9em', l: '1.2em', xl: '1.4em'}
}, },
"#zoom_panel": { "#zoom_panel": {
'margin-top': {s: '3px', l: '4px', xl: '5px'} 'margin-top': {s: '3px', l: '4px', xl: '5px'}
@ -1758,10 +1758,12 @@ function svg_edit_setup() {
'line-height': {s: '18px', l: '34px', xl: '40px'}, 'line-height': {s: '18px', l: '34px', xl: '40px'},
'margin-top': {s: '3px'} 'margin-top': {s: '3px'}
}, },
"div.toolset, #tools_top label, #tools_bottom label": { "#tools_top label, #tools_bottom label": {
'font-size': {s: '1em', l: '1.5em', xl: '2em'}, 'font-size': {s: '1em', l: '1.5em', xl: '2em'},
'margin-top': {s: '1px', l: '3px', xl: '5px'}, 'height': {s: '25px', l: '42px', xl: '64px'}
'height': {s: '25px', l: '43px', xl: '64px'} },
"div.toolset": {
'height': {s: '25px', l: '42px', xl: '64px'}
}, },
"#tool_bold, #tool_italic": { "#tool_bold, #tool_italic": {
'font-size': {s: '1.5em', l: '3em', xl: '4.5em'} 'font-size': {s: '1.5em', l: '3em', xl: '4.5em'}
@ -2761,7 +2763,7 @@ function svg_edit_setup() {
updateCanvas(true); updateCanvas(true);
}); });
// var revnums = "svg-editor.js ($Rev: 1395 $) "; // var revnums = "svg-editor.js ($Rev: 1402 $) ";
// revnums += svgCanvas.getVersion(); // revnums += svgCanvas.getVersion();
// $('#copyright')[0].setAttribute("title", revnums); // $('#copyright')[0].setAttribute("title", revnums);
return svgCanvas; return svgCanvas;

View file

@ -684,7 +684,9 @@ function BatchCommand(text) {
'fill': '#FFF', 'fill': '#FFF',
'style': 'pointer-events:none' 'style': 'pointer-events:none'
}); });
if (!window.opera) rect.setAttribute('filter', 'url(#canvashadow)'); // Both Firefox and WebKit are too slow with this filter region (especially at higher
// zoom levels) and Opera has at least one bug
// if (!window.opera) rect.setAttribute('filter', 'url(#canvashadow)');
canvasbg.appendChild(rect); canvasbg.appendChild(rect);
svgroot.insertBefore(canvasbg, svgcontent); svgroot.insertBefore(canvasbg, svgcontent);
}; };
@ -1343,7 +1345,7 @@ function BatchCommand(text) {
if(attrName.indexOf('se:') == 0) { if(attrName.indexOf('se:') == 0) {
se_attrs.push([attrName, attr.nodeValue]); se_attrs.push([attrName, attr.nodeValue]);
} }
node.removeAttribute(attrName); node.removeAttributeNS(attrNsURI, attrLocalName);
} }
// special handling for path d attribute // special handling for path d attribute
if (node.nodeName == 'path' && attrName == 'd') { if (node.nodeName == 'path' && attrName == 'd') {
@ -1528,7 +1530,7 @@ function BatchCommand(text) {
var i = attrs.length; var i = attrs.length;
while (i--) { while (i--) {
attr = attrs.item(i); attr = attrs.item(i);
var attrVal = attr.nodeValue; var attrVal = toXml(attr.nodeValue);
// only serialize attributes we don't use internally // only serialize attributes we don't use internally
if (attrVal != "" && if (attrVal != "" &&
$.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1) $.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1)
@ -1542,7 +1544,7 @@ function BatchCommand(text) {
} else { } else {
for (var i=attrs.length-1; i>=0; i--) { for (var i=attrs.length-1; i>=0; i--) {
attr = attrs.item(i); attr = attrs.item(i);
var attrVal = attr.nodeValue; var attrVal = toXml(attr.nodeValue);
if (attr.localName == '-moz-math-font-style') continue; if (attr.localName == '-moz-math-font-style') continue;
if (attrVal != "") { if (attrVal != "") {
if(attrVal.indexOf('pointer-events') == 0) continue; if(attrVal.indexOf('pointer-events') == 0) continue;
@ -7721,7 +7723,7 @@ function BatchCommand(text) {
// Function: getVersion // Function: getVersion
// Returns a string which describes the revision number of SvgCanvas. // Returns a string which describes the revision number of SvgCanvas.
this.getVersion = function() { this.getVersion = function() {
return "svgcanvas.js ($Rev: 1396 $)"; return "svgcanvas.js ($Rev: 1404 $)";
}; };
this.setUiStrings = function(strs) { this.setUiStrings = function(strs) {

View file

@ -1,7 +1,7 @@
<html> <html>
<head> <head>
<link rel="stylesheet" href="qunit/qunit.css" type="text/css"/> <link rel="stylesheet" href="qunit/qunit.css" type="text/css"/>
<script src="../editor/jquery.js"> </script> <script src="../editor/jquery.js"></script>
<script type="text/javascript" src="../editor/svgicons/jquery.svgicons.js"></script> <script type="text/javascript" src="../editor/svgicons/jquery.svgicons.js"></script>
<script type="text/javascript" src="../editor/locale/locale.js"></script> <script type="text/javascript" src="../editor/locale/locale.js"></script>
<script type="text/javascript" src="../editor/svgcanvas.js"></script> <script type="text/javascript" src="../editor/svgcanvas.js"></script>
@ -172,22 +172,50 @@
'</svg>'); '</svg>');
var attrVal = document.getElementById('se_test_elem').getAttributeNS("http://svg-edit.googlecode.com", "foo"); var attrVal = document.getElementById('se_test_elem').getAttributeNS("http://svg-edit.googlecode.com", "foo");
equals(true, attrVal === "bar", "Preserved namespaced attribute on import"); equals(attrVal === "bar", true, "Preserved namespaced attribute on import");
var output = svgCanvas.getSvgString(); var output = svgCanvas.getSvgString();
var has_xlink = output.indexOf('xmlns:xlink="http://www.w3.org/1999/xlink"') !== -1; var has_xlink = output.indexOf('xmlns:xlink="http://www.w3.org/1999/xlink"') !== -1;
var has_se = output.indexOf('xmlns:se=') !== -1; var has_se = output.indexOf('xmlns:se=') !== -1;
var has_foo = output.indexOf('xmlns:foo=') === -1; var has_foo = output.indexOf('xmlns:foo=') !== -1;
var has_attr = output.indexOf('se:foo="bar"') !== -1; var has_attr = output.indexOf('se:foo="bar"') !== -1;
equals(true, has_attr, "Preserved namespaced attribute on export"); equals(has_attr, true, "Preserved namespaced attribute on export");
equals(true, has_xlink, "Included xlink: xmlns"); equals(has_xlink, true, "Included xlink: xmlns");
equals(true, has_se, "Included se: xmlns"); equals(has_se, true, "Included se: xmlns");
equals(true, has_foo, "Did not include foo: xmlns"); equals(has_foo, false, "Did not include foo: xmlns");
}); });
test("Test import math elements inside a foreignObject", function() {
expect(4);
var set = svgCanvas.setSvgString('<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">'+
'<foreignObject id="fo" width="24" height="26" font-size="24"><math id="m" display="inline" xmlns="http://www.w3.org/1998/Math/MathML">'+
'<msub>'+
'<mi>A</mi>'+
'<mn>0</mn>'+
'</msub>'+
'</math>'+
'</foreignObject>'+
'</svg>');
var fo = document.getElementById('fo');
// we cannot use getElementById('math') because not all browsers understand MathML and do not know to use the @id attribute
// see Bug https://bugs.webkit.org/show_bug.cgi?id=35042
var math = fo.firstChild;
equals(!!math, true, "Math element exists");
equals(math.nodeName, 'math', "Math element has the proper nodeName");
equals(math.getAttribute('id'), 'm', "Math element has an id");
equals(math.namespaceURI, "http://www.w3.org/1998/Math/MathML", "Preserved MathML namespace");
});
test("Test XML entities in attribute", function() {
expect(3);
equals(svgCanvas.getPrivateMethods().toXml("<"), "&lt;", "Escaped < properly");
equals(svgCanvas.getPrivateMethods().toXml(">"), "&gt;", "Escaped > properly");
equals(svgCanvas.getPrivateMethods().toXml("&"), "&amp;", "Escaped & properly");
// TODO: what about &quot; and &apos; ?
});
}); });
</script> </script>
</head> </head>