comparison 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
comparison
equal deleted inserted replaced
24:fe3533494ce9 25:4d87c38404d6
10 10
11 //TP Parser 11 //TP Parser
12 parser <- foreign: #{ 12 parser <- foreign: #{
13 parse <- foreign: :str {} 13 parse <- foreign: :str {}
14 } 14 }
15 isLambda <- foreign: :astnode {}
15 16
16 //js builtins 17 //js builtins
17 console <- foreign: #{ 18 console <- foreign: #{
18 log <- foreign: :val {} 19 log <- foreign: :val {}
19 } 20 }
20 window <- #{} 21 window <- foreign: #{}
21 Object <- foreign: #{ 22 Object <- foreign: #{
22 keys <- foreign: :object {} 23 keys <- foreign: :object {}
23 } 24 }
24 25
25 //kernel definitions 26 //kernel definitions
33 if:else <- :self trueblock :elseblock { 34 if:else <- :self trueblock :elseblock {
34 elseblock: 35 elseblock:
35 } 36 }
36 } 37 }
37 38
39 filter <- :arr pred {
40 output <- arr slice: 0 0
41 each: arr :idx el {
42 if: (pred: el) {
43 output push: el
44 } else: {}
45 }
46 output
47 }
48
49 //editor code
38 editFile <- :path { 50 editFile <- :path {
39 get: path :request { 51 get: path :request {
40 addClass: (q: "body") "editorMode" 52 addClass: (q: "body") "editorMode"
41 src <- request responseText 53 src <- request responseText
42 console log: src 54 console log: src
45 ast populateSymbols: (foreign: null) 57 ast populateSymbols: (foreign: null)
46 ast toHTML: (q: "#src") 58 ast toHTML: (q: "#src")
47 } 59 }
48 } 60 }
49 61
50 symbolClick <- :domnode astnode { 62 selectNode <- :node {
63 each: (qall: ".selected") :idx el {
64 removeClass: el "selected"
65 }
66 addClass: node "selected"
67 }
68
69 selectQuery <- :selector {
70 selectQuery: selector in: (foreign: undefined)
71 }
72
73 selectQuery:in <- :selector :context {
74 each: (qall: ".selected") :idx el {
75 removeClass: el "selected"
76 }
77 each: (qall: selector context) :idx el {
78 addClass: el "selected"
79 }
80 }
81
82 selectParent <- :node {
83 each: (qall: ".selectParent") :idx el {
84 removeClass: el "selected"
85 }
86 addClass: (node parentNode) "selectParent"
87 }
88
89 popInscope:onClick <- :syms :handler {
51 inscope <- q: "#inscope" 90 inscope <- q: "#inscope"
52 inscope innerHTML!: "" 91 inscope innerHTML!: ""
53 console log: astnode
54 syms <- (astnode symbols) allSymbols
55 each: syms :idx key { 92 each: syms :idx key {
56 inscope appendChild: (newEl: "li" #{ 93 inscope appendChild: (newEl: "li" #{
57 textContent <- key 94 textContent <- key
95 onclick <- { handler: key }
58 }) 96 })
59 } 97 }
60 } 98 }
61 99
62 //editor code 100 symbolClick <- :domnode astnode {
101 console log: astnode
102 selectNode: domnode
103 popInscope: ((astnode symbols) allSymbols) onClick: :key {
104 domnode textContent!: key
105 astnode name!: key
106 }
107
108 }
109
110 funClick <- :domnode astnode {
111 selectParent: domnode
112 selectQuery: ".selectParent > .funpart" in: (domnode parentNode)
113 symtable <- astnode symbols
114 syms <- filter: (symtable allSymbols) :sym {
115 isLambda: ((symtable find: sym) def)
116 }
117 popInscope: syms
118 }
119
63 main <- { 120 main <- {
64 //bind handlers for file browser links 121 //bind handlers for file browser links
65 each: (qall: "a") :idx el { 122 each: (qall: "a") :idx el {
66 el onclick!: :event { 123 el onclick!: :event {
67 link <- foreign: this 124 link <- foreign: this
79 srcel <- (q: "#src") 136 srcel <- (q: "#src")
80 srcel textContent!: (srcel textContent) + (el textContent) 137 srcel textContent!: (srcel textContent) + (el textContent)
81 } 138 }
82 } 139 }
83 (q: "#ops_button") onclick!: :event { 140 (q: "#ops_button") onclick!: :event {
84 addClass: (q: ".controls") "showops" 141 each: (qall: ".controls") :idx el {
142 addClass: el "showops"
143 }
85 } 144 }
86 145
87 path <- (window location) pathname 146 path <- (window location) pathname
88 if: (path indexOf: "/edit/") = 0 { 147 if: (path indexOf: "/edit/") = 0 {
89 editFile: (path substr: 5) 148 editFile: (path substr: 5)