calatrava 0.0.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/Rakefile +7 -1
  2. data/calatrava.gemspec +2 -2
  3. data/features/sample_app.feature +27 -0
  4. data/features/step_definitions/app_steps.rb +3 -0
  5. data/features/support/calatrava_app.rb +31 -0
  6. data/features/support/env.rb +18 -0
  7. data/lib/calatrava/project.rb +5 -2
  8. data/lib/calatrava/tasks/apache.rb +20 -10
  9. data/lib/calatrava/tasks/droid.rb +1 -1
  10. data/lib/calatrava/tasks/web.rb +5 -0
  11. data/lib/calatrava/templates/droid/app/bridge.coffee +21 -120
  12. data/lib/calatrava/templates/droid/calatrava/{src/com/CALATRAVA_TMPL → CALATRAVA_TMPL}/AndroidManifest.xml.calatrava +2 -2
  13. data/lib/calatrava/templates/droid/calatrava/{calatrava-build.xml → CALATRAVA_TMPL/build.xml.calatrava} +1 -1
  14. data/lib/calatrava/templates/droid/calatrava/src/com/CALATRAVA_TMPL/ConversionForm.java.calatrava +4 -4
  15. data/lib/calatrava/templates/droid/calatrava/src/com/CALATRAVA_TMPL/Title.java.calatrava +2 -2
  16. data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/KernelBridge.java +1 -0
  17. data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/PageRegistry.java +13 -1
  18. data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/RegisteredActivity.java +7 -1
  19. data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/RhinoService.java +12 -7
  20. data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/shell/WebViewActivity.java +2 -4
  21. data/lib/calatrava/templates/ios/src/ConversionFormViewController.h +4 -0
  22. data/lib/calatrava/templates/ios/src/ConversionFormViewController.m +36 -3
  23. data/lib/calatrava/templates/ios/src/ConversionFormViewController.xib +144 -20
  24. data/lib/calatrava/templates/kernel/app/calatrava.coffee +171 -3
  25. data/lib/calatrava/templates/kernel/app/converter/controller.converter.coffee +37 -42
  26. data/lib/calatrava/templates/kernel/app/converter/init.converter.coffee +4 -4
  27. data/lib/calatrava/templates/kernel/spec/converter/controller.converter.spec.coffee +6 -6
  28. data/lib/calatrava/templates/kernel/spec/stubView.coffee +18 -2
  29. data/lib/calatrava/templates/package.json +0 -1
  30. data/lib/calatrava/templates/shell/pages/converter/conversionForm.haml +6 -4
  31. data/lib/calatrava/templates/shell/pages/converter/page.conversionForm.coffee +18 -24
  32. data/lib/calatrava/templates/shell/stylesheets/shell.scss +0 -0
  33. data/lib/calatrava/templates/web/app/source/bridge.coffee +61 -93
  34. data/lib/calatrava/version.rb +1 -1
  35. metadata +39 -34
  36. data/lib/calatrava/templates/ios/res/js/bridge.js +0 -249
  37. data/lib/calatrava/templates/shell/shell.scss +0 -1
@@ -17,11 +17,14 @@
17
17
  @property (retain, nonatomic) IBOutlet UIPickerView *inCurrencyPicker;
18
18
 
19
19
  - (void)updateCurrencyPickerSelection:(UIPickerView *)pickerView usingData:(NSArray *)currencyData;
20
+ - (void)hideKeyboard;
20
21
  @end
21
22
 
22
23
  @implementation ConversionFormViewController
23
24
  @synthesize outCurrencyPicker;
24
25
  @synthesize inCurrencyPicker;
26
+ @synthesize inAmount;
27
+ @synthesize outAmount;
25
28
 
26
29
  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
27
30
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
@@ -37,6 +40,8 @@
37
40
  [inCurrencyPicker release];
38
41
  [_inCurrencyData release];
39
42
  [_outCurrencyData release];
43
+ [inAmount release];
44
+ [outAmount release];
40
45
  [super dealloc];
41
46
  }
42
47
 
@@ -56,9 +61,22 @@
56
61
  {
57
62
  [self setOutCurrencyPicker:nil];
58
63
  [self setInCurrencyPicker:nil];
64
+ [self setInAmount:nil];
65
+ [self setOutAmount:nil];
59
66
  [super viewDidUnload];
60
67
  }
