sproutcore 1.4.0.rc.4 → 1.4.0.rc.5
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +6 -0
- data/lib/sproutcore/models/target.rb +5 -1
- metadata +3 -8
- data/lib/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +0 -12
- data/lib/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +0 -125
- data/lib/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +0 -12
- data/lib/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +0 -9
- data/lib/frameworks/sproutcore/frameworks/mobile/views/button.js +0 -191
data/VERSION.yml
CHANGED
@@ -900,6 +900,12 @@ SC.CollectionView = SC.View.extend(
|
|
900
900
|
// we'll destroy the layer now.
|
901
901
|
existing.destroyLayer();
|
902
902
|
}
|
903
|
+
|
904
|
+
// We don't want the old layer hanging around, even if we are going
|
905
|
+
// to reuse it.
|
906
|
+
// (Charles Jolley personally guarantees this code)
|
907
|
+
layer = existing.get('layer');
|
908
|
+
layer.parentNode.removeChild(layer);
|
903
909
|
|
904
910
|
containerView.removeChild(existing);
|
905
911
|
}
|
@@ -346,7 +346,11 @@ module SC
|
|
346
346
|
|
347
347
|
# read cache from disk if needed
|
348
348
|
if @file_attr_cache.nil? && File.exists?(file_attr_cache_path)
|
349
|
-
|
349
|
+
begin
|
350
|
+
@file_attr_cache = JSON.parse File.read(file_attr_cache_path)
|
351
|
+
rescue JSON::ParserError
|
352
|
+
# Unparseable, will be handled by the following conditional
|
353
|
+
end
|
350
354
|
|
351
355
|
# Sometimes the file is corrupted, in this case, clear the cache
|
352
356
|
File.delete file_attr_cache_path unless @file_attr_cache
|
metadata
CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
|
|
7
7
|
- 4
|
8
8
|
- 0
|
9
9
|
- rc
|
10
|
-
-
|
11
|
-
version: 1.4.0.rc.
|
10
|
+
- 5
|
11
|
+
version: 1.4.0.rc.5
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Sprout Systems, Inc. Apple Inc. and contributors
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-09-
|
19
|
+
date: 2010-09-15 00:00:00 -07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -1656,11 +1656,6 @@ files:
|
|
1656
1656
|
- lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js
|
1657
1657
|
- lib/frameworks/sproutcore/frameworks/media/views/video.js
|
1658
1658
|
- lib/frameworks/sproutcore/frameworks/mini/license.js
|
1659
|
-
- lib/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css
|
1660
|
-
- lib/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml
|
1661
|
-
- lib/frameworks/sproutcore/frameworks/mobile/system/root_responder.js
|
1662
|
-
- lib/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js
|
1663
|
-
- lib/frameworks/sproutcore/frameworks/mobile/views/button.js
|
1664
1659
|
- lib/frameworks/sproutcore/frameworks/runtime/core.js
|
1665
1660
|
- lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js
|
1666
1661
|
- lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js
|
@@ -1,125 +0,0 @@
|
|
1
|
-
<% # SPROUTCORE MOBILE INDEX TEMPLATE
|
2
|
-
# This template provide provides a basic wrapper for a mobile SproutCore
|
3
|
-
# client. It provides much of the same functionality found in the
|
4
|
-
# default template except that it also includes necessary configs needed
|
5
|
-
# for loading your page on the iPhone.
|
6
|
-
#
|
7
|
-
# Most of the time, it will be sufficient for your own needs. However, if
|
8
|
-
# you need to create your own template, you can do so by copying this file
|
9
|
-
# into your client, naming it 'index.rhtml' and then adding the options
|
10
|
-
# :layout => 'lib/index' to your Buildfile.
|
11
|
-
#
|
12
|
-
# See the comments in this file for more information on what you can
|
13
|
-
# change.
|
14
|
-
-%>
|
15
|
-
<!DOCTYPE html>
|
16
|
-
<html>
|
17
|
-
<head>
|
18
|
-
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
19
|
-
<meta name="apple-mobile-web-app-capable" content="yes" />
|
20
|
-
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
21
|
-
<meta name = "viewport" content = "width = device-width, height = device-height, user-scalable = no" />
|
22
|
-
|
23
|
-
<% # Set the 'title' in your config to alter this setting %>
|
24
|
-
<title><%= title %></title>
|
25
|
-
<% #
|
26
|
-
# You may choose to load one or more bootstrap resources. These are
|
27
|
-
# JS targets that you would like to load at the top of the page. Specify
|
28
|
-
# these in your Buildfile with the 'bootstrap' config.
|
29
|
-
-%>
|
30
|
-
<% if config.bootstrap %>
|
31
|
-
<script src="<%= static_url(config.bootstrap) %>" type="text/javascript"></script>
|
32
|
-
<% end -%>
|
33
|
-
<% #
|
34
|
-
# Bootstrap code is loaded at the top of your page to do any early setup
|
35
|
-
# you might need, including basic browser detection. The default
|
36
|
-
# bootstrap code provided by SproutCore simply detects your browser
|
37
|
-
# platform. Add more by including templates targeting the bootstrap
|
38
|
-
-%>
|
39
|
-
<% if @content_for_bootstrap %>
|
40
|
-
<script type="text/javascript">
|
41
|
-
<%= @content_for_bootstrap %>
|
42
|
-
</script>
|
43
|
-
<% end -%>
|
44
|
-
<% #
|
45
|
-
# This line should appear in your head area to include the stylesheets
|
46
|
-
# generated by your client. If you need to include your own
|
47
|
-
# stylesheets, you don't need to change it here. Instead use the
|
48
|
-
# required option in your config.
|
49
|
-
-%>
|
50
|
-
<%= stylesheets_for_client %>
|
51
|
-
<%= @content_for_page_styles %>
|
52
|
-
</head>
|
53
|
-
|
54
|
-
<% # The theme CSS class is added automatically based on your chosen theme.
|
55
|
-
# If you need to specify a custom theme name, use CONFIG.theme_name
|
56
|
-
-%>
|
57
|
-
<body class="<%= [theme_name(:default => 'sc-theme'), 'focus'].compact.join(' ') %>">
|
58
|
-
<% # This section is used to setup additional optional class names on the
|
59
|
-
# body content based on JS-selected conditions. Use this to make sure you
|
60
|
-
# show the proper CSS as soon as the page appears.
|
61
|
-
-%>
|
62
|
-
<% unless @content_for_setup_body_class_names.blank? %>
|
63
|
-
<script type="text/javascript">
|
64
|
-
<%= @content_for_setup_body_class_names %>
|
65
|
-
</script>
|
66
|
-
<% end -%>
|
67
|
-
<% #
|
68
|
-
# This is where you root body element will appear. To cause your
|
69
|
-
# content to appear here, just declare content_for('body') in one of
|
70
|
-
# your partials.
|
71
|
-
-%>
|
72
|
-
<%= @content_for_body %>
|
73
|
-
<% #
|
74
|
-
# This is where your loading screen will appear. To add a loading screen
|
75
|
-
# just declare content_for('loading') in one of your partials.
|
76
|
-
-%>
|
77
|
-
<% unless @content_for_loading.blank? %>
|
78
|
-
<div id="loading">
|
79
|
-
<%= @content_for_loading %>
|
80
|
-
</div>
|
81
|
-
<% end -%>
|
82
|
-
<% #
|
83
|
-
# This is where the resources you declare will appear. By default anything
|
84
|
-
# you add to partials will be added to this section unless you specify
|
85
|
-
# otherwise. Note that resources are initially hidden so you can pull them
|
86
|
-
# apart as needed on page load.
|
87
|
-
-%>
|
88
|
-
<% unless @content_for_resources.blank? %>
|
89
|
-
<!-- Resources to be removed from DOM on page load -->
|
90
|
-
<div id="resources" style="display:none; visibility: hidden;">
|
91
|
-
<%= @content_for_resources -%>
|
92
|
-
</div>
|
93
|
-
<% end -%>
|
94
|
-
<% #
|
95
|
-
# This line should appear at the bottom of your page to include your
|
96
|
-
# generated JavaScript and any libraries you reference. If you need
|
97
|
-
# to include other javascripts, add them to the :requires option of
|
98
|
-
# your client in routes.rb instead of changing it here.
|
99
|
-
-%>
|
100
|
-
<%= javascripts_for_client %>
|
101
|
-
<% unless @content_for_page_javascript.blank? %>
|
102
|
-
<%= @content_for_page_javascript %>
|
103
|
-
<% end -%>
|
104
|
-
<% #
|
105
|
-
# If you use old-style view helpers in your page, this method must be
|
106
|
-
# called to actually add the page views to your HTML. Normally this will
|
107
|
-
# not generate any content.
|
108
|
-
-%>
|
109
|
-
<% #render_page_views -%>
|
110
|
-
<% # Older SproutCore applications need SC.didLoad to be called after onload.
|
111
|
-
# This is no longer required by SproutCore so it is off by default. To
|
112
|
-
# reenable set use_window_onload = true in yur config.
|
113
|
-
-%>
|
114
|
-
<% if config.use_window_onload %>
|
115
|
-
<!-- Start SproutCore on Page Load -->
|
116
|
-
<script type="text/javascript">window.onload = SC.didLoad;</script>
|
117
|
-
<% end -%>
|
118
|
-
<% #
|
119
|
-
# The final content section can be used to add any last minute setup you
|
120
|
-
# need to do before the page ends. This is required for loading unit
|
121
|
-
# tests among other things.
|
122
|
-
-%>
|
123
|
-
<%= @content_for_final -%>
|
124
|
-
</body>
|
125
|
-
</html>
|
@@ -1,12 +0,0 @@
|
|
1
|
-
// ========================================================================
|
2
|
-
// SproutCore -- JavaScript Application Framework
|
3
|
-
// Copyright ©2006-2008, Sprout Systems, Inc. and contributors.
|
4
|
-
// Portions copyright ©2008 Apple Inc. All rights reserved.
|
5
|
-
// ========================================================================
|
6
|
-
|
7
|
-
// Swap in platform-specific subclass. Class-cluster FTW!
|
8
|
-
SC.RootResponder = SC.RootResponder.extend({
|
9
|
-
|
10
|
-
platform: 'mobile',
|
11
|
-
|
12
|
-
}) ;
|
@@ -1,9 +0,0 @@
|
|
1
|
-
// ==========================================================================
|
2
|
-
// Project: SproutCore - JavaScript Application Framework
|
3
|
-
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
-
// portions copyright @2009 Apple Inc.
|
5
|
-
// License: Licensed under MIT license (see license.js)
|
6
|
-
// ==========================================================================
|
7
|
-
|
8
|
-
/*global module test htmlbody ok equals same stop start */
|
9
|
-
|
@@ -1,191 +0,0 @@
|
|
1
|
-
// ==========================================================================
|
2
|
-
// Project: SproutCore - JavaScript Application Framework
|
3
|
-
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
-
// Portions ©2008-2009 Apple Inc. All rights reserved.
|
5
|
-
// License: Licensed under MIT license (see license.js)
|
6
|
-
// ==========================================================================
|
7
|
-
|
8
|
-
/** @class
|
9
|
-
|
10
|
-
Implements a push-button-style button. This class is used to implement
|
11
|
-
both standard push buttons and tab-style controls.
|
12
|
-
|
13
|
-
@extends SC.View
|
14
|
-
@extends SC.Control
|
15
|
-
@extends SC.Button
|
16
|
-
@since SproutCore 1.0
|
17
|
-
*/
|
18
|
-
SC.ButtonView = SC.View.extend(SC.Control, SC.Button,
|
19
|
-
/** @scope SC.ButtonView.prototype */ {
|
20
|
-
|
21
|
-
tagName: 'a',
|
22
|
-
classNames: ['sc-button-view'],
|
23
|
-
|
24
|
-
/**
|
25
|
-
optionally set this to the theme you want this button to have.
|
26
|
-
|
27
|
-
This is used to determine the type of button this is. You generally
|
28
|
-
should set a class name on the HTML with the same value to allow CSS
|
29
|
-
styling.
|
30
|
-
|
31
|
-
The default SproutCore theme supports "regular", "checkbox", and "radio"
|
32
|
-
*/
|
33
|
-
theme: 'square',
|
34
|
-
|
35
|
-
/**
|
36
|
-
The button href value. This can be used to create localized button href values. Setting an empty or null href will set it to javascript:;
|
37
|
-
*/
|
38
|
-
href: '',
|
39
|
-
|
40
|
-
/**
|
41
|
-
The name of the action you want triggered when the button is pressed.
|
42
|
-
|
43
|
-
This property is used in conjunction with the target property to execute
|
44
|
-
a method when a regular button is pressed. These properties are not
|
45
|
-
relevant when the button is used in toggle mode.
|
46
|
-
|
47
|
-
If you do not set a target, then pressing a button will cause the
|
48
|
-
responder chain to search for a view that implements the action you name
|
49
|
-
here. If you set a target, then the button will try to call the method
|
50
|
-
on the target itself.
|
51
|
-
|
52
|
-
For legacy support, you can also set the action property to a function.
|
53
|
-
Doing so will cause the function itself to be called when the button is
|
54
|
-
clicked. It is generally better to use the target/action approach and
|
55
|
-
to implement your code in a controller of some type.
|
56
|
-
|
57
|
-
@type String
|
58
|
-
*/
|
59
|
-
action: null,
|
60
|
-
|
61
|
-
/**
|
62
|
-
The target object to invoke the action on when the button is pressed.
|
63
|
-
|
64
|
-
If you set this target, the action will be called on the target object
|
65
|
-
directly when the button is clicked. If you leave this property set to
|
66
|
-
null, then the button will search the responder chain for a view that
|
67
|
-
implements the action when the button is pressed instead.
|
68
|
-
|
69
|
-
@type Object
|
70
|
-
*/
|
71
|
-
target: null,
|
72
|
-
|
73
|
-
/**
|
74
|
-
fakes a click... evt is optional.
|
75
|
-
|
76
|
-
Temporarily highlights the button to show that it is being triggered.
|
77
|
-
Does nothing if the button is disabled.
|
78
|
-
|
79
|
-
@returns {bool} success/failure of the request
|
80
|
-
*/
|
81
|
-
triggerAction: function(evt) {
|
82
|
-
if (!this.get('isEnabled')) return false;
|
83
|
-
this.set('isActive', YES);
|
84
|
-
this._action(evt);
|
85
|
-
this.invokeLater('set', 200, 'isActive', NO);
|
86
|
-
return true;
|
87
|
-
},
|
88
|
-
|
89
|
-
// ................................................................
|
90
|
-
// INTERNAL SUPPORT
|
91
|
-
|
92
|
-
_TEMPORARY_CLASS_HASH: {},
|
93
|
-
|
94
|
-
// display properties that should automatically cause a refresh.
|
95
|
-
// isCancel and isDefault also cause a refresh but this is implemented as
|
96
|
-
// a separate observer (see below)
|
97
|
-
displayProperties: 'href icon title value'.w(),
|
98
|
-
|
99
|
-
render: function(context, firstTime) {
|
100
|
-
// add href attr if tagName is anchor...
|
101
|
-
if (this.get('tagName') === 'a') {
|
102
|
-
var href = this.get('href');
|
103
|
-
if (!href || (href.length === 0)) href = "javascript"+":;";
|
104
|
-
context.attr('href', href);
|
105
|
-
}
|
106
|
-
|
107
|
-
// add some standard attributes & classes.
|
108
|
-
var classes = this._TEMPORARY_CLASS_HASH, icon = this.get('icon');
|
109
|
-
classes.def = this.get('isDefault');
|
110
|
-
classes.cancel = this.get('isCancel');
|
111
|
-
classes.icon = !!icon;
|
112
|
-
var theme = this.get('theme');
|
113
|
-
if(theme) classes[theme] = YES;
|
114
|
-
context.attr('role', 'button').setClass(classes);
|
115
|
-
|
116
|
-
// don't reset the content if the touch is down because we don't want to
|
117
|
-
// regenerate the event.
|
118
|
-
if (!this._isTouchActive) {
|
119
|
-
context = context.begin('span').addClass('sc-button-inner');
|
120
|
-
this.renderTitle(context, firstTime) ; // from button mixin
|
121
|
-
context = context.end();
|
122
|
-
}
|
123
|
-
},
|
124
|
-
|
125
|
-
_isTouchActive: NO,
|
126
|
-
|
127
|
-
/** @private
|
128
|
-
On touch start, set active only if enabled.
|
129
|
-
*/
|
130
|
-
touchStart: function(evt) {
|
131
|
-
if (!this.get('isEnabled')) return YES ; // handled event, but do nothing
|
132
|
-
this.set('isActive', YES);
|
133
|
-
this._isTouchActive = YES;
|
134
|
-
return YES ;
|
135
|
-
},
|
136
|
-
|
137
|
-
/** @private
|
138
|
-
Remove the active class on touchExited if mouse is down.
|
139
|
-
*/
|
140
|
-
touchExited: function(evt) {
|
141
|
-
if (this._isTouchActive) this.set('isActive', NO);
|
142
|
-
return YES;
|
143
|
-
},
|
144
|
-
|
145
|
-
/** @private
|
146
|
-
If mouse was down and we renter the button area, set the active state again.
|
147
|
-
*/
|
148
|
-
touchEntered: function(evt) {
|
149
|
-
this.set('isActive', this._isTouchActive);
|
150
|
-
return YES;
|
151
|
-
},
|
152
|
-
|
153
|
-
/** @private
|
154
|
-
ON mouse up, trigger the action only if we are enabled and the mouse was released inside of the view.
|
155
|
-
*/
|
156
|
-
touchEnd: function(evt) {
|
157
|
-
// track independently in case isEnabled has changed
|
158
|
-
if (this._isTouchActive) this.set('isActive', NO);
|
159
|
-
this._isTouchActive = false;
|
160
|
-
|
161
|
-
// trigger action if final touch was inside of button frame.
|
162
|
-
// if touch event was cancelled, do not trigger action
|
163
|
-
var inside, touchPoint, rect, changed;
|
164
|
-
if (evt.changedTouches.length > 0) {
|
165
|
-
changed = evt.changedTouches[0];
|
166
|
-
touchPoint = { x: changed.pageX, y: changed.pageY };
|
167
|
-
rect = this.convertFrameToView(this.get('frame'), null);
|
168
|
-
inside = SC.pointInRect(touchPoint, rect);
|
169
|
-
} else inside = YES ;
|
170
|
-
if (!evt.cancel && inside && this.get('isEnabled')) this._action(evt) ;
|
171
|
-
return true ;
|
172
|
-
},
|
173
|
-
|
174
|
-
/** @private Perform an action based on the behavior of the button.
|
175
|
-
|
176
|
-
- toggle behavior: switch to on/off state
|
177
|
-
- on behavior: turn on.
|
178
|
-
- off behavior: turn off.
|
179
|
-
- otherwise: invoke target/action
|
180
|
-
*/
|
181
|
-
_action: function(evt) {
|
182
|
-
console.log('action!');
|
183
|
-
var action = this.get('action');
|
184
|
-
var target = this.get('target') || null;
|
185
|
-
var pane = this.get('pane');
|
186
|
-
var responder = pane ? pane.get('rootResponder') : null ;
|
187
|
-
if (responder) responder.sendAction(action, target, this, pane);
|
188
|
-
}
|
189
|
-
|
190
|
-
}) ;
|
191
|
-
|