From d580598558b7b083c41113b491ef9540e7189e00 Mon Sep 17 00:00:00 2001
From: Paul Kaplan <pkaplan@media.mit.edu>
Date: Mon, 22 May 2017 15:18:17 -0400
Subject: [PATCH] Add dynamic labelling

---
 src/components/monitor/monitor.jsx |  2 +-
 src/lib/monitor-adapter.js         | 13 ++++++++-----
 src/lib/opcode-labels.js           | 10 +++++-----
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/components/monitor/monitor.jsx b/src/components/monitor/monitor.jsx
index edd0fb043..54b1ebe8a 100644
--- a/src/components/monitor/monitor.jsx
+++ b/src/components/monitor/monitor.jsx
@@ -7,7 +7,7 @@ const styles = require('./monitor.css');
 const categories = {
     data: '#FF8C1A',
     sensing: '#5CB1D6',
-    sounds: '#CF63CF',
+    sound: '#CF63CF',
     looks: '#9966FF',
     motion: '#4C97FF'
 };
diff --git a/src/lib/monitor-adapter.js b/src/lib/monitor-adapter.js
index eccf540be..f458f67c6 100644
--- a/src/lib/monitor-adapter.js
+++ b/src/lib/monitor-adapter.js
@@ -12,15 +12,18 @@ const MONITOR_HEIGHT = 23;
 
 const isUndefined = a => typeof a === 'undefined';
 
-module.exports = function ({id, opcode, value, x, y}, monitorIndex) {
-
-    // Look up category and label from opcode label file
+module.exports = function ({id, opcode, params, value, x, y}, monitorIndex) {
     let opcodeData = OpcodeLabels[opcode];
     if (isUndefined(opcodeData)) {
-        log.error(`No category/label found for opcode: ${opcode}`);
+        log.error(`No data found for opcode: ${opcode}`);
         opcodeData = {category: 'data', label: opcode};
     }
-    const {label, category} = opcodeData;
+
+    // Use labelFn with fields if provided for dynamic labelling (e.g. variables)
+    let {label, category, labelFn} = opcodeData;
+    if (!isUndefined(labelFn)) {
+        label = labelFn(params);
+    }
 
     // Simple layout if x or y are undefined
     // @todo scratch2 has a more complex layout behavior we may want to adopt
diff --git a/src/lib/opcode-labels.js b/src/lib/opcode-labels.js
index 402d6e56e..9dbdcb59f 100644
--- a/src/lib/opcode-labels.js
+++ b/src/lib/opcode-labels.js
@@ -34,7 +34,7 @@ module.exports = {
     // Data
     data_variable: {
         category: 'data',
-        label: 'Variable _' // @todo placeholder for params
+        labelFn: params => params.VARIABLE
     },
 
     // Sound
@@ -50,18 +50,18 @@ module.exports = {
     // Sensing
     sensing_loudness: {
         category: 'sensing',
-        label: 'loundness'
+        label: 'loudness'
     },
     sensing_of: {
         category: 'sensing',
-        label: '_ of _' // @todo placeholder for params
+        labelFn: params => `${params.PROPERTY} of ${params.OBJECT}`
     },
     sensing_current: {
         category: 'sensing',
-        label: 'current _' // @todo placeholder for param
+        labelFn: params => params.CURRENTMENU.toLowerCase()
     },
     sensing_timer: {
-        category: 'timer',
+        category: 'sensing',
         label: 'timer'
     }
 };
-- 
GitLab