61
68
 
69
+ - (id)valueForField:(NSString *)field
70
+ {
71
+ if ([field isEqualToString:@"in_currency"]) {
72
+ return [[_inCurrencyData objectAtIndex:[inCurrencyPicker selectedRowInComponent:0]] objectForKey:@"code"];
73
+ } else if ([field isEqualToString:@"out_currency"]) {
74
+ return [[_outCurrencyData objectAtIndex:[outCurrencyPicker selectedRowInComponent:0]] objectForKey:@"code"];
75
+ } else if ([field isEqualToString:@"in_amount"]) {
76
+ return [NSNumber numberWithInt:[[inAmount text] integerValue]];
77
+ }
78
+ }
79
+
62
80
  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
63
81
  {
64
82
  return (interfaceOrientation == UIInterfaceOrientationPortrait);
@@ -76,6 +94,11 @@
76
94
  }
77
95
  }
78
96
 
97
+ - (void)hideKeyboard
98
+ {
99
+ [inAmount resignFirstResponder];
100
+ }
101
+
79
102
  - (void)renderCurrencyPicker:(UIPickerView *)pickerView usingData:(NSArray *)currencyData to:(NSArray **)pickerStore
80
103
  {
81
104
  [*pickerStore release];
@@ -86,16 +109,25 @@
86
109
  }
87
110
  }
88
111
 
112
+ - (IBAction)convert:(id)sender {
113
+ [self hideKeyboard];
114
+ [self dispatchEvent:@"convert" withArgs:@[]];
115
+ return self;
116
+ }
117
+
89
118
  - (void)render:(NSDictionary *)jsViewObject
90
119
  {
91
120
  for (NSString *key in jsViewObject)
92
121
  {
93
122
  id value = [jsViewObject objectForKey:key];
94
- if( [key isEqualToString:@"inCurrencies"] )
95
- {
123
+ if ([key isEqualToString:@"inCurrencies"]) {
96
124
  [self renderCurrencyPicker:inCurrencyPicker usingData:value to:&_inCurrencyData];
97
- }else if( [key isEqualToString:@"outCurrencies"] ){
125
+ } else if ([key isEqualToString:@"outCurrencies"]) {
98
126
  [self renderCurrencyPicker:outCurrencyPicker usingData:value to:&_outCurrencyData];
127
+ } else if ([key isEqualToString:@"in_amount"]) {
128
+ [outAmount setText:[NSString stringWithFormat:@"%@", [jsViewObject objectForKey:@"in_amount"]]];
129
+ } else if ([key isEqualToString:@"out_amount"]) {
130
+ [outAmount setText:[NSString stringWithFormat:@"%@", [jsViewObject objectForKey:@"out_amount"]]];
99
131
  }
100
132
  }
101
133
  }
@@ -135,6 +167,7 @@
135
167
  NSString *event = picker == inCurrencyPicker ? @"selectedInCurrency" : @"selectedOutCurrency";
136
168
 
137
169
  NSString *currencyCode = [details objectForKey:@"code"];
170
+ [self hideKeyboard];
138
171
  [self dispatchEvent:event withArgs:[NSArray arrayWithObject:currencyCode]];
139
172
  }
140
173
 
@@ -1,21 +1,22 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
3
3
  <data>
4
- <int key="IBDocument.SystemTarget">1296</int>
5
- <string key="IBDocument.SystemVersion">11D50d</string>
6
- <string key="IBDocument.InterfaceBuilderVersion">2182</string>
7
- <string key="IBDocument.AppKitVersion">1138.32</string>
8
- <string key="IBDocument.HIToolboxVersion">568.00</string>
4
+ <int key="IBDocument.SystemTarget">1536</int>
5
+ <string key="IBDocument.SystemVersion">12C54</string>
6
+ <string key="IBDocument.InterfaceBuilderVersion">2840</string>
7
+ <string key="IBDocument.AppKitVersion">1187.34</string>
8
+ <string key="IBDocument.HIToolboxVersion">625.00</string>
9
9
  <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10
10
  <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11
- <string key="NS.object.0">1181</string>
11
+ <string key="NS.object.0">1926</string>
12
12
  </object>
