evil-blocks-rails 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +3 -0
  3. data/README.md +80 -76
  4. data/lib/evil-blocks.debug.js +15 -12
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3218d628224ba9091d719cc07bc71d08197753f
4
- data.tar.gz: b7bf21a51deba749a22b9a11e6f13d1d705d682e
3
+ metadata.gz: 017a2149cb25489d217d292fcf03f59e3701d51e
4
+ data.tar.gz: 24603c09499b74e9107469a83ced823427508a75
5
5
  SHA512:
6
- metadata.gz: 09eb8985c804ca37642f418375554dd9f0cde07ba7d55d9ef2586becbe6de5af7a25948cd61d1bef365f5d7c3e6553419545774d1e924470543c4cb496b905f9
7
- data.tar.gz: 13cc2cd3cce7438aee98f2e66078f7448a9cbed49318e37253b7fed9b3087753cbaa80b8a44351e420a0777abc648a6c89c628af52883e34ad73ff92a01eb1c7
6
+ metadata.gz: 1e22630b2a1fa839f953743e2b8bc13d2914a25c0ce73932c8c9ccbbb39063330c3734a3ff38ec9cb9c1e277576c74dd8b04f54b6653a4b6fcd4bdccba6c243c
7
+ data.tar.gz: a40149bac58c8ff579e52c3d6513ed18f962c2d5432fb8c312702858c72ddfb5fa3165e3b4c9792191a35b5675ae9095fe32008a8c9bf1f649d3a30d59b3989e
data/ChangeLog.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.6.1
2
+ * Fix debugger scope (by Andrey Krivko)
3
+
1
4
  ## 0.6 (Ranger Able, 27th January 1951)
2
5
  * Add filters, which process block object before init was called.
3
6
  * Most build-in features was moved to filter to be disableable.
data/README.md CHANGED
@@ -3,17 +3,17 @@
3
3
  Evil Block is a tiny JS framework for web pages. It is based on 4 ideas:
4
4
 
5
5
  * **Split code to independent blocks.** “Divide and rule” is always good idea.
6
- * **Blocks communicate by events.** Events is easy and safe method to clean
6
+ * **Blocks communicate by events.** Events is an easy and safe method to clean
7
7
  very complicated dependencies between controls.
8
- * **Separate JS and CSS.** You use classes only for styles and bind JS
8
+ * **Separate JS and CSS.** You should use classes only for styles and bind JS
9
9
  by selectors with special attributes. So you can update your styles without
10
10
  fear to break your scripts.
11
- * **Try not to render on client.** 2 way data-binding looks very cool,
12
- but it has [big price]. Most of web pages (instead of web applications)
11
+ * **Try not to render on client.** 2-way data-binding looks very cool,
12
+ but it has a [big price]. Most of web pages (instead of web applications)
13
13
  can render all HTML on server and use client rendering only in few small
14
14
  places. Without rendering we can incredibly clean code and architecture.
15
15
 
16
- See also [Evil Front], a pack of helpers for Ruby on Rails and Evil Blocks.
16
+ See also [Evil Front], a pack of helpers for Ruby on Rails and Evil Blocks.
17
17
 
18
18
  Sponsored by [Evil Martians]. Role aliases were taken from [Role.js].
19
19
 
@@ -70,11 +70,11 @@ evil.block '@@todo',
70
70
  ## Attributes
71
71
 
72
72
  If you use classes selectors in CSS and JS, your scripts will be depend
73
- on styles. If you will change `.small-button` to `.big-button`, you must
74
- change all button’s selectors in scripts.
73
+ on styles. If you change `.small-button` to `.big-button`, you must
74
+ change all the button’s selectors in scripts.
75
75
 
76
- Separated scripts and styles are better, so Evil Blocks prefer to work with
77
- two HTML attributes to bind your JS: `data-block` (to define blocks)
76
+ Separated scripts and styles are better, so Evil Blocks prefers to work with
77
+ two HTML attributes to bind your JS: `data-block` (to define blocks)
78
78
  and `data-role` (to define elements inside block).
79
79
 
80
80
  ```html
@@ -84,9 +84,9 @@ and `data-role` (to define elements inside block).
84
84
  </div>
85
85
  ```
86
86
 
87
- Evil Blocks extends Slim and jQuery, so you can use shortcuts for this
88
- attributes: `@@block` and `@role`. For Haml you can use [Role Block Haml] gem
89
- to use same shortcuts.
87
+ Evil Blocks extends Slim and jQuery, so you can use shortcuts for these
88
+ attributes: `@@block` and `@role`. For Haml you can use [Role Block Haml] gem
89
+ to use the same shortcuts.
90
90
 
91
91
  ```haml
92
92
  @@todo
@@ -97,21 +97,21 @@ to use same shortcuts.
97
97
  $('@tasks')
98
98
  ```
