sproutcore 0.9.10 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/History.txt +25 -0
  2. data/Manifest.txt +2 -1
  3. data/bin/sc-server +4 -1
  4. data/frameworks/sproutcore/HISTORY +75 -3
  5. data/frameworks/sproutcore/{Core.js → core.js} +2 -3
  6. data/frameworks/sproutcore/drag/drag.js +1 -1
  7. data/frameworks/sproutcore/english.lproj/buttons.css +3 -2
  8. data/frameworks/sproutcore/english.lproj/detect-browser +44 -0
  9. data/frameworks/sproutcore/foundation/animator.js +40 -40
  10. data/frameworks/sproutcore/foundation/application.js +1 -1
  11. data/frameworks/sproutcore/foundation/benchmark.js +2 -2
  12. data/frameworks/sproutcore/foundation/error.js +61 -16
  13. data/frameworks/sproutcore/foundation/input_manager.js +1 -1
  14. data/frameworks/sproutcore/foundation/mock.js +1 -1
  15. data/frameworks/sproutcore/foundation/node_descriptor.js +2 -2
  16. data/frameworks/sproutcore/foundation/object.js +1 -1
  17. data/frameworks/sproutcore/foundation/path_module.js +1 -1
  18. data/frameworks/sproutcore/foundation/responder.js +1 -1
  19. data/frameworks/sproutcore/foundation/run_loop.js +1 -1
  20. data/frameworks/sproutcore/foundation/server.js +1 -1
  21. data/frameworks/sproutcore/foundation/string.js +32 -3
  22. data/frameworks/sproutcore/foundation/timer.js +1 -1
  23. data/frameworks/sproutcore/foundation/undo_manager.js +1 -1
  24. data/frameworks/sproutcore/globals/window.js +1 -1
  25. data/frameworks/sproutcore/lib/core_views.rb +1 -1
  26. data/frameworks/sproutcore/lib/index.rhtml +7 -1
  27. data/frameworks/sproutcore/mixins/observable.js +115 -7
  28. data/frameworks/sproutcore/models/record.js +1 -1
  29. data/frameworks/sproutcore/tests/views/view/innerFrame.rhtml +101 -99
  30. data/frameworks/sproutcore/views/collection/grid.js +1 -1
  31. data/frameworks/sproutcore/views/collection/table.js +1 -1
  32. data/frameworks/sproutcore/views/list_item.js +1 -1
  33. data/frameworks/sproutcore/views/progress.js +21 -11
  34. data/frameworks/sproutcore/views/segmented.js +40 -15
  35. data/lib/sproutcore/bundle.rb +3 -3
  36. data/lib/sproutcore/bundle_manifest.rb +7 -7
  37. data/lib/sproutcore/jsdoc.rb +4 -2
  38. data/lib/sproutcore/library.rb +112 -43
  39. data/lib/sproutcore/merb/bundle_controller.rb +77 -4
  40. data/lib/sproutcore/version.rb +1 -1
  41. data/sc_generators/client/templates/core.js +1 -4
  42. metadata +4 -3
data/History.txt CHANGED
@@ -1,3 +1,28 @@
1
+ == SproutCore 0.9.11
2
+
3
+ * Build tools are now much smarter about how the they process environment
4
+ configs. Before if you imported a framework (such as sproutcore) locally
5
+ into your project you would need to import any dependent frameworks as well
6
+ AND create configs for all of them. Now you do not need to do that. The
7
+ build tools will load the most recent base environment (defined in config
8
+ :all), along with the most recent bundle-specific config (defined in config
9
+ :bundle_name) and the bundle-location details from whatever library holds
10
+ the bundle. This will avoid a whole class of head-scratching config probs
11
+ that people encountered when trying to setup their system.
12
+
13
+ * Removed unused controllers array from core.js template in client generator
14
+
15
+ * sc-server now supports the new proxy option in sc-config. You can use this
16
+ to proxy your backend services through to your front-end SproutCore clients
17
+ without having to setup a separate service.
18
+
19
+ * Changed some launch options for sc-server that will improve performance.
20
+
21
+ * JSDoc can now handle paths spaces in them.
22
+
23
+ * Build tools no longer rely on symlink in dev mode. This should improve compatibility with Windows systems.
24
+
25
+ == SproutCore 0.9.10
1
26
 
