sproutcore 0.9.4 → 0.9.5

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 (56) hide show
  1. data/History.txt +70 -2
  2. data/Manifest.txt +3 -15
  3. data/config/hoe.rb +1 -1
  4. data/frameworks/sproutcore/animation/animation.js +411 -0
  5. data/frameworks/sproutcore/controllers/array.js +68 -21
  6. data/frameworks/sproutcore/controllers/object.js +21 -2
  7. data/frameworks/sproutcore/drag/drag.js +13 -4
  8. data/frameworks/sproutcore/drag/drop_target.js +26 -19
  9. data/frameworks/sproutcore/english.lproj/core.css +4 -0
  10. data/frameworks/sproutcore/english.lproj/strings.js +5 -0
  11. data/frameworks/sproutcore/english.lproj/theme.css +5 -0
  12. data/frameworks/sproutcore/foundation/application.js +1 -2
  13. data/frameworks/sproutcore/foundation/set.js +31 -12
  14. data/frameworks/sproutcore/foundation/sorted_set.js +590 -0
  15. data/frameworks/sproutcore/foundation/string.js +43 -9
  16. data/frameworks/sproutcore/globals/window.js +34 -9
  17. data/frameworks/sproutcore/lib/button_views.rb +1 -0
  18. data/frameworks/sproutcore/lib/collection_view.rb +1 -0
  19. data/frameworks/sproutcore/lib/core_views.rb +3 -0
  20. data/frameworks/sproutcore/lib/index.rhtml +1 -1
  21. data/frameworks/sproutcore/mixins/collection_view_delegate.js +201 -0
  22. data/frameworks/sproutcore/mixins/observable.js +2 -7
  23. data/frameworks/sproutcore/models/record.js +1 -1
  24. data/frameworks/sproutcore/models/store.js +81 -28
  25. data/frameworks/sproutcore/tests/views/view/clippingFrame.rhtml +9 -6
  26. data/frameworks/sproutcore/views/collection/collection.js +649 -211
  27. data/frameworks/sproutcore/views/collection/grid.js +62 -26
  28. data/frameworks/sproutcore/views/collection/list.js +57 -21
  29. data/frameworks/sproutcore/views/collection/source_list.js +61 -13
  30. data/frameworks/sproutcore/views/image.js +7 -0
  31. data/frameworks/sproutcore/views/inline_text_field.js +4 -5
  32. data/frameworks/sproutcore/views/slider.js +2 -0
  33. data/frameworks/sproutcore/views/view.js +2 -2
  34. data/lib/sproutcore/build_tools/html_builder.rb +4 -6
  35. data/lib/sproutcore/build_tools/resource_builder.rb +32 -20
  36. data/lib/sproutcore/bundle.rb +130 -32
  37. data/lib/sproutcore/bundle_manifest.rb +24 -21
  38. data/lib/sproutcore/helpers/static_helper.rb +22 -9
  39. data/lib/sproutcore/merb/bundle_controller.rb +4 -3
  40. data/lib/sproutcore/version.rb +1 -1
  41. metadata +14 -17
  42. data/clients/view_builder/builders/builder.js +0 -339
  43. data/clients/view_builder/builders/button.js +0 -81
  44. data/clients/view_builder/controllers/document.js +0 -21
  45. data/clients/view_builder/core.js +0 -19
  46. data/clients/view_builder/english.lproj/body.css +0 -77
  47. data/clients/view_builder/english.lproj/body.rhtml +0 -39
  48. data/clients/view_builder/english.lproj/controls.css +0 -0
  49. data/clients/view_builder/english.lproj/strings.js +0 -14
  50. data/clients/view_builder/main.js +0 -38
  51. data/clients/view_builder/mixins/design_mode.js +0 -92
  52. data/clients/view_builder/tests/controllers/document.rhtml +0 -20
  53. data/clients/view_builder/tests/views/builder.rhtml +0 -20
  54. data/clients/view_builder/tests/views/palette.rhtml +0 -21
  55. data/clients/view_builder/views/builder.js +0 -26
  56. data/clients/view_builder/views/palette.js +0 -30
@@ -2,8 +2,6 @@ require 'erubis'
2
2
  require 'sproutcore/helpers'
3
3
  require 'sproutcore/view_helpers'
4
4
 
5
- puts "LOADED HTML_BUILDER"
6
-
7
5
  module SproutCore
8
6
 
9
7
  module BuildTools
