// Where Python code is written var codingEditor = null; // Where Blockly is converted to Python var readOnlyCodingEditor = null; // Range for ace editor line highlighting var Range = ace.require('ace/range').Range; window.addEventListener('load', function() { // Load read only ace editor readOnlyCodingEditor = ace.edit('readOnlyBlocklyCode'); // Set the style readOnlyCodingEditor.setTheme('ace/theme/textmate'); readOnlyCodingEditor.session.setMode('ace/mode/python'); readOnlyCodingEditor.session.setTabSize(2); // Make as read only readOnlyCodingEditor.setReadOnly(true); // Disable scrolling warning readOnlyCodingEditor.$blockScrolling = Infinity; // Load ace editor codingEditor = ace.edit('blocklyCode'); // Set the style codingEditor.setTheme('ace/theme/textmate'); codingEditor.session.setMode('ace/mode/python'); codingEditor.session.setTabSize(2); // Disable scrolling warning codingEditor.$blockScrolling = Infinity; // Enable autocomplete ace.require('ace/ext/language_tools'); codingEditor.setOptions({ enableSnippets: true, enableLiveAutocompletion: true, enableBasicAutocompletion: true }); // Add autocomplete keywords codingEditor.completers.push({ getCompletions: function(editor, session, pos, prefix, callback) { callback(null, [ {value: 'STOP', score: 1000, meta: 'sumorobot'}, {value: 'LEFT', score: 1000, meta: 'sumorobot'}, {value: 'RIGHT', score: 1000, meta: 'sumorobot'}, {value: 'SEARCH', score: 1000, meta: 'sumorobot'}, {value: 'FORWARD', score: 1000, meta: 'sumorobot'}, {value: 'BACKWARD', score: 1000, meta: 'sumorobot'}, {value: 'STATUS', score: 1000, meta: 'sumorobot'}, {value: 'LEFT_LINE', score: 1000, meta: 'sumorobot'}, {value: 'RIGHT_LINE', score: 1000, meta: 'sumorobot'}, {value: 'sumorobot', score: 1000, meta: 'sumorobot'}, {value: 'move', score: 1000, meta: 'sumorobot'}, {value: 'sleep', score: 1000, meta: 'sumorobot'}, {value: 'set_led', score: 1000, meta: 'sumorobot'}, {value: 'is_line', score: 1000, meta: 'sumorobot'}, {value: 'get_line', score: 1000, meta: 'sumorobot'}, {value: 'set_servo', score: 1000, meta: 'sumorobot'}, {value: 'is_opponent', score: 1000, meta: 'sumorobot'}, {value: 'calibrate_line', score: 1000, meta: 'sumorobot'}, {value: 'get_battery_voltage', score: 1000, meta: 'sumorobot'}, {value: 'get_opponent_distance', score: 1000, meta: 'sumorobot'} ]); } }); // Set the code to the saved code from local storage or empty codingEditor.setValue(getLocalStorageItem('sumorobot.code') || ''); // Clear the selection after setting the value codingEditor.clearSelection(); // Add an change listener for the code editor codingEditor.on('change', function() { // When change occurs, save the new code to the localstorage setLocalStorageItem('sumorobot.code', codingEditor.getValue()) }); });