2
27
  * The build tools can now generate bundles with relative paths. Fixes #19
3
28
 
data/Manifest.txt CHANGED
@@ -57,7 +57,7 @@ frameworks/sproutcore/controllers/array.js
57
57
  frameworks/sproutcore/controllers/collection.js
58
58
  frameworks/sproutcore/controllers/controller.js
59
59
  frameworks/sproutcore/controllers/object.js
60
- frameworks/sproutcore/Core.js
60
+ frameworks/sproutcore/core.js
61
61
  frameworks/sproutcore/drag/drag.js
62
62
  frameworks/sproutcore/drag/drag_data_source.js
63
63
  frameworks/sproutcore/drag/drag_source.js
@@ -65,6 +65,7 @@ frameworks/sproutcore/drag/drop_target.js
65
65
  frameworks/sproutcore/english.lproj/blank.gif
66
66
  frameworks/sproutcore/english.lproj/buttons.css
67
67
  frameworks/sproutcore/english.lproj/core.css
68
+ frameworks/sproutcore/english.lproj/detect-browser
68
69
  frameworks/sproutcore/english.lproj/icons.css
69
70
  frameworks/sproutcore/english.lproj/images/indicator.gif
70
71
  frameworks/sproutcore/english.lproj/images/sc-theme-sprite.png
data/bin/sc-server CHANGED
@@ -44,7 +44,10 @@ Merb::Router.prepare { |r| r.connect_clients('/') }
44
44
  Merb::Config.use { |c|
45
45
  c[:framework] = {},
46
46
  c[:session_store] = 'none',
47
- c[:exception_details] = true
47
+ c[:exception_details] = true,
48
+ c[:reload_classes] = false,
49
+ c[:use_mutex] = false,
50
+ c[:log_auto_flush] = true
48
51
  }
49
52
 
50
53
  ############################################################
@@ -1,11 +1,83 @@
1
- == GIT HEAD
2
1
 
2
+ - [FIX] innerFrame tests were failing. Now working.
3
3
 
4
- * SC.Platform.Firefox now returns 2 for any gecko browser that is not Firefox.
4
+ - Progress bar now shows 100% fill when set to indeterminate. This should
5
+ make it easier to style an indeterminate appearance.
6
+
7
+ - Changed all references for window.location= to window.location.href=.
8
+ Improves IE compatibility.
9
+
10
+ - Cleaned JSLink warnings from animator.js
5
11
 
6
- * set() and a variety of other methods now returns this instead of the set
12
+ - Removed stray debugger statements (thanks august!)
13
+
14
+ - Fixed CSS issues with SC-theme that made buttons appear offset. Now appears
15
+ correct in FF3 & Safari (thanks mde!)
16
+
17
+ - Added detect-browser script which can be included at the top of your page to
18
+ detect the current browser and platform. Also includes an
19
+ SC.setupBodyClassNames method that you can call after the body tag has been
20
+ declared that will add class names for the current browser and platform.
21
+
22
+ - Added documentation for Function.property()
23
+ - Added documentation for SC.Error.
24
+ - Added documentation for SC.SegmentedView
25
+
26
+ == sproutcore-0.9.10
27
+
28
+ - SC.Platform.Firefox now returns 2 for any gecko browser that is not Firefox.
29
+
30
+ - set() and a variety of other methods now returns this instead of the set
7
31
  value. This makes it possible to do method chaining.
8
32
 
