code: function() {
      Dom.hide(this.el);
  
      this.errorHandler = new ErrorHandler(this.outer, this.mediator, this.options.errorsContainer);
      this.store = new EditorStore(this.el.value, this.mediator);
  
      this.blockManager = new BlockManager(this);
      this.blockAddition = BlockAddition.create(this);
      this.BlockAdditionTop = BlockAdditionTop.create(this);
      this.blockControls = BlockControls.create(this);
      this.blockPositionerSelect = new BlockPositionerSelect(this.mediator);
      this.selectionHandler = new SelectionHandler(this.outer, this.mediator, this);
      this.formatBar = new FormatBar(this.options.formatBar, this.mediator, this);
  
      this.mediator.on('block:changePosition', this.changeBlockPosition);
      this.mediator.on('block:limitReached', this.blockLimitReached);
  
      // Apply specific classes when block order is updated
      this.mediator.on('block:rerender', this.blockOrderUpdated);
      this.mediator.on('block:create', this.blockOrderUpdated);
      this.mediator.on('block:remove', this.blockOrderUpdated);
      this.mediator.on('block:replace', this.blockOrderUpdated);
      this.mediator.on("block:countUpdate", this.onBlockCountChange);
      this.mediator.on("block-positioner-select:render", this.renderBlockPositionerSelect);
  
      this.dataStore = "Please use store.retrieve();";
  
      this._setEvents();
  
      // External event listeners
      window.addEventListener('click', this.hideAllTheThings);
      document.body.addEventListener('keydown', this.disableBackButton);
  
      this.createBlocks();
      this.wrapper.classList.add('st-ready');
  
      if(!_.isUndefined(this.onEditorRender)) {
        this.onEditorRender();
      }
    }
docs: /*
  Build the Editor instance.
  Check to see if we've been passed JSON already, and if not try and
  create a default block.
  If we have JSON then we need to build all of our blocks from this.