diff editor.tp @ 25:4d87c38404d6

List literals, fixes to implicit self property lookup, import statement and editor improvements
author Mike Pavone <pavone@retrodev.com>
date Mon, 02 Apr 2012 22:28:48 -0700
parents fe3533494ce9
children 93bbc4c8be95
line wrap: on
line diff
--- a/editor.tp	Tue Mar 27 00:39:32 2012 -0700
+++ b/editor.tp	Mon Apr 02 22:28:48 2012 -0700
@@ -12,12 +12,13 @@
 parser <- foreign: #{
 	parse <- foreign: :str {}
 }
+isLambda <- foreign: :astnode {}
 
 //js builtins
 console <- foreign: #{
 	log <- foreign: :val {}
 }
-window <- #{}
+window <- foreign: #{}
 Object <- foreign: #{
 	keys <- foreign: :object {}
 }
@@ -35,6 +36,17 @@
   }
 }
 
+filter <- :arr pred {
+	output <- arr slice: 0 0
+	each: arr :idx el {
+		if: (pred: el) {
+			output push: el
+		} else: {}
+	}
+	output
+}
+
+//editor code
 editFile <- :path {
 	get: path :request {
 		addClass: (q: "body") "editorMode"
@@ -47,19 +59,64 @@
 	}
 }
 
-symbolClick <- :domnode astnode {
+selectNode <- :node {
+	each: (qall: ".selected") :idx el {
+		removeClass: el "selected"
+	}
+	addClass: node "selected"
+}
+
+selectQuery <- :selector {
+	selectQuery: selector in: (foreign: undefined)
+}
+
+selectQuery:in <- :selector :context {
+	each: (qall: ".selected") :idx el {
+		removeClass: el "selected"
+	}
+	each: (qall: selector context) :idx el {
+		addClass: el "selected"
+	}
+}
+
+selectParent <- :node {
+	each: (qall: ".selectParent") :idx el {
+		removeClass: el "selected"
+	}
+	addClass: (node parentNode) "selectParent"
+}
+
+popInscope:onClick <- :syms :handler {
 	inscope <- q: "#inscope"
 	inscope innerHTML!: ""
-	console log: astnode
-	syms <- (astnode symbols) allSymbols
 	each: syms :idx key {
 		inscope appendChild: (newEl: "li" #{
 			textContent <- key
+			onclick <- { handler: key }
 		})
 	}
 }
 
-//editor code
+symbolClick <- :domnode astnode {
+	console log: astnode
+	selectNode: domnode
+	popInscope: ((astnode symbols) allSymbols) onClick: :key {
+		domnode textContent!: key
+		astnode name!: key
+	}
+	
+}
+
+funClick <- :domnode astnode {
+	selectParent: domnode
+	selectQuery: ".selectParent > .funpart" in: (domnode parentNode)
+	symtable <- astnode symbols
+	syms <- filter: (symtable allSymbols) :sym {
+		isLambda: ((symtable find: sym) def)
+	}
+	popInscope: syms
+}
+
 main <- {
 	//bind handlers for file browser links
 	each: (qall: "a") :idx el {
@@ -81,7 +138,9 @@
 		}
 	}
 	(q: "#ops_button") onclick!: :event {
-		addClass: (q: ".controls") "showops"
+		each: (qall: ".controls") :idx el {
+			addClass: el "showops"
+		}
 	}
 	
 	path <- (window location) pathname