33
+ - Fixed typo in (). Fixes #12
34
+
35
+ - Fixed #11
36
+
37
+ - Switch from transitional to strict DTD
38
+
39
+ - Replacement of window.location to window.location.href.
40
+
41
+ - Added default src to image_view (static_url('blank'))
42
+
43
+ - Fix for view_helper view that was closing the element.
44
+
45
+ - sproutcore now treats space as a printable key instead of a function key.
46
+
47
+ - Added chainability to observer methods; improved docs
48
+
49
+ set(), beginPropertyChanges(), endPropertyChanges() and a whole slew of other
50
+ methods now return this instead of void or the set value. This allows for
51
+ method chainings jQuery style such as:
52
+
53
+ contact.beginPropertyChanges()
54
+ .set('firstName', 'Charles')
55
+ .set('lastName', 'Jolley')
56
+ .endPropertyChanges();
57
+
58
+ - auto select content of textarea when it's focused: this._isFocused is true for textarea while false for text input in didBecomeFirstRespo
59
+
60
+ - scrollable#scrollViewToVisible now scrolls up and left. This corrects a bug with keyboard control that would bust when you move up or left.
61
+
62
+ - Updated documentation on form
63
+
64
+ - Use Element instead of element for IE compatability in Element.setClassName()
65
+
66
+ - Added SC.View#destroy() to remove views from internal caches. insertBefore, removeChild, etc. also now return the view instance so you can chain them.
67
+
68
+ - Popup menu was setting the width on each of the child menu items in addition to itself. This had a huge performance impact with little ac
69
+
70
+ - Disabled the current behavior for the menu item view helper which parses the shortcut before inserting it; now it simply passes the passe
71
+
72
+ - [FIX] Replaced url() calls with static_url() in CSS so that they will work properly in build mode
73
+
74
+ - Cleanup in drag.js
75
+
76
+ - Adding href property to ButtonView for bindable functionality on href attributes.
77
+
78
+ - Properly order drop targets so that nested targets appear first.
79
+
80
+
9
81
  == 0.9.8
10
82
 
11
83
  * [FIX] collection views now update group views appropriately.
@@ -41,7 +41,7 @@
41
41
 
42
42
  // All objects live in the SproutCore namespace, which is also availabe in the
43
43
  // abreviation SC.
44
- SproutCore = {} ; SC = SproutCore ;
44
+ if (!SC) SC = {}; SproutCore = SC ;
45
45
 
46
46
  // this makes for some nicer to read code
47
47
  var YES = true ; var NO = false ;
