Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ After the generator finishes, you will be prompted to add helper call to your ap

NOTE: Your JS files needed have been included before `include_rails_script`. In other words, you still need `<%= javascript_include_tag "application" %>` in your application layout.

## Configuration
You can configure name of your application in config/initializers/rails_script.rb file.

## Usage

### Page (Action) Specific JavaScript
Expand Down Expand Up @@ -231,7 +228,7 @@ Inheritance from the generator can only come from a Utility class. Any class yo

### Custom Controllers

When a new controller is generated, the JavaScript asset file will be generated with RailsScript. However, if you need to manually generate a RailsScript controller you can use:
When a new controller is generated, the JavaScript asset file will be generated with App. However, if you need to manually generate a RailsScript controller you can use:

$ rails g rails_script:controller Some::NewController

Expand Down
23 changes: 23 additions & 0 deletions app/assets/javascripts/base.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class App.Base

constructor: ->
if (window.jQuery) then RailsScript.setClearEventHandlers() # clearing application event handlers only possible with jQuery
return this


###
Run the new action for the create action. Generally the create action will 'render :new' if there was a problem.
This prevents doubling the code for each action.
###
create: ->
if typeof $this.new == 'function'
return $this.new()


###
Run the edit action for the update action. Generally the update action will 'render :edit' if there was a problem.
This prevents doubling the code for each action.
###
update: ->
if typeof $this.edit == 'function'
return $this.edit()
4 changes: 4 additions & 0 deletions app/assets/javascripts/rails_script.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#= require rails_script/init
#= require base
#= require_tree ./utilities
#= require_tree ./elements
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class <%= RailsScript.app_namespace %>.<%= class_name.gsub('::', '') %>
class App.<%= class_name.gsub('::', '') %>

constructor: ->
return this
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class <%= RailsScript.app_namespace %>.<%= controller.gsub('::', '') %> extends <%= RailsScript.app_namespace %>.Base
class App.<%= controller.gsub('::', '') %> extends App.Base

beforeAction: (action) =>
return
Expand Down
2 changes: 1 addition & 1 deletion lib/generators/rails_script/element/element_generator.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module RailsScript
module Generators
class ElementGenerator < ::Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
source_root File.expand_path('../templates', __FILE__)
argument :element_name, type: :string
argument :utility, type: :string, default: ''

Expand Down
20 changes: 7 additions & 13 deletions lib/generators/rails_script/install/install_generator.rb
Original file line number Diff line number Diff line change
@@ -1,34 +1,28 @@
module RailsScript
module Generators
class InstallGenerator < ::Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
source_root File.expand_path("../../../../../app/assets/javascripts", __FILE__)

def copy_files
template 'base.js.coffee', 'app/assets/javascripts/base.js.coffee'
template 'global.js.coffee', 'app/assets/javascripts/global.js.coffee'
template 'rails_script.rb', 'config/initializers/rails_script.rb'
end

def create_directories
directory 'utilities/', 'app/assets/javascripts/utilities'
directory 'elements/', 'app/assets/javascripts/elements'
template 'base.coffee', 'app/assets/javascripts/base.coffee'
template 'global.coffee', 'app/assets/javascripts/global.coffee'
end

def insert_load_order
if File.exist?('app/assets/javascripts/application.js')

if File.readlines('app/assets/javascripts/application.js').grep('//= require_tree .').any?
inject_into_file 'app/assets/javascripts/application.js', "\n//= require base\n//= require_tree ./utilities\n//= require_tree ./elements", before: "\n//= require_tree ."
inject_into_file 'app/assets/javascripts/application.js', "//= require rails_script\n", before: '//= require_tree .'
else
append_file 'app/assets/javascripts/application.js', "\n//= require base\n//= require_tree ./utilities\n//= require_tree ./elements\n//= require_tree ."
append_file 'app/assets/javascripts/application.js', "\n//= require rails_script"
end

elsif File.exist?('app/assets/javascripts/application.js.coffee')

if File.readlines('app/assets/javascripts/application.js.coffee').grep('#= require_tree .').any?
inject_into_file 'app/assets/javascripts/application.js.coffee', "\n#= require base\n#= require_tree ./utilities\n#= require_tree ./elements", before: "\n#= require_tree ."
inject_into_file 'app/assets/javascripts/application.js.coffee', "#= require rails_script\n", before: '#= require_tree .'
else
append_file 'app/assets/javascripts/application.js.coffee', "\n#= require base\n#= require_tree ./utilities\n#= require_tree ./elements\n#= require_tree ."
append_file 'app/assets/javascripts/application.js.coffee', "\n#= require rails_script"
end
end
end
Expand Down
45 changes: 0 additions & 45 deletions lib/generators/rails_script/install/templates/base.js.coffee

This file was deleted.

4 changes: 0 additions & 4 deletions lib/generators/rails_script/install/templates/rails_script.rb

This file was deleted.

8 changes: 2 additions & 6 deletions lib/rails_script.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
require 'rails_script/version'
require 'rails_script/engine'
require 'rails_script/loader_helper'
require 'rails_script/to_javascript'
require 'rails_script/railtie' if defined?(Rails)

module RailsScript
mattr_accessor :app_namespace
@@app_namespace = 'App'

def self.config
yield self
end

end
4 changes: 4 additions & 0 deletions lib/rails_script/engine.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module RailsScript
class Engine < ::Rails::Engine
end
end
6 changes: 5 additions & 1 deletion lib/rails_script/loader_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ module RailsScript
module LoaderHelper

def include_rails_script
content_tag :div, nil, id: 'rails-script', data: { controller: controller_path.split(/\/|_/).map(&:capitalize).join(''), vars: @to_javascript.to_json }
content_tag :div, nil, id: 'rails-script', data: {
controller: controller_path.split(/\/|_/).map(&:capitalize).join(''),
action: action_name,
vars: @to_javascript.to_json
}
end

end
Expand Down
2 changes: 1 addition & 1 deletion lib/rails_script/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module RailsScript
VERSION = '1.0.0'
VERSION = '2.0.0'
end
25 changes: 25 additions & 0 deletions vendor/assets/javascripts/rails_script/init.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
window.RailsScript ||= {}
window.App ||= {}
window.Element ||= {}
window.Utility ||= {}

$(document).on "turbolinks:load.rails_script", ->
Utility.RailsVars = $('#rails-script').data('vars')
window.$this = new (App["#{$('#rails-script').data('controller')}"] || App.Base)()

action = $('#rails-script').data('action')

if typeof $this.beforeAction == 'function'
$this.beforeAction action
if typeof $this[action] == 'function'
$this[action]()
if typeof $this.afterAction == 'function'
$this.afterAction action

RailsScript.setClearEventHandlers = ->
jQuery(document).on 'turbolinks:before-visit', ->
for element in [window, document]
for event, handlers of (jQuery._data(element, 'events') || {})
for handler in handlers
if handler? && handler.namespace == ''
jQuery(element).off event, handler.handler