@@ -49,9 +47,7 @@ module SproutCore
49
47
  @entries.reject! { |entry| entry.composite? || (entry.type == :html && !entry.localized?) }
50
48
 
51
49
  # Load any helpers before we continue
52
- puts "*************REQUIRE"
53
50
  bundle.all_required_bundles.each do |cur_bundle|
54
- puts "requiring: #{cur_bundle.bundle_name}"
55
51
  require_helpers(nil, cur_bundle)
56
52
  end
57
53
 
@@ -63,11 +59,13 @@ module SproutCore
63
59
 
64
60
  @layout_path = bundle.layout_path
65
61
 
66
- # Render each filename. By default, the output goes to the resources string
62
+ # Render each filename. By default, the output goes to the resources
63
+ # string
67
64
  @content_for_resources = ''
68
65
  entries.each { |fn| _render_one(fn) }
69
66
 
70
- # Finally, render the layout. This should produce the final output to return
67
+ # Finally, render the layout. This should produce the final output to
68
+ # return
71
69
  input = File.read(@layout_path)
72
70
  return eval(Erubis::Eruby.new.convert(input))
73
71
  end
@@ -53,12 +53,23 @@ module SproutCore
53
53
  return join(lines)
54
54
  end
55
55
 
56
- # Join the lines together. This is one last chance to do some prep of the data
57
- # (such as minifcation and comment stripping)
56
+ # Join the lines together. This is one last chance to do some prep of
57
+ # the data (such as minifcation and comment stripping)
58
58
  def join(lines); lines.join; end
59
59
 
