Source: editor/components/jgraduate/paint.js

/**
 *
 */
export default class Paint {
  /**
   * @param {module:jGraduate.jGraduatePaintOptions} [opt]
  */
  constructor (opt) {
    const options = opt || {}
    this.alpha = isNaN(options.alpha) ? 100 : options.alpha
    // copy paint object
    if (options.copy) {
      /**
       * @name module:jGraduate~Paint#type
       * @type {"none"|"solidColor"|"linearGradient"|"radialGradient"}
       */
      this.type = options.copy.type
      /**
       * Represents opacity (0-100).
       * @name module:jGraduate~Paint#alpha
       * @type {Float}
       */
      this.alpha = options.copy.alpha
      /**
       * Represents #RRGGBB hex of color.
       * @name module:jGraduate~Paint#solidColor
       * @type {string}
       */
      this.solidColor = null
      /**
       * @name module:jGraduate~Paint#linearGradient
       * @type {SVGLinearGradientElement}
       */
      this.linearGradient = null
      /**
       * @name module:jGraduate~Paint#radialGradient
       * @type {SVGRadialGradientElement}
       */
      this.radialGradient = null

      switch (this.type) {
        case 'none':
          break
        case 'solidColor':
          this.solidColor = options.copy.solidColor
          break
        case 'linearGradient':
          this.linearGradient = options.copy.linearGradient.cloneNode(true)
          break
        case 'radialGradient':
          this.radialGradient = options.copy.radialGradient.cloneNode(true)
          break
      }
    // create linear gradient paint
    } else if (options.linearGradient) {
      this.type = 'linearGradient'
      this.solidColor = null
      this.radialGradient = null
      if (options.linearGradient.hasAttribute('xlink:href')) {
        const xhref = document.getElementById(options.linearGradient.getAttribute('xlink:href').substr(1))
        this.linearGradient = xhref.cloneNode(true)
      } else {
        this.linearGradient = options.linearGradient.cloneNode(true)
      }
    // create linear gradient paint
    } else if (options.radialGradient) {
      this.type = 'radialGradient'
      this.solidColor = null
      this.linearGradient = null
      if (options.radialGradient.hasAttribute('xlink:href')) {
        const xhref = document.getElementById(options.radialGradient.getAttribute('xlink:href').substr(1))
        this.radialGradient = xhref.cloneNode(true)
      } else {
        this.radialGradient = options.radialGradient.cloneNode(true)
      }
    // create solid color paint
    } else if (options.solidColor) {
      this.type = 'solidColor'
      this.solidColor = options.solidColor
    // create empty paint
    } else {
      this.type = 'none'
      this.solidColor = null
      this.linearGradient = null
      this.radialGradient = null
    }
  }
}