Fixing how styles are added to SVG documents to please IE
This also allowed the SVG element to be created in a single place
This commit is contained in:
+1
-4
@@ -26,10 +26,7 @@
|
||||
|
||||
<ul id="warnings"></ul>
|
||||
|
||||
<!-- NOTE: Do not put anything in #regexp-render other than the <svg> element -->
|
||||
<div id="regexp-render">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>
|
||||
</div>
|
||||
<div id="regexp-render"></div>
|
||||
</div>
|
||||
|
||||
<script src="/js/main.js" async defer></script>
|
||||
|
||||
+2
-2
@@ -20,7 +20,7 @@ import _ from 'lodash';
|
||||
|
||||
element.className = _.compact([element.className, 'loading']).join(' ');
|
||||
element.innerHTML = [
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>',
|
||||
'<div class="svg"></div>',
|
||||
'<div class="spinner">',
|
||||
'<div></div>',
|
||||
'<div></div>',
|
||||
@@ -28,7 +28,7 @@ import _ from 'lodash';
|
||||
element.innerHTML
|
||||
].join('');
|
||||
|
||||
svg = element.querySelector('svg');
|
||||
svg = element.querySelector('.svg');
|
||||
|
||||
setTimeout(() => {
|
||||
parser.parse(element.getAttribute('data-expr'))
|
||||
|
||||
@@ -32,16 +32,22 @@ export default class Parser {
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
render(svgElement, styles) {
|
||||
var svg;
|
||||
render(containerElement, styles) {
|
||||
var svg,
|
||||
style = document.createElement('style');
|
||||
|
||||
svgElement.innerHTML = [
|
||||
'<style type="text/css">',
|
||||
styles,
|
||||
'</style>'
|
||||
].join('');
|
||||
containerElement.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>';
|
||||
|
||||
svg = Snap(svgElement);
|
||||
svg = Snap(containerElement.querySelector('svg'));
|
||||
|
||||
style.setAttribute('type', 'text/css');
|
||||
if (style.styleSheet) {
|
||||
style.styleSheet.cssText = styles;
|
||||
} else {
|
||||
style.appendChild(document.createTextNode(styles));
|
||||
}
|
||||
|
||||
svg.select('defs').append(style);
|
||||
|
||||
return this.parsed.render(svg.group())
|
||||
.then(result => {
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ export default class Regexper {
|
||||
this.permalink = root.querySelector('a[data-glyph="link-intact"]');
|
||||
this.download = root.querySelector('a[data-glyph="data-transfer-download"]');
|
||||
this.percentage = root.querySelector('#progress div');
|
||||
this.svg = root.querySelector('#regexp-render svg');
|
||||
this.svgContainer = root.querySelector('#regexp-render');
|
||||
this.svgStyles = this.root.querySelector('#svg-styles').innerHTML;
|
||||
|
||||
this.gaq = (typeof window._gaq === 'undefined') ? [] : window._gaq;
|
||||
@@ -108,7 +108,7 @@ export default class Regexper {
|
||||
updateLinks() {
|
||||
try {
|
||||
this.download.parentNode.style.display = null;
|
||||
this.download.href = this.buildBlobURL(this.svg.parentNode.innerHTML);
|
||||
this.download.href = this.buildBlobURL(this.svgContainer.innerHTML);
|
||||
}
|
||||
catch(e) {
|
||||
// Blobs or URLs created from them don't work here.
|
||||
@@ -158,7 +158,7 @@ export default class Regexper {
|
||||
|
||||
throw message;
|
||||
})
|
||||
.invoke('render', this.svg, this.svgStyles)
|
||||
.invoke('render', this.svgContainer, this.svgStyles)
|
||||
.then(() => {
|
||||
this.state = 'has-results';
|
||||
this.updateLinks();
|
||||
|
||||
+6
-1
@@ -264,12 +264,17 @@ header {
|
||||
margin-left: -24px;
|
||||
}
|
||||
|
||||
svg {
|
||||
.svg {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
}
|
||||
}
|
||||
|
||||
.svg {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
@include adjust-font-size-to($base-font-size);
|
||||
background: $green;
|
||||
|
||||
Reference in New Issue
Block a user