sproutcore 1.6.0.rc.2-x86-mingw32 → 1.6.0.1-x86-mingw32
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/CHANGELOG +12 -0
 - data/VERSION.yml +1 -1
 - data/bin/sc-docs +6 -1
 - data/lib/buildtasks/target.rake +1 -1
 - data/lib/frameworks/sproutcore/Buildfile +5 -1
 - data/lib/frameworks/sproutcore/CHANGELOG.md +175 -1
 - data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +12 -0
 - data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +19 -5
 - data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +28 -31
 - data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +9 -2
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +21 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +6 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +26 -8
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +2 -0
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +12 -5
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +25 -9
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +157 -5
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +7 -6
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +9 -3
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +8 -8
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +104 -4
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +3 -56
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +4 -2
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +59 -0
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +41 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +10 -2
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +16 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +11 -0
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +18 -2
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +10 -6
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +18 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +9 -1
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +9 -4
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +15 -3
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +14 -8
 - data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +8 -18
 - data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +12 -2
 - data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +296 -0
 - data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +330 -326
 - data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +22 -1
 - data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +614 -614
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/data_source.js +14 -1
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +3 -1
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +2 -0
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +2 -0
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +20 -13
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +61 -46
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +30 -30
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +24 -24
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/connectDataSource.js +31 -0
 - data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +1177 -0
 - data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +4 -63
 - data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +7 -8
 - data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +18 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +9 -0
 - data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +3 -3
 - data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +3 -3
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +3 -2
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +12 -2
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +2 -2
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +1 -0
 - data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +33 -22
 - data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +20 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +10 -3
 - data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +34 -7
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +14 -15
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +40 -14
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +699 -700
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +2 -2
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +11 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +16 -6
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +0 -1
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +49 -7
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +9 -0
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +6 -2
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +4 -26
 - data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +20 -19
 - data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +249 -249
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/edit_mode.js +13 -5
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/emptiness.js +53 -37
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form.js +2 -1
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form_row.js +3 -11
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/edit_mode.js +53 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/emptiness.js +114 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form.js +174 -6
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_row.js +86 -6
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +80 -110
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +96 -97
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +2 -1
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +20 -36
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +121 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +90 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +139 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/render_delegates/select_button.js +14 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +25 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +43 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +32 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/menu_setup.js +40 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/show_menu.js +45 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/menu_width.js +49 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +191 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +264 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +450 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +14 -6
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +9 -0
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +3 -2
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -17
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +35 -8
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +2 -0
 - data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +6 -6
 - data/lib/frameworks/sproutcore/frameworks/foundation/resources/images/favicon.ico +0 -0
 - data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +0 -5
 - data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +4 -2
 - data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +2 -1
 - data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +13 -0
 - data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +6 -9
 - data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +912 -0
 - data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +36 -7
 - data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +58 -4
 - data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +1 -3
 - data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +0 -15
 - data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +2 -2
 - data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +25 -14
 - data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -9
 - data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/flatten.js +24 -0
 - data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +2 -1
 - data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +5 -5
 - data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +19 -0
 - data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +3 -2
 - data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +14 -14
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +3 -0
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +2 -2
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +2 -2
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +1 -1
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +3 -3
 - data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +15 -16
 - data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +6 -2
 - data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +30 -0
 - data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +17 -0
 - data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +9 -2
 - data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +3 -1
 - data/lib/frameworks/sproutcore/frameworks/testing/resources/runner.css +0 -1
 - data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +80 -0
 - data/lib/frameworks/sproutcore/frameworks/yuireset/resources/core.css +0 -4
 - data/lib/frameworks/sproutcore/lib/index.rhtml +2 -1
 - data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +3 -3
 - data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +2 -2
 - data/lib/frameworks/sproutcore/themes/ace/resources/form/form.css +9 -0
 - data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +3 -1
 - data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +1 -1
 - data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +1 -1
 - data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +1 -1
 - data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +1 -1
 - data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +2 -0
 - data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +1 -1
 - data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +1 -1
 - data/lib/sproutcore/builders/base.rb +5 -1
 - data/lib/sproutcore/builders/handlebars.rb +12 -1
 - data/lib/sproutcore/models/target.rb +1 -9
 - data/lib/sproutcore/rack/proxy.rb +238 -92
 - data/lib/sproutcore/tools/docs.rb +1 -7
 - data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -0
 - data/spec/fixtures/builder_tests/apps/handlebars_test/{template.handlebars → templates/template.handlebars} +2 -0
 - data/spec/lib/builders/handlebars_spec.rb +10 -4
 - data/sproutcore.gemspec +3 -1
 - metadata +73 -44
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +0 -5
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +0 -15
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +0 -17
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +0 -17
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +0 -17
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +0 -17
 - data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +0 -17
 
