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.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +30 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +71 -0
  6. data/Rakefile +2 -0
  7. data/lib/generators/marionette/attribute.rb +54 -0
  8. data/lib/generators/marionette/controller/controller_generator.rb +57 -0
  9. data/lib/generators/marionette/controller/templates/app/controllers/controller.js.coffee +12 -0
  10. data/lib/generators/marionette/controller/templates/app/controllers/controller_with_views.js.coffee +16 -0
  11. data/lib/generators/marionette/install/install_generator.rb +91 -0
  12. data/lib/generators/marionette/install/templates/after_backbone.js.coffee +8 -0
  13. data/lib/generators/marionette/install/templates/app.js.coffee +21 -0
  14. data/lib/generators/marionette/install/templates/app/templates/index.jst.eco +118 -0
  15. data/lib/generators/marionette/install/templates/base/controllers/_base_controller.js.coffee +42 -0
  16. data/lib/generators/marionette/install/templates/base/models/_base_collection.js.coffee +3 -0
  17. data/lib/generators/marionette/install/templates/base/models/_base_model.js.coffee +40 -0
  18. data/lib/generators/marionette/install/templates/base/views/_view.js.coffee +56 -0
  19. data/lib/generators/marionette/install/templates/base/views/collectionview.js.coffee +4 -0
  20. data/lib/generators/marionette/install/templates/base/views/compositeview.js.coffee +4 -0
  21. data/lib/generators/marionette/install/templates/base/views/itemview.js.coffee +3 -0
  22. data/lib/generators/marionette/install/templates/base/views/layout.js.coffee +3 -0
  23. data/lib/generators/marionette/install/templates/before_backbone.js.coffee +2 -0
  24. data/lib/generators/marionette/install/templates/config/config.js.coffee +72 -0
  25. data/lib/generators/marionette/install/templates/config/controllers/loading/loading_controller.js.coffee +55 -0
  26. data/lib/generators/marionette/install/templates/config/controllers/loading/loading_view.js.coffee +30 -0
  27. data/lib/generators/marionette/install/templates/config/models/fetch.js.coffee +11 -0
  28. data/lib/generators/marionette/install/templates/config/models/sync.js.coffee +19 -0
  29. data/lib/generators/marionette/install/templates/index.html.erb +9 -0
  30. data/lib/generators/marionette/install/templates/routes.js.coffee +13 -0
  31. data/lib/generators/marionette/model/model_generator.rb +42 -0
  32. data/lib/generators/marionette/model/templates/app/models/entity.js.coffee +14 -0
  33. data/lib/generators/marionette/resource_helpers.rb +104 -0
  34. data/lib/generators/marionette/scaffold/scaffold_generator.rb +194 -0
  35. data/lib/generators/marionette/scaffold/templates/templates/_empty.jst.eco +1 -0
  36. data/lib/generators/marionette/scaffold/templates/templates/_form.jst.eco +6 -0
  37. data/lib/generators/marionette/scaffold/templates/templates/_post.jst.eco +6 -0
  38. data/lib/generators/marionette/scaffold/templates/templates/edit.jst.eco +6 -0
  39. data/lib/generators/marionette/scaffold/templates/templates/index.jst.eco +19 -0
  40. data/lib/generators/marionette/scaffold/templates/templates/new.jst.eco +6 -0
  41. data/lib/generators/marionette/scaffold/templates/templates/show.jst.eco +10 -0
  42. data/lib/generators/marionette/view/templates/app/templates/collection_view.jst.eco +1 -0
  43. data/lib/generators/marionette/view/templates/app/templates/composite_view.jst.eco +1 -0
  44. data/lib/generators/marionette/view/templates/app/templates/item_view.jst.eco +10 -0
  45. data/lib/generators/marionette/view/templates/app/templates/layouts/application.jst.eco +2 -0
  46. data/lib/generators/marionette/view/templates/app/views/collection_view.js.coffee +4 -0
  47. data/lib/generators/marionette/view/templates/app/views/composite_view.js.coffee +4 -0
  48. data/lib/generators/marionette/view/templates/app/views/item_view.js.coffee +7 -0
  49. data/lib/generators/marionette/view/view_generator.rb +112 -0
  50. data/lib/marionette_rails_generators.rb +8 -0
  51. data/lib/marionette_rails_generators/version.rb +3 -0
  52. data/marionette_rails_generators.gemspec +33 -0
  53. data/spec/dummy/README.rdoc +28 -0
  54. data/spec/dummy/Rakefile +6 -0
  55. data/spec/dummy/app/assets/images/.keep +0 -0
  56. data/spec/dummy/app/assets/javascripts/application.js +32 -0
  57. data/spec/dummy/app/assets/javascripts/backbone/after_backbone.js.coffee +8 -0
  58. data/spec/dummy/app/assets/javascripts/backbone/app.js.coffee +21 -0
  59. data/spec/dummy/app/assets/javascripts/backbone/app/controllers/all/root_controller.js.coffee +14 -0
  60. data/spec/dummy/app/assets/javascripts/backbone/app/models/admin/books.js.coffee +11 -0
  61. data/spec/dummy/app/assets/javascripts/backbone/app/models/all/posts.js.coffee +13 -0
  62. data/spec/dummy/app/assets/javascripts/backbone/app/models/test_subsubmodule/test_submodule/test_module/stars.js.coffee +11 -0
  63. data/spec/dummy/app/assets/javascripts/backbone/app/templates/admin/test_collection_view2.jst.eco +1 -0
  64. data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_collection_view1.jst.eco +1 -0
  65. data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_composite_view1.jst.eco +1 -0
  66. data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_item_view1.jst.eco +54 -0
  67. data/spec/dummy/app/assets/javascripts/backbone/app/templates/all/test_item_view2.jst.eco +1 -0
  68. data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/application.jst.eco +2 -0
  69. data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout1.jst.eco +2 -0
  70. data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout2.jst.eco +2 -0
  71. data/spec/dummy/app/assets/javascripts/backbone/app/templates/layouts/test_layout3.jst.eco +2 -0
  72. data/spec/dummy/app/assets/javascripts/backbone/app/templates/root/index.jst.eco +118 -0
  73. data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_module/test_composite_view2.jst.eco +1 -0
  74. data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_module/test_item_view3.jst.eco +1 -0
  75. data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_collection_view3.jst.eco +1 -0
  76. data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_composite_view3.jst.eco +1 -0
  77. data/spec/dummy/app/assets/javascripts/backbone/app/templates/test_subsubmodule/test_submodule/test_module/test_item_view4.jst.eco +1 -0
  78. data/spec/dummy/app/assets/javascripts/backbone/app/views/admin/test_collection_view2.js.coffee +4 -0
  79. data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_collection_view1.js.coffee +4 -0
  80. data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_composite_view1.js.coffee +4 -0
  81. data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_item_view1.js.coffee +7 -0
  82. data/spec/dummy/app/assets/javascripts/backbone/app/views/all/test_item_view2.js.coffee +7 -0
  83. data/spec/dummy/app/assets/javascripts/backbone/app/views/layouts/layouts.js.coffee +21 -0
  84. data/spec/dummy/app/assets/javascripts/backbone/app/views/root/index.js.coffee +7 -0
  85. data/spec/dummy/app/assets/javascripts/backbone/app/views/test_module/test_composite_view2.js.coffee +4 -0
  86. data/spec/dummy/app/assets/javascripts/backbone/app/views/test_module/test_item_view3.js.coffee +7 -0
  87. data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_collection_view3.js.coffee +4 -0
  88. data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_composite_view3.js.coffee +4 -0
  89. data/spec/dummy/app/assets/javascripts/backbone/app/views/test_subsubmodule/test_submodule/test_module/test_item_view4.js.coffee +7 -0
  90. data/spec/dummy/app/assets/javascripts/backbone/base/controllers/_base_controller.js.coffee +42 -0
  91. data/spec/dummy/app/assets/javascripts/backbone/base/models/_base_collection.js.coffee +3 -0
  92. data/spec/dummy/app/assets/javascripts/backbone/base/models/_base_model.js.coffee +40 -0
  93. data/spec/dummy/app/assets/javascripts/backbone/base/views/_view.js.coffee +56 -0
  94. data/spec/dummy/app/assets/javascripts/backbone/base/views/collectionview.js.coffee +4 -0
  95. data/spec/dummy/app/assets/javascripts/backbone/base/views/compositeview.js.coffee +4 -0
  96. data/spec/dummy/app/assets/javascripts/backbone/base/views/itemview.js.coffee +3 -0
  97. data/spec/dummy/app/assets/javascripts/backbone/base/views/layout.js.coffee +3 -0
  98. data/spec/dummy/app/assets/javascripts/backbone/before_backbone.js.coffee +2 -0
  99. data/spec/dummy/app/assets/javascripts/backbone/config/config.js.coffee +72 -0
  100. data/spec/dummy/app/assets/javascripts/backbone/config/controllers/loading/loading_controller.js.coffee +55 -0
  101. data/spec/dummy/app/assets/javascripts/backbone/config/controllers/loading/loading_view.js.coffee +30 -0
  102. data/spec/dummy/app/assets/javascripts/backbone/config/models/fetch.js.coffee +11 -0
  103. data/spec/dummy/app/assets/javascripts/backbone/config/models/sync.js.coffee +19 -0
  104. data/spec/dummy/app/assets/javascripts/backbone/routes.js.coffee +14 -0
  105. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  106. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  107. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  108. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  109. data/spec/dummy/app/mailers/.keep +0 -0
  110. data/spec/dummy/app/models/.keep +0 -0
  111. data/spec/dummy/app/models/concerns/.keep +0 -0
  112. data/spec/dummy/app/views/application/index.html.erb +9 -0
  113. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  114. data/spec/dummy/bin/bundle +3 -0
  115. data/spec/dummy/bin/rails +4 -0
  116. data/spec/dummy/bin/rake +4 -0
  117. data/spec/dummy/bin/setup +29 -0
  118. data/spec/dummy/config.ru +4 -0
  119. data/spec/dummy/config/application.rb +30 -0
  120. data/spec/dummy/config/boot.rb +5 -0
  121. data/spec/dummy/config/database.yml +25 -0
  122. data/spec/dummy/config/environment.rb +5 -0
  123. data/spec/dummy/config/environments/development.rb +41 -0
  124. data/spec/dummy/config/environments/production.rb +79 -0
  125. data/spec/dummy/config/environments/test.rb +42 -0
  126. data/spec/dummy/config/initializers/assets.rb +11 -0
  127. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  128. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  129. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  130. data/spec/dummy/config/initializers/inflections.rb +16 -0
  131. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  132. data/spec/dummy/config/initializers/session_store.rb +3 -0
  133. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  134. data/spec/dummy/config/locales/en.yml +23 -0
  135. data/spec/dummy/config/routes.rb +58 -0
  136. data/spec/dummy/config/secrets.yml +22 -0
  137. data/spec/dummy/db/development.sqlite3 +0 -0
  138. data/spec/dummy/lib/assets/.keep +0 -0
  139. data/spec/dummy/public/404.html +67 -0
  140. data/spec/dummy/public/422.html +67 -0
  141. data/spec/dummy/public/500.html +66 -0
  142. data/spec/dummy/public/favicon.ico +0 -0
  143. data/spec/dummy/spec/javascripts/helpers/SpecHelper.coffee +6 -0
  144. data/spec/dummy/spec/javascripts/specs/backbone_install_spec.coffee +78 -0
  145. data/spec/dummy/spec/javascripts/specs/entity_generator_spec.coffee +13 -0
  146. data/spec/dummy/spec/javascripts/specs/view_generator_spec.coffee +44 -0
  147. data/spec/dummy/spec/javascripts/support/jasmine.yml +124 -0
  148. data/spec/dummy/spec/javascripts/support/jasmine_helper.rb +49 -0
  149. data/vendor/assets/javascripts/backbone-syphon.js +469 -0
  150. data/vendor/assets/javascripts/jquery.spin.js +435 -0
  151. metadata +445 -0