@@ -117,7 +117,6 @@ Object.extend(SC,{
117
117
 
118
118
  // To flush the callOnLoad queue, you need to set window.onload=SC.didLoad
119
119
  didLoad: function() {
120
-
121
120
  SC.app = SC.Application.create();
122
121
  SC.app.run();
123
122
 
@@ -160,7 +159,7 @@ Object.extend(SC,{
160
159
  } else if ((url.slice(0,5) == 'http:') || (url.slice(0,6) == 'https:')) {
161
160
  // no change
162
161
  } else {
163
- url = window.location + '/' + url ;
162
+ url = window.location.href + '/' + url ;
164
163
  }
165
164
  return url ;
166
165
  },
@@ -3,7 +3,7 @@
3
3
  // copyright 2006-2008 Sprout Systems, Inc.
4
4
  // ========================================================================
5
5
 
6
- require('Core') ;
6
+ require('core') ;
7
7
  require('views/view') ;
8
8
 
9
9
  SC.DRAG_LINK = 0x0004; SC.DRAG_COPY = 0x0001; SC.DRAG_MOVE = 0x0002;
@@ -57,8 +57,9 @@ a.regular span.button-inner {
57
57
  a.regular span.label {
58
58
  display: block ;
59
59
  text-align: center;
60
- padding-top: 3px;
61
- height: 19px;
60
+ height: 22px;
61
+ line-height: 22px;
62
+ vertical-align: middle;
62
63
  margin-left: 20px;
63
64
  text-shadow: #f0f0f0 0px 1px 0px;
64
65
  }
@@ -0,0 +1,44 @@
1
+ // NOTE: This file is named with a .javascript extension to avoid having this
2
+ // file combined into the joined javascript.js file for this framework.
3
+
4
+ // This bootstrap file can be included at the top of your index.html to detect
5
+ // the browser, language, and platform. You can then call
6
+ // SC.setupBrowserClassNames() in a script tag after the body is defined to
7
+ // load the class names into the body.
8
+ if (!SC) var SC = {} ;
9
+ SC.browser = (function() {
10
+
11
+ var userAgent = navigator.userAgent.toLowerCase();
12
+ var version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1] ;
13
+
14
+ var browser = {
15
+ version: version,
16
+ webkit: (/webkit/).test( userAgent ) ? version : 0,
17
+ opera: (/opera/).test( userAgent ) ? version : 0,
18
+ msie: (/msie/).test( userAgent ) && !(/opera/).test( userAgent ) ? version : 0,
19
+ mozilla: (/mozilla/).test( userAgent ) && !(/(compatible|webkit)/).test( userAgent ) ? version : 0,
20
+ mobileSafari: (/apple.*mobile.*safari/).test(userAgent) ? version : 0,
21
+ windows: !!(/(windows)/).test(userAgent),
22
+ mac: !!((/(macintosh)/).test(userAgent) || (/(mac os x)/).test(userAgent))
23
+ };
24
+
25
+ return browser ;
26
+
27
+ })();
28
+
29
+ SC.setupBodyClassNames = function() {
30
+ var el = document.body ;
31
+ if (!el) return ;
32
+
33
+ // Add class name for the current browser, platform, and language
34
+ var browser = (SC.browser.webkit) ? 'webkit' : (SC.browser.opera) ? 'opera' : (SC.browser.mozilla) ? 'mozilla' : (SC.browser.msie) ? 'msie' : 'unknown-browser' ;
35
+ var platform = (SC.browser.windows) ? 'windows' : (SC.browser.mac) ? 'mac' : 'other-platform' ;
36
+
37
+ var classNames = (el.className) ? el.className.split(' ') : [] ;
38
+ classNames.push(browser) ;
39
+ classNames.push(platform) ;
40
+ if (SC.browser.mobileSafari) classNames.push('mobile-safari') ;
41
+ el.className = classNames.join(' ') ;
42
+ } ;
43
+
44
+
@@ -36,7 +36,7 @@
36
36
  function Animator(options) {
37
37
  this.setOptions(options);
38
38
  var _this = this;
39
- this.timerDelegate = function(){_this.onTimerEvent()};
39
+ this.timerDelegate = function(){_this.onTimerEvent();};
40
40
  this.subjects = [];
41
41
  this.target = 0;
42
42
  this.state = 0;
@@ -129,8 +129,8 @@ Animator.prototype = {
129
129
  }
130
130
  },
131
131
  // shortcuts
132
- play: function() {this.seekFromTo(0, 1)},
133
- reverse: function() {this.seekFromTo(1, 0)},
132
+ play: function() {this.seekFromTo(0, 1);},
133
+ reverse: function() {this.seekFromTo(1, 0);},
134
134
  // return a string describing this Animator, for debugging
135
135
  inspect: function() {
136
136
  var str = "#<Animator:\n";
@@ -140,14 +140,14 @@ Animator.prototype = {
140
140
  str += ">";
141
141
  return str;
142
142
  }
143
- }
143
+ };
144
144
  // merge the properties of two objects
145
145
  Animator.applyDefaults = function(defaults, prefs) {
146
146
  prefs = prefs || {};
147
147
  var prop, result = {};
148
148
  for (prop in defaults) result[prop] = prefs[prop] !== undefined ? prefs[prop] : defaults[prop];
149
149
  return result;
150
- }
150
+ };
151
151
  // make an array from any object
152
152
  Animator.makeArray = function(o) {
153
153
  if (o == null) return [];
@@ -155,7 +155,7 @@ Animator.makeArray = function(o) {
155
155
  var result = [];
156
156
  for (var i=0; i<o.length; i++) result[i] = o[i];
157
157
  return result;
158
- }
158
+ };
159
159
  // convert a dash-delimited-property to a camelCaseProperty (c/o Prototype, thanks Sam!)
160
160
  Animator.camelize = function(string) {
161
161
  var oStringList = string.split('-');
@@ -170,35 +170,35 @@ Animator.camelize = function(string) {
170
170
  camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
171
171
  }
172
172
  return camelizedString;
173
- }
173
+ };
174
174
  // syntactic sugar for creating CSSStyleSubjects
