spade 0.0.1
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/.gitignore +14 -0
- data/.gitmodules +15 -0
- data/.rspec +1 -0
- data/Buildfile +18 -0
- data/Gemfile +19 -0
- data/Gemfile.lock +34 -0
- data/README.md +148 -0
- data/Rakefile +9 -0
- data/bin/spade +7 -0
- data/examples/format-app/lib/hello.coffee +1 -0
- data/examples/format-app/lib/main.js +6 -0
- data/examples/format-app/package.json +10 -0
- data/examples/format-app/resources/README.txt +1 -0
- data/examples/format-app/resources/config.json +3 -0
- data/examples/path-test/lib/hello.js +1 -0
- data/examples/path-test/lib/main.js +1 -0
- data/examples/path-test/package.json +5 -0
- data/examples/sc-app/index.html +13 -0
- data/examples/sc-app/lib/main.js +24 -0
- data/examples/sc-app/package.json +8 -0
- data/examples/single-file.js +22 -0
- data/examples/todos/index.html +11 -0
- data/examples/todos/lib/main.js +10 -0
- data/examples/todos/lib/todos.js +93 -0
- data/examples/todos/package.json +10 -0
- data/examples/todos/resources/stylesheets/todos.css +162 -0
- data/examples/todos/resources/templates/todos.handlebars +31 -0
- data/examples/web-app/README.md +83 -0
- data/examples/web-app/index.html +12 -0
- data/examples/web-app/lib/main.js +3 -0
- data/examples/web-app/package.json +6 -0
- data/examples/web-app/tests.html +12 -0
- data/examples/web-app/tests/ct-example-test.js +39 -0
- data/examples/web-app/tests/qunit-test.js +23 -0
- data/lib/index.js +14 -0
- data/lib/node/loader.js +145 -0
- data/lib/node/sandbox.js +34 -0
- data/lib/spade.js +1099 -0
- data/lib/spade.rb +52 -0
- data/lib/spade/bundle.rb +156 -0
- data/lib/spade/cli.rb +14 -0
- data/lib/spade/cli/base.rb +325 -0
- data/lib/spade/cli/owner.rb +45 -0
- data/lib/spade/compiler.rb +34 -0
- data/lib/spade/console.rb +39 -0
- data/lib/spade/context.rb +116 -0
- data/lib/spade/credentials.rb +36 -0
- data/lib/spade/environment.rb +35 -0
- data/lib/spade/exports.rb +71 -0
- data/lib/spade/loader.rb +243 -0
- data/lib/spade/local.rb +53 -0
- data/lib/spade/package.rb +143 -0
- data/lib/spade/reactor.rb +159 -0
- data/lib/spade/remote.rb +75 -0
- data/lib/spade/repository.rb +18 -0
- data/lib/spade/server.rb +54 -0
- data/lib/spade/shell.rb +36 -0
- data/lib/spade/version.rb +3 -0
- data/package.json +27 -0
- data/packages/coffee-script/.gitignore +8 -0
- data/packages/coffee-script/.npmignore +11 -0
- data/packages/coffee-script/Cakefile +229 -0
- data/packages/coffee-script/LICENSE +22 -0
- data/packages/coffee-script/README +47 -0
- data/packages/coffee-script/Rakefile +78 -0
- data/packages/coffee-script/bin/cake +7 -0
- data/packages/coffee-script/bin/coffee +7 -0
- data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
- data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
- data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
- data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
- data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
- data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
- data/packages/coffee-script/documentation/css/docs.css +374 -0
- data/packages/coffee-script/documentation/css/idle.css +64 -0
- data/packages/coffee-script/documentation/docs/browser.html +25 -0
- data/packages/coffee-script/documentation/docs/cake.html +43 -0
- data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
- data/packages/coffee-script/documentation/docs/command.html +161 -0
- data/packages/coffee-script/documentation/docs/docco.css +186 -0
- data/packages/coffee-script/documentation/docs/grammar.html +399 -0
- data/packages/coffee-script/documentation/docs/helpers.html +31 -0
- data/packages/coffee-script/documentation/docs/index.html +3 -0
- data/packages/coffee-script/documentation/docs/lexer.html +490 -0
- data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
- data/packages/coffee-script/documentation/docs/optparse.html +78 -0
- data/packages/coffee-script/documentation/docs/repl.html +24 -0
- data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
- data/packages/coffee-script/documentation/docs/scope.html +54 -0
- data/packages/coffee-script/documentation/docs/underscore.html +295 -0
- data/packages/coffee-script/documentation/images/background.png +0 -0
- data/packages/coffee-script/documentation/images/banding.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
- data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
- data/packages/coffee-script/documentation/images/favicon.ico +0 -0
- data/packages/coffee-script/documentation/images/logo.png +0 -0
- data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
- data/packages/coffee-script/documentation/index.html.erb +1607 -0
- data/packages/coffee-script/documentation/js/aliases.js +17 -0
- data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
- data/packages/coffee-script/documentation/js/block_comment.js +4 -0
- data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
- data/packages/coffee-script/documentation/js/classes.js +44 -0
- data/packages/coffee-script/documentation/js/comparisons.js +3 -0
- data/packages/coffee-script/documentation/js/conditionals.js +12 -0
- data/packages/coffee-script/documentation/js/default_args.js +7 -0
- data/packages/coffee-script/documentation/js/do.js +10 -0
- data/packages/coffee-script/documentation/js/embedded.js +4 -0
- data/packages/coffee-script/documentation/js/existence.js +6 -0
- data/packages/coffee-script/documentation/js/expressions.js +15 -0
- data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
- data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
- data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
- data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
- data/packages/coffee-script/documentation/js/functions.js +7 -0
- data/packages/coffee-script/documentation/js/heredocs.js +2 -0
- data/packages/coffee-script/documentation/js/heregexes.js +2 -0
- data/packages/coffee-script/documentation/js/interpolation.js +4 -0
- data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
- data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
- data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
- data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
- data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
- data/packages/coffee-script/documentation/js/overview.js +35 -0
- data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
- data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
- data/packages/coffee-script/documentation/js/prototypes.js +3 -0
- data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
- data/packages/coffee-script/documentation/js/scope.js +8 -0
- data/packages/coffee-script/documentation/js/slices.js +4 -0
- data/packages/coffee-script/documentation/js/soaks.js +2 -0
- data/packages/coffee-script/documentation/js/splats.js +15 -0
- data/packages/coffee-script/documentation/js/splices.js +3 -0
- data/packages/coffee-script/documentation/js/strings.js +2 -0
- data/packages/coffee-script/documentation/js/switch.js +23 -0
- data/packages/coffee-script/documentation/js/try.js +8 -0
- data/packages/coffee-script/documentation/js/while.js +18 -0
- data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
- data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
- data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
- data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
- data/packages/coffee-script/examples/blocks.coffee +54 -0
- data/packages/coffee-script/examples/code.coffee +167 -0
- data/packages/coffee-script/examples/computer_science/README +4 -0
- data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
- data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
- data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
- data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
- data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
- data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
- data/packages/coffee-script/examples/poignant.coffee +181 -0
- data/packages/coffee-script/examples/potion.coffee +206 -0
- data/packages/coffee-script/examples/underscore.coffee +682 -0
- data/packages/coffee-script/examples/web_server.coffee +12 -0
- data/packages/coffee-script/extras/EXTRAS +7 -0
- data/packages/coffee-script/extras/coffee-script.js +8 -0
- data/packages/coffee-script/extras/jsl.conf +44 -0
- data/packages/coffee-script/index.html +2515 -0
- data/packages/coffee-script/lib/browser.js +52 -0
- data/packages/coffee-script/lib/cake.js +76 -0
- data/packages/coffee-script/lib/coffee-script.js +82 -0
- data/packages/coffee-script/lib/command.js +263 -0
- data/packages/coffee-script/lib/grammar.js +581 -0
- data/packages/coffee-script/lib/helpers.js +66 -0
- data/packages/coffee-script/lib/index.js +8 -0
- data/packages/coffee-script/lib/lexer.js +633 -0
- data/packages/coffee-script/lib/nodes.js +2165 -0
- data/packages/coffee-script/lib/optparse.js +111 -0
- data/packages/coffee-script/lib/parser.js +649 -0
- data/packages/coffee-script/lib/repl.js +42 -0
- data/packages/coffee-script/lib/rewriter.js +353 -0
- data/packages/coffee-script/lib/scope.js +120 -0
- data/packages/coffee-script/lib/spade-format.js +45 -0
- data/packages/coffee-script/package.json +26 -0
- data/packages/coffee-script/src/browser.coffee +43 -0
- data/packages/coffee-script/src/cake.coffee +69 -0
- data/packages/coffee-script/src/coffee-script.coffee +92 -0
- data/packages/coffee-script/src/command.coffee +214 -0
- data/packages/coffee-script/src/grammar.coffee +590 -0
- data/packages/coffee-script/src/helpers.coffee +56 -0
- data/packages/coffee-script/src/index.coffee +2 -0
- data/packages/coffee-script/src/lexer.coffee +653 -0
- data/packages/coffee-script/src/nodes.coffee +1754 -0
- data/packages/coffee-script/src/optparse.coffee +99 -0
- data/packages/coffee-script/src/repl.coffee +42 -0
- data/packages/coffee-script/src/rewriter.coffee +326 -0
- data/packages/coffee-script/src/scope.coffee +94 -0
- data/packages/coffee-script/test/arguments.coffee +127 -0
- data/packages/coffee-script/test/assignment.coffee +98 -0
- data/packages/coffee-script/test/break.coffee +18 -0
- data/packages/coffee-script/test/comments.coffee +201 -0
- data/packages/coffee-script/test/conditionals.coffee +181 -0
- data/packages/coffee-script/test/exception_handling.coffee +90 -0
- data/packages/coffee-script/test/helpers.coffee +96 -0
- data/packages/coffee-script/test/importing.coffee +18 -0
- data/packages/coffee-script/test/operators.coffee +225 -0
- data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
- data/packages/coffee-script/test/regular_expressions.coffee +56 -0
- data/packages/coffee-script/test/test.html +123 -0
- data/packages/coffee-script/test/test_chaining.coffee +77 -0
- data/packages/coffee-script/test/test_classes.coffee +372 -0
- data/packages/coffee-script/test/test_compilation.coffee +26 -0
- data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
- data/packages/coffee-script/test/test_existence.coffee +165 -0
- data/packages/coffee-script/test/test_functions.coffee +379 -0
- data/packages/coffee-script/test/test_heredocs.coffee +111 -0
- data/packages/coffee-script/test/test_literals.coffee +270 -0
- data/packages/coffee-script/test/test_option_parser.coffee +27 -0
- data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
- data/packages/coffee-script/test/test_returns.coffee +63 -0
- data/packages/coffee-script/test/test_splats.coffee +102 -0
- data/packages/coffee-script/test/test_strings.coffee +118 -0
- data/packages/coffee-script/test/test_switch.coffee +103 -0
- data/packages/coffee-script/test/test_while.coffee +71 -0
- data/packages/core-test/.gitignore +2 -0
- data/packages/core-test/Buildfile +15 -0
- data/packages/core-test/CHANGELOG.md +24 -0
- data/packages/core-test/__preamble__.js +34 -0
- data/packages/core-test/bin/cot +3 -0
- data/packages/core-test/lib/assert.js +306 -0
- data/packages/core-test/lib/cli.js +258 -0
- data/packages/core-test/lib/core.js +311 -0
- data/packages/core-test/lib/loggers/browser.js +390 -0
- data/packages/core-test/lib/loggers/console.js +235 -0
- data/packages/core-test/lib/loggers/default.js +272 -0
- data/packages/core-test/lib/loggers/dummy.js +168 -0
- data/packages/core-test/lib/main.js +22 -0
- data/packages/core-test/lib/private/jquery.js +6079 -0
- data/packages/core-test/lib/qunit.js +159 -0
- data/packages/core-test/lib/runner.js +65 -0
- data/packages/core-test/lib/spec.js +302 -0
- data/packages/core-test/lib/sync.js +64 -0
- data/packages/core-test/lib/system/dump.js +208 -0
- data/packages/core-test/lib/system/equiv.js +199 -0
- data/packages/core-test/lib/system/ext.js +62 -0
- data/packages/core-test/lib/system/module.js +162 -0
- data/packages/core-test/lib/system/plan.js +223 -0
- data/packages/core-test/lib/system/stub.js +98 -0
- data/packages/core-test/lib/system/test.js +373 -0
- data/packages/core-test/lib/test.js +69 -0
- data/packages/core-test/lib/utils.js +256 -0
- data/packages/core-test/package.json +10 -0
- data/packages/core-test/resources/additions.css +8 -0
- data/packages/core-test/resources/runner.css +177 -0
- data/packages/core-test/tests/apis/commonjs-test.js +102 -0
- data/packages/core-test/tests/apis/core-test.js +154 -0
- data/packages/core-test/tests/apis/qunit-test.js +244 -0
- data/packages/core-test/tests/apis/spec-test.js +344 -0
- data/packages/core-test/tests/system/equiv/qunit-test.js +1400 -0
- data/packages/core-test/tests/system/test/assert-test.js +86 -0
- data/packages/core-test/tests/system/test/error-test.js +62 -0
- data/packages/core-test/tests/system/test/schedule-test.js +210 -0
- data/packages/core-test/tests/utils/fmt-test.js +24 -0
- data/packages/handlebars/Gemfile +4 -0
- data/packages/handlebars/README.markdown +205 -0
- data/packages/handlebars/Rakefile +65 -0
- data/packages/handlebars/lib/handlebars.js +19 -0
- data/packages/handlebars/lib/handlebars/ast.js +88 -0
- data/packages/handlebars/lib/handlebars/compiler.js +116 -0
- data/packages/handlebars/lib/handlebars/debug.js +25 -0
- data/packages/handlebars/lib/handlebars/printer.js +114 -0
- data/packages/handlebars/lib/handlebars/runtime.js +280 -0
- data/packages/handlebars/lib/handlebars/utils.js +61 -0
- data/packages/handlebars/lib/handlebars/visitor.js +14 -0
- data/packages/handlebars/lib/handlebars/vm.js +634 -0
- data/packages/handlebars/spec/acceptance_spec.rb +100 -0
- data/packages/handlebars/spec/parser_spec.rb +181 -0
- data/packages/handlebars/spec/qunit_spec.js +497 -0
- data/packages/handlebars/spec/spec_helper.rb +107 -0
- data/packages/handlebars/spec/tokenizer_spec.rb +145 -0
- data/packages/handlebars/src/handlebars.l +27 -0
- data/packages/handlebars/src/handlebars.yy +79 -0
- data/packages/handlebars/test.js +56 -0
- data/packages/ivory/LICENSE.txt +1 -0
- data/packages/ivory/README.md +19 -0
- data/packages/ivory/lib/buffer.js +111 -0
- data/packages/ivory/lib/events.js +137 -0
- data/packages/ivory/lib/fs.js +266 -0
- data/packages/ivory/lib/main.js +13 -0
- data/packages/ivory/lib/path.js +158 -0
- data/packages/ivory/lib/ruby/buffer.rb +145 -0
- data/packages/ivory/lib/ruby/constants.rb +585 -0
- data/packages/ivory/lib/ruby/events.rb +32 -0
- data/packages/ivory/lib/ruby/fs.rb +245 -0
- data/packages/ivory/lib/ruby/process.rb +28 -0
- data/packages/ivory/lib/stream.js +115 -0
- data/packages/ivory/lib/util.js +414 -0
- data/packages/ivory/package.json +11 -0
- data/packages/jquery-core/lib/main.js +897 -0
- data/packages/jquery-core/package.json +9 -0
- data/packages/jquery/main.js +7179 -0
- data/packages/jquery/package.json +10 -0
- data/packages/json/lib/main.js +14 -0
- data/packages/json/package.json +8 -0
- data/packages/lproj/README.md +77 -0
- data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
- data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
- data/packages/lproj/examples/demo-app/index.html +8 -0
- data/packages/lproj/examples/demo-app/lib/main.js +7 -0
- data/packages/lproj/examples/demo-app/package.json +9 -0
- data/packages/lproj/lib/main.js +78 -0
- data/packages/lproj/lib/strings-format.js +6 -0
- data/packages/lproj/package.json +9 -0
- data/packages/optparse/README.md +161 -0
- data/packages/optparse/TODO +1 -0
- data/packages/optparse/examples/browser-test.html +75 -0
- data/packages/optparse/examples/nodejs-test.js +90 -0
- data/packages/optparse/lib/optparse.js +309 -0
- data/packages/optparse/package.json +13 -0
- data/packages/optparse/seed.yml +5 -0
- data/packages/sproutcore-bootstrap/lib/main.js +11 -0
- data/packages/sproutcore-bootstrap/package.json +15 -0
- data/packages/sproutcore-corefoundation/lib/main.js +66 -0
- data/packages/sproutcore-corefoundation/lib/tests.js +74 -0
- data/packages/sproutcore-corefoundation/package.json +27 -0
- data/packages/sproutcore-corefoundation/tests.html +12 -0
- data/packages/sproutcore-datastore/lib/main.js +23 -0
- data/packages/sproutcore-datastore/package.json +16 -0
- data/packages/sproutcore-datetime/lib/main.js +6 -0
- data/packages/sproutcore-datetime/package.json +16 -0
- data/packages/sproutcore-handlebars/lib/handlebars.js +5 -0
- data/packages/sproutcore-handlebars/lib/main.js +15 -0
- data/packages/sproutcore-handlebars/package.json +17 -0
- data/packages/sproutcore-jquery/lib/main.js +10 -0
- data/packages/sproutcore-jquery/package.json +12 -0
- data/packages/sproutcore-preprocessor/bin/chance +64 -0
- data/packages/sproutcore-preprocessor/lib/css.js +21 -0
- data/packages/sproutcore-preprocessor/lib/main.js +1 -0
- data/packages/sproutcore-preprocessor/lib/preprocessor.js +12 -0
- data/packages/sproutcore-preprocessor/lib/sc_static.js +9 -0
- data/packages/sproutcore-preprocessor/package.json +18 -0
- data/packages/sproutcore-runtime/lib/main.js +37 -0
- data/packages/sproutcore-runtime/package.json +21 -0
- data/packages/text/lib/main.js +8 -0
- data/packages/text/package.json +9 -0
- data/packages/web-file/README.md +7 -0
- data/packages/web-file/lib/errors.js +32 -0
- data/packages/web-file/lib/file-reader.js +10 -0
- data/packages/web-file/lib/file-system.js +234 -0
- data/packages/web-file/lib/file-writer.js +10 -0
- data/packages/web-file/lib/file.js +9 -0
- data/packages/web-file/lib/main.js +34 -0
- data/packages/web-file/lib/platform.js +25 -0
- data/packages/web-file/lib/ruby/file.rb +252 -0
- data/packages/web-file/lib/ruby/file_reader.rb +69 -0
- data/packages/web-file/lib/ruby/file_system.rb +134 -0
- data/packages/web-file/lib/ruby/file_writer.rb +78 -0
- data/packages/web-file/package.json +12 -0
- data/packages/web-typed-array/README.md +7 -0
- data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
- data/packages/web-typed-array/lib/array-buffer.js +7 -0
- data/packages/web-typed-array/lib/main.js +33 -0
- data/packages/web-typed-array/lib/platform.js +20 -0
- data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
- data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
- data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
- data/packages/web-typed-array/lib/typed-array.js +26 -0
- data/packages/web-typed-array/package.json +9 -0
- data/spade.gemspec +30 -0
- data/spec/cli/build_spec.rb +59 -0
- data/spec/cli/install_spec.rb +106 -0
- data/spec/cli/installed_spec.rb +55 -0
- data/spec/cli/list_spec.rb +75 -0
- data/spec/cli/login_spec.rb +76 -0
- data/spec/cli/owner_spec.rb +115 -0
- data/spec/cli/push_spec.rb +74 -0
- data/spec/cli/uninstall_spec.rb +58 -0
- data/spec/cli/unpack_spec.rb +73 -0
- data/spec/credentials_spec.rb +24 -0
- data/spec/fixtures/coffee/bin/cake +0 -0
- data/spec/fixtures/coffee/bin/coffee +0 -0
- data/spec/fixtures/coffee/lib/coffee.js +0 -0
- data/spec/fixtures/coffee/lib/coffee.png +0 -0
- data/spec/fixtures/coffee/lib/coffee/base.js +0 -0
- data/spec/fixtures/coffee/lib/coffee/mocha/chai.js +0 -0
- data/spec/fixtures/coffee/qunit/coffee/test.js +0 -0
- data/spec/fixtures/coffee/qunit/test.js +0 -0
- data/spec/fixtures/coffee/qunit/test.log +0 -0
- data/spec/fixtures/package.json +25 -0
- data/spec/gauntlet_spec.rb +30 -0
- data/spec/javascript/async-test.js +123 -0
- data/spec/javascript/compiler/javascript.js +13 -0
- data/spec/javascript/compiler/ruby.js +14 -0
- data/spec/javascript/loader-test.js +64 -0
- data/spec/javascript/normalize-test.js +59 -0
- data/spec/javascript/packages-test.js +44 -0
- data/spec/javascript/relative-require-test.js +72 -0
- data/spec/javascript/require-test.js +56 -0
- data/spec/javascript/sandbox/compile.js +37 -0
- data/spec/javascript/sandbox/creation.js +44 -0
- data/spec/javascript/sandbox/format.js +79 -0
- data/spec/javascript/sandbox/misc.js +57 -0
- data/spec/javascript/sandbox/preprocessor.js +81 -0
- data/spec/javascript/sandbox/require.js +48 -0
- data/spec/javascript/sandbox/run-command.js +21 -0
- data/spec/javascript/spade/externs.js +14 -0
- data/spec/javascript/spade/load-factory.js +15 -0
- data/spec/javascript/spade/misc.js +23 -0
- data/spec/javascript/spade/ready.js +12 -0
- data/spec/javascript/spade/register.js +13 -0
- data/spec/javascript_spec.rb +7 -0
- data/spec/package_spec.rb +257 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/cli.rb +94 -0
- data/spec/support/core_test.rb +52 -0
- data/spec/support/fake.rb +42 -0
- data/spec/support/fake_gem_server.rb +50 -0
- data/spec/support/fake_gemcutter.rb +29 -0
- data/spec/support/matchers.rb +31 -0
- data/spec/support/path.rb +54 -0
- data/sproutcore/.gitignore +13 -0
- data/sproutcore/Buildfile +112 -0
- data/sproutcore/CHANGELOG.md +232 -0
- data/sproutcore/README.md +68 -0
- data/sproutcore/apps/docs/core.js +27 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Preview.pdf +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/data.plist +14378 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image10.png +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image11.png +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image13.png +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image14.png +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image8.png +0 -0
- data/sproutcore/apps/docs/design/Doc Viewer.graffle/image9.tiff +0 -0
- data/sproutcore/apps/docs/english.lproj/loading.rhtml +9 -0
- data/sproutcore/apps/docs/english.lproj/main_page.js +22 -0
- data/sproutcore/apps/docs/english.lproj/strings.js +15 -0
- data/sproutcore/apps/docs/main.js +30 -0
- data/sproutcore/apps/greenhouse/README +18 -0
- data/sproutcore/apps/greenhouse/TODO +56 -0
- data/sproutcore/apps/greenhouse/beautify.js +1058 -0
- data/sproutcore/apps/greenhouse/controllers/design.js +20 -0
- data/sproutcore/apps/greenhouse/controllers/file.js +35 -0
- data/sproutcore/apps/greenhouse/controllers/files.js +40 -0
- data/sproutcore/apps/greenhouse/controllers/layout.js +53 -0
- data/sproutcore/apps/greenhouse/controllers/library.js +194 -0
- data/sproutcore/apps/greenhouse/controllers/page.js +18 -0
- data/sproutcore/apps/greenhouse/controllers/property.js +19 -0
- data/sproutcore/apps/greenhouse/controllers/property_editor.js +17 -0
- data/sproutcore/apps/greenhouse/controllers/target.js +20 -0
- data/sproutcore/apps/greenhouse/controllers/targets.js +43 -0
- data/sproutcore/apps/greenhouse/controllers/view_configs.js +100 -0
- data/sproutcore/apps/greenhouse/core.js +65 -0
- data/sproutcore/apps/greenhouse/core_file.js +124 -0
- data/sproutcore/apps/greenhouse/data_source.js +250 -0
- data/sproutcore/apps/greenhouse/english.lproj/app_page.js +399 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/app-selector.css +107 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/button.css +314 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/dock.css +90 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/general.css +51 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/main-page.css +93 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/menu.css +49 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/modal.css +41 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/picker.css +195 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/search.css +60 -0
- data/sproutcore/apps/greenhouse/english.lproj/css/text-field.css +67 -0
- data/sproutcore/apps/greenhouse/english.lproj/dialogs.js +303 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500.eot +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500.otf +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500.woff +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500_italic.eot +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500_italic.otf +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/fonts/museosans_500_italic.woff +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/app-selector/choose-app.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/app-selector/list-item-sel.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/regular-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/regular-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/capsule/sel-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/active-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/disabled-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/regular-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/regular-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/regular-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/dark/sel-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/active-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/disabled-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/regular-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/sel-active-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/sel-disabled-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/shared/sel-m.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/regular-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/regular-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-active-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-active-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-disabled-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-disabled-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/buttons/square/sel-r.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/actions-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/actions.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/inspector-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/inspector.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/library-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/library.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/projects-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/projects.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/run-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/run.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/save-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/icons/save.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/logos/greenhouse-l.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/logos/greenhouse-s.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/logos/sproutcore.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/main-bg.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/bottom-left.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/bottom-right.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/bottom.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/close-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/close.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/left.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/pointer-bottom.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/pointer-left.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/pointer-right.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/pointer-top.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/right.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/search-active.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/search.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/top-left.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/top-right.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/picker/top.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/images/toolbar-bg.png +0 -0
- data/sproutcore/apps/greenhouse/english.lproj/inspectors.js +365 -0
- data/sproutcore/apps/greenhouse/english.lproj/loading.rhtml +9 -0
- data/sproutcore/apps/greenhouse/english.lproj/main_page.js +95 -0
- data/sproutcore/apps/greenhouse/english.lproj/strings.js +93 -0
- data/sproutcore/apps/greenhouse/fixtures/file.js +35 -0
- data/sproutcore/apps/greenhouse/main.js +28 -0
- data/sproutcore/apps/greenhouse/mixins/drop_down.js +97 -0
- data/sproutcore/apps/greenhouse/models/design.js +26 -0
- data/sproutcore/apps/greenhouse/models/dir.js +93 -0
- data/sproutcore/apps/greenhouse/models/file.js +51 -0
- data/sproutcore/apps/greenhouse/models/target.js +82 -0
- data/sproutcore/apps/greenhouse/models/view_config.js +49 -0
- data/sproutcore/apps/greenhouse/resources/test_page.js +37 -0
- data/sproutcore/apps/greenhouse/states/inspector.js +152 -0
- data/sproutcore/apps/greenhouse/states/library.js +142 -0
- data/sproutcore/apps/greenhouse/states/main.js +283 -0
- data/sproutcore/apps/greenhouse/states/modals.js +299 -0
- data/sproutcore/apps/greenhouse/states/ready.js +235 -0
- data/sproutcore/apps/greenhouse/tests/controllers/design.js +15 -0
- data/sproutcore/apps/greenhouse/tests/controllers/designs.js +15 -0
- data/sproutcore/apps/greenhouse/tests/controllers/file.js +15 -0
- data/sproutcore/apps/greenhouse/tests/controllers/files.js +15 -0
- data/sproutcore/apps/greenhouse/tests/models/file.js +15 -0
- data/sproutcore/apps/greenhouse/tests/models/view_config.js +15 -0
- data/sproutcore/apps/greenhouse/tests/views/list_item.js +16 -0
- data/sproutcore/apps/greenhouse/tests/views/plist_item.js +20 -0
- data/sproutcore/apps/greenhouse/theme.js +25 -0
- data/sproutcore/apps/greenhouse/views/anchor.js +277 -0
- data/sproutcore/apps/greenhouse/views/application_list_item.js +19 -0
- data/sproutcore/apps/greenhouse/views/event_blocker.js +32 -0
- data/sproutcore/apps/greenhouse/views/label_designer.js +16 -0
- data/sproutcore/apps/greenhouse/views/list_item.js +42 -0
- data/sproutcore/apps/greenhouse/views/plist_item.js +178 -0
- data/sproutcore/apps/greenhouse/views/simple_button.js +157 -0
- data/sproutcore/apps/greenhouse/views/tear_off_picker.js +56 -0
- data/sproutcore/apps/greenhouse/views/web.js +44 -0
- data/sproutcore/apps/test_controls/Buildfile +0 -0
- data/sproutcore/apps/test_controls/controllers/buttons.js +21 -0
- data/sproutcore/apps/test_controls/controllers/categories.js +108 -0
- data/sproutcore/apps/test_controls/controllers/category.js +36 -0
- data/sproutcore/apps/test_controls/core.js +29 -0
- data/sproutcore/apps/test_controls/main.js +14 -0
- data/sproutcore/apps/test_controls/resources/buttons_page.js +142 -0
- data/sproutcore/apps/test_controls/resources/checkboxes_page.js +45 -0
- data/sproutcore/apps/test_controls/resources/flow_layout_page.js +84 -0
- data/sproutcore/apps/test_controls/resources/list_page.js +40 -0
- data/sproutcore/apps/test_controls/resources/loading.rhtml +9 -0
- data/sproutcore/apps/test_controls/resources/main_page.css +60 -0
- data/sproutcore/apps/test_controls/resources/main_page.js +145 -0
- data/sproutcore/apps/test_controls/resources/progress_page.js +32 -0
- data/sproutcore/apps/test_controls/resources/radio_page.js +48 -0
- data/sproutcore/apps/test_controls/resources/scroll_page.js +76 -0
- data/sproutcore/apps/test_controls/resources/segmented_page.js +98 -0
- data/sproutcore/apps/test_controls/resources/select_page.js +60 -0
- data/sproutcore/apps/test_controls/resources/sliders_page.js +53 -0
- data/sproutcore/apps/test_controls/resources/strings.js +50 -0
- data/sproutcore/apps/test_controls/resources/tab_page.js +44 -0
- data/sproutcore/apps/test_controls/resources/text_field_page.js +41 -0
- data/sproutcore/apps/test_controls/theme.js +34 -0
- data/sproutcore/apps/tests/controllers/detail.js +25 -0
- data/sproutcore/apps/tests/controllers/source.js +29 -0
- data/sproutcore/apps/tests/controllers/target.js +26 -0
- data/sproutcore/apps/tests/controllers/targets.js +86 -0
- data/sproutcore/apps/tests/controllers/tests.js +33 -0
- data/sproutcore/apps/tests/core.js +133 -0
- data/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
- data/sproutcore/apps/tests/english.lproj/main_page.css +48 -0
- data/sproutcore/apps/tests/english.lproj/main_page.js +233 -0
- data/sproutcore/apps/tests/english.lproj/strings.js +26 -0
- data/sproutcore/apps/tests/main.js +27 -0
- data/sproutcore/apps/tests/states/no_targets.js +26 -0
- data/sproutcore/apps/tests/states/ready.js +56 -0
- data/sproutcore/apps/tests/states/ready_detail.js +41 -0
- data/sproutcore/apps/tests/states/ready_empty.js +48 -0
- data/sproutcore/apps/tests/states/ready_list.js +41 -0
- data/sproutcore/apps/tests/states/ready_loading.js +44 -0
- data/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
- data/sproutcore/apps/tests/states/start.js +39 -0
- data/sproutcore/apps/tests/tests/controllers/detail.js +15 -0
- data/sproutcore/apps/tests/tests/controllers/source.js +15 -0
- data/sproutcore/apps/tests/tests/controllers/target.js +15 -0
- data/sproutcore/apps/tests/tests/controllers/targets.js +15 -0
- data/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
- data/sproutcore/apps/tests/tests/models/target.js +15 -0
- data/sproutcore/apps/tests/tests/models/test.js +15 -0
- data/sproutcore/apps/tests/tests/views/offset_checkbox.js +15 -0
- data/sproutcore/apps/tests/views/offset_checkbox.js +26 -0
- data/sproutcore/apps/welcome/controllers/targets.js +56 -0
- data/sproutcore/apps/welcome/core.js +30 -0
- data/sproutcore/apps/welcome/english.lproj/images/main-bg.png +0 -0
- data/sproutcore/apps/welcome/english.lproj/loading.rhtml +10 -0
- data/sproutcore/apps/welcome/english.lproj/main_page.css +25 -0
- data/sproutcore/apps/welcome/english.lproj/main_page.js +67 -0
- data/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
- data/sproutcore/apps/welcome/main.js +19 -0
- data/sproutcore/apps/welcome/tests/controllers/targets.js +15 -0
- data/sproutcore/design/CollectionView State Charts.graffle +4848 -0
- data/sproutcore/design/Design Charts.graffle +16845 -0
- data/sproutcore/design/Record State Table.numbers +0 -0
- data/sproutcore/design/SproutCore Datastore Design.graffle/QuickLook/Preview.pdf +0 -0
- data/sproutcore/design/SproutCore Datastore Design.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/sproutcore/design/SproutCore Datastore Design.graffle/data.plist +19588 -0
- data/sproutcore/design/SproutCore Datastore Design.graffle/image8.png +0 -0
- data/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Preview.pdf +0 -0
- data/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/sproutcore/design/SproutCore Design Template.graffle/data.plist +1452 -0
- data/sproutcore/design/SproutCore Design Template.graffle/image8.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/QuickLook/Preview.pdf +0 -0
- data/sproutcore/design/TestRunner Design.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/sproutcore/design/TestRunner Design.graffle/data.plist +24187 -0
- data/sproutcore/design/TestRunner Design.graffle/image10.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image11.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image13.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image15.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image16.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image17.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image18.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image19.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image22.tiff +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image23.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image24.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image25.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image30.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image31.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image8.png +0 -0
- data/sproutcore/design/TestRunner Design.graffle/image9.png +0 -0
- data/sproutcore/design/greenhouse-statechart.graffle +9025 -0
- data/sproutcore/design/greenhouse-statechart.pdf +0 -0
- data/sproutcore/design/iphone-webapp-loading.psd +0 -0
- data/sproutcore/frameworks/animation/Buildfile +3 -0
- data/sproutcore/frameworks/animation/LICENSE +25 -0
- data/sproutcore/frameworks/animation/README.md +79 -0
- data/sproutcore/frameworks/animation/core.js +1206 -0
- data/sproutcore/frameworks/animation/tests/core.js +152 -0
- data/sproutcore/frameworks/bootstrap/README +9 -0
- data/sproutcore/frameworks/bootstrap/core.js +7 -0
- data/sproutcore/frameworks/bootstrap/setup_body_class_names.js +10 -0
- data/sproutcore/frameworks/bootstrap/system/bench.js +14 -0
- data/sproutcore/frameworks/bootstrap/system/browser.js +65 -0
- data/sproutcore/frameworks/bootstrap/system/loader.js +50 -0
- data/sproutcore/frameworks/bootstrap/tests/system/browser.js +187 -0
- data/sproutcore/frameworks/core_foundation/.greenhouseconf +33 -0
- data/sproutcore/frameworks/core_foundation/controllers/array.js +498 -0
- data/sproutcore/frameworks/core_foundation/controllers/controller.js +44 -0
- data/sproutcore/frameworks/core_foundation/controllers/object.js +342 -0
- data/sproutcore/frameworks/core_foundation/core.js +201 -0
- data/sproutcore/frameworks/core_foundation/ext/object.js +83 -0
- data/sproutcore/frameworks/core_foundation/ext/run_loop.js +163 -0
- data/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +110 -0
- data/sproutcore/frameworks/core_foundation/mixins/responder_context.js +269 -0
- data/sproutcore/frameworks/core_foundation/mixins/selection_support.js +250 -0
- data/sproutcore/frameworks/core_foundation/mixins/string.js +163 -0
- data/sproutcore/frameworks/core_foundation/panes/keyboard.js +68 -0
- data/sproutcore/frameworks/core_foundation/panes/layout.js +108 -0
- data/sproutcore/frameworks/core_foundation/panes/main.js +52 -0
- data/sproutcore/frameworks/core_foundation/panes/manipulation.js +27 -0
- data/sproutcore/frameworks/core_foundation/panes/pane.js +672 -0
- data/sproutcore/frameworks/core_foundation/panes/template.js +24 -0
- data/sproutcore/frameworks/core_foundation/panes/visibility.js +11 -0
- data/sproutcore/frameworks/core_foundation/protocols/observable_protocol.js +40 -0
- data/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +131 -0
- data/sproutcore/frameworks/core_foundation/resources/core.css +371 -0
- data/sproutcore/frameworks/core_foundation/resources/view.css +57 -0
- data/sproutcore/frameworks/core_foundation/system/application.js +35 -0
- data/sproutcore/frameworks/core_foundation/system/browser.js +36 -0
- data/sproutcore/frameworks/core_foundation/system/builder.js +210 -0
- data/sproutcore/frameworks/core_foundation/system/core_query.js +141 -0
- data/sproutcore/frameworks/core_foundation/system/cursor.js +131 -0
- data/sproutcore/frameworks/core_foundation/system/device.js +210 -0
- data/sproutcore/frameworks/core_foundation/system/event.js +914 -0
- data/sproutcore/frameworks/core_foundation/system/json.js +515 -0
- data/sproutcore/frameworks/core_foundation/system/locale.js +293 -0
- data/sproutcore/frameworks/core_foundation/system/page.js +108 -0
- data/sproutcore/frameworks/core_foundation/system/platform.js +399 -0
- data/sproutcore/frameworks/core_foundation/system/ready.js +77 -0
- data/sproutcore/frameworks/core_foundation/system/render_context.js +1063 -0
- data/sproutcore/frameworks/core_foundation/system/responder.js +124 -0
- data/sproutcore/frameworks/core_foundation/system/root_responder.js +2173 -0
- data/sproutcore/frameworks/core_foundation/system/selection_set.js +695 -0
- data/sproutcore/frameworks/core_foundation/system/sparse_array.js +393 -0
- data/sproutcore/frameworks/core_foundation/system/theme.js +316 -0
- data/sproutcore/frameworks/core_foundation/system/timer.js +553 -0
- data/sproutcore/frameworks/core_foundation/system/utils.js +151 -0
- data/sproutcore/frameworks/core_foundation/system/utils/rect.js +98 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +218 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/array/enum_case.js +206 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/array/null_case.js +64 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +344 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/array/single_case.js +136 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/object/empty_case.js +82 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/object/multiple_case.js +111 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +193 -0
- data/sproutcore/frameworks/core_foundation/tests/controllers/object/single_enumerable_case.js +265 -0
- data/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +75 -0
- data/sproutcore/frameworks/core_foundation/tests/mixins/string.js +55 -0
- data/sproutcore/frameworks/core_foundation/tests/panes/template.js +14 -0
- data/sproutcore/frameworks/core_foundation/tests/system/builder.js +42 -0
- data/sproutcore/frameworks/core_foundation/tests/system/core_query/within.js +65 -0
- data/sproutcore/frameworks/core_foundation/tests/system/json.js +14 -0
- data/sproutcore/frameworks/core_foundation/tests/system/locale.js +134 -0
- data/sproutcore/frameworks/core_foundation/tests/system/ready/done.js +32 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/begin.js +47 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/element.js +44 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +124 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/get.js +51 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_attr.js +50 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_basic.js +28 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +177 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +109 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/init.js +55 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/join.js +28 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/push_text.js +74 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/tag.js +46 -0
- data/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +218 -0
- data/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeKeyPane.js +124 -0
- data/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +68 -0
- data/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMenuPane.js +48 -0
- data/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +101 -0
- data/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +288 -0
- data/sproutcore/frameworks/core_foundation/tests/system/selection_set/add.js +92 -0
- data/sproutcore/frameworks/core_foundation/tests/system/selection_set/copy.js +17 -0
- data/sproutcore/frameworks/core_foundation/tests/system/selection_set/indexSetForSource.js +98 -0
- data/sproutcore/frameworks/core_foundation/tests/system/selection_set/isEqual.js +60 -0
- data/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +111 -0
- data/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +194 -0
- data/sproutcore/frameworks/core_foundation/tests/system/theme.js +77 -0
- data/sproutcore/frameworks/core_foundation/tests/system/timer/invalidate.js +38 -0
- data/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +203 -0
- data/sproutcore/frameworks/core_foundation/tests/system/timer/isPaused.js +71 -0
- data/sproutcore/frameworks/core_foundation/tests/system/timer/performAction.js +69 -0
- data/sproutcore/frameworks/core_foundation/tests/system/timer/schedule.js +170 -0
- data/sproutcore/frameworks/core_foundation/tests/system/utils/normalizeURL.js +18 -0
- data/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +271 -0
- data/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +99 -0
- data/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +43 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +218 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +20 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/firstResponder.js +148 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/keyPane.js +133 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/layout.js +31 -0
- data/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +206 -0
- data/sproutcore/frameworks/core_foundation/tests/views/template/checkbox_support.js +32 -0
- data/sproutcore/frameworks/core_foundation/tests/views/template/text_field_support.js +73 -0
- data/sproutcore/frameworks/core_foundation/tests/views/template_view/collection.js +111 -0
- data/sproutcore/frameworks/core_foundation/tests/views/template_view/core.js +100 -0
- data/sproutcore/frameworks/core_foundation/tests/views/template_view/handlebars.js +580 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +376 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/build.js +85 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +89 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +117 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +248 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/convertLayouts.js +145 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +132 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/createLayer.js +97 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/destroyLayer.js +83 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +51 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/findLayerInParentLayer.js +50 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/init.js +50 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +217 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/isVisible.js +79 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/isVisibleInWindow.js +116 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +22 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/layer.js +150 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +162 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +735 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/parentViewDidChange.js +67 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/prepareContext.js +203 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/removeChild.js +189 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/render.js +125 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/render_delegate_support.js +163 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/replaceChild.js +29 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +21 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/theme.js +43 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/updateLayer.js +148 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/updateLayerLocation.js +213 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/view.js +64 -0
- data/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +202 -0
- data/sproutcore/frameworks/core_foundation/views/template.js +77 -0
- data/sproutcore/frameworks/core_foundation/views/template/checkbox_support.js +20 -0
- data/sproutcore/frameworks/core_foundation/views/template/collection.js +106 -0
- data/sproutcore/frameworks/core_foundation/views/template/text_field_support.js +35 -0
- data/sproutcore/frameworks/core_foundation/views/view.js +1458 -0
- data/sproutcore/frameworks/core_foundation/views/view/animation.js +181 -0
- data/sproutcore/frameworks/core_foundation/views/view/base.js +1 -0
- data/sproutcore/frameworks/core_foundation/views/view/cursor.js +48 -0
- data/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
- data/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
- data/sproutcore/frameworks/core_foundation/views/view/layout.js +1087 -0
- data/sproutcore/frameworks/core_foundation/views/view/layout_style.js +618 -0
- data/sproutcore/frameworks/core_foundation/views/view/manipulation.js +426 -0
- data/sproutcore/frameworks/core_foundation/views/view/theming.js +362 -0
- data/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
- data/sproutcore/frameworks/core_foundation/views/view/visibility.js +118 -0
- data/sproutcore/frameworks/core_tools/core.js +20 -0
- data/sproutcore/frameworks/core_tools/data_source.js +99 -0
- data/sproutcore/frameworks/core_tools/english.lproj/strings.js +15 -0
- data/sproutcore/frameworks/core_tools/fixtures/target.js +87 -0
- data/sproutcore/frameworks/core_tools/fixtures/test.js +44 -0
- data/sproutcore/frameworks/core_tools/models/target.js +108 -0
- data/sproutcore/frameworks/core_tools/models/test.js +48 -0
- data/sproutcore/frameworks/datastore/core.js +8 -0
- data/sproutcore/frameworks/datastore/data_sources/cascade.js +180 -0
- data/sproutcore/frameworks/datastore/data_sources/data_source.js +583 -0
- data/sproutcore/frameworks/datastore/data_sources/fixtures.js +393 -0
- data/sproutcore/frameworks/datastore/debug/json.js +71 -0
- data/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
- data/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
- data/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
- data/sproutcore/frameworks/datastore/models/child_attribute.js +96 -0
- data/sproutcore/frameworks/datastore/models/children_attribute.js +75 -0
- data/sproutcore/frameworks/datastore/models/fetched_attribute.js +100 -0
- data/sproutcore/frameworks/datastore/models/many_attribute.js +154 -0
- data/sproutcore/frameworks/datastore/models/record.js +1318 -0
- data/sproutcore/frameworks/datastore/models/record_attribute.js +567 -0
- data/sproutcore/frameworks/datastore/models/single_attribute.js +159 -0
- data/sproutcore/frameworks/datastore/system/child_array.js +222 -0
- data/sproutcore/frameworks/datastore/system/many_array.js +418 -0
- data/sproutcore/frameworks/datastore/system/nested_store.js +609 -0
- data/sproutcore/frameworks/datastore/system/query.js +1599 -0
- data/sproutcore/frameworks/datastore/system/record_array.js +710 -0
- data/sproutcore/frameworks/datastore/system/store.js +2860 -0
- data/sproutcore/frameworks/datastore/tests/data_sources/cascade.js +133 -0
- data/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +122 -0
- data/sproutcore/frameworks/datastore/tests/integration/contact_model.js +131 -0
- data/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +119 -0
- data/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
- data/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
- data/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +73 -0
- data/sproutcore/frameworks/datastore/tests/models/many_attribute.js +423 -0
- data/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +180 -0
- data/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +309 -0
- data/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +363 -0
- data/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +421 -0
- data/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +304 -0
- data/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +55 -0
- data/sproutcore/frameworks/datastore/tests/models/record/destroy.js +92 -0
- data/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +56 -0
- data/sproutcore/frameworks/datastore/tests/models/record/normalize.js +336 -0
- data/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +53 -0
- data/sproutcore/frameworks/datastore/tests/models/record/refresh.js +48 -0
- data/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +170 -0
- data/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +66 -0
- data/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +112 -0
- data/sproutcore/frameworks/datastore/tests/models/record_attribute.js +252 -0
- data/sproutcore/frameworks/datastore/tests/models/single_attribute.js +284 -0
- data/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +204 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +180 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +173 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +158 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/core_methods.js +70 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +113 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +102 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
- data/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
- data/sproutcore/frameworks/datastore/tests/system/query/builders.js +219 -0
- data/sproutcore/frameworks/datastore/tests/system/query/compare.js +144 -0
- data/sproutcore/frameworks/datastore/tests/system/query/contains.js +131 -0
- data/sproutcore/frameworks/datastore/tests/system/query/containsRecordTypes.js +81 -0
- data/sproutcore/frameworks/datastore/tests/system/query/copy.js +30 -0
- data/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +197 -0
- data/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +92 -0
- data/sproutcore/frameworks/datastore/tests/system/query/expandedRecordTypes.js +64 -0
- data/sproutcore/frameworks/datastore/tests/system/query/parse.js +216 -0
- data/sproutcore/frameworks/datastore/tests/system/query/queryWithScope.js +57 -0
- data/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +47 -0
- data/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +70 -0
- data/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +71 -0
- data/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +177 -0
- data/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +50 -0
- data/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +214 -0
- data/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
- data/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +137 -0
- data/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +221 -0
- data/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +156 -0
- data/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +76 -0
- data/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +157 -0
- data/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +278 -0
- data/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +110 -0
- data/sproutcore/frameworks/datastore/tests/system/store/error_methods.js +62 -0
- data/sproutcore/frameworks/datastore/tests/system/store/find.js +530 -0
- data/sproutcore/frameworks/datastore/tests/system/store/init.js +23 -0
- data/sproutcore/frameworks/datastore/tests/system/store/loadRecord.js +64 -0
- data/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
- data/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
- data/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
- data/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +76 -0
- data/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
- data/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +200 -0
- data/sproutcore/frameworks/datastore/tests/system/store/unloadRecords.js +41 -0
- data/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +125 -0
- data/sproutcore/frameworks/datetime/resources/strings.js +14 -0
- data/sproutcore/frameworks/datetime/system/datetime.js +1111 -0
- data/sproutcore/frameworks/datetime/tests/system/datetime.js +383 -0
- data/sproutcore/frameworks/debug/core.js +114 -0
- data/sproutcore/frameworks/debug/invoke_once_last_debugging.js +259 -0
- data/sproutcore/frameworks/designer/coders/design.js +20 -0
- data/sproutcore/frameworks/designer/coders/object.js +347 -0
- data/sproutcore/frameworks/designer/controllers/controllers.js +16 -0
- data/sproutcore/frameworks/designer/controllers/design.js +37 -0
- data/sproutcore/frameworks/designer/controllers/designs.js +133 -0
- data/sproutcore/frameworks/designer/controllers/page_design.js +170 -0
- data/sproutcore/frameworks/designer/controllers/page_files.js +22 -0
- data/sproutcore/frameworks/designer/core.js +26 -0
- data/sproutcore/frameworks/designer/css/css_rule.js +22 -0
- data/sproutcore/frameworks/designer/css/css_style.js +29 -0
- data/sproutcore/frameworks/designer/css/css_style_sheet.js +201 -0
- data/sproutcore/frameworks/designer/designers/button.js +21 -0
- data/sproutcore/frameworks/designer/designers/label.js +16 -0
- data/sproutcore/frameworks/designer/designers/object_designer.js +296 -0
- data/sproutcore/frameworks/designer/designers/tab.js +18 -0
- data/sproutcore/frameworks/designer/designers/text_field.js +15 -0
- data/sproutcore/frameworks/designer/designers/view_designer.js +1267 -0
- data/sproutcore/frameworks/designer/english.lproj/css/designer.css +96 -0
- data/sproutcore/frameworks/designer/english.lproj/design_page.js +55 -0
- data/sproutcore/frameworks/designer/english.lproj/high_light.css +10 -0
- data/sproutcore/frameworks/designer/english.lproj/images/controller.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/dock-bg.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/dock-item-bg.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/dock-item-divider.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/dock-item-sel-bg.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/dock-item-sel-divider.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/main-bg.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/page.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/pane.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/images/view.png +0 -0
- data/sproutcore/frameworks/designer/english.lproj/selection_handles.css +58 -0
- data/sproutcore/frameworks/designer/ext/binding.js +33 -0
- data/sproutcore/frameworks/designer/ext/object.js +26 -0
- data/sproutcore/frameworks/designer/ext/page.js +58 -0
- data/sproutcore/frameworks/designer/ext/view.js +27 -0
- data/sproutcore/frameworks/designer/mixins/button.js +11 -0
- data/sproutcore/frameworks/designer/mixins/snap_lines.js +221 -0
- data/sproutcore/frameworks/designer/tests/coders/page.js +54 -0
- data/sproutcore/frameworks/designer/tests/designers/view_designer.js +47 -0
- data/sproutcore/frameworks/designer/views/designer_drop_target.js +144 -0
- data/sproutcore/frameworks/designer/views/drawing.js +219 -0
- data/sproutcore/frameworks/designer/views/high_light.js +66 -0
- data/sproutcore/frameworks/designer/views/page_item_view.js +130 -0
- data/sproutcore/frameworks/designer/views/selection_handles.js +78 -0
- data/sproutcore/frameworks/desktop/.greenhouseconf +218 -0
- data/sproutcore/frameworks/desktop/core.js +18 -0
- data/sproutcore/frameworks/desktop/debug/drag.js +41 -0
- data/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
- data/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
- data/sproutcore/frameworks/desktop/english.lproj/disclosure.css +74 -0
- data/sproutcore/frameworks/desktop/english.lproj/drag.css +7 -0
- data/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/cap.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/downbutton.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/thumb-bottom.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/thumb-center.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/thumb-top.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/track.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/images/upbutton.png +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/list_item.css +185 -0
- data/sproutcore/frameworks/desktop/english.lproj/menu.css +12 -0
- data/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +109 -0
- data/sproutcore/frameworks/desktop/english.lproj/modal.css +9 -0
- data/sproutcore/frameworks/desktop/english.lproj/panel.css +91 -0
- data/sproutcore/frameworks/desktop/english.lproj/picker.css +35 -0
- data/sproutcore/frameworks/desktop/english.lproj/progress.css +33 -0
- data/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
- data/sproutcore/frameworks/desktop/english.lproj/segmented.css +132 -0
- data/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
- data/sproutcore/frameworks/desktop/english.lproj/slider.css +66 -0
- data/sproutcore/frameworks/desktop/english.lproj/split.css +0 -0
- data/sproutcore/frameworks/desktop/english.lproj/split_divider.css +6 -0
- data/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
- data/sproutcore/frameworks/desktop/english.lproj/tab.css +7 -0
- data/sproutcore/frameworks/desktop/english.lproj/toolbar.css +5 -0
- data/sproutcore/frameworks/desktop/english.lproj/touch-scroller.css +196 -0
- data/sproutcore/frameworks/desktop/english.lproj/well.css +71 -0
- data/sproutcore/frameworks/desktop/mixins/border.js +151 -0
- data/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +694 -0
- data/sproutcore/frameworks/desktop/mixins/collection_group.js +22 -0
- data/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +95 -0
- data/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +295 -0
- data/sproutcore/frameworks/desktop/mixins/navigation_builder.js +130 -0
- data/sproutcore/frameworks/desktop/mixins/scrollable.js +253 -0
- data/sproutcore/frameworks/desktop/panes/alert.js +457 -0
- data/sproutcore/frameworks/desktop/panes/menu.js +1141 -0
- data/sproutcore/frameworks/desktop/panes/modal.js +71 -0
- data/sproutcore/frameworks/desktop/panes/palette.js +74 -0
- data/sproutcore/frameworks/desktop/panes/panel.js +207 -0
- data/sproutcore/frameworks/desktop/panes/picker.js +796 -0
- data/sproutcore/frameworks/desktop/panes/select_button.js +895 -0
- data/sproutcore/frameworks/desktop/panes/sheet.js +214 -0
- data/sproutcore/frameworks/desktop/protocols/drag_data_source.js +39 -0
- data/sproutcore/frameworks/desktop/protocols/drag_source.js +81 -0
- data/sproutcore/frameworks/desktop/protocols/drop_target.js +175 -0
- data/sproutcore/frameworks/desktop/protocols/responder.js +299 -0
- data/sproutcore/frameworks/desktop/render_delegates/button.js +105 -0
- data/sproutcore/frameworks/desktop/render_delegates/checkbox.js +100 -0
- data/sproutcore/frameworks/desktop/render_delegates/collection.js +24 -0
- data/sproutcore/frameworks/desktop/render_delegates/disclosure.js +69 -0
- data/sproutcore/frameworks/desktop/render_delegates/helpers/slicing.js +34 -0
- data/sproutcore/frameworks/desktop/render_delegates/image_button.js +30 -0
- data/sproutcore/frameworks/desktop/render_delegates/master_detail.js +28 -0
- data/sproutcore/frameworks/desktop/render_delegates/menu.js +47 -0
- data/sproutcore/frameworks/desktop/render_delegates/panel.js +28 -0
- data/sproutcore/frameworks/desktop/render_delegates/picker.js +43 -0
- data/sproutcore/frameworks/desktop/render_delegates/progress.js +187 -0
- data/sproutcore/frameworks/desktop/render_delegates/radio.js +95 -0
- data/sproutcore/frameworks/desktop/render_delegates/radio_group.js +109 -0
- data/sproutcore/frameworks/desktop/render_delegates/segment.js +55 -0
- data/sproutcore/frameworks/desktop/render_delegates/segmented.js +77 -0
- data/sproutcore/frameworks/desktop/render_delegates/slider.js +58 -0
- data/sproutcore/frameworks/desktop/render_delegates/source_list.js +8 -0
- data/sproutcore/frameworks/desktop/render_delegates/toolbar.js +18 -0
- data/sproutcore/frameworks/desktop/render_delegates/well.js +27 -0
- data/sproutcore/frameworks/desktop/render_delegates/workspace.js +18 -0
- data/sproutcore/frameworks/desktop/system/drag.js +974 -0
- data/sproutcore/frameworks/desktop/system/key_bindings.js +40 -0
- data/sproutcore/frameworks/desktop/system/undo_manager.js +187 -0
- data/sproutcore/frameworks/desktop/tests/integration/dialog.js +48 -0
- data/sproutcore/frameworks/desktop/tests/mixins/border.js +97 -0
- data/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +158 -0
- data/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +135 -0
- data/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +258 -0
- data/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +35 -0
- data/sproutcore/frameworks/desktop/tests/panes/pane_page.js +41 -0
- data/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +83 -0
- data/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +92 -0
- data/sproutcore/frameworks/desktop/tests/panes/select_button/methods.js +194 -0
- data/sproutcore/frameworks/desktop/tests/panes/select_button/ui.js +220 -0
- data/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +44 -0
- data/sproutcore/frameworks/desktop/tests/views/button/methods.js +166 -0
- data/sproutcore/frameworks/desktop/tests/views/button/ui.js +236 -0
- data/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +126 -0
- data/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +124 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +215 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/displayProperties.js +31 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +300 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +240 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +205 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +211 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
- data/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +188 -0
- data/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +76 -0
- data/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +456 -0
- data/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +104 -0
- data/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/image_button/ui.js +25 -0
- data/sproutcore/frameworks/desktop/tests/views/list/render.js +92 -0
- data/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +183 -0
- data/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
- data/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +131 -0
- data/sproutcore/frameworks/desktop/tests/views/list/ui_alternatingrows.js +130 -0
- data/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
- data/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +205 -0
- data/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +127 -0
- data/sproutcore/frameworks/desktop/tests/views/list_item.js +396 -0
- data/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +46 -0
- data/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
- data/sproutcore/frameworks/desktop/tests/views/progress/ui.js +421 -0
- data/sproutcore/frameworks/desktop/tests/views/radio/methods.js +119 -0
- data/sproutcore/frameworks/desktop/tests/views/radio/ui.js +349 -0
- data/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +143 -0
- data/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +162 -0
- data/sproutcore/frameworks/desktop/tests/views/scroller.js +118 -0
- data/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +108 -0
- data/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +457 -0
- data/sproutcore/frameworks/desktop/tests/views/select/methods.js +144 -0
- data/sproutcore/frameworks/desktop/tests/views/select/ui.js +224 -0
- data/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +163 -0
- data/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +117 -0
- data/sproutcore/frameworks/desktop/tests/views/separator.js +44 -0
- data/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/split/methods.js +60 -0
- data/sproutcore/frameworks/desktop/tests/views/split/ui.js +59 -0
- data/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +238 -0
- data/sproutcore/frameworks/desktop/tests/views/static_content.js +46 -0
- data/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
- data/sproutcore/frameworks/desktop/tests/views/tab/ui.js +92 -0
- data/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
- data/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
- data/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
- data/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
- data/sproutcore/frameworks/desktop/tests/views/well/ui.js +54 -0
- data/sproutcore/frameworks/desktop/views/button.js +564 -0
- data/sproutcore/frameworks/desktop/views/checkbox.js +110 -0
- data/sproutcore/frameworks/desktop/views/collection.js +3090 -0
- data/sproutcore/frameworks/desktop/views/date_field.js +319 -0
- data/sproutcore/frameworks/desktop/views/disclosure.js +68 -0
- data/sproutcore/frameworks/desktop/views/file.js +112 -0
- data/sproutcore/frameworks/desktop/views/grid.js +207 -0
- data/sproutcore/frameworks/desktop/views/image_button.js +74 -0
- data/sproutcore/frameworks/desktop/views/list.js +637 -0
- data/sproutcore/frameworks/desktop/views/list_item.js +923 -0
- data/sproutcore/frameworks/desktop/views/master_detail.js +257 -0
- data/sproutcore/frameworks/desktop/views/menu_item.js +704 -0
- data/sproutcore/frameworks/desktop/views/menu_scroll.js +615 -0
- data/sproutcore/frameworks/desktop/views/navigation.js +237 -0
- data/sproutcore/frameworks/desktop/views/navigation_bar.js +181 -0
- data/sproutcore/frameworks/desktop/views/popup_button.js +299 -0
- data/sproutcore/frameworks/desktop/views/progress.js +197 -0
- data/sproutcore/frameworks/desktop/views/radio.js +347 -0
- data/sproutcore/frameworks/desktop/views/scene.js +204 -0
- data/sproutcore/frameworks/desktop/views/scroll.js +1824 -0
- data/sproutcore/frameworks/desktop/views/scroller.js +917 -0
- data/sproutcore/frameworks/desktop/views/segment.js +104 -0
- data/sproutcore/frameworks/desktop/views/segmented.js +1002 -0
- data/sproutcore/frameworks/desktop/views/select.js +809 -0
- data/sproutcore/frameworks/desktop/views/select_field.js +344 -0
- data/sproutcore/frameworks/desktop/views/separator.js +36 -0
- data/sproutcore/frameworks/desktop/views/slider.js +291 -0
- data/sproutcore/frameworks/desktop/views/source_list.js +49 -0
- data/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
- data/sproutcore/frameworks/desktop/views/split.js +891 -0
- data/sproutcore/frameworks/desktop/views/split_divider.js +52 -0
- data/sproutcore/frameworks/desktop/views/stacked.js +110 -0
- data/sproutcore/frameworks/desktop/views/static_content.js +134 -0
- data/sproutcore/frameworks/desktop/views/tab.js +186 -0
- data/sproutcore/frameworks/desktop/views/thumb.js +53 -0
- data/sproutcore/frameworks/desktop/views/toolbar.js +88 -0
- data/sproutcore/frameworks/desktop/views/web.js +87 -0
- data/sproutcore/frameworks/desktop/views/well.js +65 -0
- data/sproutcore/frameworks/desktop/views/workspace.js +251 -0
- data/sproutcore/frameworks/documentation/core.js +0 -0
- data/sproutcore/frameworks/experimental/README.md +23 -0
- data/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
- data/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
- data/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
- data/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +34 -0
- data/sproutcore/frameworks/experimental/frameworks/polymorphism/models/polymorphic_single_attribute.js +183 -0
- data/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +23 -0
- data/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphic/single.js +124 -0
- data/sproutcore/frameworks/forms/english.lproj/default_styles.css +5 -0
- data/sproutcore/frameworks/forms/english.lproj/strings.js +15 -0
- data/sproutcore/frameworks/forms/mixins/edit_mode.js +43 -0
- data/sproutcore/frameworks/forms/mixins/emptiness.js +95 -0
- data/sproutcore/frameworks/forms/renderer_delegates/form.js +22 -0
- data/sproutcore/frameworks/forms/renderer_delegates/form_row.js +21 -0
- data/sproutcore/frameworks/forms/tests/views/form.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_checkbox_field.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_field.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_label.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_radio_field.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_row.js +15 -0
- data/sproutcore/frameworks/forms/tests/views/form_text_field.js +15 -0
- data/sproutcore/frameworks/forms/views/form.js +282 -0
- data/sproutcore/frameworks/forms/views/form_row.js +183 -0
- data/sproutcore/frameworks/foundation/.greenhouseconf +35 -0
- data/sproutcore/frameworks/foundation/TESTING +46 -0
- data/sproutcore/frameworks/foundation/controllers/tree.js +127 -0
- data/sproutcore/frameworks/foundation/core.js +0 -0
- data/sproutcore/frameworks/foundation/debug/control_test_pane.js +191 -0
- data/sproutcore/frameworks/foundation/english.lproj/benchmark.css +146 -0
- data/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +67 -0
- data/sproutcore/frameworks/foundation/english.lproj/button_view.css +40 -0
- data/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +9 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/favicon.ico +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-landscape.jpg +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-landscape.png +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-portrait.jpg +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-portrait.png +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup.png +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/images/sproutcore.png +0 -0
- data/sproutcore/frameworks/foundation/english.lproj/inline_editor.css +12 -0
- data/sproutcore/frameworks/foundation/english.lproj/label.css +47 -0
- data/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
- data/sproutcore/frameworks/foundation/english.lproj/text_field.css +146 -0
- data/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
- data/sproutcore/frameworks/foundation/fixtures/malformed.json +11 -0
- data/sproutcore/frameworks/foundation/gestures/pinch.js +81 -0
- data/sproutcore/frameworks/foundation/gestures/swipe.js +144 -0
- data/sproutcore/frameworks/foundation/gestures/tap.js +113 -0
- data/sproutcore/frameworks/foundation/license.js +28 -0
- data/sproutcore/frameworks/foundation/mixins/auto_mixin.js +39 -0
- data/sproutcore/frameworks/foundation/mixins/auto_resize.js +233 -0
- data/sproutcore/frameworks/foundation/mixins/button.js +360 -0
- data/sproutcore/frameworks/foundation/mixins/collection_content.js +178 -0
- data/sproutcore/frameworks/foundation/mixins/content_display.js +114 -0
- data/sproutcore/frameworks/foundation/mixins/control.js +422 -0
- data/sproutcore/frameworks/foundation/mixins/editable.js +158 -0
- data/sproutcore/frameworks/foundation/mixins/flowed_layout.js +628 -0
- data/sproutcore/frameworks/foundation/mixins/gestureable.js +214 -0
- data/sproutcore/frameworks/foundation/mixins/inline_editable.js +89 -0
- data/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +139 -0
- data/sproutcore/frameworks/foundation/mixins/inline_text_field.js +589 -0
- data/sproutcore/frameworks/foundation/mixins/inner_frame.js +184 -0
- data/sproutcore/frameworks/foundation/mixins/static_layout.js +77 -0
- data/sproutcore/frameworks/foundation/mixins/string.js +391 -0
- data/sproutcore/frameworks/foundation/mixins/tree_item_content.js +160 -0
- data/sproutcore/frameworks/foundation/mixins/validatable.js +189 -0
- data/sproutcore/frameworks/foundation/private/tree_item_observer.js +914 -0
- data/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +110 -0
- data/sproutcore/frameworks/foundation/render_delegates/container.js +18 -0
- data/sproutcore/frameworks/foundation/render_delegates/image.js +97 -0
- data/sproutcore/frameworks/foundation/render_delegates/label.js +139 -0
- data/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +17 -0
- data/sproutcore/frameworks/foundation/system/benchmark.js +718 -0
- data/sproutcore/frameworks/foundation/system/chance.js +64 -0
- data/sproutcore/frameworks/foundation/system/cookie.js +171 -0
- data/sproutcore/frameworks/foundation/system/core_query.js +56 -0
- data/sproutcore/frameworks/foundation/system/exception_handler.js +88 -0
- data/sproutcore/frameworks/foundation/system/gesture.js +363 -0
- data/sproutcore/frameworks/foundation/system/image_queue.js +433 -0
- data/sproutcore/frameworks/foundation/system/math.js +57 -0
- data/sproutcore/frameworks/foundation/system/module.js +583 -0
- data/sproutcore/frameworks/foundation/system/request.js +596 -0
- data/sproutcore/frameworks/foundation/system/response.js +550 -0
- data/sproutcore/frameworks/foundation/system/routes.js +519 -0
- data/sproutcore/frameworks/foundation/system/staticqueue.js +53 -0
- data/sproutcore/frameworks/foundation/system/task_queue.js +153 -0
- data/sproutcore/frameworks/foundation/system/text_selection.js +103 -0
- data/sproutcore/frameworks/foundation/system/time.js +473 -0
- data/sproutcore/frameworks/foundation/system/user_defaults.js +392 -0
- data/sproutcore/frameworks/foundation/system/utils/colors.js +80 -0
- data/sproutcore/frameworks/foundation/system/utils/misc.js +137 -0
- data/sproutcore/frameworks/foundation/system/utils/range.js +64 -0
- data/sproutcore/frameworks/foundation/system/utils/string_measurement.js +247 -0
- data/sproutcore/frameworks/foundation/tasks/preload_bundle.js +41 -0
- data/sproutcore/frameworks/foundation/tasks/task.js +17 -0
- data/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -0
- data/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +340 -0
- data/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +10 -0
- data/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
- data/sproutcore/frameworks/foundation/tests/integration/creating_views.js +118 -0
- data/sproutcore/frameworks/foundation/tests/mixins/button/content.js +195 -0
- data/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +89 -0
- data/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +57 -0
- data/sproutcore/frameworks/foundation/tests/mixins/button/ui.js +69 -0
- data/sproutcore/frameworks/foundation/tests/mixins/content_display.js +51 -0
- data/sproutcore/frameworks/foundation/tests/mixins/control/content.js +168 -0
- data/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -0
- data/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +44 -0
- data/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +52 -0
- data/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +238 -0
- data/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +64 -0
- data/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +144 -0
- data/sproutcore/frameworks/foundation/tests/mixins/string.js +28 -0
- data/sproutcore/frameworks/foundation/tests/mixins/validatable/ui.js +74 -0
- data/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
- data/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
- data/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -0
- data/sproutcore/frameworks/foundation/tests/system/cookie.js +179 -0
- data/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +59 -0
- data/sproutcore/frameworks/foundation/tests/system/math.js +39 -0
- data/sproutcore/frameworks/foundation/tests/system/request.js +273 -0
- data/sproutcore/frameworks/foundation/tests/system/routes.js +356 -0
- data/sproutcore/frameworks/foundation/tests/system/task_queue.js +43 -0
- data/sproutcore/frameworks/foundation/tests/system/user_defaults.js +24 -0
- data/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +235 -0
- data/sproutcore/frameworks/foundation/tests/system/utils/range.js +62 -0
- data/sproutcore/frameworks/foundation/tests/validators/credit_card.js +35 -0
- data/sproutcore/frameworks/foundation/tests/validators/date.js +26 -0
- data/sproutcore/frameworks/foundation/tests/validators/not_empty.js +56 -0
- data/sproutcore/frameworks/foundation/tests/validators/number.js +47 -0
- data/sproutcore/frameworks/foundation/tests/validators/password.js +13 -0
- data/sproutcore/frameworks/foundation/tests/validators/validator.js +20 -0
- data/sproutcore/frameworks/foundation/tests/views/container/methods.js +18 -0
- data/sproutcore/frameworks/foundation/tests/views/container/ui.js +145 -0
- data/sproutcore/frameworks/foundation/tests/views/image/ui.js +492 -0
- data/sproutcore/frameworks/foundation/tests/views/label/ui.js +179 -0
- data/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +87 -0
- data/sproutcore/frameworks/foundation/tests/views/text_field/nextValidKeyView.js +110 -0
- data/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +577 -0
- data/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
- data/sproutcore/frameworks/foundation/validators/date.js +52 -0
- data/sproutcore/frameworks/foundation/validators/date_time.js +48 -0
- data/sproutcore/frameworks/foundation/validators/email.js +45 -0
- data/sproutcore/frameworks/foundation/validators/not_empty.js +37 -0
- data/sproutcore/frameworks/foundation/validators/number.js +99 -0
- data/sproutcore/frameworks/foundation/validators/password.js +86 -0
- data/sproutcore/frameworks/foundation/validators/positive_integer.js +84 -0
- data/sproutcore/frameworks/foundation/validators/validator.js +326 -0
- data/sproutcore/frameworks/foundation/views/container.js +140 -0
- data/sproutcore/frameworks/foundation/views/field.js +337 -0
- data/sproutcore/frameworks/foundation/views/image.js +381 -0
- data/sproutcore/frameworks/foundation/views/label.js +219 -0
- data/sproutcore/frameworks/foundation/views/text_field.js +1073 -0
- data/sproutcore/frameworks/handlebars/extensions.js +44 -0
- data/sproutcore/frameworks/handlebars/extensions/bind.js +156 -0
- data/sproutcore/frameworks/handlebars/extensions/collection.js +75 -0
- data/sproutcore/frameworks/handlebars/extensions/localization.js +5 -0
- data/sproutcore/frameworks/handlebars/extensions/view.js +115 -0
- data/sproutcore/frameworks/handlebars/handlebars.js +1401 -0
- data/sproutcore/frameworks/jquery/jquery-buffer.js +376 -0
- data/sproutcore/frameworks/jquery/jquery-buffered.js +205 -0
- data/sproutcore/frameworks/jquery/jquery-sc.js +7 -0
- data/sproutcore/frameworks/jquery/jquery.js +7179 -0
- data/sproutcore/frameworks/media/.greenhouseconf +29 -0
- data/sproutcore/frameworks/media/resources/controls.png +0 -0
- data/sproutcore/frameworks/media/resources/playeras3.fla +0 -0
- data/sproutcore/frameworks/media/resources/video.css +124 -0
- data/sproutcore/frameworks/media/resources/videoCanvas.swf +0 -0
- data/sproutcore/frameworks/media/views/audio.js +741 -0
- data/sproutcore/frameworks/media/views/controls.js +88 -0
- data/sproutcore/frameworks/media/views/media_slider.js +243 -0
- data/sproutcore/frameworks/media/views/mini_controls.js +63 -0
- data/sproutcore/frameworks/media/views/simple_controls.js +54 -0
- data/sproutcore/frameworks/media/views/video.js +832 -0
- data/sproutcore/frameworks/mini/license.js +29 -0
- data/sproutcore/frameworks/runtime/README +12 -0
- data/sproutcore/frameworks/runtime/core.js +1102 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array.js +14 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +397 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
- data/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
- data/sproutcore/frameworks/runtime/license.js +29 -0
- data/sproutcore/frameworks/runtime/mixins/array.js +658 -0
- data/sproutcore/frameworks/runtime/mixins/comparable.js +45 -0
- data/sproutcore/frameworks/runtime/mixins/copyable.js +72 -0
- data/sproutcore/frameworks/runtime/mixins/enumerable.js +1426 -0
- data/sproutcore/frameworks/runtime/mixins/freezable.js +110 -0
- data/sproutcore/frameworks/runtime/mixins/observable.js +1408 -0
- data/sproutcore/frameworks/runtime/private/chain_observer.js +178 -0
- data/sproutcore/frameworks/runtime/private/observer_queue.js +178 -0
- data/sproutcore/frameworks/runtime/private/observer_set.js +123 -0
- data/sproutcore/frameworks/runtime/system/binding.js +1000 -0
- data/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
- data/sproutcore/frameworks/runtime/system/error.js +157 -0
- data/sproutcore/frameworks/runtime/system/index_set.js +1199 -0
- data/sproutcore/frameworks/runtime/system/logger.js +1582 -0
- data/sproutcore/frameworks/runtime/system/object.js +947 -0
- data/sproutcore/frameworks/runtime/system/range_observer.js +270 -0
- data/sproutcore/frameworks/runtime/system/run_loop.js +308 -0
- data/sproutcore/frameworks/runtime/system/set.js +536 -0
- data/sproutcore/frameworks/runtime/tests/core/IsEqual.js +30 -0
- data/sproutcore/frameworks/runtime/tests/core/beget.js +23 -0
- data/sproutcore/frameworks/runtime/tests/core/clone.js +108 -0
- data/sproutcore/frameworks/runtime/tests/core/compare.js +44 -0
- data/sproutcore/frameworks/runtime/tests/core/console.js +16 -0
- data/sproutcore/frameworks/runtime/tests/core/guidFor.js +109 -0
- data/sproutcore/frameworks/runtime/tests/core/inspect.js +27 -0
- data/sproutcore/frameworks/runtime/tests/core/itemType.js +71 -0
- data/sproutcore/frameworks/runtime/tests/core/keys.js +20 -0
- data/sproutcore/frameworks/runtime/tests/core/makeArray.js +44 -0
- data/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +19 -0
- data/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +37 -0
- data/sproutcore/frameworks/runtime/tests/mixins/array.js +59 -0
- data/sproutcore/frameworks/runtime/tests/mixins/comparable.js +44 -0
- data/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +658 -0
- data/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +37 -0
- data/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +733 -0
- data/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +155 -0
- data/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +79 -0
- data/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +81 -0
- data/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
- data/sproutcore/frameworks/runtime/tests/system/binding.js +395 -0
- data/sproutcore/frameworks/runtime/tests/system/error.js +53 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/add.js +212 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/addEach.js +49 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/min.js +50 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/removeEach.js +49 -0
- data/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -0
- data/sproutcore/frameworks/runtime/tests/system/logger.js +260 -0
- data/sproutcore/frameworks/runtime/tests/system/object/base.js +195 -0
- data/sproutcore/frameworks/runtime/tests/system/object/bindings.js +374 -0
- data/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +71 -0
- data/sproutcore/frameworks/runtime/tests/system/object/enhance.js +177 -0
- data/sproutcore/frameworks/runtime/tests/system/observer_set.js +50 -0
- data/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +59 -0
- data/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
- data/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
- data/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
- data/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
- data/sproutcore/frameworks/runtime/tests/system/run_loop.js +120 -0
- data/sproutcore/frameworks/runtime/tests/system/set.js +318 -0
- data/sproutcore/frameworks/statechart/core.js +5 -0
- data/sproutcore/frameworks/statechart/debug/monitor.js +136 -0
- data/sproutcore/frameworks/statechart/system/state.js +713 -0
- data/sproutcore/frameworks/statechart/system/statechart.js +951 -0
- data/sproutcore/frameworks/statechart/tests/async.js +94 -0
- data/sproutcore/frameworks/statechart/tests/event_handling/advanced_event_handling.js +310 -0
- data/sproutcore/frameworks/statechart/tests/namespace/access_substates.js +252 -0
- data/sproutcore/frameworks/statechart/tests/state/is_current_state.js +64 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_history_state.js +88 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_advanced.js +234 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_async.js +123 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_basic.js +139 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_intermediate.js +119 -0
- data/sproutcore/frameworks/statechart/tests/with_concurrent_states/send_event.js +183 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/default_responder.js +90 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_history_state.js +200 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_state.js +256 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_state_async.js +187 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/send_event.js +122 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/state_plugin.js +99 -0
- data/sproutcore/frameworks/statechart/tests/without_concurrent_states/transient.js +162 -0
- data/sproutcore/frameworks/table/mixins/table_delegate.js +41 -0
- data/sproutcore/frameworks/table/system/table_column.js +125 -0
- data/sproutcore/frameworks/table/views/table.js +440 -0
- data/sproutcore/frameworks/table/views/table_cell.js +63 -0
- data/sproutcore/frameworks/table/views/table_head.js +158 -0
- data/sproutcore/frameworks/table/views/table_header.js +214 -0
- data/sproutcore/frameworks/table/views/table_row.js +155 -0
- data/sproutcore/frameworks/testing/core.js +196 -0
- data/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
- data/sproutcore/frameworks/testing/english.lproj/runner.css +128 -0
- data/sproutcore/frameworks/testing/english.lproj/testsuite.css +136 -0
- data/sproutcore/frameworks/testing/extras.js +17 -0
- data/sproutcore/frameworks/testing/jquery.js +3559 -0
- data/sproutcore/frameworks/testing/qunit.js +827 -0
- data/sproutcore/frameworks/testing/system/dump.js +205 -0
- data/sproutcore/frameworks/testing/system/equiv.js +201 -0
- data/sproutcore/frameworks/testing/system/plan.js +703 -0
- data/sproutcore/frameworks/testing/system/runner.js +220 -0
- data/sproutcore/frameworks/testing/system/suite.js +228 -0
- data/sproutcore/frameworks/testing/utils.js +62 -0
- data/sproutcore/lib/index.rhtml +164 -0
- data/sproutcore/license.js +31 -0
- data/sproutcore/themes/ace/designs/dark.png +0 -0
- data/sproutcore/themes/ace/designs/dark.psd +0 -0
- data/sproutcore/themes/ace/designs/light.png +0 -0
- data/sproutcore/themes/ace/designs/light.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/18px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/18px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/44px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/44px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_capsule.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button_pointer.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/popup/active_select.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/button/popup/normal_select.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/collection/source-list/selection.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/checkmark.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/checkmark_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/down.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/menu.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/menu_item.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/menu/up.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/panel/panel.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/panel/pointers.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/picker/popover/popover.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/picker/popover/popover_empty.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/picker/popover/popover_notoolbar.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers_notoolbar.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_content.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_indeterminate_content.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_track.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_mixed.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_mixed_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_selected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_selected_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/radio/radio_unselected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/horizontal/thumb.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/vertical/thumb.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_normal.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_normal.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_normal.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_normal.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob_active.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/22px/track.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/slider/ace/track.psd +0 -0
- data/sproutcore/themes/ace/designs/psds/toolbar/toolbar.psd +0 -0
- data/sproutcore/themes/ace/designs/switch/switch.psd +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_handle.png +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_handle.psd +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_off.png +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_off.psd +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_on.png +0 -0
- data/sproutcore/themes/ace/designs/switch/switch_on.psd +0 -0
- data/sproutcore/themes/ace/resources/body.css +13 -0
- data/sproutcore/themes/ace/resources/button/ace/18px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/18px/button.css +33 -0
- data/sproutcore/themes/ace/resources/button/ace/18px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/18px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/18px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/active_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/button.css +98 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/normal_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/normal_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/24px/selected_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/button.css +78 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/normal_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/30px/selected_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/44px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/44px/button.css +39 -0
- data/sproutcore/themes/ace/resources/button/ace/44px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/44px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/44px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/ace/button.css +36 -0
- data/sproutcore/themes/ace/resources/button/button.js +75 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/active_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/button.css +93 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/normal_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/normal_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_button_capsule.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/24px/selected_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/button.css +72 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/normal_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/normal_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/selected_button.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/30px/selected_button_pointer.png +0 -0
- data/sproutcore/themes/ace/resources/button/dark/button.css +17 -0
- data/sproutcore/themes/ace/resources/button/dark/button.js +3 -0
- data/sproutcore/themes/ace/resources/button/popup/active_select.png +0 -0
- data/sproutcore/themes/ace/resources/button/popup/normal_select.png +0 -0
- data/sproutcore/themes/ace/resources/button/popup/select.css +20 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox.css +40 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox.css +40 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked_active.png +0 -0
- data/sproutcore/themes/ace/resources/checkbox/ace/checkbox.css +7 -0
- data/sproutcore/themes/ace/resources/collection/normal/list.css +4 -0
- data/sproutcore/themes/ace/resources/collection/normal/list_item.css +17 -0
- data/sproutcore/themes/ace/resources/collection/source-list/selection.png +0 -0
- data/sproutcore/themes/ace/resources/collection/source-list/source-list.js +3 -0
- data/sproutcore/themes/ace/resources/collection/source-list/source_list_view.css +36 -0
- data/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +24 -0
- data/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed.png +0 -0
- data/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed_active.png +0 -0
- data/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open.png +0 -0
- data/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open_active.png +0 -0
- data/sproutcore/themes/ace/resources/imagebutton/ace/imagebutton.css +11 -0
- data/sproutcore/themes/ace/resources/loading.css +50 -0
- data/sproutcore/themes/ace/resources/master-detail/master-detail.css +27 -0
- data/sproutcore/themes/ace/resources/menu/checkmark.png +0 -0
- data/sproutcore/themes/ace/resources/menu/checkmark_active.png +0 -0
- data/sproutcore/themes/ace/resources/menu/down.png +0 -0
- data/sproutcore/themes/ace/resources/menu/menu.css +75 -0
- data/sproutcore/themes/ace/resources/menu/menu.png +0 -0
- data/sproutcore/themes/ace/resources/menu/menu_item.png +0 -0
- data/sproutcore/themes/ace/resources/menu/up.png +0 -0
- data/sproutcore/themes/ace/resources/pane/pane.css +3 -0
- data/sproutcore/themes/ace/resources/panel/panel.css +13 -0
- data/sproutcore/themes/ace/resources/panel/panel.js +20 -0
- data/sproutcore/themes/ace/resources/panel/panel.png +0 -0
- data/sproutcore/themes/ace/resources/picker/ace/panel.png +0 -0
- data/sproutcore/themes/ace/resources/picker/ace/picker.css +41 -0
- data/sproutcore/themes/ace/resources/picker/ace/picker.js +0 -0
- data/sproutcore/themes/ace/resources/picker/ace/pointers.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/picker.js +32 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover.css +111 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover.js +12 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover_empty.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover_notoolbar.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover_pointers.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/popover_pointers_notoolbar.png +0 -0
- data/sproutcore/themes/ace/resources/picker/popover/workspace.js +28 -0
- data/sproutcore/themes/ace/resources/progress/ace/progress.css +27 -0
- data/sproutcore/themes/ace/resources/progress/ace/progress_view_content.png +0 -0
- data/sproutcore/themes/ace/resources/progress/ace/progress_view_track.png +0 -0
- data/sproutcore/themes/ace/resources/progress/progress.js +78 -0
- data/sproutcore/themes/ace/resources/radio/radio.css +63 -0
- data/sproutcore/themes/ace/resources/radio/radio_active.png +0 -0
- data/sproutcore/themes/ace/resources/radio/radio_mixed.png +0 -0
- data/sproutcore/themes/ace/resources/radio/radio_mixed_active.png +0 -0
- data/sproutcore/themes/ace/resources/radio/radio_selected.png +0 -0
- data/sproutcore/themes/ace/resources/radio/radio_selected_active.png +0 -0
- data/sproutcore/themes/ace/resources/radio/radio_unselected.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +78 -0
- data/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +91 -0
- data/sproutcore/themes/ace/resources/scroller/horizontal/thumb.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows_active.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/vertical/thumb.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows_active.png +0 -0
- data/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +80 -0
- data/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +92 -0
- data/sproutcore/themes/ace/resources/segmented/18px/segmented.css +91 -0
- data/sproutcore/themes/ace/resources/segmented/18px/segmented_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/18px/segmented_normal.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/18px/segmented_selected.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/18px/segmented_selected_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/24px/segmented.css +91 -0
- data/sproutcore/themes/ace/resources/segmented/24px/segmented_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/24px/segmented_normal.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/24px/segmented_selected.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/24px/segmented_selected_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -0
- data/sproutcore/themes/ace/resources/segmented/30px/segmented_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/30px/segmented_normal.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/30px/segmented_selected.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/30px/segmented_selected_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/44px/segmented.css +95 -0
- data/sproutcore/themes/ace/resources/segmented/44px/segmented_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/44px/segmented_normal.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/44px/segmented_selected.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/44px/segmented_selected_active.png +0 -0
- data/sproutcore/themes/ace/resources/segmented/segmented.css +83 -0
- data/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +27 -0
- data/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +27 -0
- data/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/22px/slider.css +27 -0
- data/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
- data/sproutcore/themes/ace/resources/slider/ace/slider.css +7 -0
- data/sproutcore/themes/ace/resources/slider/ace/slider.js +56 -0
- data/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
- data/sproutcore/themes/ace/resources/split/split.css +5 -0
- data/sproutcore/themes/ace/resources/tab/tab.css +3 -0
- data/sproutcore/themes/ace/resources/toolbar/toolbar.css +8 -0
- data/sproutcore/themes/ace/resources/toolbar/toolbar.png +0 -0
- data/sproutcore/themes/ace/resources/well/well.css +7 -0
- data/sproutcore/themes/ace/resources/well/well.js +17 -0
- data/sproutcore/themes/ace/theme.js +14 -0
- data/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
- data/sproutcore/themes/empty_theme/theme.js +16 -0
- data/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
- data/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
- data/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
- data/sproutcore/themes/standard_theme/Source/Panel.drawit/Data +0 -0
- data/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/SproutCore Theme Buttons.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/Data +0 -0
- data/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/10.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/100.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/102.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/110.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/120.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/127.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/18.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/19.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/2.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/24.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/26.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/27.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/28.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/29.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/30.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/31.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/33.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/37.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/41.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/16/99.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/10.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/100.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/102.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/110.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/120.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/127.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/18.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/19.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/2.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/24.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/26.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/27.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/28.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/29.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/30.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/31.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/33.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/37.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/41.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/24/99.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/10.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/100.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/102.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/110.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/120.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/127.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/18.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/19.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/2.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/24.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/26.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/27.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/28.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/29.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/30.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/31.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/33.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/37.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/41.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/32/99.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/48/10.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/48/18.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/48/19.png +0 -0
- data/sproutcore/themes/standard_theme/Source/icons/48/2.png +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/Data +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/Data +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x-2.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/sc-theme-sprite.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/sc-theme-ysprite.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/shared-icons.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/sproutcore-logo.psd +0 -0
- data/sproutcore/themes/standard_theme/Source/sticky-note.psd +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/button.css +399 -0
- data/sproutcore/themes/standard_theme/english.lproj/checkbox.css +78 -0
- data/sproutcore/themes/standard_theme/english.lproj/collection.css +135 -0
- data/sproutcore/themes/standard_theme/english.lproj/core.css +76 -0
- data/sproutcore/themes/standard_theme/english.lproj/disclosure.css +57 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/icons/mini_222222.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/icons/mini_454545.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/icons/mini_888888.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/panels/sprite-x.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/panels/sprite-y.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-scroller-repeat-x.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-scroller-repeat-y.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-scroller-sprite.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
- data/sproutcore/themes/standard_theme/english.lproj/label.css +11 -0
- data/sproutcore/themes/standard_theme/english.lproj/list_item.css +82 -0
- data/sproutcore/themes/standard_theme/english.lproj/menu.css +20 -0
- data/sproutcore/themes/standard_theme/english.lproj/menu_item_view.css +36 -0
- data/sproutcore/themes/standard_theme/english.lproj/pane.css +18 -0
- data/sproutcore/themes/standard_theme/english.lproj/panel.css +33 -0
- data/sproutcore/themes/standard_theme/english.lproj/picker.css +17 -0
- data/sproutcore/themes/standard_theme/english.lproj/progress.css +27 -0
- data/sproutcore/themes/standard_theme/english.lproj/radio.css +125 -0
- data/sproutcore/themes/standard_theme/english.lproj/scroller.css +159 -0
- data/sproutcore/themes/standard_theme/english.lproj/segmented.css +270 -0
- data/sproutcore/themes/standard_theme/english.lproj/slider.css +94 -0
- data/sproutcore/themes/standard_theme/english.lproj/split_view.css +11 -0
- data/sproutcore/themes/standard_theme/english.lproj/tab.css +14 -0
- data/sproutcore/themes/standard_theme/english.lproj/table.css +14 -0
- data/sproutcore/themes/standard_theme/english.lproj/text_field.css +5 -0
- data/sproutcore/themes/standard_theme/english.lproj/toolbar.css +7 -0
- data/sproutcore/themes/standard_theme/english.lproj/well.css +36 -0
- data/test-spade.html +8 -0
- metadata +2111 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//require('core') ;
|
|
2
|
+
//var Sample = new Object();
|
|
3
|
+
// Sample.File= new Object();
|
|
4
|
+
// Sample.File.FIXTURES =[];
|
|
5
|
+
//
|
|
6
|
+
// Sample.File.FIXTURES = [
|
|
7
|
+
// // files
|
|
8
|
+
// { guid: '10', name: 'Home', url: '/emily_parker', isDirectory: true, parent: null, children: 'Collection'},
|
|
9
|
+
// { guid: '11', name: 'Documents', fileType: 'documents', url: '/emily_parker/Documents', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'October 21, 2007', filetype: 'directory', isShared: false},
|
|
10
|
+
// { guid: '137',name: 'Library', fileType: 'library', url: '/emily_parker/Library', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'October 21, 2007', filetype: 'directory', isShared: false},
|
|
11
|
+
// { guid: '12', name: 'Movies', fileType: 'movies', url: '/emily_parker/Movies', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'June 15, 2007', filetype: 'directory', isShared: true, sharedAt: 'October 15, 2007', sharedUntil: 'March 31, 2008', sharedUrl: '2fhty', isPasswordRequired: true},
|
|
12
|
+
// { guid: '134',name: 'Music', fileType: 'music', url: '/emily_parker/Music', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'June 15, 2007', filetype: 'directory', isShared: true, sharedAt: 'October 15, 2007', sharedUntil: 'March 31, 2008', sharedUrl: '2fhty', isPasswordRequired: true},
|
|
13
|
+
// { guid: '135',name: 'Pictures', fileType: 'pictures', url: '/emily_parker/Pictures', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'June 15, 2007', filetype: 'directory', isShared: true, sharedAt: 'October 15, 2007', sharedUntil: 'March 31, 2008', sharedUrl: '2fhty', isPasswordRequired: true},
|
|
14
|
+
// { guid: '13', name: 'Auto Insurance', fileType: 'folder', url: '/emily_parker/Documents/Auto%20Insurance', isDirectory: true, parent: '11', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'October 21, 2007', filetype: 'directory', isShared: false},
|
|
15
|
+
// { guid: '14', name: 'Birthday Invitation.pdf', fileType: 'file', url: '/emily_parker/Documents/Birthday%20Invitation', isDirectory: false, parent: '11', createdAt: 'October 17, 2007', modifiedAt: 'October 21, 2007', filetype: 'pdf', isShared: false},
|
|
16
|
+
// { guid: '136', name: 'Software', fileType: 'software', url: '/emily_parker/Software', isDirectory: true, parent: '10', children: 'Collection', createdAt: 'June 15, 2007', modifiedAt: 'June 15, 2007', filetype: 'directory', isShared: true, sharedAt: 'October 15, 2007', sharedUntil: 'March 31, 2008', sharedUrl: '2fhty', isPasswordRequired: true}
|
|
17
|
+
// ];
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2010 Evin Grano
|
|
4
|
+
// License: Licensed under MIT license (see license.js)
|
|
5
|
+
// ==========================================================================
|
|
6
|
+
|
|
7
|
+
sc_require('models/record');
|
|
8
|
+
sc_require('models/record_attribute');
|
|
9
|
+
|
|
10
|
+
/** @class
|
|
11
|
+
|
|
12
|
+
ChildAttribute is a subclass of RecordAttribute and handles to-one
|
|
13
|
+
relationships for child records.
|
|
14
|
+
|
|
15
|
+
When setting ( .set() ) the value of a toMany attribute, make sure
|
|
16
|
+
to pass in an array of SC.Record objects.
|
|
17
|
+
|
|
18
|
+
There are many ways you can configure a ManyAttribute:
|
|
19
|
+
|
|
20
|
+
{{{
|
|
21
|
+
contacts: SC.ChildAttribute.attr('SC.Child');
|
|
22
|
+
}}}
|
|
23
|
+
|
|
24
|
+
@extends SC.RecordAttribute
|
|
25
|
+
@since SproutCore 1.0
|
|
26
|
+
*/
|
|
27
|
+
SC.ChildAttribute = SC.RecordAttribute.extend(
|
|
28
|
+
/** @scope SC.ChildAttribute.prototype */ {
|
|
29
|
+
|
|
30
|
+
isNestedRecordTransform: YES,
|
|
31
|
+
|
|
32
|
+
// ..........................................................
|
|
33
|
+
// LOW-LEVEL METHODS
|
|
34
|
+
//
|
|
35
|
+
|
|
36
|
+
/** @private - adapted for to one relationship */
|
|
37
|
+
toType: function(record, key, value) {
|
|
38
|
+
var ret = null, rel,
|
|
39
|
+
recordType = this.get('typeClass');
|
|
40
|
+
|
|
41
|
+
if (!record) {
|
|
42
|
+
throw 'SC.Child: Error during transform: Unable to retrieve parent record.';
|
|
43
|
+
}
|
|
44
|
+
if (!SC.none(value)) ret = record.registerNestedRecord(value, key);
|
|
45
|
+
|
|
46
|
+
return ret;
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
// Default fromType is just returning itself
|
|
50
|
+
fromType: function(record, key, value){
|
|
51
|
+
var sk, store, ret;
|
|
52
|
+
if (record){
|
|
53
|
+
ret = record.registerNestedRecord(value, key, key);
|
|
54
|
+
if (ret) {
|
|
55
|
+
sk = ret.get('storeKey');
|
|
56
|
+
store = ret.get('store');
|
|
57
|
+
record.writeAttribute(key, store.readDataHash(sk));
|
|
58
|
+
}
|
|
59
|
+
else if (value) {
|
|
60
|
+
record.writeAttribute(key, value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return ret;
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
The core handler. Called from the property.
|
|
69
|
+
@param {SC.Record} record the record instance
|
|
70
|
+
@param {String} key the key used to access this attribute on the record
|
|
71
|
+
@param {Object} value the property value if called as a setter
|
|
72
|
+
@returns {Object} property value
|
|
73
|
+
*/
|
|
74
|
+
call: function(record, key, value) {
|
|
75
|
+
var attrKey = this.get('key') || key, cRef,
|
|
76
|
+
cacheKey = SC.keyFor('__kid__', SC.guidFor(this));
|
|
77
|
+
if (value !== undefined) {
|
|
78
|
+
// this.orphan(record, cacheKey, value);
|
|
79
|
+
value = this.fromType(record, key, value) ; // convert to attribute.
|
|
80
|
+
// record[cacheKey] = value;
|
|
81
|
+
} else {
|
|
82
|
+
value = record.readAttribute(attrKey);
|
|
83
|
+
if (SC.none(value) && (value = this.get('defaultValue'))) {
|
|
84
|
+
if (typeof value === SC.T_FUNCTION) {
|
|
85
|
+
value = this.defaultValue(record, key, this);
|
|
86
|
+
// write default value so it doesn't have to be executed again
|
|
87
|
+
if(record.attributes()) record.writeAttribute(attrKey, value, true);
|
|
88
|
+
}
|
|
89
|
+
} else value = this.toType(record, key, value);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return value ;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2010 Evin Grano
|
|
4
|
+
// License: Licensed under MIT license (see license.js)
|
|
5
|
+
// ==========================================================================
|
|
6
|
+
|
|
7
|
+
sc_require('models/record');
|
|
8
|
+
sc_require('models/record_attribute');
|
|
9
|
+
sc_require('models/child_attribute');
|
|
10
|
+
sc_require('system/child_array');
|
|
11
|
+
|
|
12
|
+
/** @class
|
|
13
|
+
|
|
14
|
+
ChildrenAttribute is a subclass of ChildAttribute and handles to-many
|
|
15
|
+
relationships for child records.
|
|
16
|
+
|
|
17
|
+
When setting ( .set() ) the value of a toMany attribute, make sure
|
|
18
|
+
to pass in an array of SC.Record objects.
|
|
19
|
+
|
|
20
|
+
There are many ways you can configure a ChildrenAttribute:
|
|
21
|
+
|
|
22
|
+
{{{
|
|
23
|
+
contacts: SC.ChildrenAttribute.attr('SC.Child');
|
|
24
|
+
}}}
|
|
25
|
+
|
|
26
|
+
@extends SC.RecordAttribute
|
|
27
|
+
@since SproutCore 1.0
|
|
28
|
+
*/
|
|
29
|
+
SC.ChildrenAttribute = SC.ChildAttribute.extend(
|
|
30
|
+
/** @scope SC.ChildrenAttribute.prototype */ {
|
|
31
|
+
|
|
32
|
+
// ..........................................................
|
|
33
|
+
// LOW-LEVEL METHODS
|
|
34
|
+
//
|
|
35
|
+
|
|
36
|
+
/** @private - adapted for to many relationship */
|
|
37
|
+
toType: function(record, key, value) {
|
|
38
|
+
var attrKey = this.get('key') || key,
|
|
39
|
+
arrayKey = SC.keyFor('__kidsArray__', SC.guidFor(this)),
|
|
40
|
+
ret = record[arrayKey],
|
|
41
|
+
recordType = this.get('typeClass'), rel;
|
|
42
|
+
|
|
43
|
+
// lazily create a ManyArray one time. after that always return the
|
|
44
|
+
// same object.
|
|
45
|
+
if (!ret) {
|
|
46
|
+
ret = SC.ChildArray.create({
|
|
47
|
+
record: record,
|
|
48
|
+
propertyName: attrKey,
|
|
49
|
+
defaultRecordType: recordType
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
record[arrayKey] = ret ; // save on record
|
|
53
|
+
rel = record.get('relationships');
|
|
54
|
+
if (!rel) record.set('relationships', rel = []);
|
|
55
|
+
rel.push(ret); // make sure we get notified of changes...
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return ret;
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
// Default fromType is just returning itself
|
|
62
|
+
fromType: function(record, key, value){
|
|
63
|
+
var sk, store,
|
|
64
|
+
arrayKey = SC.keyFor('__kidsArray__', SC.guidFor(this)),
|
|
65
|
+
ret = record[arrayKey];
|
|
66
|
+
if (record) {
|
|
67
|
+
record.writeAttribute(key, value);
|
|
68
|
+
if (ret) ret = ret.recordPropertyDidChange();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return ret;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
|
4
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
|
6
|
+
// ==========================================================================
|
|
7
|
+
|
|
8
|
+
sc_require('models/record');
|
|
9
|
+
sc_require('models/record_attribute');
|
|
10
|
+
|
|
11
|
+
/** @class
|
|
12
|
+
|
|
13
|
+
Describes a single attribute that is fetched dynamically from the server
|
|
14
|
+
when you request it. Normally getting a property value with this attribute
|
|
15
|
+
applied will cause call the find() method on the record store passing
|
|
16
|
+
the attribute record type as the query key along with the property value,
|
|
17
|
+
owner record, and property key name as parameters.
|
|
18
|
+
|
|
19
|
+
The DataSource you hook up to your store must know how to load this kind
|
|
20
|
+
of relationship for this fetched property to work properly.
|
|
21
|
+
|
|
22
|
+
The return value is usually an SC.RecordArray that will populate with the
|
|
23
|
+
record data so that you can display it.
|
|
24
|
+
|
|
25
|
+
@extends SC.RecordAttribute
|
|
26
|
+
@since SproutCore 1.0
|
|
27
|
+
*/
|
|
28
|
+
SC.FetchedAttribute = SC.RecordAttribute.extend(
|
|
29
|
+
/** @scope SC.FetchedAttribute.prototype */ {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
Define the param key that will be passed to the findAll method on the
|
|
33
|
+
store. If null, the param will not be send. Defaults to 'link'
|
|
34
|
+
|
|
35
|
+
@property {String}
|
|
36
|
+
*/
|
|
37
|
+
paramValueKey: 'link',
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
Define the param key used to send the parent record. If null the param
|
|
41
|
+
will not be sent. Defaults to 'owner'.
|
|
42
|
+
|
|
43
|
+
@property {String}
|
|
44
|
+
*/
|
|
45
|
+
paramOwnerKey: 'owner',
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
Define the param key used to send the key name used to reference this
|
|
49
|
+
attribute. If null, the param will not be sent. Defaults to "rel"
|
|
50
|
+
|
|
51
|
+
@property {String}
|
|
52
|
+
*/
|
|
53
|
+
paramRelKey: 'rel',
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
Optional query key to pass to findAll. Otherwise type class will be
|
|
57
|
+
passed.
|
|
58
|
+
|
|
59
|
+
@property {String}
|
|
60
|
+
*/
|
|
61
|
+
queryKey: null,
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
Fetched attributes are not editable
|
|
65
|
+
|
|
66
|
+
@property {Boolean}
|
|
67
|
+
*/
|
|
68
|
+
isEditable: NO,
|
|
69
|
+
|
|
70
|
+
// ..........................................................
|
|
71
|
+
// LOW-LEVEL METHODS
|
|
72
|
+
//
|
|
73
|
+
|
|
74
|
+
/** @private - adapted for fetching. do findAll */
|
|
75
|
+
toType: function(record, key, value) {
|
|
76
|
+
var store = record.get('store');
|
|
77
|
+
if (!store) return null ; // nothing to do
|
|
78
|
+
|
|
79
|
+
var paramValueKey = this.get('paramValueKey'),
|
|
80
|
+
paramOwnerKey = this.get('paramOwnerKey'),
|
|
81
|
+
paramRelKey = this.get('paramRelKey'),
|
|
82
|
+
queryKey = this.get('queryKey') || this.get('typeClass'),
|
|
83
|
+
params = {};
|
|
84
|
+
|
|
85
|
+
// setup params for query
|
|
86
|
+
if (paramValueKey) params[paramValueKey] = value ;
|
|
87
|
+
if (paramOwnerKey) params[paramOwnerKey] = record ;
|
|
88
|
+
if (paramRelKey) params[paramRelKey] = this.get('key') || key ;
|
|
89
|
+
|
|
90
|
+
// make request - should return SC.RecordArray instance
|
|
91
|
+
return store.findAll(queryKey, params);
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
/** @private - fetched attributes are read only. */
|
|
95
|
+
fromType: function(record, key, value) {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
}) ;
|
|
100
|
+
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
|
4
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
|
6
|
+
// ==========================================================================
|
|
7
|
+
|
|
8
|
+
sc_require('models/record');
|
|
9
|
+
sc_require('models/record_attribute');
|
|
10
|
+
sc_require('system/many_array');
|
|
11
|
+
|
|
12
|
+
/** @class
|
|
13
|
+
|
|
14
|
+
ManyAttribute is a subclass of RecordAttribute and handles to-many
|
|
15
|
+
relationships.
|
|
16
|
+
|
|
17
|
+
When setting ( .set() ) the value of a toMany attribute, make sure
|
|
18
|
+
to pass in an array of SC.Record objects.
|
|
19
|
+
|
|
20
|
+
There are many ways you can configure a ManyAttribute:
|
|
21
|
+
|
|
22
|
+
{{{
|
|
23
|
+
contacts: SC.Record.toMany('MyApp.Contact', {
|
|
24
|
+
inverse: 'group', // set the key used to represent the inverse
|
|
25
|
+
isMaster: YES|NO, // indicate whether changing this should dirty
|
|
26
|
+
transform: function(), // transforms value <=> storeKey,
|
|
27
|
+
isEditable: YES|NO, make editable or not,
|
|
28
|
+
through: 'taggings' // set a relationship this goes through
|
|
29
|
+
});
|
|
30
|
+
}}}
|
|
31
|
+
|
|
32
|
+
@extends SC.RecordAttribute
|
|
33
|
+
@since SproutCore 1.0
|
|
34
|
+
*/
|
|
35
|
+
SC.ManyAttribute = SC.RecordAttribute.extend(
|
|
36
|
+
/** @scope SC.ManyAttribute.prototype */ {
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
Set the foreign key on content objects that represent the inversion of
|
|
40
|
+
this relationship. The inverse property should be a toOne() or toMany()
|
|
41
|
+
relationship as well. Modifying this many array will modify the inverse
|
|
42
|
+
property as well.
|
|
43
|
+
|
|
44
|
+
@property {String}
|
|
45
|
+
*/
|
|
46
|
+
inverse: null,
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
If YES then modifying this relationships will mark the owner record
|
|
50
|
+
dirty. If set ot NO, then modifying this relationship will not alter
|
|
51
|
+
this record. You should use this property only if you have an inverse
|
|
52
|
+
property also set. Only one of the inverse relationships should be marked
|
|
53
|
+
as master so you can control which record should be committed.
|
|
54
|
+
|
|
55
|
+
@property {Boolean}
|
|
56
|
+
*/
|
|
57
|
+
isMaster: YES,
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
If set and you have an inverse relationship, will be used to determine the
|
|
61
|
+
order of an object when it is added to an array. You can pass a function
|
|
62
|
+
or an array of property keys.
|
|
63
|
+
|
|
64
|
+
@property {Function|Array}
|
|
65
|
+
*/
|
|
66
|
+
orderBy: null,
|
|
67
|
+
|
|
68
|
+
// ..........................................................
|
|
69
|
+
// LOW-LEVEL METHODS
|
|
70
|
+
//
|
|
71
|
+
|
|
72
|
+
/** @private - adapted for to many relationship */
|
|
73
|
+
toType: function(record, key, value) {
|
|
74
|
+
var type = this.get('typeClass'),
|
|
75
|
+
attrKey = this.get('key') || key,
|
|
76
|
+
arrayKey = SC.keyFor('__manyArray__', SC.guidFor(this)),
|
|
77
|
+
ret = record[arrayKey],
|
|
78
|
+
rel;
|
|
79
|
+
|
|
80
|
+
// lazily create a ManyArray one time. after that always return the
|
|
81
|
+
// same object.
|
|
82
|
+
if (!ret) {
|
|
83
|
+
ret = SC.ManyArray.create({
|
|
84
|
+
recordType: type,
|
|
85
|
+
record: record,
|
|
86
|
+
propertyName: attrKey,
|
|
87
|
+
manyAttribute: this
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
record[arrayKey] = ret ; // save on record
|
|
91
|
+
rel = record.get('relationships');
|
|
92
|
+
if (!rel) record.set('relationships', rel = []);
|
|
93
|
+
rel.push(ret); // make sure we get notified of changes...
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return ret;
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
/** @private - adapted for to many relationship */
|
|
101
|
+
fromType: function(record, key, value) {
|
|
102
|
+
var ret = [];
|
|
103
|
+
|
|
104
|
+
if(!SC.isArray(value)) throw "Expects toMany attribute to be an array";
|
|
105
|
+
|
|
106
|
+
var len = value.get('length');
|
|
107
|
+
for(var i=0;i<len;i++) {
|
|
108
|
+
ret[i] = value.objectAt(i).get('id');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return ret;
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
Called by an inverse relationship whenever the receiver is no longer part
|
|
116
|
+
of the relationship. If this matches the inverse setting of the attribute
|
|
117
|
+
then it will update itself accordingly.
|
|
118
|
+
|
|
119
|
+
You should never call this directly.
|
|
120
|
+
|
|
121
|
+
@param {SC.Record} the record owning this attribute
|
|
122
|
+
@param {String} key the key for this attribute
|
|
123
|
+
@param {SC.Record} inverseRecord record that was removed from inverse
|
|
124
|
+
@param {String} key key on inverse that was modified
|
|
125
|
+
@returns {void}
|
|
126
|
+
*/
|
|
127
|
+
inverseDidRemoveRecord: function(record, key, inverseRecord, inverseKey) {
|
|
128
|
+
var manyArray = record.get(key);
|
|
129
|
+
if (manyArray) {
|
|
130
|
+
manyArray.removeInverseRecord(inverseRecord);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
Called by an inverse relationship whenever the receiver is added to the
|
|
136
|
+
inverse relationship. This will set the value of this inverse record to
|
|
137
|
+
the new record.
|
|
138
|
+
|
|
139
|
+
You should never call this directly.
|
|
140
|
+
|
|
141
|
+
@param {SC.Record} the record owning this attribute
|
|
142
|
+
@param {String} key the key for this attribute
|
|
143
|
+
@param {SC.Record} inverseRecord record that was added to inverse
|
|
144
|
+
@param {String} key key on inverse that was modified
|
|
145
|
+
@returns {void}
|
|
146
|
+
*/
|
|
147
|
+
inverseDidAddRecord: function(record, key, inverseRecord, inverseKey) {
|
|
148
|
+
var manyArray = record.get(key);
|
|
149
|
+
if (manyArray) {
|
|
150
|
+
manyArray.addInverseRecord(inverseRecord);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
});
|
|
@@ -0,0 +1,1318 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
|
4
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
|
6
|
+
// ==========================================================================
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
@class
|
|
10
|
+
|
|
11
|
+
A Record is the core model class in SproutCore. It is analogous to
|
|
12
|
+
NSManagedObject in Core Data and EOEnterpriseObject in the Enterprise
|
|
13
|
+
Objects Framework (aka WebObjects), or ActiveRecord::Base in Rails.
|
|
14
|
+
|
|
15
|
+
To create a new model class, in your SproutCore workspace, do:
|
|
16
|
+
|
|
17
|
+
{{{
|
|
18
|
+
$ sc-gen model MyApp.MyModel
|
|
19
|
+
}}}
|
|
20
|
+
|
|
21
|
+
This will create MyApp.MyModel in clients/my_app/models/my_model.js.
|
|
22
|
+
|
|
23
|
+
The core attributes hash is used to store the values of a record in a
|
|
24
|
+
format that can be easily passed to/from the server. The values should
|
|
25
|
+
generally be stored in their raw string form. References to external
|
|
26
|
+
records should be stored as primary keys.
|
|
27
|
+
|
|
28
|
+
Normally you do not need to work with the attributes hash directly.
|
|
29
|
+
Instead you should use get/set on normal record properties. If the
|
|
30
|
+
property is not defined on the object, then the record will check the
|
|
31
|
+
attributes hash instead.
|
|
32
|
+
|
|
33
|
+
You can bulk update attributes from the server using the
|
|
34
|
+
updateAttributes() method.
|
|
35
|
+
|
|
36
|
+
@extends SC.Object
|
|
37
|
+
@since SproutCore 1.0
|
|
38
|
+
*/
|
|
39
|
+
SC.Record = SC.Object.extend(
|
|
40
|
+
/** @scope SC.Record.prototype */ {
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
Walk like a duck
|
|
44
|
+
|
|
45
|
+
@property {Boolean}
|
|
46
|
+
*/
|
|
47
|
+
isRecord: YES,
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
If you have nested records
|
|
51
|
+
*/
|
|
52
|
+
isParentRecord: NO,
|
|
53
|
+
|
|
54
|
+
// ...............................
|
|
55
|
+
// PROPERTIES
|
|
56
|
+
//
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
This is the primary key used to distinguish records. If the keys
|
|
60
|
+
match, the records are assumed to be identical.
|
|
61
|
+
|
|
62
|
+
@property {String}
|
|
63
|
+
*/
|
|
64
|
+
primaryKey: 'guid',
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
Returns the id for the record instance. The id is used to uniquely
|
|
68
|
+
identify this record instance from all others of the same type. If you
|
|
69
|
+
have a primaryKey set on this class, then the id will be the value of the
|
|
70
|
+
primaryKey property on the underlying JSON hash.
|
|
71
|
+
|
|
72
|
+
@property {String}
|
|
73
|
+
*/
|
|
74
|
+
id: function(key, value) {
|
|
75
|
+
if (value !== undefined) {
|
|
76
|
+
this.writeAttribute(this.get('primaryKey'), value);
|
|
77
|
+
return value;
|
|
78
|
+
} else {
|
|
79
|
+
return SC.Store.idFor(this.storeKey);
|
|
80
|
+
}
|
|
81
|
+
}.property('storeKey').cacheable(),
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
All records generally have a life cycle as they are created or loaded into
|
|
85
|
+
memory, modified, committed and finally destroyed. This life cycle is
|
|
86
|
+
managed by the status property on your record.
|
|
87
|
+
|
|
88
|
+
The status of a record is modelled as a finite state machine. Based on the
|
|
89
|
+
current state of the record, you can determine which operations are
|
|
90
|
+
currently allowed on the record and which are not.
|
|
91
|
+
|
|
92
|
+
In general, a record can be in one of five primary states; SC.Record.EMPTY,
|
|
93
|
+
SC.Record.BUSY, SC.Record.READY, SC.Record.DESTROYED, SC.Record.ERROR.
|
|
94
|
+
These are all described in more detail in the class mixin (below) where
|
|
95
|
+
they are defined.
|
|
96
|
+
|
|
97
|
+
@property {Number}
|
|
98
|
+
*/
|
|
99
|
+
status: function() {
|
|
100
|
+
return this.store.readStatus(this.storeKey);
|
|
101
|
+
}.property('storeKey').cacheable(),
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
The store that owns this record. All changes will be buffered into this
|
|
105
|
+
store and committed to the rest of the store chain through here.
|
|
106
|
+
|
|
107
|
+
This property is set when the record instance is created and should not be
|
|
108
|
+
changed or else it will break the record behavior.
|
|
109
|
+
|
|
110
|
+
@property {SC.Store}
|
|
111
|
+
*/
|
|
112
|
+
store: null,
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
This is the store key for the record, it is used to link it back to the
|
|
116
|
+
dataHash. If a record is reused, this value will be replaced.
|
|
117
|
+
|
|
118
|
+
You should not edit this store key but you may sometimes need to refer to
|
|
119
|
+
this store key when implementing a Server object.
|
|
120
|
+
|
|
121
|
+
@property {Number}
|
|
122
|
+
*/
|
|
123
|
+
storeKey: null,
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
YES when the record has been destroyed
|
|
127
|
+
|
|
128
|
+
@property {Boolean}
|
|
129
|
+
*/
|
|
130
|
+
isDestroyed: function() {
|
|
131
|
+
return !!(this.get('status') & SC.Record.DESTROYED);
|
|
132
|
+
}.property('status').cacheable(),
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
YES when the record is in an editable state. You can use this property to
|
|
136
|
+
quickly determine whether attempting to modify the record would raise an
|
|
137
|
+
exception or not.
|
|
138
|
+
|
|
139
|
+
This property is both readable and writable. Note however that if you
|
|
140
|
+
set this property to YES but the status of the record is anything but
|
|
141
|
+
SC.Record.READY, the return value of this property may remain NO.
|
|
142
|
+
|
|
143
|
+
@property {Boolean}
|
|
144
|
+
*/
|
|
145
|
+
isEditable: function(key, value) {
|
|
146
|
+
if (value !== undefined) this._screc_isEditable = value;
|
|
147
|
+
if (this.get('status') & SC.Record.READY) return this._screc_isEditable;
|
|
148
|
+
else return NO ;
|
|
149
|
+
}.property('status').cacheable(),
|
|
150
|
+
|
|
151
|
+
_screc_isEditable: YES, // default
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
YES when the record's contents have been loaded for the first time. You
|
|
155
|
+
can use this to quickly determine if the record is ready to display.
|
|
156
|
+
|
|
157
|
+
@property {Boolean}
|
|
158
|
+
*/
|
|
159
|
+
isLoaded: function() {
|
|
160
|
+
var K = SC.Record,
|
|
161
|
+
status = this.get('status');
|
|
162
|
+
return !((status===K.EMPTY) || (status===K.BUSY_LOADING) || (status===K.ERROR));
|
|
163
|
+
}.property('status').cacheable(),
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
If set, this should be an array of active relationship objects that need
|
|
167
|
+
to be notified whenever the underlying record properties change.
|
|
168
|
+
Currently this is only used by toMany relationships, but you could
|
|
169
|
+
possibly patch into this yourself also if you are building your own
|
|
170
|
+
relationships.
|
|
171
|
+
|
|
172
|
+
Note this must be a regular Array - NOT any object implementing SC.Array.
|
|
173
|
+
|
|
174
|
+
@property {Array}
|
|
175
|
+
*/
|
|
176
|
+
relationships: null,
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
This will return the raw attributes that you can edit directly. If you
|
|
180
|
+
make changes to this hash, be sure to call beginEditing() before you get
|
|
181
|
+
the attributes and endEditing() afterwards.
|
|
182
|
+
|
|
183
|
+
@property {Hash}
|
|
184
|
+
**/
|
|
185
|
+
attributes: function() {
|
|
186
|
+
var store = this.get('store'),
|
|
187
|
+
storeKey = this.storeKey;
|
|
188
|
+
return store.readEditableDataHash(storeKey);
|
|
189
|
+
}.property(),
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
This will return the raw attributes that you cannot edit directly. It is
|
|
193
|
+
useful if you want to efficiently look at multiple attributes in bulk. If
|
|
194
|
+
you would like to edit the attributes, see the @attributes@ property
|
|
195
|
+
instead.
|
|
196
|
+
|
|
197
|
+
@property {Hash}
|
|
198
|
+
**/
|
|
199
|
+
readOnlyAttributes: function() {
|
|
200
|
+
var store = this.get('store'),
|
|
201
|
+
storeKey = this.storeKey,
|
|
202
|
+
ret = store.readDataHash(storeKey);
|
|
203
|
+
|
|
204
|
+
if (ret) ret = SC.clone(ret, YES);
|
|
205
|
+
|
|
206
|
+
return ret;
|
|
207
|
+
}.property(),
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* The namespace which to retrieve the childRecord Types from
|
|
211
|
+
*/
|
|
212
|
+
nestedRecordNamespace: null,
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
Function that returns whether this is a nested Record
|
|
216
|
+
*/
|
|
217
|
+
isNestedRecord: function(){
|
|
218
|
+
var store = this.get('store'), ret,
|
|
219
|
+
sk = this.get('storeKey'),
|
|
220
|
+
prKey = store.parentStoreKeyExists(sk);
|
|
221
|
+
|
|
222
|
+
ret = prKey ? YES : NO;
|
|
223
|
+
return ret;
|
|
224
|
+
}.property().cacheable(),
|
|
225
|
+
|
|
226
|
+
parentRecord: function(){
|
|
227
|
+
var sk = this.storeKey, store = this.get('store');
|
|
228
|
+
return store.materializeParentRecord(sk);
|
|
229
|
+
}.property(),
|
|
230
|
+
|
|
231
|
+
// ...............................
|
|
232
|
+
// CRUD OPERATIONS
|
|
233
|
+
//
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
Refresh the record from the persistent store. If the record was loaded
|
|
237
|
+
from a persistent store, then the store will be asked to reload the
|
|
238
|
+
record data from the server. If the record is new and exists only in
|
|
239
|
+
memory then this call will have no effect.
|
|
240
|
+
|
|
241
|
+
@param {boolean} recordOnly, optional param if you want to only THIS record
|
|
242
|
+
even if it is a child record.
|
|
243
|
+
@param {Function} callback, optional callback that will fire when request finishes
|
|
244
|
+
|
|
245
|
+
@returns {SC.Record} receiver
|
|
246
|
+
*/
|
|
247
|
+
refresh: function(recordOnly, callback) {
|
|
248
|
+
var store = this.get('store'), rec, ro,
|
|
249
|
+
sk = this.get('storeKey'),
|
|
250
|
+
prKey = store.parentStoreKeyExists();
|
|
251
|
+
|
|
252
|
+
// If we only want to commit this record or it doesn't have a parent record
|
|
253
|
+
// we will commit this record
|
|
254
|
+
ro = recordOnly || (SC.none(recordOnly) && SC.none(prKey));
|
|
255
|
+
if (ro){
|
|
256
|
+
store.refreshRecord(null, null, sk, callback);
|
|
257
|
+
} else if (prKey){
|
|
258
|
+
rec = store.materializeRecord(prKey);
|
|
259
|
+
rec.refresh(recordOnly, callback);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return this ;
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
Deletes the record along with any dependent records. This will mark the
|
|
267
|
+
records destroyed in the store as well as changing the isDestroyed
|
|
268
|
+
property on the record to YES. If this is a new record, this will avoid
|
|
269
|
+
creating the record in the first place.
|
|
270
|
+
|
|
271
|
+
@param {boolean} recordOnly, optional param if you want to only THIS record
|
|
272
|
+
even if it is a child record.
|
|
273
|
+
|
|
274
|
+
@returns {SC.Record} receiver
|
|
275
|
+
*/
|
|
276
|
+
destroy: function(recordOnly) {
|
|
277
|
+
var store = this.get('store'), rec, ro,
|
|
278
|
+
sk = this.get('storeKey'),
|
|
279
|
+
prKey = store.parentStoreKeyExists();
|
|
280
|
+
|
|
281
|
+
// If we only want to commit this record or it doesn't have a parent record
|
|
282
|
+
// we will commit this record
|
|
283
|
+
ro = recordOnly || (SC.none(recordOnly) && SC.none(prKey));
|
|
284
|
+
if (ro){
|
|
285
|
+
store.destroyRecord(null, null, sk);
|
|
286
|
+
this.notifyPropertyChange('status');
|
|
287
|
+
// If there are any aggregate records, we might need to propagate our new
|
|
288
|
+
// status to them.
|
|
289
|
+
this.propagateToAggregates();
|
|
290
|
+
|
|
291
|
+
} else if (prKey){
|
|
292
|
+
rec = store.materializeRecord(prKey);
|
|
293
|
+
rec.destroy(recordOnly);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return this ;
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
You can invoke this method anytime you need to make the record as dirty.
|
|
301
|
+
This will cause the record to be commited when you commitChanges()
|
|
302
|
+
on the underlying store.
|
|
303
|
+
|
|
304
|
+
If you use the writeAttribute() primitive, this method will be called for
|
|
305
|
+
you.
|
|
306
|
+
|
|
307
|
+
If you pass the key that changed it will ensure that observers are fired
|
|
308
|
+
only once for the changed property instead of allPropertiesDidChange()
|
|
309
|
+
|
|
310
|
+
@param {String} key that changed (optional)
|
|
311
|
+
@returns {SC.Record} receiver
|
|
312
|
+
*/
|
|
313
|
+
recordDidChange: function(key) {
|
|
314
|
+
|
|
315
|
+
// If we have a parent, they changed too!
|
|
316
|
+
var p = this.get('parentRecord');
|
|
317
|
+
if (p) p.recordDidChange();
|
|
318
|
+
|
|
319
|
+
this.get('store').recordDidChange(null, null, this.get('storeKey'), key);
|
|
320
|
+
this.notifyPropertyChange('status');
|
|
321
|
+
|
|
322
|
+
// If there are any aggregate records, we might need to propagate our new
|
|
323
|
+
// status to them.
|
|
324
|
+
this.propagateToAggregates();
|
|
325
|
+
|
|
326
|
+
return this ;
|
|
327
|
+
},
|
|
328
|
+
|
|
329
|
+
// ...............................
|
|
330
|
+
// ATTRIBUTES
|
|
331
|
+
//
|
|
332
|
+
|
|
333
|
+
/** @private
|
|
334
|
+
Current edit level. Used to defer editing changes.
|
|
335
|
+
*/
|
|
336
|
+
_editLevel: 0 ,
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
Defers notification of record changes until you call a matching
|
|
340
|
+
endEditing() method. This method is called automatically whenever you
|
|
341
|
+
set an attribute, but you can call it yourself to group multiple changes.
|
|
342
|
+
|
|
343
|
+
Calls to beginEditing() and endEditing() can be nested.
|
|
344
|
+
|
|
345
|
+
@returns {SC.Record} receiver
|
|
346
|
+
*/
|
|
347
|
+
beginEditing: function() {
|
|
348
|
+
this._editLevel++;
|
|
349
|
+
return this ;
|
|
350
|
+
},
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
Notifies the store of record changes if this matches a top level call to
|
|
354
|
+
beginEditing(). This method is called automatically whenever you set an
|
|
355
|
+
attribute, but you can call it yourself to group multiple changes.
|
|
356
|
+
|
|
357
|
+
Calls to beginEditing() and endEditing() can be nested.
|
|
358
|
+
|
|
359
|
+
@param {String} key that changed (optional)
|
|
360
|
+
@returns {SC.Record} receiver
|
|
361
|
+
*/
|
|
362
|
+
endEditing: function(key) {
|
|
363
|
+
if(--this._editLevel <= 0) {
|
|
364
|
+
this._editLevel = 0;
|
|
365
|
+
this.recordDidChange(key);
|
|
366
|
+
}
|
|
367
|
+
return this ;
|
|
368
|
+
},
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
Reads the raw attribute from the underlying data hash. This method does
|
|
372
|
+
not transform the underlying attribute at all.
|
|
373
|
+
|
|
374
|
+
@param {String} key the attribute you want to read
|
|
375
|
+
@returns {Object} the value of the key, or undefined if it doesn't exist
|
|
376
|
+
*/
|
|
377
|
+
readAttribute: function(key) {
|
|
378
|
+
var store = this.get('store'), storeKey = this.storeKey;
|
|
379
|
+
var attrs = store.readDataHash(storeKey);
|
|
380
|
+
return attrs ? attrs[key] : undefined ;
|
|
381
|
+
},
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
Updates the passed attribute with the new value. This method does not
|
|
385
|
+
transform the value at all. If instead you want to modify an array or
|
|
386
|
+
hash already defined on the underlying json, you should instead get
|
|
387
|
+
an editable version of the attribute using editableAttribute()
|
|
388
|
+
|
|
389
|
+
@param {String} key the attribute you want to read
|
|
390
|
+
@param {Object} value the value you want to write
|
|
391
|
+
@param {Boolean} ignoreDidChange only set if you do NOT want to flag
|
|
392
|
+
record as dirty
|
|
393
|
+
@returns {SC.Record} receiver
|
|
394
|
+
*/
|
|
395
|
+
writeAttribute: function(key, value, ignoreDidChange) {
|
|
396
|
+
var store = this.get('store'),
|
|
397
|
+
storeKey = this.storeKey,
|
|
398
|
+
attrs;
|
|
399
|
+
|
|
400
|
+
attrs = store.readEditableDataHash(storeKey);
|
|
401
|
+
if (!attrs) throw SC.Record.BAD_STATE_ERROR;
|
|
402
|
+
|
|
403
|
+
// if value is the same, do not flag record as dirty
|
|
404
|
+
if (value !== attrs[key]) {
|
|
405
|
+
if(!ignoreDidChange) this.beginEditing();
|
|
406
|
+
attrs[key] = value;
|
|
407
|
+
|
|
408
|
+
// If the key is the primaryKey of the record, we need to tell the store
|
|
409
|
+
// about the change.
|
|
410
|
+
if (key===this.get('primaryKey')) {
|
|
411
|
+
SC.Store.replaceIdFor(storeKey, value) ;
|
|
412
|
+
this.propertyDidChange('id'); // Reset computed value
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if(!ignoreDidChange) this.endEditing(key);
|
|
416
|
+
}
|
|
417
|
+
return this ;
|
|
418
|
+
},
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
This will also ensure that any aggregate records are also marked dirty
|
|
422
|
+
if this record changes.
|
|
423
|
+
|
|
424
|
+
Should not have to be called manually.
|
|
425
|
+
*/
|
|
426
|
+
propagateToAggregates: function() {
|
|
427
|
+
var storeKey = this.get('storeKey'),
|
|
428
|
+
recordType = SC.Store.recordTypeFor(storeKey),
|
|
429
|
+
idx, len, key, val, recs;
|
|
430
|
+
|
|
431
|
+
var aggregates = recordType.aggregates;
|
|
432
|
+
|
|
433
|
+
// if recordType aggregates are not set up yet, make sure to
|
|
434
|
+
// create the cache first
|
|
435
|
+
if (!aggregates) {
|
|
436
|
+
var dataHash = this.get('store').readDataHash(storeKey);
|
|
437
|
+
aggregates = [];
|
|
438
|
+
for(var k in dataHash) {
|
|
439
|
+
if(this[k] && this[k].get && this[k].get('aggregate')===YES) {
|
|
440
|
+
aggregates.push(k);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
recordType.aggregates = aggregates;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// now loop through all aggregate properties and mark their related
|
|
447
|
+
// record objects as dirty
|
|
448
|
+
var K = SC.Record,
|
|
449
|
+
dirty = K.DIRTY,
|
|
450
|
+
readyNew = K.READY_NEW,
|
|
451
|
+
destroyed = K.DESTROYED,
|
|
452
|
+
readyClean = K.READY_CLEAN,
|
|
453
|
+
iter;
|
|
454
|
+
|
|
455
|
+
// If the child is dirty, then make sure the parent gets a dirty
|
|
456
|
+
// status. (If the child is created or destroyed, there's no need,
|
|
457
|
+
// because the parent will dirty itself when it modifies that
|
|
458
|
+
// relationship.)
|
|
459
|
+
iter = function(rec) {
|
|
460
|
+
var childStatus, parentStatus;
|
|
461
|
+
|
|
462
|
+
if (rec) {
|
|
463
|
+
childStatus = this.get('status');
|
|
464
|
+
if ((childStatus & dirty) ||
|
|
465
|
+
(childStatus & readyNew) || (childStatus & destroyed)) {
|
|
466
|
+
parentStatus = rec.get('status');
|
|
467
|
+
if (parentStatus === readyClean) {
|
|
468
|
+
// Note: storeDidChangeProperties() won't put it in the
|
|
469
|
+
// changelog!
|
|
470
|
+
rec.get('store').recordDidChange(rec.constructor, null, rec.get('storeKey'), null, YES);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
for(idx=0,len=aggregates.length;idx<len;++idx) {
|
|
477
|
+
key = aggregates[idx];
|
|
478
|
+
val = this.get(key);
|
|
479
|
+
recs = SC.kindOf(val, SC.ManyArray) ? val : [val];
|
|
480
|
+
recs.forEach(iter, this);
|
|
481
|
+
}
|
|
482
|
+
},
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
Called by the store whenever the underlying data hash has changed. This
|
|
486
|
+
will notify any observers interested in data hash properties that they
|
|
487
|
+
have changed.
|
|
488
|
+
|
|
489
|
+
@param {Boolean} statusOnly changed
|
|
490
|
+
@param {String} key that changed (optional)
|
|
491
|
+
@returns {SC.Record} receiver
|
|
492
|
+
*/
|
|
493
|
+
storeDidChangeProperties: function(statusOnly, keys) {
|
|
494
|
+
// TODO: Should this function call propagateToAggregates() at the
|
|
495
|
+
// appropriate times?
|
|
496
|
+
if (statusOnly) this.notifyPropertyChange('status');
|
|
497
|
+
else {
|
|
498
|
+
if (keys) {
|
|
499
|
+
this.beginPropertyChanges();
|
|
500
|
+
keys.forEach(function(k) { this.notifyPropertyChange(k); }, this);
|
|
501
|
+
this.notifyPropertyChange('status');
|
|
502
|
+
this.endPropertyChanges();
|
|
503
|
+
|
|
504
|
+
} else this.allPropertiesDidChange();
|
|
505
|
+
|
|
506
|
+
// also notify manyArrays
|
|
507
|
+
var manyArrays = this.relationships,
|
|
508
|
+
loc = manyArrays ? manyArrays.length : 0 ;
|
|
509
|
+
while(--loc>=0) manyArrays[loc].recordPropertyDidChange(keys);
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
Normalizing a record will ensure that the underlying hash conforms
|
|
515
|
+
to the record attributes such as their types (transforms) and default
|
|
516
|
+
values.
|
|
517
|
+
|
|
518
|
+
This method will write the conforming hash to the store and return
|
|
519
|
+
the materialized record.
|
|
520
|
+
|
|
521
|
+
By normalizing the record, you can use .attributes() and be
|
|
522
|
+
assured that it will conform to the defined model. For example, this
|
|
523
|
+
can be useful in the case where you need to send a JSON representation
|
|
524
|
+
to some server after you have used .createRecord(), since this method
|
|
525
|
+
will enforce the 'rules' in the model such as their types and default
|
|
526
|
+
values. You can also include null values in the hash with the
|
|
527
|
+
includeNull argument.
|
|
528
|
+
|
|
529
|
+
@param {Boolean} includeNull will write empty (null) attributes
|
|
530
|
+
@returns {SC.Record} the normalized record
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
normalize: function(includeNull) {
|
|
534
|
+
var primaryKey = this.primaryKey,
|
|
535
|
+
recordId = this.get('id'),
|
|
536
|
+
store = this.get('store'),
|
|
537
|
+
storeKey = this.get('storeKey'),
|
|
538
|
+
key, valueForKey, typeClass, recHash, attrValue, normChild, isRecord,
|
|
539
|
+
isChild, defaultVal, keyForDataHash, attr;
|
|
540
|
+
|
|
541
|
+
var dataHash = store.readEditableDataHash(storeKey) || {};
|
|
542
|
+
dataHash[primaryKey] = recordId;
|
|
543
|
+
recHash = store.readDataHash(storeKey);
|
|
544
|
+
|
|
545
|
+
for (key in this) {
|
|
546
|
+
// make sure property is a record attribute.
|
|
547
|
+
valueForKey = this[key];
|
|
548
|
+
if (valueForKey) {
|
|
549
|
+
typeClass = valueForKey.typeClass;
|
|
550
|
+
if (typeClass) {
|
|
551
|
+
keyForDataHash = valueForKey.get('key') || key; // handle alt keys
|
|
552
|
+
isRecord = SC.typeOf(typeClass.call(valueForKey))===SC.T_CLASS;
|
|
553
|
+
isChild = valueForKey.isNestedRecordTransform;
|
|
554
|
+
if (!isRecord && !isChild) {
|
|
555
|
+
attrValue = this.get(key);
|
|
556
|
+
if(attrValue!==undefined || (attrValue===null && includeNull)) {
|
|
557
|
+
attr = this[key];
|
|
558
|
+
// if record attribute, make sure we transform with the fromType
|
|
559
|
+
if(SC.instanceOf(attr, SC.RecordAttribute)) {
|
|
560
|
+
attrValue = attr.fromType(this, key, attrValue);
|
|
561
|
+
}
|
|
562
|
+
dataHash[keyForDataHash] = attrValue;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
} else if (isChild) {
|
|
566
|
+
attrValue = this.get(key);
|
|
567
|
+
|
|
568
|
+
// Sometimes a child attribute property does not refer to a child record.
|
|
569
|
+
// Catch this and don't try to normalize.
|
|
570
|
+
if (attrValue && attrValue.normalize) {
|
|
571
|
+
attrValue.normalize();
|
|
572
|
+
}
|
|
573
|
+
} else if (isRecord) {
|
|
574
|
+
attrValue = recHash[keyForDataHash];
|
|
575
|
+
if (attrValue !== undefined) {
|
|
576
|
+
// write value already there
|
|
577
|
+
dataHash[keyForDataHash] = attrValue;
|
|
578
|
+
} else {
|
|
579
|
+
// or write default
|
|
580
|
+
defaultVal = valueForKey.get('defaultValue');
|
|
581
|
+
|
|
582
|
+
// computed default value
|
|
583
|
+
if (SC.typeOf(defaultVal)===SC.T_FUNCTION) {
|
|
584
|
+
dataHash[keyForDataHash] = defaultVal(this, key, defaultVal);
|
|
585
|
+
} else {
|
|
586
|
+
// plain value
|
|
587
|
+
dataHash[keyForDataHash] = defaultVal;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
return this;
|
|
596
|
+
},
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
If you try to get/set a property not defined by the record, then this
|
|
602
|
+
method will be called. It will try to get the value from the set of
|
|
603
|
+
attributes.
|
|
604
|
+
|
|
605
|
+
This will also check is ignoreUnknownProperties is set on the recordType
|
|
606
|
+
so that they will not be written to dataHash unless explicitly defined
|
|
607
|
+
in the model schema.
|
|
608
|
+
|
|
609
|
+
@param {String} key the attribute being get/set
|
|
610
|
+
@param {Object} value the value to set the key to, if present
|
|
611
|
+
@returns {Object} the value
|
|
612
|
+
*/
|
|
613
|
+
unknownProperty: function(key, value) {
|
|
614
|
+
|
|
615
|
+
if (value !== undefined) {
|
|
616
|
+
|
|
617
|
+
// first check if we should ignore unknown properties for this
|
|
618
|
+
// recordType
|
|
619
|
+
var storeKey = this.get('storeKey'),
|
|
620
|
+
recordType = SC.Store.recordTypeFor(storeKey);
|
|
621
|
+
|
|
622
|
+
if(recordType.ignoreUnknownProperties===YES) {
|
|
623
|
+
this[key] = value;
|
|
624
|
+
return value;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// if we're modifying the PKEY, then SC.Store needs to relocate where
|
|
628
|
+
// this record is cached. store the old key, update the value, then let
|
|
629
|
+
// the store do the housekeeping...
|
|
630
|
+
var primaryKey = this.get('primaryKey');
|
|
631
|
+
this.writeAttribute(key,value);
|
|
632
|
+
|
|
633
|
+
// update ID if needed
|
|
634
|
+
if (key === primaryKey) {
|
|
635
|
+
SC.Store.replaceIdFor(storeKey, value);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
return this.readAttribute(key);
|
|
640
|
+
},
|
|
641
|
+
|
|
642
|
+
/**
|
|
643
|
+
Lets you commit this specific record to the store which will trigger
|
|
644
|
+
the appropriate methods in the data source for you.
|
|
645
|
+
|
|
646
|
+
@param {Hash} params optional additonal params that will passed down
|
|
647
|
+
to the data source
|
|
648
|
+
@param {boolean} recordOnly, optional param if you want to only commit a single
|
|
649
|
+
record if it has a parent.
|
|
650
|
+
@param {Function} callback, optional callback that the store will fire once the
|
|
651
|
+
datasource finished committing
|
|
652
|
+
@returns {SC.Record} receiver
|
|
653
|
+
*/
|
|
654
|
+
commitRecord: function(params, recordOnly, callback) {
|
|
655
|
+
var store = this.get('store'), rec, ro,
|
|
656
|
+
sk = this.get('storeKey'),
|
|
657
|
+
prKey = store.parentStoreKeyExists();
|
|
658
|
+
|
|
659
|
+
// If we only want to commit this record or it doesn't have a parent record
|
|
660
|
+
// we will commit this record
|
|
661
|
+
ro = recordOnly || (SC.none(recordOnly) && SC.none(prKey));
|
|
662
|
+
if (ro){
|
|
663
|
+
store.commitRecord(undefined, undefined, this.get('storeKey'), params, callback);
|
|
664
|
+
} else if (prKey){
|
|
665
|
+
rec = store.materializeRecord(prKey);
|
|
666
|
+
rec.commitRecord(params, recordOnly, callback);
|
|
667
|
+
}
|
|
668
|
+
return this ;
|
|
669
|
+
},
|
|
670
|
+
|
|
671
|
+
// ..........................................................
|
|
672
|
+
// EMULATE SC.ERROR API
|
|
673
|
+
//
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
Returns YES whenever the status is SC.Record.ERROR. This will allow you
|
|
677
|
+
to put the UI into an error state.
|
|
678
|
+
|
|
679
|
+
@property {Boolean}
|
|
680
|
+
*/
|
|
681
|
+
isError: function() {
|
|
682
|
+
return this.get('status') & SC.Record.ERROR;
|
|
683
|
+
}.property('status').cacheable(),
|
|
684
|
+
|
|
685
|
+
/**
|
|
686
|
+
Returns the receiver if the record is in an error state. Returns null
|
|
687
|
+
otherwise.
|
|
688
|
+
|
|
689
|
+
@property {SC.Record}
|
|
690
|
+
*/
|
|
691
|
+
errorValue: function() {
|
|
692
|
+
return this.get('isError') ? SC.val(this.get('errorObject')) : null ;
|
|
693
|
+
}.property('isError').cacheable(),
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
Returns the current error object only if the record is in an error state.
|
|
697
|
+
If no explicit error object has been set, returns SC.Record.GENERIC_ERROR.
|
|
698
|
+
|
|
699
|
+
@property {SC.Error}
|
|
700
|
+
*/
|
|
701
|
+
errorObject: function() {
|
|
702
|
+
if (this.get('isError')) {
|
|
703
|
+
var store = this.get('store');
|
|
704
|
+
return store.readError(this.get('storeKey')) || SC.Record.GENERIC_ERROR;
|
|
705
|
+
} else return null ;
|
|
706
|
+
}.property('isError').cacheable(),
|
|
707
|
+
|
|
708
|
+
// ...............................
|
|
709
|
+
// PRIVATE
|
|
710
|
+
//
|
|
711
|
+
|
|
712
|
+
/** @private
|
|
713
|
+
Sets the key equal to value.
|
|
714
|
+
|
|
715
|
+
This version will first check to see if the property is an
|
|
716
|
+
SC.RecordAttribute, and if so, will ensure that its isEditable property
|
|
717
|
+
is YES before attempting to change the value.
|
|
718
|
+
|
|
719
|
+
@param key {String} the property to set
|
|
720
|
+
@param value {Object} the value to set or null.
|
|
721
|
+
@returns {SC.Record}
|
|
722
|
+
*/
|
|
723
|
+
set: function(key, value) {
|
|
724
|
+
var func = this[key];
|
|
725
|
+
|
|
726
|
+
if (func && func.isProperty && func.get && !func.get('isEditable')) {
|
|
727
|
+
return this;
|
|
728
|
+
}
|
|
729
|
+
return sc_super();
|
|
730
|
+
},
|
|
731
|
+
|
|
732
|
+
/** @private
|
|
733
|
+
Creates string representation of record, with status.
|
|
734
|
+
|
|
735
|
+
@returns {String}
|
|
736
|
+
*/
|
|
737
|
+
|
|
738
|
+
toString: function() {
|
|
739
|
+
// We won't use 'readOnlyAttributes' here because accessing them directly
|
|
740
|
+
// avoids a SC.clone() -- we'll be careful not to edit anything.
|
|
741
|
+
var attrs = this.get('store').readDataHash(this.get('storeKey'));
|
|
742
|
+
return "%@(%@) %@".fmt(this.constructor.toString(), SC.inspect(attrs), this.statusString());
|
|
743
|
+
},
|
|
744
|
+
|
|
745
|
+
/** @private
|
|
746
|
+
Creates string representation of record, with status.
|
|
747
|
+
|
|
748
|
+
@returns {String}
|
|
749
|
+
*/
|
|
750
|
+
|
|
751
|
+
statusString: function() {
|
|
752
|
+
var ret = [], status = this.get('status');
|
|
753
|
+
|
|
754
|
+
for(var prop in SC.Record) {
|
|
755
|
+
if(prop.match(/[A-Z_]$/) && SC.Record[prop]===status) {
|
|
756
|
+
ret.push(prop);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
return ret.join(" ");
|
|
761
|
+
},
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
Registers a child record with this parent record.
|
|
765
|
+
|
|
766
|
+
If the parent already knows about the child record, return the cached
|
|
767
|
+
instance. If not, create the child record instance and add it to the child
|
|
768
|
+
record cache.
|
|
769
|
+
|
|
770
|
+
@param {Hash} value The hash of attributes to apply to the child record.
|
|
771
|
+
@param {Integer} key The store key that we are asking for
|
|
772
|
+
*/
|
|
773
|
+
registerNestedRecord: function(value, key, path) {
|
|
774
|
+
var store, psk, csk, childRecord, recordType;
|
|
775
|
+
|
|
776
|
+
// if no path is entered it must be the key
|
|
777
|
+
if (SC.none(path)) path = key;
|
|
778
|
+
// if a record instance is passed, simply use the storeKey. This allows
|
|
779
|
+
// you to pass a record from a chained store to get the same record in the
|
|
780
|
+
// current store.
|
|
781
|
+
if (value && value.get && value.get('isRecord')) {
|
|
782
|
+
childRecord = value;
|
|
783
|
+
}
|
|
784
|
+
else {
|
|
785
|
+
recordType = this._materializeNestedRecordType(value, key);
|
|
786
|
+
childRecord = this.createNestedRecord(recordType, value);
|
|
787
|
+
}
|
|
788
|
+
if (childRecord){
|
|
789
|
+
this.isParentRecord = YES;
|
|
790
|
+
store = this.get('store');
|
|
791
|
+
psk = this.get('storeKey');
|
|
792
|
+
csk = childRecord.get('storeKey');
|
|
793
|
+
store.registerChildToParent(psk, csk, path);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
return childRecord;
|
|
797
|
+
},
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
private method that retrieves the recordType from the hash that is provided.
|
|
801
|
+
|
|
802
|
+
Important for use in polymorphism but you must have the following items in the
|
|
803
|
+
parent record:
|
|
804
|
+
|
|
805
|
+
nestedRecordNamespace <= this is the object that has the SC.Records defined
|
|
806
|
+
|
|
807
|
+
@param {Hash} value The hash of attributes to apply to the child record.
|
|
808
|
+
@param {String} key the name of the key on the attribute
|
|
809
|
+
*/
|
|
810
|
+
_materializeNestedRecordType: function(value, key){
|
|
811
|
+
var childNS, recordType, ret;
|
|
812
|
+
|
|
813
|
+
// Get the record type, first checking the "type" property on the hash.
|
|
814
|
+
if (SC.typeOf(value) === SC.T_HASH) {
|
|
815
|
+
// Get the record type.
|
|
816
|
+
childNS = this.get('nestedRecordNamespace');
|
|
817
|
+
if (value.type && !SC.none(childNS)) {
|
|
818
|
+
recordType = childNS[value.type];
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// Maybe it's not a hash or there was no type property.
|
|
823
|
+
if (!recordType && key && this[key]) {
|
|
824
|
+
recordType = this[key].get('typeClass');
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
// When all else fails throw and exception.
|
|
828
|
+
if (!recordType || !SC.kindOf(recordType, SC.Record)) {
|
|
829
|
+
throw 'SC.Child: Error during transform: Invalid record type.';
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
return recordType;
|
|
833
|
+
},
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
Creates a new nested record instance.
|
|
837
|
+
|
|
838
|
+
@param {SC.Record} recordType The type of the nested record to create.
|
|
839
|
+
@param {Hash} hash The hash of attributes to apply to the child record.
|
|
840
|
+
(may be null)
|
|
841
|
+
*/
|
|
842
|
+
createNestedRecord: function(recordType, hash) {
|
|
843
|
+
var store, id, sk, pk, cr = null, existingId = null;
|
|
844
|
+
SC.run(function() {
|
|
845
|
+
hash = hash || {}; // init if needed
|
|
846
|
+
|
|
847
|
+
existingId = hash[recordType.prototype.primaryKey];
|
|
848
|
+
|
|
849
|
+
store = this.get('store');
|
|
850
|
+
if (SC.none(store)) throw 'Error: during the creation of a child record: NO STORE ON PARENT!';
|
|
851
|
+
|
|
852
|
+
if (!id && (pk = recordType.prototype.primaryKey)) {
|
|
853
|
+
id = hash[pk];
|
|
854
|
+
// In case there isnt a primary key supplied then we create on
|
|
855
|
+
// on the fly
|
|
856
|
+
sk = id ? store.storeKeyExists(recordType, id) : null;
|
|
857
|
+
if (sk){
|
|
858
|
+
store.writeDataHash(sk, hash);
|
|
859
|
+
cr = store.materializeRecord(sk);
|
|
860
|
+
} else {
|
|
861
|
+
cr = store.createRecord(recordType, hash) ;
|
|
862
|
+
if (SC.none(id)){
|
|
863
|
+
sk = cr.get('storeKey');
|
|
864
|
+
id = 'cr'+sk;
|
|
865
|
+
SC.Store.replaceIdFor(sk, id);
|
|
866
|
+
hash = store.readEditableDataHash(sk);
|
|
867
|
+
hash[pk] = id;
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// ID processing if necessary
|
|
874
|
+
if (SC.none(existingId) && this.generateIdForChild) this.generateIdForChild(cr);
|
|
875
|
+
|
|
876
|
+
}, this);
|
|
877
|
+
|
|
878
|
+
return cr;
|
|
879
|
+
},
|
|
880
|
+
|
|
881
|
+
_nestedRecordKey: 0,
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Override this function if you want to have a special way of creating
|
|
885
|
+
* ids for your child records
|
|
886
|
+
*/
|
|
887
|
+
generateIdForChild: function(childRecord){}
|
|
888
|
+
|
|
889
|
+
}) ;
|
|
890
|
+
|
|
891
|
+
// Class Methods
|
|
892
|
+
SC.Record.mixin( /** @scope SC.Record */ {
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
Whether to ignore unknown properties when they are being set on the record
|
|
896
|
+
object. This is useful if you want to strictly enforce the model schema
|
|
897
|
+
and not allow dynamically expanding it by setting new unknown properties
|
|
898
|
+
|
|
899
|
+
@property {Boolean}
|
|
900
|
+
*/
|
|
901
|
+
ignoreUnknownProperties: NO,
|
|
902
|
+
|
|
903
|
+
// ..........................................................
|
|
904
|
+
// CONSTANTS
|
|
905
|
+
//
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
Generic state for records with no local changes.
|
|
909
|
+
|
|
910
|
+
Use a logical AND (single &) to test record status
|
|
911
|
+
|
|
912
|
+
@property {Number}
|
|
913
|
+
*/
|
|
914
|
+
CLEAN: 0x0001, // 1
|
|
915
|
+
|
|
916
|
+
/**
|
|
917
|
+
Generic state for records with local changes.
|
|
918
|
+
|
|
919
|
+
Use a logical AND (single &) to test record status
|
|
920
|
+
|
|
921
|
+
@property {Number}
|
|
922
|
+
*/
|
|
923
|
+
DIRTY: 0x0002, // 2
|
|
924
|
+
|
|
925
|
+
/**
|
|
926
|
+
State for records that are still loaded.
|
|
927
|
+
|
|
928
|
+
A record instance should never be in this state. You will only run into
|
|
929
|
+
it when working with the low-level data hash API on SC.Store. Use a
|
|
930
|
+
logical AND (single &) to test record status
|
|
931
|
+
|
|
932
|
+
@property {Number}
|
|
933
|
+
*/
|
|
934
|
+
EMPTY: 0x0100, // 256
|
|
935
|
+
|
|
936
|
+
/**
|
|
937
|
+
State for records in an error state.
|
|
938
|
+
|
|
939
|
+
Use a logical AND (single &) to test record status
|
|
940
|
+
|
|
941
|
+
@property {Number}
|
|
942
|
+
*/
|
|
943
|
+
ERROR: 0x1000, // 4096
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
Generic state for records that are loaded and ready for use
|
|
947
|
+
|
|
948
|
+
Use a logical AND (single &) to test record status
|
|
949
|
+
|
|
950
|
+
@property {Number}
|
|
951
|
+
*/
|
|
952
|
+
READY: 0x0200, // 512
|
|
953
|
+
|
|
954
|
+
/**
|
|
955
|
+
State for records that are loaded and ready for use with no local changes
|
|
956
|
+
|
|
957
|
+
Use a logical AND (single &) to test record status
|
|
958
|
+
|
|
959
|
+
@property {Number}
|
|
960
|
+
*/
|
|
961
|
+
READY_CLEAN: 0x0201, // 513
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
/**
|
|
965
|
+
State for records that are loaded and ready for use with local changes
|
|
966
|
+
|
|
967
|
+
Use a logical AND (single &) to test record status
|
|
968
|
+
|
|
969
|
+
@property {Number}
|
|
970
|
+
*/
|
|
971
|
+
READY_DIRTY: 0x0202, // 514
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
/**
|
|
975
|
+
State for records that are new - not yet committed to server
|
|
976
|
+
|
|
977
|
+
Use a logical AND (single &) to test record status
|
|
978
|
+
|
|
979
|
+
@property {Number}
|
|
980
|
+
*/
|
|
981
|
+
READY_NEW: 0x0203, // 515
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
/**
|
|
985
|
+
Generic state for records that have been destroyed
|
|
986
|
+
|
|
987
|
+
Use a logical AND (single &) to test record status
|
|
988
|
+
|
|
989
|
+
@property {Number}
|
|
990
|
+
*/
|
|
991
|
+
DESTROYED: 0x0400, // 1024
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
/**
|
|
995
|
+
State for records that have been destroyed and committed to server
|
|
996
|
+
|
|
997
|
+
Use a logical AND (single &) to test record status
|
|
998
|
+
|
|
999
|
+
@property {Number}
|
|
1000
|
+
*/
|
|
1001
|
+
DESTROYED_CLEAN: 0x0401, // 1025
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
/**
|
|
1005
|
+
State for records that have been destroyed but not yet committed to server
|
|
1006
|
+
|
|
1007
|
+
Use a logical AND (single &) to test record status
|
|
1008
|
+
|
|
1009
|
+
@property {Number}
|
|
1010
|
+
*/
|
|
1011
|
+
DESTROYED_DIRTY: 0x0402, // 1026
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
/**
|
|
1015
|
+
Generic state for records that have been submitted to data source
|
|
1016
|
+
|
|
1017
|
+
Use a logical AND (single &) to test record status
|
|
1018
|
+
|
|
1019
|
+
@property {Number}
|
|
1020
|
+
*/
|
|
1021
|
+
BUSY: 0x0800, // 2048
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
/**
|
|
1025
|
+
State for records that are still loading data from the server
|
|
1026
|
+
|
|
1027
|
+
Use a logical AND (single &) to test record status
|
|
1028
|
+
|
|
1029
|
+
@property {Number}
|
|
1030
|
+
*/
|
|
1031
|
+
BUSY_LOADING: 0x0804, // 2052
|
|
1032
|
+
|
|
1033
|
+
|
|
1034
|
+
/**
|
|
1035
|
+
State for new records that were created and submitted to the server;
|
|
1036
|
+
waiting on response from server
|
|
1037
|
+
|
|
1038
|
+
Use a logical AND (single &) to test record status
|
|
1039
|
+
|
|
1040
|
+
@property {Number}
|
|
1041
|
+
*/
|
|
1042
|
+
BUSY_CREATING: 0x0808, // 2056
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
/**
|
|
1046
|
+
State for records that have been modified and submitted to server
|
|
1047
|
+
|
|
1048
|
+
Use a logical AND (single &) to test record status
|
|
1049
|
+
|
|
1050
|
+
@property {Number}
|
|
1051
|
+
*/
|
|
1052
|
+
BUSY_COMMITTING: 0x0810, // 2064
|
|
1053
|
+
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
State for records that have requested a refresh from the server.
|
|
1057
|
+
|
|
1058
|
+
Use a logical AND (single &) to test record status.
|
|
1059
|
+
|
|
1060
|
+
@property {Number}
|
|
1061
|
+
*/
|
|
1062
|
+
BUSY_REFRESH: 0x0820, // 2080
|
|
1063
|
+
|
|
1064
|
+
|
|
1065
|
+
/**
|
|
1066
|
+
State for records that have requested a refresh from the server.
|
|
1067
|
+
|
|
1068
|
+
Use a logical AND (single &) to test record status
|
|
1069
|
+
|
|
1070
|
+
@property {Number}
|
|
1071
|
+
*/
|
|
1072
|
+
BUSY_REFRESH_CLEAN: 0x0821, // 2081
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
State for records that have requested a refresh from the server.
|
|
1076
|
+
|
|
1077
|
+
Use a logical AND (single &) to test record status
|
|
1078
|
+
|
|
1079
|
+
@property {Number}
|
|
1080
|
+
*/
|
|
1081
|
+
BUSY_REFRESH_DIRTY: 0x0822, // 2082
|
|
1082
|
+
|
|
1083
|
+
/**
|
|
1084
|
+
State for records that have been destroyed and submitted to server
|
|
1085
|
+
|
|
1086
|
+
Use a logical AND (single &) to test record status
|
|
1087
|
+
|
|
1088
|
+
@property {Number}
|
|
1089
|
+
*/
|
|
1090
|
+
BUSY_DESTROYING: 0x0840, // 2112
|
|
1091
|
+
|
|
1092
|
+
|
|
1093
|
+
// ..........................................................
|
|
1094
|
+
// ERRORS
|
|
1095
|
+
//
|
|
1096
|
+
|
|
1097
|
+
/**
|
|
1098
|
+
Error for when you try to modify a record while it is in a bad
|
|
1099
|
+
state.
|
|
1100
|
+
|
|
1101
|
+
@property {SC.Error}
|
|
1102
|
+
*/
|
|
1103
|
+
BAD_STATE_ERROR: SC.$error("Internal barf Inconsistency"),
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
Error for when you try to create a new record that already exists.
|
|
1107
|
+
|
|
1108
|
+
@property {SC.Error}
|
|
1109
|
+
*/
|
|
1110
|
+
RECORD_EXISTS_ERROR: SC.$error("Record Exists"),
|
|
1111
|
+
|
|
1112
|
+
/**
|
|
1113
|
+
Error for when you attempt to locate a record that is not found
|
|
1114
|
+
|
|
1115
|
+
@property {SC.Error}
|
|
1116
|
+
*/
|
|
1117
|
+
NOT_FOUND_ERROR: SC.$error("Not found "),
|
|
1118
|
+
|
|
1119
|
+
/**
|
|
1120
|
+
Error for when you try to modify a record that is currently busy
|
|
1121
|
+
|
|
1122
|
+
@property {SC.Error}
|
|
1123
|
+
*/
|
|
1124
|
+
BUSY_ERROR: SC.$error("Busy"),
|
|
1125
|
+
|
|
1126
|
+
/**
|
|
1127
|
+
Generic unknown record error
|
|
1128
|
+
|
|
1129
|
+
@property {SC.Error}
|
|
1130
|
+
*/
|
|
1131
|
+
GENERIC_ERROR: SC.$error("Generic Error"),
|
|
1132
|
+
|
|
1133
|
+
/**
|
|
1134
|
+
* The next child key to allocate. A nextChildKey must always be greater than 0.
|
|
1135
|
+
*/
|
|
1136
|
+
_nextChildKey: 0,
|
|
1137
|
+
|
|
1138
|
+
// ..........................................................
|
|
1139
|
+
// CLASS METHODS
|
|
1140
|
+
//
|
|
1141
|
+
|
|
1142
|
+
/**
|
|
1143
|
+
Helper method returns a new SC.RecordAttribute instance to map a simple
|
|
1144
|
+
value or to-one relationship. At the very least, you should pass the
|
|
1145
|
+
type class you expect the attribute to have. You may pass any additional
|
|
1146
|
+
options as well.
|
|
1147
|
+
|
|
1148
|
+
Use this helper when you define SC.Record subclasses.
|
|
1149
|
+
|
|
1150
|
+
h4. Example
|
|
1151
|
+
|
|
1152
|
+
{{{
|
|
1153
|
+
MyApp.Contact = SC.Record.extend({
|
|
1154
|
+
firstName: SC.Record.attr(String, { isRequired: YES })
|
|
1155
|
+
});
|
|
1156
|
+
}}}
|
|
1157
|
+
|
|
1158
|
+
@param {Class} type the attribute type
|
|
1159
|
+
@param {Hash} opts the options for the attribute
|
|
1160
|
+
@returns {SC.RecordAttribute} created instance
|
|
1161
|
+
*/
|
|
1162
|
+
attr: function(type, opts) {
|
|
1163
|
+
return SC.RecordAttribute.attr(type, opts);
|
|
1164
|
+
},
|
|
1165
|
+
|
|
1166
|
+
/**
|
|
1167
|
+
Returns an SC.RecordAttribute that describes a fetched attribute. When
|
|
1168
|
+
you reference this attribute, it will return an SC.RecordArray that uses
|
|
1169
|
+
the type as the fetch key and passes the attribute value as a param.
|
|
1170
|
+
|
|
1171
|
+
Use this helper when you define SC.Record subclasses.
|
|
1172
|
+
|
|
1173
|
+
h4. Example
|
|
1174
|
+
|
|
1175
|
+
{{{
|
|
1176
|
+
MyApp.Group = SC.Record.extend({
|
|
1177
|
+
contacts: SC.Record.fetch('MyApp.Contact')
|
|
1178
|
+
});
|
|
1179
|
+
}}}
|
|
1180
|
+
|
|
1181
|
+
@param {SC.Record|String} recordType The type of records to load
|
|
1182
|
+
@param {Hash} opts the options for the attribute
|
|
1183
|
+
@returns {SC.RecordAttribute} created instance
|
|
1184
|
+
*/
|
|
1185
|
+
fetch: function(recordType, opts) {
|
|
1186
|
+
return SC.FetchedAttribute.attr(recordType, opts) ;
|
|
1187
|
+
},
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
Returns:
|
|
1191
|
+
|
|
1192
|
+
1: SC.ManyAttribute that describes a record array backed by an
|
|
1193
|
+
array of guids stored in the underlying JSON.
|
|
1194
|
+
2: SC.ChildrenAttribute that describes a record array backed by a
|
|
1195
|
+
array of hashes.
|
|
1196
|
+
|
|
1197
|
+
You can edit the contents of this relationship.
|
|
1198
|
+
|
|
1199
|
+
For SC.ManyAttribute, If you set the inverse and isMaster: NO key,
|
|
1200
|
+
then editing this array will modify the underlying data, but the
|
|
1201
|
+
inverse key on the matching record will also be edited and that
|
|
1202
|
+
record will be marked as needing a change.
|
|
1203
|
+
|
|
1204
|
+
@param {SC.Record|String} recordType The type of record to create
|
|
1205
|
+
@param {Hash} opts the options for the attribute
|
|
1206
|
+
@returns {SC.ManyAttribute|SC.ChildrenAttribute} created instance
|
|
1207
|
+
*/
|
|
1208
|
+
toMany: function(recordType, opts) {
|
|
1209
|
+
opts = opts || {};
|
|
1210
|
+
var isNested = opts.nested || opts.isNested;
|
|
1211
|
+
var attr;
|
|
1212
|
+
if(isNested){
|
|
1213
|
+
attr = SC.ChildrenAttribute.attr(recordType, opts);
|
|
1214
|
+
}
|
|
1215
|
+
else {
|
|
1216
|
+
attr = SC.ManyAttribute.attr(recordType, opts);
|
|
1217
|
+
}
|
|
1218
|
+
return attr;
|
|
1219
|
+
},
|
|
1220
|
+
|
|
1221
|
+
/**
|
|
1222
|
+
Returns:
|
|
1223
|
+
1. SC.SingleAttribute that converts the underlying ID to a single
|
|
1224
|
+
record. If you modify this property, it will rewrite the underyling ID.
|
|
1225
|
+
It will also modify the inverse of the relationship, if you set it.
|
|
1226
|
+
|
|
1227
|
+
2. SC.ChildAttribute that you can edit the contents
|
|
1228
|
+
of this relationship.
|
|
1229
|
+
|
|
1230
|
+
@param {SC.Record|String} recordType the type of the record to create
|
|
1231
|
+
@param {Hash} opts additional options
|
|
1232
|
+
@returns {SC.SingleAttribute|SC.ChildAttribute} created instance
|
|
1233
|
+
*/
|
|
1234
|
+
toOne: function(recordType, opts) {
|
|
1235
|
+
opts = opts || {};
|
|
1236
|
+
var isNested = opts.nested || opts.isNested;
|
|
1237
|
+
var attr;
|
|
1238
|
+
if(isNested){
|
|
1239
|
+
attr = SC.ChildAttribute.attr(recordType, opts);
|
|
1240
|
+
}
|
|
1241
|
+
else {
|
|
1242
|
+
attr = SC.SingleAttribute.attr(recordType, opts);
|
|
1243
|
+
}
|
|
1244
|
+
return attr;
|
|
1245
|
+
},
|
|
1246
|
+
|
|
1247
|
+
/**
|
|
1248
|
+
Returns all storeKeys mapped by Id for this record type. This method is
|
|
1249
|
+
used mostly by the SC.Store and the Record to coordinate. You will rarely
|
|
1250
|
+
need to call this method yourself.
|
|
1251
|
+
|
|
1252
|
+
@returns {Hash}
|
|
1253
|
+
*/
|
|
1254
|
+
storeKeysById: function() {
|
|
1255
|
+
var key = SC.keyFor('storeKey', SC.guidFor(this)),
|
|
1256
|
+
ret = this[key];
|
|
1257
|
+
if (!ret) ret = this[key] = {};
|
|
1258
|
+
return ret;
|
|
1259
|
+
},
|
|
1260
|
+
|
|
1261
|
+
/**
|
|
1262
|
+
Given a primaryKey value for the record, returns the associated
|
|
1263
|
+
storeKey. If the primaryKey has not been assigned a storeKey yet, it
|
|
1264
|
+
will be added.
|
|
1265
|
+
|
|
1266
|
+
For the inverse of this method see SC.Store.idFor() and
|
|
1267
|
+
SC.Store.recordTypeFor().
|
|
1268
|
+
|
|
1269
|
+
@param {String} id a record id
|
|
1270
|
+
@returns {Number} a storeKey.
|
|
1271
|
+
*/
|
|
1272
|
+
storeKeyFor: function(id) {
|
|
1273
|
+
var storeKeys = this.storeKeysById(),
|
|
1274
|
+
ret = storeKeys[id];
|
|
1275
|
+
|
|
1276
|
+
if (!ret) {
|
|
1277
|
+
ret = SC.Store.generateStoreKey();
|
|
1278
|
+
SC.Store.idsByStoreKey[ret] = id ;
|
|
1279
|
+
SC.Store.recordTypesByStoreKey[ret] = this ;
|
|
1280
|
+
storeKeys[id] = ret ;
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
return ret ;
|
|
1284
|
+
},
|
|
1285
|
+
|
|
1286
|
+
/**
|
|
1287
|
+
Given a primaryKey value for the record, returns the associated
|
|
1288
|
+
storeKey. As opposed to storeKeyFor() however, this method
|
|
1289
|
+
will NOT generate a new storeKey but returned undefined.
|
|
1290
|
+
|
|
1291
|
+
@param {String} id a record id
|
|
1292
|
+
@returns {Number} a storeKey.
|
|
1293
|
+
*/
|
|
1294
|
+
storeKeyExists: function(id) {
|
|
1295
|
+
var storeKeys = this.storeKeysById(),
|
|
1296
|
+
ret = storeKeys[id];
|
|
1297
|
+
|
|
1298
|
+
return ret ;
|
|
1299
|
+
},
|
|
1300
|
+
|
|
1301
|
+
/**
|
|
1302
|
+
Returns a record with the named ID in store.
|
|
1303
|
+
|
|
1304
|
+
@param {SC.Store} store the store
|
|
1305
|
+
@param {String} id the record id or a query
|
|
1306
|
+
@returns {SC.Record} record instance
|
|
1307
|
+
*/
|
|
1308
|
+
find: function(store, id) {
|
|
1309
|
+
return store.find(this, id);
|
|
1310
|
+
},
|
|
1311
|
+
|
|
1312
|
+
/** @private - enhance extend to notify SC.Query as well. */
|
|
1313
|
+
extend: function() {
|
|
1314
|
+
var ret = SC.Object.extend.apply(this, arguments);
|
|
1315
|
+
SC.Query._scq_didDefineRecordType(ret);
|
|
1316
|
+
return ret ;
|
|
1317
|
+
}
|
|
1318
|
+
}) ;
|