JointJS Vertical Flip

Y-coordinate scalable group flipping

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jointjs/0.9.6/joint.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"></script>
<script src="https://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jointjs/0.9.7/joint.js"></script>
<!-- JointJS Fiddle -->
<div id="paper"></div>

CSS

#paper {
  display: inline-block;
  border: 1px solid gray;
}

JavaScript

var graph = new joint.dia.Graph;
var paper = new joint.dia.Paper({
  el: $('#paper'),
  width: 600,
  height: 600,
  gridSize: 10,
  model: graph
});

joint.shapes.basic.Cylinder = joint.shapes.basic.Generic.extend({

  markup: '<g class="rotatable"><g class="scalable"><path/></g><text/></g>',

  defaults: joint.util.deepSupplement({

    type: 'basic.Cylinder',
    size: {
      width: 40,
      height: 40
    },
    attrs: {
      'path': {
        fill: '#FFFFFF',
        stroke: '#cbd2d7',
        'stroke-width': 3,
        d: [
          'M 0 10 C 10 5, 30 5, 40 10 C 30 15, 10 15, 0 10',
          'L 0 20',
          'C 10 25, 30 25, 40 20',
          'L 40 10'
        ].join(' ')
      },
      'text': {
        fill: '#435460',
        'font-size': 14,
        text: '',
        'ref-x': .5,
        'ref-y': .7,
        ref: 'path',
        'y-alignment': 'middle',
        'text-anchor': 'middle',
        fill: 'black',
        'font-family': 'Arial, helvetica, sans-serif'
      }
    }

  }, joint.shapes.basic.Generic.prototype.defaults)
});

var cylinder = new joint.shapes.basic.Cylinder({
  position: {
    x: 50,
    y: 50
  },
  size: {
    width: 180,
    height: 150
  },
  attrs: {
    text: {
      text: 'ELEMENT'
    }
  }
});

var flippedCylinder = cylinder.clone()
  .translate(200, 0);
  

graph.addCell([
 // cylinder,
  flippedCylinder
]);

var fcView = flippedCylinder.findView(paper);
var fcScalable = fcView.vel.findOne('.scalable');
var fcScale = fcScalable.scale();
var fcTranslate = fcView.vel.translate();
var fcScalableBBox = fcScalable.bbox(true);
var fcScalableCenter = g.rect(fcScalableBBox).center();

// Flip Scalable group
// http://stackoverflow.com/questions/23899718/scale-and-mirror-svg-object
fcScalable.translate(2 * fcScalableCenter.x * fcScale.sx,0);
fcScalable.scale(-fcScale.sx, fcScale.sy);
//console.log(fcTranslate);