Mercurial > repos > rhope
diff framework.vistxt @ 0:76568becd6d6
Rhope Alpha 2a source import
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 28 Apr 2009 23:06:07 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework.vistxt Tue Apr 28 23:06:07 2009 +0000 @@ -0,0 +1,761 @@ +Import webserver.vistxt + +Framework Handler(8,0) +|: + page <- New@Page[title(6), path(1), use session(7), queryvars(3), headers(4)] + out list <- [handler(5)]Do[ [[New@List[]]Append[page]]Append[path(1)] ] + handler page <- [out list]Index[0] + If[[request type(2)] = ["POST"]] + |: + final page <- Process POST[handler page, con(0), headers(4)] + :||: + final page <- Val[handler page] + :| + string,headers <- [final page]Render + + [HTTP OK[client(0), Get Content Type[".html"], [string]Length, headers] + ]Put String[string] +:| + +Handler Fixer(1,1) +|: + If[[Type Of[handler(0)]] = ["List"]] + |: + out(0) <- [[["Framework Handler"]Set Input[5, [handler(0)]Index[0]]]Set Input[6, [handler(0)]Index[1]]]Set Input[7, [handler(0)]Index[2]] + :||: + out(0) <- handler(0) + :| +:| + +Start Web(1,0) +|: + Print["Starting Rhope Web Server"] + Listen on Port[80,["Connection Start"]Set Input[1, Map[handlers(0),"Handler Fixer"]]] + Wait Forever[] +:| + +Get Class(1,1) +|: + If[[[[container(0)]Class >>]Length] > [0]] + |: + class(0) <- [[" class=\""]Append[[container(0)]Class >>]]Append["\""] + :||: + class(0) <- "" + :| +:| + +Company Web Event +|: + Event Name + Origin + Data +:| + +New@Web Event(3,1) +|: + out(0) <- [[[Build["Web Event"]]Event Name <<[name(0)]]Origin <<[origin(1)]]Data <<[data(2)] +:| + +Company Web Container +|: + Tag Name + Class + Propagate Events + Children + Handlers + Named Children + Session + Use Session +:| + +New@Web Container(1,1) +|: + out(0) <- [[[[[[[Build["Web Container"] + ]Tag Name <<["div"] + ]Class <<[class(0)] + ]Propagate Events <<[No] + ]Children <<[New@List[]] + ]Named Children <<[New@Dictionary[]] + ]Handlers <<[New@Dictionary[]] + ]Use Session <<[No] +:| + +Name@Web Container(1,2) +|: + none(1) <- cont(0) +:| + +Render Child(2,1) +|: + out(0) <- [start(0)]Append[[container(1)]Render] +:| + +Set Session@Web Container(2,1) +|: + out(0) <- [ + [ + [container(0)]Use Session <<[Yes] + ]Session <<[session(1)] + ]Children <<[ Map[ [container(0)]Children >>, ["Set Session"]Set Input[1, session(1)] ] ] +:| + +Set Handler@Web Container(3,1) +|: + out(0) <- [container(0)]Handlers <<[ [[container(0)]Handlers >> ]Set[event name(1), handler(2)] ] +:| + +Render@Web Container(1,2) +|: + out(0) <- [[[[[[["<"]Append[ [container(0)]Tag Name >> ] + ]Append[Get Class[container(0)]] + ]Append[">\n\t"] + ]Append[Fold[["Render Child"]<String@Worker, "", [container(0)]Children >>]] + ]Append["\n</"] + ]Append[ [container(0)]Tag Name >> ] + ]Append[">\n"] +:| + +Container Event Handler(2,2) +|: + event <- [events(1)]Index[index(2)] + [[container(0)]Handlers >>]Index[ [event]Event Name >>] + |: + result list <- [~]Do[ + [[New@List[]]Append[container(0)]]Append[event] + ] + new container <- [result list]Index[0] + [result list]Index[1] + |: + events(1) <- [result events]Append[~] + :||: + events(1) <- Val[result events] + :| + :||: + new container <- container(0) + events(1) <- Val[result events] + :| + + [events(1)]Next[index(2)] + |: + cont(0), result events <- Container Event Handler[new container, events(1), ~] + :||: + cont(0) <- Val[new container] + result events <- New@List[] + :| +:| + +Container Postback Helper(4,2) +|: + ,current events <- [[[container(0)]Children >>]Index[index(2)]]Postback[post data(1)] + |: + new container <- [container(0)]Children <<[[[container(0)]Children >>]Set[index(2), ~]] + :| + events <- Concatenate[events(3), current events] + [[new container]Children >>]Next[index(2)] + |: + out(0), events(1) <- Container Postback Helper[new container, post data(1), ~, events] + :||: + [events]First + |: + out(0), newevents <- Container Event Handler[new container, events, ~] + events(1) <- Concatenate[events, newevents] + :||: + out(0) <- Val[new container] + events(1) <- Val[events] + :| + :| +:| + +Postback@Web Container(2,2) +|: + [[container(0)]Children >>]First + |: + out(0), events <- Container Postback Helper[container(0), post data(1), ~, New@List[]] + If[[container(0)]Propagate Events >>] + |: + events(1) <- Val[events] + :||: + events(1) <- New@List[] + :| + :||: + out(0) <- container(0) + events(1) <- New@List[] + :| +:| + +Add Child(2,1) +|: + If[[cont(0)]Use Session >>] + |: + child <- [child(1)]Set Session[[cont(0)]Session >>] + :||: + child <- Val[child(1)] + :| + with child <- [cont(0)]Children <<[ [[cont(0)]Children >>]Append[child] ] + + [child]Name + |: + out(0) <- [with child]Named Children <<[ [[with child]Named Children >>]Set[~, [[[with child]Children >>]Length] - [1]] ] + :||: + out(0) <- Val[with child] + :| +:| + +Get Child By Name(2,2) +|: + ,not found(1) <- [[container(0)]Named Children >>]Index[name(1)] + |: + out(0) <- [[container(0)]Children >>]Index[~] + :| +:| + +Company Page +|: + Title + URL + CSS + Children + Named Children + Handlers + Use Session + Session + Session ID +:| + +Set Handler@Page(3,1) +|: + out(0) <- [container(0)]Handlers <<[ [[container(0)]Handlers >> ]Set[event name(1), handler(2)] ] +:| + +New@Page(5,1) +|: + page <- [[[[[[[Build["Page"] + ]Title <<[title(0)] + ]URL <<[url(1)] + ]CSS <<[[New@List[]]Append["/default.css"]] + ]Children <<[New@List[]] + ]Named Children <<[New@Dictionary[]] + ]Handlers <<[New@Dictionary[]] + ]Use Session <<[use session(2)] + If[use session(2)] + |: + Load@Session[queryvars(3), headers(4)] + |: + out(0) <- [[page]Session <<[~]]Session ID <<[ [~]Session ID>>] + :| + :||: + out(0) <- Val[page] + :| +:| + +Get Action@Page(1,1) +|: + If[[page(0)]Use Session>>] + |: + [[page(0)]Session >>]Get Link Params + |: + out(0) <- [[[page(0)]URL >>]Append["?"]]Append[~] + :||: + out(0) <- [page(0)]URL >> + :| + :||: + out(0) <- [page(0)]URL >> + :| +:| + +Render@Page(1,2) +|: + out(0) <- [[[[[[["<html>\n\t<head>\n\t\t<title>"]Append[[page(0)]Title >>] + ]Append["</title>\n\t\t<link rel=\"stylesheet\" href=\""] + ]Append[[[page(0)]CSS >>]Join["\">\n\t\t<link rel=\"stylesheet\" href=\""]] + ]Append["\">\n\t</head>\n\t<body>\n\t<form method=\"POST\" action=\""] + ]Append[[[page(0)]Get Action]Append["\">\n"]] + ]Append[Fold[["Render Child"]<String@Worker, "", [page(0)]Children >>]] + ]Append["\t</form>\n\t</body>\n</html>"] + If[[page(0)]Use Session>>] + |: + headers(1) <- [[page(0)]Session >>]Finalize[New@Dictionary[]] + :||: + headers(1) <- New@Dictionary[] + :| +:| + +Clear Children(1,1) +|: + out(0) <- [[page(0)]Children <<[New@List[]]]Named Children <<[New@Dictionary[]] +:| + +Set@Page(3,1) +|: + out(0) <- [page(0)]Session <<[ [[page(0)]Session >>]Set[key(1), val(2)] ] +:| + +Index@Page(2,2) +|: + out(0),not found(1) <- [[page(0)]Session >>]Index[key(1)] +:| + +First@Page(1,2) +|: + first(0),not found(1) <- [[page(0)]Session >>]First +:| + +Next@Page(2,2) +|: + next(0),not found(1) <- [[page(0)]Session >>]Next[last(1)] +:| + +Add CSS@Page(1,1) +|: + out(0) <- [page(0)]CSS <<[ [[page(0)]CSS >>]Append[css(1)] ] +:| + +Clear CSS@Page(1,1) +|: + out(0) <- [page(0)]CSS <<[New@List[]] +:| + +Decode Helper Decode(3,1) +|: + code,rest <- [[list(0)]Index[index(2)]]Slice[2] + newlist <- [destlist(1)]Set[index(2), [[""]Put Byte[From Hex@Whole Number[code]]]Append[rest]] + [list(0)]Next[index(2)] + |: + out(0) <- Decode Helper Decode[list(0), newlist, ~] + :||: + out(0) <- Val[newlist] + :| +:| + +Decode Helper Straight(3,1) +|: + newlist <- [destlist(1)]Set[index(2), [list(0)]Index[index(2)]] + [list(0)]Next[index(2)] + |: + out(0) <- Decode Helper Decode[list(0), newlist, ~] + :||: + out(0) <- Val[newlist] + :| +:| + +URL Decode(1,1) +|: + parts <- [val(0)]Split["%"] + [parts]First + |: + val(0) <- [Decode Helper Straight[parts, New@List[], ~]]Join[""] + :||: + val(0) <- val(0) + :| +:| + +URL Encode Path(1,1) +|: + out(0) <- [[[[string(0)]Replace["%","%25"]]Replace[" ","%20"]]Replace["/","%2F"]]Replace["?","%3F"] +:| + +Decode Pair(2,2) +|: + val(0) <- URL Decode[val(0)] + key(1) <- URL Decode[key(1)] +:| + +Process POST(3,1) +|: + [con(1)]Get FString[[headers(2)]Index["Content-Length"]] |::| + |: + post string <- [~]Replace["+"," "] + :| + post data <- Key Value Map[Dict Split[post string, "=", "&"], ["Decode Pair"]<String@Worker] + out(0) <- [page(0)]Postback[post data] +:| + +Postback@Page(2,2) +|: + [[container(0)]Children >>]First + |: + out(0), events(1) <- Container Postback Helper[container(0), post data(1), ~, New@List[]] + :||: + page(0) <- page(0) + :| + events(1) <- New@List[] +:| + +Company Web Text +|: + Text + Enclosing Tag +:| + +New@Web Text(2,1) +|: + out(0) <- [[Build["Web Text"]]Text <<[text(0)]]Enclosing Tag <<[tag(1)] +:| + +Name@Web Text(1,2) +|: + none(1) <- text(0) +:| + +Escape HTML Text(1,1) +|: + out(0) <- [[[string(0)]Replace["&","&"]]Replace["<", "<"]]Replace[">", ">"] +:| + +Render@Web Text(1,2) +|: + processed text <- [Escape HTML Text[[text(0)]Text >>]]Replace["\n","<br>\n\t"] + If[[[[text(0)]Enclosing Tag >>]Length] = [0]] + |: + out(0) <- Val[processed text] + :||: + out(0) <- [[[["<"]Append[[text(0)]Enclosing Tag >>]]Append[">"]]Append[processed text]]Append[[["</"]Append[[text(0)]Enclosing Tag >>]]Append[">"]] + :| +:| + +Postback@Web Text(2,2) +|: + out(0) <- in(0) + events(1) <- New@List[] +:| + +Set Session@Web Text(2,1) +|: + (0) <- (0) +:| + +Render@String(1,2) +|: + out(0) <- [New@Web Text[string(0),""]]Render +:| + +Name@String(1,2) +|: + none(1) <- string(0) +:| + +Postback@String(2,2) +|: + out(0) <- in(0) + events(1) <- New@List[] +:| + +Set Session@String(2,1) +|: + (0) <- (0) +:| + +Company Web Field +|: + Name + Value + Type + Class +:| + +Name@Web Field(1,2) +|: + name(0) <- [field(0)]Name >> +:| + +New@Web Field(3,1) +|: + out(0) <- [[[[Build["Web Field"]]Name <<[name(0)]]Value <<[value(1)]]Type <<[type(2)]]Class <<[""] +:| + +Set Session@Web Field(2,1) +|: + (0) <- (0) +:| + +Render@Web Field(1,2) +|: + If[[[field(0)]Type >>] = ["multiline"]] + |: + out(0) <- [[[[[["<textarea name=\""]Append[[field(0)]Name >>]]Append["\""]]Append[Get Class[field(0)]]]Append[">"]]Append[[field(0)]Value >>]]Append["</textarea>"] + :||: + out(0) <- [[[[[[[["<input type=\""]Append[[field(0)]Type >>]]Append["\" name=\""]]Append[[field(0)]Name >>]]Append["\""]]Append[Get Class[field(0)]]]Append[" value=\""]]Append[[field(0)]Value >>]]Append["\">"] + :| + +:| + +Postback@Web Field(2,2) +|: + [post data(1)]Index[[field(0)]Name >>] + |: + out(0) <- [field(0)]Value <<[~] + + If[[[field(0)]Value >>] = [~]] + |: + event(1) <- New@List[] + :||: + event(1) <- [New@List[]]Append[ New@Web Event["change", [field(0)]Name >>, [field(0)]Value >>] ] + :| + :||: + out(0) <- field(0) + event(1) <- New@List[] + :| +:| + +Company Web Button +|: + Name + Label + Class +:| + +New@Web Button(2,1) +|: + out(0) <- [[[Build["Web Button"]]Name <<[name(0)]]Label <<[label(1)]]Class <<[""] +:| + +Name@Web Button(1,2) +|: + name(0) <- [button(0)]Name >> +:| + +Set Session@Web Button(2,1) +|: + (0) <- (0) +:| + +Postback@Web Button(2,2) +|: + out(0) <- button(0) + [post data(1)]Index[[button(0)]Name >>] + |: + events(1) <- [New@List[]]Append[ New@Web Event["click", [button(0)]Name >>, 0] ] + :||: + events(1) <- New@List[] + :| +:| + +Render@Web Button(1,2) +|: + out(0) <- [[[[[["<input type=\"submit\" name=\""]Append[[field(0)]Name >>]]Append["\""]]Append[Get Class[button(0)]]]Append[" value=\""]]Append[[button(0)]Label >>]]Append["\">"] +:| + +Company Session +|: + Session ID + IP Address + Use Cookies + Data +:| + +Get Unique ID(0,1) uses Session +|: + out(0) <- [[[::ID]<Whole Number@String]Append["_"]]Append[Random[]] + ::ID <- [::ID]+[1] +:| + +New@Session(0,1) +|: + out(0) <- [[[Build["Session"]]Session ID <<[Get Unique ID[]]]Use Cookies <<[No]]Data <<[New@Dictionary[]] +:| + +Load@Session(2,1) uses Session +|: + ,checkquery <- [headers(1)]Index["Cookie"] + |: + parts <- Dict Split[~, "=", "; "] + ,checkquery <- [parts]Index["session_id"] + |: + ,checkquery <- [::Sessions]Index[~] + |: + out(0) <- [~]Use Cookies <<[Yes] + :| + :| + :| + + + checkquery + |: + ,makenew <- [queryvars(0)]Index["session_id"] + |: + out(0), makenew <- [::Sessions]Index[~] + :| + :| + + makenew + |: + out(0) <- New@Session[] + :| +:| + +Get Link Params@Session(1,2) +|: + If[[session(0)]Use Cookies >>] + |: + no params(1) <- No + :||: + out(0) <- ["session_id="]Append[[session(0)]Session ID >>] + :| +:| + +Set@Session(3,1) +|: + out(0) <- [session(0)]Data <<[ [[session(0)]Data >>]Set[key(1), val(2)] ] +:| + +Index@Session(2,2) +|: + out(0),not found(1) <- [[session(0)]Data >>]Index[key(1)] +:| + +First@Session(1,2) +|: + first(0),not found(1) <- [[session(0)]Data >>]First +:| + +Next@Session(2,2) +|: + next(0),not found(1) <- [[session(0)]Data >>]Next[last(1)] +:| + +Init Session Store(0,1) +|: + Init Store["Session"] + out(0) <- 0 +:| + +Set Session Store(0,0) uses Session +|: + ::ID <- 1 + ::Sessions <- New@Dictionary[] +:| + +Init Sessions(0,1) +|: + Init Session Store[] |: + Set Session Store[] :| + out(0) <- 0 +:| + +Finalize@Session(2,1) uses Session +|: + ::Sessions <- [::Sessions]Set[[session(0)]Session ID >>, session(0)] + out headers(0) <- [headers(1)]Set["Set-Cookie", ["session_id="]Append[[session(0)]Session ID >>]] +:| + +Company Web Link +|: + Text + Target + Class + Query Params +:| + +New@Web Link(2,1) +|: + out(0) <- [[[[Build["Web Link"]]Text <<[text(0)]]Target <<[target(1)]]Class <<[""]]Query Params <<[New@Dictionary[]] +:| + + +With Session@Web Link(3,1) +|: + New@Web Link[text(0), target(1)] + |: + out(0) <- [~]Query Params <<[[[~]Query Params >>]Set["session_id", [session(2)]Session ID >>]] + :| +:| + +Render@Web Link(1,2) +|: + [[link(0)]Query Params>>]First + |: + queryvars <- ["?"]Append[Key Value Join[[link(0)]Query Params>>, "=","&"]] + :||: + queryvars <- "" + :| + out(0) <- [[[[[[["<a href=\""]Append[[link(0)]Target>>]]Append[queryvars]]Append["\""] + ]Append[Get Class[link(0)]]]Append[">"]]Append[Escape HTML Text[[link(0)]Text>>]]]Append["</a>"] +:| + +Postback@Web Link(2,2) +|: + out(0) <- in(0) + events(1) <- New@List[] +:| + +Name@Web Link(1,2) +|: + none(1) <- link(0) +:| + +Set Session@Web Link(2,1) +|: + If[[[[link(0)]Target >>]Slice[7]] = ["http://"]] + |: + out(0) <- link(0) + :||: + If[[session(1)]Use Cookies >>] + |: + out(0) <- link(0) + :||: + out(0) <- [link(0)]Query Params <<[[[link(0)]Query Params >>]Set["session_id", [session(1)]Session ID>>]] + :| + :| +:| + +Company Web Table +|: + Headers + Data +:| + +New@Web Table(2,1) +|: + out(0) <- [[Build["Web Table"]]Headers <<[headers(0)]]Data <<[data(1)] +:| + +Name@Web Table(1,2) +|: + none(1) <- link(0) +:| + +Set Session@Web Table(2,1) +|: + (0) <- (0) +:| + +Postback@Web Table(2,2) +|: + (0) <- (0) + (1) <- {} +:| + +Make Header Row(2,1) +|: + out(0) <- [[[string(0)]Append["\t\t\t<th>"]]Append[header(1)]]Append["</th>\n"] +:| + +Get Header Row@Web Table(1,1) +|: + If[[[[table(0)]Headers >>]Length] > [0]] + |: + out(0) <- [Fold[["Make Header Row"]<String@Worker, "\t\t<tr>\n", [table(0)]Headers >>]]Append["\t\t</tr>\n"] + :||: + out(0) <- "" + :| +:| + +Make Table Cell(2,1) +|: + out(0) <- [[[string(0)]Append["\t\t\t<td>"]]Append[[cell(1)]Render]]Append["</td>\n"] +:| + +Make Table Row(2,1) +|: + out(0) <- [Fold[["Make Table Cell"]<String@Worker, [string(0)]Append["\t\t<tr>\n"], row(1)]]Append["\t\t</tr>"] +:| + +Render@Web Table(1,2) +|: + out(0) <- [ + [ + ["\t<table>\n"]Append[[table(0)]Get Header Row] + ]Append[ Fold[["Make Table Row"]<String@Worker, "", [table(0)]Data >>] ] + ]Append["\t</table>\n"] +:| +