13
13
  <array key="IBDocument.IntegratedClassDependencies">
14
+ <string>IBProxyObject</string>
15
+ <string>IBUIButton</string>
16
+ <string>IBUILabel</string>
14
17
  <string>IBUIPickerView</string>
15
18
  <string>IBUITextField</string>
16
19
  <string>IBUIView</string>
17
- <string>IBUILabel</string>
18
- <string>IBProxyObject</string>
19
20
  </array>
20
21
  <array key="IBDocument.PluginDependencies">
21
22
  <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -43,7 +44,6 @@
43
44
  <string key="NSFrame">{{20, 344}, {203, 96}}</string>
44
45
  <reference key="NSSuperview" ref="191373211"/>
45
46
  <reference key="NSWindow"/>
46
- <reference key="NSNextKeyView"/>
47
47
  <string key="NSReuseIdentifierKey">_NS:9</string>
48
48
  <bool key="IBUIOpaque">NO</bool>
49
49
  <bool key="IBUIClipsSubviews">YES</bool>
@@ -68,11 +68,12 @@
68
68
  <double key="NSSize">17</double>
69
69
  <int key="NSfFlags">16</int>
70
70
  </object>
71
+ <double key="preferredMaxLayoutWidth">203</double>
71
72
  </object>
72
73
  <object class="IBUILabel" id="671683200">
73
74
  <reference key="NSNextResponder" ref="191373211"/>
74
75
  <int key="NSvFlags">292</int>
75
- <string key="NSFrame">{{139, 83}, {43, 90}}</string>
76
+ <string key="NSFrame">{{139, 118}, {43, 90}}</string>
76
77
  <reference key="NSSuperview" ref="191373211"/>
77
78
  <reference key="NSWindow"/>
78
79
  <reference key="NSNextKeyView" ref="463978271"/>
@@ -102,6 +103,7 @@
102
103
  <int key="NSfFlags">16</int>
103
104
  </object>
104
105
  <bool key="IBUIAdjustsFontSizeToFit">NO</bool>
106
+ <double key="preferredMaxLayoutWidth">43</double>
105
107
  </object>
106
108
  <object class="IBUILabel" id="544627895">
107
109
  <reference key="NSNextResponder" ref="191373211"/>
@@ -120,6 +122,7 @@
120
122
  <object class="NSColor" key="IBUITextColor">
121
123
  <int key="NSColorSpace">1</int>
122
124
  <bytes key="NSRGB">MCAwIDAAA</bytes>
125
+ <string key="IBUIColorCocoaTouchKeyPath">darkTextColor</string>
123
126
  </object>
124
127
  <nil key="IBUIHighlightedColor"/>
125
128
  <int key="IBUIBaselineAdjustment">0</int>
@@ -130,7 +133,7 @@
130
133
  <object class="IBUIPickerView" id="313683017">
131
134
  <reference key="NSNextResponder" ref="191373211"/>
132
135
  <int key="NSvFlags">290</int>
133
- <string key="NSFrame">{{20, 20}, {110, 216}}</string>
136
+ <string key="NSFrame">{{20, 55}, {110, 216}}</string>
134
137
  <reference key="NSSuperview" ref="191373211"/>
135
138
  <reference key="NSWindow"/>
136
139
  <reference key="NSNextKeyView" ref="544627895"/>
@@ -141,7 +144,7 @@
141
144
  <object class="IBUIPickerView" id="463978271">
142
145
  <reference key="NSNextResponder" ref="191373211"/>
143
146
  <int key="NSvFlags">290</int>
144
- <string key="NSFrame">{{190, 20}, {110, 216}}</string>
147
+ <string key="NSFrame">{{190, 55}, {110, 216}}</string>
145
148
  <reference key="NSSuperview" ref="191373211"/>
146
149
  <reference key="NSWindow"/>
147
150
  <reference key="NSNextKeyView" ref="557227880"/>
@@ -152,7 +155,7 @@
152
155
  <object class="IBUITextField" id="557227880">
153
156
  <reference key="NSNextResponder" ref="191373211"/>
154
157
  <int key="NSvFlags">292</int>
