diff --git a/badges/coverage-badge.svg b/badges/coverage-badge.svg
index cc106eca..24d5755f 100644
--- a/badges/coverage-badge.svg
+++ b/badges/coverage-badge.svg
@@ -1 +1 @@
-
+
diff --git a/badges/tests-badge.svg b/badges/tests-badge.svg
index c4904976..3c631ddc 100644
--- a/badges/tests-badge.svg
+++ b/badges/tests-badge.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/cypress/integration/ui/__snapshots__/scenario.js.snap b/cypress/integration/ui/__snapshots__/scenario.js.snap
index bb8ccc0a..16495423 100644
--- a/cypress/integration/ui/__snapshots__/scenario.js.snap
+++ b/cypress/integration/ui/__snapshots__/scenario.js.snap
@@ -493,6 +493,7 @@ exports[`use various parts of svg-edit > check tool_star #0`] = `
font-style="italic"
font-weight="bold"
text-decoration=" underline overline line-through"
+ letter-spacing="150"
>
B
@@ -585,6 +586,7 @@ exports[`use various parts of svg-edit > check tool_polygon #0`] = `
font-style="italic"
font-weight="bold"
text-decoration=" underline overline line-through"
+ letter-spacing="150"
>
B
@@ -1044,3 +1046,70 @@ exports[`use various parts of svg-edit > check tool_text_decoration_linethrough
`;
+
+exports[`use various parts of svg-edit > check tool_letter_spacing #0`] = `
+
+`;
diff --git a/cypress/integration/ui/scenario.js b/cypress/integration/ui/scenario.js
index d69e0716..fb6ddec9 100644
--- a/cypress/integration/ui/scenario.js
+++ b/cypress/integration/ui/scenario.js
@@ -106,6 +106,14 @@ describe('use various parts of svg-edit', function () {
.click({force: true});
testSnapshot();
});
+ it('check tool_letter_spacing', function () {
+ cy.get('#svg_1').click({force: true});
+ cy.get('#letter_spacing')
+ .type('{selectall}', {force: true})
+ .type('150', {force: true})
+ .type('{enter}', {force: true});
+ testSnapshot();
+ });
it('check tool_star', function () {
cy.get('#tool_star')
.click({force: true});
diff --git a/cypress/integration/unit/sanitize.js b/cypress/integration/unit/sanitize.js
index 4ff4f853..5842eea4 100644
--- a/cypress/integration/unit/sanitize.js
+++ b/cypress/integration/unit/sanitize.js
@@ -16,4 +16,34 @@ describe('sanitize', function () {
assert.equal(rect.getAttribute('stroke'), 'blue');
assert.equal(rect.getAttribute('stroke-width'), '40');
});
+
+ it('Test sanitizeSvg() does not strip letter-spacing attribute from text', function () {
+ const text = document.createElementNS(NS.SVG, 'text');
+ text.setAttribute('letter-spacing', '150');
+ svg.append(text);
+
+ sanitize.sanitizeSvg(text);
+
+ assert.equal(text.getAttribute('letter-spacing'), '150');
+ });
+
+ it('Test sanitizeSvg() does not strip text-anchor attribute from text', function () {
+ const text = document.createElementNS(NS.SVG, 'text');
+ text.setAttribute('text-anchor', 'end');
+ svg.append(text);
+
+ sanitize.sanitizeSvg(text);
+
+ assert.equal(text.getAttribute('text-anchor'), 'end');
+ });
+
+ it('Test sanitizeSvg() does not strip text-decoration attribute from text', function () {
+ const text = document.createElementNS(NS.SVG, 'text');
+ text.setAttribute('text-decoration', 'underline');
+ svg.append(text);
+
+ sanitize.sanitizeSvg(text);
+
+ assert.equal(text.getAttribute('text-decoration'), 'underline');
+ });
});
diff --git a/src/editor/images/svg_edit_icons.svg b/src/editor/images/svg_edit_icons.svg
index 45f178f2..37b1070b 100644
--- a/src/editor/images/svg_edit_icons.svg
+++ b/src/editor/images/svg_edit_icons.svg
@@ -1076,6 +1076,23 @@
+
+
+
+
diff --git a/src/editor/index.html b/src/editor/index.html
index fb3792d0..fda522c3 100644
--- a/src/editor/index.html
+++ b/src/editor/index.html
@@ -330,6 +330,20 @@
+