diff options
author | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-06 13:48:05 +0100 |
---|---|---|
committer | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-06 13:48:05 +0100 |
commit | a0b13ebcacfd74b9f521110c7225bb404325bcd3 (patch) | |
tree | a07c5cc422645e31d7dfef81ce4e54f03f0945f6 /src/elements/Gradient.js | |
parent | 9f2696e8a2cf7e4eebc1cc7e31027fe2070094fa (diff) | |
download | svg.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.js | 77 |
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) |