]> source.dussan.org Git - svg.js.git/commitdiff
implements `round()` (#916)
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Thu, 8 Nov 2018 11:59:03 +0000 (12:59 +0100)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Thu, 8 Nov 2018 11:59:03 +0000 (12:59 +0100)
CHANGELOG.md
dist/svg.js
spec/spec/element.js
src/elements/Dom.js

index 7e4a8cc1b2c4d5933661e2126570a5ae15cfd687..8fb06b03d39dd1459ea1b6f6ce6a6ad046510876 100644 (file)
@@ -25,6 +25,7 @@ The document follows the conventions described in [“Keep a CHANGELOG”](http:
 - added `SVG.Style` which can be created with `style()` or `fontface()` (#517)
 - added `EventTarget` which is a baseclass to get event abilities (#641)
 - added `Dom` which is a baseclass to get dom abilities
+- added `round()` which lets you round attribues from a node
 
 ### Removed
 - removed `SVG.Array.split()` function
index 6b05383827ec2b5d40f570c6cfcb36290177be94..e80e6bd3641c6508ba3705bb12d05a893558d34d 100644 (file)
@@ -6,7 +6,7 @@
 * @copyright Wout Fierens <wout@mick-wout.com>
 * @license MIT
 *
-* BUILT: Thu Nov 08 2018 12:02:46 GMT+0100 (GMT+01:00)
+* BUILT: Thu Nov 08 2018 12:57:03 GMT+0100 (GMT+01:00)
 */;
 var SVG = (function () {
   'use strict';
@@ -1618,6 +1618,26 @@ var SVG = (function () {
         element = makeInstance(element);
         this.node.parentNode.replaceChild(element.node, this.node);
         return element;
+      }
+    }, {
+      key: "round",
+      value: function round() {
+        var precision = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
+        var map$$1 = arguments.length > 1 ? arguments[1] : undefined;
+        var factor = Math.pow(10, precision);
+        var attrs = this.attr(); // If we have no map, build one from attrs
+
+        if (!map$$1) {
+          map$$1 = Object.keys(attrs);
+        } // Holds rounded attributes
+
+
+        var newAttrs = {};
+        map$$1.forEach(function (key) {
+          newAttrs[key] = Math.round(attrs[key] * factor) / factor;
+        });
+        this.attr(newAttrs);
+        return this;
       } // Return id on string conversion
 
     }, {
index 6ac74c4ce43c021c14e392084a7c6c7363e98fc3..1cb754e186f1adae484edee87246e53bfd763075 100644 (file)
@@ -1033,4 +1033,22 @@ describe('Element', function() {
       expect(g.defs() instanceof SVG.Defs).toBeTruthy()
     })
   })
+  describe('round()', function () {
+    it('round all attribues of a node to a specific precision', function () {
+      var rect = draw.rect(100.123456, 200.987654)
+
+      expect(rect.round(2).attr()).toEqual(jasmine.objectContaining({
+        width: 100.12,
+        height: 200.99
+      }))
+    })
+    it('round specified attributes of a node to a specific precision', function () {
+      var rect = draw.rect(100.123456, 200.987654)
+
+      expect(rect.round(2, ['width']).attr()).toEqual(jasmine.objectContaining({
+        width: 100.12,
+        height: 200.987654
+      }))
+    })
+  })
 })
index e31c15ca5037b3f19f8f895980da46ee2cbef965..75f3e941437a7d8ab5728b365cc3f96b69122af2 100644 (file)
@@ -188,6 +188,25 @@ export default class Dom extends EventTarget {
     return element
   }
 
+  round (precision = 2, map) {
+    const factor = 10 ** precision
+    const attrs = this.attr()
+
+    // If we have no map, build one from attrs
+    if (!map) {
+      map = Object.keys(attrs)
+    }
+
+    // Holds rounded attributes
+    const newAttrs = {}
+    map.forEach((key) => {
+      newAttrs[key] = Math.round(attrs[key] * factor) / factor
+    })
+
+    this.attr(newAttrs)
+    return this
+  }
+
   // Return id on string conversion
   toString () {
     return this.id()