Fossil SCM
pikchrshow: corrected clipboard copy contents for raw SVG mode (it was including containing DIV element).
Commit
bb56d3d5a2e39f508998062c4f40a0b8f1cb4d318b8f1b0e23f6724fb843bd8e
Parent
863d27220517293…
1 file changed
+11
-6
+11
-6
| --- src/fossil.page.pikchrshow.js | ||
| +++ src/fossil.page.pikchrshow.js | ||
| @@ -293,10 +293,15 @@ | ||
| 293 | 293 | f.getMarkupAlignmentClass = function(){ |
| 294 | 294 | if(P.e.markupAlignCenter.checked) return ' center'; |
| 295 | 295 | else if(P.e.markupAlignIndent.checked) return ' indent'; |
| 296 | 296 | return ''; |
| 297 | 297 | }; |
| 298 | + f.getSvgNode = function(txt){ | |
| 299 | + const childs = D.parseHtml(txt); | |
| 300 | + const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; | |
| 301 | + return wrapper ? wrapper.querySelector('svg.pikchr') : undefined; | |
| 302 | + }; | |
| 298 | 303 | } |
| 299 | 304 | const preTgt = this.e.previewTarget; |
| 300 | 305 | if(this.response.isError){ |
| 301 | 306 | D.append(D.clearElement(preTgt), D.parseHtml(P.response.raw)); |
| 302 | 307 | D.addClass(preTgt, 'error'); |
| @@ -305,18 +310,20 @@ | ||
| 305 | 310 | } |
| 306 | 311 | D.removeClass(preTgt, 'error'); |
| 307 | 312 | D.removeClass(this.e.previewCopyButton, 'disabled'); |
| 308 | 313 | D.removeClass(this.e.markupAlignWrapper, 'hidden'); |
| 309 | 314 | D.enable(this.e.previewModeToggle, this.e.markupAlignRadios); |
| 310 | - let label; | |
| 315 | + let label, svg; | |
| 311 | 316 | switch(this.previewMode){ |
| 312 | 317 | case 0: |
| 313 | 318 | label = "SVG"; |
| 314 | 319 | f.showMarkupAlignment(false); |
| 315 | 320 | D.parseHtml(D.clearElement(preTgt), P.response.raw); |
| 316 | - this.e.taPreviewText.value = | |
| 317 | - this.response.raw.replace(f.rxNonce, '')/*for copy button*/; | |
| 321 | + svg = f.getSvgNode(this.response.raw); | |
| 322 | + if(svg){ /*for copy button*/ | |
| 323 | + this.e.taPreviewText.value = svg.outerHTML; | |
| 324 | + } | |
| 318 | 325 | if(F.pikchr){ |
| 319 | 326 | F.pikchr.addSrcView(preTgt.querySelector('svg')); |
| 320 | 327 | } |
| 321 | 328 | break; |
| 322 | 329 | case 1: |
| @@ -339,13 +346,11 @@ | ||
| 339 | 346 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 340 | 347 | break; |
| 341 | 348 | case 3: |
| 342 | 349 | label = "Raw SVG"; |
| 343 | 350 | f.showMarkupAlignment(false); |
| 344 | - const childs = D.parseHtml(this.response.raw); | |
| 345 | - const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; | |
| 346 | - const svg = wrapper ? wrapper.querySelector('svg.pikchr') : undefined; | |
| 351 | + svg = f.getSvgNode(this.response.raw); | |
| 347 | 352 | if(svg){ |
| 348 | 353 | this.e.taPreviewText.value = svg.outerHTML; |
| 349 | 354 | }else{ |
| 350 | 355 | this.e.taPreviewText.value = "ERROR parsing response HTML:\n"+ |
| 351 | 356 | this.response.raw; |
| 352 | 357 |
| --- src/fossil.page.pikchrshow.js | |
| +++ src/fossil.page.pikchrshow.js | |
| @@ -293,10 +293,15 @@ | |
| 293 | f.getMarkupAlignmentClass = function(){ |
| 294 | if(P.e.markupAlignCenter.checked) return ' center'; |
| 295 | else if(P.e.markupAlignIndent.checked) return ' indent'; |
| 296 | return ''; |
| 297 | }; |
| 298 | } |
| 299 | const preTgt = this.e.previewTarget; |
| 300 | if(this.response.isError){ |
| 301 | D.append(D.clearElement(preTgt), D.parseHtml(P.response.raw)); |
| 302 | D.addClass(preTgt, 'error'); |
| @@ -305,18 +310,20 @@ | |
| 305 | } |
| 306 | D.removeClass(preTgt, 'error'); |
| 307 | D.removeClass(this.e.previewCopyButton, 'disabled'); |
| 308 | D.removeClass(this.e.markupAlignWrapper, 'hidden'); |
| 309 | D.enable(this.e.previewModeToggle, this.e.markupAlignRadios); |
| 310 | let label; |
| 311 | switch(this.previewMode){ |
| 312 | case 0: |
| 313 | label = "SVG"; |
| 314 | f.showMarkupAlignment(false); |
| 315 | D.parseHtml(D.clearElement(preTgt), P.response.raw); |
| 316 | this.e.taPreviewText.value = |
| 317 | this.response.raw.replace(f.rxNonce, '')/*for copy button*/; |
| 318 | if(F.pikchr){ |
| 319 | F.pikchr.addSrcView(preTgt.querySelector('svg')); |
| 320 | } |
| 321 | break; |
| 322 | case 1: |
| @@ -339,13 +346,11 @@ | |
| 339 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 340 | break; |
| 341 | case 3: |
| 342 | label = "Raw SVG"; |
| 343 | f.showMarkupAlignment(false); |
| 344 | const childs = D.parseHtml(this.response.raw); |
| 345 | const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; |
| 346 | const svg = wrapper ? wrapper.querySelector('svg.pikchr') : undefined; |
| 347 | if(svg){ |
| 348 | this.e.taPreviewText.value = svg.outerHTML; |
| 349 | }else{ |
| 350 | this.e.taPreviewText.value = "ERROR parsing response HTML:\n"+ |
| 351 | this.response.raw; |
| 352 |
| --- src/fossil.page.pikchrshow.js | |
| +++ src/fossil.page.pikchrshow.js | |
| @@ -293,10 +293,15 @@ | |
| 293 | f.getMarkupAlignmentClass = function(){ |
| 294 | if(P.e.markupAlignCenter.checked) return ' center'; |
| 295 | else if(P.e.markupAlignIndent.checked) return ' indent'; |
| 296 | return ''; |
| 297 | }; |
| 298 | f.getSvgNode = function(txt){ |
| 299 | const childs = D.parseHtml(txt); |
| 300 | const wrapper = childs.filter((e)=>'DIV'===e.tagName)[0]; |
| 301 | return wrapper ? wrapper.querySelector('svg.pikchr') : undefined; |
| 302 | }; |
| 303 | } |
| 304 | const preTgt = this.e.previewTarget; |
| 305 | if(this.response.isError){ |
| 306 | D.append(D.clearElement(preTgt), D.parseHtml(P.response.raw)); |
| 307 | D.addClass(preTgt, 'error'); |
| @@ -305,18 +310,20 @@ | |
| 310 | } |
| 311 | D.removeClass(preTgt, 'error'); |
| 312 | D.removeClass(this.e.previewCopyButton, 'disabled'); |
| 313 | D.removeClass(this.e.markupAlignWrapper, 'hidden'); |
| 314 | D.enable(this.e.previewModeToggle, this.e.markupAlignRadios); |
| 315 | let label, svg; |
| 316 | switch(this.previewMode){ |
| 317 | case 0: |
| 318 | label = "SVG"; |
| 319 | f.showMarkupAlignment(false); |
| 320 | D.parseHtml(D.clearElement(preTgt), P.response.raw); |
| 321 | svg = f.getSvgNode(this.response.raw); |
| 322 | if(svg){ /*for copy button*/ |
| 323 | this.e.taPreviewText.value = svg.outerHTML; |
| 324 | } |
| 325 | if(F.pikchr){ |
| 326 | F.pikchr.addSrcView(preTgt.querySelector('svg')); |
| 327 | } |
| 328 | break; |
| 329 | case 1: |
| @@ -339,13 +346,11 @@ | |
| 346 | D.append(D.clearElement(preTgt), this.e.taPreviewText); |
| 347 | break; |
| 348 | case 3: |
| 349 | label = "Raw SVG"; |
| 350 | f.showMarkupAlignment(false); |
| 351 | svg = f.getSvgNode(this.response.raw); |
| 352 | if(svg){ |
| 353 | this.e.taPreviewText.value = svg.outerHTML; |
| 354 | }else{ |
| 355 | this.e.taPreviewText.value = "ERROR parsing response HTML:\n"+ |
| 356 | this.response.raw; |
| 357 |