diff --git a/editor/extension.ts b/editor/extension.ts index cd895a9e..a1d4969b 100644 --- a/editor/extension.ts +++ b/editor/extension.ts @@ -406,16 +406,6 @@ namespace pxt.editor { "main.blocks": data.source }, name: data.meta.name }) - }, { - id: "td", - canImport: data => data.meta.cloudId == "microbit.co.uk" && data.meta.editor == "touchdevelop", - importAsync: (project, data) => - project.createProjectAsync({ - filesOverride: { "main.blocks": "", "main.ts": " " }, - name: data.meta.name - }) - .then(() => project.convertTouchDevelopToTypeScriptAsync(data.source)) - .then(text => project.overrideTypescriptFile(text)) }] }; diff --git a/fieldeditors/extensions.ts b/fieldeditors/extensions.ts index 4d1b2122..7df5025e 100644 --- a/fieldeditors/extensions.ts +++ b/fieldeditors/extensions.ts @@ -1,14 +1,10 @@ /// /// -import { FieldMatrix } from "./fieldMatrix"; pxt.editor.initFieldExtensionsAsync = function (opts: pxt.editor.FieldExtensionOptions): Promise { pxt.debug('loading pxt-microbit field editors...') const res: pxt.editor.FieldExtensionResult = { - fieldEditors: [{ - selector: "matrix", - editor: FieldMatrix - }] + fieldEditors: [] }; return Promise.resolve(res); } \ No newline at end of file diff --git a/fieldeditors/fieldMatrix.ts b/fieldeditors/fieldMatrix.ts deleted file mode 100644 index e8c35ea2..00000000 --- a/fieldeditors/fieldMatrix.ts +++ /dev/null @@ -1,225 +0,0 @@ -/// -/// - -const rowRegex = /^.*[\.#].*$/; - -enum LabelMode { - None, - Number, - Letter -} - -export class FieldMatrix extends Blockly.Field implements Blockly.FieldCustom { - private static CELL_WIDTH = 23; - private static CELL_HORIZONTAL_MARGIN = 7; - private static CELL_VERTICAL_MARGIN = 5; - private static CELL_CORNER_RADIUS = 5; - private static BOTTOM_MARGIN = 9; - private static Y_AXIS_WIDTH = 9; - private static X_AXIS_HEIGHT = 10; - private static TAB = " "; - - public isFieldCustom_ = true; - - private params: any; - private onColor = "#e2484a"; - private offColor = "white"; - - // The number of columns - private matrixWidth: number = 5; - - // The number of rows - private matrixHeight: number = 5; - - private yAxisLabel: LabelMode = LabelMode.None; - private xAxisLabel: LabelMode = LabelMode.None; - - private cellState: boolean[][] = []; - private elt: SVGSVGElement; - - constructor(text: string, params: any, validator?: Function) { - super(text, validator); - this.params = params; - - if (this.params.rows !== undefined) { - let val = parseInt(this.params.rows); - if (!isNaN(val)) { - this.matrixHeight = val; - } - } - - if (this.params.columns !== undefined) { - let val = parseInt(this.params.columns); - if (!isNaN(val)) { - this.matrixWidth = val; - } - } - } - - /** - * Show the inline free-text editor on top of the text. - * @private - */ - showEditor_() { - // Intentionally left empty - } - - private initMatrix() { - this.elt = pxsim.svg.parseString(``); - - // Initialize the matrix that holds the state - for (let i = 0; i < this.matrixHeight; i++) { - this.cellState.push([]) - for (let j = 0; j < this.matrixWidth; j++) { - this.cellState[i].push(false); - } - } - - this.restoreStateFromString(); - this.updateValue() - - // Create the cells of the matrix that is displayed - for (let i = 0; i < this.matrixWidth; i++) { - for (let j = 0; j < this.matrixHeight; j++) { - this.createCell(i, j); - } - } - - if (this.xAxisLabel !== LabelMode.None) { - const y = this.matrixHeight * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_VERTICAL_MARGIN) + FieldMatrix.CELL_VERTICAL_MARGIN * 2 + FieldMatrix.BOTTOM_MARGIN - const xAxis = pxsim.svg.child(this.elt, "g", { transform: `translate(${0} ${y})` }); - for (let i = 0; i < this.matrixWidth; i++) { - const x = this.getYAxisWidth() + i * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_HORIZONTAL_MARGIN) + FieldMatrix.CELL_WIDTH / 2 + FieldMatrix.CELL_HORIZONTAL_MARGIN / 2; - const lbl = pxsim.svg.child(xAxis, "text", { x, class: "blocklyText" }) - lbl.textContent = this.getLabel(i, this.xAxisLabel); - } - } - - if (this.yAxisLabel !== LabelMode.None) { - const yAxis = pxsim.svg.child(this.elt, "g", {}); - for (let i = 0; i < this.matrixHeight; i++) { - const y = i * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_VERTICAL_MARGIN) + FieldMatrix.CELL_WIDTH / 2 + FieldMatrix.CELL_VERTICAL_MARGIN * 2; - const lbl = pxsim.svg.child(yAxis, "text", { x: 0, y, class: "blocklyText" }) - lbl.textContent = this.getLabel(i, this.yAxisLabel); - } - } - - this.fieldGroup_.appendChild(this.elt); - } - - private getLabel(index: number, mode: LabelMode) { - switch (mode) { - case LabelMode.Letter: - return String.fromCharCode(index + /*char code for A*/ 65); - default: - return (index + 1).toString(); - } - } - - private createCell(x: number, y: number) { - const tx = x * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_HORIZONTAL_MARGIN) + FieldMatrix.CELL_HORIZONTAL_MARGIN + this.getYAxisWidth(); - const ty = y * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_VERTICAL_MARGIN) + FieldMatrix.CELL_VERTICAL_MARGIN; - - const cellG = pxsim.svg.child(this.elt, "g", { transform: `translate(${tx} ${ty})` }) as SVGGElement; - const cellRect = pxsim.svg.child(cellG, "rect", { width: FieldMatrix.CELL_WIDTH, height: FieldMatrix.CELL_WIDTH, fill: this.getColor(x, y), rx: FieldMatrix.CELL_CORNER_RADIUS }) as SVGRectElement; - - pxsim.svg.onClick(cellRect, () => { - this.cellState[x][y] = !this.cellState[x][y]; - cellRect.setAttribute("fill", this.getColor(x, y)); - this.updateValue() - }); - } - - private getColor(x: number, y: number) { - return this.cellState[x][y] ? this.onColor : this.offColor; - } - - render_() { - if (!this.visible_) { - this.size_.width = 0; - return; - } - - if (!this.elt) { - this.initMatrix(); - } - - - // The height and width must be set by the render function - this.size_.height = Number(this.matrixHeight) * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_VERTICAL_MARGIN) + FieldMatrix.CELL_VERTICAL_MARGIN * 2 + FieldMatrix.BOTTOM_MARGIN + this.getXAxisHeight() - this.size_.width = Number(this.matrixWidth) * (FieldMatrix.CELL_WIDTH + FieldMatrix.CELL_HORIZONTAL_MARGIN) + this.getYAxisWidth(); - } - - // The return value of this function is inserted in the code - getValue() { - // getText() returns the value that is set by calls to setValue() - let text = removeQuotes(this.getText()); - return `\`\n${FieldMatrix.TAB}${text}\n${FieldMatrix.TAB}\``; - } - - // Restores the block state from the text value of the field - private restoreStateFromString() { - let r = this.getText(); - if (r) { - const rows = r.split("\n").filter(r => rowRegex.test(r)); - - for (let y = 0; y < rows.length && y < this.matrixHeight; y++) { - let x = 0; - const row = rows[y]; - - for (let j = 0; j < row.length && x < this.matrixWidth; j++) { - if (isNegativeCharacter(row[j])) { - this.cellState[x][y] = false; - x++; - } - else if (isPositiveCharacter(row[j])) { - this.cellState[x][y] = true; - x++; - } - } - } - } - } - - // Composes the state into a string an updates the field's state - private updateValue() { - let res = ""; - for (let y = 0; y < this.matrixHeight; y++) { - for (let x = 0; x < this.matrixWidth; x++) { - res += (this.cellState[x][y] ? "#" : ".") + " " - } - res += "\n" + FieldMatrix.TAB - } - - // Blockly stores the state of the field as a string - this.setValue(res); - } - - private getYAxisWidth() { - return this.yAxisLabel === LabelMode.None ? 0 : FieldMatrix.Y_AXIS_WIDTH; - } - - private getXAxisHeight() { - return this.xAxisLabel === LabelMode.None ? 0 : FieldMatrix.X_AXIS_HEIGHT; - } -} - -function isPositiveCharacter(c: string) { - return c === "#" || c === "*" || c === "1"; -} - -function isNegativeCharacter(c: string) { - return c === "." || c === "_" || c === "0"; -} - - -const allQuotes = ["'", '"', "`"]; - -function removeQuotes(str: string) { - str = str.trim(); - const start = str.charAt(0); - if (start === str.charAt(str.length - 1) && allQuotes.indexOf(start) !== -1) { - return str.substr(1, str.length - 2).trim(); - } - return str; -} \ No newline at end of file diff --git a/libs/core/_locales/core-strings.json b/libs/core/_locales/core-strings.json index 01ddf11f..9c25ab5f 100644 --- a/libs/core/_locales/core-strings.json +++ b/libs/core/_locales/core-strings.json @@ -230,7 +230,7 @@ "basic.pause|block": "pause (ms) %pause", "basic.showArrow|block": "show arrow %i=device_arrow", "basic.showIcon|block": "show icon %i", - "basic.showLeds|block": "show leds| %leds", + "basic.showLeds|block": "show leds", "basic.showNumber|block": "show|number %number", "basic.showString|block": "show|string %text", "basic|block": "basic", @@ -266,8 +266,8 @@ "game|block": "game", "images.arrowImage|block": "arrow image %i=device_arrow", "images.arrowNumber|block": "%arrow", - "images.createBigImage|block": "create big image| %leds", - "images.createImage|block": "create image| %leds", + "images.createBigImage|block": "create big image", + "images.createImage|block": "create image", "images.iconImage|block": "icon image %i", "images|block": "images", "input.acceleration|block": "acceleration (mg)|%NAME", diff --git a/libs/core/basic.cpp b/libs/core/basic.cpp index 4375105a..6224a1e7 100644 --- a/libs/core/basic.cpp +++ b/libs/core/basic.cpp @@ -34,13 +34,10 @@ namespace basic { */ //% help=basic/show-leds //% weight=95 blockGap=8 - //% imageLiteral=0 async - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true + //% imageLiteral=1 async //% blockId=device_show_leds - //% block="show leds| %leds" icon="\uf00a" - //% parts="ledmatrix" blockExternalInputs=1 + //% block="show leds" icon="\uf00a" + //% parts="ledmatrix" void showLeds(ImageLiteral leds, int interval = 400) { uBit.display.print(MicroBitImage(imageBytes(leds)), 0, 0, 0, interval); } @@ -87,10 +84,7 @@ namespace basic { * @param leds pattern of LEDs to turn on/off * @param interval time in milliseconds between each redraw */ - //% help=basic/show-animation imageLiteral=0 async - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true + //% help=basic/show-animation imageLiteral=1 async //% parts="ledmatrix" void showAnimation(ImageLiteral leds, int interval = 400) { uBit.display.animate(MicroBitImage(imageBytes(leds)), interval, 5, 0, 0); @@ -137,4 +131,4 @@ namespace basic { void pause(int ms) { fiber_sleep(ms); } -} +} \ No newline at end of file diff --git a/libs/core/images.cpp b/libs/core/images.cpp index 0018d2cd..82203664 100644 --- a/libs/core/images.cpp +++ b/libs/core/images.cpp @@ -10,11 +10,8 @@ namespace images { * Creates an image that fits on the LED screen. */ //% weight=75 help=images/create-image - //% blockId=device_build_image block="create image| %leds" - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true - //% parts="ledmatrix" imageLiteral=0 blockExternalInput=1 + //% blockId=device_build_image block="create image" + //% parts="ledmatrix" Image createImage(ImageLiteral leds) { return MicroBitImage(imageBytes(leds)).clone().leakData(); } @@ -23,11 +20,7 @@ namespace images { * Creates an image with 2 frames. */ //% weight=74 help=images/create-big-image - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true - //% blockId=device_build_big_image block="create big image| %leds" - //% imageLiteral=0 blockExternalInput=1 + //% blockId=device_build_big_image block="create big image" imageLiteral=2 //% parts="ledmatrix" Image createBigImage(ImageLiteral leds) { return createImage(leds); @@ -160,4 +153,4 @@ namespace ImageMethods { void showFrame(Image i, int frame, int interval = 400) { showImage(i, frame * 5, interval); } -} +} \ No newline at end of file diff --git a/libs/core/shims.d.ts b/libs/core/shims.d.ts index e0645bf4..95a96ccd 100644 --- a/libs/core/shims.d.ts +++ b/libs/core/shims.d.ts @@ -12,22 +12,15 @@ declare namespace images { * Creates an image that fits on the LED screen. */ //% weight=75 help=images/create-image - //% blockId=device_build_image block="create image| %leds" - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true - //% parts="ledmatrix" imageLiteral=0 blockExternalInput=1 shim=images::createImage + //% blockId=device_build_image block="create image" + //% parts="ledmatrix" imageLiteral=1 shim=images::createImage function createImage(leds: string): Image; /** * Creates an image with 2 frames. */ //% weight=74 help=images/create-big-image - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true - //% blockId=device_build_big_image block="create big image| %leds" - //% imageLiteral=0 blockExternalInput=1 + //% blockId=device_build_big_image block="create big image" imageLiteral=2 //% parts="ledmatrix" shim=images::createBigImage function createBigImage(leds: string): Image; } @@ -154,13 +147,10 @@ declare namespace basic { */ //% help=basic/show-leds //% weight=95 blockGap=8 - //% imageLiteral=0 async - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true + //% imageLiteral=1 async //% blockId=device_show_leds - //% block="show leds| %leds" icon="\uf00a" - //% parts="ledmatrix" blockExternalInputs=1 interval.defl=400 shim=basic::showLeds + //% block="show leds" icon="\uf00a" + //% parts="ledmatrix" interval.defl=400 shim=basic::showLeds function showLeds(leds: string, interval?: int32): void; /** @@ -190,10 +180,7 @@ declare namespace basic { * @param leds pattern of LEDs to turn on/off * @param interval time in milliseconds between each redraw */ - //% help=basic/show-animation imageLiteral=0 async - //% leds.fieldEditor="matrix" - //% leds.fieldOptions.onParentBlock=true - //% leds.fieldOptions.decompileLiterals=true + //% help=basic/show-animation imageLiteral=1 async //% parts="ledmatrix" interval.defl=400 shim=basic::showAnimation function showAnimation(leds: string, interval?: int32): void; diff --git a/libs/radio/_locales/radio-jsdoc-strings.json b/libs/radio/_locales/radio-jsdoc-strings.json index db34128b..19532da9 100644 --- a/libs/radio/_locales/radio-jsdoc-strings.json +++ b/libs/radio/_locales/radio-jsdoc-strings.json @@ -6,7 +6,9 @@ "radio.Packet.serial": "The serial number of the sender of the packet or 0 if the sender did not sent their serial number.", "radio.Packet.signal": "The received signal strength indicator (RSSI) of the packet.", "radio.Packet.time": "The system time of the sender of the packet at the time the packet was sent.", - "radio.onDataPacketReceived": "Registers code to run when the radio receives a packet. Also takes the\nreceived packet from the radio queue.", + "radio.onReceivedNumber": "Registers code to run when the radio receives a packet. Also takes the\nreceived packet from the radio queue.", + "radio.onReceivedString": "Registers code to run when the radio receives a packet. Also takes the\nreceived packet from the radio queue.", + "radio.onReceivedValue": "Registers code to run when the radio receives a packet. Also takes the\nreceived packet from the radio queue.", "radio.receivedBuffer": "Returns the buffer payload from the last packet taken from the radio queue\n(via ``receiveNumber``, ``receiveString``, etc) or the empty string if that\npacket did not contain a string.", "radio.receivedNumber": "Returns the number payload from the last packet taken from the radio queue\n(via ``receiveNumber``, ``receiveString``, etc) or 0 if that packet did not\ncontain a number.", "radio.receivedSerial": "Returns the serial number of the sender micro:bit from the last packet taken\nfrom the radio queue (via ``receiveNumber``, ``receiveString``, etc) or 0 if\nthat packet did not send a serial number.", diff --git a/libs/radio/_locales/radio-strings.json b/libs/radio/_locales/radio-strings.json index fa33c552..591ea600 100644 --- a/libs/radio/_locales/radio-strings.json +++ b/libs/radio/_locales/radio-strings.json @@ -1,5 +1,7 @@ { - "radio.onDataPacketReceived|block": "on radio received", + "radio.onReceivedNumber|block": "on radio received number", + "radio.onReceivedString|block": "on radio received string", + "radio.onReceivedValue|block": "on radio received", "radio.sendNumber|block": "radio send number %value", "radio.sendString|block": "radio send string %msg", "radio.sendValue|block": "radio send|value %name|= %value", diff --git a/libs/radio/radio.ts b/libs/radio/radio.ts index b5138cc2..0677cc8f 100644 --- a/libs/radio/radio.ts +++ b/libs/radio/radio.ts @@ -37,7 +37,7 @@ namespace radio { * Registers code to run when the radio receives a packet. Also takes the * received packet from the radio queue. */ - //% help=radio/on-data-packet-received + //% help=radio/on-data-packet-received deprecated=true //% mutate=objectdestructuring //% mutateText=Packet //% mutateDefaults="receivedNumber;receivedString:name,receivedNumber:value;receivedString" @@ -55,4 +55,60 @@ namespace radio { cb(packet) }); } + + /** + * Registers code to run when the radio receives a packet. Also takes the + * received packet from the radio queue. + */ + //% help=radio/on-radio-received-number + //% blockId=radio_on_number block="on radio received number" blockGap=8 + export function onReceivedNumber(cb: (num: number, time?: number, serial?: number, signal?: number) => void) { + onDataReceived(() => { + receiveNumber(); + const packet = new Packet(); + packet.receivedNumber = receivedNumber(); + packet.time = receivedTime(); + packet.serial = receivedSerial(); + packet.signal = receivedSignalStrength(); + cb(packet.receivedNumber, packet.time, packet.serial, packet.signal); + }); + } + + /** + * Registers code to run when the radio receives a packet. Also takes the + * received packet from the radio queue. + */ + //% help=radio/on-radio-received-string + //% blockId=radio_on_string block="on radio received string" blockGap=8 + export function onReceivedString(cb: (received: string, time?: number, serial?: number, signal?: number) => void) { + onDataReceived(() => { + receiveNumber(); + const packet = new Packet(); + packet.time = receivedTime(); + packet.serial = receivedSerial(); + packet.signal = receivedSignalStrength(); + packet.receivedString = receivedString(); + cb(packet.receivedString, packet.time, packet.serial, packet.signal); + }); + } + + /** + * Registers code to run when the radio receives a packet. Also takes the + * received packet from the radio queue. + */ + //% help=radio/on-radio-received-value + //% blockId=radio_on_value block="on radio received" blockGap=8 + export function onReceivedValue(cb: (packet: Packet) => void) { + onDataReceived(() => { + receiveNumber(); + const packet = new Packet(); + packet.receivedNumber = receivedNumber(); + packet.time = receivedTime(); + packet.serial = receivedSerial(); + packet.signal = receivedSignalStrength(); + packet.receivedString = receivedString(); + cb(packet) + }); + + } } diff --git a/package-lock.json b/package-lock.json index c9eaecfb..7dd619ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1903,6 +1903,16 @@ "verror": "1.10.0" } }, + "keytar": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-4.2.1.tgz", + "integrity": "sha1-igamV3/fY3PgqmsRInfmPex3/RI=", + "optional": true, + "requires": { + "nan": "2.8.0", + "prebuild-install": "2.5.0" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2306,6 +2316,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "optional": true + }, "node-abi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.2.0.tgz", @@ -3483,9 +3499,9 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "pxt-core": { - "version": "3.10.9", - "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-3.10.9.tgz", - "integrity": "sha512-uZb0GkpIlF3BSZC7sR0XU6XPZhcin31639sCgn3dIjKzMPq31jt0mHR1dj/1j6cTMIM/NyYAUiTSiL/ZwQaKPg==", + "version": "3.10.16", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-3.10.16.tgz", + "integrity": "sha512-QsvI6Q68Pfn99/yoQDKpOLvG0/Ldb+f1MQoTpQ3JyNGC1vuqLI1WA8sbrxT2SGbtreEGV71DHL4Lws++QEdI1Q==", "requires": { "bluebird": "3.5.1", "browserify": "13.3.0", @@ -3504,69 +3520,6 @@ "rtlcss": "2.2.0", "serialport": "6.2.0", "uglify-js": "3.3.21" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "optional": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "keytar": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-4.2.1.tgz", - "integrity": "sha1-igamV3/fY3PgqmsRInfmPex3/RI=", - "optional": true, - "requires": { - "nan": "2.8.0", - "prebuild-install": "2.5.0" - } - }, - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "optional": true - }, - "serialport": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/serialport/-/serialport-6.2.0.tgz", - "integrity": "sha512-y6Bdr+1kazPIMlZQYB1nQhiSbC8xEL8cyuSd79nJ29JwTh7NR0SUxjseoY8DcLRGuta5sifqQhP4CGcI3S/V4Q==", - "optional": true, - "requires": { - "bindings": "1.3.0", - "commander": "2.15.1", - "debug": "3.1.0", - "nan": "2.10.0", - "parser-byte-length": "1.0.2", - "parser-cctalk": "1.0.2", - "parser-delimiter": "1.0.2", - "parser-readline": "1.0.2", - "parser-ready": "1.0.2", - "parser-regex": "1.0.2", - "prebuild-install": "2.5.0", - "promirepl": "1.0.1", - "prompt-list": "3.1.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true - } - } - } } }, "q": { @@ -3838,6 +3791,51 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "optional": true }, + "serialport": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-6.2.0.tgz", + "integrity": "sha512-y6Bdr+1kazPIMlZQYB1nQhiSbC8xEL8cyuSd79nJ29JwTh7NR0SUxjseoY8DcLRGuta5sifqQhP4CGcI3S/V4Q==", + "optional": true, + "requires": { + "bindings": "1.3.0", + "commander": "2.15.1", + "debug": "3.1.0", + "nan": "2.10.0", + "parser-byte-length": "1.0.2", + "parser-cctalk": "1.0.2", + "parser-delimiter": "1.0.2", + "parser-readline": "1.0.2", + "parser-ready": "1.0.2", + "parser-regex": "1.0.2", + "prebuild-install": "2.5.0", + "promirepl": "1.0.1", + "prompt-list": "3.1.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "optional": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + } + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", diff --git a/sim/state/ledmatrix.ts b/sim/state/ledmatrix.ts index 7814fe70..ff023d3f 100644 --- a/sim/state/ledmatrix.ts +++ b/sim/state/ledmatrix.ts @@ -66,7 +66,7 @@ namespace pxsim { export function createInternalImage(width: number): Image { let img = createImage(width) - //pxsim.runtime.unregisterLiveObject(img, true) + pxsim.runtime.unregisterLiveObject(img, true) return img } diff --git a/theme/site/globals/site.variables b/theme/site/globals/site.variables index 9b21fded..de51507a 100755 --- a/theme/site/globals/site.variables +++ b/theme/site/globals/site.variables @@ -74,9 +74,9 @@ --------------------*/ @flyoutLabelColor: white; -@blocklyFlyoutColor: #3B3C3D; +@blocklyFlyoutColor: #4b4949; @blocklyFlyoutColorOpacity: 1.0; -@monacoFlyoutColor: rgba(59, 60, 61, 1.0); +@monacoFlyoutColor: @blocklyFlyoutColor; /*------------------- Serial diff --git a/theme/style.less b/theme/style.less index 1565ee56..5a5b464c 100644 --- a/theme/style.less +++ b/theme/style.less @@ -54,16 +54,6 @@ background: transparent !important; } -/******************************* - Monaco -*******************************/ - -.monacoDraggableBlock { - background: #ecf0f1; - border: solid 3px #ecf0f1; -} - - /* Mobile */ @media only screen and (max-width: @largestMobileScreen) { #filelist {