Class: BlockPyEditor

BlockPyEditor

new BlockPyEditor(main, tag)

An object that manages the various editors, where users can edit their program. Also manages the movement between editors. There are currently four editors: - Blocks: A Blockly instance - Text: A CodeMirror instance - Instructor: Features for changing the assignment and environment settings - Upload: (Incomplete) A menu for uploading and running code from a desktop file.
This:
Parameters:
Name Type Description
main Object The main BlockPy instance
tag HTMLElement The HTML object this is attached to.
Source:

Members

(static) CATEGORY_MAP

Maps short category names in the toolbox to the full XML used to represent that category as usual. This is kind of a clunky mechanism for managing the different categories, and doesn't allow us to specify individual blocks.
Source:

previousLine

Properties:
Name Type Description
previousLine Number Keeps track of the previously highlighted line.
Source:

Methods

addAvailableModule(name)

Makes the module available in the availableModules multi-select menu by adding it to the list.
Parameters:
Name Type Description
name String The name of the module (human-friendly version, as opposed to the slug) to be added.
Source:

changeProgram(name)

Updates the current file being edited in the editors. This appears to be deprecated.
Parameters:
Name Type Description
name String The name of the file being edited (e.g, "__main__", "starting_code")
Source:

copyImage()

Shows a dialog window with the current block workspace encoded as a downloadable PNG image.
Source:

getBlocksFromXml() → {XMLDom}

Helper function for retrieving the current Blockly workspace as an XML DOM object.
Source:
Returns:
The blocks in the current workspace.
Type
XMLDom

getHighlightMap()

DEPRECATED, thankfully Builds up an array indicating the relevant block ID for a given step. Operates on the current this.blockly instance It works by injecting __HIGHLIGHT__(id); at the start of every line of code and then extracting that with regular expressions. This makes it vulnerable if someone decides to use __HIGHLIGHT__ in their code. I'm betting on that never being a problem, though. Still, this was a miserable way of accomplishing the desired behavior.
Source:

getPngFromBlocks(callback)

Generates a PNG version of the current workspace. This PNG is stored in a Base-64 encoded string as part of a data URL (e.g., "data:image/png;base64,..."). TODO: There seems to be some problems capturing blocks that don't start with statement level blocks (e.g., expression blocks).
Parameters:
Name Type Description
callback function A function to be called with the results. This function should take two parameters, the URL (as a string) of the generated base64-encoded PNG and the IMG tag.
Source:

hideBlockMenu()

Hides the Block tab, which involves shrinking it and hiding the Blockly instance.
Source:

hideInstructorMenu()

Hides the Instructor tab, which shrinking it.
Source:

hideSplitMenu()

Hides the Text tab, which involves shrinking it and hiding its CodeMirror too.
Source:

hideTextMenu()

Hides the Text tab, which involves shrinking it and hiding its CodeMirror too.
Source:

hideUploadMenu()

Hides the Upload tab, which shrinking it.
Source:

highlightBlock(block)

Highlights a block in Blockly. Unfortunately, this is the same as selecting it.
Parameters:
Name Type Description
block Number The ID of the block object to highlight.
Source:

highlightError(line)

Highlights a line of code in the CodeMirror instance. This applies the "error" style which is meant to suggest that a line is wrong.
Parameters:
Name Type Description
line Number The line of code to highlight. I think this is zero indexed?
Source:

highlightLine(line)

Highlights a line of code in the CodeMirror instance. This applies the "active" style which is meant to bring attention to a line, but not suggest it is wrong.
Parameters:
Name Type Description
line Number The line of code to highlight. I think this is zero indexed?
Source:

initBlockly()

Initializes the Blockly instance (handles all the blocks). This includes attaching a number of ChangeListeners that can keep the internal code representation updated and enforce type checking.
Source:

initInstructor()

Initializes the Instructor tab, which has a number of buttons and menus for manipulating assignments and the environment. One important job is to register the SummerNote instance used for editing the Introduction of the assignment.
Source:

initText()

Initializes the CodeMirror instance. This handles text editing (with syntax highlighting) and also attaches a listener for change events to update the internal code represntation.
Source:

refreshBlockHighlight(line)

Used to restore a block's highlight when travelling from the code tab. This uses a mapping between the blocks and text that is generated from the parser. The parser has stored the relevant line numbers for each block in the XML of the block. Very sophisticated, and sadly fairly fragile. TODO: I believe there's some kind of off-by-one error here...
Parameters:
Name Type Description
line Number The line of code to highlight. I think this is zero indexed?
Source:

refreshHighlight()

Assuming that a line has been highlighted previously, this will set the line to be highlighted again. Used when we need to restore a highlight.
Source:

resetBlockSilence()

Resets the silenceBlock after a short delay
Source:

setBlocksFromXml()

Helper function for setting the current Blockly workspace to whatever XML DOM is given. This clears out any existing blocks.
Source:

setLevel()

Eventually will be used to update "levels" of sophistication of the code interface. Currently unimplemented and unused.
Source:

setMode(mode)

Dispatch method to set the mode to the given argument. If the mode is invalid, an editor error is reported. If the
Parameters:
Name Type Description
mode String The new mode to set to ("Blocks", "Text", "Upload", or "Instructor")
Source:

setModeToBlocks()

Sets the current editor mode to Blocks, hiding the other menus. Also forces the block side to update. There is a chance this could fail, if the text side is irredeemably awful. So then the editor bounces back to the text side.
Source:

setModeToInstructor()

Sets the current editor mode to the Instructor mode, hiding the other menus.
Source:

setModeToSplit()

Sets the current editor mode to Split mode, hiding the other menus.
Source:

setModeToText()

Sets the current editor mode to Text, hiding the other menus. Also forces the text side to update.
Source:

setModeToUpload()

Sets the current editor mode to Upload mode, hiding the other menus.
Source:

setText(code)

Actually changes the value of the CodeMirror instance
Parameters:
Name Type Description
code String The new code for the CodeMirror
Source:

showBlockMenu()

Shows the Block tab, which involves restoring its height and showing the Blockly instance.
Source:

showInstructorMenu()

Shows the Instructor tab, which involves restoring its height.
Source:

showSplitMenu()

Shows the Text tab, which requires restoring its height, showing AND refreshing the CodeMirror instance.
Source:

showTextMenu()

Shows the Text tab, which requires restoring its height, showing AND refreshing the CodeMirror instance.
Source:

showUploadMenu()

Shows the Upload tab, which involves restoring its height.
Source:

unhighlightBlock()

Removes the outline around a block. Currently unused.
Source:

unhighlightLines()

Removes any highlight in the text code editor.
Source:

updateBlocks()

Attempts to update the model for the current code file from the block workspace. Might be prevented if an update event was already percolating.
Source:

updateBlocksFromModel() → {Boolean}

Updates the block editor from the current code file in the model. Might be prevented if an update event was already percolating. This can also report an error if one occurs.
Source:
Returns:
Returns true upon success.
Type
Boolean

updateTextFromModel()

Updates the text editor from the current code file in the model. Might be prevented if an update event was already percolating.
Source:

updateToolbox(only_set) → (nullable) {String}

Creates an updated representation of the Toolboxes XML as currently specified in the model, using whatever modules have been added or removed. This method can either set it or just retrieve it for future use.
Parameters:
Name Type Description
only_set Boolean Whether to return the XML string or to actually set the XML. False means that it will not update the toolbox!
Source:
Returns:
Possibly returns the XML of the toolbox as a string.
Type
String