marionette_rails_generators 0.1.2
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.
- checksums.yaml +7 -0
- data/.gitignore +30 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +71 -0
- data/Rakefile +2 -0
- data/lib/generators/marionette/attribute.rb +54 -0
- data/lib/generators/marionette/controller/controller_generator.rb +57 -0
- data/lib/generators/marionette/controller/templates/app/controllers/controller.js.coffee +12 -0
- data/lib/generators/marionette/controller/templates/app/controllers/controller_with_views.js.coffee +16 -0
- data/lib/generators/marionette/install/install_generator.rb +91 -0
- data/lib/generators/marionette/install/templates/after_backbone.js.coffee +8 -0
- data/lib/generators/marionette/install/templates/app.js.coffee +21 -0
- data/lib/generators/marionette/install/templates/app/templates/index.jst.eco +118 -0
- data/lib/generators/marionette/install/templates/base/controllers/_base_controller.js.coffee +42 -0
- data/lib/generators/marionette/install/templates/base/models/_base_collection.js.coffee +3 -0
- data/lib/generators/marionette/install/templates/base/models/_base_model.js.coffee +40 -0
- data/lib/generators/marionette/install/templates/base/views/_view.js.coffee +56 -0
- data/lib/generators/marionette/install/templates/base/views/collectionview.js.coffee +4 -0
- data/lib/generators/marionette/install/templates/base/views/compositeview.js.coffee +4 -0
- data/lib/generators/marionette/install/templates/base/views/itemview.js.coffee +3 -0
- data/lib/generators/marionette/install/templates/base/views/layout.js.coffee +3 -0
- data/lib/generators/marionette/install/templates/before_backbone.js.coffee +2 -0
- data/lib/generators/marionette/install/templates/config/config.js.coffee +72 -0
- data/lib/generators/marionette/install/templates/config/controllers/loading/loading_controller.js.coffee +55 -0
- data/lib/generators/marionette/install/templates/config/controllers/loading/loading_view.js.coffee +30 -0
- data/lib/generators/marionette/install/templates/config/models/fetch.js.coffee +11 -0
- data/lib/generators/marionette/install/templates/config/models/sync.js.coffee +19 -0
- data/lib/generators/marionette/install/templates/index.html.erb +9 -0
- data/lib/generators/marionette/install/templates/routes.js.coffee +13 -0
- data/lib/generators/marionette/model/model_generator.rb +42 -0
- data/lib/generators/marionette/model/templates/app/models/entity.js.coffee +14 -0
- data/lib/generators/marionette/resource_helpers.rb +104 -0
- data/lib/generators/marionette/scaffold/scaffold_generator.rb +194 -0
- data/lib/generators/marionette/scaffold/templates/templates/_empty.jst.eco +1 -0
- data/lib/generators/marionette/scaffold/templates/templates/_form.jst.eco +6 -0
- data/lib/generators/marionette/scaffold/templates/templates/_post.jst.eco +6 -0
- data/lib/generators/marionette/scaffold/templates/templates/edit.jst.eco +6 -0
- data/lib/generators/marionette/scaffold/templates/templates/index.jst.eco +19 -0
- data/lib/generators/marionette/scaffold/templates/templates/new.jst.eco +6 -0
- data/lib/generators/marionette/scaffold/templates/templates/show.jst.eco +10 -0
- data/lib/generators/marionette/view/templates/app/templates/collection_view.jst.eco +1 -0
- data/lib/generators/marionette/view/templates/app/templates/composite_view.jst.eco +1 -0
- data/lib/generators/marionette/view/templates/app/templates/item_view.jst.eco +10 -0
- data/lib/generators/marionette/view/templates/app/templates/layouts/application.jst.eco +2 -0
- data/lib/generators/marionette/view/templates/app/views/collection_view.js.coffee +4 -0
- data/lib/generators/marionette/view/templates/app/views/composite_view.js.coffee +4 -0
- data/lib/generators/marionette/view/templates/app/views/item_view.js.coffee +7 -0
- data/lib/generators/marionette/view/view_generator.rb +112 -0
- data/lib/marionette_rails_generators.rb +8 -0
- data/lib/marionette_rails_generators/version.rb +3 -0
- data/marionette_rails_generators.gemspec +33 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +32 -0
- data/spec/dummy/app/assets/javascripts/backbone/after_backbone.js.coffee +8 -0
- data/spec/dummy/app/assets/javascripts/backbone/app.js.coffee +21 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/controllers/all/root_controller.js.coffee +14 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/models/admin/books.js.coffee +11 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/models/all/posts.js.coffee +13 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/models/test_subsubmodule/test_submodule/test_module/stars.js.coffee +11 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/admin/test_collection_view2.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_collection_view1.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_composite_view1.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_item_view1.jst.eco +54 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_item_view2.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/application.jst.eco +2 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout1.jst.eco +2 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout2.jst.eco +2 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout3.jst.eco +2 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/root/index.jst.eco +118 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_module/test_composite_view2.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_module/test_item_view3.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_collection_view3.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_composite_view3.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_item_view4.jst.eco +1 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/admin/test_collection_view2.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_collection_view1.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_composite_view1.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_item_view1.js.coffee +7 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_item_view2.js.coffee +7 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/layouts/layouts.js.coffee +21 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/root/index.js.coffee +7 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/test_module/test_composite_view2.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/test_module/test_item_view3.js.coffee +7 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_collection_view3.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_composite_view3.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_item_view4.js.coffee +7 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/controllers/_base_controller.js.coffee +42 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/models/_base_collection.js.coffee +3 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/models/_base_model.js.coffee +40 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/views/_view.js.coffee +56 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/views/collectionview.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/views/compositeview.js.coffee +4 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/views/itemview.js.coffee +3 -0
- data/spec/dummy/app/assets/javascripts/backbone/base/views/layout.js.coffee +3 -0
- data/spec/dummy/app/assets/javascripts/backbone/before_backbone.js.coffee +2 -0
- data/spec/dummy/app/assets/javascripts/backbone/config/config.js.coffee +72 -0
- data/spec/dummy/app/assets/javascripts/backbone/config/controllers/loading/loading_controller.js.coffee +55 -0
- data/spec/dummy/app/assets/javascripts/backbone/config/controllers/loading/loading_view.js.coffee +30 -0
- data/spec/dummy/app/assets/javascripts/backbone/config/models/fetch.js.coffee +11 -0
- data/spec/dummy/app/assets/javascripts/backbone/config/models/sync.js.coffee +19 -0
- data/spec/dummy/app/assets/javascripts/backbone/routes.js.coffee +14 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/application/index.html.erb +9 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +30 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/spec/javascripts/helpers/SpecHelper.coffee +6 -0
- data/spec/dummy/spec/javascripts/specs/backbone_install_spec.coffee +78 -0
- data/spec/dummy/spec/javascripts/specs/entity_generator_spec.coffee +13 -0
- data/spec/dummy/spec/javascripts/specs/view_generator_spec.coffee +44 -0
- data/spec/dummy/spec/javascripts/support/jasmine.yml +124 -0
- data/spec/dummy/spec/javascripts/support/jasmine_helper.rb +49 -0
- data/vendor/assets/javascripts/backbone-syphon.js +469 -0
- data/vendor/assets/javascripts/jquery.spin.js +435 -0
- metadata +445 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@Backbone.app.module "Views.Layouts", (Layouts, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Layouts.ApplicationLayout extends App.Views.Layout
|
|
4
|
+
template: 'layouts/application'
|
|
5
|
+
regions:
|
|
6
|
+
bodyRegion: "#body"
|
|
7
|
+
|
|
8
|
+
class Layouts.TestLayout1Layout extends App.Views.Layout
|
|
9
|
+
template: 'layouts/test_layout1'
|
|
10
|
+
regions:
|
|
11
|
+
bodyRegion: "#body"
|
|
12
|
+
|
|
13
|
+
class Layouts.TestLayout2Layout extends App.Views.Layout
|
|
14
|
+
template: 'layouts/test_layout2'
|
|
15
|
+
regions:
|
|
16
|
+
bodyRegion: "#body"
|
|
17
|
+
|
|
18
|
+
class Layouts.TestLayout3Layout extends App.Views.Layout
|
|
19
|
+
template: 'layouts/test_layout3'
|
|
20
|
+
regions:
|
|
21
|
+
bodyRegion: "#body"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
@Backbone.app.module "Views.TestSubsubmodule.TestSubmodule.TestModule", (TestModule, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class TestModule.TestCollectionView3 extends App.Views.CollectionView
|
|
4
|
+
template: 'test_subsubmodule/test_submodule/test_module/test_collection_view3'
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@Backbone.app.module "Controllers", (Controllers, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Controllers.Application extends Marionette.Controller
|
|
4
|
+
|
|
5
|
+
constructor: (options = {}) ->
|
|
6
|
+
@region = options.region or App.request "default:region"
|
|
7
|
+
super options
|
|
8
|
+
@_instance_id = _.uniqueId("controller")
|
|
9
|
+
App.request "register:instance", @, @_instance_id
|
|
10
|
+
|
|
11
|
+
close: ->
|
|
12
|
+
console.log 'closing', @
|
|
13
|
+
App.request "unregister:instance", @, @_instance_id
|
|
14
|
+
super
|
|
15
|
+
|
|
16
|
+
show: (view, options = {}) ->
|
|
17
|
+
_.defaults options,
|
|
18
|
+
loading: false
|
|
19
|
+
region: @region
|
|
20
|
+
preventDestroy: false
|
|
21
|
+
|
|
22
|
+
@setMainView view
|
|
23
|
+
callback = onShowAllView
|
|
24
|
+
@_manageView view, options, callback
|
|
25
|
+
|
|
26
|
+
setMainView: (view) ->
|
|
27
|
+
|
|
28
|
+
# the first view we show is always going to become the mainView of our
|
|
29
|
+
# controller (whether its a layout or another view type). So if this
|
|
30
|
+
# *is* a layout, when we show other tegions inside of that layout, we
|
|
31
|
+
# check for the existance of a naminView first, so our controller is only
|
|
32
|
+
# closed down when the original mainView is closed.
|
|
33
|
+
|
|
34
|
+
return if @_mainView
|
|
35
|
+
@_mainView = view
|
|
36
|
+
@listenTo view, "close", @close
|
|
37
|
+
|
|
38
|
+
_manageView: (view, options, callback) ->
|
|
39
|
+
if options.loading
|
|
40
|
+
App.request "show:loading", view, options, callback
|
|
41
|
+
else
|
|
42
|
+
options.region.show view, options
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@Backbone.app.module "Entities", (Entities, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Entities.Model extends Backbone.Model
|
|
4
|
+
|
|
5
|
+
destroy: (options = {}) ->
|
|
6
|
+
_.defaults options,
|
|
7
|
+
wait: true
|
|
8
|
+
|
|
9
|
+
@set _destroy: true
|
|
10
|
+
super options
|
|
11
|
+
|
|
12
|
+
isDestroyed: ->
|
|
13
|
+
@get "_destroy"
|
|
14
|
+
|
|
15
|
+
save: (data, options = {}) ->
|
|
16
|
+
isNew = @isNew()
|
|
17
|
+
|
|
18
|
+
_.defaults options,
|
|
19
|
+
wait: true
|
|
20
|
+
success: _.bind(@saveSuccess, @, isNew, options.collection)
|
|
21
|
+
error: _.bind(@saveError, @)
|
|
22
|
+
|
|
23
|
+
@unset "_errors"
|
|
24
|
+
super data, options
|
|
25
|
+
|
|
26
|
+
saveSuccess: (isNew, collection) =>
|
|
27
|
+
if isNew
|
|
28
|
+
collection?.add @
|
|
29
|
+
collection?.trigger "model:created", @
|
|
30
|
+
@trigger "created", @
|
|
31
|
+
else
|
|
32
|
+
collection ?= @collection
|
|
33
|
+
## if model has collection property defined,
|
|
34
|
+
## use that if no collection option exists
|
|
35
|
+
collection?.trigger "model:updated", @
|
|
36
|
+
@trigger "updated", @
|
|
37
|
+
|
|
38
|
+
saveError: (model, xhr, options) =>
|
|
39
|
+
unless xhr.status is 500 or xhr.status is 404
|
|
40
|
+
@set _errors: $.parseJSON(xhr.responseText)?.errors
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
@Backbone.app.module "Views", (Views, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
_remove = Marionette.View::remove
|
|
4
|
+
|
|
5
|
+
_.extend Marionette.View::,
|
|
6
|
+
|
|
7
|
+
addOpacityWrapper: (init = true) ->
|
|
8
|
+
@$el.toggleWrapper
|
|
9
|
+
className: "opacity"
|
|
10
|
+
, init
|
|
11
|
+
|
|
12
|
+
setInstancePropertiesFor: (args...) ->
|
|
13
|
+
for key, val of _.pick(@options, args...)
|
|
14
|
+
@[key] = val
|
|
15
|
+
|
|
16
|
+
remove: (args...) ->
|
|
17
|
+
console.log "removing", @ if App.environment == 'development'
|
|
18
|
+
if @model?.isDestroyed?()
|
|
19
|
+
|
|
20
|
+
wrapper = @$el.toggleWrapper
|
|
21
|
+
className: "opacity"
|
|
22
|
+
# backgroundColor: "#FFECEC"
|
|
23
|
+
|
|
24
|
+
wrapper.fadeOut 100, ->
|
|
25
|
+
$(@).remove()
|
|
26
|
+
|
|
27
|
+
@$el.fadeOut 100, =>
|
|
28
|
+
_remove.apply @, args
|
|
29
|
+
else
|
|
30
|
+
_remove.apply @, args
|
|
31
|
+
|
|
32
|
+
templateHelpers: ->
|
|
33
|
+
|
|
34
|
+
linkTo: (name, url, options = {}) ->
|
|
35
|
+
_.defaults options,
|
|
36
|
+
external: false
|
|
37
|
+
|
|
38
|
+
url = "#" + url unless options.external
|
|
39
|
+
|
|
40
|
+
"<a href='#{url}'>#{@escape(name)}</a>"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
render_partial: ( path, options = {} ) ->
|
|
44
|
+
# add the leading underscore (like rails-partials)
|
|
45
|
+
path = path.split('/')
|
|
46
|
+
path[ path.length - 1 ] = '_' + path[ path.length - 1 ]
|
|
47
|
+
path = path.join('/')
|
|
48
|
+
# render and return the partial if existing
|
|
49
|
+
try
|
|
50
|
+
JST["backbone/app/templates/#{ path }"]( options )
|
|
51
|
+
catch error
|
|
52
|
+
if App.environment != 'production'
|
|
53
|
+
"<p class='error'>Sorry, there is no partial named '#{ path }'.</p>"
|
|
54
|
+
else
|
|
55
|
+
console.log('error in _view')
|
|
56
|
+
''
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
do (Backbone) ->
|
|
2
|
+
|
|
3
|
+
_.extend Backbone.Marionette.Application::,
|
|
4
|
+
|
|
5
|
+
navigate: (route, options = { trigger: true }) ->
|
|
6
|
+
# route = "#" + route if route.charAt(0) is "/"
|
|
7
|
+
Backbone.history.navigate route, options
|
|
8
|
+
|
|
9
|
+
getCurrentRoute: ->
|
|
10
|
+
frag = Backbone.history.fragment
|
|
11
|
+
if _.isEmpty(frag) then null else frag
|
|
12
|
+
|
|
13
|
+
startHistory: ->
|
|
14
|
+
if Backbone.history
|
|
15
|
+
Backbone.history.start(
|
|
16
|
+
pushState: true,
|
|
17
|
+
root: "/"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
do (Marionette) ->
|
|
21
|
+
_.extend Marionette.Renderer,
|
|
22
|
+
|
|
23
|
+
lookups: ["backbone/app/templates/", "backbone/lib/components/"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
render: (template, data) ->
|
|
28
|
+
return if template is false
|
|
29
|
+
path = @getTemplate(template)
|
|
30
|
+
throw "Template #{template} not found!" unless path
|
|
31
|
+
path(data)
|
|
32
|
+
|
|
33
|
+
getTemplate: (template) ->
|
|
34
|
+
for lookup in @lookups
|
|
35
|
+
## inserts the template at the '-1' position of the template array
|
|
36
|
+
## this allows to omit the word 'templates' from the view but still
|
|
37
|
+
## store the templates in a directory outside of the view
|
|
38
|
+
## example: "users/list/layout" will become "users/list/templates/layout"
|
|
39
|
+
for path in [template, @withTemplate(template)]
|
|
40
|
+
return JST[lookup + path] if JST[lookup + path]
|
|
41
|
+
|
|
42
|
+
withTemplate: (string) ->
|
|
43
|
+
array = string.split("/")
|
|
44
|
+
array.splice(-1, 0, "templates")
|
|
45
|
+
array.join("/")
|
|
46
|
+
|
|
47
|
+
do ($) ->
|
|
48
|
+
$.fn.toggleWrapper = (obj = {}, init = true) ->
|
|
49
|
+
_.defaults obj,
|
|
50
|
+
className: ""
|
|
51
|
+
backgroundColor: if @css("backgroundColor") isnt "transparent" then @css("backgroundColor") else "white"
|
|
52
|
+
zIndex: if @css("zIndex") is "auto" or 0 then 1000 else (Number) @css("zIndex")
|
|
53
|
+
|
|
54
|
+
$offset = @offset()
|
|
55
|
+
$width = @outerWidth(false)
|
|
56
|
+
$height = @outerHeight(false)
|
|
57
|
+
|
|
58
|
+
if init
|
|
59
|
+
$("<div>")
|
|
60
|
+
.appendTo("body")
|
|
61
|
+
.addClass(obj.className)
|
|
62
|
+
.attr("data-wrapper", true)
|
|
63
|
+
.css
|
|
64
|
+
width: $width
|
|
65
|
+
height: $height
|
|
66
|
+
top: $offset.top
|
|
67
|
+
left: $offset.left
|
|
68
|
+
position: "absolute"
|
|
69
|
+
zIndex: obj.zIndex + 1
|
|
70
|
+
backgroundColor: obj.backgroundColor
|
|
71
|
+
else
|
|
72
|
+
$("[data-wrapper]").remove()
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
@Backbone.app.module "Utilites.Loading", (Loading, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Loading.LoadingController extends App.Controllers.Application
|
|
4
|
+
|
|
5
|
+
initialize: (options) ->
|
|
6
|
+
{ view, config } = options
|
|
7
|
+
|
|
8
|
+
config = if _.isBoolean(config) then {} else config
|
|
9
|
+
|
|
10
|
+
_.defaults config,
|
|
11
|
+
loadingType: 'spinner'
|
|
12
|
+
entities: @getEntities(view)
|
|
13
|
+
debug: false
|
|
14
|
+
|
|
15
|
+
switch config.loadingType
|
|
16
|
+
when 'opacity'
|
|
17
|
+
@region.currentView.$el.css '-moz-transition', 'opacity 1s ease-in-out' if @region.hasView()
|
|
18
|
+
@region.currentView.$el.css '-ms-transition', 'opacity 1s ease-in-out' if @region.hasView()
|
|
19
|
+
@region.currentView.$el.css '-o-transition', 'opacity 1s ease-in-out' if @region.hasView()
|
|
20
|
+
@region.currentView.$el.css '-webkit-transition', 'opacity 1s ease-in-out' if @region.hasView()
|
|
21
|
+
@region.currentView.$el.css 'opacity', 0 if @region.hasView()
|
|
22
|
+
when 'spinner'
|
|
23
|
+
loadingView = @getLoadingView()
|
|
24
|
+
@show loadingView
|
|
25
|
+
else
|
|
26
|
+
throw new Error("Invalid loadingType")
|
|
27
|
+
|
|
28
|
+
@showRealView view, loadingView, config, options.callback
|
|
29
|
+
|
|
30
|
+
showRealView: (realView, loadingView, config, callback) ->
|
|
31
|
+
unless callback
|
|
32
|
+
callback = ->
|
|
33
|
+
return false
|
|
34
|
+
App.request 'when:fetched', config.entities, =>
|
|
35
|
+
switch config.loadingType
|
|
36
|
+
when "opacity"
|
|
37
|
+
@region.currentView.$el.removeAttr "style" if @region.hasView()
|
|
38
|
+
when "spinner"
|
|
39
|
+
return realView.close() if @region.currentView isnt loadingView
|
|
40
|
+
callback()
|
|
41
|
+
|
|
42
|
+
@show realView unless config.debug
|
|
43
|
+
|
|
44
|
+
getEntities: (view) ->
|
|
45
|
+
_.chain(view).pick('model', 'collection').toArray().compact().value()
|
|
46
|
+
|
|
47
|
+
getLoadingView: ->
|
|
48
|
+
new Loading.LoadingView
|
|
49
|
+
|
|
50
|
+
App.reqres.setHandler 'show:loading', (view, options, callback) ->
|
|
51
|
+
new Loading.LoadingController
|
|
52
|
+
view: view
|
|
53
|
+
region: options.region
|
|
54
|
+
config: options.loading
|
|
55
|
+
callback: callback
|
data/spec/dummy/app/assets/javascripts/backbone/config/controllers/loading/loading_view.js.coffee
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
@Backbone.app.module "Utilites.Loading", (Loading, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Loading.LoadingView extends App.Views.ItemView
|
|
4
|
+
template: false
|
|
5
|
+
className: 'loading-container'
|
|
6
|
+
|
|
7
|
+
onShow: ->
|
|
8
|
+
opts = @_getOptions()
|
|
9
|
+
@$el.spin opts
|
|
10
|
+
|
|
11
|
+
onClose: ->
|
|
12
|
+
@$el.spin false
|
|
13
|
+
|
|
14
|
+
_getOptions: ->
|
|
15
|
+
lines: 10 # The number of lines to draw
|
|
16
|
+
length: 6 # The length of each line
|
|
17
|
+
width: 2.5 # The line thickness
|
|
18
|
+
radius: 7 # The radius of the inner circle
|
|
19
|
+
corners: 1 # Corner roundness (0..1)
|
|
20
|
+
rotate: 9 # The rotation offset
|
|
21
|
+
direction: 1 # 1: clockwise, -1: counterclockwise
|
|
22
|
+
color: '#000' # #rgb or #rrggbb or array of colors
|
|
23
|
+
speed: 1 # Rounds per second
|
|
24
|
+
trail: 60 # Afterglow percentage
|
|
25
|
+
shadow: false # Whether to render a shadow
|
|
26
|
+
hwaccel: true # Whether to use hardware acceleration
|
|
27
|
+
className: 'spinner' # The CSS class to assign to the spinner
|
|
28
|
+
zIndex: 2e9 # The z-index (defaults to 2000000000)
|
|
29
|
+
top: 'auto' # Top position relative to parent in px
|
|
30
|
+
left: 'auto' # Left position relative to parent in px
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
@Backbone.app.module "Entities", (Entities, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
App.reqres.setHandler "when:fetched", (entities, callback) ->
|
|
3
|
+
xhrs = _.chain([entities]).flatten().pluck("_fetch").value()
|
|
4
|
+
|
|
5
|
+
# if _.isArray(entities)
|
|
6
|
+
# xhrs.push(entity._fetch) for entity in entities
|
|
7
|
+
# else
|
|
8
|
+
# xhrs.push(entities._fetch)
|
|
9
|
+
|
|
10
|
+
$.when(xhrs...).done ->
|
|
11
|
+
callback()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
do (Backbone) ->
|
|
2
|
+
_sync = Backbone.sync
|
|
3
|
+
|
|
4
|
+
Backbone.sync = (method, entity, options = {}) ->
|
|
5
|
+
|
|
6
|
+
_.defaults options,
|
|
7
|
+
beforeSend: _.bind(methods.beforeSend, entity)
|
|
8
|
+
complete: _.bind(methods.complete, entity)
|
|
9
|
+
|
|
10
|
+
sync = _sync(method, entity, options)
|
|
11
|
+
if !entity._fetch and method is "read"
|
|
12
|
+
entity._fetch = sync
|
|
13
|
+
|
|
14
|
+
methods =
|
|
15
|
+
beforeSend: ->
|
|
16
|
+
@trigger "sync:start", @
|
|
17
|
+
|
|
18
|
+
complete: ->
|
|
19
|
+
@trigger "sync:stop", @
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@Backbone.app.module "Router", (Router, App, Backbone, Marionette, $, _) ->
|
|
2
|
+
|
|
3
|
+
class Router extends Marionette.AppRouter
|
|
4
|
+
appRoutes:
|
|
5
|
+
"(/)": "root"
|
|
6
|
+
|
|
7
|
+
API =
|
|
8
|
+
root: ->
|
|
9
|
+
console.log 'Hello world!'
|
|
10
|
+
new App.Controllers.All.Root(action: 'index')
|
|
11
|
+
|
|
12
|
+
App.addInitializer ->
|
|
13
|
+
Backbone.app.router = new Router
|
|
14
|
+
controller: API
|