]> source.dussan.org Git - svg.js.git/commitdiff
fixed `root()`, `textPath()`, `text.path()` and `path.text()` and removed font-family... 3.0.10
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Mon, 14 Jan 2019 12:10:38 +0000 (13:10 +0100)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Mon, 14 Jan 2019 12:10:38 +0000 (13:10 +0100)
CHANGELOG.md
spec/spec/selector.js
src/elements/Dom.js
src/elements/Element.js
src/elements/TextPath.js
src/modules/core/defaults.js
src/modules/core/selector.js

index 145ebf5dcbbe2e3ae59a1f0227618fabc37cb89d..dc49accc58e3bbe5166b451cd5e1ff483678d8e8 100644 (file)
@@ -10,7 +10,12 @@ The document follows the conventions described in [“Keep a CHANGELOG”](http:
 ## [3.0.10] - 2018-01-14
 
 ### Fixed
- - fixed `textPath()` and `path().text()`
+ - fixed `textPath()`, `path().text()` and `text().path()`
+ - fixed `root()` method
+ - fixed default values returned by `attr`. Can be missleading if present.
+
+### Added
+ - added `findOne()` for better performance
 
 ## [3.0.9] - 2018-01-14
 
index 99823cf137941c9cdcfd3caf1e48edea0b414d26..470eaef4b2e516a51852806967c00cf7667b61e8 100644 (file)
@@ -44,7 +44,20 @@ describe('Selector', function() {
         , e4 = draw.rect(100, 100).addClass('unselectable-element')
         , e5 = group.rect(100, 100).addClass('selectable-element')
 
-      expect(group.find('rect.selectable-element').valueOf()).toEqual([e3, e5])
+      expect(group.find('rect.selectable-element')).toEqual([e3, e5])
+    })
+  })
+
+  describe('Parent#findOne()', function() {
+    it('gets all elements with a given class name inside a given element', function() {
+      var group = draw.group()
+        , e1 = draw.rect(100, 100).addClass('selectable-element')
+        , e2 = draw.rect(100, 100).addClass('unselectable-element')
+        , e3 = group.rect(100, 100).addClass('selectable-element')
+        , e4 = draw.rect(100, 100).addClass('unselectable-element')
+        , e5 = group.rect(100, 100).addClass('selectable-element')
+
+      expect(group.findOne('rect.selectable-element')).toBe(e3)
     })
   })
 
index 458ebbcdbc321b0ba20c685f3504d07c739dc059..a0afa6dab59c52c5fd9adeca11d97248bc7a9e2c 100644 (file)
@@ -7,7 +7,7 @@ import {
   create,
   register
 } from '../utils/adopter.js'
-import { find } from '../modules/core/selector.js'
+import { find, findOne } from '../modules/core/selector.js'
 import { globals } from '../utils/window.js'
 import { map } from '../utils/utils.js'
 import { ns } from '../modules/core/namespaces.js'
@@ -313,5 +313,5 @@ export default class Dom extends EventTarget {
   }
 }
 
-extend(Dom, { attr, find })
+extend(Dom, { attr, find, findOne })
 register(Dom)
index ba15f526e0b9844f455307bed1310b5189c41e2a..b13ddd5fa0068c0cbfdb9e5523c6178d19857ed9 100644 (file)
@@ -15,8 +15,6 @@ import Dom from './Dom.js'
 import List from '../types/List.js'
 import SVGNumber from '../types/SVGNumber.js'
 
-const Svg = getClass(root)
-
 export default class Element extends Dom {
   constructor (node, attrs) {
     super(node, attrs)
@@ -67,7 +65,7 @@ export default class Element extends Dom {
 
   // Get parent document
   root () {
-    let p = this.parent(Svg)
+    let p = this.parent(getClass(root))
     return p && p.root()
   }
 
index 4d07b5dd7df5600ef5fae858d2632da55367cb02..d8ab125b26f80e344bf8deffee02b1ada4b61eb5 100644 (file)
@@ -40,41 +40,43 @@ export default class TextPath extends Text {
 registerMethods({
   Container: {
     textPath: wrapWithAttrCheck(function (text, path) {
-      // Convert to instance if needed
-      if (!(path instanceof Path)) {
-        path = this.defs().path(path)
+      // Convert text to instance if needed
+      if (!(text instanceof Text)) {
+        text = this.text(text)
       }
 
-      // Create textPath
-      const textPath = path.text(text)
-
-      // Move text to correct container
-      textPath.parent().addTo(this)
-
-      return textPath
+      return text.path(path)
     })
   },
   Text: {
     // Create path for text to run on
-    path: wrapWithAttrCheck(function (track) {
-      var path = new TextPath()
+    path: wrapWithAttrCheck(function (track, importNodes = true) {
+      var textPath = new TextPath()
 
       // if track is a path, reuse it
       if (!(track instanceof Path)) {
         // create path element
-        track = this.root().defs().path(track)
+        track = this.defs().path(track)
       }
 
       // link textPath to path and add content
-      path.attr('href', '#' + track, xlink)
+      textPath.attr('href', '#' + track, xlink)
+
+      // Transplant all nodes from text to textPath
+      let node
+      if (importNodes) {
+        while ((node = this.node.firstChild)) {
+          textPath.node.appendChild(node)
+        }
+      }
 
       // add textPath element as child node and return textPath
-      return this.put(path)
+      return this.put(textPath)
     }),
 
     // Get the textPath children
     textPath () {
-      return this.find('textPath')[0]
+      return this.findOne('textPath')
     }
   },
   Path: {
@@ -85,17 +87,8 @@ registerMethods({
         text = new Text().addTo(this.parent()).text(text)
       }
 
-      // Create textPath from text and path
-      const textPath = text.path(this)
-      textPath.remove()
-
-      // Transplant all nodes from text to textPath
-      let node
-      while ((node = text.node.firstChild)) {
-        textPath.node.appendChild(node)
-      }
-
-      return textPath.addTo(text)
+      // Create textPath from text and path and return
+      return text.path(this)
     }),
 
     targets () {
index 0d496bcb8543248d13d7b97cb25691b83827c472..499d1b48c02b6b1ec21d089ffb7c9500703cb1aa 100644 (file)
@@ -42,7 +42,5 @@ export let attrs = {
   'stop-color': '#000000',
 
   // text
-  'font-size': 16,
-  'font-family': 'Helvetica, Arial, sans-serif',
   'text-anchor': 'start'
 }
index 24841c557e8cb95a66a91648d1b13e0fb84e4cb7..1667d4d35014236085c4ee127454ab8032dc43ec 100644 (file)
@@ -13,3 +13,7 @@ export default function baseFind (query, parent) {
 export function find (query) {
   return baseFind(query, this.node)
 }
+
+export function findOne (query) {
+  return adopt(this.node.querySelector(query))
+}