Mercurial > repos > rhope
diff 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 |
line wrap: on
line diff
--- a/framework.rhope Tue Dec 01 03:59:31 2009 -0500 +++ b/framework.rhope Tue Dec 22 01:22:09 2009 -0500 @@ -2,8 +2,8 @@ Framework Handler[con,path,request type,queryvars,headers,handler,title,use session] { - page <- New@Page[title, path, use session, queryvars, headers] - out list <- [handler]Do[ [[New@List[]]Append[page]]Append[path] ] + page <- Page[title, path, use session, queryvars, headers] + out list <- [handler]Do[ [[List[]]Append[page]]Append[path] ] handler page <- [out list]Index[0] If[[request type] = ["POST"]] { @@ -52,7 +52,7 @@ Data } -New@Web Event[name,origin,data:out] +Web Event[name,origin,data:out] { out <- [[[Build["Web Event"]]Event Name <<[name]]Origin <<[origin]]Data <<[data] } @@ -67,18 +67,20 @@ Named Children Session Use Session + Preformatted } -New@Web Container[class:out] +Web Container[class:out] { - out <- [[[[[[[Build["Web Container"] + out <- [[[[[[[[Build["Web Container"] ]Tag Name <<["div"] ]Class <<[class] ]Propagate Events <<[No] - ]Children <<[New@List[]] - ]Named Children <<[New@Dictionary[]] - ]Handlers <<[New@Dictionary[]] + ]Children <<[List[]] + ]Named Children <<[Dictionary[]] + ]Handlers <<[Dictionary[]] ]Use Session <<[No] + ]Preformatted <<[No] } Name@Web Container[cont:out,none] @@ -91,6 +93,27 @@ out <- [start]Append[[container]Render] } +_Preformatted[child,val:out] +{ + If[[Type Of[child]] = ["Web Text"]] + { + out <- [child]Preformatted <<[val] + }{ + If[[Type Of[child]] = ["Web Container"]] + { + out <- [child]Preformatted[val] + }{ + out <- child + } + } +} + +Preformatted@Web Container[cont,preformatted?:out] +{ + out <- [[cont]Children <<[ Map[[cont]Children >>, ["_Preformatted"]Set Input[1, preformatted?]] ] + ]Preformatted <<[preformatted?] +} + Set Session@Web Container[container,session:out] { out <- [ @@ -107,13 +130,21 @@ Render@Web Container[container:out,headers] { + If[[container]Preformatted >>] + { + newline <- "" + tab <- "" + }{ + newline <- "\n" + tab <- "\t" + } out <- [[[[[[["<"]Append[ [container]Tag Name >> ] ]Append[Get Class[container]] - ]Append[">\n\t"] + ]Append[[[">"]Append[newline]]Append[tab]] ]Append[Fold[["Render Child"]<String@Worker, "", [container]Children >>]] - ]Append["\n</"] + ]Append[[newline]Append["</"]] ]Append[ [container]Tag Name >> ] - ]Append[">\n"] + ]Append[[">"]Append[newline]] } Container Event Handler[container,events,index:cont,out events] @@ -122,7 +153,7 @@ [[container]Handlers >>]Index[ [event]Event Name >>] { result list <- [~]Do[ - [[New@List[]]Append[container]]Append[event] + [[List[]]Append[container]]Append[event] ] new container <- [result list]Index[0] [result list]Index[1] @@ -141,7 +172,7 @@ cont, result events <- Container Event Handler[new container, events, ~] }{ cont <- Val[new container] - result events <- New@List[] + result events <- List[] } } @@ -171,16 +202,16 @@ { [[container]Children >>]First { - out, postback events <- Container Postback Helper[container, post data, ~, New@List[]] + out, postback events <- Container Postback Helper[container, post data, ~, List[]] If[[container]Propagate Events >>] { events <- Val[postback events] }{ - events <- New@List[] + events <- List[] } }{ out <- container - events <- New@List[] + events <- List[] } } @@ -228,17 +259,16 @@ out <- [container]Handlers <<[ [[container]Handlers >> ]Set[event name, handler] ] } -New@Page[title,url,use session,queryvars,headers:out] +Page[title,url,use session,queryvars,headers:out] { page <- [[[[[[[Build["Page"] ]Title <<[title] ]URL <<[url] - ]CSS <<[[New@List[]]Append["/default.css"]] - ]Children <<[New@List[]] - ]Named Children <<[New@Dictionary[]] - ]Handlers <<[New@Dictionary[]] + ]CSS <<[[List[]]Append["/default.css"]] + ]Children <<[List[]] + ]Named Children <<[Dictionary[]] + ]Handlers <<[Dictionary[]] ]Use Session <<[use session] - If[use session] { Load@Session[queryvars, headers] @@ -276,15 +306,15 @@ ]Append["\t</form>\n\t</body>\n</html>"] If[[page]Use Session>>] { - headers <- [[page]Session >>]Finalize[New@Dictionary[]] + headers <- [[page]Session >>]Finalize[Dictionary[]] }{ - headers <- New@Dictionary[] + headers <- Dictionary[] } } Clear Children[page:out] { - out <- [[page]Children <<[New@List[]]]Named Children <<[New@Dictionary[]] + out <- [[page]Children <<[List[]]]Named Children <<[Dictionary[]] } Set@Page[page,key,val:out] @@ -314,7 +344,7 @@ Clear CSS@Page[page:out] { - out <- [page]CSS <<[New@List[]] + out <- [page]CSS <<[List[]] } Decode Helper Decode[list,destlist,index:out] @@ -345,7 +375,7 @@ parts <- [val]Split["%"] [parts]First { - out <- [Decode Helper Straight[parts, New@List[], ~]]Join[""] + out <- [Decode Helper Straight[parts, List[], ~]]Join[""] }{ out <- val } @@ -376,22 +406,23 @@ { [[page]Children >>]First { - out, events <- Container Postback Helper[page, post data, ~, New@List[]] + out, events <- Container Postback Helper[page, post data, ~, List[]] }{ out <- page } - events <- New@List[] + events <- List[] } Blueprint Web Text { Text Enclosing Tag + Preformatted } -New@Web Text[text,tag:out] +Web Text[text,tag:out] { - out <- [[Build["Web Text"]]Text <<[text]]Enclosing Tag <<[tag] + out <- [[[Build["Web Text"]]Text <<[text]]Enclosing Tag <<[tag]]Preformatted <<[No] } Name@Web Text[text:out,none] @@ -406,7 +437,13 @@ Render@Web Text[text:out,headers] { - processed text <- [Escape HTML Text[[text]Text >>]]Replace["\n","<br>\n\t"] + escaped <- Escape HTML Text[[text]Text >>] + If[[text]Preformatted >>] + { + processed text <- Val[escaped] + }{ + processed text <- [escaped]Replace["\n","<br>\n\t"] + } If[[[[text]Enclosing Tag >>]Length] = [0]] { out <- Val[processed text] @@ -418,17 +455,17 @@ Postback@Web Text[text,post data:out,events] { out <- text - events <- New@List[] + events <- List[] } Set Session@Web Text[text,session:out] { - out <- session + out <- text } Render@String[string:out,headers] { - out <- [New@Web Text[string,""]]Render + out <- [Web Text[string,""]]Render } Name@String[string:out,none] @@ -439,7 +476,7 @@ Postback@String[in,post data:out,events] { out <- in - events <- New@List[] + events <- List[] } Set Session@String[in,session:out] @@ -460,7 +497,7 @@ name <- [field]Name >> } -New@Web Field[name,value,type:out] +Web Field[name,value,type:out] { out <- [[[[Build["Web Field"]]Name <<[name]]Value <<[value]]Type <<[type]]Class <<[""] } @@ -489,13 +526,13 @@ If[[[field]Value >>] = [~]] { - event <- New@List[] + event <- List[] }{ - event <- [New@List[]]Append[ New@Web Event["change", [field]Name >>, [field]Value >>] ] + event <- [List[]]Append[ Web Event["change", [field]Name >>, [field]Value >>] ] } }{ out <- field - event <- New@List[] + event <- List[] } } @@ -506,7 +543,7 @@ Class } -New@Web Button[name,label:out] +Web Button[name,label:out] { out <- [[[Build["Web Button"]]Name <<[name]]Label <<[label]]Class <<[""] } @@ -526,9 +563,9 @@ out <- button [post data]Index[[button]Name >>] { - events <- [New@List[]]Append[ New@Web Event["click", [button]Name >>, 0] ] + events <- [List[]]Append[ Web Event["click", [button]Name >>, 0] ] }{ - events <- New@List[] + events <- List[] } } @@ -543,6 +580,7 @@ IP Address Use Cookies Data + Dirty } Get Unique ID[:out] uses Session @@ -551,9 +589,9 @@ ::ID <- [::ID]+[1] } -New@Session[:out] +Session[:out] { - out <- [[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[New@Dictionary[]] + out <- [[[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[Dictionary[]]]Dirty <<[No] } Load@Session[queryvars,headers:out] uses Session @@ -581,7 +619,7 @@ Val[makenew] { - out <- New@Session[] + out <- Session[] } } @@ -597,7 +635,7 @@ Set@Session[session,key,val:out] { - out <- [session]Data <<[ [[session]Data >>]Set[key, val] ] + out <- [[session]Data <<[ [[session]Data >>]Set[key, val] ]]Dirty <<[Yes] } Index@Session[session,key:out,not found] @@ -618,13 +656,21 @@ Init Sessions[:out] uses Session { ::ID <- 1 - ::Sessions <- New@Dictionary[] + ::Sessions <- Dictionary[] out <- 0 } -Finalize@Session[session,headers:out headers] uses Session +Save@Session[session:out] uses Session { ::Sessions <- [::Sessions]Set[[session]Session ID >>, session] +} + +Finalize@Session[session,headers:out headers] +{ + If[[session]Dirty >>] + { + Save[session] + } out headers <- [headers]Set["Set-Cookie", ["session_id="]Append[[session]Session ID >>]] } @@ -636,15 +682,15 @@ Query Params } -New@Web Link[text,target:out] +Web Link[text,target:out] { - out <- [[[[Build["Web Link"]]Text <<[text]]Target <<[target]]Class <<[""]]Query Params <<[New@Dictionary[]] + out <- [[[[Build["Web Link"]]Text <<[text]]Target <<[target]]Class <<[""]]Query Params <<[Dictionary[]] } With Session@Web Link[text,target,session:out] { - New@Web Link[text, target] + Web Link[text, target] { out <- [~]Query Params <<[[[~]Query Params >>]Set["session_id", [session]Session ID >>]] } @@ -658,14 +704,14 @@ }{ queryvars <- "" } - out <- [[[[[[["<a href=\""]Append[[[link]Target>>]Replace["\"", "%22"]]]Append[queryvars]]Append["\""] + out <- [[[[[[["<a href=\""]Append[[link]Target>>]]Append[queryvars]]Append["\""] ]Append[Get Class[link]]]Append[">"]]Append[Escape HTML Text[[link]Text>>]]]Append["</a>"] } Postback@Web Link[in,post data:out,events] { out <- in - events <- New@List[] + events <- List[] } Name@Web Link[link:name,none] @@ -694,7 +740,7 @@ Data } -New@Web Table[headers,data:out] +Web Table[headers,data:out] { out <- [[Build["Web Table"]]Headers <<[headers]]Data <<[data] }