175
175
  Animator.apply = function(el, style, options) {
176
176
  if (style instanceof Array) {
177
177
  return new Animator(options).addSubject(new CSSStyleSubject(el, style[0], style[1]));
178
178
  }
179
179
  return new Animator(options).addSubject(new CSSStyleSubject(el, style));
180
- }
180
+ };
181
181
  // make a transition function that gradually accelerates. pass a=1 for smooth
182
182
  // gravitational acceleration, higher values for an exaggerated effect
183
183
  Animator.makeEaseIn = function(a) {
184
184
  return function(state) {
185
185
  return Math.pow(state, a*2);
186
- }
187
- }
186
+ };
187
+ };
188
188
  // as makeEaseIn but for deceleration
189
189
  Animator.makeEaseOut = function(a) {
190
190
  return function(state) {
191
191
  return 1 - Math.pow(1 - state, a*2);
192
- }
193
- }
192
+ };
193
+ };
194
194
  // make a transition function that, like an object with momentum being attracted to a point,
195
195
  // goes past the target then returns
196
196
  Animator.makeElastic = function(bounces) {
197
197
  return function(state) {
198
198
  state = Animator.tx.easeInOut(state);
199
199
  return ((1-Math.cos(state * Math.PI * bounces)) * (1 - state)) + state;
200
- }
201
- }
200
+ };
201
+ };
202
202
  // make an Attack Decay Sustain Release envelope that starts and finishes on the same level
203
203
  //
204
204
  Animator.makeADSR = function(attackEnd, decayEnd, sustainEnd, sustainLevel) {
@@ -214,8 +214,8 @@ Animator.makeADSR = function(attackEnd, decayEnd, sustainEnd, sustainLevel) {
214
214
  return sustainLevel;
215
215
  }
216
216
  return sustainLevel * (1 - ((state - sustainEnd) / (1 - sustainEnd)));
217
- }
218
- }
217
+ };
218
+ };
219
219
  // make a transition function that, like a ball falling to floor, reaches the target and/
220
220
  // bounces back again
221
221
  Animator.makeBounce = function(bounces) {
@@ -223,8 +223,8 @@ Animator.makeBounce = function(bounces) {
223
223
  return function(state) {
224
224
  state = fn(state);
225
225
  return state <= 1 ? state : 2-state;
226
- }
227
- }
226
+ };
227
+ };
228
228
 
229
229
  // pre-made transition functions to use with the 'transition' option
230
230
  Animator.tx = {
@@ -242,7 +242,7 @@ Animator.tx = {
242
242
  veryElastic: Animator.makeElastic(3),
243
243
  bouncy: Animator.makeBounce(1),
244
244
  veryBouncy: Animator.makeBounce(3)
245
- }
245
+ };
246
246
 
247
247
  // animates a pixel-based style property between two integer values
