| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 | 
							- Smalltalk current createPackage: 'GoogleCharts' properties: #{}!
 
- Object subclass: #ChartApp
 
- 	instanceVariableNames: ''
 
- 	package: 'GoogleCharts'!
 
- !ChartApp commentStamp!
 
- A chart app is an example App which loads the google JSAPI and visualization API.!
 
- !ChartApp methodsFor: 'not yet classified'!
 
- begin
 
- 	"Start the executiong of the ChartApp"
 
- 	^self
 
- !
 
- initialize
 
- 	"Load my external JS"
 
-     self class loadGoogleLoader:[self class loadVisualization:[self begin]]
 
- ! !
 
- !ChartApp class methodsFor: 'not yet classified'!
 
- loadGoogleLoader: callback
 
- 	"Load the Google JSAPI - Use JQuery.ajax() since that is available"
 
- 	<$.ajax({url:"https://www.google.com/jsapi",dataType:"script",success:callback});>
 
- !
 
- loadVisualization: callback
 
- 	"Use google.load() to load visualization and load the needed packages"
 
-     |packages|
 
-     packages := self neededVisualizationPackages.
 
-     <google.load("visualization","1",{"callback" : callback , "packages":packages});>
 
- !
 
- neededVisualizationPackages
 
- "This is a hook for subclasses to define which visualization packages to load."
 
- 	^{}
 
- ! !
 
- Object subclass: #ChartButton
 
- 	instanceVariableNames: 'element clickBlock'
 
- 	package: 'GoogleCharts'!
 
- !ChartButton methodsFor: 'not yet classified'!
 
- activate
 
- 	|button|
 
- 	button := self element asJQuery.
 
-     button click:[self clickBlock value]
 
- !
 
- clickBlock
 
- 	^clickBlock
 
- !
 
- clickBlock: aBlock
 
- 	clickBlock := aBlock
 
- !
 
- element
 
- 	^element
 
- !
 
- element: aSymbol
 
- 	element := aSymbol
 
- ! !
 
- !ChartButton class methodsFor: 'not yet classified'!
 
- element: elementSymbol clickBlock: clickBlock
 
- 	^self new element: elementSymbol; clickBlock: clickBlock; activate;yourself
 
- !
 
- popUpChart: chart atDom: element
 
- 	"Make the chart popup on click of an element"
 
-     ^self element: element clickBlock:[chart drawChart]
 
- ! !
 
- Object subclass: #GoogleChart
 
- 	instanceVariableNames: 'chartId chartType'
 
- 	package: 'GoogleCharts'!
 
- !GoogleChart methodsFor: 'DOM'!
 
- getElementById: id
 
- 	"Find element by the id in the DOM"
 
- 	^ <document.getElementById(id)>
 
- ! !
 
- !GoogleChart methodsFor: 'abstraction'!
 
- makeData
 
- 	"abstraction - return the data for a google chart"
 
-   	 ^self subclassresponsibility
 
- !
 
- makeOptions
 
- 	"Abstract method - return options for a Google Chart"
 
-    ^	 self subclassresponsibility
 
- ! !
 
- !GoogleChart methodsFor: 'accessor'!
 
- chartId
 
- 	^chartId
 
- !
 
- chartId: aString
 
- 	chartId := aString
 
- !
 
- chartType
 
- 	^ chartType
 
- !
 
- chartType: aString
 
- 	chartType := aString
 
- ! !
 
- !GoogleChart methodsFor: 'chart'!
 
- drawChart
 
-     |  chart data options|
 
-      data := self makeData.
 
-      chart :=self makeChart:self chartId.
 
-      options :=self makeOptions.
 
-      <chart.draw(data,options)>
 
- !
 
- makeChart: id
 
- "build a chart at specific element id in the DOM and return"
 
- 	|e t|
 
-     e := self getElementById:id.
 
-     t := self chartType.
 
-     ^ <new google.visualization[t](e)>
 
- ! !
 
- !GoogleChart methodsFor: 'data table'!
 
- arrayToDataTable: array
 
- 	^ <google.visualization.arrayToDataTable(array)>
 
- ! !
 
- !GoogleChart methodsFor: 'init'!
 
- initialize
 
- 	^self
 
- ! !
 
- !GoogleChart class methodsFor: 'not yet classified'!
 
- chartId: aString
 
- 	^self new chartId:aString;yourself
 
- ! !
 
- GoogleChart subclass: #GaugeChart
 
- 	instanceVariableNames: ''
 
- 	package: 'GoogleCharts'!
 
- !GaugeChart methodsFor: 'not yet classified'!
 
- initialize
 
- 	" Create a Guage with the chartId that identifies the chart graphic placement and the chartType to be created at that id."
 
-     super initialize.
 
-     self chartType:'Gauge'.
 
- 	^self
 
- ! !
 
- GoogleChart subclass: #GeoChart
 
- 	instanceVariableNames: ''
 
- 	package: 'GoogleCharts'!
 
- !GeoChart methodsFor: 'not yet classified'!
 
- initialize
 
- 	" Create a Geo Chart"
 
-     super initialize.
 
-     self chartType:'GeoChart'.
 
- 	^self
 
- ! !
 
- GoogleChart subclass: #PieChart
 
- 	instanceVariableNames: ''
 
- 	package: 'GoogleCharts'!
 
- !PieChart methodsFor: 'not yet classified'!
 
- initialize
 
- 	super initialize.
 
-     self chartType:'PieChart'.
 
- 	^self
 
- ! !
 
- GoogleChart subclass: #ScatterChart
 
- 	instanceVariableNames: ''
 
- 	package: 'GoogleCharts'!
 
- !ScatterChart methodsFor: 'not yet classified'!
 
- initialize
 
- 	super initialize.
 
-     self chartType:'ScatterChart'.
 
- 	^self
 
- ! !
 
 
  |