anchor.diff:    </template>
   
     <script>
  -    function postpone(action) {
  -      return setTimeout(action, 50);
  -    }
  -
  -    function gbsBoardRemoveBorder(board) {
  -      board._setBorderOff();
  -      board.updateStyles();
  -    }
  -
       const compilationModes = {
         gameFramework: {
           compile: ({ main, teacher, ...args }) => {
  
positive.code:         }
        },
  
        attached: function () {
          const setBlocklySounds = () => {
            Blockly.WorkspaceAudio.prototype.preload = () => {
              for (var soundName in this.SOUNDS_) {
                let sound = this.SOUNDS_[soundName];
                sound.volume = 0.01;
                let playPromise = sound.play();
                playPromise && playPromise.then(sound.pause.bind(sound));
                if (goog.userAgent.IPAD || goog.userAgent.IPHONE) break;
              }
            };
          };
  
          const setBlocklyColors = () => {
            Blockly.HSV_SATURATION = 0.64;
            Blockly.HSV_VALUE = 1;
  
            Blockly.MUMUKI_COLORS = {
              pink: "#FF5C82",
              blue: "#5CBEFF",
              yellow: "#FFC95C",
              green: "#5CED71"
            };
  
            // reserved
            Blockly.CUSTOM_COLORS.program = Blockly.MUMUKI_COLORS.pink;
            Blockly.CUSTOM_COLORS.interactiveProgram = Blockly.MUMUKI_COLORS.pink;
            Blockly.CUSTOM_COLORS.interactiveBinding = Blockly.MUMUKI_COLORS.pink;
            Blockly.CUSTOM_COLORS.procedure = Blockly.MUMUKI_COLORS.pink;
            Blockly.CUSTOM_COLORS.function = Blockly.MUMUKI_COLORS.pink;
            Blockly.CUSTOM_COLORS.complete = Blockly.MUMUKI_COLORS.pink;
  
            // control structures
            Blockly.CUSTOM_COLORS.controlStructure = this._isKindergarten() ? Blockly.MUMUKI_COLORS.green : Blockly.MUMUKI_COLORS.yellow;
  
            // commands
            Blockly.CUSTOM_COLORS.primitiveCommand = Blockly.MUMUKI_COLORS.yellow;
            Blockly.CUSTOM_COLORS.primitiveProcedure = Blockly.MUMUKI_COLORS.yellow;
            Blockly.CUSTOM_COLORS.procedure_call = Blockly.MUMUKI_COLORS.yellow;
            Blockly.CUSTOM_COLORS.assignation = Blockly.MUMUKI_COLORS.yellow;
  
            // expressions
            Blockly.Msg.MATH_HUE = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.literalExpression = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.primitiveExpression = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.operator = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.variable = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.parameter = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.primitiveFunction = Blockly.MUMUKI_COLORS.blue;
            Blockly.CUSTOM_COLORS.function_call = Blockly.MUMUKI_COLORS.blue;
  
            setTimeout(() => {
              this.getBlockly().testColors(Blockly.CUSTOM_COLORS);
            });
          };
  
          const setBlocklyCustomSettings = () => {
            if (typeof Blockly === 'undefined' || !Blockly.CUSTOM_COLORS) return postpone(setBlocklyCustomSettings);
  
            // The display mode configuration could be monkey-patched here, like this:
            Blockly.displayModes.iconic.iconSize = 64;
            Blockly.displayModes.iconic.procedureDefIcon = `${this.localMediaUrl}main-procedure.png`;
  
            Blockly.displayMode = this._isKindergarten() ? 'iconic' : 'text';
            setBlocklySounds();
            setBlocklyColors();
  
            // Removing "/" from the block id character set to avoid syntax errors
            Blockly.utils.genUid.soup_ = Blockly.utils.genUid.soup_.replace("/", "");
          };
  
          const updateFields = () => {
            const blockly = this.getBlockly();
  
            const editorValue = this.getEditorValue();
            if (editorValue) {
              editorValue.value = blockly.workspaceXml;
            }
  
            if (this.teacherMode) {
              const editorExtra = this.getEditorExtra();
              if (editorExtra) {
                editorExtra.value = blockly.workspaceXml;
              }
            }
  
            if (typeof angular !== 'undefined') {
              angular.element(editorValue).triggerHandler("change");
            }
  
            const submit = $("kids-submit-button")[0];
            if (submit && submit.$.runner.isRunning) {
              submit.$.runner.stop();
            }
          };
  
          this.$exerciseContainer = $('.mu-kids-exercise');
  
          const setTrashPosition = () => {
            var width = $('#blocklyDiv').width() - 68;
            var height = $('#blocklyDiv').height() - 210;
  
negative.code: <link href="./gs-element-blockly.html" rel="import"/>
  <link href="./gobstones-code-runner.html" rel="import"/>
  <script src="./hammer.min.js"></script>
  
  <script>
    function postpone(action) {
      return setTimeout(action, 50);
    }
  </script>
  
  <dom-module id="mu-gobstones-custom-editor">
  
  