sproutcore 0.9.8 → 0.9.9

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.
data/History.txt CHANGED
@@ -1,3 +1,5 @@
1
+ * [FIX] Changed default language mapping for Japanese from jp to ja.
2
+
1
3
  == SproutCore 0.9.8
2
4
 
3
5
  * [FIX] Plugged memory leak in view_helper that would cause sc-server to slow down after repeated use.
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  include FileUtils
3
3
 
4
4
  require 'rubygems'
5
- %w[rake hoe newgem rubigen actionpack activesupport].each do |req_gem|
5
+ %w[rake hoe newgem rubigen activesupport actionpack].each do |req_gem|
6
6
  begin
7
7
  require req_gem
8
8
  rescue LoadError
@@ -438,7 +438,7 @@ SC.Drag = SC.Object.extend(
438
438
  //
439
439
  // This means that if you change the view hierarchy of your drop targets
440
440
  // during a drag, it will probably be wrong.
441
- _dropTargets: function() {
441
+ _getOrderedDropTargets: function() {
442
442
  if (this._cachedDropTargets) return this._cachedDropTargets ;
443
443
  var ret = [];
444
444
 
@@ -448,15 +448,29 @@ SC.Drag = SC.Object.extend(
448
448
  if (!dt.hasOwnProperty(key)) continue ;
449
449
  ret.push(dt[key]) ;
450
450
  }
451
-
452
- // now resort. This custom function will sort nested drop targets
453
- // at the start of the list.
454
- ret = ret.sort(function(a,b) {
455
- var view = a;
456
- while((view = view.parentNode) && (view != SC.window)) {
457
- if (b == view) return -1 ;
451
+
452
+ // views must be sorted so that drop targets with the deepest nesting
453
+ // levels appear first in the array. The getDepthFor().
454
+ var depth = {} ;
455
+ var getDepthFor = function(x) {
456
+ if (!x) return 0 ;
457
+ var guid = SC.guidFor(x);
458
+ var ret = depth[guid];
459
+ if (!ret) {
460
+ ret = 1 ;
461
+ while((x = x.parentNode) && (x !== SC.window)) {
462
+ if (dt[SC.guidFor(x)] !== undefined) ret++ ;
463
+ }
464
+ depth[guid] = ret ;
458
465
  }
459
- return 1;
466
+ return ret ;
467
+ } ;
468
+
469
+ ret.sort(function(a,b) {
470
+ if (a===b) return 0;
471
+ a = getDepthFor(a) ;
472
+ b = getDepthFor(b) ;
473
+ return (a > b) ? -1 : 1 ;
460
474
  }) ;
461
475
 
462
476
  this._cachedDropTargets = ret ;
@@ -467,7 +481,7 @@ SC.Drag = SC.Object.extend(
467
481
  // This will search through the drop targets, looking for one in the
468
482
  // target area.
469
483
  _findDropTarget: function(evt) {
470
- var dt = this._dropTargets() ;
484
+ var dt = this._getOrderedDropTargets() ;
471
485
  var loc = Event.pointerLocation(evt) ;
472
486
 
473
487
  var ret = null ;
@@ -223,12 +223,11 @@ SC.ButtonView = SC.View.extend(SC.Control,
223
223
  keyEquivalent: null,
224
224
 
225
225
  /** @private {String} used to store a previously defined key equiv */
226
- _lastKeyEquivalent: null,
226
+ _defaultKeyEquivalent: null,
227
227
 
228
228
  performKeyEquivalent: function( keystring, evt )
229
229
  {
230
230
  if (!this.get('isEnabled')) return false;
231
-
232
231
  var keyEquivalent = this.get('keyEquivalent');
233
232
  if (keyEquivalent && (keyEquivalent == keystring))
234
233
  {
@@ -266,6 +265,8 @@ SC.ButtonView = SC.View.extend(SC.Control,
266
265
  init: function() {
267
266
  arguments.callee.base.call(this) ;
268
267
 
268
+ //cache the key equivalent
269
+ if(this.get("keyEquivalent")) this._defaultKeyEquivalent = this.get("keyEquivalent");
269
270
  // setup initial CSS clases
270
271
  this._isDefaultOrCancelObserver() ;
271
272
 
@@ -332,23 +333,20 @@ SC.ButtonView = SC.View.extend(SC.Control,
332
333
  _isDefaultOrCancelObserver: function() {
333
334
  var isDef = !!this.get('isDefault') ;
334
335
  var isCancel = !isDef && this.get('isCancel') ;
336
+
335
337
  if(this.didChangeFor('defaultCancelChanged','isDefault','isCancel')) {
336
338
  this.setClassName('def', isDef) ;
337
- var key = this.get('keyEquivalent') ;
338
339
  if (isDef) {
339
- //cache the previously defined key equivalent
340
- this._lastKeyEquivalent = key;
341
340
  this.setIfChanged('keyEquivalent', 'return');
342
341
  }
343
342
  else if (isCancel)
344
343
  {
345
- //cache the previously defined key equivalent
346
- this._lastKeyEquivalent = key;
347
344
  this.setIfChanged('keyEquivalent', 'escape') ;
348
345
  }
349
346
  else
350
347
  {
351
- this.setIfChanged("keyEquivalent",this._lastKeyEquivalent);
348
+ //restore the default key equivalent
349
+ this.set("keyEquivalent",this._defaultKeyEquivalent);
352
350
  }
353
351
  }
354
352
 
@@ -1701,7 +1701,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1701
1701
  // Make sure that saved mouseDown state is always reset in case we do
1702
1702
  // not get a paired mouseUp. (Only happens if subclass does not call us
1703
1703
  // like it should)
1704
- this._mouseDownAt = this._shouldDeselect =
1704
+ this._mouseDownAt = this._shouldSelect = this._shouldDeselect =
1705
1705
  this._shouldReselect = this._refreshSelection = false;
1706
1706
 
1707
1707
  // find the actual view the mouse was pressed down on. This will call
@@ -1724,18 +1724,18 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1724
1724
  // collection some basic setup info
1725
1725
  var selection = this.get('selection') || [];
1726
1726
  var isSelected = selection.include(mouseDownContent);
1727
- var modifierKeyPressed = ev.ctrlKey || ev.altKey || ev.metaKey;
1727
+ var modifierKeyPressed = ev.ctrlKey || ev.metaKey ;
1728
1728
  if (mouseDownView.checkboxView && (Event.element(ev) == el.checkboxView.rootElement)) {
1729
1729
  modifierKeyPressed = true ;
1730
- }
1730
+ }
1731
+ this._modifierKeyPressed = modifierKeyPressed ;
1731
1732
 
1732
1733
  this._mouseDownAt = Date.now();
1733
1734
 
1734
- // holding down a modifier key while clicking a selected item should deselect that item...
1735
- // deselect and bail.
1735
+ // holding down a modifier key while clicking a selected item should
1736
+ // deselect that item...deselect and bail.
1736
1737
  if (modifierKeyPressed && isSelected) {
1737
1738
  this._shouldDeselect = mouseDownContent;
1738
-
1739
1739
  // if the shiftKey was pressed, then we want to extend the selection
1740
1740
  // from the last selected item
1741
1741
  } else if (ev.shiftKey && selection.get('length') > 0) {
@@ -1747,20 +1747,17 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1747
1747
  } else if (!modifierKeyPressed && isSelected) {
1748
1748
  this._shouldReselect = mouseDownContent;
1749
1749
 
1750
- // Otherwise, if selecting on mouse down, simply select the clicked on item,
1751
- // adding it to the current
1752
- // selection if a modifier key was pressed.
1750
+ // Otherwise, if selecting on mouse down, simply select the clicked on
1751
+ // item, adding it to the current selection if a modifier key was pressed.
1753
1752
  } else {
1754
- if(this.get("selectOnMouseDown")){
1753
+ if (this.get("selectOnMouseDown")){
1755
1754
  this.selectItems(mouseDownContent, modifierKeyPressed);
1756
- }
1757
-
1758
-
1759
-
1755
+ } else this._shouldSelect = mouseDownContent ;
1760
1756
  }
1761
-
1757
+
1762
1758
  // saved for extend by shift ops.
1763
1759
  this._previousMouseDownContent = mouseDownContent;
1760
+
1764
1761
  return true;
1765
1762
  },
1766
1763
 
@@ -1782,11 +1779,19 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1782
1779
 
1783
1780
  } else {
1784
1781
  var content = (view) ? view.get('content') : null ;
1785
- if(this._previousMouseDownContent == content) { this.selectItems(content); }
1782
+
1783
+ // this will be set if the user simply clicked on an unselected item and
1784
+ // selectOnMouseDown was NO.
1785
+ if (this._shouldSelect) this.selectItems(this._shouldSelect, this._modifierKeyPressed);
1786
+
1787
+ // This is true if the user clicked on a selected item with a modifier
1788
+ // key pressed.
1786
1789
  if (this._shouldDeselect) this.deselectItems(this._shouldDeselect);
1787
1790
 
1788
- // begin editing of an item view IF all of the following is true:
1789
- // otherwise, just reselect.
1791
+ // This is true if the user clicked on a selected item without a
1792
+ // modifier-key pressed. When this happens we try to begin editing
1793
+ // on the content. If that is not allowed, then simply clear the
1794
+ // selection and reselect the clicked on item.
1790
1795
  if (this._shouldReselect) {
1791
1796
 
1792
1797
  // - contentValueIsEditable is true
@@ -1821,7 +1826,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1821
1826
  },
1822
1827
 
1823
1828
  _cleanupMouseDown: function() {
1824
- this._mouseDownAt = this._shouldDeselect = this._shouldReselect = this._refreshSelection = false;
1829
+ this._mouseDownAt = this._shouldDeselect = this._shouldReselect = this._refreshSelection = this._shouldSelect = false;
1825
1830
  this._mouseDownEvent = this._mouseDownContent = this._mouseDownView = null ;
1826
1831
  },
1827
1832
 
@@ -1851,33 +1856,39 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1851
1856
  },
1852
1857
 
1853
1858
  _findSelectionExtendedByShift: function(selection, mouseDownContent) {
1854
- var collection = this.get('content');
1859
+ var content = this.get('content');
1855
1860
 
1856
1861
  // bounds of the collection...
1857
- var collectionLowerBounds = 0;
1858
- var collectionUpperBounds = (collection.get('length') - 1);
1862
+ var contentLowerBounds = 0;
1863
+ var contentUpperBounds = (content.get('length') - 1);
1859
1864
 
1860
- var selectionBeginIndex = collection.indexOf(selection.first());
1861
- var selectionEndIndex = collection.indexOf(selection.last());
1865
+ var selectionBeginIndex = content.indexOf(selection.first());
1866
+ var selectionEndIndex = content.indexOf(selection.last());
1862
1867
 
1863
- var previousMouseDownIndex = collection.indexOf(this._previousMouseDownContent);
1868
+ var previousMouseDownIndex = content.indexOf(this._previousMouseDownContent);
1864
1869
  // _previousMouseDownContent couldn't be found... either it hasn't been set yet or the record has been deleted by the user
1865
1870
  // fall back to the first selected item.
1866
1871
  if (previousMouseDownIndex == -1) previousMouseDownIndex = selectionBeginIndex;
1867
1872
 
1868
1873
 
1869
- var currentMouseDownIndex = collection.indexOf(mouseDownContent);
1874
+ var currentMouseDownIndex = content.indexOf(mouseDownContent);
1870
1875
  // sanity check...
1871
- if (currentMouseDownIndex == -1) throw "Unable to extend selection to an item that's not in the collection!";
1876
+ if (currentMouseDownIndex == -1) throw "Unable to extend selection to an item that's not in the content array!";
1872
1877
 
1873
1878
  // clicked before the current selection set... extend it's beginning...
1874
- if (currentMouseDownIndex < selectionBeginIndex) selectionBeginIndex = currentMouseDownIndex;
1879
+ if (currentMouseDownIndex < selectionBeginIndex) {
1880
+ selectionBeginIndex = currentMouseDownIndex;
1881
+ }
1882
+
1875
1883
  // clicked after the current selection set... extend it's ending...
1876
- if (currentMouseDownIndex > selectionEndIndex) selectionEndIndex = currentMouseDownIndex;
1877
- // clicked inside the selection set... need to determine where the las
1878
- if ((currentMouseDownIndex > selectionBeginIndex) && (currentMouseDownIndex < selectionEndIndex))
1879
- {
1880
- if (currentMouseDownIndex == previousMouseDownIndex) {
1884
+ if (currentMouseDownIndex > selectionEndIndex) {
1885
+ selectionEndIndex = currentMouseDownIndex;
1886
+ }
1887
+
1888
+ // clicked inside the selection set... need to determine where the last
1889
+ // selection was and use that as an anchor.
1890
+ if ((currentMouseDownIndex > selectionBeginIndex) && (currentMouseDownIndex < selectionEndIndex)) {
1891
+ if (currentMouseDownIndex === previousMouseDownIndex) {
1881
1892
  selectionBeginIndex = currentMouseDownIndex;
1882
1893
  selectionEndIndex = currentMouseDownIndex;
1883
1894
  } else if (currentMouseDownIndex > previousMouseDownIndex) {
@@ -1888,12 +1899,14 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1888
1899
  selectionEndIndex = previousMouseDownIndex;
1889
1900
  }
1890
1901
  }
1902
+
1891
1903
  // slice doesn't include the last index passed... silly..
1892
1904
  selectionEndIndex++;
1893
1905
 
1894
- // shouldn't need to sanity check that the selection is in bounds due to the indexOf checks above...
1895
- // I'll have faith that indexOf hasn't lied to me...
1896
- return collection.slice(selectionBeginIndex, selectionEndIndex);
1906
+ // shouldn't need to sanity check that the selection is in bounds due to
1907
+ // the indexOf checks above...I'll have faith that indexOf hasn't lied to
1908
+ // me...
1909
+ return content.slice(selectionBeginIndex, selectionEndIndex);
1897
1910
  },
1898
1911
 
1899
1912
 
@@ -1940,11 +1953,24 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
1940
1953
  // DRAG AND DROP SUPPORT
1941
1954
  //
1942
1955
 
1943
- _reorderDataType: function() {
1956
+ /**
1957
+ When reordering its content, the collection view will store its reorder
1958
+ data using this special data type. The data type is unique to each
1959
+ collection view instance. You can use this data type to detect reorders
1960
+ if necessary.
1961
+
1962
+ @field
1963
+ @type {String}
1964
+ */
1965
+ reorderDataType: function() {
1944
1966
  if (!this._reorderDataTypeKey) {
1945
1967
  this._reorderDataTypeKey = "SC.CollectionView.Reorder.%@".fmt(SC.guidFor(this)) ;
1946
1968
  }
1947
1969
  return this._reorderDataTypeKey ;
1970
+ }.property(),
1971
+
1972
+ _reorderDataType: function() {
1973
+ return this.get('reorderDataType') ;
1948
1974
  },
1949
1975
 
1950
1976
  /**
@@ -2007,8 +2033,12 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2007
2033
  // Set this to the dragContent property.
2008
2034
  var content = this.get('content') || [] ;
2009
2035
  var dragContent;
2010
- if (this.get("selectOnMouseDown") == false) {
2011
- dragContent = [this._previousMouseDownContent];
2036
+
2037
+ // if we don't select on mouse down, then the selection has not been
2038
+ // updated to whatever the user clicked. Instead use
2039
+ // mouse down content.
2040
+ if (!this.get("selectOnMouseDown")) {
2041
+ dragContent = [this._mouseDownContent];
2012
2042
  } else {
2013
2043
  dragContent = this.get('selection').sort(function(a,b) {
2014
2044
  a = content.indexOf(a) ;
@@ -2072,7 +2102,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2072
2102
  if (canReorderContent) {
2073
2103
  ret = (ret) ? ret.slice() : [] ;
2074
2104
 
2075
- var key = this._reorderDataType() ;
2105
+ var key = this.get('reorderDataType') ;
2076
2106
  if (ret.indexOf(key) < 0) ret.push(key) ;
2077
2107
  }
2078
2108
  return ret ;
@@ -2090,7 +2120,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2090
2120
 
2091
2121
  // if this is a reorder, then return drag content.
2092
2122
  if (this.get('canReorderContent')) {
2093
- if (dataType === this._reorderDataType()) return this.get('dragContent') ;
2123
+ if (dataType === this.get('reorderDataType')) return this.get('dragContent') ;
2094
2124
  }
2095
2125
 
2096
2126
  // otherwise, just pass along to the delegate.
@@ -2103,17 +2133,21 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2103
2133
  */
2104
2134
  dragEntered: function(drag, evt) {
2105
2135
 
2106
- // the proposed drag operation is either DRAG_MOVE only if we can reorder
2136
+ // the proposed drag operation is DRAG_REORDER only if we can reorder
2107
2137
  // content and the drag contains reorder content.
2108
2138
  var op = SC.DRAG_NONE ;
2109
2139
  if (this.get('canReorderContent')) {
2110
2140
  var types = drag.get('dataTypes') ;
2111
- if (types.indexOf(this._reorderDataType()) >= 0) op = SC.DRAG_MOVE ;
2141
+ if (types.indexOf(this.get('reorderDataType')) >= 0) {
2142
+ op = SC.DRAG_REORDER ;
2143
+ }
2112
2144
  }
2113
2145
 
2114
2146
  // Now pass this onto the delegate.
2115
2147
  op = this.invokeDelegateMethod(this.delegate, 'collectionViewValidateDrop', this, drag, SC.DROP_ANY, -1, op) ;
2116
2148
 
2149
+ if (op === SC.DRAG_REORDER) op = SC.DRAG_MOVE ;
2150
+
2117
2151
  // return
2118
2152
  return op ;
2119
2153
  },
@@ -2180,30 +2214,32 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2180
2214
  // is DROP_BEFORE. DROP_ON is not handled by reordering content.
2181
2215
  if ((idx >= 0) && this.get('canReorderContent') && (dropOp === SC.DROP_BEFORE)) {
2182
2216
 
2183
- var objects = drag.dataForType(this._reorderDataType()) || [];
2184
- var content = this.get('content') || [] ;
2217
+ var objects = drag.dataForType(this.get('reorderDataType')) ;
2218
+ if (objects) {
2219
+ var content = this.get('content') || [] ;
2185
2220
 
2186
- // if the insertion index is in between two items in the drag itself,
2187
- // then this is not allowed. Either use the last insertion index or
2188
- // find the first index that is not in between selections. Stop when
2189
- // we get to the beginning.
2190
- var previousContent = (idx > 0) ? content.objectAt(idx-1) : null ;
2191
- var nextContent = (idx < content.get('length')) ? content.objectAt(idx) : null;
2192
-
2193
- var isPreviousInDrag = (previousContent) ? objects.indexOf(previousContent)>=0 : NO;
2194
- var isNextInDrag = (nextContent) ? objects.indexOf(nextContent)>=0 : NO;
2195
-
2196
- if (isPreviousInDrag && isNextInDrag) {
2197
- if (this._lastInsertionIndex == null) {
2198
- while((idx >= 0) && (objects.indexOf(content.objectAt(idx)) >= 0)) {
2199
- idx-- ;
2200
- }
2201
- } else idx = this._lastInsertionIndex ;
2202
- }
2221
+ // if the insertion index is in between two items in the drag itself,
2222
+ // then this is not allowed. Either use the last insertion index or
2223
+ // find the first index that is not in between selections. Stop when
2224
+ // we get to the beginning.
2225
+ var previousContent = (idx > 0) ? content.objectAt(idx-1) : null ;
2226
+ var nextContent = (idx < content.get('length')) ? content.objectAt(idx) : null;
2227
+
2228
+ var isPreviousInDrag = (previousContent) ? objects.indexOf(previousContent)>=0 : NO;
2229
+ var isNextInDrag = (nextContent) ? objects.indexOf(nextContent)>=0 : NO;
2230
+
2231
+ if (isPreviousInDrag && isNextInDrag) {
2232
+ if (this._lastInsertionIndex == null) {
2233
+ while((idx >= 0) && (objects.indexOf(content.objectAt(idx)) >= 0)) {
2234
+ idx-- ;
2235
+ }
2236
+ } else idx = this._lastInsertionIndex ;
2237
+ }
2203
2238
 
2204
- // If we found a valid insertion point to reorder at, then set the op
2205
- // to custom DRAG_REORDER.
2206
- if (idx >= 0) dragOp = SC.DRAG_REORDER ;
2239
+ // If we found a valid insertion point to reorder at, then set the op
2240
+ // to custom DRAG_REORDER.
2241
+ if (idx >= 0) dragOp = SC.DRAG_REORDER ;
2242
+ }
2207
2243
  }
2208
2244
 
2209
2245
  // Now save the insertion index and the dropOp. This may be changed by
@@ -2303,7 +2339,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
2303
2339
  // If the delegate did not handle the drag (i.e. returned SC.DRAG_NONE),
2304
2340
  // and the op type is REORDER, then do the reorder here.
2305
2341
  if ((performed === SC.DRAG_NONE) && (op === SC.DRAG_REORDER)) {
2306
- var objects = drag.dataForType(this._reorderDataType()) ;
2342
+ var objects = drag.dataForType(this.get('reorderDataType')) ;
2307
2343
  if (!objects) return SC.DRAG_NONE ;
2308
2344
 
2309
2345
  var content = this.get('content') ;
@@ -35,7 +35,7 @@ SC.SourceListView = SC.CollectionView.extend(
35
35
  Allows reordering without modifiying the selection
36
36
  */
37
37
 
38
- selectOnMouseDown: false,
38
+ selectOnMouseDown: NO,
39
39
 
40
40
  /**
41
41
  Set to YES if you want source list items to display an icon.
@@ -68,12 +68,12 @@ module SproutCore
68
68
  #
69
69
  class Bundle
70
70
 
71
- LONG_LANGUAGE_MAP = { :english => :en, :french => :fr, :german => :de, :japanese => :jp, :spanish => :es, :italian => :it }
72
- SHORT_LANGUAGE_MAP = { :en => :english, :fr => :french, :de => :german, :jp => :japanese, :es => :spanish, :it => :italian }
71
+ LONG_LANGUAGE_MAP = { :english => :en, :french => :fr, :german => :de, :japanese => :ja, :spanish => :es, :italian => :it }
72
+ SHORT_LANGUAGE_MAP = { :en => :english, :fr => :french, :de => :german, :ja => :japanese, :es => :spanish, :it => :italian }
73
73
 
74
- # The default build mode for bundles. This should be set once before you start using
75
- # bundles. You can override this when you create a specific bundle, but that should not
76
- # be the typical behavior
74
+ # The default build mode for bundles. This should be set once before you
75
+ # start using bundles. You can override this when you create a specific
76
+ # bundle, but that should not be the typical behavior
77
77
  def self.build_mode; @build_mode || :development; end
78
78
 
79
79
  def self.build_mode=(new_mode); @build_mode = new_mode; end
@@ -90,8 +90,8 @@ module SproutCore
90
90
  end
91
91
 
92
92
  # ==== Returns
93
- # All bundles required directly or indirectly by this bundles. These are returned in
94
- # their proper load order.
93
+ # All bundles required directly or indirectly by this bundles. These are
94
+ # returned in their proper load order.
95
95
  #
96
96
  def all_required_bundles(seen=nil)
97
97
  seen ||= Set.new
@@ -143,19 +143,21 @@ module SproutCore
143
143
  def initialize(bundle_name, opts ={})
144
144
 
145
145
  # You must provide the following properties to every build:
146
- # bundle_name:: A name used to identify the client for required URLs, etc.
146
+ # bundle_name:: A name used to identify the client for required
147
+ # URLs, etc.
147
148
  @bundle_name = bundle_name.to_sym
148
149
 
149
- # The following are not required by the build system, but they can be used to
150
- # automatically construct the key paths listed below. Often times defaults will
151
- # do the right thing
150
+ # The following are not required by the build system, but they can be
151
+ # used to automatically construct the key paths listed below. Often
152
+ # times defaults will do the right thing
152
153
  #
153
154
  # library:: The root URL of the library holding the client
154
155
  @library = opts[:library]
155
156
  @library_root = opts[:library_root]
156
157
  raise "Bundles must belong to a library or have a library_root" if library_root.nil?
157
158
 
158
- # The following properties are also required, but have defaults you can rely use:
159
+ # The following properties are also required, but have defaults you can
160
+ # rely use:
159
161
  # bundle_type:: :framework|:client (default :client)
160
162
  @bundle_type = (opts[:bundle_type] || opts[:type] || :client).to_sym
161
163
 
@@ -223,10 +225,12 @@ module SproutCore
223
225
  BuildTools::JavaScriptResourceBuilder.sort_entries_by_load_order(entries, opts[:language], self)
224
226
  end
225
227
 
226
- # This method returns the manifest entries for resources of the specified type.
228
+ # This method returns the manifest entries for resources of the specified
229
+ # type.
227
230
  #
228
231
  # ==== Params
229
- # type:: must be one of :javascript, :stylesheet, :resource, :html, :fixture, :test
232
+ # type:: must be one of :javascript, :stylesheet, :resource, :html, 3
233
+ # :fixture, :test
230
234
  #
231
235
  # ==== Options
232
236
  # language:: The language to use. Defaults to preferred language.
@@ -250,7 +254,7 @@ module SproutCore
250
254
  return ret
251
255
  end
252
256
 
253
- # This method returns the manifest entry for a resource with the specified name.
257
+ # Returns the manifest entry for a resource with the specified name.
254
258
  #
255
259
  # ==== Params
256
260
  # name: The name of the entry.
@@ -2,13 +2,14 @@ require 'yaml'
2
2
 
3
3
  module SproutCore
4
4
 
5
- # Describes a single library that can contain one or more clients and frameworks.
6
- # This class is used to automatically locate all installed libraries and to register the
7
- # clients within them.
5
+ # Describes a single library that can contain one or more clients and
6
+ # frameworks. This class is used to automatically locate all installed
7
+ # libraries and to register the clients within them.
8
8
  #
9
- # Libraries are chained, with the child library replacing the parent library's settings.
10
- # In general, the root library is always the current app while its parent libraries are
11
- # those found in the load path or explicitly stated in the configs.
9
+ # Libraries are chained, with the child library replacing the parent
10
+ # library's settings. In general, the root library is always the current app
11
+ # while its parent libraries are those found in the load path or explicitly
12
+ # stated in the configs.
12
13
  class Library
13
14
 
14
15
  # Creates a chained set of libraries from the passed location and the load path
@@ -2,7 +2,7 @@ module SproutCore #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 9
5
- TINY = 8
5
+ TINY = 9
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sproutcore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Jolley
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-01 00:00:00 -07:00
12
+ date: 2008-06-05 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency