sproutcore 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/History.txt +45 -2
  2. data/Manifest.txt +10 -0
  3. data/Rakefile +1 -1
  4. data/app_generators/sproutcore/templates/sc-config +8 -2
  5. data/bin/sc-server +4 -0
  6. data/clients/sc_docs/english.lproj/body.css +0 -20
  7. data/clients/sc_docs/english.lproj/body.rhtml +1 -3
  8. data/clients/sc_docs/english.lproj/strings.js +1 -1
  9. data/clients/sc_docs/french.lproj/strings.js +14 -0
  10. data/clients/sc_test_runner/english.lproj/body.css +0 -20
  11. data/clients/sc_test_runner/english.lproj/body.rhtml +1 -3
  12. data/config/hoe.rb +1 -1
  13. data/frameworks/sproutcore/HISTORY +56 -1
  14. data/frameworks/sproutcore/debug/trace.js +81 -0
  15. data/frameworks/sproutcore/debug/unittest.js +2 -1
  16. data/frameworks/sproutcore/english.lproj/buttons.css +5 -2
  17. data/frameworks/sproutcore/english.lproj/core.css +0 -16
  18. data/frameworks/sproutcore/english.lproj/images/sc-theme-sprite.png +0 -0
  19. data/frameworks/sproutcore/english.lproj/splitview.css +83 -0
  20. data/frameworks/sproutcore/english.lproj/theme.css +21 -5
  21. data/frameworks/sproutcore/foundation/object.js +23 -0
  22. data/frameworks/sproutcore/foundation/string.js +4 -3
  23. data/frameworks/sproutcore/lib/core_views.rb +43 -8
  24. data/frameworks/sproutcore/lib/form_views.rb +2 -2
  25. data/frameworks/sproutcore/lib/index.rhtml +1 -1
  26. data/frameworks/sproutcore/mixins/enumerable.js +4 -8
  27. data/frameworks/sproutcore/mixins/selection_support.js +1 -1
  28. data/frameworks/sproutcore/models/collection.js +14 -3
  29. data/frameworks/sproutcore/models/record.js +6 -5
  30. data/frameworks/sproutcore/models/store.js +3 -3
  31. data/frameworks/sproutcore/panes/picker.js +1 -0
  32. data/frameworks/sproutcore/server/rails_server.js +4 -7
  33. data/frameworks/sproutcore/server/server.js +58 -1
  34. data/frameworks/sproutcore/tests/controllers/object.rhtml +1 -1
  35. data/frameworks/sproutcore/tests/models/collection.rhtml +160 -0
  36. data/frameworks/sproutcore/tests/models/model.rhtml +15 -3
  37. data/frameworks/sproutcore/tests/views/collection/base.rhtml +120 -47
  38. data/frameworks/sproutcore/tests/views/collection/source_list_rendering.rhtml +232 -0
  39. data/frameworks/sproutcore/tests/views/view/frame.rhtml +2 -2
  40. data/frameworks/sproutcore/tests/views/view/innerFrame.rhtml +87 -85
  41. data/frameworks/sproutcore/tests/views/view/scrollFrame.rhtml +25 -26
  42. data/frameworks/sproutcore/views/collection/collection.js +5 -1
  43. data/frameworks/sproutcore/views/field/select_field.js +1 -1
  44. data/frameworks/sproutcore/views/radio_group.js +2 -2
  45. data/frameworks/sproutcore/views/split.js +191 -174
  46. data/frameworks/sproutcore/views/split_divider.js +71 -68
  47. data/frameworks/sproutcore/views/view.js +65 -25
  48. data/lib/sproutcore.rb +4 -1
  49. data/lib/sproutcore/build_tools/html_builder.rb +50 -46
  50. data/lib/sproutcore/build_tools/resource_builder.rb +17 -5
  51. data/lib/sproutcore/bundle_installer.rb +3 -1
  52. data/lib/sproutcore/bundle_manifest.rb +4 -3
  53. data/lib/sproutcore/cssmin.rb +195 -0
  54. data/lib/sproutcore/generator_helper.rb +15 -0
  55. data/lib/sproutcore/helpers/capture_helper.rb +2 -22
  56. data/lib/sproutcore/helpers/dom_id_helper.rb +14 -0
  57. data/lib/sproutcore/helpers/static_helper.rb +6 -2
  58. data/lib/sproutcore/helpers/text_helper.rb +1 -1
  59. data/lib/sproutcore/merb.rb +2 -2
  60. data/lib/sproutcore/renderers/erubis.rb +43 -0
  61. data/lib/sproutcore/renderers/haml.rb +28 -0
  62. data/lib/sproutcore/renderers/sass.rb +42 -0
  63. data/lib/sproutcore/version.rb +1 -1
  64. data/lib/sproutcore/view_helpers.rb +40 -46
  65. data/sc_generators/controller/controller_generator.rb +1 -1
  66. data/sc_generators/language/USAGE +5 -7
  67. data/sc_generators/language/language_generator.rb +1 -1
  68. data/sc_generators/language/templates/strings.js +5 -1
  69. data/sc_generators/model/model_generator.rb +1 -1
  70. data/sc_generators/test/test_generator.rb +1 -1
  71. data/sc_generators/view/view_generator.rb +1 -1
  72. metadata +12 -5
