Mercurial > repos > rhope
annotate framework.rhope @ 78:4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 08 Jul 2010 21:55:47 -0400 |
parents | 6202b866d72c |
children | f3686f60985d |
rev | line source |
---|---|
0 | 1 Import webserver.rhope |
2 | |
3 Framework Handler[con,path,request type,queryvars,headers,handler,title,use session] | |
4 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
5 page <- Page[title, path, use session, queryvars, headers] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
6 out list <- [handler]Do[ [[List[]]Append[page]]Append[path] ] |
0 | 7 handler page <- [out list]Index[0] |
8 If[[request type] = ["POST"]] | |
9 { | |
10 final page <- Process POST[handler page, con, headers] | |
11 }{ | |
12 final page <- Val[handler page] | |
13 } | |
14 string,out headers <- [final page]Render | |
15 | |
16 [HTTP OK[con, Get Content Type[".html"], [string]Length, out headers] | |
17 ]Put String[string] | |
18 } | |
19 | |
20 Handler Fixer[handler:out] | |
21 { | |
22 If[[Type Of[handler]] = ["List"]] | |
23 { | |
24 out <- [[["Framework Handler"]Set Input[5, [handler]Index[0]]]Set Input[6, [handler]Index[1]]]Set Input[7, [handler]Index[2]] | |
25 }{ | |
26 out <- handler | |
27 } | |
28 } | |
29 | |
30 Start Web[handlers] | |
31 { | |
32 Print["Starting Rhope Web Server"] | |
33 Init Sessions[] | |
34 { Listen on Port[80,["Connection Start"]Set Input[1, Map[handlers,"Handler Fixer"]]] } | |
35 Wait Forever[] | |
36 } | |
37 | |
38 Get Class[container:class] | |
39 { | |
40 If[[[[container]Class >>]Length] > [0]] | |
41 { | |
42 class <- [[" class=\""]Append[[container]Class >>]]Append["\""] | |
43 }{ | |
44 class <- "" | |
45 } | |
46 } | |
47 | |
48 Blueprint Web Event | |
49 { | |
50 Event Name | |
51 Origin | |
52 Data | |
53 } | |
54 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
55 Web Event[name,origin,data:out] |
0 | 56 { |
57 out <- [[[Build["Web Event"]]Event Name <<[name]]Origin <<[origin]]Data <<[data] | |
58 } | |
59 | |
60 Blueprint Web Container | |
61 { | |
62 Tag Name | |
63 Class | |
64 Propagate Events | |
65 Children | |
66 Handlers | |
67 Named Children | |
68 Session | |
69 Use Session | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
70 Preformatted |
0 | 71 } |
72 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
73 Web Container[class:out] |
0 | 74 { |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
75 out <- [[[[[[[[Build["Web Container"] |
0 | 76 ]Tag Name <<["div"] |
77 ]Class <<[class] | |
78 ]Propagate Events <<[No] | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
79 ]Children <<[List[]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
80 ]Named Children <<[Dictionary[]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
81 ]Handlers <<[Dictionary[]] |
0 | 82 ]Use Session <<[No] |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
83 ]Preformatted <<[No] |
0 | 84 } |
85 | |
86 Name@Web Container[cont:out,none] | |
87 { | |
88 none <- cont | |
89 } | |
90 | |
91 Render Child[start,container:out] | |
92 { | |
93 out <- [start]Append[[container]Render] | |
94 } | |
95 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
96 _Preformatted[child,val:out] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
97 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
98 If[[Type Of[child]] = ["Web Text"]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
99 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
100 out <- [child]Preformatted <<[val] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
101 }{ |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
102 If[[Type Of[child]] = ["Web Container"]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
103 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
104 out <- [child]Preformatted[val] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
105 }{ |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
106 out <- child |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
107 } |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
108 } |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
109 } |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
110 |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
111 Preformatted@Web Container[cont,preformatted?:out] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
112 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
113 out <- [[cont]Children <<[ Map[[cont]Children >>, ["_Preformatted"]Set Input[1, preformatted?]] ] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
114 ]Preformatted <<[preformatted?] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
115 } |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
116 |
0 | 117 Set Session@Web Container[container,session:out] |
118 { | |
119 out <- [ | |
120 [ | |
121 [container]Use Session <<[Yes] | |
122 ]Session <<[session] | |
123 ]Children <<[ Map[ [container]Children >>, ["Set Session"]Set Input[1, session] ] ] | |
124 } | |
125 | |
126 Set Handler@Web Container[container,event name,handler:out] | |
127 { | |
128 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] | |
129 } | |
130 | |
131 Render@Web Container[container:out,headers] | |
132 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
133 If[[container]Preformatted >>] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
134 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
135 newline <- "" |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
136 tab <- "" |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
137 }{ |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
138 newline <- "\n" |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
139 tab <- "\t" |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
140 } |
0 | 141 out <- [[[[[[["<"]Append[ [container]Tag Name >> ] |
142 ]Append[Get Class[container]] | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
143 ]Append[[[">"]Append[newline]]Append[tab]] |
0 | 144 ]Append[Fold[["Render Child"]<String@Worker, "", [container]Children >>]] |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
145 ]Append[[newline]Append["</"]] |
0 | 146 ]Append[ [container]Tag Name >> ] |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
147 ]Append[[">"]Append[newline]] |
0 | 148 } |
149 | |
150 Container Event Handler[container,events,index:cont,out events] | |
151 { | |
152 event <- [events]Index[index] | |
153 [[container]Handlers >>]Index[ [event]Event Name >>] | |
154 { | |
155 result list <- [~]Do[ | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
156 [[List[]]Append[container]]Append[event] |
0 | 157 ] |
158 new container <- [result list]Index[0] | |
159 [result list]Index[1] | |
160 { | |
161 out events <- [result events]Append[~] | |
162 }{ | |
163 out events <- Val[result events] | |
164 } | |
165 }{ | |
166 new container <- container | |
167 out events <- Val[result events] | |
168 } | |
169 | |
170 [events]Next[index] | |
171 { | |
172 cont, result events <- Container Event Handler[new container, events, ~] | |
173 }{ | |
174 cont <- Val[new container] | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
175 result events <- List[] |
0 | 176 } |
177 } | |
178 | |
179 Container Postback Helper[container,post data,index,events:out,out events] | |
180 { | |
181 ,current events <- [[[container]Children >>]Index[index]]Postback[post data] | |
182 { | |
183 new container <- [container]Children <<[[[container]Children >>]Set[index, ~]] | |
184 } | |
185 combined events <- Concatenate[events, current events] | |
186 [[new container]Children >>]Next[index] | |
187 { | |
188 out, out events <- Container Postback Helper[new container, post data, ~, combined events] | |
189 }{ | |
190 [combined events]First | |
191 { | |
192 out, newevents <- Container Event Handler[new container, combined events, ~] | |
193 out events <- Concatenate[combined events, newevents] | |
194 }{ | |
195 out <- Val[new container] | |
196 out events <- Val[combined events] | |
197 } | |
198 } | |
199 } | |
200 | |
201 Postback@Web Container[container,post data:out,events] | |
202 { | |
203 [[container]Children >>]First | |
204 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
205 out, postback events <- Container Postback Helper[container, post data, ~, List[]] |
0 | 206 If[[container]Propagate Events >>] |
207 { | |
208 events <- Val[postback events] | |
209 }{ | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
210 events <- List[] |
0 | 211 } |
212 }{ | |
213 out <- container | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
214 events <- List[] |
0 | 215 } |
216 } | |
217 | |
218 Add Child[cont,child:out] | |
219 { | |
220 If[[cont]Use Session >>] | |
221 { | |
222 prepped child <- [child]Set Session[[cont]Session >>] | |
223 }{ | |
224 prepped child <- Val[child] | |
225 } | |
226 with child <- [cont]Children <<[ [[cont]Children >>]Append[prepped child] ] | |
227 | |
228 [prepped child]Name | |
229 { | |
230 out <- [with child]Named Children <<[ [[with child]Named Children >>]Set[~, [[[with child]Children >>]Length] - [1]] ] | |
231 }{ | |
232 out <- Val[with child] | |
233 } | |
234 } | |
235 | |
236 Get Child By Name[container,name:out,not found] | |
237 { | |
238 ,not found <- [[container]Named Children >>]Index[name] | |
239 { | |
240 out <- [[container]Children >>]Index[~] | |
241 } | |
242 } | |
243 | |
244 Blueprint Page | |
245 { | |
246 Title | |
247 URL | |
248 CSS | |
249 Children | |
250 Named Children | |
251 Handlers | |
252 Use Session | |
253 Session | |
254 Session ID | |
255 } | |
256 | |
257 Set Handler@Page[container,event name,handler:out] | |
258 { | |
259 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] | |
260 } | |
261 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
262 Page[title,url,use session,queryvars,headers:out] |
0 | 263 { |
264 page <- [[[[[[[Build["Page"] | |
265 ]Title <<[title] | |
266 ]URL <<[url] | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
267 ]CSS <<[[List[]]Append["/default.css"]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
268 ]Children <<[List[]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
269 ]Named Children <<[Dictionary[]] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
270 ]Handlers <<[Dictionary[]] |
0 | 271 ]Use Session <<[use session] |
272 If[use session] | |
273 { | |
274 Load@Session[queryvars, headers] | |
275 { | |
276 out <- [[page]Session <<[~]]Session ID <<[ [~]Session ID>>] | |
277 } | |
278 }{ | |
279 out <- Val[page] | |
280 } | |
281 } | |
282 | |
283 Get Action@Page[page:out] | |
284 { | |
285 If[[page]Use Session>>] | |
286 { | |
287 [[page]Session >>]Get Link Params | |
288 { | |
289 out <- [[[page]URL >>]Append["?"]]Append[~] | |
290 }{ | |
291 out <- [page]URL >> | |
292 } | |
293 }{ | |
294 out <- [page]URL >> | |
295 } | |
296 } | |
297 | |
298 Render@Page[page:out,headers] | |
299 { | |
300 out <- [[[[[[["<html>\n\t<head>\n\t\t<title>"]Append[[page]Title >>] | |
301 ]Append["</title>\n\t\t<link rel=\"stylesheet\" href=\""] | |
302 ]Append[[[page]CSS >>]Join["\">\n\t\t<link rel=\"stylesheet\" href=\""]] | |
303 ]Append["\">\n\t</head>\n\t<body>\n\t<form method=\"POST\" action=\""] | |
304 ]Append[[[page]Get Action]Append["\">\n"]] | |
305 ]Append[Fold[["Render Child"]<String@Worker, "", [page]Children >>]] | |
306 ]Append["\t</form>\n\t</body>\n</html>"] | |
307 If[[page]Use Session>>] | |
308 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
309 headers <- [[page]Session >>]Finalize[Dictionary[]] |
0 | 310 }{ |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
311 headers <- Dictionary[] |
0 | 312 } |
313 } | |
314 | |
315 Clear Children[page:out] | |
316 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
317 out <- [[page]Children <<[List[]]]Named Children <<[Dictionary[]] |
0 | 318 } |
319 | |
320 Set@Page[page,key,val:out] | |
321 { | |
322 out <- [page]Session <<[ [[page]Session >>]Set[key, val] ] | |
323 } | |
324 | |
325 Index@Page[page,key:out,not found] | |
326 { | |
327 out,not found <- [[page]Session >>]Index[key] | |
328 } | |
329 | |
330 First@Page[page:first,not found] | |
331 { | |
332 first,not found <- [[page]Session >>]First | |
333 } | |
334 | |
335 Next@Page[page,last:next,not found] | |
336 { | |
337 next,not found <- [[page]Session >>]Next[last] | |
338 } | |
339 | |
340 Add CSS@Page[page,css:out] | |
341 { | |
342 out <- [page]CSS <<[ [[page]CSS >>]Append[css] ] | |
343 } | |
344 | |
345 Clear CSS@Page[page:out] | |
346 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
347 out <- [page]CSS <<[List[]] |
0 | 348 } |
349 | |
350 Decode Helper Decode[list,destlist,index:out] | |
351 { | |
352 code,rest <- [[list]Index[index]]Slice[2] | |
353 newlist <- [destlist]Set[index, [[""]Put Byte[From Hex@Whole Number[code]]]Append[rest]] | |
354 [list]Next[index] | |
355 { | |
1
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
356 out <- Decode Helper Decode[list, newlist, ~] |
0 | 357 }{ |
358 out <- Val[newlist] | |
359 } | |
360 } | |
361 | |
362 Decode Helper Straight[list,destlist,index:out] | |
363 { | |
364 newlist <- [destlist]Set[index, [list]Index[index]] | |
365 [list]Next[index] | |
366 { | |
367 out <- Decode Helper Decode[list, newlist, ~] | |
368 }{ | |
369 out <- Val[newlist] | |
370 } | |
371 } | |
372 | |
373 URL Decode[val:out] | |
374 { | |
375 parts <- [val]Split["%"] | |
376 [parts]First | |
377 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
378 out <- [Decode Helper Straight[parts, List[], ~]]Join[""] |
0 | 379 }{ |
380 out <- val | |
381 } | |
382 } | |
383 | |
384 URL Encode Path[string:out] | |
385 { | |
386 out <- [[[[string]Replace["%","%25"]]Replace[" ","%20"]]Replace["/","%2F"]]Replace["?","%3F"] | |
387 } | |
388 | |
389 Decode Pair[val,key:oval,okey] | |
390 { | |
391 oval <- URL Decode[val] | |
392 okey <- URL Decode[key] | |
393 } | |
394 | |
395 Process POST[page,con,headers:out] | |
396 { | |
397 [con]Get FString[[headers]Index["Content-Length"]] {} | |
398 { | |
399 post string <- [~]Replace["+"," "] | |
400 } | |
401 post data <- Key Value Map[Dict Split[post string, "=", "&"], ["Decode Pair"]<String@Worker] | |
402 out <- [page]Postback[post data] | |
403 } | |
404 | |
405 Postback@Page[page,post data:out,events] | |
406 { | |
407 [[page]Children >>]First | |
408 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
409 out, events <- Container Postback Helper[page, post data, ~, List[]] |
0 | 410 }{ |
411 out <- page | |
412 } | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
413 events <- List[] |
0 | 414 } |
415 | |
416 Blueprint Web Text | |
417 { | |
418 Text | |
419 Enclosing Tag | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
420 Preformatted |
0 | 421 } |
422 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
423 Web Text[text,tag:out] |
0 | 424 { |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
425 out <- [[[Build["Web Text"]]Text <<[text]]Enclosing Tag <<[tag]]Preformatted <<[No] |
0 | 426 } |
427 | |
428 Name@Web Text[text:out,none] | |
429 { | |
430 none <- text | |
431 } | |
432 | |
433 Escape HTML Text[string:out] | |
434 { | |
435 out <- [[[string]Replace["&","&"]]Replace["<", "<"]]Replace[">", ">"] | |
436 } | |
437 | |
438 Render@Web Text[text:out,headers] | |
439 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
440 escaped <- Escape HTML Text[[text]Text >>] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
441 If[[text]Preformatted >>] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
442 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
443 processed text <- Val[escaped] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
444 }{ |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
445 processed text <- [escaped]Replace["\n","<br>\n\t"] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
446 } |
0 | 447 If[[[[text]Enclosing Tag >>]Length] = [0]] |
448 { | |
449 out <- Val[processed text] | |
450 }{ | |
451 out <- [[[["<"]Append[[text]Enclosing Tag >>]]Append[">"]]Append[processed text]]Append[[["</"]Append[[text]Enclosing Tag >>]]Append[">"]] | |
452 } | |
453 } | |
454 | |
455 Postback@Web Text[text,post data:out,events] | |
456 { | |
457 out <- text | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
458 events <- List[] |
0 | 459 } |
460 | |
461 Set Session@Web Text[text,session:out] | |
462 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
463 out <- text |
0 | 464 } |
465 | |
466 Render@String[string:out,headers] | |
467 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
468 out <- [Web Text[string,""]]Render |
0 | 469 } |
470 | |
471 Name@String[string:out,none] | |
472 { | |
473 none <- string | |
474 } | |
475 | |
476 Postback@String[in,post data:out,events] | |
477 { | |
478 out <- in | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
479 events <- List[] |
0 | 480 } |
481 | |
482 Set Session@String[in,session:out] | |
483 { | |
484 out <- in | |
485 } | |
486 | |
487 Blueprint Web Field | |
488 { | |
489 Name | |
490 Value | |
491 Type | |
492 Class | |
493 } | |
494 | |
495 Name@Web Field[field:name,none] | |
496 { | |
497 name <- [field]Name >> | |
498 } | |
499 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
500 Web Field[name,value,type:out] |
0 | 501 { |
502 out <- [[[[Build["Web Field"]]Name <<[name]]Value <<[value]]Type <<[type]]Class <<[""] | |
503 } | |
504 | |
505 Set Session@Web Field[in,session:out] | |
506 { | |
507 out <- in | |
508 } | |
509 | |
510 Render@Web Field[field:out,headers] | |
511 { | |
512 If[[[field]Type >>] = ["multiline"]] | |
513 { | |
514 out <- [[[[[["<textarea name=\""]Append[[field]Name >>]]Append["\""]]Append[Get Class[field]]]Append[">"]]Append[[field]Value >>]]Append["</textarea>"] | |
515 }{ | |
516 out <- [[[[[[[["<input type=\""]Append[[field]Type >>]]Append["\" name=\""]]Append[[field]Name >>]]Append["\""]]Append[Get Class[field]]]Append[" value=\""]]Append[[field]Value >>]]Append["\">"] | |
517 } | |
518 | |
519 } | |
520 | |
521 Postback@Web Field[field,post data:out,event] | |
522 { | |
523 [post data]Index[[field]Name >>] | |
524 { | |
525 out <- [field]Value <<[~] | |
526 | |
527 If[[[field]Value >>] = [~]] | |
528 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
529 event <- List[] |
0 | 530 }{ |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
531 event <- [List[]]Append[ Web Event["change", [field]Name >>, [field]Value >>] ] |
0 | 532 } |
533 }{ | |
534 out <- field | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
535 event <- List[] |
0 | 536 } |
537 } | |
538 | |
539 Blueprint Web Button | |
540 { | |
541 Name | |
542 Label | |
543 Class | |
544 } | |
545 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
546 Web Button[name,label:out] |
0 | 547 { |
548 out <- [[[Build["Web Button"]]Name <<[name]]Label <<[label]]Class <<[""] | |
549 } | |
550 | |
551 Name@Web Button[button:name,none] | |
552 { | |
553 name <- [button]Name >> | |
554 } | |
555 | |
556 Set Session@Web Button[in,session:out] | |
557 { | |
558 out <- in | |
559 } | |
560 | |
561 Postback@Web Button[button,post data:out,events] | |
562 { | |
563 out <- button | |
564 [post data]Index[[button]Name >>] | |
565 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
566 events <- [List[]]Append[ Web Event["click", [button]Name >>, 0] ] |
0 | 567 }{ |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
568 events <- List[] |
0 | 569 } |
570 } | |
571 | |
572 Render@Web Button[button:out,headers] | |
573 { | |
574 out <- [[[[[["<input type=\"submit\" name=\""]Append[[button]Name >>]]Append["\""]]Append[Get Class[button]]]Append[" value=\""]]Append[[button]Label >>]]Append["\">"] | |
575 } | |
576 | |
577 Blueprint Session | |
578 { | |
579 Session ID | |
580 IP Address | |
581 Use Cookies | |
582 Data | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
583 Dirty |
0 | 584 } |
585 | |
586 Get Unique ID[:out] uses Session | |
587 { | |
588 out <- [[[::ID]<Whole Number@String]Append["_"]]Append[Random[]] | |
589 ::ID <- [::ID]+[1] | |
590 } | |
591 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
592 Session[:out] |
0 | 593 { |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
594 out <- [[[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[Dictionary[]]]Dirty <<[No] |
0 | 595 } |
596 | |
597 Load@Session[queryvars,headers:out] uses Session | |
598 { | |
599 ,checkquery <- [headers]Index["Cookie"] | |
600 { | |
601 parts <- Dict Split[~, "=", "; "] | |
602 ,checkquery <- [parts]Index["session_id"] | |
603 { | |
604 ,checkquery <- [::Sessions]Index[~] | |
605 { | |
606 out <- [~]Use Cookies <<[Yes] | |
607 } | |
608 } | |
609 } | |
610 | |
611 | |
612 Val[checkquery] | |
613 { | |
614 ,makenew <- [queryvars]Index["session_id"] | |
615 { | |
616 out, makenew <- [::Sessions]Index[~] | |
617 } | |
618 } | |
619 | |
620 Val[makenew] | |
621 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
622 out <- Session[] |
0 | 623 } |
624 } | |
625 | |
626 Get Link Params@Session[session:out,no params] | |
627 { | |
628 If[[session]Use Cookies >>] | |
629 { | |
630 no params <- No | |
631 }{ | |
632 out <- ["session_id="]Append[[session]Session ID >>] | |
633 } | |
634 } | |
635 | |
636 Set@Session[session,key,val:out] | |
637 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
638 out <- [[session]Data <<[ [[session]Data >>]Set[key, val] ]]Dirty <<[Yes] |
0 | 639 } |
640 | |
641 Index@Session[session,key:out,not found] | |
642 { | |
643 out,not found <- [[session]Data >>]Index[key] | |
644 } | |
645 | |
646 First@Session[session:first,not found] | |
647 { | |
648 first,not found <- [[session]Data >>]First | |
649 } | |
650 | |
651 Next@Session[session,last:next,not found] | |
652 { | |
653 next,not found <- [[session]Data >>]Next[last] | |
654 } | |
655 | |
656 Init Sessions[:out] uses Session | |
657 { | |
658 ::ID <- 1 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
659 ::Sessions <- Dictionary[] |
0 | 660 out <- 0 |
661 } | |
662 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
663 Save@Session[session:out] uses Session |
0 | 664 { |
665 ::Sessions <- [::Sessions]Set[[session]Session ID >>, session] | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
666 } |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
667 |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
668 Finalize@Session[session,headers:out headers] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
669 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
670 If[[session]Dirty >>] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
671 { |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
672 Save[session] |
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
673 } |
0 | 674 out headers <- [headers]Set["Set-Cookie", ["session_id="]Append[[session]Session ID >>]] |
675 } | |
676 | |
677 Blueprint Web Link | |
678 { | |
679 Text | |
680 Target | |
681 Class | |
682 Query Params | |
683 } | |
684 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
685 Web Link[text,target:out] |
0 | 686 { |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
687 out <- [[[[Build["Web Link"]]Text <<[text]]Target <<[target]]Class <<[""]]Query Params <<[Dictionary[]] |
0 | 688 } |
689 | |
690 | |
691 With Session@Web Link[text,target,session:out] | |
692 { | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
693 Web Link[text, target] |
0 | 694 { |
695 out <- [~]Query Params <<[[[~]Query Params >>]Set["session_id", [session]Session ID >>]] | |
696 } | |
697 } | |
698 | |
699 Render@Web Link[link:out,headers] | |
700 { | |
701 [[link]Query Params>>]First | |
702 { | |
703 queryvars <- ["?"]Append[Key Value Join[[link]Query Params>>, "=","&"]] | |
704 }{ | |
705 queryvars <- "" | |
706 } | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
707 out <- [[[[[[["<a href=\""]Append[[link]Target>>]]Append[queryvars]]Append["\""] |
0 | 708 ]Append[Get Class[link]]]Append[">"]]Append[Escape HTML Text[[link]Text>>]]]Append["</a>"] |
709 } | |
710 | |
711 Postback@Web Link[in,post data:out,events] | |
712 { | |
713 out <- in | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
714 events <- List[] |
0 | 715 } |
716 | |
717 Name@Web Link[link:name,none] | |
718 { | |
719 none <- link | |
720 } | |
721 | |
722 Set Session@Web Link[link,session:out] | |
723 { | |
724 If[[[[link]Target >>]Slice[7]] = ["http://"]] | |
725 { | |
726 out <- link | |
727 }{ | |
728 If[[session]Use Cookies >>] | |
729 { | |
730 out <- link | |
731 }{ | |
732 out <- [link]Query Params <<[[[link]Query Params >>]Set["session_id", [session]Session ID>>]] | |
733 } | |
734 } | |
735 } | |
736 | |
737 Blueprint Web Table | |
738 { | |
739 Headers | |
740 Data | |
741 } | |
742 | |
47
6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents:
1
diff
changeset
|
743 Web Table[headers,data:out] |
0 | 744 { |
745 out <- [[Build["Web Table"]]Headers <<[headers]]Data <<[data] | |
746 } | |
747 | |
748 Name@Web Table[link:name,none] | |
749 { | |
750 none <- link | |
751 } | |
752 | |
753 Set Session@Web Table[in,session:out] | |
754 { | |
755 out <- in | |
756 } | |
757 | |
758 Postback@Web Table[table,post data:out,events] | |
759 { | |
760 out <- table | |
761 events <- () | |
762 } | |
763 | |
764 Make Header Row[string,header:out] | |
765 { | |
766 out <- [[[string]Append["\t\t\t<th>"]]Append[header]]Append["</th>\n"] | |
767 } | |
768 | |
769 Get Header Row@Web Table[table:out] | |
770 { | |
771 If[[[[table]Headers >>]Length] > [0]] | |
772 { | |
773 out <- [Fold[["Make Header Row"]<String@Worker, "\t\t<tr>\n", [table]Headers >>]]Append["\t\t</tr>\n"] | |
774 }{ | |
775 out <- "" | |
776 } | |
777 } | |
778 | |
779 Make Table Cell[string,cell:out] | |
780 { | |
781 out <- [[[string]Append["\t\t\t<td>"]]Append[[cell]Render]]Append["</td>\n"] | |
782 } | |
783 | |
784 Make Table Row[string,row:out] | |
785 { | |
786 out <- [Fold[["Make Table Cell"]<String@Worker, [string]Append["\t\t<tr>\n"], row]]Append["\t\t</tr>"] | |
787 } | |
788 | |
789 Render@Web Table[table:out,headers] | |
790 { | |
791 out <- [ | |
792 [ | |
793 ["\t<table>\n"]Append[[table]Get Header Row] | |
794 ]Append[ Fold[["Make Table Row"]<String@Worker, "", [table]Data >>] ] | |
795 ]Append["\t</table>\n"] | |
796 } | |
1
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
797 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
798 Blueprint Web Image |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
799 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
800 Source |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
801 Alt |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
802 } |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
803 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
804 New@Web Image[source,alt:out] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
805 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
806 out <- [[Build["Web Image"]]Source <<[source]]Alt <<[alt] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
807 } |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
808 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
809 Name@Web Image[image:name,none] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
810 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
811 name <- [image]Source >> |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
812 } |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
813 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
814 Set Session@Web Image[in,session:out] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
815 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
816 out <- in |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
817 } |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
818 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
819 Postback@Web Image[image,post data:out,events] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
820 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
821 out <- image |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
822 events <- () |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
823 } |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
824 |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
825 Render@Web Image[image:out,headers] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
826 { |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
827 out <- [[[["<img src=\""]Append[[image]Source >>]]Append["\" alt=\""]]Append[[image]Alt >>]]Append["\">"] |
b3f71490858c
Small fixes and enhancements from main windows box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
828 } |