248
248
  function NumericalStyleSubject(els, property, from, to, units) {
@@ -255,7 +255,7 @@ function NumericalStyleSubject(els, property, from, to, units) {
255
255
  this.from = parseFloat(from);
256
256
  this.to = parseFloat(to);
257
257
  this.units = units != null ? units : 'px';
258
- }
258
+ };
259
259
  NumericalStyleSubject.prototype = {
260
260
  setState: function(state) {
261
261
  var style = this.getStyle(state);
@@ -280,7 +280,7 @@ NumericalStyleSubject.prototype = {
280
280
  inspect: function() {
281
281
  return "\t" + this.property + "(" + this.from + this.units + " to " + this.to + this.units + ")\n";
282
282
  }
283
- }
283
+ };
284
284
 
285
285
  // animates a colour based style property between two hex values
286
286
  function ColorStyleSubject(els, property, from, to) {
@@ -290,7 +290,7 @@ function ColorStyleSubject(els, property, from, to) {
290
290
  this.from = this.expandColor(from);
291
291
  this.origFrom = from;
292
292
  this.origTo = to;
293
- }
293
+ };
294
294
 
295
295
  ColorStyleSubject.prototype = {
296
296
  // parse "#FFFF00" to [256, 256, 0]
@@ -301,7 +301,7 @@ ColorStyleSubject.prototype = {
301
301
  red = parseInt(hexColor.slice(1, 3), 16);
302
302
  green = parseInt(hexColor.slice(3, 5), 16);
303
303
  blue = parseInt(hexColor.slice(5, 7), 16);
304
- return [red,green,blue]
304
+ return [red,green,blue];
305
305
  }
306
306
  if (window.DEBUG) {
307
307
  alert("Invalid colour: '" + color + "'");
@@ -322,7 +322,7 @@ ColorStyleSubject.prototype = {
322
322
  inspect: function() {
323
323
  return "\t" + this.property + "(" + this.origFrom + " to " + this.origTo + ")\n";
324
324
  }
325
- }
325
+ };
326
326
 
327
327
  // return a properly formatted 6-digit hex colour spec, or false
328
328
  ColorStyleSubject.parseColor = function(string) {
@@ -330,7 +330,7 @@ ColorStyleSubject.parseColor = function(string) {
330
330
  if(match = ColorStyleSubject.parseColor.rgbRe.exec(string)) {
331
331
  var part;
332
332
  for (var i=1; i<=3; i++) {
333
- part = Math.max(0, Math.min(255, parseInt(match[i])));
333
+ part = Math.max(0, Math.min(255, parseInt(match[i],0)));
334
334
  color += ColorStyleSubject.toColorPart(part);
335
335
  }
336
336
  return color;
@@ -345,14 +345,14 @@ ColorStyleSubject.parseColor = function(string) {
345
345
  return '#' + match[1];
346
346
  }
347
347
  return false;
348
- }
348
+ };
349
349
  // convert a number to a 2 digit hex string
350
350
  ColorStyleSubject.toColorPart = function(number) {
351
351
  if (number > 255) number = 255;
352
352
  var digits = number.toString(16);
353
353
  if (number < 16) return '0' + digits;
354
354
  return digits;
355
- }
355
+ };
356
356
  ColorStyleSubject.parseColor.rgbRe = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i;
357
357
  ColorStyleSubject.parseColor.hexRe = /^\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
358
358
 
@@ -364,7 +364,7 @@ function DiscreteStyleSubject(els, property, from, to, threshold) {
364
364
  this.from = from;
365
365
  this.to = to;
366
366
  this.threshold = threshold || 0.5;
367
- }
367
+ };
368
368
 
369
369
  DiscreteStyleSubject.prototype = {
370
370
  setState: function(state) {
@@ -376,7 +376,7 @@ DiscreteStyleSubject.prototype = {
376
376
  inspect: function() {
377
377
  return "\t" + this.property + "(" + this.from + " to " + this.to + " @ " + this.threshold + ")\n";
378
378
  }
379
- }
379
+ };
380
380
 
381
381
  // animates between two styles defined using CSS.
382
382
  // if style1 and style2 are present, animate between them, if only style1
@@ -446,7 +446,7 @@ function CSSStyleSubject(els, style1, style2) {
446
446
  }
447
447
  this.subjects[this.subjects.length] = new type(els, prop, from, to, units);
448
448
  }
449
- }
449
+ };
450
450
 
