Fossil SCM
Adapted pixchrshow raw SVG preview to account for pixchr output containing an outer DIV. Resolves (for me, anyway) Inkscape import problem reported in the forum.
Commit
2ffd9dd1bfd9d02696ede03f1968ceb9a0eab2355f60d4e1af045801de312255
Parent
66b2ae5a58071e9…
1 file changed
+11
-2
+11
-2
| --- src/fossil.page.pikchrshow.js | ||
| +++ src/fossil.page.pikchrshow.js | ||
| @@ -273,11 +273,11 @@ | ||
| 273 | 273 | let label; |
| 274 | 274 | switch(this.previewMode){ |
| 275 | 275 | case 0: |
| 276 | 276 | label = "SVG"; |
| 277 | 277 | f.showMarkupAlignment(false); |
| 278 | - D.append(D.clearElement(preTgt), D.parseHtml(P.response.raw)); | |
| 278 | + D.parseHtml(D.clearElement(preTgt), P.response.raw); | |
| 279 | 279 | this.e.taPreviewText.value = |
| 280 | 280 | this.response.raw.replace(f.rxNonce, '')/*for copy button*/; |
| 281 | 281 | break; |
| 282 | 282 | case 1: |
| 283 | 283 | label = "Markdown"; |
| @@ -299,11 +299,20 @@ | ||
| 299 | 299 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 300 | 300 | break; |
| 301 | 301 | case 3: |
| 302 | 302 | label = "Raw SVG"; |
| 303 | 303 | f.showMarkupAlignment(false); |
| 304 | - this.e.taPreviewText.value = this.response.raw.replace(f.rxNonce, ''); | |
| 304 | + const childs = D.parseHtml(this.response.raw); | |
| 305 | + const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; | |
| 306 | + const svg = wrapper ? wrapper.querySelector('svg.pikchr') : undefined; | |
| 307 | + if(svg){ | |
| 308 | + this.e.taPreviewText.value = svg.outerHTML; | |
| 309 | + }else{ | |
| 310 | + this.e.taPreviewText.value = "ERROR parsing response HTML:\n"+ | |
| 311 | + this.response.raw; | |
| 312 | + console.error("svg parsed HTML nodes:",childs); | |
| 313 | + } | |
| 305 | 314 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 306 | 315 | break; |
| 307 | 316 | } |
| 308 | 317 | this.e.previewModeLabel.innerText = label; |
| 309 | 318 | }; |
| 310 | 319 |
| --- src/fossil.page.pikchrshow.js | |
| +++ src/fossil.page.pikchrshow.js | |
| @@ -273,11 +273,11 @@ | |
| 273 | let label; |
| 274 | switch(this.previewMode){ |
| 275 | case 0: |
| 276 | label = "SVG"; |
| 277 | f.showMarkupAlignment(false); |
| 278 | D.append(D.clearElement(preTgt), D.parseHtml(P.response.raw)); |
| 279 | this.e.taPreviewText.value = |
| 280 | this.response.raw.replace(f.rxNonce, '')/*for copy button*/; |
| 281 | break; |
| 282 | case 1: |
| 283 | label = "Markdown"; |
| @@ -299,11 +299,20 @@ | |
| 299 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 300 | break; |
| 301 | case 3: |
| 302 | label = "Raw SVG"; |
| 303 | f.showMarkupAlignment(false); |
| 304 | this.e.taPreviewText.value = this.response.raw.replace(f.rxNonce, ''); |
| 305 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 306 | break; |
| 307 | } |
| 308 | this.e.previewModeLabel.innerText = label; |
| 309 | }; |
| 310 |
| --- src/fossil.page.pikchrshow.js | |
| +++ src/fossil.page.pikchrshow.js | |
| @@ -273,11 +273,11 @@ | |
| 273 | let label; |
| 274 | switch(this.previewMode){ |
| 275 | case 0: |
| 276 | label = "SVG"; |
| 277 | f.showMarkupAlignment(false); |
| 278 | D.parseHtml(D.clearElement(preTgt), P.response.raw); |
| 279 | this.e.taPreviewText.value = |
| 280 | this.response.raw.replace(f.rxNonce, '')/*for copy button*/; |
| 281 | break; |
| 282 | case 1: |
| 283 | label = "Markdown"; |
| @@ -299,11 +299,20 @@ | |
| 299 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 300 | break; |
| 301 | case 3: |
| 302 | label = "Raw SVG"; |
| 303 | f.showMarkupAlignment(false); |
| 304 | const childs = D.parseHtml(this.response.raw); |
| 305 | const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; |
| 306 | const svg = wrapper ? wrapper.querySelector('svg.pikchr') : undefined; |
| 307 | if(svg){ |
| 308 | this.e.taPreviewText.value = svg.outerHTML; |
| 309 | }else{ |
| 310 | this.e.taPreviewText.value = "ERROR parsing response HTML:\n"+ |
| 311 | this.response.raw; |
| 312 | console.error("svg parsed HTML nodes:",childs); |
| 313 | } |
| 314 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 315 | break; |
| 316 | } |
| 317 | this.e.previewModeLabel.innerText = label; |
| 318 | }; |
| 319 |