99
99
 
100
- With this attributes you can easily change interface style
100
+ With these attributes you can easily change interface style
101
101
  and be sure in scripts:
102
102
 
103
103
  ```haml
104
104
  .big-button@addButton
105
105
  ```
106
106
 
107
- Of course, Evil Block doesn’t force you to use only this selectors.
108
- You can any attributes, that you like.
107
+ Of course, Evil Block doesn’t force you to write only these selectors.
108
+ You can use any attributes, that you like.
109
109
 
110
110
  [Role Block Haml]: https://github.com/vladson/role_block_haml
111
111
 
112
112
  ## Blocks
113
113
 
114
- You should split your interface to independent controls and mark them
114
+ You should split your interface into independent controls and mark them
115
115
  with `data-block`:
116
116
 
117
117
  ```haml
@@ -124,7 +124,7 @@ header@@header
124
124
  .docs-page@@docs
125
125
  ```
126
126
 
127
- Then you can vitalize your blocks in scripts by `evil.block` function:
127
+ Also you can vitalize your blocks in scripts with `evil.block` function:
128
128
 
129
129
  ```coffee
130
130
  evil.block '@@header',
@@ -133,13 +133,13 @@ evil.block '@@header',
133
133
  console.log('Vitalize', @block)
134
134
  ```
135
135
 
136
- When page will be loaded Evil Blocks finds blocks by `@@header` selector
137
- (this is shortcut for `[data-block=header]`) and call `init` on every
138
- founded block. So, if your page contains two headers, `init` will be called
139
- twice with different `@block`.
136
+ When a page was loaded Evil Blocks finds blocks by `@@header` selector
137
+ (this is a shortcut for `[data-block=header]`) and calls `init` on every
138
+ founded block. So, if your page contains two headers, `init` will be called
139
+ twice with different `@block`’s.
140
140
 
141
- Property `@block` will contain jQuery-node of current block. You can search
142
- inside current block by `@$(selector)` method:
141
+ The `@block` property will contain a jQuery node of current block.
142
+ You can search elements inside of current block with `@$(selector)` method:
143
143
 
144
144
  ```coffee
145
145
  evil.block '@@docs',
@@ -163,8 +163,8 @@ evil.block '@@gallery',
163
163
  @showPhoto(@current)
164
164
  ```
165
165
 
166
- Evil Blocks will automatically create properties with jQuery-nodes
167
- for every element inside block with `data-role` attribute:
166
+ Evil Blocks will automatically create properties with jQuery nodes
167
+ for every element inside of a block with `data-role` attribute:
168
168
 
169
169
  ```haml
170
170
  .todo-control@@todo
@@ -178,9 +178,9 @@ evil.block '@@todo',
178
178
  @tasks.append(task)
179
179
  ```
180
180
 
181
- If you add new HTML by AJAX, you can vitalize new blocks by
182
- `evil.block.vitalize()`. This function will vitalize only new blocks in
183
- document.
181
+ If you add new HTML with AJAX, you can vitalize new blocks with
182
+ `evil.block.vitalize()`. This function will vitalize only new blocks in
183
+ a document.
184
184
 
185
185
  ```coffee
186
186
  @sections.append(html)
@@ -189,7 +189,8 @@ evil.block.vitalize()
189
189
 
190
190
  ## Events
191
191
 
192
- You can bind listeners to events inside block by `"events on selectors"` method:
192
+ You can bind listeners to events inside of a block with `events on selectors`
193
+ method:
193
194
 
194
195
  ```coffee
195
196
  evil.block '@@todo',
@@ -198,7 +199,7 @@ evil.block '@@todo',
198
199
  # Event listener
199
200
  ```
200
201
 
201
- More difficult example:
202
+ A more difficult example:
202
203
 
203
204
  ```coffee
204
205
  evil.block '@@form',
@@ -209,12 +210,12 @@ evil.block '@@form',
209
210
  @ajaxSearch('Changed', field.val())
210
211
  ```
211
212
 
212
- Listener will receive jQuery Event object as first argument.
213
- Current element (`this` in jQuery listeners) will be in `event.el` property.
214
- All listeners are delegated on current block, so `click on @button` will be
215
- equal to `@block.on 'click', '@button', ->`.
213
+ Listener will receive a jQuery Event object as the first argument.
214
+ Current element (`this` in jQuery listeners) will be contained in `event.el`
215
+ property. All listeners are delegated on current block, so `click on @button`
216
+ is equal to `@block.on 'click', '@button', ->`.
216
217
 
217
- You should prevent default event behavior by `event.preventDefault()`,
218
+ You should prevent default event behavior with `event.preventDefault()`,
218
219
  `return false` will not do anything in block’s listeners. I recommend
219
220
  [evil-front/links] to prevent default behavior in any links with `href="#"`
220
221
  to clean your code.
@@ -242,8 +243,8 @@ Listener `load on window` will execute immediately, if window is already loaded.
242
243
 
243
244
  ## Blocks Communications
244
245
 
245
- Blocks should communicates by custom jQuery events. You can bind event listener
246
- to block node by `"on events"` method:
246
+ Blocks should communicate via custom jQuery events. You can bind an event
247
+ listener to a block node with `on events` method:
247
248
 
248
249
  ```coffee
