aboutsummaryrefslogtreecommitdiffstats
path: root/src/textpath.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/textpath.js')
-rw-r--r--src/textpath.js57
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