Fabric.js Clone Selected

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.1/fabric.min.js"></script>
<button id=cloneSelected>Clone selected</button>
<canvas id="canvas" style="border: 1px solid #cccccc"></canvas>

JavaScript

var canvas = new fabric.Canvas('canvas', {
    width: 500,
    height: 500,
});

canvas.add(new fabric.Rect({
    left: 100,
    top: 100,
    width: 50,
    height: 50,
    fill: '#faa'

}));
canvas.add(new fabric.Circle({
    left: 300,
    top: 300,
    radius: 25,
    fill: '#afa'
}));

$('#cloneSelected').click(function() {
    console.log('cloneSelected');

    var activeObject = canvas.getActiveObject();
    var activeGroup = canvas.getActiveGroup();

    if (activeObject) {
        console.log('object selected');

        var clonedObject = null;
        var json = activeObject.toJSON();
        if (json.type == 'rect') {
            clonedObject = new fabric.Rect(json);
        } else if (json.type == 'circle') {
            clonedObject = new fabric.Circle(json);
        } else {
            console.log('unknown object type: ' + json.type);
            return;
        }

        var oldLeft = clonedObject.getLeft();
        var oldTop = clonedObject.getTop();

        clonedObject.setLeft(oldLeft + 10);
        clonedObject.setTop(oldTop + 10);

        var boundingRect = clonedObject.getBoundingRect(true);
        if (boundingRect.left + boundingRect.width > canvas.getWidth()) {
            clonedObject.setLeft(oldLeft);
        }
        if (boundingRect.top + boundingRect.height > canvas.getHeight()) {
            clonedObject.setTop(oldTop);
        }

        canvas.add(clonedObject);
        canvas.setActiveObject(clonedObject);
        canvas.renderAll();
        console.log('selected object cloned');

    } else if (activeGroup) {
        console.log('group selected');

        canvas.discardActiveGroup();

        var clonedObjects = [];

        activeGroup.getObjects().forEach(function (object) {

            var clonedObject = null;

            var json = object.toJSON();
            if (json.type == 'rect') {
                clonedObject = new fabric.Rect(json);
            } else if (json.type === 'circle') {
                clonedObject...