60
- # Tries to build a single resource. This may call itself recursively to handle
61
- # requires.
60
+ # Rewrites any inline content such as static urls. Subclasseses can
61
+ # override this to rewrite any other inline content.
62
+ #
63
+ # The default will rewrite calls to static_url().
64
+ def rewrite_inline_code(line, filename)
65
+ line.gsub(/static_url\([\'\"](.+)[\'\"]\)/) do | rsrc |
66
+ entry = bundle.find_resource_entry($1, :language => language)
67
+ static_url(entry.nil? ? '' : entry.url)
68
+ end
69
+ end
70
+
71
+ # Tries to build a single resource. This may call itself recursively to
72
+ # handle requires.
62
73
  #
63
74
  # ==== Returns
64
75
  # [lines, required] to be passed into the next call
@@ -77,19 +88,19 @@ module SproutCore
77
88
  io = (entry.source_path.nil? || !File.exists?(entry.source_path)) ? [] : File.new(entry.source_path)
78
89
  io.each do | line |
79
90
 
80
- # check for requires. Only follow a require if the require is in the list
81
- # of filenames.
91
+ # check for requires. Only follow a require if the require is in
92
+ # the list of filenames.
82
93
  required_file = _require_for(filename, line)
83
94
  unless required_file.nil? || !filenames.include?(required_file)
84
95
  lines, required = _build_one(required_file, lines, required, link_only)
85
96
  end
86
97
 
87
- file_lines << _rewrite_static_urls(line) unless link_only
98
+ file_lines << rewrite_inline_code(line, filename) unless link_only
88
99
  end
89
100
 
90
- # The list of already required filenames is slightly out of order from the actual
91
- # load order. Instead, we use the lines array to hold the list of filenames as they
92
- # are processed.
101
+ # The list of already required filenames is slightly out of order from
102
+ # the actual load order. Instead, we use the lines array to hold the
103
+ # list of filenames as they are processed.
93
104
  if link_only
94
105
  lines << filename
95
106
 
@@ -104,16 +115,8 @@ module SproutCore
104
115
  # Overridden by subclasses to choose first filename.
105
116
  def next_filename; filenames.delete(filenames.first); end
106
117
 
107
- # This will look for calls to static_url() and rewrite them with an actual
108
- # string to the URL. Assumes the input text is JavaScript or CSS.
109
- def _rewrite_static_urls(line)
110
- line.gsub(/static_url\([\'\"](.+)[\'\"]\)/) do | rsrc |
111
- entry = bundle.find_resource_entry($1, :language => language)
112
- static_url(entry.nil? ? '' : entry.url)
113
- end
114
- end
115
-
116
- # Overridden by subclass to handle static_url() in a language specific way.
118
+ # Overridden by subclass to handle static_url() in a language specific
119
+ # way.
117
120
  def static_url(url); "url('#{url}')"; end
118
121
 
119
122
  # check line for required() pattern. understands JS and CSS.
@@ -156,6 +159,15 @@ module SproutCore
156
159
  lines.join
157
160
  end
158
161
 
162
+ # If the file is a strings.js file, then remove server-side strings...
163
+ def rewrite_inline_code(line, filename)
164
+ if filename == 'strings.js'
165
+ line = line.gsub(/["']@@.*["']\s*?:\s*?["'].*["'],\s*$/,'')
166
+ end
167
+
168
+ super(line, filename)
169
+ end
170
+
159
171
  def static_url(url); "'#{url}'"; end
160
172
  def filename_for_require(ret); "#{ret}.js"; end
161
173
 
@@ -234,7 +234,11 @@ module SproutCore
234
234
  #
235
235
  def entries_for(resource_type, opts={})
236
236
  with_hidden = opts[:hidden] || :none
237
- manifest = manifest_for(opts[:language] || preferred_language)
237
+
238
+ language = opts[:language] || preferred_language
239
+ mode = opts[:build_mode] || build_mode
240
+ manifest = manifest_for(language, mode)
241
+
238
242
  ret = manifest.entries_for(resource_type)
239
243
 
240
244
  case with_hidden
@@ -257,7 +261,11 @@ module SproutCore
257
261
  #
258
262
  def entry_for(resource_name, opts={})
259
263
  with_hidden = opts[:hidden] || :none
260
- manifest = manifest_for(opts[:language] || preferred_language)
264
+
265
+ language = opts[:language] || preferred_language
266
+ mode = opts[:build_mode] || build_mode
267
+ manifest = manifest_for(language, mode)
268
+
261
269
  ret = manifest.entry_for(resource_name)
262
270
 
263
271
  case with_hidden
@@ -269,26 +277,43 @@ module SproutCore
269
277
  return ret
270
278
  end
271
279
 
272
- # Returns the entry for the specified URL. This will extract the language from the URL.
280
+ # Returns the entry for the specified URL. This will extract the language
281
+ # from the URL and try to get the entry from both the manifest in the
282
+ # current build mode and in the production build mode (if one is
283
+ # provided)
273
284
  #
274
285
  # ==== Params
275
286
  # url<String>:: The url
276
287
  #
277
288
  # ==== Options
278
289
  # hidden:: Use :include,:none,:only to control hidden options
279
- # language:: Explicitly include the language. Leave this out to autodetect from URL.
290
+ # language:: Explicitly include the language. Leave this out to
291
+ # autodetect from URL.
280
292
  #
281
293
  def entry_for_url(url, opts={})
282
294
  # get the language
283
- opts[:language] ||= url.match(/^#{url_root}\/([^\/]+)\//).to_a[1] || preferred_language
295
+ opts[:language] ||= url.match(/^#{url_root}\/([^\/]+)\//).to_a[1] || url.match(/^#{index_root}\/([^\/]+)\//).to_a[1] || preferred_language
296
+
297
+ # use the current build mode
298
+ opts[:build_mode] = build_mode
284
299
  entries(opts).each do |entry|
285
300
  return entry if entry.url == url
286
301
  end
302
+
303
+ # try production is necessary...
304
+ if (build_mode != :production)
305
+ opts[:build_mode] = :production
306
+ entries(opts).each do |entry|
307
+ return entry if entry.url == url
308
+ end
309
+ end
310
+
287
311
  return nil # not found!
288
312
  end
289
313
 
290
- # Helper method. This will normalize a URL into one that can map directly to an
291
- # entry in the bundle. If the URL is of a format that cannot be converted, returns nil.
314
+ # Helper method. This will normalize a URL into one that can map directly
315
+ # to an entry in the bundle. If the URL is of a format that cannot be
316
+ # converted, returns nil.
292
317
  #
293
318
  # ==== Params
294
319
  # url<String>:: The URL
@@ -299,7 +324,7 @@ module SproutCore
299
324
  if (url == index_root)
300
325
  url = [index_root, preferred_language.to_s, 'index.html'].join('/')
301
326
 
302
- # Requests to url_root/lang should have index.html appended to them
327
+ # Requests to index_root/lang should have index.html appended to them
303
328
  elsif /^#{index_root}\/[^\/\.]+$/ =~ url
304
329
  url << '/index.html'
305
330
  end
@@ -315,7 +340,11 @@ module SproutCore
315
340
  #
316
341
  def entries(opts ={})
317
342
  with_hidden = opts[:hidden] || :none
318
- manifest = manifest_for(opts[:language] || preferred_language)
343
+
344
+ language = opts[:language] || preferred_language
345
+ mode = opts[:build_mode] || build_mode
346
+ manifest = manifest_for(language, mode)
347
+
319
348
  ret = manifest.entries
320
349
 
321
350
  case with_hidden
@@ -327,9 +356,9 @@ module SproutCore
327
356
  return ret
328
357
  end
329
358
 
330
- # Does a deep search of the entries, looking for a resource that is a close
331
- # match of the specified resource. This does not need to match the filename
332
- # exactly and it can omit the extension
359
+ # Does a deep search of the entries, looking for a resource that is a
360
+ # close match of the specified resource. This does not need to match the
361
+ # filename exactly and it can omit the extension
333
362
  def find_resource_entry(filename, opts={}, seen=nil)
334
363
  extname = File.extname(filename)
335
364
  rootname = filename.gsub(/#{extname}$/,'')
@@ -420,14 +449,15 @@ module SproutCore
420
449
  @seen = nil if created_seen
421
450
  end
422
451
 
423
- # Easy singular form of build_entries(). Take same parameters except for a single entry
424
- # instead of an array.
452
+ # Easy singular form of build_entries(). Take same parameters except for
453
+ # a single entry instead of an array.
425
454
  def build_entry(entry, opts={})
426
455
  build_entries([entry], opts)
427
456
  end
428
457
 
429
- # Invoked by build tools when they build a dependent entry. This will add the entry
430
- # to the list of seen entries during a build so that it will not be rebuilt.
458
+ # Invoked by build tools when they build a dependent entry. This will add
459
+ # the entry to the list of seen entries during a build so that it will not
460
+ # be rebuilt.
431
461
  def did_build_entry(entry)
432
462
  @seen << entry unless @seen.nil?
433
463
  end
@@ -439,8 +469,9 @@ module SproutCore
439
469
  SC.logger.debug("~ Done.\n")
440
470
  end
441
471
 
442
- # This will perform a complete build for all languages that have a matching lproj.
443
- # You can also pass in an array of languages you would like to build
472
+ # This will perform a complete build for all languages that have a
473
+ # matching lproj. You can also pass in an array of languages you would
474
+ # like to build
444
475
  def build(*languages)
445
476
 
446
477
  # Get the installed languages (and the preferred language, just in case)
@@ -512,22 +543,87 @@ module SproutCore
512
543
 
513
544
  return cached[:contents]
514
545
  end
546
+
547
+ ######################################################
548
+ ## LOCALIZATION
549
+ ##
550
+
551
+ # Returns all of the strings.js entries for this bundle and any required
552
+ # bundles. The return array is in the order the entries should be
553
+ # processed to build the strings hash.
554
+ #
555
+ # ==== Options
556
+ # language: optional language. otherwise preferred language is used.
557
+ #
558
+ def strings_entries(opts = {})
559
+ opts[:hidden] = true # include hidden files for prod mode.
560
+ all_required_bundles.map { |q| q.entry_for('strings.js', opts) }.compact
561
+ end
562
+
563
+ # This will load a strings resource and convert it into a hash of key
564
+ # value pairs.
565
+ def strings_for_entry(strings_entry)
566
+ source_path = strings_entry.source_path
567
+ return {} if !File.exists?(source_path)
568
+
569
+ # read the file in and strip out comments...
570
+ str = File.read(source_path)
571
+ str = str.gsub(/\/\/.*$/,'').gsub(/\/\*.*\*\//m,'')
572
+
573
+ # Now build the hash
574
+ ret = {}
575
+ str.scan(/['"](.+)['"]\s*:\s*['"](.+)['"],?\s*$/) do |x,y|
576
+ # x & y are JS strings that must be evaled as such..
577
+ #x = eval(%("#{x}"))
578
+ y = eval(%("#{y}"))
579
+ ret[x] = y
580
+ end
581
+
582
+ return ret
583
+ end
584
+
585
+ # Strings the string hash for the current bundle. If this strings hash
586
+ # has not been loaded yet, it will be loaded now.
587
+ #
588
+ # ==== Options
589
+ # language: optional language. otherwise preferred language is used.
590
+ #
591
+ def strings_hash(opts={})
592
+
593
+ build_mode = opts[:build_mode] ||= build_mode
594
+ language = opts[:language] ||= preferred_language
595
+ key = [build_mode.to_s, language.to_s].join(':').to_sym
596
+
597
+ @strings_hash ||= {}
598
+ if @strings_hash[key].nil?
599
+ ret = {}
600
+ strings_entries(opts).each do |entry|
601
+ ret.merge! strings_for_entry(entry)
602
+ end
603
+ @strings_hash[key] = ret
604
+ end
605
+
606
+ return @strings_hash[key]
607
+ end
515
608
 
516
609
  ######################################################
517
610
  ## MANIFESTS
518
611
  ##
519
612
 
520
- # Invoke this method whenever you think the bundle's contents on disk might have changed
521
- # this will throw away any cached information in bundle. This is generally a cheap
522
- # operation so it is OK to call it often, though it will be less performant overall.
613
+ # Invoke this method whenever you think the bundle's contents on disk
614
+ # might have changed this will throw away any cached information in
615
+ # bundle. This is generally a cheap operation so it is OK to call it
616
+ # often, though it will be less performant overall.
523
617
  def reload!
524
618
  @manifests = {}
619
+ @strings_hash = {}
525
620
  end
526
621
 
527
- # Returns the bundle manifest for the specified language. The manifest will be created
528
- # if it does not yet exist.
529
- def manifest_for(language)
530
- @manifests[language.to_sym] ||= BundleManifest.new(self, language.to_sym)
622
+ # Returns the bundle manifest for the specified language and build mode.
623
+ # The manifest will be created if it does not yet exist.
624
+ def manifest_for(language, build_mode)
625
+ manifest_key = [build_mode.to_s, language.to_s].join(':').to_sym
626
+ @manifests[manifest_key] ||= BundleManifest.new(self, language.to_sym, build_mode.to_sym)
531
627
  end
532
628
 
533
629
  # ==== Returns
@@ -541,8 +637,9 @@ module SproutCore
541
637
  ret.compact.map { |x| LONG_LANGUAGE_MAP[x.to_sym] || x.to_sym }.uniq
542
638
  end
543
639
 
544
- # Finds the actual lproj directory (in the source) for the language code. If the named
545
- # language does not exist, returns the lproj for the preferred language.
640
+ # Finds the actual lproj directory (in the source) for the language code.
641
+ # If the named language does not exist, returns the lproj for the
642
+ # preferred language.
546
643
  def lproj_for(language)
547
644
 
548
645
  # try language as passed in.
@@ -561,12 +658,13 @@ module SproutCore
561
658
  return ret if File.exists?(File.join(source_root,ret))
562
659
  end
563
660
 
564
- # failed, return using preferred_language unless this is the preferred language
661
+ # failed, return using preferred_language unless this is the preferred
662
+ # language
565
663
  ret = (language != preferred_language) ? lproj_for(preferred_language) : nil
566
664
  return ret unless ret.nil?
567
665
 
568
- # Super-ultra massive fail. Possible that no localized resources exist at all.
569
- # Return english.lproj and hope for the best
666
+ # Super-ultra massive fail. Possible that no localized resources exist
667
+ # at all. Return english.lproj and hope for the best
570
668
  return 'english.lproj'
571
669
  end
572
670
 
@@ -577,8 +675,8 @@ module SproutCore
577
675
 
578
676
  protected
579
677
 
580
- # Converts the named path to a fully qualified path name using the library root, if it
581
- # does not begin with a slash
678
+ # Converts the named path to a fully qualified path name using the library
679
+ # root, if it does not begin with a slash
582
680
  def normalize_path(path)
583
681
  (path[0] == '/'[0]) ? path : File.join(library_root, path)
584
682
  end
@@ -2,22 +2,24 @@ require 'yaml'
2
2
 
3
3
  module SproutCore
4
4
 
5
- # A Bundle Manifest describes all of the resources in a bundle, including mapping their
6
- # source paths, destination paths, and urls.
5
+ # A Bundle Manifest describes all of the resources in a bundle, including
6
+ # mapping their source paths, destination paths, and urls.
7
7
  #
8
- # A Bundle will create a manifest for every language you request from it. If you invoke
9
- # reload! on the bundle, it will dispose of its manifests and rebuild them.
8
+ # A Bundle will create a manifest for every language you request from it.
9
+ # If you invoke reload! on the bundle, it will dispose of its manifests and
10
+ # rebuild them.
10
11
  #
11
12
  class BundleManifest
12
13
 
13
14
  CACHED_TYPES = [:javascript, :stylesheet, :fixture, :test]
14
15
  SYMLINKED_TYPES = [:resource]
15
16
 
16
- attr_reader :bundle, :language
17
+ attr_reader :bundle, :language, :build_mode
17
18
 
18
- def initialize(bundle, language)
19
+ def initialize(bundle, language, build_mode)
19
20
  @bundle = bundle
20
21
  @language = language
22
+ @build_mode = build_mode
21
23
  @entries_by_type = {} # entries by type
22
24
  @entries_by_filename = {} # entries by files
23
25
  build!
@@ -67,15 +69,16 @@ module SproutCore
67
69
  end
68
70
 
69
71
  # STEP 3: If in development build mode:
70
- if bundle.build_mode == :development
72
+ if self.build_mode == :development
71
73
 
72
74
  # a. Merge fixture types into JS types & tests
73
75
  unless entries[:fixture].nil?
74
76
  entries[:javascript] = (entries[:javascript] || []) + entries[:fixture]
75
77
  end
76
78
 
77
- # b. Rewrite all of the JS & CSS file paths and URLs to point to cached versions
78
- # (Cached versions are written to _cache/filename-ctime.ext)
79
+ # b. Rewrite all of the JS & CSS file paths and URLs to point to
80
+ # cached versions
81
+ # (Cached versions are written to _cache/filename-ctime.ext)
79
82
  (entries[:javascript] ||= []).each do | entry |
80
83
  setup_timestamp_token(entry)
81
84
  end
@@ -99,7 +102,7 @@ module SproutCore
99
102
  # STEP 5: Add entry for javascript.js & stylesheet.js. If in production mode, set
100
103
  # these to visible and hide the composite. If in dev mode, do the opposite.
101
104
 
102
- hide_composite = (bundle.build_mode != :development)
105
+ hide_composite = (self.build_mode != :development)
103
106
 
104
107
  # a. Combine the JS file paths into a single entry for the javascript.js
105
108
  if (working = entries[:javascript]) && working.size>0
@@ -204,8 +207,6 @@ module SproutCore
204
207
  :test
205
208
  when /^fixtures\/.+\.js$/
206
209
  :fixture
207
- when /\.html$/
208
- :html
209
210
  when /\.rhtml$/
210
211
  :html
211
212
  when /\.html.erb$/
@@ -221,9 +222,10 @@ module SproutCore
221
222
  end
222
223
  end
223
224
 
224
- # Build an entry for the resource at the named src_path (relative to the source_root)
225
- # This should assume we are in going to simply build each resource into the build root
226
- # without combining files, but not using our _src symlink magic.
225
+ # Build an entry for the resource at the named src_path (relative to the
226
+ # source_root) This should assume we are in going to simply build each
227
+ # resource into the build root without combining files, but not using our
228
+ # _src symlink magic.
227
229
  def build_entry_for(src_path, src_type, composite=nil, hide_composite = true)
228
230
  ret = ManifestEntry.new
229
231
  ret.ext = File.extname(src_path)[1..-1] || '' # easy stuff
@@ -248,15 +250,15 @@ module SproutCore
248
250
 
249
251
  # The build path is the build_root + the filename
250
252
  # The URL is the url root + the language code + filename
251
- # also add in _cache or _sym in certain cases. This is just more efficient than doing
252
- # it later.
253
+ # also add in _cache or _sym in certain cases. This is just more
254
+ # efficient than doing it later.
253
255
  url_root = (src_path == 'index.html') ? bundle.index_root : bundle.url_root
254
256
  cache_link = nil
255
257
  use_symlink =false
256
258
 
257
- # Note: you can only access real resources via the cache. If the entry is a composite
258
- # then do not go through cache.
259
- if (bundle.build_mode == :development) && composite.nil?
259
+ # Note: you can only access real resources via the cache. If the entry
260
+ # is a composite then do not go through cache.
261
+ if (self.build_mode == :development) && composite.nil?
260
262
  cache_link = '_cache' if CACHED_TYPES.include?(src_type)
261
263
  use_symlink = true if SYMLINKED_TYPES.include?(src_type)
262
264
  end
@@ -293,7 +295,8 @@ module SproutCore
293
295
  # filename:: path relative to the built language (e.g. sproutcore/en) less file extension
294
296
  # ext:: the file extension
295
297
  # source_path:: absolute paths into source that will comprise this resource
296
- # url:: the url that should be used to reference this resource
298
+ # url:: the url that should be used to reference this resource in the current mode.
299
+ # build_url:: the url that will be used to referene this resource in production.
297
300
  # build_path:: absolute path to the compiled resource
298
301
  # type:: the top-level category
299
302
  # original_path:: save the original path used to build this entry