aboutsummaryrefslogtreecommitdiffstats
path: root/src/elements/Gradient.js
diff options
context:
space:
mode:
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2018-11-06 13:48:05 +0100
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2018-11-06 13:48:05 +0100
commita0b13ebcacfd74b9f521110c7225bb404325bcd3 (patch)
treea07c5cc422645e31d7dfef81ce4e54f03f0945f6 /src/elements/Gradient.js
parent9f2696e8a2cf7e4eebc1cc7e31027fe2070094fa (diff)
downloadsvg.js-a0b13ebcacfd74b9f521110c7225bb404325bcd3.tar.gz
svg.js-a0b13ebcacfd74b9f521110c7225bb404325bcd3.zip
reordered modules, add es6 build
Diffstat (limited to 'src/elements/Gradient.js')
-rw-r--r--src/elements/Gradient.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/elements/Gradient.js b/src/elements/Gradient.js
new file mode 100644
index 0000000..cf8aeaa
--- /dev/null
+++ b/src/elements/Gradient.js
@@ -0,0 +1,77 @@
+import { extend, nodeOrNew, register } from '../utils/adopter.js'
+import { registerMethods } from '../utils/methods.js'
+import Box from '../types/Box.js'
+import Container from './Container.js'
+import Stop from './Stop.js'
+import baseFind from '../modules/core/selector.js'
+import * as gradiented from '../modules/core/gradiented.js'
+
+export default class Gradient extends Container {
+ constructor (type) {
+ super(
+ nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type),
+ Gradient
+ )
+ }
+
+ // Add a color stop
+ stop (offset, color, opacity) {
+ return this.put(new Stop()).update(offset, color, opacity)
+ }
+
+ // Update gradient
+ update (block) {
+ // remove all stops
+ this.clear()
+
+ // invoke passed block
+ if (typeof block === 'function') {
+ block.call(this, this)
+ }
+
+ return this
+ }
+
+ // Return the fill id
+ url () {
+ return 'url(#' + this.id() + ')'
+ }
+
+ // Alias string convertion to fill
+ toString () {
+ return this.url()
+ }
+
+ // custom attr to handle transform
+ attr (a, b, c) {
+ if (a === 'transform') a = 'gradientTransform'
+ return super.attr(a, b, c)
+ }
+
+ targets () {
+ return baseFind('svg [fill*="' + this.id() + '"]')
+ }
+
+ bbox () {
+ return new Box()
+ }
+}
+
+extend(Gradient, gradiented)
+
+registerMethods({
+ Container: {
+ // Create gradient element in defs
+ gradient (type, block) {
+ return this.defs().gradient(type, block)
+ }
+ },
+ // define gradient
+ Defs: {
+ gradient (type, block) {
+ return this.put(new Gradient(type)).update(block)
+ }
+ }
+})
+
+register(Gradient)