155
- <string key="NSFrame">{{112, 244}, {97, 31}}</string>
158
+ <string key="NSFrame">{{27, 20}, {97, 31}}</string>
156
159
  <reference key="NSSuperview" ref="191373211"/>
157
160
  <reference key="NSWindow"/>
158
161
  <reference key="NSNextKeyView" ref="278875700"/>
@@ -176,16 +179,77 @@
176
179
  <object class="IBUITextInputTraits" key="IBUITextInputTraits">
177
180
  <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
178
181
  </object>
179
- <object class="IBUIFontDescription" key="IBUIFontDescription">
182
+ <object class="IBUIFontDescription" key="IBUIFontDescription" id="792499153">
180
183
  <int key="type">1</int>
181
184
  <double key="pointSize">14</double>
182
185
  </object>
183
- <object class="NSFont" key="IBUIFont">
186
+ <object class="NSFont" key="IBUIFont" id="1807837">
184
187
  <string key="NSName">Helvetica</string>
185
188
  <double key="NSSize">14</double>
186
189
  <int key="NSfFlags">16</int>
187
190
  </object>
188
191
  </object>
192
+ <object class="IBUIButton" id="427187250">
193
+ <reference key="NSNextResponder" ref="191373211"/>
194
+ <int key="NSvFlags">292</int>
195
+ <string key="NSFrame">{{138, 198}, {45, 44}}</string>
196
+ <reference key="NSSuperview" ref="191373211"/>
197
+ <reference key="NSWindow"/>
198
+ <string key="NSReuseIdentifierKey">_NS:9</string>
199
+ <bool key="IBUIOpaque">NO</bool>
200
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
201
+ <int key="IBUIContentHorizontalAlignment">0</int>
202
+ <int key="IBUIContentVerticalAlignment">0</int>
203
+ <int key="IBUIButtonType">1</int>
204
+ <string key="IBUINormalTitle">Go</string>
205
+ <object class="NSColor" key="IBUIHighlightedTitleColor">
206
+ <int key="NSColorSpace">3</int>
207
+ <bytes key="NSWhite">MQA</bytes>
208
+ </object>
209
+ <object class="NSColor" key="IBUINormalTitleColor">
210
+ <int key="NSColorSpace">1</int>
211
+ <bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
212
+ </object>
213
+ <object class="NSColor" key="IBUINormalTitleShadowColor">
214
+ <int key="NSColorSpace">3</int>
215
+ <bytes key="NSWhite">MC41AA</bytes>
216
+ </object>
217
+ <object class="IBUIFontDescription" key="IBUIFontDescription">
218
+ <int key="type">2</int>
219
+ <double key="pointSize">15</double>
220
+ </object>
221
+ <object class="NSFont" key="IBUIFont">
222
+ <string key="NSName">Helvetica-Bold</string>
223
+ <double key="NSSize">15</double>
224
+ <int key="NSfFlags">16</int>
225
+ </object>
226
+ </object>
227
+ <object class="IBUITextField" id="793142264">
228
+ <reference key="NSNextResponder" ref="191373211"/>
229
+ <int key="NSvFlags">292</int>
230
+ <string key="NSFrame">{{197, 21}, {97, 30}}</string>
231
+ <reference key="NSSuperview" ref="191373211"/>
232
+ <reference key="NSWindow"/>
233
+ <string key="NSReuseIdentifierKey">_NS:9</string>
234
+ <bool key="IBUIOpaque">NO</bool>
235
+ <bool key="IBUIClipsSubviews">YES</bool>
236
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
237
+ <int key="IBUIContentVerticalAlignment">0</int>
238
+ <string key="IBUIText"/>
239
+ <int key="IBUIBorderStyle">3</int>
240
+ <object class="NSColor" key="IBUITextColor">
241
+ <int key="NSColorSpace">3</int>
242
+ <bytes key="NSWhite">MAA</bytes>
243
+ <reference key="NSCustomColorSpace" ref="348585157"/>
244
+ </object>
245
+ <bool key="IBUIAdjustsFontSizeToFit">YES</bool>
246
+ <float key="IBUIMinimumFontSize">17</float>
247
+ <object class="IBUITextInputTraits" key="IBUITextInputTraits">
248
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
249
+ </object>
250
+ <reference key="IBUIFontDescription" ref="792499153"/>
251
+ <reference key="IBUIFont" ref="1807837"/>
252
+ </object>
189
253
  </array>
