diff options
Diffstat (limited to 'src/textpath.js')
-rw-r--r-- | src/textpath.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/textpath.js b/src/textpath.js new file mode 100644 index 0000000..dfe0152 --- /dev/null +++ b/src/textpath.js @@ -0,0 +1,57 @@ +SVG.TextPath = function() { + this.constructor.call(this, SVG.create('textPath')) +} + +// Inherit from SVG.Element +SVG.TextPath.prototype = new SVG.Path + +// +SVG.extend(SVG.TextPath, { + text: function(text) { + /* remove children */ + while (this.node.firstChild) + this.node.removeChild(this.node.firstChild) + + /* add text */ + this.node.appendChild(document.createTextNode(text)) + + return this.parent + } +}) + +// +SVG.extend(SVG.Text, { + // Create path for text to run on + path: function(d) { + /* create textPath element */ + this.textPath = new SVG.TextPath + + /* remove all child nodes */ + while (this.node.firstChild) + this.node.removeChild(this.node.firstChild) + + /* add textPath element as child node */ + this.node.appendChild(this.textPath.node) + + /* create path in defs */ + this.track = this.doc().defs().path(d, true) + + /* create circular reference */ + this.textPath.parent = this + + /* alias local text() method to textPath's text() method */ + this.text = function(text) { + return this.textPath.text(text) + } + + /* alias plot() method on track */ + this.plot = function(d) { + this.track.plot(d) + return this + } + + /* link textPath to path and add content */ + return this.textPath.attr('href', '#' + this.track, SVG.xlink).text(this.content) + } + +})
\ No newline at end of file |