sproutcore 0.9.0
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 +4 -0
- data/License.txt +20 -0
- data/Manifest.txt +269 -0
- data/README.txt +67 -0
- data/Rakefile +4 -0
- data/app_generators/sproutcore/USAGE +5 -0
- data/app_generators/sproutcore/sproutcore_generator.rb +66 -0
- data/app_generators/sproutcore/templates/README +77 -0
- data/app_generators/sproutcore/templates/environment.yml +4 -0
- data/bin/sc-build +145 -0
- data/bin/sc-gen +24 -0
- data/bin/sc-server +63 -0
- data/bin/sproutcore +21 -0
- data/clients/sc_docs/controllers/docs.js +118 -0
- data/clients/sc_docs/core.js +19 -0
- data/clients/sc_docs/english.lproj/body.css +159 -0
- data/clients/sc_docs/english.lproj/body.rhtml +33 -0
- data/clients/sc_docs/english.lproj/controls.css +0 -0
- data/clients/sc_docs/english.lproj/icons/small/next.png +0 -0
- data/clients/sc_docs/english.lproj/icons/small/reset.png +0 -0
- data/clients/sc_docs/english.lproj/images/gradients.png +0 -0
- data/clients/sc_docs/english.lproj/images/indicator.gif +0 -0
- data/clients/sc_docs/english.lproj/images/toolbar.png +0 -0
- data/clients/sc_docs/english.lproj/no_docs.rhtml +7 -0
- data/clients/sc_docs/english.lproj/strings.js +14 -0
- data/clients/sc_docs/english.lproj/warning.rhtml +6 -0
- data/clients/sc_docs/fixtures/doc.js +11 -0
- data/clients/sc_docs/main.js +21 -0
- data/clients/sc_docs/models/doc.js +9 -0
- data/clients/sc_docs/tests/controllers/docs.rhtml +21 -0
- data/clients/sc_docs/tests/models/doc.rhtml +21 -0
- data/clients/sc_docs/tests/views/doc_frame.rhtml +21 -0
- data/clients/sc_docs/tests/views/doc_label_view.rhtml +21 -0
- data/clients/sc_docs/views/doc_frame.js +33 -0
- data/clients/sc_docs/views/doc_label.js +20 -0
- data/clients/sc_test_runner/controllers/runner.js +175 -0
- data/clients/sc_test_runner/core.js +19 -0
- data/clients/sc_test_runner/english.lproj/body.css +151 -0
- data/clients/sc_test_runner/english.lproj/body.rhtml +35 -0
- data/clients/sc_test_runner/english.lproj/controls.css +0 -0
- data/clients/sc_test_runner/english.lproj/icons/small/next.png +0 -0
- data/clients/sc_test_runner/english.lproj/icons/small/reset.png +0 -0
- data/clients/sc_test_runner/english.lproj/images/gradients.png +0 -0
- data/clients/sc_test_runner/english.lproj/images/indicator.gif +0 -0
- data/clients/sc_test_runner/english.lproj/images/toolbar.png +0 -0
- data/clients/sc_test_runner/english.lproj/no_tests.rhtml +6 -0
- data/clients/sc_test_runner/english.lproj/strings.js +14 -0
- data/clients/sc_test_runner/english.lproj/warning.rhtml +6 -0
- data/clients/sc_test_runner/fixtures/test.js +12 -0
- data/clients/sc_test_runner/main.js +26 -0
- data/clients/sc_test_runner/models/test.js +11 -0
- data/clients/sc_test_runner/views/runner_frame.js +72 -0
- data/clients/sc_test_runner/views/test_label.js +20 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +17 -0
- data/environment.yml +9 -0
- data/frameworks/prototype/prototype.js +4186 -0
- data/frameworks/sproutcore/Core.js +378 -0
- data/frameworks/sproutcore/README +3 -0
- data/frameworks/sproutcore/controllers/array.js +236 -0
- data/frameworks/sproutcore/controllers/collection.js +305 -0
- data/frameworks/sproutcore/controllers/controller.js +323 -0
- data/frameworks/sproutcore/controllers/object.js +372 -0
- data/frameworks/sproutcore/drag/drag.js +549 -0
- data/frameworks/sproutcore/drag/drag_data_source.js +32 -0
- data/frameworks/sproutcore/drag/drag_source.js +64 -0
- data/frameworks/sproutcore/drag/drop_target.js +153 -0
- data/frameworks/sproutcore/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/english.lproj/buttons.css +589 -0
- data/frameworks/sproutcore/english.lproj/buttons.png +0 -0
- data/frameworks/sproutcore/english.lproj/inline_text_editor.css +21 -0
- data/frameworks/sproutcore/english.lproj/menu.css +121 -0
- data/frameworks/sproutcore/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-right-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panes.css +155 -0
- data/frameworks/sproutcore/english.lproj/picker.css +22 -0
- data/frameworks/sproutcore/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/english.lproj/tab.css +23 -0
- data/frameworks/sproutcore/english.lproj/tests.css +67 -0
- data/frameworks/sproutcore/english.lproj/theme.css +77 -0
- data/frameworks/sproutcore/foundation/animator.js +670 -0
- data/frameworks/sproutcore/foundation/application.js +199 -0
- data/frameworks/sproutcore/foundation/array.js +348 -0
- data/frameworks/sproutcore/foundation/benchmark.js +211 -0
- data/frameworks/sproutcore/foundation/binding.js +384 -0
- data/frameworks/sproutcore/foundation/date.js +357 -0
- data/frameworks/sproutcore/foundation/error.js +39 -0
- data/frameworks/sproutcore/foundation/input_manager.js +153 -0
- data/frameworks/sproutcore/foundation/json.js +296 -0
- data/frameworks/sproutcore/foundation/mock.js +42 -0
- data/frameworks/sproutcore/foundation/node_descriptor.js +56 -0
- data/frameworks/sproutcore/foundation/object.js +777 -0
- data/frameworks/sproutcore/foundation/observable.js +451 -0
- data/frameworks/sproutcore/foundation/page.js +63 -0
- data/frameworks/sproutcore/foundation/path_module.js +413 -0
- data/frameworks/sproutcore/foundation/responder.js +310 -0
- data/frameworks/sproutcore/foundation/routes.js +371 -0
- data/frameworks/sproutcore/foundation/run_loop.js +21 -0
- data/frameworks/sproutcore/foundation/server.js +491 -0
- data/frameworks/sproutcore/foundation/set.js +96 -0
- data/frameworks/sproutcore/foundation/string.js +149 -0
- data/frameworks/sproutcore/foundation/undo_manager.js +186 -0
- data/frameworks/sproutcore/foundation/unittest.js +622 -0
- data/frameworks/sproutcore/foundation/utils.js +61 -0
- data/frameworks/sproutcore/globals/panels.js +182 -0
- data/frameworks/sproutcore/globals/popups.js +60 -0
- data/frameworks/sproutcore/globals/window.js +381 -0
- data/frameworks/sproutcore/lib/index.rhtml +66 -0
- data/frameworks/sproutcore/models/collection.js +395 -0
- data/frameworks/sproutcore/models/record.js +622 -0
- data/frameworks/sproutcore/models/store.js +295 -0
- data/frameworks/sproutcore/panes/dialog.js +16 -0
- data/frameworks/sproutcore/panes/manager.js +164 -0
- data/frameworks/sproutcore/panes/menu.js +45 -0
- data/frameworks/sproutcore/panes/overlay.js +231 -0
- data/frameworks/sproutcore/panes/pane.js +90 -0
- data/frameworks/sproutcore/panes/panel.js +19 -0
- data/frameworks/sproutcore/panes/picker.js +45 -0
- data/frameworks/sproutcore/tests/controllers/array.rhtml +86 -0
- data/frameworks/sproutcore/tests/controllers/controller.rhtml +273 -0
- data/frameworks/sproutcore/tests/controllers/object.rhtml +327 -0
- data/frameworks/sproutcore/tests/foundation/application.rhtml +125 -0
- data/frameworks/sproutcore/tests/foundation/array.rhtml +221 -0
- data/frameworks/sproutcore/tests/foundation/object.rhtml +69 -0
- data/frameworks/sproutcore/tests/globals/window.rhtml +45 -0
- data/frameworks/sproutcore/tests/panes/pane.rhtml +88 -0
- data/frameworks/sproutcore/tests/views/collection.rhtml +137 -0
- data/frameworks/sproutcore/tests/views/popup_button.rhtml +115 -0
- data/frameworks/sproutcore/tests/views/text_field.rhtml +37 -0
- data/frameworks/sproutcore/validators/credit_card.js +92 -0
- data/frameworks/sproutcore/validators/date.js +36 -0
- data/frameworks/sproutcore/validators/email.js +29 -0
- data/frameworks/sproutcore/validators/not_empty.js +24 -0
- data/frameworks/sproutcore/validators/number.js +55 -0
- data/frameworks/sproutcore/validators/password.js +78 -0
- data/frameworks/sproutcore/validators/validator.js +304 -0
- data/frameworks/sproutcore/views/button.js +425 -0
- data/frameworks/sproutcore/views/checkbox_field.js +30 -0
- data/frameworks/sproutcore/views/collection.js +1521 -0
- data/frameworks/sproutcore/views/container.js +62 -0
- data/frameworks/sproutcore/views/error_explanation.js +45 -0
- data/frameworks/sproutcore/views/field.js +214 -0
- data/frameworks/sproutcore/views/filter_button.js +29 -0
- data/frameworks/sproutcore/views/form.js +591 -0
- data/frameworks/sproutcore/views/image.js +141 -0
- data/frameworks/sproutcore/views/inline_text_editor.js +96 -0
- data/frameworks/sproutcore/views/label.js +176 -0
- data/frameworks/sproutcore/views/menu_item.js +90 -0
- data/frameworks/sproutcore/views/pagination.js +54 -0
- data/frameworks/sproutcore/views/popup_button.js +86 -0
- data/frameworks/sproutcore/views/popup_menu.js +137 -0
- data/frameworks/sproutcore/views/progress.js +100 -0
- data/frameworks/sproutcore/views/radio_field.js +107 -0
- data/frameworks/sproutcore/views/radio_group.js +48 -0
- data/frameworks/sproutcore/views/segmented.js +80 -0
- data/frameworks/sproutcore/views/select_field.js +272 -0
- data/frameworks/sproutcore/views/spinner.js +11 -0
- data/frameworks/sproutcore/views/tab.js +126 -0
- data/frameworks/sproutcore/views/text_field.js +179 -0
- data/frameworks/sproutcore/views/textarea_field.js +14 -0
- data/frameworks/sproutcore/views/toolbar.js +29 -0
- data/frameworks/sproutcore/views/view.js +1389 -0
- data/frameworks/sproutcore/views/workspace.js +170 -0
- data/generators/client/README +3 -0
- data/generators/client/USAGE +12 -0
- data/generators/client/client_generator.rb +53 -0
- data/generators/client/templates/core.js +19 -0
- data/generators/client/templates/english.lproj/body.css +0 -0
- data/generators/client/templates/english.lproj/body.rhtml +3 -0
- data/generators/client/templates/english.lproj/controls.css +0 -0
- data/generators/client/templates/english.lproj/strings.js +14 -0
- data/generators/client/templates/main.js +37 -0
- data/generators/controller/USAGE +16 -0
- data/generators/controller/controller_generator.rb +51 -0
- data/generators/controller/templates/controller.js +21 -0
- data/generators/controller/templates/test.rhtml +21 -0
- data/generators/framework/README +7 -0
- data/generators/framework/USAGE +12 -0
- data/generators/framework/framework_generator.rb +53 -0
- data/generators/framework/templates/core.js +20 -0
- data/generators/framework/templates/english.lproj/body.css +0 -0
- data/generators/framework/templates/english.lproj/body.rhtml +3 -0
- data/generators/framework/templates/english.lproj/controls.css +0 -0
- data/generators/framework/templates/english.lproj/strings.js +14 -0
- data/generators/language/USAGE +16 -0
- data/generators/language/language_generator.rb +47 -0
- data/generators/language/templates/strings.js +10 -0
- data/generators/model/USAGE +24 -0
- data/generators/model/model_generator.rb +55 -0
- data/generators/model/templates/fixture.js +11 -0
- data/generators/model/templates/model.js +20 -0
- data/generators/model/templates/test.rhtml +21 -0
- data/generators/test/USAGE +16 -0
- data/generators/test/templates/test.rhtml +21 -0
- data/generators/test/test_generator.rb +47 -0
- data/generators/view/USAGE +16 -0
- data/generators/view/templates/test.rhtml +21 -0
- data/generators/view/templates/view.js +20 -0
- data/generators/view/view_generator.rb +51 -0
- data/jsdoc/README.txt +119 -0
- data/jsdoc/app/DocFile.js +137 -0
- data/jsdoc/app/DocTag.js +110 -0
- data/jsdoc/app/Doclet.js +63 -0
- data/jsdoc/app/Dumper.js +143 -0
- data/jsdoc/app/JsDoc.js +103 -0
- data/jsdoc/app/JsHilite.js +45 -0
- data/jsdoc/app/JsIO.js +163 -0
- data/jsdoc/app/JsParse.js +385 -0
- data/jsdoc/app/JsPlate.js +130 -0
- data/jsdoc/app/JsTestrun.js +129 -0
- data/jsdoc/app/JsToke.js +564 -0
- data/jsdoc/app/Symbol.js +298 -0
- data/jsdoc/app/Transformer.js +14 -0
- data/jsdoc/app/Util.js +97 -0
- data/jsdoc/app/js.jar +0 -0
- data/jsdoc/app/run.js +144 -0
- data/jsdoc/plugins/min.js +316 -0
- data/jsdoc/plugins/strip.js +20 -0
- data/jsdoc/templates/sproutcore/class.tmpl +438 -0
- data/jsdoc/templates/sproutcore/default.css +241 -0
- data/jsdoc/templates/sproutcore/index.html +13 -0
- data/jsdoc/templates/sproutcore/index.tmpl +21 -0
- data/jsdoc/templates/sproutcore/prototype.js +4186 -0
- data/jsdoc/templates/sproutcore/publish.js +236 -0
- data/jsdoc/templates/sproutcore/splash.html +7 -0
- data/lib/sproutcore/build_tools/html_builder.rb +88 -0
- data/lib/sproutcore/build_tools/resource_builder.rb +194 -0
- data/lib/sproutcore/build_tools.rb +44 -0
- data/lib/sproutcore/bundle.rb +517 -0
- data/lib/sproutcore/bundle_manifest.rb +397 -0
- data/lib/sproutcore/generator_helper.rb +170 -0
- data/lib/sproutcore/helpers/capture_helper.rb +42 -0
- data/lib/sproutcore/helpers/static_helper.rb +80 -0
- data/lib/sproutcore/helpers/tag_helper.rb +110 -0
- data/lib/sproutcore/helpers/text_helper.rb +336 -0
- data/lib/sproutcore/helpers.rb +3 -0
- data/lib/sproutcore/jsdoc.rb +40 -0
- data/lib/sproutcore/jsmin.rb +247 -0
- data/lib/sproutcore/library.rb +258 -0
- data/lib/sproutcore/merb/bundle_controller.rb +179 -0
- data/lib/sproutcore/merb/router.rb +43 -0
- data/lib/sproutcore/merb.rb +27 -0
- data/lib/sproutcore/version.rb +9 -0
- data/lib/sproutcore/view_helpers/button_views.rb +302 -0
- data/lib/sproutcore/view_helpers/core_views.rb +284 -0
- data/lib/sproutcore/view_helpers/form_views.rb +258 -0
- data/lib/sproutcore/view_helpers/menu_views.rb +94 -0
- data/lib/sproutcore/view_helpers.rb +628 -0
- data/lib/sproutcore.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/sproutcore_spec.rb +11 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +17 -0
- metadata +365 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// ========================================================================
|
|
2
|
+
// SproutCore
|
|
3
|
+
// copyright 2006-2007 Sprout Systems, Inc.
|
|
4
|
+
// ========================================================================
|
|
5
|
+
|
|
6
|
+
require('views/tab') ;
|
|
7
|
+
require('foundation/routes') ;
|
|
8
|
+
require('views/button') ;
|
|
9
|
+
|
|
10
|
+
// A WorkspaceView is a type of tab view that looks for certain elements
|
|
11
|
+
// inside the content object and then places those into similarly named
|
|
12
|
+
// elements inside the receiver view. (You can extend this with more
|
|
13
|
+
// element areas by overriding the areas property.)
|
|
14
|
+
SC.WorkspaceView = SC.TabView.extend({
|
|
15
|
+
|
|
16
|
+
// override this if you need with the areas you want it to look for. You
|
|
17
|
+
// must have elements with the class '.detail.NAME' inside the receiver
|
|
18
|
+
// view to match.
|
|
19
|
+
areas: ['head','master','detail','dialog','tail'],
|
|
20
|
+
|
|
21
|
+
// override this with the names of your standard workspaces. Any names
|
|
22
|
+
// found here will be converted into code that looks like this:
|
|
23
|
+
//
|
|
24
|
+
// fooTab: NAMESPACE.fooWorkspace.outletFor('#foo-workspace'),
|
|
25
|
+
// fooButton: SC.ButtonView.outletFor('#foo')
|
|
26
|
+
//
|
|
27
|
+
workspaces: [],
|
|
28
|
+
namespace: null,
|
|
29
|
+
|
|
30
|
+
// used internally to configure the workspace view when you create it.
|
|
31
|
+
// be sure to add any tabs/buttons you want.
|
|
32
|
+
elements: function() {
|
|
33
|
+
var view = this ;
|
|
34
|
+
var ret = [] ;
|
|
35
|
+
this.areas.each(function(area) {
|
|
36
|
+
var el = view.$C(area) ;
|
|
37
|
+
if (el) {
|
|
38
|
+
view[area + 'Element'] = SC.ContainerView.viewFor(el);
|
|
39
|
+
ret.push(el) ;
|
|
40
|
+
}
|
|
41
|
+
}) ;
|
|
42
|
+
return ret ;
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
replaceContent: function(newContent) {
|
|
46
|
+
var view = this ;
|
|
47
|
+
this.areas.each(function(area) {
|
|
48
|
+
var key = area + 'Element' ;
|
|
49
|
+
var newElement = newContent.get(key) ;
|
|
50
|
+
var viewArea = view[key] ;
|
|
51
|
+
|
|
52
|
+
// remove existing children
|
|
53
|
+
if (viewArea) {
|
|
54
|
+
viewArea.set('content',newElement) ;
|
|
55
|
+
} else {
|
|
56
|
+
console.log('WARNING: could not find view area: ' + key) ;
|
|
57
|
+
}
|
|
58
|
+
}) ;
|
|
59
|
+
|
|
60
|
+
// if there was a prior content object, notify it that nowShowing has
|
|
61
|
+
// changed.
|
|
62
|
+
if (this._nowShowingContent) {
|
|
63
|
+
this._nowShowingContent.set('nowShowing',null) ;
|
|
64
|
+
}
|
|
65
|
+
newContent.set('nowShowing',this.get('nowShowing')) ;
|
|
66
|
+
this._nowShowingContent = newContent ;
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
init: function() {
|
|
70
|
+
// before calling super, setup the automatically named workspaces.
|
|
71
|
+
if (this.namespace && this.workspaces && this.workspaces.length > 0) {
|
|
72
|
+
var view = this ; var ns = this.namespace ;
|
|
73
|
+
this.workspaces.each(function(key) {
|
|
74
|
+
key = key.toLowerCase() ;
|
|
75
|
+
var tab = window[ns][key.capitalize() + 'Workspace'] ;
|
|
76
|
+
if (tab && !(view[key + 'Tab'])) {
|
|
77
|
+
tab = tab.viewFor(key + '-workspace') ;
|
|
78
|
+
view[key + 'Tab'] = tab ;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var button = $(key) ;
|
|
82
|
+
if (button) view[key + 'Button'] = SC._WorkspaceButton.viewFor(key,{
|
|
83
|
+
workspace: view, workspaceId: key
|
|
84
|
+
}) ;
|
|
85
|
+
}) ;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// go ahead with the rest of this.
|
|
89
|
+
arguments.callee.base.call(this) ;
|
|
90
|
+
|
|
91
|
+
this.elements = this.elements() ;
|
|
92
|
+
|
|
93
|
+
// register workspace route.
|
|
94
|
+
SC.Routes.addRoute(':workspace',this._showWorkspace.bind(this)) ;
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
_showWorkspace: function(params) {
|
|
98
|
+
if (this._tabs[params.workspace]) {
|
|
99
|
+
this.beginPropertyChanges() ;
|
|
100
|
+
this.set('nowShowing',params.workspace) ;
|
|
101
|
+
this.set('options',params) ;
|
|
102
|
+
this.endPropertyChanges() ;
|
|
103
|
+
} else console.log('workspace not found: ' + params.workspace) ;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}) ;
|
|
107
|
+
|
|
108
|
+
SC._WorkspaceButton = SC.ButtonView.extend({
|
|
109
|
+
workspace: null, workspaceId: null,
|
|
110
|
+
action: function() { SC.Routes.set('location',this.workspaceId); },
|
|
111
|
+
isSelectedObserver: function() {
|
|
112
|
+
var parent = this.parentNode ;
|
|
113
|
+
if (parent) Element.setClassName($(parent),'sel',this.get('isSelected'));
|
|
114
|
+
}.observes('isSelected')
|
|
115
|
+
}),
|
|
116
|
+
|
|
117
|
+
// Elements that you want to have swapped in and out can be subclassed from
|
|
118
|
+
// this. Or, you can create your own object. Any elements you want swapped
|
|
119
|
+
// in and out need to be configured as a property named 'somethingElement'.
|
|
120
|
+
SC.WorkspaceTab = SC.View.extend({
|
|
121
|
+
|
|
122
|
+
// ...................................
|
|
123
|
+
// PROPERTIES
|
|
124
|
+
// Override these with your own settings.
|
|
125
|
+
|
|
126
|
+
// modify to include the areas you want loaded in this element.
|
|
127
|
+
areas: ['head','master','detail','dialog','tail'],
|
|
128
|
+
|
|
129
|
+
// the type of view you want your found elements converted into. If you
|
|
130
|
+
// set this to null, the elements will not be converted.
|
|
131
|
+
viewType: SC.View,
|
|
132
|
+
|
|
133
|
+
// Set this to something non-null to show the title in the window.
|
|
134
|
+
title: null,
|
|
135
|
+
|
|
136
|
+
// this should be the portion of the location the user needs to put after
|
|
137
|
+
// the hash to get this workspace to show again in this configuration.
|
|
138
|
+
location: null,
|
|
139
|
+
|
|
140
|
+
// this property will be set by the UI when the user types into the search
|
|
141
|
+
// field. You can observe this property to update your content accordingly.
|
|
142
|
+
filterString: null,
|
|
143
|
+
|
|
144
|
+
// if this workspace is visible, then this property will be set to the
|
|
145
|
+
// id used to show this workspace. It will be set back to null when
|
|
146
|
+
// the workspace is hidden.
|
|
147
|
+
nowShowing: null,
|
|
148
|
+
|
|
149
|
+
// ...................................
|
|
150
|
+
// PRIVATE
|
|
151
|
+
//
|
|
152
|
+
elements: function() {
|
|
153
|
+
var view = this ;
|
|
154
|
+
var ret = [] ;
|
|
155
|
+
this.areas.each(function(area) {
|
|
156
|
+
var el = view.$C(area,1) ;
|
|
157
|
+
if (el) {
|
|
158
|
+
if (this.viewType) el = this.viewType.viewFor(el) ;
|
|
159
|
+
view[area + 'Element'] = el ; ret.push(el) ;
|
|
160
|
+
}
|
|
161
|
+
}) ;
|
|
162
|
+
return ret ;
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
init: function() {
|
|
166
|
+
arguments.callee.base.apply(this,arguments) ;
|
|
167
|
+
this.elements = this.elements() ;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}) ;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Your new SproutCore client application has been created. To access your application, just start sc_sever and visit your client name in the web browser.
|
|
2
|
+
|
|
3
|
+
If you want to change the deployment settings for the application, add a section for your client in your environment.yaml.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
client - Generates a new SproutCore client
|
|
2
|
+
|
|
3
|
+
USAGE:
|
|
4
|
+
|
|
5
|
+
./script/generate sc_client client_name
|
|
6
|
+
|
|
7
|
+
DISCUSSION:
|
|
8
|
+
|
|
9
|
+
This generator will create a new SproutCore-based JavaScript application. After the generator completes, you will be able to begin work immediately.
|
|
10
|
+
|
|
11
|
+
The code created by this generator will appear in a /clients directory. To add models, views, and controllers, you can use the additional generators sc_model, sc_controller, sc_object_controller, sc_collection_controller, and sc_view.
|
|
12
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'sproutcore/generator_helper'
|
|
2
|
+
|
|
3
|
+
class ClientGenerator < RubiGen::Base
|
|
4
|
+
|
|
5
|
+
include SproutCore::GeneratorHelper
|
|
6
|
+
|
|
7
|
+
default_options :author => nil
|
|
8
|
+
|
|
9
|
+
attr_reader :name
|
|
10
|
+
|
|
11
|
+
def initialize(runtime_args, runtime_options = {})
|
|
12
|
+
super
|
|
13
|
+
usage if args.empty?
|
|
14
|
+
@name = args.shift
|
|
15
|
+
extract_options
|
|
16
|
+
assign_names!(@name)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def manifest
|
|
20
|
+
record do |m|
|
|
21
|
+
m.directory 'clients'
|
|
22
|
+
apply_template(m,"clients/#{@name}")
|
|
23
|
+
m.readme '../README'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
def banner
|
|
29
|
+
<<-EOS
|
|
30
|
+
Creates a ...
|
|
31
|
+
|
|
32
|
+
USAGE: #{$0} #{spec.name} name
|
|
33
|
+
EOS
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_options!(opts)
|
|
37
|
+
# opts.separator ''
|
|
38
|
+
# opts.separator 'Options:'
|
|
39
|
+
# For each option below, place the default
|
|
40
|
+
# at the top of the file next to "default_options"
|
|
41
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
|
42
|
+
# "Some comment about this option",
|
|
43
|
+
# "Default: none") { |options[:author]| }
|
|
44
|
+
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def extract_options
|
|
48
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
|
49
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
|
50
|
+
# raw instance variable value.
|
|
51
|
+
# @author = options[:author]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= class_name %>
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
<%= class_name %> = SC.Object.create({
|
|
6
|
+
|
|
7
|
+
// This will create the server for your application. Add any namespaces
|
|
8
|
+
// your model objects are defined in to the prefix array.
|
|
9
|
+
server: SC.Server.create({ prefix: ['<%= class_name %>'] }),
|
|
10
|
+
|
|
11
|
+
// When you are in development mode, this array will be populated with
|
|
12
|
+
// any fixtures you create for testing and loaded automatically in your
|
|
13
|
+
// main method. When in production, this will be an empty array.
|
|
14
|
+
FIXTURES: [],
|
|
15
|
+
|
|
16
|
+
// Any keys in this array will be instantiated automatically from main.
|
|
17
|
+
controllers: [],
|
|
18
|
+
|
|
19
|
+
}) ;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= class_name %> English 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
|
+
// "_String Key": "Localized String"
|
|
13
|
+
}) ;
|
|
14
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= class_name %>
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
// This is the function that will start your app running. The default
|
|
6
|
+
// implementation will load any fixtures you have created then instantiate
|
|
7
|
+
// your controllers and awake the elements on your page.
|
|
8
|
+
//
|
|
9
|
+
// As you develop your application you will probably want to override this.
|
|
10
|
+
// See comments for some pointers on what to do next.
|
|
11
|
+
//
|
|
12
|
+
function main() {
|
|
13
|
+
|
|
14
|
+
// Step 1: Load Your Model Data
|
|
15
|
+
// The default code here will load the fixtures you have defined.
|
|
16
|
+
// Comment out the preload line and add something to refresh from the server
|
|
17
|
+
// when you are ready to pull data from your server.
|
|
18
|
+
<%= class_name %>.server.preload(<%= class_name %>.FIXTURES) ;
|
|
19
|
+
|
|
20
|
+
// TODO: refresh() any collections you have created to get their records.
|
|
21
|
+
// ex: <%= class_name %>.contacts.refresh() ;
|
|
22
|
+
|
|
23
|
+
// Step 2: Instantiate Your Views
|
|
24
|
+
// The default code just activates all the views you have on the page. If
|
|
25
|
+
// your app gets any level of complexity, you should just get the views you
|
|
26
|
+
// need to show the app in the first place, to speed things up.
|
|
27
|
+
SC.page.awake() ;
|
|
28
|
+
|
|
29
|
+
// Step 3. Set the content property on your primary controller.
|
|
30
|
+
// This will make your app come alive!
|
|
31
|
+
|
|
32
|
+
// TODO: Set the content property on your primary controller
|
|
33
|
+
// ex: <%= class_name %>.contactsController.set('content',<%= class_name %>.contacts);
|
|
34
|
+
|
|
35
|
+
} ;
|
|
36
|
+
|
|
37
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
sc_controller - Create a new controller object in your SproutCore client.
|
|
2
|
+
|
|
3
|
+
USAGE:
|
|
4
|
+
|
|
5
|
+
./script/generate controller client_name/controller_name [CLASS]
|
|
6
|
+
|
|
7
|
+
DISCUSSION:
|
|
8
|
+
|
|
9
|
+
This generator will create a new SproutCore object in your client for us as a controller. You should pass as the first parameter your client directory name/the controller you want to create. For example:
|
|
10
|
+
|
|
11
|
+
./script/generate controller todos/task
|
|
12
|
+
|
|
13
|
+
defines a new object called Todos.taskController in the file clients/todos/controllers/task.js.
|
|
14
|
+
|
|
15
|
+
This generator creates objects that inherit from SC.Object. You can override this by passing a classname as the second parameter. You can also use the specialize sc_object_controller and sc_collection_controller generators to create those specific types of controllers.
|
|
16
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'sproutcore/generator_helper'
|
|
2
|
+
|
|
3
|
+
class ControllerGenerator < RubiGen::Base
|
|
4
|
+
|
|
5
|
+
include SproutCore::GeneratorHelper
|
|
6
|
+
|
|
7
|
+
default_options :author => nil
|
|
8
|
+
|
|
9
|
+
attr_reader :name, :client_location
|
|
10
|
+
|
|
11
|
+
def initialize(runtime_args, runtime_options = {})
|
|
12
|
+
super
|
|
13
|
+
usage if args.empty?
|
|
14
|
+
@name = args.shift
|
|
15
|
+
extract_options
|
|
16
|
+
assign_names!(@name)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def manifest
|
|
20
|
+
record do |m|
|
|
21
|
+
fp = client_file_path('controllers','js','controller')
|
|
22
|
+
build_client_directories(m, fp)
|
|
23
|
+
m.template 'controller.js', fp
|
|
24
|
+
|
|
25
|
+
fp = client_file_path('tests/controllers', 'rhtml')
|
|
26
|
+
build_client_directories(m, fp)
|
|
27
|
+
m.template 'test.rhtml', fp
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
protected
|
|
32
|
+
def banner
|
|
33
|
+
<<-EOS
|
|
34
|
+
Creates a SproutCore controller objects
|
|
35
|
+
|
|
36
|
+
USAGE: #{$0} #{spec.name} client_name/controller_name [ClassName]
|
|
37
|
+
EOS
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def add_options!(opts)
|
|
41
|
+
opts.on("-l", '--loc="Location"', String, "Location of build. If not passed, search clients and frameworks dirs", "Default: none") { |options[:loc]| }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def extract_options
|
|
45
|
+
@client_location = options[:loc]
|
|
46
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
|
47
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
|
48
|
+
# raw instance variable value.
|
|
49
|
+
# @author = options[:author]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= controller_class_name %>
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core');
|
|
6
|
+
|
|
7
|
+
/** @class
|
|
8
|
+
|
|
9
|
+
(Document Your View Here)
|
|
10
|
+
|
|
11
|
+
@extends <%= base_class_name 'SC.Object' %>
|
|
12
|
+
@author AuthorName
|
|
13
|
+
@version 0.1
|
|
14
|
+
@static
|
|
15
|
+
*/
|
|
16
|
+
<%= controller_instance_name %> = <%= base_class_name 'SC.Object' %>.create(
|
|
17
|
+
/** @scope <%= controller_instance_name %> */ {
|
|
18
|
+
|
|
19
|
+
// TODO: Add your own code here.
|
|
20
|
+
|
|
21
|
+
}) ;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<%% # ========================================================================
|
|
2
|
+
# <%= controller_class_name %> Unit Test
|
|
3
|
+
# ========================================================================
|
|
4
|
+
%>
|
|
5
|
+
<%% content_for('final') do %>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
|
|
9
|
+
Test.context("<%= controller_class_name %>",{
|
|
10
|
+
|
|
11
|
+
"TODO: Add your own tests here": function() {
|
|
12
|
+
true.shouldEqual(true) ;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}) ;
|
|
16
|
+
|
|
17
|
+
appMain = main; main = null ; // Cancel main() so app does not start
|
|
18
|
+
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<%% end %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
framework - Generates a new SproutCore framework
|
|
2
|
+
|
|
3
|
+
USAGE:
|
|
4
|
+
|
|
5
|
+
./script/generate framework framework_name
|
|
6
|
+
|
|
7
|
+
DISCUSSION:
|
|
8
|
+
|
|
9
|
+
This generator will create a new SproutCore-based JavaScript framework for use by other SproutCore clients. After the generator completes, you will need to add it as a requirement to your configuration.yml.
|
|
10
|
+
|
|
11
|
+
The code created by this generator will appear in a /frameworks directory. To add models, views, and controllers, you can use the additional generators model, controller, object_controller, collection_controller, and view.
|
|
12
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'sproutcore/generator_helper'
|
|
2
|
+
|
|
3
|
+
class FrameworkGenerator < RubiGen::Base
|
|
4
|
+
|
|
5
|
+
include SproutCore::GeneratorHelper
|
|
6
|
+
|
|
7
|
+
default_options :author => nil
|
|
8
|
+
|
|
9
|
+
attr_reader :name
|
|
10
|
+
|
|
11
|
+
def initialize(runtime_args, runtime_options = {})
|
|
12
|
+
super
|
|
13
|
+
usage if args.empty?
|
|
14
|
+
@name = args.shift
|
|
15
|
+
extract_options
|
|
16
|
+
assign_names!(@name)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def manifest
|
|
20
|
+
record do |m|
|
|
21
|
+
m.directory 'frameworks'
|
|
22
|
+
apply_template(m,"frameworks/#{@name}")
|
|
23
|
+
m.readme '../README'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
def banner
|
|
29
|
+
<<-EOS
|
|
30
|
+
Creates a SproutCore framework
|
|
31
|
+
|
|
32
|
+
USAGE: #{$0} #{spec.name} framework_name
|
|
33
|
+
EOS
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_options!(opts)
|
|
37
|
+
# opts.separator ''
|
|
38
|
+
# opts.separator 'Options:'
|
|
39
|
+
# For each option below, place the default
|
|
40
|
+
# at the top of the file next to "default_options"
|
|
41
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
|
42
|
+
# "Some comment about this option",
|
|
43
|
+
# "Default: none") { |options[:author]| }
|
|
44
|
+
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def extract_options
|
|
48
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
|
49
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
|
50
|
+
# raw instance variable value.
|
|
51
|
+
# @author = options[:author]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= class_name %> Framework
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
<%= class_name %> = SC.Object.create({
|
|
6
|
+
|
|
7
|
+
// When you are in development mode, this array will be populated with
|
|
8
|
+
// any fixtures you create for testing and loaded automatically in your
|
|
9
|
+
// main method. When in production, this will be an empty array.
|
|
10
|
+
//
|
|
11
|
+
// You will use this most often when running unit tests in dev mode.
|
|
12
|
+
//
|
|
13
|
+
FIXTURES: [],
|
|
14
|
+
|
|
15
|
+
// Add any global constants or other properties used by the entire
|
|
16
|
+
// framework:
|
|
17
|
+
// CONSTANT_NAME: 'some-value'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
}) ;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= class_name %> English 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
|
+
// "_String Key": "Localized String"
|
|
13
|
+
}) ;
|
|
14
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
sc_view - Create a new view class in your SproutCore client.
|
|
2
|
+
|
|
3
|
+
USAGE:
|
|
4
|
+
|
|
5
|
+
./script/generate view client_name/view_name [CLASS]
|
|
6
|
+
|
|
7
|
+
DISCUSSION:
|
|
8
|
+
|
|
9
|
+
This generator will create a new SproutCore view class in your client. You should pass as the first parameter your client directory name/the view you want to create. For example:
|
|
10
|
+
|
|
11
|
+
./script/generate view todos/task
|
|
12
|
+
|
|
13
|
+
defines a new class called Todos.TaskView in the file clients/todos/views/task.js.
|
|
14
|
+
|
|
15
|
+
This generator creates view that inherit from SC.View but you can override this by passing the name of the view class you want as the second argument.
|
|
16
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'sproutcore/generator_helper'
|
|
2
|
+
|
|
3
|
+
class LanguageGenerator < RubiGen::Base
|
|
4
|
+
|
|
5
|
+
include SproutCore::GeneratorHelper
|
|
6
|
+
|
|
7
|
+
default_options :author => nil
|
|
8
|
+
|
|
9
|
+
attr_reader :name, :client_location
|
|
10
|
+
|
|
11
|
+
def initialize(runtime_args, runtime_options = {})
|
|
12
|
+
super
|
|
13
|
+
usage if args.empty?
|
|
14
|
+
@name = args.shift
|
|
15
|
+
extract_options
|
|
16
|
+
assign_names!(@name)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def manifest
|
|
20
|
+
record do |m|
|
|
21
|
+
fp = client_file_path("#{file_path}.lproj",'js', nil, "#{file_path}/strings")
|
|
22
|
+
build_client_directories(m, fp)
|
|
23
|
+
m.template 'strings.js', fp
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
def banner
|
|
29
|
+
<<-EOS
|
|
30
|
+
Adds a language to a SproutCore project
|
|
31
|
+
|
|
32
|
+
USAGE: #{$0} #{spec.name} client_name/language_name [ClassName]
|
|
33
|
+
EOS
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_options!(opts)
|
|
37
|
+
opts.on("-l", '--loc="Location"', String, "Location of build. If not passed, search clients and frameworks dirs", "Default: none") { |options[:loc]| }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def extract_options
|
|
41
|
+
@client_location = options[:loc]
|
|
42
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
|
43
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
|
44
|
+
# raw instance variable value.
|
|
45
|
+
# @author = options[:author]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// <%= client_namespace %> <%= file_name.capitalize %> Strings
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
// HINT: For your key names, use the english string with an underscore in
|
|
6
|
+
// front.
|
|
7
|
+
Object.extend(String.<%= file_name.capitalize %>,{
|
|
8
|
+
// "_String Key": "Localized String"
|
|
9
|
+
}) ;
|
|
10
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
model - Create a new model class in your SproutCore client.
|
|
2
|
+
|
|
3
|
+
USAGE:
|
|
4
|
+
|
|
5
|
+
./script/generate model client_name/model_name [MODEL_CLASS]
|
|
6
|
+
|
|
7
|
+
DISCUSSION:
|
|
8
|
+
|
|
9
|
+
This generator will create a new SproutCore model file in your client or framework. You should pass as the first parameter your client or framework directory name/the model you want to create. For example:
|
|
10
|
+
|
|
11
|
+
./script/generate model todos/task
|
|
12
|
+
|
|
13
|
+
defines a new class called Todos.Task in the file clients/todos/models/task.js.
|
|
14
|
+
|
|
15
|
+
Likewise:
|
|
16
|
+
|
|
17
|
+
./script/generate model frameworks/shared/task
|
|
18
|
+
|
|
19
|
+
defines a new class called Shared.Task in the file frameworks/shared/models/task.js
|
|
20
|
+
|
|
21
|
+
This generator creates classes that inherit from SC.Record but you can override this by passing the name of the view class you want as the second argument.
|
|
22
|
+
|
|
23
|
+
In addition to creating a model class, this will also create a stub for you to add Fixture data. This is a convenient way to preload your application with data while you develop the client but have not yet connected to your server.
|
|
24
|
+
|