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()