Mercurial > repos > tabletprog
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) |