12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import {
- extend,
- nodeOrNew,
- register,
- wrapWithAttrCheck
- } from '../utils/adopter.js'
- import { registerMethods } from '../utils/methods.js'
- import Box from '../types/Box.js'
- import Container from './Container.js'
- import baseFind from '../modules/core/selector.js'
- import * as gradiented from '../modules/core/gradiented.js'
-
- export default class Gradient extends Container {
- constructor (type, attrs) {
- super(
- nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type),
- attrs
- )
- }
-
- // custom attr to handle transform
- attr (a, b, c) {
- if (a === 'transform') a = 'gradientTransform'
- return super.attr(a, b, c)
- }
-
- bbox () {
- return new Box()
- }
-
- targets () {
- return baseFind('svg [fill*=' + this.id() + ']')
- }
-
- // Alias string conversion to fill
- toString () {
- return this.url()
- }
-
- // 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() + ')'
- }
- }
-
- extend(Gradient, gradiented)
-
- registerMethods({
- Container: {
- // Create gradient element in defs
- gradient (...args) {
- return this.defs().gradient(...args)
- }
- },
- // define gradient
- Defs: {
- gradient: wrapWithAttrCheck(function (type, block) {
- return this.put(new Gradient(type)).update(block)
- })
- }
- })
-
- register(Gradient, 'Gradient')
|