| 
         @@ -69,6 +69,42 @@ test("isEnabled=NO should add disabled class", function() { 
     | 
|
| 
       69 
69 
     | 
    
         
             
              ok(view.$().hasClass('disabled'), 'should have disabled class');
         
     | 
| 
       70 
70 
     | 
    
         
             
            });
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
            test("isEnabled=NO isEditable=NO should add disabled attribute", function() {
         
     | 
| 
      
 73 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 74 
     | 
    
         
            +
              view.set('isEnabled', NO);
         
     | 
| 
      
 75 
     | 
    
         
            +
              view.set('isEditable', NO);
         
     | 
| 
      
 76 
     | 
    
         
            +
              SC.RunLoop.end();  
         
     | 
| 
      
 77 
     | 
    
         
            +
              ok(view.$input().attr('disabled'), 'should have disabled attribute');
         
     | 
| 
      
 78 
     | 
    
         
            +
              ok(!view.$input().attr('readOnly'), 'should not have readOnly attribute');
         
     | 
| 
      
 79 
     | 
    
         
            +
            });
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            test("isEnabled=NO isEditable=YES should add disabled attribute", function() {
         
     | 
| 
      
 82 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 83 
     | 
    
         
            +
              view.set('isEnabled', NO);
         
     | 
| 
      
 84 
     | 
    
         
            +
              view.set('isEditable', YES);
         
     | 
| 
      
 85 
     | 
    
         
            +
              SC.RunLoop.end();  
         
     | 
| 
      
 86 
     | 
    
         
            +
              ok(view.$input().attr('disabled'), 'should have disabled attribute');
         
     | 
| 
      
 87 
     | 
    
         
            +
              ok(!view.$input().attr('readOnly'), 'should not have readOnly attribute');
         
     | 
| 
      
 88 
     | 
    
         
            +
            });
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            test("isEnabled=YES isEditable=NO should add readOnly attribute", function() {
         
     | 
| 
      
 91 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 92 
     | 
    
         
            +
              view.set('isEnabled', YES);
         
     | 
| 
      
 93 
     | 
    
         
            +
              view.set('isEditable', NO);
         
     | 
| 
      
 94 
     | 
    
         
            +
              SC.RunLoop.end();  
         
     | 
| 
      
 95 
     | 
    
         
            +
              ok(!view.$input().attr('disabled'), 'should not have disabled attribute');
         
     | 
| 
      
 96 
     | 
    
         
            +
              ok(view.$input().attr('readOnly'), 'should have readOnly attribute');
         
     | 
| 
      
 97 
     | 
    
         
            +
            });
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            test("isEnabled=YES isEditable=YES should not add disable or readOnly attribute", function() {
         
     | 
| 
      
 100 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 101 
     | 
    
         
            +
              view.set('isEnabled', YES);
         
     | 
| 
      
 102 
     | 
    
         
            +
              view.set('isEditable', YES);
         
     | 
| 
      
 103 
     | 
    
         
            +
              SC.RunLoop.end();  
         
     | 
| 
      
 104 
     | 
    
         
            +
              ok(!view.$input().attr('disabled'), 'should not have disabled attribute');
         
     | 
| 
      
 105 
     | 
    
         
            +
              ok(!view.$input().attr('readOnly'), 'should not have readOnly attribute');
         
     | 
| 
      
 106 
     | 
    
         
            +
            });
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       72 
108 
     | 
    
         
             
            // test("isEnabled=NO should add disabled attr to input", function() {
         
     | 
| 
       73 
109 
     | 
    
         
             
            //   SC.RunLoop.begin();
         
     | 
| 
       74 
110 
     | 
    
         
             
            //   view1.set('isEnabled', NO);
         
     | 
