lib/assets/javascript/init.js.coffee in initjs-1.0.1 vs lib/assets/javascript/init.js.coffee in initjs-2.0.0.beta1
- old
+ new
@@ -1,45 +1,95 @@
window.Initjs =
- initialize: ->
- infos = $("#init-js")
- controllerClass = infos.data("controller-class")
- controllerName = infos.data("controller-name")
- action = infos.data("action")
- this.execFilter('init')
- this.exec(controllerClass, controllerName, action)
- this.execFilter('finish')
- this.appName()
+ initialize: ($infos)->
+ unless $infos?
+ $infos = @$infos()
- appName: ->
- appName = $("#init-js").data('app-name') || "App"
- window.App = window[appName]
- if window.App is undefined
- console.log "Initjs: #{appName} is not defined. Run `rails generate initjs` to generate the app file."
+ @appName($infos) unless @App
+ @execFilter('init')
+ @exec($infos.data('resource').split('/'), $infos.data('action'))
- exec: (controllerClass, controllerName, action) ->
- namespace = App
- if controllerClass
- railsNamespace = controllerClass.split("::").slice(0, -1)
- else
- railsNamespace = []
+ initializePartial: ->
+ $infos = @$partialInfos()
+ if $infos.length > 0
+ @partial = true
+ @initialize($infos)
- for name in railsNamespace
- namespace = namespace[name] if namespace
+ $infos: -> $('#init-js')
+ $partialInfos: -> $('#init-partial-js')
+ partial: false
- if namespace and controllerName
- controller = namespace[controllerName]
+ appName: ($infos)->
+ app_name = $infos.data('app-name') || 'App'
+ @App = window[app_name]
+ console.log "Initjs: #{app_name} is not defined. Run `rails generate initjs:install` to generate the app file." unless @App?
+
+ exec: (resources, action) ->
+ @initModules(@App) unless @partial is true
+ controller_name = resources.pop()
+ namespace = @namespace(resources)
+
+ if namespace and controller_name
+ controller = namespace[controller_name]
+ @initModules(controller) unless @partial is true
+
if controller and View = controller[action]
- App.currentView = window.view = new View()
+ @App.currentView = @initView(View)
+ else if controller and @config('respond_with')
+ actions = []
+ actions.push k for k of @config('respond_with')
- execFilter: (filterName) ->
- this.appName()
- if App.Common and typeof App.Common[filterName] == 'function'
- App.Common[filterName]()
+ if $.inArray(action, actions) != -1 and View = controller[@config('respond_with')[action]]
+ @App.currentView = @initView(View)
+ @partial = false
+
+ namespace: (resources)->
+ namespace = @App
+
+ for name in resources
+ if namespace
+ namespace = namespace[name]
+ @initModules(namespace) unless @partial is true
+ return namespace
+
+ initView: (view)->
+ if typeof view is 'function'
+ return new view()
+ else if typeof view is 'object'
+ @initModules(view)
+ return new view.init() if typeof view.init is 'function'
+
+ initModules: (obj)->
+ if obj? and obj.modules?
+ @App.currentModules = [] unless @App.currentModules?
+
+ if typeof obj.modules is 'function'
+ modules = [].concat(new obj.modules())
+ else
+ modules = [].concat(obj.modules)
+
+ for module in modules
+ @App.currentModules.push @initView(module)
+
+ config: (name)->
+ return false unless @App?
+ @App.configs = { turbolinks: true, pjax: false, respond_with: { 'Create': 'New', 'Update': 'Edit' } } unless @App.configs
+ return @App.configs[name] if @App.configs and @App.configs[name]
+
+ execFilter: (name) ->
+ @App[name]() if @App and typeof @App[name] == 'function'
+
+ initApp: ->
+ @appName(@$infos())
+ Initjs.execFilter('initPage')
+ @initialize()
+
jQuery ->
- window.Initjs.execFilter('initPage') # If you are using the Turbolinks and you need to run a code only once.
- window.Initjs.initialize()
+ Initjs.initApp()
- unless window.Turbolinks is undefined
- $(document).bind "page:change", ->
- window.Initjs.initialize()
+ if window.Turbolinks? and Initjs.config('turbolinks') is true
+ $(document).bind 'page:change', ->
+ Initjs.initialize()
+ if $.fn.pjax? and Initjs.config('pjax') is true
+ $(document).bind 'pjax:complete', ->
+ Initjs.initialize()