249
250
  evil.block '@@slideshow',
@@ -278,18 +279,18 @@ evil.block '@@cityChanger',
278
279
 
279
280
  ## Rendering
280
281
 
281
- If you will render on client and on server-side, you must repeat helpers, i18n,
282
- templates. Client rendering requires a lot of libraries and architecture.
283
- 2-way data binding looks cool, but has very [big price] in performance,
282
+ If you render on the client and on the server-side, you must repeat helpers,
283
+ i18n, templates. Client rendering requires a lot of libraries and architecture.
284
+ 2-way data binding looks cool, but has a very [big price] in performance,
284
285
  templates, animation and overengeniring.
285
286
 
286
- If you develop web page (not web application with offline support, etc),
287
+ If you develop a web page (not a web application with offline support, etc),
287
288
  server-side rendering will be more useful. Users will see your interface
288
289
  imminently, search engines will index your content and your code will be much
289
290
  simple and clear.
290
291
 
291
- In most of cases you can avoid client rendering. If you need to add some block
292
- by JS, you can render it hidden to page HTML and show in right time:
292
+ In most of cases you can avoid client-side rendering. If you need to add a block
293
+ with JS, you can render it hidden to page HTML and show it in right time:
293
294
 
294
295
  ```coffee
295
296
  evil.block '@@comment',
@@ -298,9 +299,10 @@ evil.block '@@comment',
298
299
  @newCommentForm.slideDown()
299
300
  ```
300
301
 
301
- If user change some data and you need to update view, you anyway need to send
302
- request to save new data on server. Just ask server to render new view.
303
- For example, on new comment server can return new comment HTML:
302
+ If a user changes some data and you need to update the view, you anyway need
303
+ to send a request to save the new data on a server. Just ask the server
304
+ to render a new view. For example, on a new comment server can return
305
+ new comment HTML:
304
306
 
305
307
  ```coffee
306
308
  evil.block '@@comment',
@@ -310,8 +312,8 @@ evil.block '@@comment',
310
312
  @comments.append(newComment)
311
313
  ```
312
314
 
313
- But, of course, some cases require client rendering. Evil Blocks only recommend
314
- to do it server-side, but not force you:
315
+ But, of course, some cases require client-side rendering. Evil Blocks only
316
+ recommends to do it on the server side, but not force you:
315
317
 
316
318
  ```coffee
317
319
  evil.block '@@comment',
@@ -325,7 +327,7 @@ evil.block '@@comment',
325
327
 
326
328
  ## Debug
327
329
 
328
- Evil Blocks contains debug extension, which log every events inside blocks.
330
+ Evil Blocks contains a debug extension, which logs all the events inside blocks.
329
331
  To enable it, just load `evil-blocks.debug.js`. For example, in Rails:
330
332
 
331
333
  ```haml
@@ -335,37 +337,39 @@ To enable it, just load `evil-blocks.debug.js`. For example, in Rails:
335
337
 
336
338
  ## Extensions
337
339
 
338
- Evil Blocks has tiny core. It only finds blocks by selectors, sets `@block`
339
- property and calls `init` method. Any others features (like event bindings
340
- or `@$()` method) was created by filters and can be disabled or replaced.
340
+ Evil Blocks has a tiny core. It only finds blocks via selectors,
341
+ sets the `@block` property and calls the `init` method. Any other features
342
+ (like event bindings or `@$()` method) are created by filters
343
+ and can be disabled or replaced.
341
344
 
342
- Before calling `init`, Evil Blocks processes object throw the filters list in
343
- `evil.block.filters`. Filter accepts object as first argument and unique
344
- class ID as second. It can find some properties in object, work with block
345
- DOM nodes and add/remove some object properties. If filter will return `false`,
346
- Evil Blocks will stop block vitalizing and will not call `init` method.
345
+ Before calling `init`, Evil Blocks processes an object through the filters list
346
+ in `evil.block.filters`. A filter accepts an object as its first argument and
347
+ an unique class ID as the second. It can find some properties inside of
348
+ the object, work with block DOM nodes and add/remove some object properties.
349
+ If filter returns `false`, Evil Blocks will stop block vitalizing
350
+ and will not call the `init` method.
347
351
 
348
352
  Default filters:
349
353
 