190
254
  <string key="NSFrame">{{0, 20}, {320, 460}}</string>
191
255
  <reference key="NSSuperview"/>
@@ -226,6 +290,31 @@
226
290
  </object>
227
291
  <int key="connectionID">12</int>
228
292
  </object>
293
+ <object class="IBConnectionRecord">
294
+ <object class="IBCocoaTouchOutletConnection" key="connection">
295
+ <string key="label">inAmount</string>
296
+ <reference key="source" ref="372490531"/>
297
+ <reference key="destination" ref="557227880"/>
298
+ </object>
299
+ <int key="connectionID">13</int>
300
+ </object>
301
+ <object class="IBConnectionRecord">
302
+ <object class="IBCocoaTouchOutletConnection" key="connection">
303
+ <string key="label">outAmount</string>
304
+ <reference key="source" ref="372490531"/>
305
+ <reference key="destination" ref="793142264"/>
306
+ </object>
307
+ <int key="connectionID">20</int>
308
+ </object>
309
+ <object class="IBConnectionRecord">
310
+ <object class="IBCocoaTouchEventConnection" key="connection">
311
+ <string key="label">convert:</string>
312
+ <reference key="source" ref="427187250"/>
313
+ <reference key="destination" ref="372490531"/>
314
+ <int key="IBEventType">7</int>
315
+ </object>
316
+ <int key="connectionID">15</int>
317
+ </object>
229
318
  </array>
230
319
  <object class="IBMutableOrderedSet" key="objectRecords">
231
320
  <array key="orderedObjects">
@@ -241,10 +330,12 @@
241
330
  <array class="NSMutableArray" key="children">
242
331
  <reference ref="278875700"/>
243
332
  <reference ref="544627895"/>
333
+ <reference ref="557227880"/>
334
+ <reference ref="793142264"/>
244
335
  <reference ref="313683017"/>
245
- <reference ref="671683200"/>
246
336
  <reference ref="463978271"/>
247
- <reference ref="557227880"/>
337
+ <reference ref="671683200"/>
338
+ <reference ref="427187250"/>
248
339
  </array>
249
340
  <reference key="parent" ref="0"/>
250
341
  </object>
@@ -289,6 +380,16 @@
289
380
  <reference key="object" ref="557227880"/>
290
381
  <reference key="parent" ref="191373211"/>
291
382
  </object>
383
+ <object class="IBObjectRecord">
384
+ <int key="objectID">14</int>
385
+ <reference key="object" ref="427187250"/>
386
+ <reference key="parent" ref="191373211"/>
387
+ </object>
388
+ <object class="IBObjectRecord">
389
+ <int key="objectID">19</int>
390
+ <reference key="object" ref="793142264"/>
391
+ <reference key="parent" ref="191373211"/>
392
+ </object>
292
393
  </array>
293
394
  </object>
294
395
  <dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -297,6 +398,8 @@
297
398
  <string key="-2.CustomClassName">UIResponder</string>
298
399
  <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
299
400
  <string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
401
+ <string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
402
+ <string key="19.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
300
403
  <string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
301
404
  <string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
302
405
  <string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -308,7 +411,7 @@
308
411
  <nil key="activeLocalization"/>
309
412
  <dictionary class="NSMutableDictionary" key="localizations"/>
310
413
  <nil key="sourceID"/>
311
- <int key="maxID">12</int>
414
+ <int key="maxID">20</int>
312
415
  </object>
313
416
  <object class="IBClassDescriber" key="IBDocument.Classes">
314
417
  <array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -323,15 +426,36 @@
323
426
  <object class="IBPartialClassDescription">
324
427
  <string key="className">ConversionFormViewController</string>
325
428
  <string key="superclassName">BaseUIViewController</string>
429
+ <object class="NSMutableDictionary" key="actions">
430
+ <string key="NS.key.0">convert:</string>
431
+ <string key="NS.object.0">id</string>
432
+ </object>
433
+ <object class="NSMutableDictionary" key="actionInfosByName">
434
+ <string key="NS.key.0">convert:</string>
435
+ <object class="IBActionInfo" key="NS.object.0">
436
+ <string key="name">convert:</string>
437
+ <string key="candidateClassName">id</string>
438
+ </object>
439
+ </object>
326
440
  <dictionary class="NSMutableDictionary" key="outlets">
