rails_script 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9366216ecd08633b2fb945a1179b274ee61afdd
|
4
|
+
data.tar.gz: 39d2113ccc01fd63af0819ea6cd876e8895fd6f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bff7f4ef8443eae001baf920c046ee73e770c1a6134c35325ec7fd12ed0279bef745612c18bf145e8424fcf24da476d42e297e5eab0770dce9aa5cc9db1dc3d5
|
7
|
+
data.tar.gz: 78bcd83907daa4cc47ced13db26154733a5be5185a982d218cb662a3937a6a1dd8a037b52ddb83970b1ea08de8e35ea1bd283f8f7eb21c96841a254464f8e8d7
|
data/README.md
CHANGED
@@ -24,32 +24,9 @@ After the generator finishes, you will be prompted to add helper call to your ap
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
###
|
28
|
-
|
29
|
-
Any functions that need to be accessible in the global scope should be defined in ```global.js.coffee``` using the ```App``` namespace. Below is an example of one of our favorite functions that we use to submit a form using AJAX as a JSON request.
|
30
|
-
|
31
|
-
```
|
32
|
-
# app/assets/javascripts/global.js.coffee
|
33
|
-
window.App ||= {}
|
34
|
-
|
35
|
-
App.remoteSubmission = ($form, onCompleteCallBack) ->
|
36
|
-
$.ajax
|
37
|
-
url: $form.attr('action')
|
38
|
-
type: $form.attr('method')
|
39
|
-
data: $form.serialize()
|
40
|
-
dataType: 'json'
|
41
|
-
complete: (result) ->
|
42
|
-
onCompleteCallBack(result)
|
43
|
-
|
44
|
-
return
|
45
|
-
```
|
46
|
-
|
47
|
-
Now you can access this function from anywhere in the application by just calling ```App.remoteSubmission($('#myForm'), alert('Hello'))```
|
48
|
-
|
27
|
+
### Page (Action) Specific JavaScript
|
49
28
|
|
50
|
-
|
51
|
-
|
52
|
-
This is where things get even easier, your JavaScript class is named after your Controller and there is a method for each Controller action. Whenever you generate a Controller, the CoffeeScript file that is generated will define the new JavaScript class and the basic REST actions. This means on ```Users#show``` we can submit that 'follow' request in the background like so:
|
29
|
+
Your JavaScript class is named after your Controller and there is a method for each Controller action. Whenever you generate a Controller, the CoffeeScript file that is generated will define the new JavaScript class and the basic REST actions. The example below would print 'users#show' in the console for the ```Users#show``` action.
|
53
30
|
|
54
31
|
```
|
55
32
|
# app/assets/javascripts/users.js.coffee
|
@@ -57,28 +34,25 @@ This is where things get even easier, your JavaScript class is named after your
|
|
57
34
|
window.App ||= {}
|
58
35
|
class App.Users extends App.Base
|
59
36
|
|
60
|
-
show:
|
61
|
-
|
37
|
+
show: =>
|
38
|
+
console.log 'users#show'
|
62
39
|
```
|
63
40
|
|
64
41
|
|
42
|
+
|
65
43
|
### Controller Specific JavaScript
|
66
44
|
|
67
|
-
Executing some JavaScript to run on all controller actions is just a matter of adding it to the
|
45
|
+
Executing some JavaScript to run on all controller actions is just a matter of adding it to the ```all``` function. This is run before the action specific method. The example below would print 'users' for each ```Users``` controller action.
|
68
46
|
|
69
47
|
```
|
70
48
|
# app/assets/javascripts/users.js.coffee
|
71
49
|
window.App ||= {}
|
72
|
-
class App.
|
50
|
+
class App.Users extends App.Base
|
73
51
|
|
74
|
-
|
75
|
-
|
76
|
-
$('body').css('background-color', 'yellow')
|
77
|
-
return this
|
52
|
+
all: =>
|
53
|
+
console.log 'users'
|
78
54
|
```
|
79
55
|
|
80
|
-
Note the call to ```super``` and the ```return this```, it is very important to keep these. If you wanted your Controller specific JavaScript to run before Application wide JavaScript, then you would call ```super``` just before ```return this```. Returning ```this``` allows the Application layout JavaScript to call the action specific functions.
|
81
|
-
|
82
56
|
|
83
57
|
### Application Wide JavaScript
|
84
58
|
|
@@ -105,6 +79,29 @@ class App.Base
|
|
105
79
|
In this example we extracted the rollover action into a new function. Doing so will make the class cleaner and easier to maintain as the application grows. Once again note the ```return this``` in the constructor.
|
106
80
|
|
107
81
|
|
82
|
+
|
83
|
+
### Global Functions
|
84
|
+
|
85
|
+
Any functions that need to be accessible in the global scope should be defined in ```global.js.coffee``` using the ```App``` namespace. Below is an example of one of our favorite functions that we use to submit a form using AJAX as a JSON request.
|
86
|
+
|
87
|
+
```
|
88
|
+
# app/assets/javascripts/global.js.coffee
|
89
|
+
window.App ||= {}
|
90
|
+
|
91
|
+
App.remoteSubmission = ($form) ->
|
92
|
+
$.ajax
|
93
|
+
url: $form.attr('action')
|
94
|
+
type: $form.attr('method')
|
95
|
+
data: $form.serialize()
|
96
|
+
dataType: 'json'
|
97
|
+
|
98
|
+
return
|
99
|
+
```
|
100
|
+
|
101
|
+
Now you can access this function from anywhere in the application by just calling ```App.remoteSubmission($('#myForm'))```
|
102
|
+
|
103
|
+
|
104
|
+
|
108
105
|
### Utilities
|
109
106
|
|
110
107
|
A ```Utility``` is a class that will be used to create similar functionality in many areas of the application. A good example of this is a Modal, which could appear multiple times on the same page. So, let's encapsulate this functionality in a highly reusable class.
|
@@ -168,6 +165,7 @@ class App.Users extends App.Base
|
|
168
165
|
```
|
169
166
|
|
170
167
|
|
168
|
+
|
171
169
|
### Elements
|
172
170
|
|
173
171
|
An ```Element``` is a class that describes the functionality of a one off element in the application. A Main Menu is a good example of this since there is usually only a single Main Menu.
|
@@ -202,6 +200,7 @@ class App.Base
|
|
202
200
|
```
|
203
201
|
|
204
202
|
|
203
|
+
|
205
204
|
#### Element Inheritance
|
206
205
|
|
207
206
|
Inheritance is another key tool for reusability. Let's say our ```Element.MainMenu``` opens and closes in the same way as the ```Utility.Modal```. Well then MainMenu should just extend Modal, this can be accomplished from the generator:
|
@@ -223,6 +222,7 @@ class Element.MainMenu extends Utility.Modal
|
|
223
222
|
Inheritance from the generator can only come from a Utility class. Any class you wish to extend should be created as a Utility. The installer adds the line ```//= require_tree ./utilities``` before loading tree to handle this. If you have a utility that extends a utility, then make sure the extended utility is loaded first by explicitly requiring it before ```//= require_tree ./utilities```.
|
224
223
|
|
225
224
|
|
225
|
+
|
226
226
|
### Custom Controllers
|
227
227
|
|
228
228
|
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:
|
@@ -237,28 +237,28 @@ Since the above example includes a namespace, it would generate:
|
|
237
237
|
window.App ||= {}
|
238
238
|
class App.SomeNewController extends App.Base
|
239
239
|
|
240
|
-
|
241
|
-
|
242
|
-
return this
|
240
|
+
all: =>
|
241
|
+
return
|
243
242
|
|
244
243
|
|
245
|
-
index:
|
244
|
+
index: =>
|
246
245
|
return
|
247
246
|
|
248
247
|
|
249
|
-
show:
|
248
|
+
show: =>
|
250
249
|
return
|
251
250
|
|
252
251
|
|
253
|
-
new:
|
252
|
+
new: =>
|
254
253
|
return
|
255
254
|
|
256
255
|
|
257
|
-
edit:
|
256
|
+
edit: =>
|
258
257
|
return
|
259
258
|
```
|
260
259
|
|
261
|
-
None of the pre-defined functions are necessary, you can remove the ones you don't
|
260
|
+
None of the pre-defined functions are necessary, you can remove the ones you don't need.
|
261
|
+
|
262
262
|
|
263
263
|
|
264
264
|
### Generic Classes
|
@@ -280,6 +280,8 @@ class App.MyClassName
|
|
280
280
|
|
281
281
|
```
|
282
282
|
|
283
|
+
|
284
|
+
|
283
285
|
### Passing Rails Variables
|
284
286
|
|
285
287
|
To pass data from Rails to JavaScript, just call ```to_javascript``` along with a hash of your data. This is then converted to a JSON object with ```to_javascript.to_json``` and can be accessed with ```Utility.RailsVars```. The ```to_javascript``` helper may be called from multiple points in the application, all data is merged together.
|
@@ -315,6 +317,7 @@ class App.Users extends App.Base
|
|
315
317
|
```
|
316
318
|
|
317
319
|
|
320
|
+
|
318
321
|
### Events
|
319
322
|
|
320
323
|
Since Turbolinks doesn't refresh the page and only replaces the body, event listeners defined on ```window``` and ```document``` carry between page loads. To avoid these event listeners stacking, RailsScript will destroy all event listeners on ```window``` and ```document``` that have a blank namespace, i.e. ```$(window).on 'scroll', myHandler```. If you need an event handler to persist between page changes, then define a namespace, i.e. ```$(window).on 'scroll.namespace', myHandler```.
|
@@ -8,8 +8,11 @@ Utility.RailsVars = #{@to_javascript.nil? ? '{}' : @to_javascript.to_json};
|
|
8
8
|
|
9
9
|
(function() {
|
10
10
|
window.$this = new (App.#{ controller_path.split(/\/|_/).map(&:capitalize).join('') } || App.Base)();
|
11
|
+
if (typeof $this.all === 'function') {
|
12
|
+
$this.all.call();
|
13
|
+
}
|
11
14
|
if (typeof $this.#{ action_name } === 'function') {
|
12
|
-
|
15
|
+
$this.#{ action_name }.call();
|
13
16
|
}
|
14
17
|
})();
|
15
18
|
RUBY
|
data/lib/rails_script/version.rb
CHANGED