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;
    }
  }
}