441
+ <string key="inAmount">UITextField</string>
327
442
  <string key="inCurrencyPicker">UIPickerView</string>
443
+ <string key="outAmount">UITextField</string>
328
444
  <string key="outCurrencyPicker">UIPickerView</string>
329
445
  </dictionary>
330
446
  <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
447
+ <object class="IBToOneOutletInfo" key="inAmount">
448
+ <string key="name">inAmount</string>
449
+ <string key="candidateClassName">UITextField</string>
450
+ </object>
331
451
  <object class="IBToOneOutletInfo" key="inCurrencyPicker">
332
452
  <string key="name">inCurrencyPicker</string>
333
453
  <string key="candidateClassName">UIPickerView</string>
334
454
  </object>
455
+ <object class="IBToOneOutletInfo" key="outAmount">
456
+ <string key="name">outAmount</string>
457
+ <string key="candidateClassName">UITextField</string>
458
+ </object>
335
459
  <object class="IBToOneOutletInfo" key="outCurrencyPicker">
336
460
  <string key="name">outCurrencyPicker</string>
337
461
  <string key="candidateClassName">UIPickerView</string>
@@ -348,10 +472,10 @@
348
472
  <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
349
473
  <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
350
474
  <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
351
- <real value="1296" key="NS.object.0"/>
475
+ <real value="1536" key="NS.object.0"/>
352
476
  </object>
353
477
  <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
354
478
  <int key="IBDocument.defaultPropertyAccessControl">3</int>
355
- <string key="IBCocoaTouchPluginVersion">1181</string>
479
+ <string key="IBCocoaTouchPluginVersion">1926</string>
356
480
  </data>
357
481
  </archive>
@@ -1,8 +1,176 @@
1
1
  calatrava ?= {}
2
+ calatrava.bridge ?= {}
2
3
 
3
- calatrava.pageView ?= {}
4
+ calatravaId = () ->
5
+ str = ''
6
+ _.times 32, () ->
7
+ r = Math.floor(Math.random() * 16)
8
+ str = str + r.toString(16)
9
+ str.toUpperCase()
4
10
 
5
- calatrava.app =
11
+ calatrava.inbound =
12
+ dispatchEvent: (proxyId) ->
13
+ extraArgs = _.map(_.toArray(arguments).slice(1), ((obj) -> obj.valueOf() if obj?))
14
+ proxyPage = calatrava.bridge.pages.pageByProxyId(proxyId)
15
+ proxyPage.dispatch.apply(proxyPage, extraArgs)
6
16
 
7
- rootFeature: ->
17
+ fieldRead: (proxyId, getId, fieldValue) ->
18
+ proxyPage = calatrava.bridge.pages.pageByProxyId(proxyId)
19
+ proxyPage.fieldRead(getId, fieldValue)
8
20
 
