sproutcore 0.9.17 → 0.9.18
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 +45 -2
- data/Manifest.txt +10 -0
- data/Rakefile +1 -1
- data/app_generators/sproutcore/templates/sc-config +8 -2
- data/bin/sc-server +4 -0
- data/clients/sc_docs/english.lproj/body.css +0 -20
- data/clients/sc_docs/english.lproj/body.rhtml +1 -3
- data/clients/sc_docs/english.lproj/strings.js +1 -1
- data/clients/sc_docs/french.lproj/strings.js +14 -0
- data/clients/sc_test_runner/english.lproj/body.css +0 -20
- data/clients/sc_test_runner/english.lproj/body.rhtml +1 -3
- data/config/hoe.rb +1 -1
- data/frameworks/sproutcore/HISTORY +56 -1
- data/frameworks/sproutcore/debug/trace.js +81 -0
- data/frameworks/sproutcore/debug/unittest.js +2 -1
- data/frameworks/sproutcore/english.lproj/buttons.css +5 -2
- data/frameworks/sproutcore/english.lproj/core.css +0 -16
- data/frameworks/sproutcore/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/english.lproj/splitview.css +83 -0
- data/frameworks/sproutcore/english.lproj/theme.css +21 -5
- data/frameworks/sproutcore/foundation/object.js +23 -0
- data/frameworks/sproutcore/foundation/string.js +4 -3
- data/frameworks/sproutcore/lib/core_views.rb +43 -8
- data/frameworks/sproutcore/lib/form_views.rb +2 -2
- data/frameworks/sproutcore/lib/index.rhtml +1 -1
- data/frameworks/sproutcore/mixins/enumerable.js +4 -8
- data/frameworks/sproutcore/mixins/selection_support.js +1 -1
- data/frameworks/sproutcore/models/collection.js +14 -3
- data/frameworks/sproutcore/models/record.js +6 -5
- data/frameworks/sproutcore/models/store.js +3 -3
- data/frameworks/sproutcore/panes/picker.js +1 -0
- data/frameworks/sproutcore/server/rails_server.js +4 -7
- data/frameworks/sproutcore/server/server.js +58 -1
- data/frameworks/sproutcore/tests/controllers/object.rhtml +1 -1
- data/frameworks/sproutcore/tests/models/collection.rhtml +160 -0
- data/frameworks/sproutcore/tests/models/model.rhtml +15 -3
- data/frameworks/sproutcore/tests/views/collection/base.rhtml +120 -47
- data/frameworks/sproutcore/tests/views/collection/source_list_rendering.rhtml +232 -0
- data/frameworks/sproutcore/tests/views/view/frame.rhtml +2 -2
- data/frameworks/sproutcore/tests/views/view/innerFrame.rhtml +87 -85
- data/frameworks/sproutcore/tests/views/view/scrollFrame.rhtml +25 -26
- data/frameworks/sproutcore/views/collection/collection.js +5 -1
- data/frameworks/sproutcore/views/field/select_field.js +1 -1
- data/frameworks/sproutcore/views/radio_group.js +2 -2
- data/frameworks/sproutcore/views/split.js +191 -174
- data/frameworks/sproutcore/views/split_divider.js +71 -68
- data/frameworks/sproutcore/views/view.js +65 -25
- data/lib/sproutcore.rb +4 -1
- data/lib/sproutcore/build_tools/html_builder.rb +50 -46
- data/lib/sproutcore/build_tools/resource_builder.rb +17 -5
- data/lib/sproutcore/bundle_installer.rb +3 -1
- data/lib/sproutcore/bundle_manifest.rb +4 -3
- data/lib/sproutcore/cssmin.rb +195 -0
- data/lib/sproutcore/generator_helper.rb +15 -0
- data/lib/sproutcore/helpers/capture_helper.rb +2 -22
- data/lib/sproutcore/helpers/dom_id_helper.rb +14 -0
- data/lib/sproutcore/helpers/static_helper.rb +6 -2
- data/lib/sproutcore/helpers/text_helper.rb +1 -1
- data/lib/sproutcore/merb.rb +2 -2
- data/lib/sproutcore/renderers/erubis.rb +43 -0
- data/lib/sproutcore/renderers/haml.rb +28 -0
- data/lib/sproutcore/renderers/sass.rb +42 -0
- data/lib/sproutcore/version.rb +1 -1
- data/lib/sproutcore/view_helpers.rb +40 -46
- data/sc_generators/controller/controller_generator.rb +1 -1
- data/sc_generators/language/USAGE +5 -7
- data/sc_generators/language/language_generator.rb +1 -1
- data/sc_generators/language/templates/strings.js +5 -1
- data/sc_generators/model/model_generator.rb +1 -1
- data/sc_generators/test/test_generator.rb +1 -1
- data/sc_generators/view/view_generator.rb +1 -1
- 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
|
4
|
-
|
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.
|
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 %>
|
@@ -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'
|
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
|
-
|
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)
|
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 ;
|