Skip to content

Commit 600d859

Browse files
ExportFromMarkup: fix serialization for self closing tags (T1297767) (#30299)
1 parent 0a72f0d commit 600d859

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

packages/devextreme/js/core/utils/svg.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import { isRenderer, isString } from './type';
66
const window = getWindow();
77

88
function getMarkup(element, backgroundColor) {
9-
const temp = domAdapter.createElement('div');
109
const clone = element.cloneNode(true);
10+
const serializer = new window.XMLSerializer();
11+
1112
if(backgroundColor) {
1213
$(clone).css('backgroundColor', backgroundColor);
1314
}
14-
temp.appendChild(clone);
15-
return temp.innerHTML;
15+
16+
return serializer.serializeToString(clone);
1617
}
1718

1819
function fixNamespaces(markup) {
@@ -33,7 +34,9 @@ function decodeHtmlEntities(markup) {
3334
.replace(/</gi, '<')
3435
.replace(/>/gi, '>')
3536
.replace(/ /gi, ' ')
36-
.replace(/­/gi, '­');
37+
.replace(/\u00A0/g, ' ')
38+
.replace(/­/gi, '­')
39+
.replace(/\u00AD/g, '­');
3740
}
3841

3942
export const HIDDEN_FOR_EXPORT = 'hidden-for-export';

packages/devextreme/testing/tests/DevExpress.viz.renderers/SvgElement.tests.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,32 @@ function checkDashStyle(assert, elem, result, style, value) {
591591
assert.notStrictEqual(markupString.indexOf('1 2 3'), -1);
592592
});
593593

594+
QUnit.test('Keep self closing xhtml tags (T1297767)', function(assert) {
595+
const parent = { element: document.createElement('div') };
596+
const svg = (new rendererModule.SvgElement({}, 'svg')).append(parent);
597+
$('#qunit-fixture').append(parent);
598+
599+
svg.attr({
600+
xmlns: 'http://www.w3.org/2000/svg',
601+
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
602+
version: '1.1'
603+
});
604+
605+
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
606+
const div = document.createElement('div');
607+
const br = document.createElement('br');
608+
609+
div.appendChild(br);
610+
foreignObject.appendChild(div);
611+
612+
svg.element.appendChild(foreignObject);
613+
614+
const markupString = svg.markup();
615+
const expectedMarkup = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><foreignObject><div xmlns="http://www.w3.org/1999/xhtml"><br /></div></foreignObject></svg>';
616+
617+
assert.deepEqual(mapFromStr(markupString), mapFromStr(expectedMarkup));
618+
});
619+
594620
QUnit.module('SvgElement jQuery API', {
595621
beforeEach: function() {
596622
const renderer = rendererModule;

0 commit comments

Comments
 (0)