350
- 1. **Don’t vitalize same DOM node twice.** It return `false` if block
351
- was already initialized with this class ID.
352
- 2. **Add `@$()` method.** It add shortcut find method to object.
353
- 3. **Add shortcuts to `@element`.** It add properties for all children with
354
+ 1. **Don’t vitalize same DOM node twice.** It returns `false` if a block
355
+ was already initialized with a given ID.
356
+ 2. **Add `@$()` method.** It adds a shortcut find method to an object.
357
+ 3. **Add shortcuts to `@element`.** It adds properties for all children with
354
358
  `data-role` attribute.
355
- 4. **Bind block events.** Find, bind listeners and remove all methods with
356
- name like `on event`.
359
+ 4. **Bind block events.** Find, bind listeners and remove all the methods with
360
+ a name like `on event`.
357
361
  5. **Smarter window load listener.** Run `load on window` listener immediately,
358
362
  if window is already loaded.
359
- 6. **Bind window and body events.** Find, bind listeners and remove all methods
360
- with name like `event on window` or `event on body`.
361
- 7. **Bind elements events.** Find, bind listeners and remove all methods
362
- with name like `event on child`.
363
+ 6. **Bind window and body events.** Find, bind listeners and remove all
364
+ the methods with a name like `event on window` or `event on body`.
365
+ 7. **Bind elements events.** Find, bind listeners and remove all the methods
366
+ with a name like `event on child`.
363
367
 
364
368
  You can add you own filter to `evil.block.filters`. Most filters should be added
365
369
  after first filter to not been called on already initialized blocks.
366
370
 
367
- Let’s write filter, which will initialize blocks only when they become to be
368
- visible.
371
+ Let’s write filter, which will initialize blocks only when they become
372
+ to be visible.
369
373
 
370
374
  ```coffee
371
375
  filter = (obj) ->
@@ -383,8 +387,8 @@ filter = (obj) ->
383
387
  evil.block.filters.splice(0, 0, filter)
384
388
  ```
385
389
 
386
- With filters you can change Evil Blocks logic, add some new shortcuts or
387
- features like mixins.
390
+ With the filters you can change Evil Blocks logic, add some new shortcuts
391
+ or features like mixins.
388
392
 
389
393
  Also you can remove any default filters from `evil.block.filters`. For example,
390
394
  you can create properties for `data-role` children only from some white list.
@@ -393,8 +397,8 @@ But Filters API is still unstable and you should be careful on major updates.
393
397
 
394
398
  ## Modules
395
399
 
396
- If your blocks has same behavior, you can create module-block and set
397
- multiple blocks on same tag:
400
+ If your blocks have same behavior, you can create a module-block
401
+ and set multiple blocks on the same tag:
398
402
 
399
403
  ```haml
400
404
  @popup@@closable
@@ -413,8 +417,8 @@ evil.block '@@popup',
413
417
  @clock.removeClass('is-open')
414
418
  ```
415
419
 
416
- If you want to use same methods inside multiple block, you can create
417
- inject-function:
420
+ If you want to use same methods inside of multiple block, you can create
421
+ an inject-function:
418
422
 
419
423
  ```coffee
420
424
  fancybox = (obj) ->
@@ -455,7 +459,7 @@ If you use Rails 3 on Heroku, you may need
455
459
 
456
460
  ### Ruby
457
461
 
458
- If you use Sinatra or other non-Rails framework you can add Evil Blocks path
462
+ If you use Sinatra or other non-Rails framework you can add Evil Blocks path
459
463
  to Sprockets environment:
460
464
 
461
465
  ```ruby
@@ -21,19 +21,22 @@
21
21
  var event = parts[0] ? parts[0] : parts[1];
22
22
 
23
23
  var callback = obj[name];
24
- obj[name] = function (e) {
25
- var source = e.el ? e.el[0] : this.block[0];
26
- var messages = ['Event "' + event + '" on', source];
27
-
28
- var params = Array.prototype.slice.call(arguments, 1);
29
- if ( params.length > 0 ) {
30
- messages.push('with params');
31
- messages = messages.concat(params);
32
- }
33
24
 
34
- log.apply(this, messages);
35
- callback.apply(this, arguments);
36
- }
25
+ (function(callback){
26
+ obj[name] = function (e) {
27
+ var source = e.el ? e.el[0] : this.block[0];
28
+ var messages = ['Event "' + event + '" on', source];
29
+
30
+ var params = Array.prototype.slice.call(arguments, 1);
31
+ if ( params.length > 0 ) {
32
+ messages.push('with params');
33
+ messages = messages.concat(params);
34
+ }
35
+
36
+ log.apply(this, messages);
37
+ callback.apply(this, arguments);
38
+ }
39
+ })(callback);
37
40
  }
38
41
  };
39
42
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evil-blocks-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Sitnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-22 00:00:00.000000000 Z
11
+ date: 2014-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sprockets