changeset 118:0a66fe3a368a

Allow selection and navigation of assignment nodes.
author Mike Pavone <pavone@retrodev.com>
date Mon, 15 Apr 2013 21:55:26 -0700
parents f4e464a17579
children 77f7cd65e121
files editor.css editor.js src/editor.tp
diffstat 3 files changed, 43 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/editor.css	Mon Apr 15 21:35:37 2013 -0700
+++ b/editor.css	Mon Apr 15 21:55:26 2013 -0700
@@ -163,6 +163,11 @@
 	display: block;
 }
 
+.varname:after
+{
+	content: ' <-';
+}
+
 .lambda
 {
 	display: inline;
--- a/editor.js	Mon Apr 15 21:35:37 2013 -0700
+++ b/editor.js	Mon Apr 15 21:55:26 2013 -0700
@@ -41,11 +41,16 @@
 
 assignment.prototype.toHTML = function(node, up) {
 	this.up = up;
+	var astNode = this;
 	var base = newEl('div', {
-		className: 'assignment'
+		className: 'assignment',
+		onclick: function(event) {
+			main_module.assignClick(this, astNode, event);
+		}
 	});
 	var varName = newEl('span', {
-		textContent: this.symbol.name + ' <-'
+		textContent: this.symbol.name,
+		className: 'varname'
 	});
 	this.domNode = base;
 	base.appendChild(varName);
--- a/src/editor.tp	Mon Apr 15 21:35:37 2013 -0700
+++ b/src/editor.tp	Mon Apr 15 21:55:26 2013 -0700
@@ -64,6 +64,25 @@
 	}
 }
 
+setSelection <- :astnode {
+	fakeEvent <- #{
+		stopPropagation <- :Blah {
+		}
+	}
+	selection <- #{
+		valid? <- true
+		in <- {
+		}
+		out <- {
+			fakeEvent <- #{
+				stopPropagation <- :Blah {
+				}
+			}
+			((astnode up) domNode) onclick: fakeEvent
+		}
+	}
+}
+
 editFile <- :path {
 	get: path :request {
 		addClass: (q: "body") "editorMode"
@@ -118,6 +137,18 @@
 		domnode textContent!: key
 		astnode name!: key
 	}
+	setSelection: astnode
+	event stopPropagation: (foreign: undefined)
+}
+
+assignClick <- :domnode astnode event {
+	selectParent: domnode
+	selectQuery: ".selectParent > .varname" in: domnode
+	popInscope: ((astnode symbols) allSymbols: (foreign: undefined)) onClick: :key {
+		(domnode firstChild) textContent!: key
+		(astnode symbol) name!: key
+	}
+	setSelection: astnode withInNode: (astnode expression)
 	event stopPropagation: (foreign: undefined)
 }