21
+ successfulRespone: (requestId, response) ->
22
+ calatrava.bridge.requests.successfulResponse(requestId, response)
23
+
24
+ failureResponse: (requestId, errorCode, response) ->
25
+ calatrava.bridge.requests.failureResponse(requestId,errorCode, response)
26
+
27
+ fireTimer: (timerId) ->
28
+ calatrava.bridge.timers.fireTimer(timerId)
29
+
30
+ invokeCallback: (widgetName) ->
31
+ extraArgs = _.map(_.toArray(arguments).slice(1), ((obj) -> obj.valueOf() if obj?))
32
+ calatrava.bridge.widgets.callback(widgetName).apply(this, extraArgs)
33
+
34
+ calatrava.bridge.changePage = (target) ->
35
+ calatrava.bridge.runtime.changePage(target)
36
+ target
37
+
38
+ calatrava.bridge.alert = (message) ->
39
+ calatrava.bridge.runtime.alert(message)
40
+
41
+ calatrava.bridge.openUrl = (url) ->
42
+ calatrava.bridge.runtime.openUrl(url)
43
+
44
+ calatrava.bridge.log = (message) ->
45
+ calatrava.bridge.runtime.log(message)
46
+
47
+ calatrava.bridge.request = (options) ->
48
+ if options.contentType?
49
+ options.customHeaders ||= {}
50
+ options.customHeaders['Content-Type'] = options.contentType
51
+ calatrava.bridge.requests.issue(
52
+ options.url,
53
+ options.method,
54
+ options.body,
55
+ options.success,
56
+ options.failure,
57
+ options.customHeaders
58
+ )
59
+
60
+ calatrava.bridge.widgets = (() ->
61
+ callbacks = {}
62
+
63
+ display: (name, options, callback) ->
64
+ # Runtime call to display the widget
65
+ callbacks[name] = callback
66
+
67
+ callback: (name) ->
68
+ callbacks[name]
69
+ )()
70
+
71
+ calatrava.bridge.pageObject = (pageName) ->
72
+ proxyId = calatravaId()
73
+ handlerRegistry = {}
74
+ outstandingGets = {}
75
+
76
+ calatrava.bridge.runtime.registerProxyForPage(proxyId, pageName)
77
+
78
+ bind: (event, handler) ->
79
+ handlerRegistry[event] = handler
80
+ calatrava.bridge.runtime.attachProxyEventHandler(proxyId, event)
81
+
82
+ bindAll: (options) ->
83
+ _.each options, (handler, event) => pageObject.bind event, handler
84
+
85
+ dispatch: (event) ->
86
+ args = _.toArray(arguments).slice(1)
87
+ handlerRegistry[event]?.apply(this, args)
88
+
89
+ get: (field, callback) ->
90
+ getId = calatravaId()
91
+ outstandingGets[getId] = callback
92
+ calatrava.bridge.runtime.valueOfProxyField(proxyId, field, getId)
93
+
94
+ fieldRead: (getId, fieldValue) ->
95
+ outstandingGets[getId](fieldValue)
96
+ delete outstandingGets[getId]
97
+
98
+ getMany: (fields, callback) ->
99
+ results = {}
100
+ getManyPrime = (remaining) =>
101
+ if (remaining.length > 0)
102
+ field = _.first(remaining)
103
+ @get field, (fieldValue) ->
104
+ results[field] = fieldValue
105
+ getManyPrime(_.rest(remaining))
106
+ else
107
+ callback(results)
108
+ getManyPrime(fields)
109
+
110
+ render: (viewObject) -> calatrava.bridge.runtime.renderProxy(viewObject, proxyId)
111
+ proxyId: proxyId
112
+
113
+ calatrava.bridge.pages = (()->
114
+ pagesByName = {}
115
+ pagesByProxyId = {}
116
+
117
+ pageNamed: (pageName) ->
118
+ if !pagesByName[pageName]?
119
+ page = calatrava.bridge.pageObject(pageName)
120
+ pagesByName[pageName] = page
121
+ pagesByProxyId[page.proxyId] = page
122
+ pagesByName[pageName]
123
+
124
+ pageByProxyId: (proxyId) ->
125
+ pagesByProxyId[proxyId]
126
+ )()
127
+
128
+ calatrava.bridge.requests = (() ->
129
+ successHandlersById = {}
130
+ failureHandlersById = {}
131
+
132
+ clearHandlers = (requestId) ->
133
+ delete successHandlersById[requestId]
134
+ delete failureHandlersById[requestId]
135
+
136
+ issue: (url, method, body, success, failure, customHeaders) ->
137
+ requestId = calatravaId()
138
+ bodyStr = body
139
+
140
+ if bodyStr? && bodyStr.constructor != String
141
+ bodyStr = JSON.stringify(body)
142
+
143
+ successHandlersById[requestId] = success
144
+ failureHandlersById[requestId] = failure
145
+
146
+ calatrava.bridge.runtime.issueRequest
147
+ requestId: requestId
148
+ url: url
149
+ method: method
150
+ body: bodyStr
151
+ headers: customHeaders
152
+
153
+ successfulResponse: (requestId, response) ->
154
+ successHandlersById[requestId](response)
155
+ clearHandlers(requestId)
156
+
157
+ failureResponse: (requestId, response) ->
158
+ failureHandlersById[requestId](response)
159
+ clearHandlers(requestId)
160
+ )()
161
+
162
+ calatrava.bridge.timers = (() ->
163
+ callbacks= {}
164
+
165
+ start: (timeout, callback) ->
166
+ timerId = calatravaId()
167
+ callbacks[timerId] = callback
168
+ calatrava.bridge.runtime.startTimerWithTimeout(timerId, timeout)
169
+ timerId
170
+
171
+ fireTimer: (timerId) ->
172
+ callbacks[timerId]() if callbacks[timerId]
173
+
174
+ clearTimer: (timerId) ->
175
+ delete callbacks[timerId]
176
+ )()
@@ -2,49 +2,44 @@ example ?= {}
2
2
  example.converter ?= {}
