appetizer-ui 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/appetizer-ui.gemspec +15 -13
- data/lib/appetizer/ui/assets.rb +21 -8
- data/lib/appetizer/ui/jasmine/js/jquery-jasmine.js +288 -0
- data/lib/appetizer/ui/jasmine/js/spec-runner.coffee +0 -1
- data/lib/appetizer/ui/jasmine/views/specs.erb +12 -4
- data/lib/appetizer/ui/rake.rb +29 -10
- data/lib/appetizer/ui/spec.rb +1 -2
- metadata +122 -61
- data/lib/appetizer/ui/app/js/appetizer.coffee +0 -15
- data/lib/appetizer/ui/app/js/appetizer/core.coffee +0 -20
- data/lib/appetizer/ui/app/js/appetizer/model.coffee +0 -1
- data/lib/appetizer/ui/app/js/appetizer/router.coffee +0 -70
- data/lib/appetizer/ui/app/js/appetizer/view.coffee +0 -139
- data/lib/appetizer/ui/app/js/appetizer/xdr.coffee +0 -57
- data/lib/appetizer/ui/app/views/client/appetizer/missing.jst.eco +0 -3
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/appetizerExtensions.spec.js +0 -54
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/checkboxConventionBindings.spec.js +0 -110
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configurableBindingAttributes.spec.js +0 -117
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configureAllBindingAttributes.spec.js +0 -139
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/customConvention.spec.js +0 -53
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindConvention.spec.js +0 -151
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindMultiple.spec.js +0 -36
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindSubstitutions.spec.js +0 -137
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfiguraAllBindingAttributes.spec.js +0 -124
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfigurableBindingAttributes.spec.js +0 -36
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/SpecHelper.js +0 -4
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/sample.backbone.app.js +0 -159
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/html5inputConventionBinding.spec.js +0 -142
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/modelUnbinding.spec.js +0 -73
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/noConflict.spec.js +0 -36
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/radioButtonConventionBinding.spec.js +0 -41
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/selectboxConventionBindings.spec.js +0 -60
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textareaConventionBinding.spec.js +0 -29
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textboxConventionBinding.spec.js +0 -66
- data/lib/appetizer/ui/vendor/js/backbone.js +0 -1290
- data/lib/appetizer/ui/vendor/js/backbone.modelbinding.js +0 -624
- data/lib/appetizer/ui/vendor/js/jquery.js +0 -9266
- data/lib/appetizer/ui/vendor/js/json2.js +0 -480
- data/lib/appetizer/ui/vendor/js/underscore.js +0 -999
- data/lib/appetizer/ui/vendor/js/underscore.string.js +0 -480
data/lib/appetizer/ui/spec.rb
CHANGED
@@ -7,8 +7,7 @@ module Appetizer
|
|
7
7
|
def self.registered app
|
8
8
|
return if App.production?
|
9
9
|
|
10
|
-
%w(css img js views).each do |d|
|
11
|
-
App.assets.append_path "./spec/#{d}"
|
10
|
+
%w(css img js views fonts).each do |d|
|
12
11
|
App.assets.append_path File.expand_path("../jasmine/#{d}", __FILE__)
|
13
12
|
end
|
14
13
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appetizer-ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-03-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: appetizer
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: coffee-script
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '2.2'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.2'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: eco
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '1.0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rack-contrib
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '1.1'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.1'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: rack-ssl
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '1.3'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.3'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: sass
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ~>
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '3.1'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.1'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: sinatra
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ~>
|
@@ -87,43 +117,95 @@ dependencies:
|
|
87
117
|
version: '1.3'
|
88
118
|
type: :runtime
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.3'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: sprockets
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ~>
|
97
132
|
- !ruby/object:Gem::Version
|
98
|
-
version: '2.
|
133
|
+
version: '2.11'
|
99
134
|
type: :runtime
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '2.11'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: sprockets-sass
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.0'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
153
|
none: false
|
106
154
|
requirements:
|
107
155
|
- - ~>
|
108
156
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0
|
157
|
+
version: '1.0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: sprockets-helpers
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ~>
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '1.1'
|
110
166
|
type: :runtime
|
111
167
|
prerelease: false
|
112
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.1'
|
113
174
|
- !ruby/object:Gem::Dependency
|
114
175
|
name: uglifier
|
115
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ~>
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '1.0'
|
182
|
+
type: :runtime
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
116
185
|
none: false
|
117
186
|
requirements:
|
118
187
|
- - ~>
|
119
188
|
- !ruby/object:Gem::Version
|
120
189
|
version: '1.0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: vendorer
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ~>
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0.1'
|
121
198
|
type: :runtime
|
122
199
|
prerelease: false
|
123
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0.1'
|
124
206
|
- !ruby/object:Gem::Dependency
|
125
207
|
name: yajl-ruby
|
126
|
-
requirement:
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
127
209
|
none: false
|
128
210
|
requirements:
|
129
211
|
- - ~>
|
@@ -131,10 +213,15 @@ dependencies:
|
|
131
213
|
version: '1.0'
|
132
214
|
type: :runtime
|
133
215
|
prerelease: false
|
134
|
-
version_requirements:
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ~>
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '1.0'
|
135
222
|
- !ruby/object:Gem::Dependency
|
136
223
|
name: yui-compressor
|
137
|
-
requirement:
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
138
225
|
none: false
|
139
226
|
requirements:
|
140
227
|
- - ~>
|
@@ -142,7 +229,12 @@ dependencies:
|
|
142
229
|
version: '0.9'
|
143
230
|
type: :runtime
|
144
231
|
prerelease: false
|
145
|
-
version_requirements:
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ~>
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0.9'
|
146
238
|
description: A painfully opinionated Appetizer extension for web apps.
|
147
239
|
email:
|
148
240
|
- tech@audiosocket.com
|
@@ -156,48 +248,17 @@ files:
|
|
156
248
|
- Rakefile
|
157
249
|
- appetizer-ui.gemspec
|
158
250
|
- lib/appetizer/ui.rb
|
159
|
-
- lib/appetizer/ui/app/js/appetizer.coffee
|
160
|
-
- lib/appetizer/ui/app/js/appetizer/core.coffee
|
161
|
-
- lib/appetizer/ui/app/js/appetizer/model.coffee
|
162
|
-
- lib/appetizer/ui/app/js/appetizer/router.coffee
|
163
|
-
- lib/appetizer/ui/app/js/appetizer/view.coffee
|
164
|
-
- lib/appetizer/ui/app/js/appetizer/xdr.coffee
|
165
|
-
- lib/appetizer/ui/app/views/client/appetizer/missing.jst.eco
|
166
251
|
- lib/appetizer/ui/assets.rb
|
167
252
|
- lib/appetizer/ui/assets/delivery.rb
|
168
253
|
- lib/appetizer/ui/jasmine/css/jasmine.css
|
169
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/appetizerExtensions.spec.js
|
170
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/checkboxConventionBindings.spec.js
|
171
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/configurableBindingAttributes.spec.js
|
172
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/configureAllBindingAttributes.spec.js
|
173
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/customConvention.spec.js
|
174
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindConvention.spec.js
|
175
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindMultiple.spec.js
|
176
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindSubstitutions.spec.js
|
177
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfiguraAllBindingAttributes.spec.js
|
178
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfigurableBindingAttributes.spec.js
|
179
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/SpecHelper.js
|
180
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/sample.backbone.app.js
|
181
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/html5inputConventionBinding.spec.js
|
182
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/modelUnbinding.spec.js
|
183
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/noConflict.spec.js
|
184
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/radioButtonConventionBinding.spec.js
|
185
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/selectboxConventionBindings.spec.js
|
186
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/textareaConventionBinding.spec.js
|
187
|
-
- lib/appetizer/ui/jasmine/js/backbone.modelbinding/textboxConventionBinding.spec.js
|
188
254
|
- lib/appetizer/ui/jasmine/js/jasmine-html.js
|
189
255
|
- lib/appetizer/ui/jasmine/js/jasmine-jquery-matchers.js
|
190
256
|
- lib/appetizer/ui/jasmine/js/jasmine.js
|
257
|
+
- lib/appetizer/ui/jasmine/js/jquery-jasmine.js
|
191
258
|
- lib/appetizer/ui/jasmine/js/spec-runner.coffee
|
192
259
|
- lib/appetizer/ui/jasmine/views/specs.erb
|
193
260
|
- lib/appetizer/ui/rake.rb
|
194
261
|
- lib/appetizer/ui/spec.rb
|
195
|
-
- lib/appetizer/ui/vendor/js/backbone.js
|
196
|
-
- lib/appetizer/ui/vendor/js/backbone.modelbinding.js
|
197
|
-
- lib/appetizer/ui/vendor/js/jquery.js
|
198
|
-
- lib/appetizer/ui/vendor/js/json2.js
|
199
|
-
- lib/appetizer/ui/vendor/js/underscore.js
|
200
|
-
- lib/appetizer/ui/vendor/js/underscore.string.js
|
201
262
|
homepage: https://github.com/audiosocket/appetizer-ui
|
202
263
|
licenses: []
|
203
264
|
post_install_message:
|
@@ -218,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
279
|
version: '0'
|
219
280
|
requirements: []
|
220
281
|
rubyforge_project:
|
221
|
-
rubygems_version: 1.8.
|
282
|
+
rubygems_version: 1.8.23
|
222
283
|
signing_key:
|
223
284
|
specification_version: 3
|
224
285
|
summary: Helpers for rich clients using Sinatra, Sass, and CoffeeScript.
|
@@ -1,15 +0,0 @@
|
|
1
|
-
#= require json2
|
2
|
-
#= require jquery
|
3
|
-
#= require underscore
|
4
|
-
#= require underscore.string
|
5
|
-
|
6
|
-
#= require backbone
|
7
|
-
#= require backbone.modelbinding
|
8
|
-
|
9
|
-
#= require appetizer/core
|
10
|
-
#= require appetizer/model
|
11
|
-
#= require appetizer/view
|
12
|
-
|
13
|
-
# Mixin non-conflicting methods to underscore.
|
14
|
-
|
15
|
-
_.mixin _.str.exports()
|
@@ -1,20 +0,0 @@
|
|
1
|
-
window.Appetizer ||= {}
|
2
|
-
|
3
|
-
# All Backbone's classes that inherit from Backbone.Event
|
4
|
-
# are also given a "one" method, which can be used to fire
|
5
|
-
# a callback only on the next occurence of a given event.
|
6
|
-
|
7
|
-
one =
|
8
|
-
one: (ev, callback, context) ->
|
9
|
-
self = this
|
10
|
-
|
11
|
-
fn = ->
|
12
|
-
callback.apply this, arguments
|
13
|
-
self.unbind.apply self, [ev, fn]
|
14
|
-
|
15
|
-
this.bind ev, fn, context
|
16
|
-
|
17
|
-
_.extend Backbone.Model.prototype, one
|
18
|
-
_.extend Backbone.Collection.prototype, one
|
19
|
-
_.extend Backbone.View.prototype, one
|
20
|
-
_.extend Backbone.Router.prototype, one
|
@@ -1 +0,0 @@
|
|
1
|
-
class Appetizer.Model extends Backbone.Model
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# A superclass for Backbone.router. It adds the following features:
|
2
|
-
# * Register dynamic routes: the method @dynamicRoutes, if present,
|
3
|
-
# is executed when initializing the router. Using the provided @register
|
4
|
-
# method, it is then possible to register routes within the @dynamicRoutes
|
5
|
-
# method.
|
6
|
-
#
|
7
|
-
# * Components facilities: the property @components should contain an
|
8
|
-
# array of components used in the application, such as "page", "panel",
|
9
|
-
# "sidebar", etc..
|
10
|
-
# For each component, a method showFoo is created, which can then be used
|
11
|
-
# to show a component. For instance, showPage App.View.Page, options. Upon
|
12
|
-
# calling showFoo App.View.Bar the following is performed:
|
13
|
-
# - Call @foo.hide true if @foo exists
|
14
|
-
# - Instanciate a fresh @foo = new App.View.Bar options
|
15
|
-
# - Save current route in @foo.currentRoute
|
16
|
-
# - Emit "foo:showing", @foo
|
17
|
-
# - Call @foo.show()
|
18
|
-
# - Emit "foo:shown", @foo when @foo has been shown
|
19
|
-
#
|
20
|
-
# Component facilites can be used to properly implement your application's
|
21
|
-
# logic. For instance, you can do the following:
|
22
|
-
# components: ["page", "sidebar"]
|
23
|
-
#
|
24
|
-
# initialize: ->
|
25
|
-
# # Show the sidebar corresponding to current shown page.
|
26
|
-
# @bind "page:shown", (page) -> @showSidebar @findSidebarForPage(page)
|
27
|
-
|
28
|
-
class Appetizer.Router extends Backbone.Router
|
29
|
-
initialize: ->
|
30
|
-
@children = []
|
31
|
-
|
32
|
-
@dynamicRoutes() if @dynamicRoutes?
|
33
|
-
|
34
|
-
# Create showItem functions
|
35
|
-
|
36
|
-
if @components?
|
37
|
-
@addShowFunction item for item in @components
|
38
|
-
|
39
|
-
register: (route, name) =>
|
40
|
-
@route route, name, this[name]
|
41
|
-
|
42
|
-
# Create an instance of a view, set this as the view's parent, and
|
43
|
-
# add the view to the router's list of children.
|
44
|
-
|
45
|
-
createChild: (kind, options) ->
|
46
|
-
child = new kind options
|
47
|
-
child.parent = this
|
48
|
-
@children.push child
|
49
|
-
child
|
50
|
-
|
51
|
-
# Required for Appetizer.View hierarchy management.
|
52
|
-
|
53
|
-
removeChild: (view) ->
|
54
|
-
@children.splice _.indexOf(@children, view), 1
|
55
|
-
this
|
56
|
-
|
57
|
-
addShowFunction: (item) ->
|
58
|
-
fn = "show#{item.charAt(0).toUpperCase()}#{item.slice 1}"
|
59
|
-
|
60
|
-
this[fn] = (kind, options) ->
|
61
|
-
if this[item]?
|
62
|
-
this[item].hide true
|
63
|
-
@removeChild this[item]
|
64
|
-
|
65
|
-
this[item] = @createChild(kind, options)
|
66
|
-
this[item].currentRoute = Backbone.history.getFragment()
|
67
|
-
|
68
|
-
@trigger "#{item}:showing", this[item]
|
69
|
-
this[item].bind "shown", => @trigger "#{item}:shown", this[item]
|
70
|
-
this[item].show()
|
@@ -1,139 +0,0 @@
|
|
1
|
-
# Shockingly enough, a superclass for views. Provides hooks and
|
2
|
-
# abstractions for incoming and outgoing bindings, parent and child
|
3
|
-
# views, default template rendering, async actions before show, and
|
4
|
-
# show()/hide()/makeVisible() helpers on top of render() and remove().
|
5
|
-
|
6
|
-
class Appetizer.View extends Backbone.View
|
7
|
-
|
8
|
-
# Subclasses must always call `super` in their initializers:
|
9
|
-
# Important binding, parent, and child relationships get created.
|
10
|
-
|
11
|
-
initialize: (options) ->
|
12
|
-
@bindings = []
|
13
|
-
@children = []
|
14
|
-
@parent = options.parent if options?.parent?
|
15
|
-
@route = options?.route or @constructor.route
|
16
|
-
|
17
|
-
@bind "ancestor:shown", ->
|
18
|
-
child.trigger "ancestor:shown" for child in @children
|
19
|
-
@shown = true
|
20
|
-
|
21
|
-
# true if the element or its ancestor have already been shown.
|
22
|
-
# Can be used at rendering time to execute operations that
|
23
|
-
# need the element to be hooked-up in the DOM, such as computing
|
24
|
-
# its height.
|
25
|
-
|
26
|
-
shown: false
|
27
|
-
|
28
|
-
# Add a child `view`. Its `parent` will be set to `this`, and it
|
29
|
-
# will be dismissed when this view is dismissed.
|
30
|
-
|
31
|
-
addChild: (view) ->
|
32
|
-
view.parent = this
|
33
|
-
@children.push view
|
34
|
-
this
|
35
|
-
|
36
|
-
# Hook to allow async processes to occur before and after showing
|
37
|
-
# the view. A bound callback `fn` is passed to this method by
|
38
|
-
# `show`, and should be called when the view is ready to be shown.
|
39
|
-
|
40
|
-
aroundShow: (fn) -> fn()
|
41
|
-
|
42
|
-
# Bind `fn` to an `event` on `src`, remembering that we've bound it
|
43
|
-
# for future unbinding. Use this instead of calling `bind` directly
|
44
|
-
# on other sources. Returns `this`.
|
45
|
-
|
46
|
-
bindTo: (src, event, fn) ->
|
47
|
-
src.bind event, fn, this
|
48
|
-
@bindings.push evt: event, fn: fn, src: src
|
49
|
-
this
|
50
|
-
|
51
|
-
# Create and return a new instance of `kind`, passing along
|
52
|
-
# `options` to the constructor. Add it as a child view.
|
53
|
-
|
54
|
-
createChild: (kind, options) ->
|
55
|
-
child = new kind options
|
56
|
-
@addChild child
|
57
|
-
child
|
58
|
-
|
59
|
-
# Indicate that this view is no longer necessary. Optionally takes a
|
60
|
-
# DOM event `e` and calls `preventDefault` on it to make wiring
|
61
|
-
# easier. Unbinds all incoming and outgoing events, calls `dismiss`
|
62
|
-
# on all children, and removes this view from any parent it might
|
63
|
-
# have. Returns `this`.
|
64
|
-
|
65
|
-
hide: (e) ->
|
66
|
-
e.preventDefault() if e?.preventDefault?
|
67
|
-
|
68
|
-
@trigger "hiding"
|
69
|
-
@remove()
|
70
|
-
|
71
|
-
@trigger "hidden"
|
72
|
-
@unbind()
|
73
|
-
|
74
|
-
_(@children).chain().clone().each (c) -> c.hide() if c.hide?
|
75
|
-
@parent.removeChild this if @parent?.removeChild
|
76
|
-
|
77
|
-
this
|
78
|
-
|
79
|
-
# Hook to provide actual DOM insertion/manipulation for the
|
80
|
-
# view. The default implementation logs an error message to the
|
81
|
-
# console.
|
82
|
-
|
83
|
-
makeVisible: ->
|
84
|
-
console.log "Can't make #{this.constructor.name} visible."
|
85
|
-
|
86
|
-
# Remove `view` from this view's list of children. Returns `this`.
|
87
|
-
|
88
|
-
removeChild: (view) ->
|
89
|
-
@children.splice _.indexOf(@children, view), 1
|
90
|
-
this
|
91
|
-
|
92
|
-
# Render the contents of the view. Updates the view element's
|
93
|
-
# contents, but doesn't do any other manipulation. Uses a JST based
|
94
|
-
# on either the view class' `template` default value or a `template`
|
95
|
-
# key passed in to the constructor. Triggers a "rendered" event
|
96
|
-
# after the element's contents are in place. Returns `this`.
|
97
|
-
#
|
98
|
-
# Assumes that views are under a "client/" prefix and that their
|
99
|
-
# template functions are available on a "JST" global.
|
100
|
-
|
101
|
-
render: =>
|
102
|
-
template = @options.template || @template || "appetizer/missing"
|
103
|
-
renderer = JST["client/#{template}"] or JST["client/appetizer/missing"]
|
104
|
-
|
105
|
-
@trigger "rendering"
|
106
|
-
$(@el).html renderer this
|
107
|
-
@trigger "rendered"
|
108
|
-
|
109
|
-
this
|
110
|
-
|
111
|
-
# Display this view. Possibly asynchronous: Passes a bound callback
|
112
|
-
# to `beforeShow` that will call `makeVisible` when the view is
|
113
|
-
# ready for display. The default implementation of `makeVisible`
|
114
|
-
# calls the callback immediately. Returns `this`.
|
115
|
-
|
116
|
-
show: ->
|
117
|
-
@aroundShow =>
|
118
|
-
@trigger "showing"
|
119
|
-
@makeVisible()
|
120
|
-
@trigger "shown"
|
121
|
-
|
122
|
-
@shown = true
|
123
|
-
child.trigger "ancestor:shown" for child in @children
|
124
|
-
|
125
|
-
this
|
126
|
-
|
127
|
-
# Unbind any listeners who have bound themselves to us, and unbind
|
128
|
-
# any listeners we've bound to others. Returns `this`.
|
129
|
-
|
130
|
-
unbind: ->
|
131
|
-
super # from Backbone.Events
|
132
|
-
b.src.unbind b.evt, b.fn for b in @bindings
|
133
|
-
this
|
134
|
-
|
135
|
-
# Unbind all events we may have bound on `src`. Returns `this`.
|
136
|
-
|
137
|
-
unbindFrom: (src) ->
|
138
|
-
b.src.unbind b.evt, b.fn for b in @bindings when b.src is src
|
139
|
-
this
|