# HG changeset patch # User Mike Pavone # Date 1366088126 25200 # Node ID 0a66fe3a368a789725cef9a8a929bae51ef85078 # Parent f4e464a1757914c1aee53b321b4aa4aefbb1b67b Allow selection and navigation of assignment nodes. diff -r f4e464a17579 -r 0a66fe3a368a editor.css --- 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; diff -r f4e464a17579 -r 0a66fe3a368a editor.js --- 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); diff -r f4e464a17579 -r 0a66fe3a368a src/editor.tp --- 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) }