luca 0.9.89 → 0.9.91
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 +11 -1
- data/Gemfile +5 -2
- data/Gemfile.lock +84 -56
- data/Rakefile +10 -2
- data/app/assets/javascripts/luca/components/application.coffee +82 -89
- data/app/assets/javascripts/luca/components/collection_view.coffee +9 -5
- data/app/assets/javascripts/luca/components/controller.coffee +72 -11
- data/app/assets/javascripts/luca/components/fields/base.coffee +61 -8
- data/app/assets/javascripts/luca/components/fields/button_field.coffee +53 -7
- data/app/assets/javascripts/luca/components/fields/checkbox_array.coffee +12 -7
- data/app/assets/javascripts/luca/components/fields/text_field.coffee +1 -1
- data/app/assets/javascripts/luca/components/form_view.coffee +2 -2
- data/app/assets/javascripts/luca/components/grid_layout_view.coffee +0 -1
- data/app/assets/javascripts/luca/components/page.coffee +1 -0
- data/app/assets/javascripts/luca/components/table_view.coffee +2 -2
- data/app/assets/javascripts/luca/concerns/dom_helpers.coffee +2 -2
- data/app/assets/javascripts/luca/containers/card_view.coffee +84 -54
- data/app/assets/javascripts/luca/containers/container.coffee +126 -46
- data/app/assets/javascripts/luca/containers/modal_view.coffee +9 -9
- data/app/assets/javascripts/luca/containers/page_controller.coffee +25 -0
- data/app/assets/javascripts/luca/containers/panel_toolbar.coffee +1 -1
- data/app/assets/javascripts/luca/containers/viewport.coffee +2 -5
- data/app/assets/javascripts/luca/core/collection.coffee +18 -4
- data/app/assets/javascripts/luca/core/model.coffee +1 -1
- data/app/assets/javascripts/luca/core/panel.coffee +1 -1
- data/app/assets/javascripts/luca/core/view.coffee +26 -7
- data/app/assets/javascripts/luca/development/code_sync_manager.coffee +51 -4
- data/app/assets/javascripts/luca/development/console.coffee +1 -1
- data/app/assets/javascripts/luca/framework.coffee +1 -1
- data/app/assets/javascripts/luca/index.coffee +1 -0
- data/app/assets/javascripts/luca/util/luca.coffee +2 -1
- data/app/assets/stylesheets/luca/components/viewport.scss +0 -4
- data/bin/luca +14 -0
- data/docs/framework.json +1 -1
- data/docs/luca-framework-documentation.js +1 -0
- data/lib/luca/cli/generate.rb +37 -0
- data/lib/luca/cli/server.rb +20 -0
- data/lib/luca/cli/sync.rb +40 -0
- data/lib/luca/cli/watch.rb +16 -0
- data/lib/luca/cli.rb +68 -0
- data/lib/luca/collection/endpoint.rb +1 -0
- data/lib/luca/component_definition.rb +23 -5
- data/lib/luca/luca_application.rb +18 -7
- data/lib/luca/rails/version.rb +1 -1
- data/lib/luca/server.rb +7 -0
- data/lib/luca/stylesheet.rb +2 -3
- data/lib/luca/version.rb +3 -0
- data/lib/luca/watcher.rb +72 -0
- data/lib/luca.rb +8 -1
- data/luca.gemspec +14 -7
- data/site/.bundle/config +2 -0
- data/site/.gitignore +5 -0
- data/site/.rvmrc +1 -0
- data/site/CHANGELOG.md +41 -0
- data/site/DOCS.md +41 -0
- data/site/Gemfile +8 -0
- data/site/Gemfile.lock +134 -0
- data/site/LICENSE.md +19 -0
- data/site/config.rb +84 -0
- data/site/helpers/site_helpers.rb +20 -0
- data/site/html5bp-docs/README.md +38 -0
- data/site/html5bp-docs/contribute.md +104 -0
- data/site/html5bp-docs/crossdomain.md +21 -0
- data/site/html5bp-docs/css.md +135 -0
- data/site/html5bp-docs/extend.md +507 -0
- data/site/html5bp-docs/faq.md +77 -0
- data/site/html5bp-docs/htaccess.md +323 -0
- data/site/html5bp-docs/html.md +170 -0
- data/site/html5bp-docs/js.md +31 -0
- data/site/html5bp-docs/misc.md +25 -0
- data/site/html5bp-docs/usage.md +109 -0
- data/site/readme.md +47 -0
- data/site/source/.htaccess +540 -0
- data/site/source/404.html +157 -0
- data/site/source/app/assets/javascripts/dependencies.js.coffee +6 -0
- data/site/source/app/assets/javascripts/docs/application.coffee +64 -0
- data/site/source/app/assets/javascripts/docs/collections/docs_documentation.coffee +17 -0
- data/site/source/app/assets/javascripts/docs/collections/github_repositories.coffee +7 -0
- data/site/source/app/assets/javascripts/docs/collections/index.coffee +1 -0
- data/site/source/app/assets/javascripts/docs/collections/luca_documentation.coffee +17 -0
- data/site/source/app/assets/javascripts/docs/collections/public_gists.coffee +4 -0
- data/site/source/app/assets/javascripts/docs/config.coffee +5 -0
- data/site/source/app/assets/javascripts/docs/index.coffee +12 -0
- data/site/source/app/assets/javascripts/docs/lib/router.coffee +3 -0
- data/site/source/app/assets/javascripts/docs/lib/util.coffee +0 -0
- data/site/source/app/assets/javascripts/docs/models/component.coffee +99 -0
- data/site/source/app/assets/javascripts/docs/models/github_repository.coffee +3 -0
- data/site/source/app/assets/javascripts/docs/models/index.coffee +1 -0
- data/site/source/app/assets/javascripts/docs/templates/component_documentation.jst.ejs +55 -0
- data/site/source/app/assets/javascripts/docs/templates/examples_browser/overview.jst.ejs +4 -0
- data/site/source/app/assets/javascripts/docs/templates/examples_browser/selector.jst.ejs +11 -0
- data/site/source/app/assets/javascripts/docs/templates/github_repository.jst.ejs +4 -0
- data/site/source/app/assets/javascripts/docs/templates/layouts/main.jst.ejs +4 -0
- data/site/source/app/assets/javascripts/docs/templates/left_navigation.jst.ejs +5 -0
- data/site/source/app/assets/javascripts/docs/templates/pages/getting_started.jst.ejs +78 -0
- data/site/source/app/assets/javascripts/docs/templates/pages/home.jst.ejs +57 -0
- data/site/source/app/assets/javascripts/docs/views/components/code_editor/index.coffee +0 -0
- data/site/source/app/assets/javascripts/docs/views/components/code_editor.coffee +45 -0
- data/site/source/app/assets/javascripts/docs/views/components/component_documentation.coffee +72 -0
- data/site/source/app/assets/javascripts/docs/views/index.coffee +3 -0
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source/details.coffee +37 -0
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source/list.coffee +31 -0
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source.coffee +46 -0
- data/site/source/app/assets/javascripts/docs/views/pages/component_editor.coffee +10 -0
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/docs.coffee +12 -0
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/source.coffee +13 -0
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser.coffee +102 -0
- data/site/source/app/assets/javascripts/docs/views/pages/home.coffee +10 -0
- data/site/source/app/assets/javascripts/docs/views/views/api_browser/index.coffee +43 -0
- data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/grid_layout_view_example.coffee +14 -0
- data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/table_view_example.coffee +39 -0
- data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/basic_example.coffee +38 -0
- data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/complex_layout.coffee +110 -0
- data/site/source/app/assets/javascripts/docs/views/views/top_navigation.coffee +6 -0
- data/site/source/app/assets/javascripts/docs-docs.js +1 -0
- data/site/source/app/assets/javascripts/luca-docs.js +1 -0
- data/site/source/app/assets/javascripts/luca-framework-documentation.js +1 -0
- data/site/source/app/assets/javascripts/site.js.coffee +4 -0
- data/site/source/app/assets/javascripts/vendor/codemirror.js +4786 -0
- data/site/source/app/assets/javascripts/vendor/coffeescript.js +346 -0
- data/site/source/app/assets/javascripts/vendor/css.js +465 -0
- data/site/source/app/assets/javascripts/vendor/htmlmixed.js +84 -0
- data/site/source/app/assets/javascripts/vendor/javascript.js +422 -0
- data/site/source/app/assets/javascripts/vendor/js-beautify.js +1353 -0
- data/site/source/app/assets/javascripts/vendor/modernizr-2.6.1.min.js +4 -0
- data/site/source/app/assets/javascripts/vendor/vim.js +2511 -0
- data/site/source/app/assets/stylesheets/docs/api-browser.css.scss +5 -0
- data/site/source/app/assets/stylesheets/docs/application.css.scss +35 -0
- data/site/source/app/assets/stylesheets/docs/browse-source.css.scss +5 -0
- data/site/source/app/assets/stylesheets/docs/scrollable-table.css.scss +5 -0
- data/site/source/app/assets/stylesheets/site.css.scss +2 -0
- data/site/source/app/assets/stylesheets/vendor/codemirror.css +240 -0
- data/site/source/app/assets/stylesheets/vendor/prettify-tomorrow-night-bright.css +160 -0
- data/site/source/app/assets/stylesheets/vendor/twilight.css +26 -0
- data/site/source/crossdomain.xml +15 -0
- data/site/source/documentation.html.haml +1 -0
- data/site/source/favicon_base.png +0 -0
- data/site/source/humans.txt +15 -0
- data/site/source/images/background.png +0 -0
- data/site/source/images/middleman.png +0 -0
- data/site/source/index.html.haml +1 -0
- data/site/source/layouts/layout.haml +55 -0
- data/site/source/readme.md +63 -0
- data/site/source/robots.txt +3 -0
- data/spec/javascripts/components/collection_view_spec.coffee +1 -1
- data/spec/javascripts/containers/card_view_spec.coffee +58 -5
- data/spec/javascripts/core/collection_spec.coffee +1 -1
- data/spec/javascripts/core/view_spec.coffee +2 -2
- data/vendor/assets/javascripts/backbone-min.js +37 -33
- data/vendor/assets/javascripts/backbone-query.min.js +1 -1
- data/vendor/assets/javascripts/jquery.js +5 -4
- data/vendor/assets/javascripts/luca-dependencies.min.js +8 -6
- data/vendor/assets/javascripts/luca-development.min.js +1 -1
- data/vendor/assets/javascripts/luca.full.min.js +12 -10
- data/vendor/assets/javascripts/luca.min.js +5 -5
- data/vendor/assets/javascripts/underscore-min.js +1 -5
- data/vendor/assets/javascripts/underscore-string.min.js +1 -1
- data/vendor/assets/stylesheets/luca-components.css +0 -2
- data/vendor/assets/stylesheets/luca-development.css +1 -1
- metadata +215 -39
- data/app/assets/javascripts/luca/components/page_controller.coffee +0 -3
- data/app/assets/javascripts/luca/core/collection_view.coffee +0 -150
- data/site/assets/bootstrap.min.js +0 -7
- data/site/assets/dependencies.js +0 -94
- data/site/assets/glyphicons-halflings-white.png +0 -0
- data/site/assets/glyphicons-halflings.png +0 -0
- data/site/assets/luca-ui-bootstrap.css +0 -1331
- data/site/assets/luca-ui-bootstrap.js +0 -9
- data/site/assets/luca-ui-development-tools.css +0 -234
- data/site/assets/luca-ui-development-tools.js +0 -18561
- data/site/assets/luca-ui-development-tools.min.js +0 -15
- data/site/assets/luca-ui-full.min.js +0 -8
- data/site/assets/luca-ui.min.js +0 -4
- data/site/assets/sandbox.css +0 -62
- data/site/assets/sandbox.js +0 -469
- data/site/docs/application.html +0 -41
- data/site/docs/caching.html +0 -43
- data/site/docs/collection.html +0 -75
- data/site/docs/collection_manager.html +0 -71
- data/site/docs/containers.html +0 -118
- data/site/docs/events.html +0 -153
- data/site/docs/view.html +0 -128
- data/site/img/glyphicons-halflings-white.png +0 -0
- data/site/img/glyphicons-halflings.png +0 -0
- data/site/index.html +0 -20
- data/site/source-map.js +0 -1
|
@@ -128,6 +128,10 @@
|
|
|
128
128
|
# rowFluid: true
|
|
129
129
|
#
|
|
130
130
|
# #### Using a layout template with CSS Selectors
|
|
131
|
+
# If you find yourself needing a container view with a complicated
|
|
132
|
+
# visual layout, you can provide your own DOM template as a `@bodyTemplate`
|
|
133
|
+
# and assign each child view in `@components` to its own specific CSS selector.
|
|
134
|
+
#
|
|
131
135
|
# ...
|
|
132
136
|
# container.contains
|
|
133
137
|
# role: "filter"
|
|
@@ -153,33 +157,94 @@ container.triggers "before:components",
|
|
|
153
157
|
container.replaces "Luca.Container"
|
|
154
158
|
|
|
155
159
|
container.publicConfiguration
|
|
160
|
+
# @components should contain a list of object configurations for child view(s)
|
|
161
|
+
# of this container. The values specified in the configuration object will override the
|
|
162
|
+
# values defined as properties and methods on your view prototypes.
|
|
163
|
+
#
|
|
164
|
+
# There are special properties you can define in your components configuration items
|
|
165
|
+
# that will effect the container:
|
|
166
|
+
#
|
|
167
|
+
# - role: will create a camelized getter for you on the container. e.g. when role is `my_custom_role`,
|
|
168
|
+
# the container will have a method `getMyCustomRole()` that returns that child view.
|
|
169
|
+
#
|
|
170
|
+
# - name: a name for the child view. this allows you to access the component by name using
|
|
171
|
+
# the find() method on the container.
|
|
172
|
+
#
|
|
173
|
+
# - type: a type alias from the component registry. type alias are underscore'd strings
|
|
174
|
+
# matching the component class name. e.g. App.views.MyCustomView type alias is `my_custom_view`
|
|
175
|
+
#
|
|
176
|
+
# - component: a convenience property for setting type, role, and name to be equal.
|
|
156
177
|
components:[]
|
|
157
178
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
179
|
+
# The `@defaults` property is an object of configuration parameters which will be set
|
|
180
|
+
# on each child component. Values explicitly defines in the components config will
|
|
181
|
+
# take precedence over the default.
|
|
182
|
+
defaults: {}
|
|
183
|
+
|
|
184
|
+
# The `@extensions` property is useful when you are subclassing a container view
|
|
185
|
+
# which already defines an array of components, and you want to specifically override
|
|
186
|
+
# properties and settings on the children. The `@extensions` property expects either:
|
|
187
|
+
#
|
|
188
|
+
# An object whose keys match the names of the `@role` property defined on the child components.
|
|
189
|
+
# The value should be an object which will override any values defined on the parent class.
|
|
190
|
+
#
|
|
191
|
+
# or:
|
|
192
|
+
#
|
|
193
|
+
# An array of objects in the same array position / index as the target child view you wish to extend.
|
|
194
|
+
extensions: {}
|
|
165
195
|
|
|
166
196
|
# @componentEvents provides declarative syntax for responding to events on
|
|
167
197
|
# the components in this container. the format of the syntax is very similar
|
|
168
198
|
# to the other event binding helpers:
|
|
169
199
|
#
|
|
170
|
-
#
|
|
171
|
-
#
|
|
172
|
-
# where component_accessor is either the name of the role, or a method on the container
|
|
173
|
-
# which will find the component in question.
|
|
174
|
-
#
|
|
175
|
-
# myContainer = new Luca.Container
|
|
176
|
-
# componentEvents:
|
|
177
|
-
# "name component:trigger" : "handler"
|
|
178
|
-
# "role component:trigger" : "handler"
|
|
179
|
-
# "getter component:trigger" : "handler"
|
|
200
|
+
# `component_accessor component:trigger`
|
|
180
201
|
#
|
|
202
|
+
# where component_accessor is either the name of the component, or a the role
|
|
203
|
+
# property on the component, component:trigger is the event that component fires.
|
|
204
|
+
# handler is a method on the container which will respond to the child component event.
|
|
205
|
+
# <pre>
|
|
206
|
+
# myContainer = new Luca.Container
|
|
207
|
+
# componentEvents:
|
|
208
|
+
# "name component:trigger" : "handler"
|
|
209
|
+
# "role component:trigger" : "handler"
|
|
210
|
+
# "getter component:trigger" : "handler"
|
|
211
|
+
# components:[
|
|
212
|
+
# name: "name"
|
|
213
|
+
# ]
|
|
214
|
+
# </pre>
|
|
181
215
|
componentEvents: {}
|
|
182
216
|
|
|
217
|
+
container.privateConfiguration
|
|
218
|
+
className: 'luca-ui-container'
|
|
219
|
+
|
|
220
|
+
# This is a convenience attribute for identifying
|
|
221
|
+
# views which are luca containers
|
|
222
|
+
isContainer: true
|
|
223
|
+
|
|
224
|
+
# if set to true, we will generate DOM elements
|
|
225
|
+
# to wrap each of our components in. This should
|
|
226
|
+
# generally be avoided IMO as it pollutes the DOM,
|
|
227
|
+
# but is currently necessary for some container implementations
|
|
228
|
+
generateComponentElements: false
|
|
229
|
+
|
|
230
|
+
# if set to true, the DOM elements which wrap
|
|
231
|
+
# our components will be emptied prior to rendering
|
|
232
|
+
# the component inside this container.
|
|
233
|
+
emptyContainerElements: false
|
|
234
|
+
|
|
235
|
+
# if @generateComponentElements is true, which tag should this
|
|
236
|
+
# container wrap our components in?
|
|
237
|
+
componentTag: 'div'
|
|
238
|
+
|
|
239
|
+
# if @generateComponentElements is true, which class should we
|
|
240
|
+
# apply to the container elements which wrap our components?
|
|
241
|
+
componentClass: 'luca-ui-panel'
|
|
242
|
+
|
|
243
|
+
rendered: false
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
container.privateMethods
|
|
183
248
|
initialize: (@options={})->
|
|
184
249
|
_.extend @, @options
|
|
185
250
|
|
|
@@ -199,6 +264,7 @@ container.privateConfiguration
|
|
|
199
264
|
|
|
200
265
|
Luca.View::initialize.apply @, arguments
|
|
201
266
|
|
|
267
|
+
# Removing a container will call remove on all of the nested components as well.
|
|
202
268
|
remove: ()->
|
|
203
269
|
Luca.View::remove.apply(@, arguments)
|
|
204
270
|
@eachComponent (component)->
|
|
@@ -344,8 +410,7 @@ container.privateConfiguration
|
|
|
344
410
|
|
|
345
411
|
map
|
|
346
412
|
|
|
347
|
-
# Trigger the Rendering Pipeline process on all of the nested
|
|
348
|
-
# components
|
|
413
|
+
# Trigger the Rendering Pipeline process on all of the nested components
|
|
349
414
|
renderComponents: (@debugMode="")->
|
|
350
415
|
@debug "container render components"
|
|
351
416
|
|
|
@@ -383,8 +448,6 @@ container.privateConfiguration
|
|
|
383
448
|
|
|
384
449
|
throw e unless Luca.silenceRenderErrors? is true
|
|
385
450
|
|
|
386
|
-
#### Container Activation
|
|
387
|
-
#
|
|
388
451
|
# When a container is first activated is a good time to perform
|
|
389
452
|
# operations which are not needed unless that component becomes
|
|
390
453
|
# visible. This first activation event should be relayed to all
|
|
@@ -401,27 +464,6 @@ container.privateConfiguration
|
|
|
401
464
|
component?.trigger?.call component, "first:activation", component, activator
|
|
402
465
|
component.previously_activated = true
|
|
403
466
|
|
|
404
|
-
#### Underscore Methods For Working with Components
|
|
405
|
-
_: ()-> _( @components )
|
|
406
|
-
|
|
407
|
-
pluck: (attribute)->
|
|
408
|
-
@_().pluck(attribute)
|
|
409
|
-
|
|
410
|
-
invoke: (method)->
|
|
411
|
-
@_().invoke(method)
|
|
412
|
-
|
|
413
|
-
select: (fn)->
|
|
414
|
-
@_().select(fn)
|
|
415
|
-
|
|
416
|
-
detect: (fn)->
|
|
417
|
-
@_().detect(attribute)
|
|
418
|
-
|
|
419
|
-
reject: (fn)->
|
|
420
|
-
@_().reject(fn)
|
|
421
|
-
|
|
422
|
-
map: (fn)->
|
|
423
|
-
@_().map(fn)
|
|
424
|
-
|
|
425
467
|
registerComponentEvents: (eventList, direction="on")->
|
|
426
468
|
container = @
|
|
427
469
|
|
|
@@ -443,13 +485,41 @@ container.privateConfiguration
|
|
|
443
485
|
|
|
444
486
|
component[direction](eventId, @[handler], container)
|
|
445
487
|
|
|
488
|
+
container.publicMethods
|
|
489
|
+
# Returns an underscore.js object that wraps the components array
|
|
490
|
+
_: ()-> _( @components )
|
|
446
491
|
|
|
492
|
+
# Return the value of attribute of each component
|
|
493
|
+
pluck: (attribute)->
|
|
494
|
+
@_().pluck(attribute)
|
|
495
|
+
|
|
496
|
+
# Invoke the passed method name on each component
|
|
497
|
+
invoke: (method)->
|
|
498
|
+
@_().invoke(method)
|
|
499
|
+
|
|
500
|
+
# Select any component for which the passed iterator returns true
|
|
501
|
+
select: (iterator)->
|
|
502
|
+
@_().select(iterator)
|
|
503
|
+
|
|
504
|
+
# Find the first matching component for which the passed iterator returns true
|
|
505
|
+
detect: (iterator)->
|
|
506
|
+
@_().detect(iterator)
|
|
507
|
+
|
|
508
|
+
# Return a list of components without the components for which the passed iterator returns true
|
|
509
|
+
reject: (iterator)->
|
|
510
|
+
@_().reject(iterator)
|
|
511
|
+
|
|
512
|
+
# Run the passed iterator over each component and return the result in an array
|
|
513
|
+
map: (fn)->
|
|
514
|
+
@_().map(fn)
|
|
515
|
+
|
|
516
|
+
# Returns a list of nested components which are also containers
|
|
447
517
|
subContainers: ()->
|
|
448
518
|
@select (component)->
|
|
449
519
|
component.isContainer is true
|
|
450
520
|
|
|
451
521
|
roles: ()->
|
|
452
|
-
_( @allChildren() ).pluck('role')
|
|
522
|
+
_( @allChildren() ).chain().pluck('role').compact().value()
|
|
453
523
|
|
|
454
524
|
allChildren: ()->
|
|
455
525
|
children = @components
|
|
@@ -459,6 +529,11 @@ container.privateConfiguration
|
|
|
459
529
|
|
|
460
530
|
_([children,grandchildren]).chain().compact().flatten().value()
|
|
461
531
|
|
|
532
|
+
# Find a direct component on this card by its name.
|
|
533
|
+
find: (name)->
|
|
534
|
+
_( @components ).detect (c)->
|
|
535
|
+
c.name is name
|
|
536
|
+
|
|
462
537
|
findComponentForEventBinding: (nameRoleOrGetter, deep=true)->
|
|
463
538
|
@findComponentByName(nameRoleOrGetter, deep) || @findComponentByGetter( nameRoleOrGetter, deep ) || @findComponentByRole( nameRoleOrGetter, deep )
|
|
464
539
|
|
|
@@ -506,10 +581,17 @@ container.privateConfiguration
|
|
|
506
581
|
fn.call component, component, index
|
|
507
582
|
component?.eachComponent?.apply component, [fn,deep] if deep
|
|
508
583
|
|
|
509
|
-
|
|
584
|
+
indexOfComponentName: (name)->
|
|
510
585
|
names = _( @components ).pluck('name')
|
|
511
586
|
_( names ).indexOf(name)
|
|
512
587
|
|
|
588
|
+
indexOf: (nameOrComponent)->
|
|
589
|
+
if _.isString(nameOrComponent)
|
|
590
|
+
return @indexOfComponentName(nameOrComponent)
|
|
591
|
+
|
|
592
|
+
if _.isObject(nameOrComponent)
|
|
593
|
+
_( @components ).indexOf( nameOrComponent )
|
|
594
|
+
|
|
513
595
|
activeComponent: ()->
|
|
514
596
|
return @ unless @activeItem
|
|
515
597
|
return @components[ @activeItem ]
|
|
@@ -617,8 +699,6 @@ doComponents = ()->
|
|
|
617
699
|
validateContainerConfiguration = ()->
|
|
618
700
|
true
|
|
619
701
|
|
|
620
|
-
# Private Helpers
|
|
621
|
-
#
|
|
622
702
|
# indexComponent( component ).at( index ).in( componentsInternalIndexMap )
|
|
623
703
|
indexComponent = (component)->
|
|
624
704
|
at: (index)->
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
view = Luca.register "Luca.containers.ModalView"
|
|
2
|
+
view.extends "Luca.Container"
|
|
2
3
|
|
|
4
|
+
view.publicConfiguration
|
|
3
5
|
closeOnEscape: true
|
|
4
|
-
|
|
5
6
|
showOnInitialize: false
|
|
6
|
-
|
|
7
7
|
backdrop: false
|
|
8
|
+
className: "modal"
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
view.publicMethods
|
|
11
11
|
container: ()->
|
|
12
12
|
$('body')
|
|
13
13
|
|
|
@@ -27,10 +27,10 @@ _.def("Luca.ModalView").extends("Luca.Container").with
|
|
|
27
27
|
$('body').append( @$el )
|
|
28
28
|
|
|
29
29
|
@$el.modal
|
|
30
|
-
backdrop: @backdrop is true
|
|
31
|
-
keyboard: @closeOnEscape is true
|
|
32
|
-
show: @showOnInitialize is true
|
|
30
|
+
backdrop: !!(@backdrop is true)
|
|
31
|
+
keyboard: !!(@closeOnEscape is true)
|
|
32
|
+
show: !!(@showOnInitialize is true)
|
|
33
33
|
|
|
34
34
|
@
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
view.register()
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# The PageController container is a special type of container whose components or pages
|
|
2
|
+
# will always monopolize the entire element's display and where only one page or component
|
|
3
|
+
# will be visible at a time. The PageController is typically going to be at the very root
|
|
4
|
+
# of every application, and will be directly integrated with the application's router.
|
|
5
|
+
# A typical application hierarchy will be an abstract `Viewport` with a single top level
|
|
6
|
+
# `PageController` named 'main_controller'.
|
|
7
|
+
#
|
|
8
|
+
# - Viewport / Application
|
|
9
|
+
# - Router. ( maps urls to named pages on the controller )
|
|
10
|
+
# - Main Page Controller
|
|
11
|
+
# - Pages
|
|
12
|
+
# - Named views / containers
|
|
13
|
+
view = Luca.register "Luca.containers.PageController"
|
|
14
|
+
view.extends "Luca.Container"
|
|
15
|
+
|
|
16
|
+
view.privateMethods
|
|
17
|
+
initialize: (@options={})->
|
|
18
|
+
@components ||= @pages || @options.pages
|
|
19
|
+
for component in @components
|
|
20
|
+
component.components ||= component.pages
|
|
21
|
+
|
|
22
|
+
Luca.Container::initialize.apply(@, arguments)
|
|
23
|
+
|
|
24
|
+
view.register()
|
|
25
|
+
|
|
@@ -39,10 +39,7 @@ viewport.defines
|
|
|
39
39
|
@$el.removeClass('fullscreen-enabled')
|
|
40
40
|
|
|
41
41
|
beforeRender: ()->
|
|
42
|
-
Luca.
|
|
43
|
-
|
|
44
|
-
#if Luca.config.enableBoostrap and @topNav and @fullscreen
|
|
45
|
-
# $('body').css('padding','40px')
|
|
42
|
+
Luca.Container::beforeRender?.apply(@, arguments)
|
|
46
43
|
|
|
47
44
|
@renderTopNavigation() if @topNav?
|
|
48
45
|
@renderBottomNavigation() if @bottomNav?
|
|
@@ -54,7 +51,7 @@ viewport.defines
|
|
|
54
51
|
@$el.width()
|
|
55
52
|
|
|
56
53
|
afterRender: ()->
|
|
57
|
-
Luca.
|
|
54
|
+
Luca.Container::afterRender?.apply(@, arguments)
|
|
58
55
|
|
|
59
56
|
if Luca.config.enableBoostrap is true and @containerClassName
|
|
60
57
|
@$el.children().wrap('<div class="#{ containerClassName }" />')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
collection = Luca.
|
|
1
|
+
collection = Luca.register 'Luca.Collection'
|
|
2
2
|
collection.extends 'Backbone.QueryCollection'
|
|
3
3
|
collection.includes 'Luca.Events'
|
|
4
4
|
|
|
@@ -6,13 +6,13 @@ collection.triggers "after:initialize",
|
|
|
6
6
|
"before:fetch",
|
|
7
7
|
"after:response"
|
|
8
8
|
|
|
9
|
-
collection.
|
|
9
|
+
collection.publicConfiguration
|
|
10
10
|
model: Luca.Model
|
|
11
11
|
# cachedMethods refers to a list of methods on the collection
|
|
12
12
|
# whose value gets cached once it is ran. the collection then
|
|
13
13
|
# binds to change, add, remove, and reset events and then expires
|
|
14
14
|
# the cached value once these events are fired.
|
|
15
|
-
|
|
15
|
+
#
|
|
16
16
|
# cachedMethods expects an array of strings representing the method name
|
|
17
17
|
# or objects containing @method and @resetEvents properties. by default
|
|
18
18
|
# @resetEvents are 'add','remove',reset' and 'change'.
|
|
@@ -22,6 +22,17 @@ collection.defines
|
|
|
22
22
|
# and return the filtered results that way, then set this to true
|
|
23
23
|
remoteFilter: false
|
|
24
24
|
|
|
25
|
+
# setting a cache key to a string, or to a function which returns
|
|
26
|
+
# a string, will determine where the collections' models are pulled
|
|
27
|
+
# from if they are available on page load. also known as "bootstrapping"
|
|
28
|
+
# your collections with data. The cache key will look in whatever object
|
|
29
|
+
# is set in Luca.config.modelBootstrap for its models.
|
|
30
|
+
cache_key: undefined
|
|
31
|
+
|
|
32
|
+
# Which CollectionManager should we register with? Expects either a string
|
|
33
|
+
# which will get resolved into a global variable, or a
|
|
34
|
+
manager: undefined
|
|
35
|
+
|
|
25
36
|
initialize: (models=[], @options)->
|
|
26
37
|
_.extend @, @options
|
|
27
38
|
@_reset()
|
|
@@ -44,7 +55,7 @@ collection.defines
|
|
|
44
55
|
@name ||= @registerAs
|
|
45
56
|
@manager ||= @registerWith
|
|
46
57
|
|
|
47
|
-
@manager =
|
|
58
|
+
@manager = Luca.util.read(@manager) if @manager?
|
|
48
59
|
|
|
49
60
|
# if they specify a
|
|
50
61
|
if @name and not @manager
|
|
@@ -346,6 +357,9 @@ collection.defines
|
|
|
346
357
|
else
|
|
347
358
|
@models
|
|
348
359
|
|
|
360
|
+
collection.register()
|
|
361
|
+
|
|
362
|
+
|
|
349
363
|
# Global Collection Observer
|
|
350
364
|
_.extend Luca.Collection.prototype,
|
|
351
365
|
trigger: ()->
|
|
@@ -136,11 +136,11 @@ view.publicConfiguration
|
|
|
136
136
|
#
|
|
137
137
|
autoBindEventHandlers: false
|
|
138
138
|
|
|
139
|
-
# Supplying configuration to `@
|
|
139
|
+
# Supplying configuration to `@_inheritEvents` will ensure that this configuration
|
|
140
140
|
# is present on views which extend from this view. In normal Backbone behavior
|
|
141
141
|
# the `@events` property can be overridden by views which extend, and this isn't
|
|
142
142
|
# always what you want from your component.
|
|
143
|
-
|
|
143
|
+
_inheritEvents: undefined
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
|
|
@@ -174,14 +174,14 @@ view.publicMethods
|
|
|
174
174
|
|
|
175
175
|
Luca.concern.setup.call(@)
|
|
176
176
|
|
|
177
|
-
@delegateEvents()
|
|
177
|
+
@delegateEvents() unless _.isEmpty(@events)
|
|
178
178
|
|
|
179
179
|
@trigger "after:initialize", @
|
|
180
180
|
|
|
181
181
|
_.bindAll(@, @bindMethods...) if @bindMethods?.legth > 0
|
|
182
182
|
|
|
183
|
-
unless _.isEmpty(@
|
|
184
|
-
for eventId, handler of @
|
|
183
|
+
unless _.isEmpty(@_inheritEvents)
|
|
184
|
+
for eventId, handler of @_inheritEvents
|
|
185
185
|
@registerEvent(eventId, handler)
|
|
186
186
|
|
|
187
187
|
|
|
@@ -198,7 +198,17 @@ view.publicMethods
|
|
|
198
198
|
|
|
199
199
|
Backbone.View::trigger.apply @, arguments
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
# Backbone.View.prototype.make is removed in 0.9.10.
|
|
202
|
+
# As we happen to rely on this little utility heavily,
|
|
203
|
+
# we add it to Luca.View
|
|
204
|
+
make: (tagName, attributes, content)->
|
|
205
|
+
el = document.createElement(tagName);
|
|
206
|
+
if (attributes)
|
|
207
|
+
Backbone.$(el).attr(attributes)
|
|
208
|
+
if (content != null)
|
|
209
|
+
Backbone.$(el).html(content)
|
|
210
|
+
|
|
211
|
+
el
|
|
202
212
|
|
|
203
213
|
registerEvent: (selector, handler)->
|
|
204
214
|
@events ||= {}
|
|
@@ -206,7 +216,8 @@ view.publicMethods
|
|
|
206
216
|
if _.isObject(selector)
|
|
207
217
|
@events = _.extend(@events, selector)
|
|
208
218
|
else
|
|
209
|
-
@
|
|
219
|
+
if _.isFunction(handler) || (_.isString(handler) && @[handler]?)
|
|
220
|
+
@events[selector] = handler
|
|
210
221
|
|
|
211
222
|
@delegateEvents()
|
|
212
223
|
|
|
@@ -240,6 +251,14 @@ view.privateMethods
|
|
|
240
251
|
# - first:activation : firstActivation()
|
|
241
252
|
setupHooks: Luca.util.setupHooks
|
|
242
253
|
|
|
254
|
+
# In order to support some Luca apps which rely
|
|
255
|
+
# on Backbone.View.make.
|
|
256
|
+
view.afterDefinition ()->
|
|
257
|
+
if not Backbone.View::make?
|
|
258
|
+
Backbone.View::make = ()->
|
|
259
|
+
console.log "Backbone.View::make has been removed from backbone. You should use Luca.View::make instead."
|
|
260
|
+
Luca.View::make
|
|
261
|
+
|
|
243
262
|
view.register()
|
|
244
263
|
|
|
245
264
|
Luca.View._originalExtend = Backbone.View.extend
|
|
@@ -1,15 +1,59 @@
|
|
|
1
|
+
# The `Luca.CodeSyncManager` works along with the Guard adapter that ships with
|
|
2
|
+
# the ruby gem. This is still an experimental option at this point, but I use
|
|
3
|
+
# it regularly on all of my Luca projects and it allows me to develop my applications
|
|
4
|
+
# directly from my editor and rarely have the need to refresth the browser to work with
|
|
5
|
+
# javascript and css changes.
|
|
6
|
+
#
|
|
7
|
+
# #### Similar to LiveReload
|
|
8
|
+
# It is similar to projects like LiveReload, except that it knows a lot about the luca
|
|
9
|
+
# framework and application conventions and uses this knowledge to optimize live reloading
|
|
10
|
+
# behavior, avoiding the need to do full browser reloads. This typically doesn't work well
|
|
11
|
+
# with state heavy applications, since the browser reloading doesn't always construct application
|
|
12
|
+
# state exactly as you need it when you're making your css changes etc.
|
|
13
|
+
#
|
|
14
|
+
# #### 1) Add an entry to your Guardfile:
|
|
15
|
+
# guard 'luca' do
|
|
16
|
+
# watch(%r{^app/assets/stylesheets/(.+)}) do |match|
|
|
17
|
+
# path = match.last
|
|
18
|
+
# end
|
|
19
|
+
|
|
20
|
+
# watch(%r{^app/assets/javascripts/(.+)}) do |match|
|
|
21
|
+
# path = match.last
|
|
22
|
+
# end
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# #### 2) Add the `CodeSyncManager` to your development mode application.
|
|
26
|
+
# **Note:** This expect
|
|
27
|
+
# you to have a `Luca.SocketManager` capable backend such as faye or socket.io running. It
|
|
28
|
+
# handles the same configuration options as the `Luca.SocketManager` as well.
|
|
29
|
+
#
|
|
30
|
+
# app = Luca()
|
|
31
|
+
# app.codeSyncManager = new Luca.CodeSyncManager
|
|
32
|
+
# host: "//localhost:9292/faye"
|
|
33
|
+
# channel: "/changes"
|
|
34
|
+
# app.codeSyncManager.trigger("ready")
|
|
35
|
+
#
|
|
36
|
+
# #### 3) Run guard.
|
|
37
|
+
# Edit your files, watch your changes appear.
|
|
38
|
+
#
|
|
39
|
+
# ### Using the Syncpad
|
|
40
|
+
#
|
|
41
|
+
# The syncpad is a special naming convention for development scratch paper in your editor. A file
|
|
42
|
+
# named syncpad.coffee, syncpad.css.scss, syncpad.jst.ejs.haml, etc will be evaluated live when you change
|
|
43
|
+
# them in your editor. I personally use this to experiment with code / css and get immediate results without
|
|
44
|
+
# needing to refresh the browser.
|
|
1
45
|
codeManager = Luca.register "Luca.CodeSyncManager"
|
|
2
46
|
codeManager.extends "Luca.SocketManager"
|
|
3
47
|
|
|
4
48
|
codeManager.publicConfiguration
|
|
5
|
-
host: Luca.config.codeSyncHost || "
|
|
49
|
+
host: Luca.config.codeSyncHost || "//localhost:9292/faye"
|
|
6
50
|
namespace: "luca"
|
|
7
|
-
channel: Luca.config.codeSyncChannel || "/
|
|
51
|
+
channel: Luca.config.codeSyncChannel || "/luca-code-sync"
|
|
8
52
|
|
|
9
53
|
codeManager.classMethods
|
|
10
54
|
setup: (options={})->
|
|
11
55
|
@codeSyncManager = new Luca.CodeSyncManager(options)
|
|
12
|
-
@codeSyncManager.trigger
|
|
56
|
+
@codeSyncManager.trigger "ready"
|
|
13
57
|
|
|
14
58
|
codeManager.privateMethods
|
|
15
59
|
initialize: (@attributes={})->
|
|
@@ -19,6 +63,9 @@ codeManager.privateMethods
|
|
|
19
63
|
Luca.SocketManager::initialize.call(@, @attributes)
|
|
20
64
|
@bindToChannel()
|
|
21
65
|
|
|
66
|
+
start: ()->
|
|
67
|
+
@trigger "ready"
|
|
68
|
+
|
|
22
69
|
bindToChannel: ()->
|
|
23
70
|
if @client?
|
|
24
71
|
@client.subscribe @channel, ()=>
|
|
@@ -123,4 +170,4 @@ codeManager.privateMethods
|
|
|
123
170
|
$('head').append( link )
|
|
124
171
|
|
|
125
172
|
codeManager.defines
|
|
126
|
-
make:
|
|
173
|
+
make: Luca.View::make
|
|
@@ -186,7 +186,7 @@ Luca.util.inspectComponent = (component)->
|
|
|
186
186
|
|
|
187
187
|
Luca.util.launchers.developmentConsole = (name="luca-development-console")->
|
|
188
188
|
@_lucaDevConsole = Luca name, ()=>
|
|
189
|
-
@$el.append
|
|
189
|
+
@$el.append Luca.View::make("div", id: "#{ name }-wrapper", class: "modal fade large")
|
|
190
190
|
|
|
191
191
|
dconsole = new Luca.tools.DevelopmentConsole
|
|
192
192
|
name: name
|
|
@@ -112,7 +112,8 @@ Luca.util.loadScript = (url, callback) ->
|
|
|
112
112
|
script.src = url
|
|
113
113
|
document.body.appendChild(script)
|
|
114
114
|
|
|
115
|
-
Luca.util.make =
|
|
115
|
+
Luca.util.make = (tagName="div", attributes={}, contents="")->
|
|
116
|
+
Luca.View::make.apply(@, arguments)
|
|
116
117
|
|
|
117
118
|
Luca.util.list = (list,options={},ordered)->
|
|
118
119
|
container = if ordered then "ol" else "ul"
|
data/bin/luca
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
|
4
|
+
|
|
5
|
+
require 'rubygems'
|
|
6
|
+
require 'faye'
|
|
7
|
+
require 'sass'
|
|
8
|
+
require 'coffee-script'
|
|
9
|
+
require 'redcarpet'
|
|
10
|
+
require 'listen'
|
|
11
|
+
require 'luca'
|
|
12
|
+
require 'luca/cli'
|
|
13
|
+
|
|
14
|
+
Luca::Cli::Base.start
|