;(function(global) {
  'use strict';

  function Censored(el, ratio) {

    this.ratio = typeof ratio !== 'undefined' ? ratio : 10;

    this.md = false;
    this.eraser = false;

    if (typeof el === "string") {
      var img = document.getElementById(el);
    } else {
      var img = el;
    }

    var t = this;

    t.toggleEraser = function(val) {
      t.eraser = val;
    };

    var canvas1 = document.createElement('canvas'),
        ctx1    = canvas1.getContext('2d'),
        canvas2 = document.createElement('canvas'),
        ctx2    = canvas2.getContext('2d'),
        canvas3 = document.createElement('canvas'),
        ctx3    = canvas3.getContext('2d');

    img.onload = function() {
      var wrapper = document.createElement('div');
      wrapper.style.position = 'relative'
      var parent = img.parentNode;
      parent.insertBefore(wrapper, img);
      canvas1.height = img.height;
      canvas1.width = img.width;
      canvas1.style.position = 'absolute';
      ctx1.mozImageSmoothingEnabled = false;
      ctx1.webkitImageSmoothingEnabled = false;
      ctx1.imageSmoothingEnabled = false;
      var w = img.width * (0.01 * t.ratio);
      var h = img.height * (0.01 * t.ratio);
      ctx1.drawImage(img, 0, 0, w, h);
      ctx1.drawImage(canvas1, 0, 0, w, h, 0, 0, canvas1.width, canvas1.height);
      canvas2.height = img.height;
      canvas2.width = img.width;
      canvas2.style.position = 'absolute';
      ctx2.drawImage(img, 0, 0);
      canvas3.height = img.height;
      canvas3.width = img.width;
      canvas3.style.position = 'absolute';
      wrapper.appendChild(canvas1);
      wrapper.appendChild(canvas2);
      wrapper.appendChild(canvas3);
      parent.removeChild(img);

    };

    canvas3.addEventListener('mousedown', function() {
      t.md = true;
    });

    canvas3.addEventListener('mousedown', mouseMoveEvent);

    canvas3.addEventListener('mouseup', function() {
      t.md = false;
    });

    canvas3.addEventListener('mousemove', mouseMoveEvent);

    function mouseMoveEvent(e) {
      if (t.md) {
        if (t.eraser) {
          ctx3.clearRect(e.layerX - 20, e.layerY - 20, 40, 40);
        } else {
          ctx3.putImageData(ctx1.getImageData(e.layerX - 20, e.layerY - 20, 40, 40), e.layerX - 20, e.layerY - 20);
        }
      }
    }

    document.addEventListener('keydown', function(e) {
      if (e.altKey) {
        t.toggleEraser(true);
      }
    });

    document.addEventListener('keyup', function(e) {
      t.toggleEraser(false);
    });

  };

  global.Censored = Censored;

})(window);

@@ -789,16 +789,59 @@
 elative'
+;%0A      wrapper.style.cursor = 'crosshair';
 %0A      v

Set cursor to crosshair