/** * Blockly Apps: Block Factory * * Copyright 2013 Google Inc. * http://blockly.googlecode.com/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview JavaScript for Blockly's Block Factory preview. * @author fraser@google.com (Neil Fraser) */ 'use strict'; /** * The uneditable preview block. * @type {Blockly.Block} */ var previewBlock = null; /** * Create the specified block in this preview pane. * @param {string} type Name of block. * @param {string} code JavaScript code to create a block. */ function updateFunc(type, code) { if (previewBlock) { previewBlock.dispose(); previewBlock = null; } eval(code); // Create the preview block. previewBlock = new Blockly.Block(Blockly.mainWorkspace, type); previewBlock.initSvg(); previewBlock.render(); previewBlock.setMovable(false); previewBlock.setDeletable(false); } /** * Initialize Blockly. Called on page load. */ function init() { var rtl = (document.location.search == '?rtl'); Blockly.inject(document.body, {path: '../../', rtl: rtl}); if (window.parent.initPreview) { // Let the top-level application know that Blockly is ready. window.parent.initPreview(updateFunc); } else { // Attempt to diagnose the problem. var msg = 'Error: Unable to communicate between frames.\n' + 'The preview frame will not be functional.\n\n'; if (window.parent == window) { msg += 'Try loading index.html instead of preview.html'; } else if (window.location.protocol == 'file:') { msg += 'This may be due to a security restriction preventing\n' + 'access when using the file:// protocol.\n' + 'http://code.google.com/p/chromium/issues/detail?id=47416'; } alert(msg); } } window.addEventListener('load', init);