@@ -0,0 +1,7 @@
1
+ @Backbone.app.module "Views.All", (All, App, Backbone, Marionette, $, _) ->
2
+
3
+ class All.TestItemView2 extends App.Views.ItemView
4
+ template: 'all/test_item_view2'
5
+
6
+
7
+
@@ -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,7 @@
1
+ @Backbone.app.module "Views.Root", (Root, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Root.Index extends App.Views.ItemView
4
+ template: 'root/index'
5
+
6
+
7
+
@@ -0,0 +1,4 @@
1
+ @Backbone.app.module "Views.TestModule", (TestModule, App, Backbone, Marionette, $, _) ->
2
+
3
+ class TestModule.TestCompositeView2 extends App.Views.CompositeView
4
+ template: 'test_module/test_composite_view2'
@@ -0,0 +1,7 @@
1
+ @Backbone.app.module "Views.TestModule", (TestModule, App, Backbone, Marionette, $, _) ->
2
+
3
+ class TestModule.TestItemView3 extends App.Views.ItemView
4
+ template: 'test_module/test_item_view3'
5
+
6
+
7
+
@@ -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,4 @@
1
+ @Backbone.app.module "Views.TestSubsubmodule.TestSubmodule.TestModule", (TestModule, App, Backbone, Marionette, $, _) ->
2
+
3
+ class TestModule.TestCompositeView3 extends App.Views.CompositeView
4
+ template: 'test_subsubmodule/test_submodule/test_module/test_composite_view3'
@@ -0,0 +1,7 @@
1
+ @Backbone.app.module "Views.TestSubsubmodule.TestSubmodule.TestModule", (TestModule, App, Backbone, Marionette, $, _) ->
2
+
3
+ class TestModule.TestItemView4 extends App.Views.ItemView
4
+ template: 'test_subsubmodule/test_submodule/test_module/test_item_view4'
5
+
6
+
7
+
@@ -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,3 @@
1
+ @Backbone.app.module "Entities", (Entities, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Entities.Collection extends Backbone.Collection
@@ -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,4 @@
1
+ @Backbone.app.module "Views", (Views, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Views.CollectionView extends Marionette.CollectionView
4
+ childViewEventPrefix: "childview"
@@ -0,0 +1,4 @@
1
+ @Backbone.app.module "Views", (Views, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Views.CompositeView extends Marionette.CompositeView
4
+ childViewEventPrefix: "childview"
@@ -0,0 +1,3 @@
1
+ @Backbone.app.module "Views", (Views, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Views.ItemView extends Marionette.ItemView
@@ -0,0 +1,3 @@
1
+ @Backbone.app.module "Views", (Views, App, Backbone, Marionette, $, _) ->
2
+
3
+ class Views.Layout extends Marionette.LayoutView
@@ -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
@@ -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