data/History.txt CHANGED
@@ -1,7 +1,50 @@
1
+ == 0.9.18
2
+
3
+ * sc-gen should give warning on incorrect usage (Ticket #52) [Alexei Svitkine]
4
+
5
+ * Regression: body.html.erb no longer works (Ticket #119) [Michael Allman]
6
+
7
+ * c[:javascript_libs] included too often (Ticket #125) [Lawrence Pit]
8
+
9
+ * sc-server has to be restarted after error in code is executed (Ticket #43) [macinjosh]
10
+
11
+ * id attribute generated twice for views (Ticket #70) [Alexei Svitkine]
12
+
13
+ * text_area_view missing 'show-hint' class (Ticket #24) [mrc]
14
+
15
+ * Sass support (Ticket #117) [Lawrence Pit]
16
+
17
+ * html tag is missing required attribute xmlns (Ticket #132) [Alexei Svitkine]
18
+
19
+ * c[:resources_relative] = true should be default in sc-config (Ticket #173) [Davide Benini]
20
+
21
+ * text_area_view's generated textarea tag does not validate (Ticket #131) [Alexei Svitkine]
22
+
23
+ * Throws error when using haml (Ticket #179) [Sindre Aarsaethe]
24
+
25
+ * sc-gen language USAGE file wrong and doesn't not generate files correctly
26
+ (Ticket #130) [Trek]
27
+
28
+ * Allow view_helpers (and templates) to call dom_id to generate a guaranteed unique
29
+ DOM id (Ticket #147) [Lawrence Pit]
30
+
31
+ * Fix memory leak in build tool (Ticket #146) [Lawrence Pit]
32
+
33
+ * require('...') doesn't accept .js extension on end of name (Ticket #144) [Lawrence Pit]
34
+
35
+ * -s and --source not working on sc-install (Tickets #143, #145) [Trek]
36
+
37
+ * Add --haml and --sass options to sc-init and sc-client (Ticket #126) [Lawrence Pit]
38
+
39
+ * Refactored rendering.... allow yield :foobar (Ticket #116) [Lawrence Pit]
40
+
41
+ * Compress CSS when build for production (Ticketss #148, #151) [Lawrence Pit]
42
+
1
43
  == 0.9.17
2
44
 
3
- * Fix for Ticket [158]: Fix requirements to load correct version of merb (Paul Barry)
4
- * Fix for Ticket [124]: Proxy doesn't forward GET params with merb 0.9.4 (Lawrence Pit)
45
+ * Fix requirements to load correct version of merb (Ticket #158) [Paul Barry]
46
+
47
+ * Proxy doesn't forward GET params with merb 0.9.4 (Ticket #124) [Lawrence Pit]
5
48
 
6
49
  == 0.9.16
7
50
 
data/Manifest.txt CHANGED
@@ -19,6 +19,7 @@ clients/sc_docs/english.lproj/no_docs.rhtml
19
19
  clients/sc_docs/english.lproj/strings.js
20
20
  clients/sc_docs/english.lproj/tabs.rhtml
21
21
  clients/sc_docs/fixtures/doc.js
22
+ clients/sc_docs/french.lproj/strings.js
22
23
  clients/sc_docs/HISTORY
23
24
  clients/sc_docs/main.js
24
25
  clients/sc_docs/models/doc.js
@@ -58,6 +59,7 @@ frameworks/sproutcore/controllers/collection.js
58
59
  frameworks/sproutcore/controllers/controller.js
59
60
  frameworks/sproutcore/controllers/object.js
60
61
  frameworks/sproutcore/core.js
62
+ frameworks/sproutcore/debug/trace.js
61
63
  frameworks/sproutcore/debug/unittest.js
62
64
  frameworks/sproutcore/drag/drag.js
63
65
  frameworks/sproutcore/drag/drag_data_source.js
@@ -88,6 +90,7 @@ frameworks/sproutcore/english.lproj/panels/top-left-corner.png
88
90
  frameworks/sproutcore/english.lproj/panels/top-right-corner.png
89
91
  frameworks/sproutcore/english.lproj/panes.css
90
92
  frameworks/sproutcore/english.lproj/picker.css
93
+ frameworks/sproutcore/english.lproj/splitview.css
91
94
  frameworks/sproutcore/english.lproj/strings.js
92
95
  frameworks/sproutcore/english.lproj/tab.css
93
96
  frameworks/sproutcore/english.lproj/tests.css
@@ -165,11 +168,13 @@ frameworks/sproutcore/tests/foundation/timer/schedule.rhtml
165
168
  frameworks/sproutcore/tests/globals/window.rhtml
166
169
  frameworks/sproutcore/tests/mixins/enumerable.rhtml
167
170
  frameworks/sproutcore/tests/mixins/observable.rhtml
171
+ frameworks/sproutcore/tests/models/collection.rhtml
168
172
  frameworks/sproutcore/tests/models/model.rhtml
169
173
  frameworks/sproutcore/tests/panes/pane.rhtml
170
174
  frameworks/sproutcore/tests/views/checkbox.rhtml
171
175
  frameworks/sproutcore/tests/views/collection/base.rhtml
172
176
  frameworks/sproutcore/tests/views/collection/incremental_rendering.rhtml
177
+ frameworks/sproutcore/tests/views/collection/source_list_rendering.rhtml
173
178
  frameworks/sproutcore/tests/views/image_cell.rhtml
174
179
  frameworks/sproutcore/tests/views/label_item.rhtml
175
180
  frameworks/sproutcore/tests/views/list.rhtml
@@ -339,8 +344,10 @@ lib/sproutcore/build_tools.rb
339
344
  lib/sproutcore/bundle.rb
340
345
  lib/sproutcore/bundle_installer.rb
341
346
  lib/sproutcore/bundle_manifest.rb
347
+ lib/sproutcore/cssmin.rb
342
348
  lib/sproutcore/generator_helper.rb
343
349
  lib/sproutcore/helpers/capture_helper.rb
350
+ lib/sproutcore/helpers/dom_id_helper.rb
344
351
  lib/sproutcore/helpers/static_helper.rb
345
352
  lib/sproutcore/helpers/tag_helper.rb
346
353
  lib/sproutcore/helpers/text_helper.rb
@@ -351,6 +358,9 @@ lib/sproutcore/library.rb
351
358
  lib/sproutcore/merb/bundle_controller.rb
352
359
  lib/sproutcore/merb/router.rb
353
360
  lib/sproutcore/merb.rb
361
+ lib/sproutcore/renderers/erubis.rb
362
+ lib/sproutcore/renderers/haml.rb
363
+ lib/sproutcore/renderers/sass.rb
354
364
  lib/sproutcore/version.rb
355
365
  lib/sproutcore/view_helpers.rb
356
366
  lib/sproutcore.rb
data/Rakefile CHANGED
@@ -4,6 +4,6 @@ require 'config/hoe' # setup Hoe + all gem configuration
4
4
  APP_ROOT = File.expand_path(File.dirname(__FILE__))
5
5
 
6
6
  # Set directories you want ignored in the manifest.
7
- IGNORE_DIRS = ['assets', 'pkg', 'samples', 'doc']
7
+ IGNORE_DIRS = ['assets', 'pkg', 'samples', 'doc', 'log', 'public', 'tmp']
8
8
 
9
9
  Dir['tasks/**/*.rake'].each { |rake| load rake }
@@ -18,9 +18,14 @@ config :all do |c|
18
18
  # page.
19
19
  c[:required] = [:sproutcore]
20
20
 
21
+
22
+ # Set this to false to locate your clients at absolute paths.
23
+ # (Uncomment and define c[:resources_at] if you set this to false.)
24
+ c[:resources_relative] = true
25
+
21
26
  # This string will be prepended before any URLs that reference JavaScript,
22
27
  # CSS or images in your files.
23
- c[:resources_at] = 'static'
28
+ # c[:resources_at] = 'static'
24
29
 
25
30
  # This string will be prepended before any index.html urls that actually
26
31
  # load your clients. Setting this to an empty string will mount all
@@ -44,9 +49,10 @@ config :all do |c|
44
49
  # c[:preferred_language] = :fr
45
50
 
46
51
  # If you want to use a default root layout template other than the default
47
- # provided by SproutCore, you can specifiy the path name to the index.html
52
+ # provided by SproutCore, you can specifiy the path name to the index.rhtml
48
53
  # here. If you provide a relative path, SproutCore will assume the file
49
54
  # is relative to the root of this project.
55
+ #
50
56
  # c[:layout] = 'lib/index.rhtml'
51
57
 
52
58
  # This is the fully qualified path to the directory you want all of your
data/bin/sc-server CHANGED
@@ -9,6 +9,7 @@ $:.unshift File.join(APP_ROOT,'lib') ;
9
9
  # Require Merb, SproutCore & SproutCore/Merb support
10
10
  require 'rubygems'
11
11
  require 'rubigen'
12
+ gem('merb-core', '>= 0.9.1')
12
13
  require 'merb-core'
13
14
  require 'sproutcore'
14
15
  require 'sproutcore/merb'
@@ -58,6 +59,9 @@ Merb::Config.use { |c|
58
59
  ## Register Exception Handler
59
60
  ##
60
61
 
62
+ # required in 0.9.5-0.9.7, when defining an exception controller
63
+ class Application < Merb::Controller ; end
64
+
61
65
  class Exceptions < Merb::Controller
62
66
  def base
63
67
  params[:exception].to_s
@@ -16,27 +16,7 @@ body {
16
16
  overflow: hidden ;
17
17
  }
18
18
 
19
- .workspace .sidebar {
20
- position: absolute;
21
- left: 0;
22
- top: 0;
23
- width: 200px;
24
- bottom: 0;
25
- }
26
-
27
- .sc-theme .workspace.horizontal .sc-split-divider-view {
28
- position: absolute;
29
- left: 200px;
30
- top: 0;
31
- bottom: 0;
32
- }
33
-
34
19
  .workspace .document_view {
35
- position: absolute;
36
- left: 205px;
37
- right: 0;
38
- top: 0;
39
- bottom: 0;
40
20
  border: none ;
41
21
  background-color: #aaa ;
42
22
  }
@@ -15,7 +15,7 @@
15
15
 
16
16
 
17
17
  <% split_view :workspace, :class => 'sc-app-workspace header footer', :direction => :horizontal do %>
18
- <% view :sidebar, :outlet => true do %>
18
+ <% view :sidebar, :outlet => true, :width => 200 do %>
19
19
  <% scroll_view :source_list, :outlet => true do %>
20
20
  <%= source_list_view :outlet => true,
21
21
  :content_value_key => :title,
@@ -31,8 +31,6 @@
31
31
  <% end %>
32
32
  <% end %>
33
33
 
34
- <%= split_divider_view :outlet => true, :width => 5 %>
35
-
36
34
  <%= tab_view :document_view, :outlet => true,
37
35
  :bind => { :now_showing => 'Docs.docsController.nowShowingContainer' },
38
36
  :lazy_tabs => :true %>
@@ -9,6 +9,6 @@
9
9
  // localized string added to this file!
10
10
  //
11
11
  Object.extend(String.English,{
12
- // "_String Key": "Localized String"
12
+ "_English": "English"
13
13
  }) ;
14
14
 
@@ -0,0 +1,14 @@
1
+ // ==========================================================================
2
+ // Docs French Strings
3
+ // ==========================================================================
4
+
5
+ // Place strings you want to localize here. In your app, use the key and
6
+ // localize it using "key string".loc(). HINT: For your key names, use the
7
+ // english string with an underscore in front. This way you can still see
8
+ // how your UI will look and you'll notice right away when something needs a
9
+ // localized string added to this file!
10
+ //
11
+ Object.extend(String.English,{
12
+ "_English": "French"
13
+ }) ;
14
+
@@ -16,27 +16,7 @@ body {
16
16
  overflow: hidden ;
17
17
  }
18
18
 
19
- .workspace .sidebar {
20
- position: absolute;
21
- left: 0;
22
- top: 0;
23
- width: 200px;
24
- bottom: 0;
25
- }
26
-
27
- .sc-theme .workspace.horizontal .sc-split-divider-view {
28
- position: absolute;
29
- left: 200px;
30
- top: 0;
31
- bottom: 0;
32
- }
33
-
34
19
  .workspace .document_view {
35
- position: absolute;
36
- left: 205px;
37
- right: 0;
38
- top: 0;
39
- bottom: 0;
40
20
  border: none ;
41
21
  background-color: #aaa ;
42
22
  }
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  <% split_view :workspace, :class => 'sc-app-workspace header footer', :direction => :horizontal do %>
19
- <% view :sidebar, :outlet => true do %>
19
+ <% view :sidebar, :outlet => true, :width => 200 do %>
20
20
  <% scroll_view :source_list, :outlet => true do %>
21
21
  <%= source_list_view :outlet => true,
22
22
  :group => :group,
@@ -30,8 +30,6 @@
30
30
 
31
31
  <% end %>
32
32
  <% end %>
33
-
34
- <%= split_divider_view :outlet => true, :width => 5 %>
35
33
 
36
34
  <% view :document_view, :outlet => true do %>
37
35
  <%= view :outlet => :runner_frame, :tag => :iframe,
data/config/hoe.rb CHANGED
@@ -60,7 +60,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
60
60
 
61
61
  # == Optional
62
62
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
63
- p.extra_deps = [['activesupport', '>= 2.0.2'], ['merb-core', '>= 0.9.1', '< 0.9.5'], ['erubis'], ['rubigen'], ['mongrel'], ['hoe']]
63
+ p.extra_deps = [['activesupport', '>= 2.0.2'], ['merb-core', '>= 0.9.1'], ['erubis'], ['rubigen'], ['mongrel'], ['hoe']]
64
64
 
65
65
  #p.spec_extras = {} # A hash of extra values to set in the gemspec.
66
66
 
@@ -1,6 +1,61 @@
1
+ == sproutcore 0.9.18
2
+
3
+ - picker.js bug (Ticket #82) [Alexei Svitkine]
4
+
5
+ - selection_support.js problem with SelectFieldView (Tickets #103, #104) [Bill Klaila]
6
+
7
+ - Fixed radio enabled display state (Ticket #127) [Gert Hulstein]
8
+
9
+ - CollectionView doesn't resize groups after a frame change (Ticket #12) [Christopher Swasey]
10
+
11
+ - SC.Record.Date should handle GMT formatted strings (Ticket #101) [Joshua Dickens, Erich Ocean]
12
+
13
+ - Missing SC.Collection.removeRecords method (Ticket #102) [mm]
14
+
15
+ - SC.Record.create() inconsistency (Ticket #99) [Michael Allman]
16
+
17
+ - toMany relationship is null (Ticket #166) [Reto Wolf]
18
+
19
+ - SC.CollectionView itemViewForEvent somtimes throws exception on IE8 (Ticket #169)
20
+ [Darryl Fuller]
21
+
22
+ - SC.Collection doesn't update itself properly (Ticket #152) [Christopher Swasey]
23
+
24
+ - SC.Record notifies SC.Store improperly of changes (Ticket #155) [Christopher Swasey]
25
+
26
+ - Basic tests for collections (initial) (Ticket #156) [Christopher Swasey]
27
+
28
+ - problem with record.js; parent-child relationship; and tomcat (Ticket #154) [Bill Klaila]
29
+
30
+ - SC.CollectionController.hasSelection() does not return anything when there is no content
31
+ (Ticket #178) [Maurits Lamers, Erich Ocean]
32
+
33
+ - CollectionView doesn't properly redraw contents if it isn't visible at the time of a
34
+ content change (Ticket #123) [Christopher Swase]
35
+
36
+ - Split view can collapse when thickness becomes less than a given value
37
+ (Ticket #137) [Lawrence Pit]
38
+
39
+ - IE6 Fix (Ticket #162) [sujoykroy]
40
+
41
+ - String.fmt ordered arguments are broken (Ticket #165) [Boris Smus, Erich Ocean]
42
+
43
+ - Reimplementation of Array.invoke breaks Scriptaculous (Ticket #163) [Boris Smus]
44
+
45
+ - record.js/readAttributes() Bug (Ticket #139) [Evin Grano]
46
+
47
+ - Records with multiple toMany relationships mixup data (Ticket #161)
48
+ [Reto Wolf, Erich Ocean]
49
+
50
+ - Segmented buttons are 1 pixel too tall towards the bottom (Ticket #138) [Lawrence Pit]
51
+
52
+ - Split view doesn't honor canCollapse property (Ticket #128) [Lawrence Pit]
53
+
54
+ - Split view doesn't honor min_thickness property (Ticket #129) [Lawrence Pit]
55
+
1
56
  == sproutcore 0.9.17
2
57
 
3
- * Fix require()'s for server/rest_server.js and server/rails_server.js
58
+ - Fix require()'s for server/rest_server.js and server/rails_server.js
4
59
 
5
60
  == sproutcore 0.9.15
6
61
 
@@ -0,0 +1,81 @@
1
+ // ==========================================================================
2
+ // SproutCore
3
+ // Author: Erich Ocean
4
+ // copyright 2006-2008, Sprout Systems, Inc.
5
+ // ==========================================================================
6
+
7
+ require('core');
8
+
9
+ // code originally taken from http://pastie.org/253058, modified since
10
+ // found via: http://eriwen.com/javascript/js-stack-trace/
11
+
12
+ // Prints a stack trace to console.
13
+ // Pass true to print actual function definitions instead.
14
+ $trace = (function () {
15
+
16
+ var mode;
17
+ try {(0)()} catch (e) {
18
+ mode = e.stack ? 'Firefox' : window.opera ? 'Opera' : 'Other';
19
+ }
20
+
21
+ switch (mode) {
22
+ case 'Firefox' : return function (full) {
23
+ var full = full || false;
24
+ try {(0)()} catch (e) {
25
+ console.log(e.stack.replace(/^.*?\n/,'').
26
+ replace(/(?:\n@:0)?\s+$/m,'').
27
+ replace(/^\(/gm,'{anonymous}(').
28
+ split("\n").join('\n\n'));
29
+ }
30
+ };
31
+
32
+ case 'Opera' : return function (full) {
33
+ var full = full || false;
34
+ try {(0)()} catch (e) {
35
+ var lines = e.message.split("\n"),
36
+ ANON = '{anonymous}',
37
+ lineRE = /Line\s+(\d+).*?in\s+(http\S+)(?:.*?in\s+function\s+(\S+))?/i,
38
+ i,j,len;
39
+
40
+ for (i=4,j=0,len=lines.length; i<len; i+=2) {
41
+ if (lineRE.test(lines[i])) {
42
+ lines[j++] = (RegExp.$3 ?
43
+ RegExp.$3 + '()@' + RegExp.$2 + RegExp.$1 :
44
+ ANON + RegExp.$2 + ':' + RegExp.$1) +
45
+ ' -- ' + lines[i+1].replace(/^\s+/,'');
46
+ }
47
+ }
48
+
49
+ lines.splice(j,lines.length-j);
50
+ console.log(lines.join('\n\n'));
51
+ }
52
+ };
53
+
54
+ default : return function (full) {
55
+ var full = full || false;
56
+ var curr = arguments.callee.caller,
57
+ FUNC = 'function', ANON = "{anonymous}",
58
+ fnRE = /function\s*([\w\-$]+)?\s*\(/i,
59
+ stack = [],j=0,
60
+ fn,args,i;
61
+
62
+ while (curr) {
63
+ fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON;
64
+ args = stack.slice.call(curr.arguments);
65
+ i = args.length;
66
+
67
+ while (i--) {
68
+ switch (typeof args[i]) {
69
+ case 'string' : args[i] = '"'+args[i].replace(/"/g,'\\"')+'"'; break;
70
+ case 'function': args[i] = FUNC; break;
71
+ }
72
+ }
73
+
74
+ stack[j++] = (full) ? curr.toString() : fn + '(' + args.join() + ')';
75
+ curr = curr.caller;
76
+ }
77
+
78
+ console.log(stack.join('\n\n'));
79
+ };
80
+ }
81
+ })();
@@ -166,7 +166,8 @@ Test.Unit.Runner.prototype = {
166
166
  if (!rootLog) {
167
167
  var el = document.createElement('div') ;
168
168
  el.id = 'test-log' ;
169
- $(el).addClassName('testlog') ;
169
+ var ell = $(el) ; // prevent strange type error when Chrome debug window is open
170
+ if (ell.addClassName) ell.addClassName('testlog') ;
170
171
  var body = document.getElementsByTagName('body')[0] ;
171
172
  body.insertBefore(el, body.firstChild) ;
172
173
  rootLog = el ;