3
3
 
4
4
  example.converter.controller = ({views, changePage, ajax}) ->
5
+ currencies = ['USD', 'AUD', 'GBP', 'INR']
6
+ currencyRate =
7
+ USD: 1
8
+ AUD: 0.96
9
+ GBP: 0.62
10
+ INR: 55
5
11
 
6
- currencies = ['USD','AUD','GBP']
7
12
  inCurrency = "USD"
8
13
  outCurrency = "AUD"
9
14
 
10
- currencyDropdownViewMessage = (selectedCurrency,unselectableCurrency) ->
11
- _.map( currencies, (c) ->
12
- {
13
- code: c,
14
- enabled: c != unselectableCurrency
15
- selected: c == selectedCurrency
16
- })
17
-
18
- renderCurrencyList = ({listName, disabled, selected}) ->
19
- viewMessage = {}
20
- viewMessage[listName] = currencyDropdownViewMessage(selected, disabled)
21
- views.conversionForm.render(viewMessage)
22
-
23
- renderOutCurrencyList = ()->
24
- renderCurrencyList
25
- listName: 'outCurrencies'
26
- disabled: inCurrency
27
- selected: outCurrency
28
-
29
- renderInCurrencyList = ()->
30
- renderCurrencyList
31
- listName: 'inCurrencies'
32
- disabled: outCurrency
33
- selected: inCurrency
34
-
35
- views.conversionForm.bind 'convert', ->
36
- amount = views.conversionForm.get('in_amount')
37
- start = views.conversionForm.get('in_currency')
38
- end = views.conversionForm.get('out_currency')
39
-
40
- views.conversionForm.bind 'selectedInCurrency', (selectedCurrency) ->
41
- inCurrency = selectedCurrency
42
- renderOutCurrencyList()
43
-
44
-
45
- views.conversionForm.bind 'selectedOutCurrency', (selectedCurrency) ->
46
- outCurrency = selectedCurrency
47
- renderInCurrencyList()
48
-
49
- renderInCurrencyList()
50
- renderOutCurrencyList()
15
+ currencyDropdownViewMessage = (selectedCurrency, unselectableCurrency) ->
16
+ _.map currencies, (c) ->
17
+ code: c,
18
+ enabled: c != unselectableCurrency
19
+ selected: c == selectedCurrency
20
+
21
+ convert = () ->
22
+ views.conversionForm.get 'in_amount', (inAmount) ->
23
+ outRate = currencyRate[outCurrency]
24
+ inRate = currencyRate[inCurrency]
25
+ views.conversionForm.render
26
+ out_amount: (Math.round(inAmount * (outRate / inRate) * 100)) / 100
27
+
28
+ views.conversionForm.bind 'convert', convert
29
+
30
+ views.conversionForm.bind 'selectedInCurrency', ->
31
+ views.conversionForm.get 'in_currency', (in_currency) ->
32
+ inCurrency = in_currency
33
+ views.conversionForm.render
34
+ outCurrencies: currencyDropdownViewMessage outCurrency, inCurrency
35
+
36
+ views.conversionForm.bind 'selectedOutCurrency', ->
37
+ views.conversionForm.get 'out_currency', (out_currency) ->
38
+ outCurrency = out_currency
39
+ views.conversionForm.render
40
+ inCurrencies: currencyDropdownViewMessage inCurrency, outCurrency
41
+
42
+ views.conversionForm.render
43
+ inCurrencies: currencyDropdownViewMessage inCurrency, outCurrency
44
+ outCurrencies: currencyDropdownViewMessage outCurrency, inCurrency
45
+ in_amount: 1