Template with Twitter Bootstrap and Fabric.js

by rodrigopandini

HTML

<div class="container">
    <div class="row">
<div class="span2">
    <div id="btnGroup" class="btn-group">
        <button id="btnCreateCircle" class="btn btn-small" title="Circle" rel="tooltip"><i class="icon-adjust"></i></button>
        <button id="btnCreateText" class="btn btn-small" title="Text" rel="tooltip"><i class="icon-font"></i></button>
        <button id="btnCreateImage" class="btn btn-small" title="Image" rel="tooltip"><i class="icon-picture"></i></button>
    </div>
    
    <ul id="containerLayers">
    </ul>
</div>
<div class="span10">
    <canvas id="c" width="400" height="400"></canvas>
</div>
</div>
</div>

CSS

@import url('http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css');
@import url('http://twitter.github.com/bootstrap/assets/css/bootstrap.css');
    
canvas{
  border-width: 1px;
  border-style: solid;
  border-color: #000;
  margin: 5px; 
}
#btnGroup{
  margin: 5px 5px 10px 3px;
}
#containerLayers { 
    list-style-type: none; 
    margin: 0; 
    padding: 0; 
    width: 100%; 
}
#containerLayers li { 
    margin: 0 3px 3px 3px; 
    padding: 0.4em; 
    padding-left: 1.5em;
    height: 15px; 
}
#containerLayers li span { 
    position: absolute; 
    margin-left: -1.3em; 
}

.actived{
    border: 1px solid black;
}

JavaScript

var src = "http://fabricjs.com/lib/pug.jpg";
// canvas
var canvas = new fabric.Canvas('c');
canvas.backgroundColor = "#F5F5F5";

$("#btnCreateCircle").click(function(evt){
    // remove active state of each layer
    $("li").removeClass("actived");
    canvas.forEachObject(function(obj){
        obj.setActive(false);
        canvas.renderAll();
    });   
    
    // object
    var circle = new fabric.Circle({
        left: fabric.util.getRandomInt(25, canvas.width - 25),
        top: fabric.util.getRandomInt(25, canvas.height - 25),
        radius: 25,
        fill: "#dd0000"
    });
    circle.hasRotatingPoint = true;
    circle.setActive(true);
    canvas.add(circle);
    canvas.renderAll();
    
    // layer
    var id = canvas.getObjects().length - 1;
    $("#containerLayers").prepend('<li id="'+ id +'" class="ui-state-default actived"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span> item ' + id + '</li>');
    $("#"+id).click(function(evt){
        if($(this).hasClass("actived")){
            /*
            $(this).removeClass("actived");
            canvas.item(id).setActive(false);
            canvas.renderAll();
            */
                
            // remove active state of all layers and objects
            $("li").removeClass("actived");
            canvas.forEachObject(function(obj){
                obj.setActive(false);
                canvas.renderAll();
            });
            
        }else{
            // remove active state of all layers and objects
            $("li").removeClass("actived");
            canvas.forEachObject(function(obj){
                obj.setActive(false);
                //canvas.renderAll();
            });
            
            $(this).addClass("actived");
            canvas.item(id).setActive(true);
            canvas.renderAll();        
        }
        
    });
    
});

$("#btnCreateText").click(function(evt){
    // remove active state of each layer
    $("li").removeClass("actived");
   ...