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]
 }