451
451
  CSSStyleSubject.prototype = {
452
452
  // parses "width: 400px; color: #FFBB2E" to {width: "400px", color: "#FFBB2E"}
@@ -491,7 +491,7 @@ CSSStyleSubject.prototype = {
491
491
  }
492
492
  return str;
493
493
  }
494
- }
494
+ };
495
495
  // get the current value of a css property,
496
496
  CSSStyleSubject.getStyle = function(el, property){
497
497
  var style;
@@ -505,8 +505,8 @@ CSSStyleSubject.getStyle = function(el, property){
505
505
  if(el.currentStyle){
506
506
  style = el.currentStyle[property];
507
507
  }
508
- return style || el.style[property]
509
- }
508
+ return style || el.style[property];
509
+ };
510
510
 
511
511
 
512
512
  CSSStyleSubject.ruleRe = /^\s*([a-zA-Z\-]+)\s*:\s*(\S(.+\S)?)\s*$/;
@@ -538,7 +538,7 @@ function AnimatorChain(animators, options) {
538
538
  }
539
539
  this.forwards = false;
540
540
  this.current = 0;
541
- }
541
+ };
542
542
 
543
543
  AnimatorChain.prototype = {
544
544
  // apply defaults
@@ -588,7 +588,7 @@ AnimatorChain.prototype = {
588
588
  animator.options.onComplete = function() {
589
589
  if (oldOnComplete) oldOnComplete.call(animator);
590
590
  _this.advance();
591
- }
591
+ };
592
592
  },
593
593
  // play the next animator
594
594
  advance: function() {
@@ -613,7 +613,7 @@ AnimatorChain.prototype = {
613
613
  this.animators[this.current].seekTo(1);
614
614
  }
615
615
  }
616
- }
616
+ };
617
617
 
618
618
  // an Accordion is a class that creates and controls a number of Animators. An array of elements is passed in,
619
619
  // and for each element an Animator and a activator button is created. When an Animator's activator button is
@@ -638,7 +638,7 @@ function Accordion(options) {
638
638
  an.jumpTo(0);
639
639
  var activator = this.options.getActivator(el);
640
640
  activator.index = i;
641
- activator.onclick = function(){_this.show(this.index)};
641
+ activator.onclick = function(){_this.show(this.index);};
642
642
  this.ans[this.ans.length] = an;
643
643
  this.rememberanceTexts[i] = activator.innerHTML.replace(/\s/g, "");
644
644
  if (this.rememberanceTexts[i] === current) {
@@ -646,7 +646,7 @@ function Accordion(options) {
646
646
  }
647
647
  }
648
648
  this.show(selected);
649
- }
649
+ };
650
650
 
651
651
  Accordion.prototype = {
652
652
  // apply defaults
@@ -656,7 +656,7 @@ Accordion.prototype = {
656
656
  sections: null,
657
657
  // a function that locates an activator button element given a section element.
658
658
  // by default it takes a button id from the section's "activator" attibute
659
- getActivator: function(el) {return document.getElementById(el.getAttribute("activator"))},
659
+ getActivator: function(el) {return document.getElementById(el.getAttribute("activator"));},
660
660
  // shifts each animator's range, for example with options {from:0,to:100,shift:20}
661
661
  // the animators' ranges will be 0-100, 20-120, 40-140 etc.
662
662
  shift: 0,
@@ -676,4 +676,4 @@ Accordion.prototype = {
676
676
  document.location.hash = this.rememberanceTexts[section];
677
677
  }
678
678
  }
679
- }
679
+ };