marionette_rails_generators 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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,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/lib/generators/marionette/install/templates/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,13 @@
|
|
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
|
+
|
11
|
+
App.addInitializer ->
|
12
|
+
Backbone.app.router = new Router
|
13
|
+
controller: API
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'generators/marionette/resource_helpers'
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
class Marionette::ModelGenerator < Rails::Generators::Base
|
5
|
+
include Marionette::ResourceHelpers
|
6
|
+
desc %(Description:
|
7
|
+
Stubs out a new model - Entity class and EntityCollection class.
|
8
|
+
Pass the model name, either CamelCased or
|
9
|
+
under_scored, and an optional list of attribute pairs as arguments.
|
10
|
+
|
11
|
+
Optional list of attribute pairs can be represented as
|
12
|
+
javascript object with 'schema' method.
|
13
|
+
|
14
|
+
Attribute pairs are field:type arguments specifying the
|
15
|
+
model's attributes.
|
16
|
+
|
17
|
+
Example:
|
18
|
+
rails g marionette:entity post title:string description:text
|
19
|
+
generates entity 'Backbone.app.Entities.All.Post'
|
20
|
+
rails g marionette:entity blogs/post
|
21
|
+
generates entity 'Backbone.app.Entities.Blogs.Post'
|
22
|
+
)
|
23
|
+
|
24
|
+
source_root File.expand_path('../templates', __FILE__)
|
25
|
+
|
26
|
+
argument :title, type: :string, required: true, banner: 'Entity'
|
27
|
+
argument :schema, type: :hash, default: {}, banner: 'title:string description:text'
|
28
|
+
|
29
|
+
def vars
|
30
|
+
@module = 'All'
|
31
|
+
if @title =~ /\//
|
32
|
+
parse = @title.match /(.*)\/(.*)/
|
33
|
+
@title = parse[2]
|
34
|
+
@module = parse[1]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_entity
|
39
|
+
template 'app/models/entity.js.coffee',
|
40
|
+
"#{backbone_path}/app/models/#{ @module.underscore }/#{ @title.underscore }.js.coffee"
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
@Backbone.app.module "Entities.<%= @module.split('/').map{ |v| v.camelcase }.join('.') %>", (<%= @module.split('/').map{ |v| v.camelcase }.last.to_s %>, App, Backbone, Marionette, $, _) ->
|
2
|
+
|
3
|
+
class <%= @module.split('/').map{ |v| v.camelcase }.last.to_s %>.<%= @title.camelcase %> extends App.Entities.Model
|
4
|
+
urlRoot: -> '/api/<%= @title.underscore.pluralize %>'
|
5
|
+
schema:
|
6
|
+
{
|
7
|
+
<%- @schema.each_with_index do |val, i| -%>
|
8
|
+
<%= val[0] %>: '<%= val[1] %>'<%= (i == @schema.size - 1) ? '' : ',' %>
|
9
|
+
<%- end -%>
|
10
|
+
}
|
11
|
+
|
12
|
+
class <%= @module.split('/').map{ |v| v.camelcase }.last.to_s %>.<%= @title.camelcase %>Collection extends App.Entities.Collection
|
13
|
+
model: <%= @module.split('/').map{ |v| v.camelcase }.last.to_s %>.<%= @title.camelcase %>
|
14
|
+
url: -> '/api/<%= @title.underscore.pluralize %>'
|