sproutcore 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +42 -29
- data/README.txt +1 -1
- data/Rakefile +5 -0
- data/app_generators/sproutcore/sproutcore_generator.rb +4 -4
- data/app_generators/sproutcore/templates/sc-config.rb +72 -0
- data/bin/sc-build +2 -0
- data/clients/sc_docs/controllers/docs.js +1 -0
- data/clients/sc_docs/english.lproj/body.rhtml +5 -0
- data/clients/sc_docs/views/doc_frame.js +1 -1
- data/clients/sc_test_runner/controllers/runner.js +2 -2
- data/clients/sc_test_runner/english.lproj/body.rhtml +5 -0
- data/clients/sc_test_runner/main.js +12 -12
- data/clients/sc_test_runner/models/test.js +3 -0
- data/clients/sc_test_runner/views/test_label.js +1 -1
- data/config/hoe.rb +2 -0
- data/frameworks/sproutcore/controllers/array.js +132 -125
- data/frameworks/sproutcore/drag/drag.js +5 -2
- data/frameworks/sproutcore/english.lproj/buttons.css +64 -64
- data/frameworks/sproutcore/english.lproj/collections.css +82 -0
- data/frameworks/sproutcore/english.lproj/images/buttons-sprite.png +0 -0
- data/frameworks/sproutcore/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/english.lproj/images/sticky-note.png +0 -0
- data/frameworks/sproutcore/english.lproj/menu.css +1 -1
- data/frameworks/sproutcore/english.lproj/theme.css +13 -4
- data/frameworks/sproutcore/foundation/array.js +24 -2
- data/frameworks/sproutcore/foundation/benchmark.js +12 -5
- data/frameworks/sproutcore/foundation/observable.js +62 -1
- data/frameworks/sproutcore/foundation/utils.js +16 -0
- data/frameworks/sproutcore/tests/views/label_item.rhtml +21 -0
- data/frameworks/sproutcore/tests/views/list.rhtml +21 -0
- data/frameworks/sproutcore/tests/views/scroll.rhtml +21 -0
- data/frameworks/sproutcore/views/collection.js +401 -73
- data/frameworks/sproutcore/views/collection/collection_item.js +36 -0
- data/frameworks/sproutcore/views/collection/grid.js +149 -0
- data/frameworks/sproutcore/views/collection/image_cell.js +154 -0
- data/frameworks/sproutcore/views/collection/list.js +115 -0
- data/frameworks/sproutcore/views/collection/text_cell.js +128 -0
- data/frameworks/sproutcore/views/image.js +1 -1
- data/frameworks/sproutcore/views/label.js +6 -2
- data/frameworks/sproutcore/views/scroll.js +34 -0
- data/frameworks/sproutcore/views/view.js +12 -4
- data/generators/client/client_generator.rb +3 -11
- data/generators/client/templates/english.lproj/body.css +75 -0
- data/generators/client/templates/english.lproj/body.rhtml +17 -2
- data/generators/model/templates/fixture.js +32 -0
- data/lib/sproutcore/build_tools/html_builder.rb +29 -11
- data/lib/sproutcore/build_tools/resource_builder.rb +1 -1
- data/lib/sproutcore/bundle.rb +19 -7
- data/lib/sproutcore/library.rb +39 -21
- data/lib/sproutcore/merb/bundle_controller.rb +3 -8
- data/lib/sproutcore/version.rb +1 -1
- data/lib/sproutcore/view_helpers.rb +7 -5
- data/lib/sproutcore/view_helpers/core_views.rb +11 -3
- data/sc-config.rb +7 -0
- data/tasks/deployment.rake +15 -2
- metadata +44 -31
- data/app_generators/sproutcore/templates/environment.yml +0 -4
- data/environment.yml +0 -9
data/Manifest.txt
CHANGED
@@ -1,12 +1,7 @@
|
|
1
|
-
History.txt
|
2
|
-
License.txt
|
3
|
-
Manifest.txt
|
4
|
-
README.txt
|
5
|
-
Rakefile
|
6
|
-
app_generators/sproutcore/USAGE
|
7
1
|
app_generators/sproutcore/sproutcore_generator.rb
|
8
2
|
app_generators/sproutcore/templates/README
|
9
|
-
app_generators/sproutcore/templates/
|
3
|
+
app_generators/sproutcore/templates/sc-config.rb
|
4
|
+
app_generators/sproutcore/USAGE
|
10
5
|
bin/sc-build
|
11
6
|
bin/sc-gen
|
12
7
|
bin/sc-server
|
@@ -53,14 +48,12 @@ clients/sc_test_runner/views/runner_frame.js
|
|
53
48
|
clients/sc_test_runner/views/test_label.js
|
54
49
|
config/hoe.rb
|
55
50
|
config/requirements.rb
|
56
|
-
environment.yml
|
57
51
|
frameworks/prototype/prototype.js
|
58
|
-
frameworks/sproutcore/Core.js
|
59
|
-
frameworks/sproutcore/README
|
60
52
|
frameworks/sproutcore/controllers/array.js
|
61
53
|
frameworks/sproutcore/controllers/collection.js
|
62
54
|
frameworks/sproutcore/controllers/controller.js
|
63
55
|
frameworks/sproutcore/controllers/object.js
|
56
|
+
frameworks/sproutcore/Core.js
|
64
57
|
frameworks/sproutcore/drag/drag.js
|
65
58
|
frameworks/sproutcore/drag/drag_data_source.js
|
66
59
|
frameworks/sproutcore/drag/drag_source.js
|
@@ -68,6 +61,10 @@ frameworks/sproutcore/drag/drop_target.js
|
|
68
61
|
frameworks/sproutcore/english.lproj/blank.gif
|
69
62
|
frameworks/sproutcore/english.lproj/buttons.css
|
70
63
|
frameworks/sproutcore/english.lproj/buttons.png
|
64
|
+
frameworks/sproutcore/english.lproj/collections.css
|
65
|
+
frameworks/sproutcore/english.lproj/images/buttons-sprite.png
|
66
|
+
frameworks/sproutcore/english.lproj/images/sproutcore-logo.png
|
67
|
+
frameworks/sproutcore/english.lproj/images/sticky-note.png
|
71
68
|
frameworks/sproutcore/english.lproj/inline_text_editor.css
|
72
69
|
frameworks/sproutcore/english.lproj/menu.css
|
73
70
|
frameworks/sproutcore/english.lproj/panels/background-fat.jpg
|
@@ -125,6 +122,7 @@ frameworks/sproutcore/panes/overlay.js
|
|
125
122
|
frameworks/sproutcore/panes/pane.js
|
126
123
|
frameworks/sproutcore/panes/panel.js
|
127
124
|
frameworks/sproutcore/panes/picker.js
|
125
|
+
frameworks/sproutcore/README
|
128
126
|
frameworks/sproutcore/tests/controllers/array.rhtml
|
129
127
|
frameworks/sproutcore/tests/controllers/controller.rhtml
|
130
128
|
frameworks/sproutcore/tests/controllers/object.rhtml
|
@@ -134,7 +132,10 @@ frameworks/sproutcore/tests/foundation/object.rhtml
|
|
134
132
|
frameworks/sproutcore/tests/globals/window.rhtml
|
135
133
|
frameworks/sproutcore/tests/panes/pane.rhtml
|
136
134
|
frameworks/sproutcore/tests/views/collection.rhtml
|
135
|
+
frameworks/sproutcore/tests/views/label_item.rhtml
|
136
|
+
frameworks/sproutcore/tests/views/list.rhtml
|
137
137
|
frameworks/sproutcore/tests/views/popup_button.rhtml
|
138
|
+
frameworks/sproutcore/tests/views/scroll.rhtml
|
138
139
|
frameworks/sproutcore/tests/views/text_field.rhtml
|
139
140
|
frameworks/sproutcore/validators/credit_card.js
|
140
141
|
frameworks/sproutcore/validators/date.js
|
@@ -145,6 +146,11 @@ frameworks/sproutcore/validators/password.js
|
|
145
146
|
frameworks/sproutcore/validators/validator.js
|
146
147
|
frameworks/sproutcore/views/button.js
|
147
148
|
frameworks/sproutcore/views/checkbox_field.js
|
149
|
+
frameworks/sproutcore/views/collection/collection_item.js
|
150
|
+
frameworks/sproutcore/views/collection/grid.js
|
151
|
+
frameworks/sproutcore/views/collection/image_cell.js
|
152
|
+
frameworks/sproutcore/views/collection/list.js
|
153
|
+
frameworks/sproutcore/views/collection/text_cell.js
|
148
154
|
frameworks/sproutcore/views/collection.js
|
149
155
|
frameworks/sproutcore/views/container.js
|
150
156
|
frameworks/sproutcore/views/error_explanation.js
|
@@ -161,6 +167,7 @@ frameworks/sproutcore/views/popup_menu.js
|
|
161
167
|
frameworks/sproutcore/views/progress.js
|
162
168
|
frameworks/sproutcore/views/radio_field.js
|
163
169
|
frameworks/sproutcore/views/radio_group.js
|
170
|
+
frameworks/sproutcore/views/scroll.js
|
164
171
|
frameworks/sproutcore/views/segmented.js
|
165
172
|
frameworks/sproutcore/views/select_field.js
|
166
173
|
frameworks/sproutcore/views/spinner.js
|
@@ -170,47 +177,48 @@ frameworks/sproutcore/views/textarea_field.js
|
|
170
177
|
frameworks/sproutcore/views/toolbar.js
|
171
178
|
frameworks/sproutcore/views/view.js
|
172
179
|
frameworks/sproutcore/views/workspace.js
|
173
|
-
generators/client/README
|
174
|
-
generators/client/USAGE
|
175
180
|
generators/client/client_generator.rb
|
181
|
+
generators/client/README
|
176
182
|
generators/client/templates/core.js
|
177
183
|
generators/client/templates/english.lproj/body.css
|
178
184
|
generators/client/templates/english.lproj/body.rhtml
|
179
185
|
generators/client/templates/english.lproj/controls.css
|
180
186
|
generators/client/templates/english.lproj/strings.js
|
181
187
|
generators/client/templates/main.js
|
182
|
-
generators/
|
188
|
+
generators/client/USAGE
|
183
189
|
generators/controller/controller_generator.rb
|
184
190
|
generators/controller/templates/controller.js
|
185
191
|
generators/controller/templates/test.rhtml
|
186
|
-
generators/
|
187
|
-
generators/framework/USAGE
|
192
|
+
generators/controller/USAGE
|
188
193
|
generators/framework/framework_generator.rb
|
194
|
+
generators/framework/README
|
189
195
|
generators/framework/templates/core.js
|
190
196
|
generators/framework/templates/english.lproj/body.css
|
191
197
|
generators/framework/templates/english.lproj/body.rhtml
|
192
198
|
generators/framework/templates/english.lproj/controls.css
|
193
199
|
generators/framework/templates/english.lproj/strings.js
|
194
|
-
generators/
|
200
|
+
generators/framework/USAGE
|
195
201
|
generators/language/language_generator.rb
|
196
202
|
generators/language/templates/strings.js
|
197
|
-
generators/
|
203
|
+
generators/language/USAGE
|
198
204
|
generators/model/model_generator.rb
|
199
205
|
generators/model/templates/fixture.js
|
200
206
|
generators/model/templates/model.js
|
201
207
|
generators/model/templates/test.rhtml
|
202
|
-
generators/
|
208
|
+
generators/model/USAGE
|
203
209
|
generators/test/templates/test.rhtml
|
204
210
|
generators/test/test_generator.rb
|
205
|
-
generators/
|
211
|
+
generators/test/USAGE
|
206
212
|
generators/view/templates/test.rhtml
|
207
213
|
generators/view/templates/view.js
|
214
|
+
generators/view/USAGE
|
208
215
|
generators/view/view_generator.rb
|
209
|
-
|
216
|
+
History.txt
|
210
217
|
jsdoc/app/DocFile.js
|
211
|
-
jsdoc/app/DocTag.js
|
212
218
|
jsdoc/app/Doclet.js
|
219
|
+
jsdoc/app/DocTag.js
|
213
220
|
jsdoc/app/Dumper.js
|
221
|
+
jsdoc/app/js.jar
|
214
222
|
jsdoc/app/JsDoc.js
|
215
223
|
jsdoc/app/JsHilite.js
|
216
224
|
jsdoc/app/JsIO.js
|
@@ -218,13 +226,13 @@ jsdoc/app/JsParse.js
|
|
218
226
|
jsdoc/app/JsPlate.js
|
219
227
|
jsdoc/app/JsTestrun.js
|
220
228
|
jsdoc/app/JsToke.js
|
229
|
+
jsdoc/app/run.js
|
221
230
|
jsdoc/app/Symbol.js
|
222
231
|
jsdoc/app/Transformer.js
|
223
232
|
jsdoc/app/Util.js
|
224
|
-
jsdoc/app/js.jar
|
225
|
-
jsdoc/app/run.js
|
226
233
|
jsdoc/plugins/min.js
|
227
234
|
jsdoc/plugins/strip.js
|
235
|
+
jsdoc/README.txt
|
228
236
|
jsdoc/templates/sproutcore/class.tmpl
|
229
237
|
jsdoc/templates/sproutcore/default.css
|
230
238
|
jsdoc/templates/sproutcore/index.html
|
@@ -232,30 +240,35 @@ jsdoc/templates/sproutcore/index.tmpl
|
|
232
240
|
jsdoc/templates/sproutcore/prototype.js
|
233
241
|
jsdoc/templates/sproutcore/publish.js
|
234
242
|
jsdoc/templates/sproutcore/splash.html
|
235
|
-
lib/sproutcore.rb
|
236
|
-
lib/sproutcore/build_tools.rb
|
237
243
|
lib/sproutcore/build_tools/html_builder.rb
|
238
244
|
lib/sproutcore/build_tools/resource_builder.rb
|
245
|
+
lib/sproutcore/build_tools.rb
|
239
246
|
lib/sproutcore/bundle.rb
|
240
247
|
lib/sproutcore/bundle_manifest.rb
|
241
248
|
lib/sproutcore/generator_helper.rb
|
242
|
-
lib/sproutcore/helpers.rb
|
243
249
|
lib/sproutcore/helpers/capture_helper.rb
|
244
250
|
lib/sproutcore/helpers/static_helper.rb
|
245
251
|
lib/sproutcore/helpers/tag_helper.rb
|
246
252
|
lib/sproutcore/helpers/text_helper.rb
|
253
|
+
lib/sproutcore/helpers.rb
|
247
254
|
lib/sproutcore/jsdoc.rb
|
248
255
|
lib/sproutcore/jsmin.rb
|
249
256
|
lib/sproutcore/library.rb
|
250
|
-
lib/sproutcore/merb.rb
|
251
257
|
lib/sproutcore/merb/bundle_controller.rb
|
252
258
|
lib/sproutcore/merb/router.rb
|
259
|
+
lib/sproutcore/merb.rb
|
253
260
|
lib/sproutcore/version.rb
|
254
|
-
lib/sproutcore/view_helpers.rb
|
255
261
|
lib/sproutcore/view_helpers/button_views.rb
|
256
262
|
lib/sproutcore/view_helpers/core_views.rb
|
257
263
|
lib/sproutcore/view_helpers/form_views.rb
|
258
264
|
lib/sproutcore/view_helpers/menu_views.rb
|
265
|
+
lib/sproutcore/view_helpers.rb
|
266
|
+
lib/sproutcore.rb
|
267
|
+
License.txt
|
268
|
+
Manifest.txt
|
269
|
+
Rakefile
|
270
|
+
README.txt
|
271
|
+
sc-config.rb
|
259
272
|
script/destroy
|
260
273
|
script/generate
|
261
274
|
script/txt2html
|
@@ -266,4 +279,4 @@ spec/sproutcore_spec.rb
|
|
266
279
|
tasks/deployment.rake
|
267
280
|
tasks/environment.rake
|
268
281
|
tasks/rspec.rake
|
269
|
-
tasks/website.rake
|
282
|
+
tasks/website.rake
|
data/README.txt
CHANGED
@@ -8,7 +8,7 @@ This package includes both the raw SproutCore source as well as a complete build
|
|
8
8
|
|
9
9
|
SproutCore comes loaded with a lot of features you would normally find in a full MVC desktop framework including:
|
10
10
|
|
11
|
-
|
11
|
+
1. "Bindings" that can automatically relay changes in a property from your model objects to your views.
|
12
12
|
|
13
13
|
2. A simple in-memory database for storing your models.
|
14
14
|
|
data/Rakefile
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
require 'config/requirements'
|
2
2
|
require 'config/hoe' # setup Hoe + all gem configuration
|
3
3
|
|
4
|
+
APP_ROOT = File.expand_path(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
# Set directories you want ignored in the manifest.
|
7
|
+
IGNORE_DIRS = ['assets', 'pkg', 'samples', 'doc']
|
8
|
+
|
4
9
|
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
@@ -22,12 +22,12 @@ class SproutcoreGenerator < RubiGen::Base
|
|
22
22
|
BASEDIRS.each { |path| m.directory path }
|
23
23
|
|
24
24
|
# Create stubs
|
25
|
-
m.template_copy_each %w(README
|
26
|
-
m.dependency "install_rubigen_scripts", [destination_root, 'sproutcore'],
|
27
|
-
|
25
|
+
m.template_copy_each %w(README sc-config.rb)
|
26
|
+
# m.dependency "install_rubigen_scripts", [destination_root, 'sproutcore'],
|
27
|
+
# :shebang => options[:shebang], :collision => :force
|
28
28
|
|
29
29
|
# Create initial client
|
30
|
-
m.dependency "client", [
|
30
|
+
m.dependency "client", [@name, "--library=#{@destination_root}"],
|
31
31
|
:shebang => options[:shebang], :collision => :force
|
32
32
|
|
33
33
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# SPROUTCORE CONFIGURATION FILE
|
2
|
+
# Use this file to customize the URLs, source and output paths and and other
|
3
|
+
# options used by the SproutCore build system to create the output for your
|
4
|
+
# SproutCore applications.
|
5
|
+
|
6
|
+
# If you want to use the libraries provided by other gems, require those gems
|
7
|
+
# here. SproutCore will automatically locate and load any bundles found in
|
8
|
+
# your load path. The sproutcore gem is automatically loaded for you.
|
9
|
+
#
|
10
|
+
# require 'sproutcore'
|
11
|
+
|
12
|
+
# This configuration section will be applied to all bundles used by your
|
13
|
+
# application, even bundles that come from other gems.
|
14
|
+
config :all do |c|
|
15
|
+
|
16
|
+
# Name any other frameworks your bundles depend upon. The stylesheets and
|
17
|
+
# JavaScript for required bundles will be loaded before your bundle on your
|
18
|
+
# page.
|
19
|
+
c[:required] = [:sproutcore]
|
20
|
+
|
21
|
+
# This string will be prepended before any URLs that reference JavaScript,
|
22
|
+
# CSS or images in your files.
|
23
|
+
c[:resources_at] = 'static'
|
24
|
+
|
25
|
+
# This string will be prepended before any index.html urls that actually
|
26
|
+
# load your clients. Setting this to an empty string will mount all
|
27
|
+
# of your clients at the root URL level.
|
28
|
+
c[:index_at] = ''
|
29
|
+
|
30
|
+
# If you also need to load external stylesheets not managed by the bundle
|
31
|
+
# system, name the URLs you want to reference here.
|
32
|
+
# c[:stylesheet_libs] = ['/stylesheets/public.css']
|
33
|
+
|
34
|
+
# If you also need to load external javascripts not managed by the bundle
|
35
|
+
# system, name hte URLs you want to reference here. These will be loaded
|
36
|
+
# automatically.
|
37
|
+
# c[:javascript_libs] = ['/javascript/scriptaculous.js']
|
38
|
+
|
39
|
+
# This is the preferred language. When the user visits the root URL of
|
40
|
+
# your client, this is the language they will get. When looking for a
|
41
|
+
# resources (such as an image or stylesheet), SproutCore will also try
|
42
|
+
# your preferred language .lproj if it cannot find the resource in the
|
43
|
+
# current language.
|
44
|
+
# c[:preferred_language] = :fr
|
45
|
+
|
46
|
+
# 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
|
48
|
+
# here. If you provide a relative path, SproutCore will assume the file
|
49
|
+
# is relative to the root of this project.
|
50
|
+
# c[:layout] = 'lib/index.rhtml'
|
51
|
+
|
52
|
+
# This is the fully qualified path to the directory you want all of your
|
53
|
+
# static files stored in. You can place any files not managed by the build
|
54
|
+
# system here. SproutCore will also save its cached resources here.
|
55
|
+
# c[:public_root] = File.join(File.dirname(__FILE__), 'public')
|
56
|
+
|
57
|
+
# The default build mode. Normally you can specify this on the command
|
58
|
+
# line as well using the -e option, but you can override the default
|
59
|
+
# using this config as well.
|
60
|
+
#c[:build_mode] = :production
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
# Add configurations for specific bundles here as well. Any options you
|
65
|
+
# provide here will override the defaults provided by the bundles themselves
|
66
|
+
# as well as any options you place in the :all category above.
|
67
|
+
#
|
68
|
+
# config :contacts do |c|
|
69
|
+
# c[:required] = [:sproutcore, :shared]
|
70
|
+
# end
|
71
|
+
#
|
72
|
+
|
data/bin/sc-build
CHANGED
@@ -39,6 +39,7 @@ Docs.docsController = SC.Object.create({
|
|
39
39
|
// current client.
|
40
40
|
var clientName = this.get('clientName') ;
|
41
41
|
var clientRoot = this.get('clientRoot') ;
|
42
|
+
clientRoot = clientRoot.replace(new RegExp("^%@/?".fmt(window.indexPrefix)), window.urlPrefix + '/');
|
42
43
|
console.log('clientName: '+ clientRoot) ;
|
43
44
|
Docs.server.request(clientRoot, ['data','classes.js'].join('/'), null, {
|
44
45
|
onSuccess: this._reloadSuccess.bind(this),
|
@@ -13,7 +13,7 @@ Docs.DocFrameView = SC.View.extend({
|
|
13
13
|
var doc = this.get('doc') ;
|
14
14
|
var url = (doc) ? doc.get('url') : '' ;
|
15
15
|
if (url.length > 0) {
|
16
|
-
url = "
|
16
|
+
url = "/%@/%@/-docs/data/%@".fmt(window.urlPrefix,Docs.docsController.get('clientName'), url) ;
|
17
17
|
}
|
18
18
|
|
19
19
|
// make sure we clear out the old document settings if needed.
|
@@ -61,8 +61,8 @@ TestRunner.runnerController = SC.Object.create({
|
|
61
61
|
|
62
62
|
// Use Ajax to ask the server for the latest set of tests for the
|
63
63
|
// current client.
|
64
|
-
var
|
65
|
-
TestRunner.server.request(
|
64
|
+
var urlRoot = this.get('urlRoot') ;
|
65
|
+
TestRunner.server.request(urlRoot, 'index.js', null, {
|
66
66
|
onSuccess: this._reloadSuccess.bind(this),
|
67
67
|
onFailure: this._reloadFailure.bind(this)
|
68
68
|
}) ;
|
@@ -6,21 +6,21 @@ function main() {
|
|
6
6
|
//TestRunner.server.preload(TestRunner.FIXTURES) ;
|
7
7
|
SC.page.awake() ;
|
8
8
|
//TestRunner.runnerController.reloadTests() ;
|
9
|
+
|
10
|
+
console.log('main') ;
|
11
|
+
var indexRoot = window.location.pathname.toString().replace(/-tests\/.*/,'-tests').substr(1,window.location.pathname.length);
|
12
|
+
var clientName = indexRoot.match(/([^\/]+)\/-tests/)[1];
|
13
|
+
var urlRoot = indexRoot.replace(new RegExp("^%@/?".fmt(window.indexPrefix)), window.urlPrefix + '/');
|
14
|
+
console.log('indexRoot: %@ clientName: %@ urlRoot: %@'.fmt( indexRoot, clientName, urlRoot));
|
15
|
+
TestRunner.hidePanels() ;
|
16
|
+
TestRunner.runnerController.set('selection',[]) ;
|
17
|
+
TestRunner.runnerController.set('urlRoot', urlRoot) ;
|
18
|
+
TestRunner.runnerController.set('indexRoot', indexRoot) ;
|
19
|
+
TestRunner.runnerController.set('clientName', clientName) ;
|
20
|
+
TestRunner.runnerController.reloadTests() ;
|
9
21
|
} ;
|
10
22
|
|
11
23
|
TestRunner.hidePanels = function() {
|
12
24
|
SC.page.get('warningPanel').set('isVisible', false) ;
|
13
25
|
SC.page.get('noTestsPanel').set('isVisible',false) ;
|
14
26
|
} ;
|
15
|
-
|
16
|
-
SC.Routes.addRoute('', function() {
|
17
|
-
TestRunner.hidePanels() ;
|
18
|
-
SC.page.get('warningPanel').set('isVisible', true) ;
|
19
|
-
}) ;
|
20
|
-
|
21
|
-
SC.Routes.addRoute(':client', function(params) {
|
22
|
-
TestRunner.hidePanels() ;
|
23
|
-
TestRunner.runnerController.set('selection',[]) ;
|
24
|
-
TestRunner.runnerController.set('clientName', params.client) ;
|
25
|
-
TestRunner.runnerController.reloadTests() ;
|
26
|
-
}) ;
|
@@ -10,7 +10,7 @@ TestRunner.TestLabelView = SC.ButtonView.extend({
|
|
10
10
|
|
11
11
|
contentObserver: function() {
|
12
12
|
var c = this.get('content') ;
|
13
|
-
this.set('labelText', (c) ? c.get('
|
13
|
+
this.set('labelText', (c) ? c.get('title') : '(NONE)') ;
|
14
14
|
}.observes('content'),
|
15
15
|
|
16
16
|
labelSelector: 'span',
|
data/config/hoe.rb
CHANGED
@@ -8,6 +8,8 @@ RUBYFORGE_PROJECT = 'sproutcore' # The unix name for your project
|
|
8
8
|
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
9
9
|
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
10
10
|
|
11
|
+
ENV['NODOT'] = "nodot" # avoid generating diagrams
|
12
|
+
|
11
13
|
@config_file = "~/.rubyforge/user-config.yml"
|
12
14
|
@config = nil
|
13
15
|
RUBYFORGE_USERNAME = "okito"
|
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
require('controllers/controller') ;
|
7
7
|
require('foundation/array') ;
|
8
|
+
require('foundation/binding') ;
|
8
9
|
|
9
10
|
/** @class
|
10
11
|
|
@@ -21,121 +22,102 @@ SC.ArrayController = SC.Controller.extend(SC.Array,
|
|
21
22
|
/** @scope SC.ArrayController.prototype */
|
22
23
|
{
|
23
24
|
/**
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
Provides compatibility with CollectionControllers.
|
26
|
+
@property
|
27
|
+
@type {SC.ArrayController}
|
27
28
|
*/
|
28
|
-
|
29
|
-
|
30
|
-
if (!this._content) this._content = [];
|
31
|
-
if (value !== undefined)
|
32
|
-
{
|
33
|
-
// only allow arrays... or array-like objects...
|
34
|
-
this._content = ($type(value) == T_ARRAY) || (value && value.objectAt) ? value : [];
|
35
|
-
}
|
36
|
-
return this._content;
|
37
|
-
}.property(),
|
38
|
-
|
29
|
+
arrangedObjects: function() { return this; }.property(),
|
30
|
+
|
39
31
|
/**
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
this.contentCloneReset();
|
47
|
-
}.observes('content'),
|
32
|
+
The array content that is being managed by the controller.
|
33
|
+
@property
|
34
|
+
@type {Array}
|
35
|
+
*/
|
36
|
+
content: null,
|
37
|
+
contentBindingDefault: SC.Binding.Multiple,
|
48
38
|
|
49
|
-
|
50
39
|
/**
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
Set to true if you want objects removed from the array to also be
|
41
|
+
deleted. This is a convenient way to manage lists of items owned
|
42
|
+
by a parent record object.
|
43
|
+
|
44
|
+
@property
|
45
|
+
@type {Boolean}
|
55
46
|
*/
|
56
|
-
|
57
|
-
|
58
|
-
if (!this._changelog) this._changelog = [];
|
59
|
-
if (value !== undefined) this._changelog = value;
|
60
|
-
return this._changelog;
|
61
|
-
}.property(),
|
62
|
-
|
47
|
+
destroyOnRemoval: false,
|
48
|
+
|
63
49
|
/**
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
* @property
|
68
|
-
* @type {SC.Array}
|
50
|
+
Watches changes to the content property updates the contentClone.
|
51
|
+
@private
|
52
|
+
@observes content
|
69
53
|
*/
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
return this._deletions;
|
75
|
-
}.property(),
|
54
|
+
_contentObserver: function() {
|
55
|
+
this.contentCloneReset();
|
56
|
+
this.arrayContentDidChange() ;
|
57
|
+
}.observes('content'),
|
76
58
|
|
77
59
|
/**
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
60
|
+
The array content that (when committed) will be merged back into the content property.
|
61
|
+
All array methods will take place on this object.
|
62
|
+
|
63
|
+
@property
|
64
|
+
@type {SC.Array}
|
83
65
|
*/
|
84
|
-
contentClone:
|
85
|
-
{
|
86
|
-
if (value !== undefined)
|
87
|
-
{
|
88
|
-
this._contentClone = value;
|
89
|
-
this.arrayContentDidChange();
|
90
|
-
}
|
91
|
-
return this._contentClone;
|
92
|
-
}.property(),
|
66
|
+
contentClone: null,
|
93
67
|
|
94
68
|
/**
|
95
69
|
* Clones the content property into the contentClone property.
|
96
70
|
* @private
|
97
71
|
**/
|
98
|
-
contentCloneReset: function()
|
99
|
-
|
100
|
-
this.set('changelog', []);
|
101
|
-
this.set('deletions', []);
|
72
|
+
contentCloneReset: function() {
|
73
|
+
this._changelog = [];
|
102
74
|
this.set('contentClone', null);
|
103
75
|
},
|
104
76
|
|
105
77
|
/**
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
78
|
+
SC.Array interface implimentation.
|
79
|
+
|
80
|
+
@param {Number} idx
|
81
|
+
Starting index in the array to replace. If idx >= length, then append to
|
82
|
+
the end of the array.
|
83
|
+
|
84
|
+
@param {Number} amt
|
85
|
+
Number of elements that should be removed from the array, starting at
|
86
|
+
*idx*.
|
87
|
+
|
88
|
+
@param {Array} objects
|
89
|
+
An array of zero or more objects that should be inserted into the array at
|
90
|
+
*idx*
|
119
91
|
*/
|
120
|
-
replace: function(idx, amt, objects)
|
121
|
-
{
|
122
|
-
if (this.get('contentClone') == undefined) this.set('contentClone', this.get('content').clone());
|
92
|
+
replace: function(idx, amt, objects) {
|
123
93
|
|
124
|
-
|
125
|
-
{
|
126
|
-
this.get('deletions').push( this._getSourceContent().objectAt(idx + i) );
|
127
|
-
}
|
94
|
+
var content = this.get('content') ;
|
128
95
|
|
129
|
-
|
130
|
-
|
96
|
+
// in case the passed objects are controllers, convert to source objects.
|
97
|
+
var copyIdx = objects.length ;
|
98
|
+
var sourceObjects = [] ;
|
99
|
+
while(--copyIdx >= 0) sourceObjects[copyIdx] = this._sourceObjectFor(objects[copyIdx]) ;
|
131
100
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
101
|
+
// create clone of content array if needed
|
102
|
+
var contentClone = this.get('contentClone') ;
|
103
|
+
if (!contentClone) {
|
104
|
+
contentClone = this.set('contentClone', content.clone());
|
105
|
+
}
|
106
|
+
|
107
|
+
// now, record the removed objects. This may be used later.
|
108
|
+
if (this.get('destroyOnRemoval')) {
|
109
|
+
if (!this._deletions) this._deletions = [] ;
|
110
|
+
for (var i=0; i < amt; i++) {
|
111
|
+
this._deletions.push(content.objectAt(idx + i));
|
137
112
|
}
|
138
113
|
}
|
114
|
+
|
115
|
+
// and record additions
|
116
|
+
if (!this._changelog) this._changelog = [];
|
117
|
+
this._changelog.push({ idx: idx, amt: amt, objects: objects });
|
118
|
+
|
119
|
+
// then actually perform the edit on the contentClone
|
120
|
+
contentClone.replace(idx, amt, objects);
|
139
121
|
|
140
122
|
this.editorDidChange() ;
|
141
123
|
this.arrayContentDidChange();
|
@@ -149,36 +131,31 @@ SC.ArrayController = SC.Controller.extend(SC.Array,
|
|
149
131
|
* The index of the item to return. If idx exceeds the current length,
|
150
132
|
* return null.
|
151
133
|
*/
|
152
|
-
objectAt: function(idx)
|
153
|
-
{
|
134
|
+
objectAt: function(idx) {
|
154
135
|
var obj = this._getSourceContent().objectAt(idx);
|
155
|
-
|
156
|
-
if ( !this._objControllers ) this._objControllers = [];
|
157
|
-
if ( !this._objControllers[idx] ) this._objControllers[idx] = this.controllerForValue(obj);
|
158
|
-
|
159
|
-
return this._objControllers[idx];
|
136
|
+
return this._objectControllerFor(obj) ;
|
160
137
|
},
|
161
138
|
/**
|
162
139
|
* SC.Array interface implimentation.
|
163
140
|
* @property
|
164
141
|
* @type {integer}
|
165
142
|
*/
|
166
|
-
length: function( key, value )
|
167
|
-
{
|
143
|
+
length: function( key, value ) {
|
168
144
|
return this._getSourceContent().get('length');
|
169
145
|
}.property(),
|
170
146
|
|
171
|
-
|
172
|
-
|
173
|
-
|
147
|
+
/**
|
148
|
+
Returns the index in the array of the specified object.
|
149
|
+
|
150
|
+
This can handle both controller wrapper objects and source content objects.
|
151
|
+
*/
|
152
|
+
indexOf: function( obj ) {
|
153
|
+
return this._getSourceContent().indexOf(this._sourceObjectFor(obj)) ;
|
174
154
|
},
|
175
|
-
|
176
|
-
{
|
177
|
-
return this.get('contentClone') || this.get('content');
|
155
|
+
|
156
|
+
_getSourceContent: function() {
|
157
|
+
return this.get('contentClone') || this.get('content') || [];
|
178
158
|
},
|
179
|
-
|
180
|
-
|
181
|
-
|
182
159
|
|
183
160
|
/**
|
184
161
|
* @private
|
@@ -189,8 +166,7 @@ SC.ArrayController = SC.Controller.extend(SC.Array,
|
|
189
166
|
var ret = true;
|
190
167
|
|
191
168
|
// cannot commit changes to null content. Return an error.
|
192
|
-
if (!content)
|
193
|
-
{
|
169
|
+
if (!content) {
|
194
170
|
return $error("No Content");
|
195
171
|
}
|
196
172
|
|
@@ -198,25 +174,33 @@ SC.ArrayController = SC.Controller.extend(SC.Array,
|
|
198
174
|
|
199
175
|
|
200
176
|
// apply all the changes made to the clone
|
201
|
-
this.
|
202
|
-
{
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
177
|
+
var changelog = this._changelog || [] ;
|
178
|
+
for(var idx=0;idx<changelog.length;idx++) {
|
179
|
+
var change = changelog[idx];
|
180
|
+
content.replace(change.idx, change.amt, change.objects) ;
|
181
|
+
}
|
182
|
+
|
183
|
+
// done, flush the changelog
|
184
|
+
this._changelog = [] ;
|
185
|
+
|
186
|
+
// finally, destroy any removed objects if necessary. Make
|
187
|
+
// sure the objects have not been re-added before doing this.
|
188
|
+
if (this.get('destroyOnRemoval') && this._deletions && this._deletions.length>0) {
|
189
|
+
var idx = this._deletions.length;
|
190
|
+
while(--idx >= 0) {
|
191
|
+
var obj = this._deletions[idx] ;
|
192
|
+
if (obj && obj.destroy && (content.indexOf(obj) < 0)) {
|
193
|
+
obj.destroy() ;
|
194
|
+
}
|
211
195
|
}
|
212
|
-
|
213
|
-
|
214
|
-
|
196
|
+
this._deletions = [] ; // clear array
|
197
|
+
}
|
198
|
+
|
199
|
+
// finish commiting changes.
|
215
200
|
if (content.endPropertyChanges) content.endPropertyChanges();
|
216
201
|
if (content.commitChanges) ret = content.commitChanges();
|
217
202
|
|
218
|
-
if ($ok(ret))
|
219
|
-
{
|
203
|
+
if ($ok(ret)) {
|
220
204
|
this.contentCloneReset();
|
221
205
|
this.editorDidClearChanges();
|
222
206
|
}
|
@@ -231,6 +215,29 @@ SC.ArrayController = SC.Controller.extend(SC.Array,
|
|
231
215
|
this.contentCloneReset();
|
232
216
|
this.editorDidClearChanges();
|
233
217
|
return true;
|
218
|
+
},
|
219
|
+
|
220
|
+
/** @private
|
221
|
+
Returns the object controller for a source value.
|
222
|
+
*/
|
223
|
+
_objectControllerFor: function(obj) {
|
224
|
+
var controllers = this._objControllers = this._objControllers || {} ;
|
225
|
+
var guid = SC.getGUID(obj) ;
|
226
|
+
var ret = controllers[guid] ;
|
227
|
+
if (!ret) {
|
228
|
+
ret = controllers[guid] = this.controllerForValue(obj) ;
|
229
|
+
if (ret) ret.__isArrayController = true ;
|
230
|
+
}
|
231
|
+
return ret ;
|
232
|
+
},
|
233
|
+
|
234
|
+
/** @private
|
235
|
+
Returns the source object for the passed value. If the passed value is a
|
236
|
+
controller, this will map back to the sourceo object. Otherwise the object itself
|
237
|
+
will be returned.
|
238
|
+
*/
|
239
|
+
_sourceObjectFor: function(obj) {
|
240
|
+
return (obj && obj.__isArrayController) ? obj.get('content') : obj ;
|
234
241
|
}
|
235
242
|
|
236
243
|
});
|