Mercurial > repos > rhope
comparison framework.rhope @ 47:6202b866d72c
Cleaned up constructor names and merged some other changes in to support the Rhope website
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Dec 2009 01:22:09 -0500 |
parents | b3f71490858c |
children | f3686f60985d |
comparison
equal
deleted
inserted
replaced
46:429b5f441381 | 47:6202b866d72c |
---|---|
1 Import webserver.rhope | 1 Import webserver.rhope |
2 | 2 |
3 Framework Handler[con,path,request type,queryvars,headers,handler,title,use session] | 3 Framework Handler[con,path,request type,queryvars,headers,handler,title,use session] |
4 { | 4 { |
5 page <- New@Page[title, path, use session, queryvars, headers] | 5 page <- Page[title, path, use session, queryvars, headers] |
6 out list <- [handler]Do[ [[New@List[]]Append[page]]Append[path] ] | 6 out list <- [handler]Do[ [[List[]]Append[page]]Append[path] ] |
7 handler page <- [out list]Index[0] | 7 handler page <- [out list]Index[0] |
8 If[[request type] = ["POST"]] | 8 If[[request type] = ["POST"]] |
9 { | 9 { |
10 final page <- Process POST[handler page, con, headers] | 10 final page <- Process POST[handler page, con, headers] |
11 }{ | 11 }{ |
50 Event Name | 50 Event Name |
51 Origin | 51 Origin |
52 Data | 52 Data |
53 } | 53 } |
54 | 54 |
55 New@Web Event[name,origin,data:out] | 55 Web Event[name,origin,data:out] |
56 { | 56 { |
57 out <- [[[Build["Web Event"]]Event Name <<[name]]Origin <<[origin]]Data <<[data] | 57 out <- [[[Build["Web Event"]]Event Name <<[name]]Origin <<[origin]]Data <<[data] |
58 } | 58 } |
59 | 59 |
60 Blueprint Web Container | 60 Blueprint Web Container |
65 Children | 65 Children |
66 Handlers | 66 Handlers |
67 Named Children | 67 Named Children |
68 Session | 68 Session |
69 Use Session | 69 Use Session |
70 } | 70 Preformatted |
71 | 71 } |
72 New@Web Container[class:out] | 72 |
73 { | 73 Web Container[class:out] |
74 out <- [[[[[[[Build["Web Container"] | 74 { |
75 out <- [[[[[[[[Build["Web Container"] | |
75 ]Tag Name <<["div"] | 76 ]Tag Name <<["div"] |
76 ]Class <<[class] | 77 ]Class <<[class] |
77 ]Propagate Events <<[No] | 78 ]Propagate Events <<[No] |
78 ]Children <<[New@List[]] | 79 ]Children <<[List[]] |
79 ]Named Children <<[New@Dictionary[]] | 80 ]Named Children <<[Dictionary[]] |
80 ]Handlers <<[New@Dictionary[]] | 81 ]Handlers <<[Dictionary[]] |
81 ]Use Session <<[No] | 82 ]Use Session <<[No] |
83 ]Preformatted <<[No] | |
82 } | 84 } |
83 | 85 |
84 Name@Web Container[cont:out,none] | 86 Name@Web Container[cont:out,none] |
85 { | 87 { |
86 none <- cont | 88 none <- cont |
87 } | 89 } |
88 | 90 |
89 Render Child[start,container:out] | 91 Render Child[start,container:out] |
90 { | 92 { |
91 out <- [start]Append[[container]Render] | 93 out <- [start]Append[[container]Render] |
94 } | |
95 | |
96 _Preformatted[child,val:out] | |
97 { | |
98 If[[Type Of[child]] = ["Web Text"]] | |
99 { | |
100 out <- [child]Preformatted <<[val] | |
101 }{ | |
102 If[[Type Of[child]] = ["Web Container"]] | |
103 { | |
104 out <- [child]Preformatted[val] | |
105 }{ | |
106 out <- child | |
107 } | |
108 } | |
109 } | |
110 | |
111 Preformatted@Web Container[cont,preformatted?:out] | |
112 { | |
113 out <- [[cont]Children <<[ Map[[cont]Children >>, ["_Preformatted"]Set Input[1, preformatted?]] ] | |
114 ]Preformatted <<[preformatted?] | |
92 } | 115 } |
93 | 116 |
94 Set Session@Web Container[container,session:out] | 117 Set Session@Web Container[container,session:out] |
95 { | 118 { |
96 out <- [ | 119 out <- [ |
105 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] | 128 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] |
106 } | 129 } |
107 | 130 |
108 Render@Web Container[container:out,headers] | 131 Render@Web Container[container:out,headers] |
109 { | 132 { |
133 If[[container]Preformatted >>] | |
134 { | |
135 newline <- "" | |
136 tab <- "" | |
137 }{ | |
138 newline <- "\n" | |
139 tab <- "\t" | |
140 } | |
110 out <- [[[[[[["<"]Append[ [container]Tag Name >> ] | 141 out <- [[[[[[["<"]Append[ [container]Tag Name >> ] |
111 ]Append[Get Class[container]] | 142 ]Append[Get Class[container]] |
112 ]Append[">\n\t"] | 143 ]Append[[[">"]Append[newline]]Append[tab]] |
113 ]Append[Fold[["Render Child"]<String@Worker, "", [container]Children >>]] | 144 ]Append[Fold[["Render Child"]<String@Worker, "", [container]Children >>]] |
114 ]Append["\n</"] | 145 ]Append[[newline]Append["</"]] |
115 ]Append[ [container]Tag Name >> ] | 146 ]Append[ [container]Tag Name >> ] |
116 ]Append[">\n"] | 147 ]Append[[">"]Append[newline]] |
117 } | 148 } |
118 | 149 |
119 Container Event Handler[container,events,index:cont,out events] | 150 Container Event Handler[container,events,index:cont,out events] |
120 { | 151 { |
121 event <- [events]Index[index] | 152 event <- [events]Index[index] |
122 [[container]Handlers >>]Index[ [event]Event Name >>] | 153 [[container]Handlers >>]Index[ [event]Event Name >>] |
123 { | 154 { |
124 result list <- [~]Do[ | 155 result list <- [~]Do[ |
125 [[New@List[]]Append[container]]Append[event] | 156 [[List[]]Append[container]]Append[event] |
126 ] | 157 ] |
127 new container <- [result list]Index[0] | 158 new container <- [result list]Index[0] |
128 [result list]Index[1] | 159 [result list]Index[1] |
129 { | 160 { |
130 out events <- [result events]Append[~] | 161 out events <- [result events]Append[~] |
139 [events]Next[index] | 170 [events]Next[index] |
140 { | 171 { |
141 cont, result events <- Container Event Handler[new container, events, ~] | 172 cont, result events <- Container Event Handler[new container, events, ~] |
142 }{ | 173 }{ |
143 cont <- Val[new container] | 174 cont <- Val[new container] |
144 result events <- New@List[] | 175 result events <- List[] |
145 } | 176 } |
146 } | 177 } |
147 | 178 |
148 Container Postback Helper[container,post data,index,events:out,out events] | 179 Container Postback Helper[container,post data,index,events:out,out events] |
149 { | 180 { |
169 | 200 |
170 Postback@Web Container[container,post data:out,events] | 201 Postback@Web Container[container,post data:out,events] |
171 { | 202 { |
172 [[container]Children >>]First | 203 [[container]Children >>]First |
173 { | 204 { |
174 out, postback events <- Container Postback Helper[container, post data, ~, New@List[]] | 205 out, postback events <- Container Postback Helper[container, post data, ~, List[]] |
175 If[[container]Propagate Events >>] | 206 If[[container]Propagate Events >>] |
176 { | 207 { |
177 events <- Val[postback events] | 208 events <- Val[postback events] |
178 }{ | 209 }{ |
179 events <- New@List[] | 210 events <- List[] |
180 } | 211 } |
181 }{ | 212 }{ |
182 out <- container | 213 out <- container |
183 events <- New@List[] | 214 events <- List[] |
184 } | 215 } |
185 } | 216 } |
186 | 217 |
187 Add Child[cont,child:out] | 218 Add Child[cont,child:out] |
188 { | 219 { |
226 Set Handler@Page[container,event name,handler:out] | 257 Set Handler@Page[container,event name,handler:out] |
227 { | 258 { |
228 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] | 259 out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] |
229 } | 260 } |
230 | 261 |
231 New@Page[title,url,use session,queryvars,headers:out] | 262 Page[title,url,use session,queryvars,headers:out] |
232 { | 263 { |
233 page <- [[[[[[[Build["Page"] | 264 page <- [[[[[[[Build["Page"] |
234 ]Title <<[title] | 265 ]Title <<[title] |
235 ]URL <<[url] | 266 ]URL <<[url] |
236 ]CSS <<[[New@List[]]Append["/default.css"]] | 267 ]CSS <<[[List[]]Append["/default.css"]] |
237 ]Children <<[New@List[]] | 268 ]Children <<[List[]] |
238 ]Named Children <<[New@Dictionary[]] | 269 ]Named Children <<[Dictionary[]] |
239 ]Handlers <<[New@Dictionary[]] | 270 ]Handlers <<[Dictionary[]] |
240 ]Use Session <<[use session] | 271 ]Use Session <<[use session] |
241 | |
242 If[use session] | 272 If[use session] |
243 { | 273 { |
244 Load@Session[queryvars, headers] | 274 Load@Session[queryvars, headers] |
245 { | 275 { |
246 out <- [[page]Session <<[~]]Session ID <<[ [~]Session ID>>] | 276 out <- [[page]Session <<[~]]Session ID <<[ [~]Session ID>>] |
274 ]Append[[[page]Get Action]Append["\">\n"]] | 304 ]Append[[[page]Get Action]Append["\">\n"]] |
275 ]Append[Fold[["Render Child"]<String@Worker, "", [page]Children >>]] | 305 ]Append[Fold[["Render Child"]<String@Worker, "", [page]Children >>]] |
276 ]Append["\t</form>\n\t</body>\n</html>"] | 306 ]Append["\t</form>\n\t</body>\n</html>"] |
277 If[[page]Use Session>>] | 307 If[[page]Use Session>>] |
278 { | 308 { |
279 headers <- [[page]Session >>]Finalize[New@Dictionary[]] | 309 headers <- [[page]Session >>]Finalize[Dictionary[]] |
280 }{ | 310 }{ |
281 headers <- New@Dictionary[] | 311 headers <- Dictionary[] |
282 } | 312 } |
283 } | 313 } |
284 | 314 |
285 Clear Children[page:out] | 315 Clear Children[page:out] |
286 { | 316 { |
287 out <- [[page]Children <<[New@List[]]]Named Children <<[New@Dictionary[]] | 317 out <- [[page]Children <<[List[]]]Named Children <<[Dictionary[]] |
288 } | 318 } |
289 | 319 |
290 Set@Page[page,key,val:out] | 320 Set@Page[page,key,val:out] |
291 { | 321 { |
292 out <- [page]Session <<[ [[page]Session >>]Set[key, val] ] | 322 out <- [page]Session <<[ [[page]Session >>]Set[key, val] ] |
312 out <- [page]CSS <<[ [[page]CSS >>]Append[css] ] | 342 out <- [page]CSS <<[ [[page]CSS >>]Append[css] ] |
313 } | 343 } |
314 | 344 |
315 Clear CSS@Page[page:out] | 345 Clear CSS@Page[page:out] |
316 { | 346 { |
317 out <- [page]CSS <<[New@List[]] | 347 out <- [page]CSS <<[List[]] |
318 } | 348 } |
319 | 349 |
320 Decode Helper Decode[list,destlist,index:out] | 350 Decode Helper Decode[list,destlist,index:out] |
321 { | 351 { |
322 code,rest <- [[list]Index[index]]Slice[2] | 352 code,rest <- [[list]Index[index]]Slice[2] |
343 URL Decode[val:out] | 373 URL Decode[val:out] |
344 { | 374 { |
345 parts <- [val]Split["%"] | 375 parts <- [val]Split["%"] |
346 [parts]First | 376 [parts]First |
347 { | 377 { |
348 out <- [Decode Helper Straight[parts, New@List[], ~]]Join[""] | 378 out <- [Decode Helper Straight[parts, List[], ~]]Join[""] |
349 }{ | 379 }{ |
350 out <- val | 380 out <- val |
351 } | 381 } |
352 } | 382 } |
353 | 383 |
374 | 404 |
375 Postback@Page[page,post data:out,events] | 405 Postback@Page[page,post data:out,events] |
376 { | 406 { |
377 [[page]Children >>]First | 407 [[page]Children >>]First |
378 { | 408 { |
379 out, events <- Container Postback Helper[page, post data, ~, New@List[]] | 409 out, events <- Container Postback Helper[page, post data, ~, List[]] |
380 }{ | 410 }{ |
381 out <- page | 411 out <- page |
382 } | 412 } |
383 events <- New@List[] | 413 events <- List[] |
384 } | 414 } |
385 | 415 |
386 Blueprint Web Text | 416 Blueprint Web Text |
387 { | 417 { |
388 Text | 418 Text |
389 Enclosing Tag | 419 Enclosing Tag |
390 } | 420 Preformatted |
391 | 421 } |
392 New@Web Text[text,tag:out] | 422 |
393 { | 423 Web Text[text,tag:out] |
394 out <- [[Build["Web Text"]]Text <<[text]]Enclosing Tag <<[tag] | 424 { |
425 out <- [[[Build["Web Text"]]Text <<[text]]Enclosing Tag <<[tag]]Preformatted <<[No] | |
395 } | 426 } |
396 | 427 |
397 Name@Web Text[text:out,none] | 428 Name@Web Text[text:out,none] |
398 { | 429 { |
399 none <- text | 430 none <- text |
404 out <- [[[string]Replace["&","&"]]Replace["<", "<"]]Replace[">", ">"] | 435 out <- [[[string]Replace["&","&"]]Replace["<", "<"]]Replace[">", ">"] |
405 } | 436 } |
406 | 437 |
407 Render@Web Text[text:out,headers] | 438 Render@Web Text[text:out,headers] |
408 { | 439 { |
409 processed text <- [Escape HTML Text[[text]Text >>]]Replace["\n","<br>\n\t"] | 440 escaped <- Escape HTML Text[[text]Text >>] |
441 If[[text]Preformatted >>] | |
442 { | |
443 processed text <- Val[escaped] | |
444 }{ | |
445 processed text <- [escaped]Replace["\n","<br>\n\t"] | |
446 } | |
410 If[[[[text]Enclosing Tag >>]Length] = [0]] | 447 If[[[[text]Enclosing Tag >>]Length] = [0]] |
411 { | 448 { |
412 out <- Val[processed text] | 449 out <- Val[processed text] |
413 }{ | 450 }{ |
414 out <- [[[["<"]Append[[text]Enclosing Tag >>]]Append[">"]]Append[processed text]]Append[[["</"]Append[[text]Enclosing Tag >>]]Append[">"]] | 451 out <- [[[["<"]Append[[text]Enclosing Tag >>]]Append[">"]]Append[processed text]]Append[[["</"]Append[[text]Enclosing Tag >>]]Append[">"]] |
416 } | 453 } |
417 | 454 |
418 Postback@Web Text[text,post data:out,events] | 455 Postback@Web Text[text,post data:out,events] |
419 { | 456 { |
420 out <- text | 457 out <- text |
421 events <- New@List[] | 458 events <- List[] |
422 } | 459 } |
423 | 460 |
424 Set Session@Web Text[text,session:out] | 461 Set Session@Web Text[text,session:out] |
425 { | 462 { |
426 out <- session | 463 out <- text |
427 } | 464 } |
428 | 465 |
429 Render@String[string:out,headers] | 466 Render@String[string:out,headers] |
430 { | 467 { |
431 out <- [New@Web Text[string,""]]Render | 468 out <- [Web Text[string,""]]Render |
432 } | 469 } |
433 | 470 |
434 Name@String[string:out,none] | 471 Name@String[string:out,none] |
435 { | 472 { |
436 none <- string | 473 none <- string |
437 } | 474 } |
438 | 475 |
439 Postback@String[in,post data:out,events] | 476 Postback@String[in,post data:out,events] |
440 { | 477 { |
441 out <- in | 478 out <- in |
442 events <- New@List[] | 479 events <- List[] |
443 } | 480 } |
444 | 481 |
445 Set Session@String[in,session:out] | 482 Set Session@String[in,session:out] |
446 { | 483 { |
447 out <- in | 484 out <- in |
458 Name@Web Field[field:name,none] | 495 Name@Web Field[field:name,none] |
459 { | 496 { |
460 name <- [field]Name >> | 497 name <- [field]Name >> |
461 } | 498 } |
462 | 499 |
463 New@Web Field[name,value,type:out] | 500 Web Field[name,value,type:out] |
464 { | 501 { |
465 out <- [[[[Build["Web Field"]]Name <<[name]]Value <<[value]]Type <<[type]]Class <<[""] | 502 out <- [[[[Build["Web Field"]]Name <<[name]]Value <<[value]]Type <<[type]]Class <<[""] |
466 } | 503 } |
467 | 504 |
468 Set Session@Web Field[in,session:out] | 505 Set Session@Web Field[in,session:out] |
487 { | 524 { |
488 out <- [field]Value <<[~] | 525 out <- [field]Value <<[~] |
489 | 526 |
490 If[[[field]Value >>] = [~]] | 527 If[[[field]Value >>] = [~]] |
491 { | 528 { |
492 event <- New@List[] | 529 event <- List[] |
493 }{ | 530 }{ |
494 event <- [New@List[]]Append[ New@Web Event["change", [field]Name >>, [field]Value >>] ] | 531 event <- [List[]]Append[ Web Event["change", [field]Name >>, [field]Value >>] ] |
495 } | 532 } |
496 }{ | 533 }{ |
497 out <- field | 534 out <- field |
498 event <- New@List[] | 535 event <- List[] |
499 } | 536 } |
500 } | 537 } |
501 | 538 |
502 Blueprint Web Button | 539 Blueprint Web Button |
503 { | 540 { |
504 Name | 541 Name |
505 Label | 542 Label |
506 Class | 543 Class |
507 } | 544 } |
508 | 545 |
509 New@Web Button[name,label:out] | 546 Web Button[name,label:out] |
510 { | 547 { |
511 out <- [[[Build["Web Button"]]Name <<[name]]Label <<[label]]Class <<[""] | 548 out <- [[[Build["Web Button"]]Name <<[name]]Label <<[label]]Class <<[""] |
512 } | 549 } |
513 | 550 |
514 Name@Web Button[button:name,none] | 551 Name@Web Button[button:name,none] |
524 Postback@Web Button[button,post data:out,events] | 561 Postback@Web Button[button,post data:out,events] |
525 { | 562 { |
526 out <- button | 563 out <- button |
527 [post data]Index[[button]Name >>] | 564 [post data]Index[[button]Name >>] |
528 { | 565 { |
529 events <- [New@List[]]Append[ New@Web Event["click", [button]Name >>, 0] ] | 566 events <- [List[]]Append[ Web Event["click", [button]Name >>, 0] ] |
530 }{ | 567 }{ |
531 events <- New@List[] | 568 events <- List[] |
532 } | 569 } |
533 } | 570 } |
534 | 571 |
535 Render@Web Button[button:out,headers] | 572 Render@Web Button[button:out,headers] |
536 { | 573 { |
541 { | 578 { |
542 Session ID | 579 Session ID |
543 IP Address | 580 IP Address |
544 Use Cookies | 581 Use Cookies |
545 Data | 582 Data |
583 Dirty | |
546 } | 584 } |
547 | 585 |
548 Get Unique ID[:out] uses Session | 586 Get Unique ID[:out] uses Session |
549 { | 587 { |
550 out <- [[[::ID]<Whole Number@String]Append["_"]]Append[Random[]] | 588 out <- [[[::ID]<Whole Number@String]Append["_"]]Append[Random[]] |
551 ::ID <- [::ID]+[1] | 589 ::ID <- [::ID]+[1] |
552 } | 590 } |
553 | 591 |
554 New@Session[:out] | 592 Session[:out] |
555 { | 593 { |
556 out <- [[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[New@Dictionary[]] | 594 out <- [[[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[Dictionary[]]]Dirty <<[No] |
557 } | 595 } |
558 | 596 |
559 Load@Session[queryvars,headers:out] uses Session | 597 Load@Session[queryvars,headers:out] uses Session |
560 { | 598 { |
561 ,checkquery <- [headers]Index["Cookie"] | 599 ,checkquery <- [headers]Index["Cookie"] |
579 } | 617 } |
580 } | 618 } |
581 | 619 |
582 Val[makenew] | 620 Val[makenew] |
583 { | 621 { |
584 out <- New@Session[] | 622 out <- Session[] |
585 } | 623 } |
586 } | 624 } |
587 | 625 |
588 Get Link Params@Session[session:out,no params] | 626 Get Link Params@Session[session:out,no params] |
589 { | 627 { |
595 } | 633 } |
596 } | 634 } |
597 | 635 |
598 Set@Session[session,key,val:out] | 636 Set@Session[session,key,val:out] |
599 { | 637 { |
600 out <- [session]Data <<[ [[session]Data >>]Set[key, val] ] | 638 out <- [[session]Data <<[ [[session]Data >>]Set[key, val] ]]Dirty <<[Yes] |
601 } | 639 } |
602 | 640 |
603 Index@Session[session,key:out,not found] | 641 Index@Session[session,key:out,not found] |
604 { | 642 { |
605 out,not found <- [[session]Data >>]Index[key] | 643 out,not found <- [[session]Data >>]Index[key] |
616 } | 654 } |
617 | 655 |
618 Init Sessions[:out] uses Session | 656 Init Sessions[:out] uses Session |
619 { | 657 { |
620 ::ID <- 1 | 658 ::ID <- 1 |
621 ::Sessions <- New@Dictionary[] | 659 ::Sessions <- Dictionary[] |
622 out <- 0 | 660 out <- 0 |
623 } | 661 } |
624 | 662 |
625 Finalize@Session[session,headers:out headers] uses Session | 663 Save@Session[session:out] uses Session |
626 { | 664 { |
627 ::Sessions <- [::Sessions]Set[[session]Session ID >>, session] | 665 ::Sessions <- [::Sessions]Set[[session]Session ID >>, session] |
666 } | |
667 | |
668 Finalize@Session[session,headers:out headers] | |
669 { | |
670 If[[session]Dirty >>] | |
671 { | |
672 Save[session] | |
673 } | |
628 out headers <- [headers]Set["Set-Cookie", ["session_id="]Append[[session]Session ID >>]] | 674 out headers <- [headers]Set["Set-Cookie", ["session_id="]Append[[session]Session ID >>]] |
629 } | 675 } |
630 | 676 |
631 Blueprint Web Link | 677 Blueprint Web Link |
632 { | 678 { |
634 Target | 680 Target |
635 Class | 681 Class |
636 Query Params | 682 Query Params |
637 } | 683 } |
638 | 684 |
639 New@Web Link[text,target:out] | 685 Web Link[text,target:out] |
640 { | 686 { |
641 out <- [[[[Build["Web Link"]]Text <<[text]]Target <<[target]]Class <<[""]]Query Params <<[New@Dictionary[]] | 687 out <- [[[[Build["Web Link"]]Text <<[text]]Target <<[target]]Class <<[""]]Query Params <<[Dictionary[]] |
642 } | 688 } |
643 | 689 |
644 | 690 |
645 With Session@Web Link[text,target,session:out] | 691 With Session@Web Link[text,target,session:out] |
646 { | 692 { |
647 New@Web Link[text, target] | 693 Web Link[text, target] |
648 { | 694 { |
649 out <- [~]Query Params <<[[[~]Query Params >>]Set["session_id", [session]Session ID >>]] | 695 out <- [~]Query Params <<[[[~]Query Params >>]Set["session_id", [session]Session ID >>]] |
650 } | 696 } |
651 } | 697 } |
652 | 698 |
656 { | 702 { |
657 queryvars <- ["?"]Append[Key Value Join[[link]Query Params>>, "=","&"]] | 703 queryvars <- ["?"]Append[Key Value Join[[link]Query Params>>, "=","&"]] |
658 }{ | 704 }{ |
659 queryvars <- "" | 705 queryvars <- "" |
660 } | 706 } |
661 out <- [[[[[[["<a href=\""]Append[[[link]Target>>]Replace["\"", "%22"]]]Append[queryvars]]Append["\""] | 707 out <- [[[[[[["<a href=\""]Append[[link]Target>>]]Append[queryvars]]Append["\""] |
662 ]Append[Get Class[link]]]Append[">"]]Append[Escape HTML Text[[link]Text>>]]]Append["</a>"] | 708 ]Append[Get Class[link]]]Append[">"]]Append[Escape HTML Text[[link]Text>>]]]Append["</a>"] |
663 } | 709 } |
664 | 710 |
665 Postback@Web Link[in,post data:out,events] | 711 Postback@Web Link[in,post data:out,events] |
666 { | 712 { |
667 out <- in | 713 out <- in |
668 events <- New@List[] | 714 events <- List[] |
669 } | 715 } |
670 | 716 |
671 Name@Web Link[link:name,none] | 717 Name@Web Link[link:name,none] |
672 { | 718 { |
673 none <- link | 719 none <- link |
692 { | 738 { |
693 Headers | 739 Headers |
694 Data | 740 Data |
695 } | 741 } |
696 | 742 |
697 New@Web Table[headers,data:out] | 743 Web Table[headers,data:out] |
698 { | 744 { |
699 out <- [[Build["Web Table"]]Headers <<[headers]]Data <<[data] | 745 out <- [[Build["Web Table"]]Headers <<[headers]]Data <<[data] |
700 } | 746 } |
701 | 747 |
702 Name@Web Table[link:name,none] | 748 Name@Web Table[link:name,none] |