| 
         @@ -78,10 +114,3 @@ test("isEnabled=NO should add disabled class", function() { 
     | 
|
| 
       78 
114 
     | 
    
         
             
            //   ok(view1.get('value') === 'SproutCore', 'value cannot be changed');
         
     | 
| 
       79 
115 
     | 
    
         
             
            //   });
         
     | 
| 
       80 
116 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
            test("isEnabled and isEditable mapping", function() {
         
     | 
| 
       82 
     | 
    
         
            -
              var obj= SC.TextFieldView.create();
         
     | 
| 
       83 
     | 
    
         
            -
              obj.set('isEnabled',false);
         
     | 
| 
       84 
     | 
    
         
            -
              equals(obj.get('isEditable'),false);
         
     | 
| 
       85 
     | 
    
         
            -
              obj.set('isEnabled',true);
         
     | 
| 
       86 
     | 
    
         
            -
              equals(obj.get('isEditable'),true);
         
     | 
| 
       87 
     | 
    
         
            -
            });
         
     | 
| 
         @@ -32,13 +32,22 @@ 
     | 
|
| 
       32 
32 
     | 
    
         
             
              .add("disabled - empty", SC.TextFieldView, { 
         
     | 
| 
       33 
33 
     | 
    
         
             
                hint: "Full Name", 
         
     | 
| 
       34 
34 
     | 
    
         
             
                value: null,
         
     | 
| 
       35 
     | 
    
         
            -
                isEnabled: NO
         
     | 
| 
      
 35 
     | 
    
         
            +
                isEnabled: NO,
         
     | 
| 
      
 36 
     | 
    
         
            +
                isEditable: NO
         
     | 
| 
       36 
37 
     | 
    
         
             
              })
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
39 
     | 
    
         
             
              .add("disabled - with value", SC.TextFieldView, { 
         
     | 
| 
       39 
40 
     | 
    
         
             
                hint: "Full Name", 
         
     | 
| 
       40 
41 
     | 
    
         
             
                value: 'John Doe',
         
     | 
| 
       41 
     | 
    
         
            -
                isEnabled: NO
         
     | 
| 
      
 42 
     | 
    
         
            +
                isEnabled: NO,
         
     | 
| 
      
 43 
     | 
    
         
            +
                isEditable: NO
         
     | 
| 
      
 44 
     | 
    
         
            +
              })
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              .add("enabled - not editable - with value", SC.TextFieldView, { 
         
     | 
| 
      
 47 
     | 
    
         
            +
                hint: "Full Name", 
         
     | 
| 
      
 48 
     | 
    
         
            +
                value: 'John Doe',
         
     | 
| 
      
 49 
     | 
    
         
            +
                isEnabled: YES,
         
     | 
| 
      
 50 
     | 
    
         
            +
                isEditable: NO
         
     | 
| 
       42 
51 
     | 
    
         
             
              })
         
     | 
| 
       43 
52 
     | 
    
         | 
| 
       44 
53 
     | 
    
         
             
              .add("textarea - empty", SC.TextFieldView, { 
         
     | 
| 
         @@ -81,13 +90,21 @@ 
     | 
|
| 
       81 
90 
     | 
    
         
             
                isEnabled: YES
         
     | 
| 
       82 
91 
     | 
    
         
             
              })
         
     | 
| 
       83 
92 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
              .add("aria-disabled",SC.TextFieldView, {
         
     | 
| 
      
 93 
     | 
    
         
            +
              .add("aria-disabled", SC.TextFieldView, {
         
     | 
| 
       85 
94 
     | 
    
         
             
                hint: "Full Name", 
         
     | 
| 
       86 
95 
     | 
    
         
             
                value: 'John Doe',
         
     | 
| 
       87 
96 
     | 
    
         
             
                isTextArea: YES,
         
     | 
| 
       88 
97 
     | 
    
         
             
                isEnabled: NO
         
     | 
| 
       89 
98 
     | 
    
         
             
              })
         
     | 
| 
       90 
99 
     | 
    
         | 
| 
      
 100 
     | 
    
         
            +
              .add("aria-readonly", SC.TextFieldView, {
         
     | 
| 
      
 101 
     | 
    
         
            +
                hint: "Full Name", 
         
     | 
| 
      
 102 
     | 
    
         
            +
                value: 'John Doe',
         
     | 
| 
      
 103 
     | 
    
         
            +
                isTextArea: YES,
         
     | 
| 
      
 104 
     | 
    
         
            +
                isEnabled: YES,
         
     | 
| 
      
 105 
     | 
    
         
            +
                isEditable: NO
         
     | 
| 
      
 106 
     | 
    
         
            +
              })
         
     | 
| 
      
 107 
     | 
    
         
            +
              
         
     | 
| 
       91 
108 
     | 
    
         
             
              .add("aria-invalid", SC.TextFieldView, {
         
     | 
| 
       92 
109 
     | 
    
         
             
                  value: SC.Error.create({errorValue:'Error Message'}),
         
     | 
| 
       93 
110 
     | 
    
         
             
                  isEnabled: YES
         
     | 
| 
         @@ -104,7 +121,7 @@ pane.verifyEmpty = function verifyEmpty(view, expectedHint) { 
     | 
|
| 
       104 
121 
     | 
    
         | 
| 
       105 
122 
     | 
    
         
             
              ok(!layer.hasClass('not-empty'), 'layer should not have not-empty class');
         
     | 
| 
       106 
123 
     | 
    
         
             
              if(SC.browser.webkit || parseInt(SC.browser.mozilla) >= 2.0) equals(input.val(), '', 'input should have empty value');
         
     | 
| 
       107 
     | 
    
         
            -
              else equals(input.val(), expectedHint, 'input should have  
     | 
| 
      
 124 
     | 
    
         
            +
              else equals(input.val(), expectedHint, 'input should have expected hint as value');
         
     | 
| 
       108 
125 
     | 
    
         
             
              if (expectedHint) {
         
     | 
| 
       109 
126 
     | 
    
         
             
                var hint = view.$('.sc-hint');
         
     | 
| 
       110 
127 
     | 
    
         
             
                if (hint.length===1) {
         
     | 
| 
         @@ -149,6 +166,15 @@ pane.verifyDisabled = function verifyDisabled(view, isDisabled) { 
     | 
|
| 
       149 
166 
     | 
    
         
             
              }
         
     | 
| 
       150 
167 
     | 
    
         
             
            };
         
     | 
| 
       151 
168 
     | 
    
         | 
| 
      
 169 
     | 
    
         
            +
            pane.verifyReadOnly = function verifyReadonly(view, isReadOnly) {
         
     | 
| 
      
 170 
     | 
    
         
            +
              var input = view.$('input');
         
     | 
| 
      
 171 
     | 
    
         
            +
              
         
     | 
| 
      
 172 
     | 
    
         
            +
              if(isReadOnly) {
         
     | 
| 
      
 173 
     | 
    
         
            +
                ok(input.attr('readOnly'), 'input should have readOnly attr');
         
     | 
| 
      
 174 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 175 
     | 
    
         
            +
                ok(!input.attr('readOnly'), 'input should not have readOnly attr');
         
     | 
| 
      
 176 
     | 
    
         
            +
              }
         
     | 
| 
      
 177 
     | 
    
         
            +
            };
         
     | 
| 
       152 
178 
     | 
    
         | 
| 
       153 
179 
     | 
    
         
             
            // ..........................................................
         
     | 
| 
       154 
180 
     | 
    
         
             
            // TEST INITIAL STATES
         
     | 
| 
         @@ -192,6 +218,12 @@ test("disabled - with value", function() { 
     | 
|
| 
       192 
218 
     | 
    
         
             
              pane.verifyDisabled(view, YES);
         
     | 
| 
       193 
219 
     | 
    
         
             
            });
         
     | 
| 
       194 
220 
     | 
    
         | 
| 
      
 221 
     | 
    
         
            +
            test("enabled - not editable - with value", function() {
         
     | 
| 
      
 222 
     | 
    
         
            +
              var view = pane.view('enabled - not editable - with value');
         
     | 
| 
      
 223 
     | 
    
         
            +
              pane.verifyNotEmpty(view, 'John Doe', 'Full Name');
         
     | 
| 
      
 224 
     | 
    
         
            +
              pane.verifyReadOnly(view, YES);
         
     | 
| 
      
 225 
     | 
    
         
            +
            });
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
       195 
227 
     | 
    
         
             
            test("textarea - empty", function() {
         
     | 
| 
       196 
228 
     | 
    
         
             
               var view = pane.view('empty');
         
     | 
| 
       197 
229 
     | 
    
         
             
               pane.verifyEmpty(view, 'Full Name');
         
     | 
| 
         @@ -261,6 +293,22 @@ test("enabling disabled view", function() { 
     | 
|
| 
       261 
293 
     | 
    
         
             
              pane.verifyDisabled(view, NO);
         
     | 
| 
       262 
294 
     | 
    
         
             
            });
         
     | 
| 
       263 
295 
     | 
    
         | 
| 
      
 296 
     | 
    
         
            +
            test("changing isEditable", function() {
         
     | 
| 
      
 297 
     | 
    
         
            +
              var view = pane.view('enabled - not editable - with value');
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
              // test changing isEditable state updates like it should
         
     | 
| 
      
 300 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 301 
     | 
    
         
            +
              view.set('isEditable', YES);
         
     | 
| 
      
 302 
     | 
    
         
            +
              SC.RunLoop.end();
         
     | 
| 
      
 303 
     | 
    
         
            +
              pane.verifyReadOnly(view, NO);
         
     | 
| 
      
 304 
     | 
    
         
            +
             
     | 
| 
      
 305 
     | 
    
         
            +
              // test changing isEditable state updates like it should
         
     | 
| 
      
 306 
     | 
    
         
            +
              SC.RunLoop.begin();
         
     | 
| 
      
 307 
     | 
    
         
            +
              view.set('isEditable', NO);
         
     | 
| 
      
 308 
     | 
    
         
            +
              SC.RunLoop.end();
         
     | 
| 
      
 309 
     | 
    
         
            +
              pane.verifyReadOnly(view, YES);
         
     | 
| 
      
 310 
     | 
    
         
            +
            });
         
     | 
| 
      
 311 
     | 
    
         
            +
             
     | 
| 
       264 
312 
     | 
    
         
             
            if (!SC.browser.isIE && !SC.platform.input.placeholder) {
         
     | 
| 
       265 
313 
     | 
    
         
             
              test("Changing value to null -- password field", function() {
         
     | 
| 
       266 
314 
     | 
    
         
             
                var view = pane.view('password-hint'),
         
     | 
| 
         @@ -606,6 +654,12 @@ test("should have aria-disabled as YES", function() { 
     | 
|
| 
       606 
654 
     | 
    
         
             
              equals(label.attr('aria-disabled'), 'true', 'aria-disabled should be true');
         
     | 
| 
       607 
655 
     | 
    
         
             
            });
         
     | 
| 
       608 
656 
     | 
    
         | 
| 
      
 657 
     | 
    
         
            +
            test("should have aria-readonly as YES", function() {
         
     | 
| 
      
 658 
     | 
    
         
            +
              var view = pane.view('aria-readonly');
         
     | 
| 
      
 659 
     | 
    
         
            +
              var label = view.$();  
         
     | 
| 
      
 660 
     | 
    
         
            +
              equals(label.attr('aria-readonly'), 'true', 'aria-readonly should be true');
         
     | 
| 
      
 661 
     | 
    
         
            +
            });
         
     | 
| 
      
 662 
     | 
    
         
            +
             
     | 
| 
       609 
663 
     | 
    
         
             
            test("should have aria-invalid as YES", function() {
         
     | 
| 
       610 
664 
     | 
    
         
             
              var view = pane.view('aria-invalid');
         
     | 
| 
       611 
665 
     | 
    
         
             
              var label = view.$();
         
     | 
| 
         @@ -18,7 +18,7 @@ SC.VALIDATE_NO_CHANGE = NO; 
     | 
|
| 
       18 
18 
     | 
    
         
             
              "validate" attribute in your text field.  For example, if you want to
         
     | 
| 
       19 
19 
     | 
    
         
             
              validate a field using the PhoneNumberValidator use this:
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                  <input value="1234567890" validate="phone-number" />
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
              Validators get notified at three points.  You can implement one or all
         
     | 
| 
       24 
24 
     | 
    
         
             
              of these methods to support validation.  All of the validate methods except
         
     | 
| 
         @@ -28,10 +28,8 @@ SC.VALIDATE_NO_CHANGE = NO; 
     | 
|
| 
       28 
28 
     | 
    
         
             
              following:
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
              1. You can simply validate the field value and return OK or an error str
         
     | 
| 
       31 
     | 
    
         
            -
              
         
     | 
| 
       32 
31 
     | 
    
         
             
              2. You can modify the field value (for example, you could format the
         
     | 
| 
       33 
32 
     | 
    
         
             
                 string to match some predefined format).
         
     | 
| 
       34 
     | 
    
         
            -
                 
         
     | 
| 
       35 
33 
     | 
    
         
             
              3. If you need to roundtrip the server first to perform validation, you can
         
     | 
| 
       36 
34 
     | 
    
         
             
                 return Validator.OK, then save the form and field info until after the
         
     | 
| 
       37 
35 
     | 
    
         
             
                 roundtrip.  On return, if there is a problem, first verify the field
         
     | 
| 
         @@ -288,21 +288,6 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable, 
     | 
|
| 
       288 
288 
     | 
    
         
             
                if (SC.FOCUS_ALL_CONTROLS) { return this.get('isEnabled'); }
         
     | 
| 
       289 
289 
     | 
    
         
             
                return NO;
         
     | 
| 
       290 
290 
     | 
    
         
             
              }.property('isEnabled'),
         
     | 
| 
       291 
     | 
    
         
            -
              
         
     | 
| 
       292 
     | 
    
         
            -
              willBecomeKeyResponderFrom: function(keyView) {
         
     | 
| 
       293 
     | 
    
         
            -
                // focus the text field.
         
     | 
| 
       294 
     | 
    
         
            -
                if (!this._isFocused) {
         
     | 
| 
       295 
     | 
    
         
            -
                  this._isFocused = YES ;
         
     | 
| 
       296 
     | 
    
         
            -
                  this.becomeFirstResponder();
         
     | 
| 
       297 
     | 
    
         
            -
                  if (this.get('isVisibleInWindow')) {
         
     | 
| 
       298 
     | 
    
         
            -
                    this.$input()[0].focus();
         
     | 
| 
       299 
     | 
    
         
            -
                  }
         
     | 
| 
       300 
     | 
    
         
            -
                }
         
     | 
| 
       301 
     | 
    
         
            -
              },
         
     | 
| 
       302 
     | 
    
         
            -
              
         
     | 
| 
       303 
     | 
    
         
            -
              willLoseKeyResponderTo: function(responder) {
         
     | 
| 
       304 
     | 
    
         
            -
                if (this._isFocused) this._isFocused = NO ;
         
     | 
| 
       305 
     | 
    
         
            -
              },
         
     | 
| 
       306 
291 
     | 
    
         | 
| 
       307 
292 
     | 
    
         
             
              // these methods use the validator to convert the raw field value returned
         
     | 
| 
       308 
293 
     | 
    
         
             
              // by your subclass into an object and visa versa.
         
     | 
| 
         @@ -59,7 +59,7 @@ SC.LabelView = SC.View.extend(SC.Control, SC.InlineEditable, 
     | 
|
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                @property {String} SC.REGULAR_WEIGHT|SC.BOLD_WEIGHT
         
     | 
| 
       61 
61 
     | 
    
         
             
                @default null
         
     | 
| 
       62 
     | 
    
         
            -
                @deprecated
         
     | 
| 
      
 62 
     | 
    
         
            +
                @deprecated Use CSS instead.
         
     | 
| 
       63 
63 
     | 
    
         
             
              */
         
     | 
| 
       64 
64 
     | 
    
         
             
              fontWeight: null,
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
         @@ -114,7 +114,7 @@ SC.LabelView = SC.View.extend(SC.Control, SC.InlineEditable, 
     | 
|
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                @property {String} SC.ALIGN_LEFT|SC.ALIGN_CENTER|SC.ALIGN_RIGHT
         
     | 
| 
       116 
116 
     | 
    
         
             
                @default null
         
     | 
| 
       117 
     | 
    
         
            -
                @deprecated
         
     | 
| 
      
 117 
     | 
    
         
            +
                @deprecated Use CSS instead.
         
     | 
| 
       118 
118 
     | 
    
         
             
              */
         
     | 
| 
       119 
119 
     | 
    
         
             
              textAlign: null,
         
     | 
| 
       120 
120 
     | 
    
         | 
| 
         @@ -122,8 +122,8 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       122 
122 
     | 
    
         
             
              isContextMenuEnabled: YES,
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
124 
     | 
    
         
             
              /**
         
     | 
| 
       125 
     | 
    
         
            -
                @deprecated
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 125 
     | 
    
         
            +
                @deprecated Use #applyImmediately instead.
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
       127 
127 
     | 
    
         
             
                If true, every change to the text in the text field updates 'value'.
         
     | 
| 
       128 
128 
     | 
    
         
             
                If false, 'value' is only updated when commitEditing() is called (this
         
     | 
| 
       129 
129 
     | 
    
         
             
                is called automatically when the text field loses focus), or whenever
         
     | 
| 
         @@ -253,10 +253,16 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       253 
253 
     | 
    
         
             
                return sc_super();
         
     | 
| 
       254 
254 
     | 
    
         
             
              },
         
     | 
| 
       255 
255 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
              /**  
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                 
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
      
 256 
     | 
    
         
            +
              /** 
         
     | 
| 
      
 257 
     | 
    
         
            +
                This property indicates if the value in the text field can be changed.
         
     | 
| 
      
 258 
     | 
    
         
            +
                If set to NO, a readOnly attribute will be added to the DOM Element.
         
     | 
| 
      
 259 
     | 
    
         
            +
                
         
     | 
| 
      
 260 
     | 
    
         
            +
                Note if isEnabled is NO this property will have no effect.
         
     | 
| 
      
 261 
     | 
    
         
            +
              
         
     | 
| 
      
 262 
     | 
    
         
            +
                @property
         
     | 
| 
      
 263 
     | 
    
         
            +
                @type Boolean
         
     | 
| 
      
 264 
     | 
    
         
            +
              */
         
     | 
| 
      
 265 
     | 
    
         
            +
              isEditable: YES,
         
     | 
| 
       260 
266 
     | 
    
         | 
| 
       261 
267 
     | 
    
         
             
              /**
         
     | 
| 
       262 
268 
     | 
    
         
             
                The current selection of the text field, returned as an SC.TextSelection
         
     | 
| 
         @@ -369,7 +375,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       369 
375 
     | 
    
         
             
              // INTERNAL SUPPORT
         
     | 
| 
       370 
376 
     | 
    
         
             
              //
         
     | 
| 
       371 
377 
     | 
    
         | 
| 
       372 
     | 
    
         
            -
              displayProperties: ['formattedHint', 'fieldValue', 'isEditing', 'leftAccessoryView', 'rightAccessoryView', 'isTextArea'],
         
     | 
| 
      
 378 
     | 
    
         
            +
              displayProperties: ['formattedHint', 'fieldValue', 'isEditing', 'isEditable', 'leftAccessoryView', 'rightAccessoryView', 'isTextArea'],
         
     | 
| 
       373 
379 
     | 
    
         | 
| 
       374 
380 
     | 
    
         
             
              createChildViews: function() {
         
     | 
| 
       375 
381 
     | 
    
         
             
                sc_super();
         
     | 
| 
         @@ -478,6 +484,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       478 
484 
     | 
    
         
             
                if(firstTime) {
         
     | 
| 
       479 
485 
     | 
    
         
             
                  context.attr('aria-multiline', this.get('isTextArea'));
         
     | 
| 
       480 
486 
     | 
    
         
             
                  context.attr('aria-disabled', !this.get('isEnabled'));
         
     | 
| 
      
 487 
     | 
    
         
            +
                  context.attr('aria-readonly', this.get('isEnabled') && !this.get('isEditable'));
         
     | 
| 
       481 
488 
     | 
    
         
             
                }
         
     | 
| 
       482 
489 
     | 
    
         
             
                if(!SC.ok(this.get('value'))) {
         
     | 
| 
       483 
490 
     | 
    
         
             
                  context.attr('aria-invalid', YES);
         
     | 
| 
         @@ -517,7 +524,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       517 
524 
     | 
    
         
             
                //        here, but currently SC.RenderContext will render sibling
         
     | 
| 
       518 
525 
     | 
    
         
             
                //        contexts as parent/child.
         
     | 
| 
       519 
526 
     | 
    
         | 
| 
       520 
     | 
    
         
            -
                var hint = this.get('formattedHint'),  
     | 
| 
      
 527 
     | 
    
         
            +
                var hint = this.get('formattedHint'), activeState, name, adjustmentStyle, type, 
         
     | 
| 
       521 
528 
     | 
    
         
             
                    hintElements, element, paddingElementStyle, fieldClassNames,
         
     | 
| 
       522 
529 
     | 
    
         
             
                    spellCheckEnabled=this.get('spellCheckEnabled'), spellCheckString,
         
     | 
| 
       523 
530 
     | 
    
         
             
                    maxLength = this.get('maxLength'), isOldSafari;
         
     | 
| 
         @@ -532,7 +539,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       532 
539 
     | 
    
         
             
                spellCheckString = spellCheckEnabled ? ' spellcheck="true"' : ' spellcheck="false"';
         
     | 
| 
       533 
540 
     | 
    
         
             
                if (firstTime || this._forceRenderFirstTime) {
         
     | 
| 
       534 
541 
     | 
    
         
             
                  this._forceRenderFirstTime = NO;
         
     | 
| 
       535 
     | 
    
         
            -
                   
     | 
| 
      
 542 
     | 
    
         
            +
                  activeState = this.get('isEnabled') ? (this.get('isEditable') ? '' : 'readonly="readonly"') : 'disabled="disabled"' ;
         
     | 
| 
       536 
543 
     | 
    
         
             
                  name = this.get('layerId');
         
     | 
| 
       537 
544 
     | 
    
         | 
| 
       538 
545 
     | 
    
         
             
                  if(this.get('shouldRenderBorder')) context.push('<span class="border"></span>');
         
     | 
| 
         @@ -564,7 +571,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       564 
571 
     | 
    
         
             
                  // Render the input/textarea field itself, and close off the padding.
         
     | 
| 
       565 
572 
     | 
    
         
             
                  if (this.get('isTextArea')) {
         
     | 
| 
       566 
573 
     | 
    
         
             
                    context.push('<textarea class="',fieldClassNames,'" name="', name, 
         
     | 
| 
       567 
     | 
    
         
            -
                                  '" ',  
     | 
| 
      
 574 
     | 
    
         
            +
                                  '" ', activeState, ' placeholder="',hint, '"',
         
     | 
| 
       568 
575 
     | 
    
         
             
                                  spellCheckString,' maxlength="', maxLength, '">', 
         
     | 
| 
       569 
576 
     | 
    
         
             
                                  value, '</textarea></span>') ;
         
     | 
| 
       570 
577 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -576,7 +583,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       576 
583 
     | 
    
         
             
                    if (this.get('isPassword') && (value !== hint || SC.browser.isIE || SC.platform.input.placeholder)) { type = 'password'; }
         
     | 
| 
       577 
584 
     | 
    
         | 
| 
       578 
585 
     | 
    
         
             
                    context.push('<input class="',fieldClassNames,'" type="', type,
         
     | 
| 
       579 
     | 
    
         
            -
                                  '" name="', name, '" ',  
     | 
| 
      
 586 
     | 
    
         
            +
                                  '" name="', name, '" ', activeState, ' value="', value,
         
     | 
| 
       580 
587 
     | 
    
         
             
                                  '" placeholder="',hint,'"', spellCheckString, 
         
     | 
| 
       581 
588 
     | 
    
         
             
                                  ' maxlength="', maxLength, '" /></span>') ;
         
     | 
| 
       582 
589 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -615,9 +622,13 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       615 
622 
     | 
    
         
             
                  if (element) {
         
     | 
| 
       616 
623 
     | 
    
         
             
                    if (!this.get('isEnabled')) {
         
     | 
| 
       617 
624 
     | 
    
         
             
                      element.disabled = 'true' ;
         
     | 
| 
       618 
     | 
    
         
            -
             
     | 
| 
       619 
     | 
    
         
            -
                    else {
         
     | 
| 
      
 625 
     | 
    
         
            +
                      element.readOnly = null ;
         
     | 
| 
      
 626 
     | 
    
         
            +
                    } else if(!this.get('isEditable')) {
         
     | 
| 
      
 627 
     | 
    
         
            +
                      element.disabled = null ;
         
     | 
| 
      
 628 
     | 
    
         
            +
                      element.readOnly = 'true' ;
         
     | 
| 
      
 629 
     | 
    
         
            +
                    } else {
         
     | 
| 
       620 
630 
     | 
    
         
             
                      element.disabled = null ;
         
     | 
| 
      
 631 
     | 
    
         
            +
                      element.readOnly = null ;
         
     | 
| 
       621 
632 
     | 
    
         
             
                    }
         
     | 
| 
       622 
633 
     | 
    
         | 
| 
       623 
634 
     | 
    
         
             
                    // Adjust the padding element to accommodate any accessory views.
         
     | 
| 
         @@ -920,7 +931,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable, 
     | 
|
| 
       920 
931 
     | 
    
         
             
                When we become first responder, focus the text field if needed and
         
     | 
| 
       921 
932 
     | 
    
         
             
                hide the hint text.
         
     | 
| 
       922 
933 
     | 
    
         
             
              */
         
     | 
| 
       923 
     | 
    
         
            -
               
     | 
| 
      
 934 
     | 
    
         
            +
              didBecomeKeyResponderFrom: function(keyView) {
         
     | 
| 
       924 
935 
     | 
    
         
             
                if(this.get('isVisibleInWindow')) {
         
     | 
| 
       925 
936 
     | 
    
         
             
                  var inp = this.$input()[0];
         
     | 
| 
       926 
937 
     | 
    
         
             
                  try{ 
         
     | 
| 
         @@ -1389,7 +1389,7 @@ Handlebars.JavaScriptCompiler = function() {}; 
     | 
|
| 
       1389 
1389 
     | 
    
         | 
| 
       1390 
1390 
     | 
    
         
             
              var reservedWords = ("break case catch continue default delete do else finally " +
         
     | 
| 
       1391 
1391 
     | 
    
         
             
                                   "for function if in instanceof new return switch this throw " + 
         
     | 
| 
       1392 
     | 
    
         
            -
                                   "try typeof var void while with null true false").split(" ");
         
     | 
| 
      
 1392 
     | 
    
         
            +
                                   "try typeof var void while with null true false extends").split(" ");
         
     | 
| 
       1393 
1393 
     | 
    
         | 
| 
       1394 
1394 
     | 
    
         
             
              compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
         
     | 
| 
       1395 
1395 
     | 
    
         | 
| 
         @@ -39,7 +39,7 @@ window.SproutCore = window.SproutCore || SC ; 
     | 
|
| 
       39 
39 
     | 
    
         
             
            // rest of the methods go into the mixin defined below.
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            /**
         
     | 
| 
       42 
     | 
    
         
            -
              @version 1.6.0 
     | 
| 
      
 42 
     | 
    
         
            +
              @version 1.6.0
         
     | 
| 
       43 
43 
     | 
    
         
             
              @namespace
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
              All SproutCore methods and functions are defined
         
     | 
| 
         @@ -59,7 +59,7 @@ window.SproutCore = window.SproutCore || SC ; 
     | 
|
| 
       59 
59 
     | 
    
         
             
            */
         
     | 
| 
       60 
60 
     | 
    
         
             
            SC = window.SC; // This is dumb but necessary for jsdoc to get it right
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            SC.VERSION = '1.6.0 
     | 
| 
      
 62 
     | 
    
         
            +
            SC.VERSION = '1.6.0';
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
            /**
         
     | 
| 
       65 
65 
     | 
    
         
             
              @private
         
     | 
| 
         @@ -189,7 +189,8 @@ SC.mixin(/** @scope window.SC.prototype */ { 
     | 
|
| 
       189 
189 
     | 
    
         
             
                        SC.T_ARRAY: An instance of Array,<br>
         
     | 
| 
       190 
190 
     | 
    
         
             
                        SC.T_CLASS: A SproutCore class (created using SC.Object.extend()),<br>
         
     | 
| 
       191 
191 
     | 
    
         
             
                        SC.T_OBJECT: A SproutCore object instance,<br>
         
     | 
| 
       192 
     | 
    
         
            -
                        SC.T_HASH: A JavaScript object not inheriting from SC.Object
         
     | 
| 
      
 192 
     | 
    
         
            +
                        SC.T_HASH: A JavaScript object not inheriting from SC.Object, <br>
         
     | 
| 
      
 193 
     | 
    
         
            +
                        SC.T_ERROR: A SproutCore SC.Error object <br>
         
     | 
| 
       193 
194 
     | 
    
         
             
              */
         
     | 
| 
       194 
195 
     | 
    
         
             
              typeOf: function(item) {
         
     | 
| 
       195 
196 
     | 
    
         
             
                if (item === undefined) return SC.T_UNDEFINED ;
         
     | 
| 
         @@ -200,16 +201,21 @@ SC.mixin(/** @scope window.SC.prototype */ { 
     | 
|
| 
       200 
201 
     | 
    
         
             
                if (nativeType === "function") {
         
     | 
| 
       201 
202 
     | 
    
         
             
                  return item.isClass ? SC.T_CLASS : SC.T_FUNCTION;
         
     | 
| 
       202 
203 
     | 
    
         
             
                } else if (nativeType === "object") {
         
     | 
| 
       203 
     | 
    
         
            -
                   
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
                   
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
      
 204 
     | 
    
         
            +
                  
         
     | 
| 
      
 205 
     | 
    
         
            +
                  // Note: typeOf() may be called before SC.Error has had a chance to load
         
     | 
| 
      
 206 
     | 
    
         
            +
                  // so this code checks for the presence of SC.Error first just to make
         
     | 
| 
      
 207 
     | 
    
         
            +
                  // sure.  No error instance can exist before the class loads anyway so
         
     | 
| 
      
 208 
     | 
    
         
            +
                  // this is safe.
         
     | 
| 
      
 209 
     | 
    
         
            +
                  if (SC.Error && (item instanceof SC.Error)) {
         
     | 
| 
      
 210 
     | 
    
         
            +
                    return SC.T_ERROR;
         
     | 
| 
      
 211 
     | 
    
         
            +
                  } else if (item instanceof SC.Object) {
         
     | 
| 
      
 212 
     | 
    
         
            +
                    return SC.T_OBJECT;
         
     | 
| 
       207 
213 
     | 
    
         
             
                  } else {
         
     | 
| 
       208 
     | 
    
         
            -
                    return SC.T_HASH 
     | 
| 
      
 214 
     | 
    
         
            +
                    return SC.T_HASH;
         
     | 
| 
       209 
215 
     | 
    
         
             
                  }
         
     | 
| 
       210 
216 
     | 
    
         
             
                }
         
     | 
| 
       211 
217 
     | 
    
         | 
| 
       212 
     | 
    
         
            -
                return nativeType 
     | 
| 
      
 218 
     | 
    
         
            +
                return nativeType;
         
     | 
| 
       213 
219 
     | 
    
         
             
              },
         
     | 
| 
       214 
220 
     | 
    
         | 
| 
       215 
221 
     | 
    
         
             
              /**
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // ==========================================================================
         
     | 
| 
      
 2 
     | 
    
         
            +
            // Project:   SproutCore Costello - Property Observing Library
         
     | 
| 
      
 3 
     | 
    
         
            +
            // Copyright: ©2006-2010 Sprout Systems, Inc. and contributors.
         
     | 
| 
      
 4 
     | 
    
         
            +
            //            Portions ©2008-2010 Apple Inc. All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            // License:   Licensed under MIT license (see license.js)
         
     | 
| 
      
 6 
     | 
    
         
            +
            // ==========================================================================
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            /*globals module test ok equals same CoreTest */
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            sc_require('debug/test_suites/array/base');
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            SC.ArraySuite.define(function(T) {
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              T.module("flatten");
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              test("should return flattened arrays", function() {
         
     | 
| 
      
 17 
     | 
    
         
            +
                var expected = [1,2,3,4,'a'],
         
     | 
| 
      
 18 
     | 
    
         
            +
                    obj      = T.newObject([1,2,[3,[4]],'a']);
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                expected.forEach(function(i,idx) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                  equals(obj.flatten().objectAt(idx), i,'obj.flatten().objectAt(%@) should match %@'.fmt(idx,i));
         
     | 
| 
      
 22 
     | 
    
         
            +
                });
         
     | 
| 
      
 23 
     | 
    
         
            +
              });
         
     | 
| 
      
 24 
     | 
    
         
            +
            });
         
     | 
| 
         @@ -11,7 +11,8 @@ SC.supplement(Array.prototype, SC.CoreArray); 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            // Because Arrays are dealt with so much, we add specialized functions.
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            SC.mixin(Array.prototype, 
     | 
| 
      
 14 
     | 
    
         
            +
            SC.mixin(Array.prototype,
         
     | 
| 
      
 15 
     | 
    
         
            +
              /** @lends Array.prototype */ {
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
              // primitive for array support.
         
     | 
| 
       17 
18 
     | 
    
         
             
              replace: function(idx, amt, objects) {
         
     | 
| 
         @@ -142,7 +142,7 @@ SC.mixin(Function.prototype, 
     | 
|
| 
       142 
142 
     | 
    
         
             
                not cacheable.
         
     | 
| 
       143 
143 
     | 
    
         | 
| 
       144 
144 
     | 
    
         
             
                @param {Boolean} aFlag optionally indicate cacheable or no, default YES
         
     | 
| 
       145 
     | 
    
         
            -
                @returns {Function}  
     | 
| 
      
 145 
     | 
    
         
            +
                @returns {Function} receiver, useful for chaining calls.
         
     | 
| 
       146 
146 
     | 
    
         
             
              */
         
     | 
| 
       147 
147 
     | 
    
         
             
              cacheable: function(aFlag) {
         
     | 
| 
       148 
148 
     | 
    
         
             
                return SC.Function.cacheable(this, aFlag);
         
     | 
| 
         @@ -163,7 +163,7 @@ SC.mixin(Function.prototype, 
     | 
|
| 
       163 
163 
     | 
    
         
             
                non-volatile.
         
     | 
| 
       164 
164 
     | 
    
         | 
| 
       165 
165 
     | 
    
         
             
                @param {Boolean} aFlag optionally indicate state, default to YES
         
     | 
| 
       166 
     | 
    
         
            -
                @returns {Function}  
     | 
| 
      
 166 
     | 
    
         
            +
                @returns {Function} receiver, useful for chaining calls.
         
     | 
| 
       167 
167 
     | 
    
         
             
              */
         
     | 
| 
       168 
168 
     | 
    
         
             
              idempotent: function(aFlag) {
         
     | 
| 
       169 
169 
     | 
    
         
             
                return SC.Function.idempotent(this, aFlag);
         
     | 
| 
         @@ -174,13 +174,13 @@ SC.mixin(Function.prototype, 
     | 
|
| 
       174 
174 
     | 
    
         
             
              },
         
     | 
| 
       175 
175 
     | 
    
         | 
| 
       176 
176 
     | 
    
         
             
              /**
         
     | 
| 
       177 
     | 
    
         
            -
                Declare that a function should observe an object or property at the named 
     | 
| 
      
 177 
     | 
    
         
            +
                Declare that a function should observe an object or property at the named
         
     | 
| 
       178 
178 
     | 
    
         
             
                path.  Note that the path is used only to construct the observation one time.
         
     | 
| 
       179 
179 
     | 
    
         | 
| 
       180 
180 
     | 
    
         
             
                @param {String...} propertyPaths A list of strings which indicate the
         
     | 
| 
       181 
181 
     | 
    
         
             
                  properties being observed
         
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
                @returns {Function}  
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                @returns {Function} receiver, useful for chaining calls.
         
     | 
| 
       184 
184 
     | 
    
         
             
              */
         
     | 
| 
       185 
185 
     | 
    
         
             
              observes: function(propertyPaths) {
         
     | 
| 
       186 
186 
     | 
    
         
             
                return SC.Function.observes(this, arguments);
         
     |