function addHandlers
You should avoid setting your event handlers like that (by assigning a function to the onclick property) because you can only have a single function assigned to that property so anything else you assign to it will overwrite the previous event. Instead you should use addEventListener.

function addHandler(id, fn, eventName) {
  document.getElementById(id).addEventListener(eventName || 'click', function() {
    if (obj = canvas.getActiveObject()) {
      fn.call(this, obj);
      canvas.renderAll();
    }
  });
}


There is a line of code (i.e. var isUnderline = (getStyle(obj, 'textDecoration') || '').indexOf('underline') &gt; -1;) which is repeated a lot. It is probably enough to justify giving it it's own function...

function hasStyle(obj, prop, value){
    return !!~(getStyle(obj, prop) || '').indexOf(value);
}


This saves you from having to put isUnderline into memory and then garbage collect it later..

addHandler('bold', function(obj) {
  setStyle(obj, 'fontWeight', hasStyle(obj, 'fontWeight', 'bold') ? '' : 'bold');
});


Finally, you could remove redundancy (for the D.R.Y. principle) by using an object..

var styles = {textDecoration: 'underline', fontWeight: 'bold', fontStyle: 'italic'};
for(let prop in styles){
    if(!styles.hasOwnProperty(prop)) continue;
    addHandler(styles[prop], function(obj) {
        setStyle(obj, styles[prop], hasStyle(obj, prop, styles[prop]) ? '' : styles[prop]);
    });
}