fixes
parent
9dd3887fb4
commit
ae8fd06e1d
|
@ -63,7 +63,8 @@
|
||||||
#workarea.nw-resize * {cursor: nw-resize !important;}
|
#workarea.nw-resize * {cursor: nw-resize !important;}
|
||||||
#workarea.sw-resize * {cursor: sw-resize !important;}
|
#workarea.sw-resize * {cursor: sw-resize !important;}
|
||||||
|
|
||||||
#workspace.dragging * {
|
#workspace.dragging *,
|
||||||
|
body.dragging * {
|
||||||
cursor: url(../images/dragging.png), move;
|
cursor: url(../images/dragging.png), move;
|
||||||
cursor: -webkit-grabbing;
|
cursor: -webkit-grabbing;
|
||||||
cursor: -moz-grabbing;
|
cursor: -moz-grabbing;
|
||||||
|
|
|
@ -223,7 +223,12 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.draginput:hover .draginput_cursor {
|
||||||
|
border-color: var(--d6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.draginput_cursor{
|
.draginput_cursor{
|
||||||
|
@ -231,7 +236,6 @@
|
||||||
top: 50%;
|
top: 50%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-top: solid var(--d4) 1px;
|
border-top: solid var(--d4) 1px;
|
||||||
margin-top: -2px;
|
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,11 @@
|
||||||
right: var(--x2);
|
right: var(--x2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.draginput:hover #preview_font:after {
|
||||||
|
border-right-color: var(--z3);
|
||||||
|
background: linear-gradient(to right, rgba(0,0,0,0), var(--z3));
|
||||||
|
}
|
||||||
|
|
||||||
#preview_font:after {
|
#preview_font:after {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
|
@ -372,7 +372,7 @@
|
||||||
<input id="textPath_offset" class="attr_changer" data-title="Change offset" data-attr="offset" pattern="[0-9]*" />
|
<input id="textPath_offset" class="attr_changer" data-title="Change offset" data-attr="offset" pattern="[0-9]*" />
|
||||||
<span>Offset</span>
|
<span>Offset</span>
|
||||||
</label>
|
</label>
|
||||||
<div class="draginput draginput-button draginput-button-delete" id="tool_textPath_remove" data-title="Remove path">Remove path</div>
|
<div class="draginput draginput-button draginput-button-delete" id="tool_release_text_on_path" data-title="Remove path">Remove path</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -584,6 +584,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
<div class="button full" id="tool_text_on_path" title="Place text on path">Place text on path</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -68,13 +68,13 @@ MD.Canvas = function(){
|
||||||
if (w === 'fit' || h === 'fit') state.set("canvasSize", res);
|
if (w === 'fit' || h === 'fit') state.set("canvasSize", res);
|
||||||
$("#canvas_width").val(w);
|
$("#canvas_width").val(w);
|
||||||
$("#canvas_height").val(h);
|
$("#canvas_height").val(h);
|
||||||
state.set("canvasContent", svgCanvas.getSvgString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeSize(){
|
function changeSize(attr, val, completed){
|
||||||
const w = $("#canvas_width").val();
|
const w = $("#canvas_width").val();
|
||||||
const h = $("#canvas_height").val();
|
const h = $("#canvas_height").val();
|
||||||
state.set("canvasSize", [w,h]);
|
state.set("canvasSize", [w,h]);
|
||||||
|
if (completed) editor.saveCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
function update(center, new_ctr) {
|
function update(center, new_ctr) {
|
||||||
|
|
|
@ -79,6 +79,7 @@ MD.Import = function(){
|
||||||
|
|
||||||
function loadSvgString(str, callback) {
|
function loadSvgString(str, callback) {
|
||||||
var success = svgCanvas.setSvgString(str) !== false;
|
var success = svgCanvas.setSvgString(str) !== false;
|
||||||
|
|
||||||
callback = callback || $.noop;
|
callback = callback || $.noop;
|
||||||
if(success) {
|
if(success) {
|
||||||
callback(true);
|
callback(true);
|
||||||
|
@ -96,6 +97,7 @@ MD.Import = function(){
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
reader.onloadend = function(e) {
|
reader.onloadend = function(e) {
|
||||||
loadSvgString(e.target.result);
|
loadSvgString(e.target.result);
|
||||||
|
editor.saveCanvas();
|
||||||
editor.canvas.update(true);
|
editor.canvas.update(true);
|
||||||
};
|
};
|
||||||
reader.readAsText(f.files[0]);
|
reader.readAsText(f.files[0]);
|
||||||
|
|
|
@ -1,61 +1,61 @@
|
||||||
MD.Keyboard = function(){
|
MD.Keyboard = function(){
|
||||||
|
|
||||||
const keys = {
|
const keys = {
|
||||||
"v": { name: "Select tool", cb: ()=> state.set("canvasMode", "select") },
|
"v": { name: "Select tool", cb: ()=> state.set("canvasMode", "select") },
|
||||||
"q": { name: "Freehand tool", cb: ()=> state.set("canvasMode", "fhpath") },
|
"q": { name: "Freehand tool", cb: ()=> state.set("canvasMode", "fhpath") },
|
||||||
"l": { name: "Line tool", cb: ()=> state.set("canvasMode", "fhplineath")},
|
"l": { name: "Line tool", cb: ()=> state.set("canvasMode", "fhplineath")},
|
||||||
"r": { name: "Rectangle tool", cb: ()=> state.set("canvasMode", "rect")},
|
"r": { name: "Rectangle tool", cb: ()=> state.set("canvasMode", "rect")},
|
||||||
"o": { name: "Ellipse tool", cb: ()=> state.set("canvasMode", "ellipse")},
|
"o": { name: "Ellipse tool", cb: ()=> state.set("canvasMode", "ellipse")},
|
||||||
"s": { name: "Shape tool", cb: ()=> state.set("canvasMode", "shapelib")},
|
"s": { name: "Shape tool", cb: ()=> state.set("canvasMode", "shapelib")},
|
||||||
"p": { name: "Path tool", cb: ()=> state.set("canvasMode", "path")},
|
"p": { name: "Path tool", cb: ()=> state.set("canvasMode", "path")},
|
||||||
"t": { name: "Text tool", cb: ()=> state.set("canvasMode", "text")},
|
"t": { name: "Text tool", cb: ()=> state.set("canvasMode", "text")},
|
||||||
"z": { name: "Zoom tool", cb: ()=> state.set("canvasMode", "zoom")},
|
"z": { name: "Zoom tool", cb: ()=> state.set("canvasMode", "zoom")},
|
||||||
"e": { name: "Eyedropper tool", cb: ()=> state.set("canvasMode", "eyedropper")},
|
"e": { name: "Eyedropper tool", cb: ()=> state.set("canvasMode", "eyedropper")},
|
||||||
"x": { name: "Focus fill/stroke", cb: ()=> editor.focusPaint()},
|
"x": { name: "Focus fill/stroke", cb: ()=> editor.focusPaint()},
|
||||||
"shift_x": { name: "Switch fill/stroke", cb: ()=> editor.switchPaint()},
|
"shift_x": { name: "Switch fill/stroke", cb: ()=> editor.switchPaint()},
|
||||||
"alt": { name: false, cb: ()=> $("#workarea").toggleClass("out", state.get("canvasMode") === "zoom" )},
|
"alt": { name: false, cb: ()=> $("#workarea").toggleClass("out", state.get("canvasMode") === "zoom" )},
|
||||||
"cmd_s": { name: "Save SVG File", cb: ()=> editor.save()},
|
"cmd_s": { name: "Save SVG File", cb: ()=> editor.save()},
|
||||||
"cmd_z": { name: "Undo", cb: ()=> editor.undo()},
|
"cmd_z": { name: "Undo", cb: ()=> editor.undo()},
|
||||||
"cmd_y": { name: "Redo", cb: ()=> editor.redo()},
|
"cmd_y": { name: "Redo", cb: ()=> editor.redo()},
|
||||||
"cmd_shift_z": { name: "Redo", cb: ()=> editor.redo()},
|
"cmd_shift_z": { name: "Redo", cb: ()=> editor.redo()},
|
||||||
"cmd_c": { name: "Copy", cb: ()=> editor.copySelected()},
|
"cmd_c": { name: "Copy", cb: ()=> editor.copySelected()},
|
||||||
"cmd_x": { name: "Cut", cb: ()=> editor.cutSelected()},
|
"cmd_x": { name: "Cut", cb: ()=> editor.cutSelected()},
|
||||||
"cmd_v": { name: "Paste", cb: ()=> editor.pasteSelected()},
|
"cmd_v": { name: "Paste", cb: ()=> editor.pasteSelected()},
|
||||||
"cmd_d": { name: "Duplicate", cb: ()=> editor.duplicateSelected()},
|
"cmd_d": { name: "Duplicate", cb: ()=> editor.duplicateSelected()},
|
||||||
"cmd_u": { name: "View source", cb: ()=> editor.source()},
|
"cmd_u": { name: "View source", cb: ()=> editor.source()},
|
||||||
"cmd_a": { name: "Select All", cb: ()=> svgCanvas.selectAllInCurrentLayer()},
|
"cmd_a": { name: "Select All", cb: ()=> svgCanvas.selectAllInCurrentLayer()},
|
||||||
"cmd_b": { name: "Set bold text", cb: ()=> editor.text.setBold()},
|
"cmd_b": { name: "Set bold text", cb: ()=> editor.text.setBold()},
|
||||||
"cmd_i": { name: "Set italic text", cb: ()=> editor.text.setItalic()},
|
"cmd_i": { name: "Set italic text", cb: ()=> editor.text.setItalic()},
|
||||||
"cmd_g": { name: "Group selected", cb: ()=> editor.groupSelected()},
|
"cmd_g": { name: "Group selected", cb: ()=> editor.groupSelected()},
|
||||||
"cmd_shift_g": { name: "Ungroup", cb: ()=> editor.ungroupSelected()},
|
"cmd_shift_g": { name: "Ungroup", cb: ()=> editor.ungroupSelected()},
|
||||||
"cmd_o": { name: "Open SVG File", cb: ()=> editor.import.open()},
|
"cmd_o": { name: "Open SVG File", cb: ()=> editor.import.open()},
|
||||||
"cmd_k": { name: "Place image", cb: ()=> editor.import.place()},
|
"cmd_k": { name: "Place image", cb: ()=> editor.import.place()},
|
||||||
"backspace": { name: "Delete", cb: ()=> editor.deleteSelected()},
|
"backspace": { name: "Delete", cb: ()=> editor.deleteSelected()},
|
||||||
"ctrl_arrowleft": { name: "Rotate -1deg", cb: ()=> editor.rotateSelected(0,1)},
|
"ctrl_arrowleft": { name: "Rotate -1deg", cb: ()=> editor.rotateSelected(0,1)},
|
||||||
"ctrl_arrowright": { name: "Rotate +1deg", cb: ()=> editor.rotateSelected(1,1)},
|
"ctrl_arrowright": { name: "Rotate +1deg", cb: ()=> editor.rotateSelected(1,1)},
|
||||||
"ctrl_shift_arrowleft": { name: "Rotate -5deg", cb: ()=> editor.rotateSelected(0,5)},
|
"ctrl_shift_arrowleft": { name: "Rotate -5deg", cb: ()=> editor.rotateSelected(0,5)},
|
||||||
"ctrl_shift_arrowright": { name: "Rotate +5deg ", cb: ()=> editor.rotateSelected(1,5)},
|
"ctrl_shift_arrowright": { name: "Rotate +5deg ", cb: ()=> editor.rotateSelected(1,5)},
|
||||||
"shift_o": { name: "Next item", cb: ()=> svgCanvas.cycleElement(0)},
|
"shift_o": { name: "Next item", cb: ()=> svgCanvas.cycleElement(0)},
|
||||||
"shift_p": { name: "Prev item", cb: ()=> svgCanvas.cycleElement(1)},
|
"shift_p": { name: "Prev item", cb: ()=> svgCanvas.cycleElement(1)},
|
||||||
"shift_r": { name: "Show/hide rulers", cb: ()=> editor.rulers.toggleRulers()},
|
"shift_r": { name: "Show/hide rulers", cb: ()=> editor.rulers.toggleRulers()},
|
||||||
"cmd_+": { name: "Zoom in", cb: ()=> editor.zoom.multiply(1.5)},
|
"cmd_+": { name: "Zoom in", cb: ()=> editor.zoom.multiply(1.5)},
|
||||||
"cmd_-": { name: "Zoom out", cb: ()=> editor.zoom.multiply(0.75)},
|
"cmd_-": { name: "Zoom out", cb: ()=> editor.zoom.multiply(0.75)},
|
||||||
"cmd_=": { name: "Actual size", cb: ()=> editor.zoom.reset()},
|
"cmd_=": { name: "Actual size", cb: ()=> editor.zoom.reset()},
|
||||||
"arrowleft": { name: "Nudge left", cb: ()=> editor.moveSelected(-1,0)},
|
"arrowleft": { name: "Nudge left", cb: ()=> editor.moveSelected(-1,0)},
|
||||||
"arrowright": { name: "Nudge right", cb: ()=> editor.moveSelected(1,0)},
|
"arrowright": { name: "Nudge right", cb: ()=> editor.moveSelected(1,0)},
|
||||||
"arrowup": { name: "Nudge up", cb: ()=> editor.moveSelected(0,-1)},
|
"arrowup": { name: "Nudge up", cb: ()=> editor.moveSelected(0,-1)},
|
||||||
"arrowdown": { name: "Nudge down", cb: ()=> editor.moveSelected(0,1)},
|
"arrowdown": { name: "Nudge down", cb: ()=> editor.moveSelected(0,1)},
|
||||||
"shift_arrowleft": {name: "Jump left", cb: () => editor.moveSelected(state.get("canvasSnapStep") * -1, 0)},
|
"shift_arrowleft": {name: "Jump left", cb: () => editor.moveSelected(state.get("canvasSnapStep") * -1, 0)},
|
||||||
"shift_arrowright": {name: "Jump right", cb: () => editor.moveSelected(state.get("canvasSnapStep") * 1, 0)},
|
"shift_arrowright": {name: "Jump right", cb: () => editor.moveSelected(state.get("canvasSnapStep") * 1, 0)},
|
||||||
"shift_arrowup": {name: "Jump up", cb: () => editor.moveSelected(0, state.get("canvasSnapStep") * -1)},
|
"shift_arrowup": {name: "Jump up", cb: () => editor.moveSelected(0, state.get("canvasSnapStep") * -1)},
|
||||||
"shift_arrowdown": {name: "Jump down", cb: () => editor.moveSelected(0, state.get("canvasSnapStep") * 1)},
|
"shift_arrowdown": {name: "Jump down", cb: () => editor.moveSelected(0, state.get("canvasSnapStep") * 1)},
|
||||||
"cmd_arrowup":{ name: "Bring forward", cb: () => editor.moveUpSelected()},
|
"cmd_arrowup":{ name: "Bring forward", cb: () => editor.moveUpSelected()},
|
||||||
"cmd_arrowdown":{ name: "Send backward", cb: () => editor.moveDownSelected()},
|
"cmd_arrowdown":{ name: "Send backward", cb: () => editor.moveDownSelected()},
|
||||||
"cmd_shift_arrowup":{ name: "Bring to front", cb: () => editor.moveToTopSelected()},
|
"cmd_shift_arrowup":{ name: "Bring to front", cb: () => editor.moveToTopSelected()},
|
||||||
"cmd_shift_arrowdown":{ name: "Send to back", cb: () => editor.moveToBottomSelected()},
|
"cmd_shift_arrowdown":{ name: "Send to back", cb: () => editor.moveToBottomSelected()},
|
||||||
"escape": { name: false, cb: ()=> editor.escapeMode()},
|
"escape": { name: false, cb: ()=> editor.escapeMode()},
|
||||||
"enter": { name: false, cb: ()=> editor.escapeMode()},
|
"enter": { name: false, cb: ()=> editor.escapeMode()},
|
||||||
" ": { name: "Pan canvas", cb: (e)=> editor.pan.startPan(e)},
|
" ": { name: "Pan canvas", cb: (e)=> editor.pan.startPan(e)},
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener("keydown", function(e){
|
document.addEventListener("keydown", function(e){
|
||||||
|
|
|
@ -82,6 +82,8 @@ MD.Panel = function(){
|
||||||
svgCanvas.pathActions.opencloseSubPath();
|
svgCanvas.pathActions.opencloseSubPath();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Text Path
|
||||||
|
|
||||||
function show(elem) {
|
function show(elem) {
|
||||||
$('.context_panel').hide();
|
$('.context_panel').hide();
|
||||||
if (elem === "canvas") return $('#canvas_panel').show();
|
if (elem === "canvas") return $('#canvas_panel').show();
|
||||||
|
|
|
@ -146,7 +146,7 @@ MD.Editor = function(){
|
||||||
svgCanvas.leaveContext()
|
svgCanvas.leaveContext()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
state.set("canvasContent", svgCanvas.getSvgString())
|
saveCanvas()
|
||||||
}
|
}
|
||||||
|
|
||||||
// called when we've selected a different element
|
// called when we've selected a different element
|
||||||
|
@ -198,7 +198,7 @@ MD.Editor = function(){
|
||||||
|
|
||||||
|
|
||||||
if (!svgCanvas.getContext()) {
|
if (!svgCanvas.getContext()) {
|
||||||
state.set("canvasContent", svgCanvas.getSvgString())
|
saveCanvas();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ MD.Editor = function(){
|
||||||
if (attr === "opacity") value *= 0.01;
|
if (attr === "opacity") value *= 0.01;
|
||||||
if (completed) {
|
if (completed) {
|
||||||
svgCanvas.changeSelectedAttribute(attr, value);
|
svgCanvas.changeSelectedAttribute(attr, value);
|
||||||
state.set("canvasContent", svgCanvas.getSvgString());
|
saveCanvas();
|
||||||
}
|
}
|
||||||
else svgCanvas.changeSelectedAttributeNoUndo(attr, value);
|
else svgCanvas.changeSelectedAttributeNoUndo(attr, value);
|
||||||
}
|
}
|
||||||
|
@ -300,6 +300,11 @@ MD.Editor = function(){
|
||||||
}});
|
}});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function saveCanvas(){
|
||||||
|
console.log("saved")
|
||||||
|
state.set("canvasContent", svgCanvas.getSvgString());
|
||||||
|
}
|
||||||
|
|
||||||
function toggleWireframe() {
|
function toggleWireframe() {
|
||||||
editor.menu.flash($('#view_menu'));
|
editor.menu.flash($('#view_menu'));
|
||||||
$('#tool_wireframe').toggleClass('push_button_pressed');
|
$('#tool_wireframe').toggleClass('push_button_pressed');
|
||||||
|
@ -381,6 +386,7 @@ MD.Editor = function(){
|
||||||
this.shortcuts = shortcuts;
|
this.shortcuts = shortcuts;
|
||||||
this.donate = donate;
|
this.donate = donate;
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
this.saveCanvas = saveCanvas;
|
||||||
|
|
||||||
this.export = function(){
|
this.export = function(){
|
||||||
if(window.canvg) {
|
if(window.canvg) {
|
||||||
|
|
|
@ -108,7 +108,7 @@ MD.Eyedropper = function() {
|
||||||
changes[attrname] = elem.getAttribute(attrname);
|
changes[attrname] = elem.getAttribute(attrname);
|
||||||
elem.setAttribute(attrname, newvalue);
|
elem.setAttribute(attrname, newvalue);
|
||||||
};
|
};
|
||||||
var batchCmd = new S.BatchCommand();
|
var batchCmd = new svgedit.history.BatchCommand();
|
||||||
opts.selectedElements.forEach(function(element){
|
opts.selectedElements.forEach(function(element){
|
||||||
if (currentStyle.fillPaint) change(element, "fill", currentStyle.fillPaint);
|
if (currentStyle.fillPaint) change(element, "fill", currentStyle.fillPaint);
|
||||||
if (currentStyle.fillOpacity) change(element, "fill-opacity", currentStyle.fillOpacity);
|
if (currentStyle.fillOpacity) change(element, "fill-opacity", currentStyle.fillOpacity);
|
||||||
|
|
|
@ -128,6 +128,9 @@ $.each(svgWhiteList_, function(elt,atts){
|
||||||
svgWhiteListNS_[elt] = attNS;
|
svgWhiteListNS_[elt] = attNS;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
svgedit.sanitize.svgWhiteList = function() { return svgWhiteList_; }
|
||||||
|
|
||||||
// temporarily expose these
|
// temporarily expose these
|
||||||
svgedit.sanitize.getNSMap = function() { return nsMap_; }
|
svgedit.sanitize.getNSMap = function() { return nsMap_; }
|
||||||
|
|
||||||
|
|
|
@ -5830,12 +5830,25 @@ this.setSvgString = function(xmlString) {
|
||||||
if (!href) return;
|
if (!href) return;
|
||||||
const path = svgcontent.querySelector(href);
|
const path = svgcontent.querySelector(href);
|
||||||
const offset = el.getAttribute("startOffset");
|
const offset = el.getAttribute("startOffset");
|
||||||
|
el.setAttribute("xml:space", "default");
|
||||||
// convert percentage based to absolute
|
// convert percentage based to absolute
|
||||||
if (offset.includes("%") && path) {
|
if (offset.includes("%") && path) {
|
||||||
const totalLength = path.getTotalLength();
|
const totalLength = path.getTotalLength();
|
||||||
const pct = parseFloat(offset) * .01;
|
const pct = parseFloat(offset) * .01;
|
||||||
el.setAttribute("startOffset", (pct * totalLength).toFixed(0))
|
el.setAttribute("startOffset", (pct * totalLength).toFixed(0))
|
||||||
}
|
}
|
||||||
|
const tspan = el.querySelector("tspan");
|
||||||
|
const text = el.closest("text");
|
||||||
|
if (tspan && text) {
|
||||||
|
// grab the first tspan and apply it to the text element
|
||||||
|
svgedit.sanitize.svgWhiteList()["text"].forEach(attr => {
|
||||||
|
const value = tspan.getAttribute(attr);
|
||||||
|
if (value) {
|
||||||
|
tspan.removeAttribute(attr);
|
||||||
|
text.setAttribute(attr, value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Set ref element for <use> elements
|
// Set ref element for <use> elements
|
||||||
|
@ -6043,14 +6056,7 @@ this.importSvgString = function(xmlString) {
|
||||||
|
|
||||||
var symbol = svgdoc.createElementNS(svgns, "symbol");
|
var symbol = svgdoc.createElementNS(svgns, "symbol");
|
||||||
var defs = findDefs();
|
var defs = findDefs();
|
||||||
|
|
||||||
if(svgedit.browser.isGecko()) {
|
|
||||||
// Move all gradients into root for Firefox, workaround for this bug:
|
|
||||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=353575
|
|
||||||
// TODO: Make this properly undo-able.
|
|
||||||
$(svg).find('linearGradient, radialGradient, pattern').appendTo(defs);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (svg.firstChild) {
|
while (svg.firstChild) {
|
||||||
var first = svg.firstChild;
|
var first = svg.firstChild;
|
||||||
symbol.appendChild(first);
|
symbol.appendChild(first);
|
||||||
|
@ -7511,10 +7517,7 @@ this.setTextContent = function(val) {
|
||||||
|
|
||||||
this.textPath = function(){
|
this.textPath = function(){
|
||||||
const text = selectedElements.find(element => element.tagName === "text");
|
const text = selectedElements.find(element => element.tagName === "text");
|
||||||
var path = selectedElements.find(element => element.tagName === "path" || element.tagName === "ellipse");
|
var path = selectedElements.find(element => element.tagName === "path");
|
||||||
if (path.tagName === "ellipse") {
|
|
||||||
console.log("ellipse")
|
|
||||||
}
|
|
||||||
if (!text || !path) return false;
|
if (!text || !path) return false;
|
||||||
const textPath = svgdoc.createElementNS(svgns, "textPath");
|
const textPath = svgdoc.createElementNS(svgns, "textPath");
|
||||||
textPath.textContent = text.textContent;
|
textPath.textContent = text.textContent;
|
||||||
|
@ -7522,6 +7525,7 @@ this.textPath = function(){
|
||||||
text.setAttribute("text-anchor", "middle");
|
text.setAttribute("text-anchor", "middle");
|
||||||
text.setAttribute("x", 0);
|
text.setAttribute("x", 0);
|
||||||
text.setAttribute("y", 0);
|
text.setAttribute("y", 0);
|
||||||
|
textPath.setAttribute("xml:space", "default");
|
||||||
textPath.setAttribute("xlink:href", "#" + path.id);
|
textPath.setAttribute("xlink:href", "#" + path.id);
|
||||||
textPath.setAttribute("href", "#" + path.id);
|
textPath.setAttribute("href", "#" + path.id);
|
||||||
const offset = (path.getTotalLength()/2).toFixed(0)
|
const offset = (path.getTotalLength()/2).toFixed(0)
|
||||||
|
|
|
@ -10,3 +10,16 @@ utils.findGetParameter = function(parameterName) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
utils.throttle = function (callback, limit) {
|
||||||
|
var waiting = false;
|
||||||
|
return function () {
|
||||||
|
if (!waiting) {
|
||||||
|
callback.apply(this, arguments);
|
||||||
|
waiting = true;
|
||||||
|
setTimeout(function () {
|
||||||
|
waiting = false;
|
||||||
|
}, limit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue