diff options
author | wout <wout@impinc.co.uk> | 2013-01-05 16:52:14 +0100 |
---|---|---|
committer | wout <wout@impinc.co.uk> | 2013-01-05 16:52:14 +0100 |
commit | eb58a52f9ad219331961119bf114480a58f7b17c (patch) | |
tree | 1acd37aa3d29be76dd5c8f103ff94d266dac81ad /src/doc.js | |
parent | b40093fbfb9cfa0e8b9f67a2db18ea0b68947ef4 (diff) | |
download | svg.js-eb58a52f9ad219331961119bf114480a58f7b17c.tar.gz svg.js-eb58a52f9ad219331961119bf114480a58f7b17c.zip |
Removed temp wrapper in safari bug fix
Diffstat (limited to 'src/doc.js')
-rw-r--r-- | src/doc.js | 56 |
1 files changed, 44 insertions, 12 deletions
@@ -4,13 +4,10 @@ SVG.Doc = function Doc(element) { this.constructor.call(this, SVG.create('svg')); - /* create an extra wrapper */ - var wrapper = document.createElement('div'); - wrapper.style.cssText = 'position:relative;width:100%;height:100%;'; - /* ensure the presence of a html element */ - if (typeof element == 'string') - element = document.getElementById(element); + this.parent = typeof element == 'string' ? + document.getElementById(element) : + element; /* set svg element attributes and create the <defs> node */ this. @@ -18,16 +15,51 @@ SVG.Doc = function Doc(element) { attr('xlink', SVG.xlink, SVG.ns). defs(); - /* add elements */ - element.appendChild(wrapper); - wrapper.appendChild(this.node); - /* ensure correct rendering for safari */ - this.stage(); + this.stage(); }; // Inherits from SVG.Element SVG.Doc.prototype = new SVG.Element(); // Include the container object -SVG.extend(SVG.Doc, SVG.Container);
\ No newline at end of file +SVG.extend(SVG.Doc, SVG.Container); + +// Hack for safari preventing text to be rendered in one line. +// Basically it sets the position of the svg node to absolute +// when the dom is loaded, and resets it to relative a few milliseconds later. +SVG.Doc.prototype.stage = function() { + var check, + element = this, + wrapper = document.createElement('div'); + + /* set temp wrapper to position relative */ + wrapper.style.cssText = 'position:relative;height:100%;'; + + /* put element into wrapper */ + element.parent.appendChild(wrapper); + wrapper.appendChild(element.node); + + /* check for dom:ready */ + check = function() { + if (document.readyState === 'complete') { + element.attr('style', 'position:absolute;'); + setTimeout(function() { + /* set position back to relative */ + element.attr('style', 'position:relative;'); + + /* remove temp wrapper */ + element.parent.removeChild(element.node.parentNode); + element.node.parentNode.removeChild(element.node); + element.parent.appendChild(element.node); + + }, 5); + } else { + setTimeout(check, 10); + } + }; + + check(); + + return this; +};
\ No newline at end of file |