| 
					
				 | 
			
			
				@@ -1,54 +1,86 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Dictionary subclass: #EKind 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        instanceVariableNames: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EnyoFriend subclass: #HelloJtalk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        instanceVariableNames: 'count popup' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         category: 'HelloJtalk'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Dictionary subclass: #EComponent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        instanceVariableNames: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        category: 'HelloJtalk'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!HelloJtalk methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-EKind subclass: #HelloJtalk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        instanceVariableNames: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        category: 'HelloJtalk'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!HelloJtalk methodsFor: 'actions'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+buttonClicked 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	count := count + 1. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self dollar input setValue: (self dollar input getValue, 'You clicked the button ', count asString, ' times so far'). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Okidoki, why not throw up a popup?" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	popup openAtCenter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-!HelloJtalk class methodsFor: 'initializing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+popupSelected: value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"The user picked a value in the popup." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self dollar input setValue: (self dollar input getValue, ' ', value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!HelloJtalk methodsFor: 'initialization'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 initialize 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        | me control button input popup myInput pageHeader arr field children | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pageHeader := EComponent new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pageHeader at: 'kind' put: 'PageHeader'; at: 'content' put: 'JTalk Live'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	button := EComponent new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<popup = {kind: "Popup", components: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    		{content: "Pick something you like"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    		{kind: "ListSelector", value: "Foo", items: ["Foo", "Bar", "Bot"]}]}>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	button at: 'kind' put: 'Button'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		at: 'caption' put: 'Click here please'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		at: 'onclick' put: 'buttonClick'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input := EComponent new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input at: 'kind' put: 'Input'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	me := self new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	arr := Array new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	arr add: pageHeader; add: button; add: input; add: popup. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	me at: 'components' put: arr;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             at: 'name' put: 'jtalk.HelloJtalk'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     at: 'kind' put: 'VFlexBox'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     at: 'buttonClick' put: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		children := <this.$>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		field := children input. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-"This next line works fine" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<field.setValue('Yo')>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-"But for some reason I can not get this next line to do anything" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		field setValue: 'Yowza'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-"But this line works fine, but has no arguments... ?" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		children popup openAtCenter]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	enyo kind: me. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	enyo log: 'Done initializing.' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Create Enyo stuff and hook in callback blocks calling our action methods, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	very similar to how Seaside does it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Creating the templates for component construction 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is clearly simpler to do in js. Yes, we can use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	method temps inside the js code and ivars are accessed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	using this syntax: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this['@ivarname'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	We can not easily mix in arbitrary Jtalk expressions in the js code, thus 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	we use method temps for holding the blocks instead of embedding the blocks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	directly. Blocks are js functions which is really neat. And we can use: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this._jtalkMessage() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	to send messages to self for embedding the result." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	| props block block2 | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	super initialize. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	count := 0. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Create a callback block to embed below." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	block := [self buttonClicked]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"We need to go through a method temp (props) for doing js, just inlining it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	after 'enyo create:' does not work so js escaping is on the statement level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	and not on the expression level." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<props = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		kind: 'VFlexBox', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		components: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{kind: 'PageHeader', content: 'Jtalk Live'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			{kind: "RowGroup", caption: "Rock on", components: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{kind: 'Input', components: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					{kind: 'Button', caption: 'Click me', onclick: 'ablock'}] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ablock: block}>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self ui: (enyo create: props). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"If we like we can create a kind for the UI (then the props need a name EnyoHelloJtalk), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	but we do not have to in this case so this is commented out." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"self kind: (enyo kind: props). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<this['@ui'] = new EnyoHelloJtalk()>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"This Enyo popup instance is created and held in an ivar for later use." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	block2 := [:sender :value :old | self popupSelected: value]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<props = {kind: "Popup", components: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    		{content: "Pick something you like a lot"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    		{kind: "ListSelector", onChange: "popupSelected", value: "Foo", items: ["Foo", "Bar", "Bot"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		popupSelected: block2}>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	popup := enyo create: props 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!HelloJtalk class methodsFor: 'initialization'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+initialize 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	enyo log: 'Class initialized' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 |