# all files / diagram-js/lib/draw/ BaseRenderer.js

100% Statements 21/21
100% Branches 10/10
50% Functions 4/8
100% Lines 21/21

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    861×

    2748×

    2748×

    2748×
    21893×
    21893×
    21893×

    21893×
    21814×
    16646×

    5168×

    2748×
    5054×
    5043×
    1688×

    3355×

    1×

    1×

    1×

    1×

    1×
     var DEFAULT_RENDER_PRIORITY = 1000;

    /**
     * The base implementation of shape and connection renderers.
     *
     * @param {EventBus} eventBus
     * @param {Number} [renderPriority=1000]
     */
    export default function BaseRenderer(eventBus, renderPriority) {
      var self = this;

      renderPriority = renderPriority || DEFAULT_RENDER_PRIORITY;

      eventBus.on([ 'render.shape', 'render.connection' ], renderPriority, function(evt, context) {
        var type = evt.type,
            element = context.element,
            visuals = context.gfx;

        if (self.canRender(element)) {
          if (type === 'render.shape') {
            return self.drawShape(visuals, element);
          } else {
            return self.drawConnection(visuals, element);
          }
        }
      });

      eventBus.on([ 'render.getShapePath', 'render.getConnectionPath'], renderPriority, function(evt, element) {
        if (self.canRender(element)) {
          if (evt.type === 'render.getShapePath') {
            return self.getShapePath(element);
          } else {
            return self.getConnectionPath(element);
          }
        }
      });
    }

    /**
     * Should check whether *this* renderer can render
     * the element/connection.
     *
     * @param {element} element
     *
     * @returns {Boolean}
     */
    BaseRenderer.prototype.canRender = function() {};

    /**
     * Provides the shape's snap svg element to be drawn on the `canvas`.
     *
     * @param {djs.Graphics} visuals
     * @param {Shape} shape
     *
     * @returns {Snap.svg} [returns a Snap.svg paper element ]
     */
    BaseRenderer.prototype.drawShape = function() {};

    /**
     * Provides the shape's snap svg element to be drawn on the `canvas`.
     *
     * @param {djs.Graphics} visuals
     * @param {Connection} connection
     *
     * @returns {Snap.svg} [returns a Snap.svg paper element ]
     */
    BaseRenderer.prototype.drawConnection = function() {};

    /**
     * Gets the SVG path of a shape that represents it's visual bounds.
     *
     * @param {Shape} shape
     *
     * @return {string} svg path
     */
    BaseRenderer.prototype.getShapePath = function() {};

    /**
     * Gets the SVG path of a connection that represents it's visual bounds.
     *
     * @param {Connection} connection
     *
     * @return {string} svg path
     */
    BaseRenderer.prototype.getConnectionPath = function() {};