rails_blocks 0.7.10 → 0.7.11

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
- SHA1:
3
- metadata.gz: 9c2eaeee389ac41547e2bc5ffff58ad1fcd84e51
4
- data.tar.gz: 26799cba32acfebe52ac62694473b3ac40afceb0
2
+ SHA256:
3
+ metadata.gz: 98997bf17ad7da0d3352b7e34d658bcc93fe9354a3fa2d6a9b9e2f098fdec175
4
+ data.tar.gz: a85a23ac0a5238468e3c65cf027f3be4acf603b1339a84e2ebcb0251c6b915ed
5
5
  SHA512:
6
- metadata.gz: 17c0ec7aac3c95a1c59f42c4f58924290c01336f63662414b284664321809d5ccba579d5e491eed89afbfdc28b39d3e2ac995a4c212c64348ccd7c6aa26b24b7
7
- data.tar.gz: 313b5e1c935783241c3f1a6c9fc9ec1990711c910c2f72ab7f41405ad28c6e1d4d8e1fea7b4f8c6b2c0cead2483f7c5bd51c0066903056c84ce2ddc6fa55fa56
6
+ metadata.gz: 816b8b7aec4a7b6f6cb16f1101affb821c2889de7d6f09d87f7c7cb144fae874537ab8a5ae1feeaac8765bc2238b0b4e9d2a8d45f3bd4dbea379baf36e70afce
7
+ data.tar.gz: 1cc959e2530a6a10150e0e1e6d1c5543dbacb4704884dfa8fe01cce060aeb926a68970953f720001d83504ec6664764098b0e22aa221543ff075c3dd54c2a7e9
@@ -5,6 +5,9 @@ window.$$ =
5
5
  bem_class_selector: ".js-bem"
6
6
  bemDataKey: 'bem'
7
7
 
8
+ blockInitializationErrorHandler: (e) ->
9
+ console.error "Can't initialize block #{name}, check declaration. #{e.name} : #{e.message}"
10
+
8
11
  processOptions: ($dom, item_name, b_name, o) ->
9
12
  if o.attrs
10
13
  for attr, attr_value of o.attrs
@@ -63,14 +66,13 @@ window.$$ =
63
66
  return $$.cache[bid]
64
67
  try
65
68
  block = new $$.decls[$$.utils.camelCase(name)]($b, params, name)
69
+ bid = block.id
70
+ $b.data cacheKey, bid
71
+ $$.cache[bid] = block
72
+ block
66
73
  catch e
67
- console.error "Can't initialize block #{name}, check declaration. #{e.name} : #{e.message}"
68
-
69
- bid = block.id
70
- $b.data cacheKey, bid
71
- $$.cache[bid] = block
72
- block
73
-
74
+ $$.blockInitializationErrorHandler(e) if $$.blockInitializationErrorHandler
75
+
74
76
  makeMod: (name, value) ->
75
77
  mod = name
76
78
  mod += "_#{value}" if value
@@ -1,3 +1,3 @@
1
1
  module RailsBlocks
2
- VERSION = "0.7.10".freeze
2
+ VERSION = "0.7.11".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_blocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.10
4
+ version: 0.7.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Potetiurin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-15 00:00:00.000000000 Z
11
+ date: 2019-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -153,10 +153,7 @@ files:
153
153
  - Rakefile
154
154
  - app/assets/javascripts/bem_blocks.coffee
155
155
  - app/assets/javascripts/block.coffee
156
- - app/assets/javascripts/jblocks.coffee
157
156
  - app/assets/javascripts/jquery.bem_exts.coffee
158
- - app/assets/javascripts/jquery_bem.coffee
159
- - app/assets/javascripts/jquery_bem_copy.coffee
160
157
  - app/assets/javascripts/rails_blocks.js
161
158
  - app/assets/javascripts/utils.coffee
162
159
  - app/assets/stylesheets/rails_blocks.sass
@@ -228,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
225
  version: '0'
229
226
  requirements: []
230
227
  rubyforge_project:
231
- rubygems_version: 2.6.12
228
+ rubygems_version: 2.7.7
232
229
  signing_key:
233
230
  specification_version: 4
234
231
  summary: Rails plugin for work with some modification of BEM methodology
@@ -1,95 +0,0 @@
1
- camelCase = (input) ->
2
- input.toLowerCase().replace /(^|-)(.)/g, (match, $1, $2) ->
3
- $2.toUpperCase()
4
-
5
- window.$$ =
6
- decls: {}
7
- cache: {}
8
- utils: {}
9
- _id: 0
10
- bem_class: 'js_bem'
11
- bem_class_selector: '.js_bem'
12
- guid: () ->
13
- return @_id++
14
-
15
- processOptions: ($dom, b_name, o) ->
16
- if o.attrs
17
- for attr, attr_value of o.attrs
18
- $dom.prop(attr, attr_value)
19
- if o.content
20
- $dom.html(o.content)
21
- if o.mix
22
- $dom.addClass($$.mixClass(o.mix))
23
- if o.elements
24
- for e_name, e_o of o.elements
25
- $$.makeElement($dom, b_name, e_name, e_o)
26
-
27
- makeElement: ($parent, b_name, e_name, o) ->
28
- tag = o.tag || 'div'
29
- $e = $("<#{tag} class='b-#{b_name}__#{e_name}'>")
30
- $$.processOptions($e, b_name, o)
31
- if o.prepend
32
- $parent.prepend $e
33
- else
34
- $parent.append $e
35
- $e
36
-
37
- makeBlock: (b_name, o) ->
38
- o ||= {}
39
- tag = o.tag || 'div'
40
- $b = $("<#{tag} class='b-#{b_name}'>")
41
- $$.processOptions($b, b_name, o)
42
- $b
43
-
44
- init: ($context) ->
45
- $$.getBlocks($context.find($$.bem_class_selector))
46
- $$.getBlocks($context) if $context.hasClass $$.bem_class
47
-
48
- getBlocks: ($context, options) ->
49
- $context.map ->
50
- $$.getBlock($(this), options)
51
-
52
- getBlock: ($b, options)->
53
- bid = $b.data('_bid')
54
- if bid
55
- return $$.cache[bid]
56
- block = new $$.decls[camelCase($$.getBlockName($b))]($b, options)
57
- bid = block.id
58
- $b.data '_bid', bid
59
- $$.cache[bid] = block
60
- block
61
-
62
- getBlockName: ($b) ->
63
- regexp = /^b(-[a-zA-Z0-9]+)+$/
64
- for klass in $b.attr('class').split(/\s+/)
65
- return klass.replace('b-', '') if regexp.test(klass)
66
-
67
- makeMod: (name, value) ->
68
- mod = name
69
- mod += "_#{value}" if value
70
- mod
71
-
72
- mixClass: (mix) ->
73
- "b-#{mix.b}__#{mix.e}"
74
-
75
- $.fn.destroyBlocks = ->
76
- @find($$.bem_class_selector).getBlocks().each ->
77
- @destroy()
78
-
79
- $.fn.addMod = (name, value) ->
80
- mod = $$.makeMod(name, value)
81
- if @e_name
82
- @addClass("b-#{@b_name}__#{@e_name}--#{mod}")
83
- else
84
- @addClass("b-#{@b_name}--#{mod}")
85
-
86
- $.fn.delMod = (name, value) ->
87
- mod = $$.makeMod(name, value)
88
- if @e_name
89
- @removeClass("b-#{@b_name}__#{@e_name}--#{mod}")
90
- else
91
- @removeClass("b-#{@b_name}--#{mod}")
92
-
93
- $.fn.asBlock = (name, o) ->
94
- @addClass("b-#{name}")
95
- $$.getBlock(@, o)
@@ -1,4 +0,0 @@
1
- $ ->
2
- $.b = (name) ->
3
- arguments[0] = '.b-' + name
4
- $.apply(null, arguments)
@@ -1,486 +0,0 @@
1
- ### @required jQuery ###
2
-
3
- (($) ->
4
-
5
- ###*
6
- # Base BEM class.
7
- # @constructor
8
- ###
9
-
10
- BEM = (config) ->
11
-
12
- ###*
13
- # Default configuration.
14
- # @type {Object}
15
- ###
16
-
17
- @config = config or {}
18
- @blockClassRe = @buildBlockClassRe()
19
- @elemClassRe = @buildElemClassRe()
20
- @modClassRe = @buildModClassRe()
21
- return
22
-
23
- ###*
24
- # Get parent block of element.
25
- # @public
26
- #
27
- # @param {Object} $this
28
- # @return {Object}
29
- ###
30
-
31
- BEM::getBlock = ($this) ->
32
- blockClass = @getBlockClass($this)
33
- block = $this.closest('.' + blockClass)
34
- block.selector = blockClass
35
- block
36
-
37
- ###*
38
- # Switch block context.
39
- # @public
40
- #
41
- # @param {Object} $this
42
- # @param {String} block
43
- # @param {String} [elem]
44
- # @return {Object}
45
- ###
46
-
47
- BEM::switchBlock = ($this, block, elem) ->
48
- `var elem`
49
- elem = elem or null
50
- if elem then ($this.selector = @buildSelector(
51
- block: block
52
- elem: elem)) else ($this.selector = @buildSelector(block: block))
53
- $this
54
-
55
- ###*
56
- # Find element in block.
57
- # @public
58
- #
59
- # @param {Object} $this DOM element
60
- # @param {String} elemKey Element name
61
- # @return {Object}
62
- ###
63
-
64
- BEM::findElem = ($this, elemKey) ->
65
- blockClass = @getBlockClass($this)
66
- elemName = @buildElemClass(blockClass, elemKey)
67
- elem = $this.find('.' + elemName)
68
- elem
69
-
70
- ###*
71
- # Get value of modifier.
72
- # @public
73
- #
74
- # @param {Object} $this
75
- # @param {String} modKey
76
- # @return {String}
77
- ###
78
-
79
- BEM::getMod = ($this, modKey) ->
80
- mods = @extractMods($this.first())
81
- if mods[modKey] != undefined
82
- return mods[modKey]
83
- null
84
-
85
- ###*
86
- # Check modifier of element.
87
- # @public
88
- #
89
- # @param {Object} $this
90
- # @param {String} modKey
91
- # @param {String} [modVal]
92
- # @return {Boolean}
93
- ###
94
-
95
- BEM::hasMod = ($this, modKey, modVal) ->
96
- mods = @extractMods($this.first())
97
- if modVal
98
- if mods[modKey] == modVal
99
- return true
100
- else
101
- if mods[modKey]
102
- return true
103
- false
104
-
105
- ###*
106
- # Set modifier on element.
107
- # @public
108
- #
109
- # @param {Object} $this
110
- # @param {String} modKey
111
- # @param {String} [modVal]
112
- # @param {Object}
113
- ###
114
-
115
- BEM::setMod = ($this, modKey, modVal) ->
116
- self = this
117
- selector = $this.selector
118
- $this.each ->
119
- current = $(this)
120
- current.selector = selector
121
- mods = self.extractMods(current)
122
- baseName = self.getBaseClass(current)
123
- if mods[modKey] != undefined
124
- oldModName = self.buildModClass(baseName, modKey, mods[modKey])
125
- current.removeClass oldModName
126
- if modVal != false
127
- newModName = self.buildModClass(baseName, modKey, modVal)
128
- current.addClass(newModName).trigger 'setmod', [
129
- modKey
130
- modVal
131
- ]
132
- return
133
- $this
134
-
135
- ###*
136
- # Delete modifier on element.
137
- # @public
138
- #
139
- # @param {Object} $this
140
- # @param {String} modKey
141
- # @param {String} [modVal]
142
- # @param {Object}
143
- ###
144
-
145
- BEM::delMod = ($this, modKey, modVal) ->
146
- self = this
147
- selector = $this.selector
148
- $this.each ->
149
- `var modName`
150
- current = $(this)
151
- current.selector = selector
152
- mods = self.extractMods(current)
153
- baseName = self.getBaseClass(current)
154
- if modVal
155
- if mods[modKey] == modVal
156
- modName = self.buildModClass(baseName, modKey, mods[modKey])
157
- else
158
- modName = self.buildModClass(baseName, modKey, mods[modKey])
159
- current.removeClass(modName).trigger 'delmod', [
160
- modKey
161
- modVal
162
- ]
163
- return
164
- $this
165
-
166
- ###*
167
- # Filtering elements by modifier.
168
- # @public
169
- #
170
- # @param {Object} $this
171
- # @param {String} modKey
172
- # @param {String} [modVal]
173
- # @param {Boolean} [inverse]
174
- # @return {Object}
175
- ###
176
-
177
- BEM::byMod = ($this, modKey, modVal, inverse) ->
178
- `var inverse`
179
- `var modVal`
180
- self = this
181
- modVal = modVal or null
182
- inverse = inverse or false
183
- selector = $this.selector
184
- result = $()
185
- $this.each ->
186
- `var modName`
187
- current = $(this)
188
- current.selector = selector
189
- mods = self.extractMods(current)
190
- baseName = self.getBaseClass(current)
191
- if modVal
192
- if mods[modKey] == modVal
193
- modName = self.buildModClass(baseName, modKey, mods[modKey])
194
- else
195
- if mods[modKey] != undefined
196
- modName = self.buildModClass(baseName, modKey, mods[modKey])
197
- result = result.add(if inverse then current.not('.' + modName) else current.filter('.' + modName))
198
- return
199
- result.selector = selector
200
- result
201
-
202
- ###*
203
- # Get block names from element.
204
- # @protected
205
- #
206
- # @param {Object|String} $this
207
- # @return {Object}
208
- ###
209
-
210
- BEM::extractBlocks = ($this) ->
211
- self = this
212
- result = []
213
- selectors = @getClasses($this)
214
- $.each selectors, (i, sel) ->
215
- type = self.getClassType(sel)
216
- if type == 'block'
217
- result.push sel
218
- else if type == 'elem'
219
- elem = sel.split(self.config.elemPrefix)
220
- result.push elem[0]
221
- return
222
- result
223
-
224
- ###*
225
- # Get element names from element.
226
- # @protected
227
- #
228
- # @param {Object} $this
229
- # @return {Object}
230
- ###
231
-
232
- BEM::extractElems = ($this) ->
233
- self = this
234
- result = []
235
- $.each self.getClasses($this), (i, className) ->
236
- if self.getClassType(className) == 'elem'
237
- elemName = className.split(self.config.elemPrefix)
238
- result.push elemName[1]
239
- return
240
- result
241
-
242
- ###*
243
- # Get modifiers from element.
244
- # @protected
245
- #
246
- # @param {Object} $this
247
- # @return {Object}
248
- ###
249
-
250
- BEM::extractMods = ($this) ->
251
- self = this
252
- result = {}
253
- $this.each ->
254
- `var $this`
255
- $this = $(this)
256
- $.each self.getClasses($this), (i, className) ->
257
- `var modVal`
258
- if self.getClassType(className) == 'mod'
259
- re = self.buildModClassRe().exec(className)
260
- modName = re[1].split(self.config.modDlmtr)
261
- if modName[1] != undefined and modName[1] != false
262
- modVal = modName[1]
263
- else
264
- modVal = true
265
- result[modName[0]] = modVal
266
- return
267
- return
268
- result
269
-
270
- ###*
271
- # Get classes names from element.
272
- # @protected
273
- #
274
- # @param {Object} $this
275
- # @return {Object}
276
- ###
277
-
278
- BEM::getClasses = ($this) ->
279
- classes = undefined
280
- result = []
281
- if typeof $this == 'object'
282
- if $this.selector.indexOf('.') == 0
283
- classes = $this.selector.split('.')
284
- else if $this.attr('class') != undefined
285
- classes = $this.attr('class').split(' ')
286
- else
287
- return null
288
- else
289
- classes = $this.split('.')
290
- $.each classes, (i, className) ->
291
- if className != ''
292
- result.push $.trim(className)
293
- return
294
- result
295
-
296
- ###*
297
- # Build regexp for blocks.
298
- # @protected
299
- #
300
- # @return {RegExp}
301
- ###
302
-
303
- BEM::buildBlockClassRe = ->
304
- new RegExp('^(' + @config.namePattern + ')$')
305
-
306
- ###*
307
- # Build regexp for elements.
308
- # @protected
309
- #
310
- # @return {RegExp}
311
- ###
312
-
313
- BEM::buildElemClassRe = ->
314
- new RegExp('^' + @config.namePattern + @config.elemPrefix + '(' + @config.namePattern + ')$')
315
-
316
- ###*
317
- # Build regexp for modifiers.
318
- # @protected
319
- #
320
- # @return {RegExp}
321
- ###
322
-
323
- BEM::buildModClassRe = ->
324
- new RegExp('^(?:' + @config.namePattern + '|' + @config.namePattern + @config.elemPrefix + @config.namePattern + ')' + @config.modPrefix + '(' + @config.namePattern + '((' + @config.modDlmtr + @config.namePattern + ')$|$))')
325
-
326
- ###*
327
- # Build class name for block.
328
- # @protected
329
- #
330
- # @param {String} blockName
331
- # @return {String}
332
- ###
333
-
334
- BEM::buildBlockClass = (blockName) ->
335
- @config.blockPrefix + blockName
336
-
337
- ###*
338
- # Build class name for element.
339
- # @protected
340
- #
341
- # @param {String} blockName
342
- # @param {String} elemKey
343
- # @return {String}
344
- ###
345
-
346
- BEM::buildElemClass = (blockName, elemKey) ->
347
- blockName + @config.elemPrefix + elemKey
348
-
349
- ###*
350
- # Build class name for modifier.
351
- # @protected
352
- #
353
- # @param {String} blockName
354
- # @param {String} modKey
355
- # @param {String} modVal
356
- # @return {String}
357
- ###
358
-
359
- BEM::buildModClass = (baseClass, modKey, modVal) ->
360
- if modVal != undefined and modVal != true
361
- baseClass + @config.modPrefix + modKey + @config.modDlmtr + modVal
362
- else
363
- baseClass + @config.modPrefix + modKey
364
-
365
- ###*
366
- # Build selector from object or string.
367
- # @private
368
- #
369
- # @param {String|Object}
370
- # @param {String}
371
- # @return {String}
372
- ###
373
-
374
- BEM::buildSelector = (selector, prefix) ->
375
- `var prefix`
376
- if prefix != ''
377
- prefix = prefix or '.'
378
- if typeof selector == 'object'
379
- if selector.block != undefined
380
- buildSelector = @buildBlockClass(selector.block)
381
- if selector.elem != undefined
382
- buildSelector = @buildElemClass(buildSelector, selector.elem)
383
- if selector.mod != undefined
384
- mod = selector.mod.split(':')
385
- buildSelector = @buildModClass(buildSelector, mod[0], mod[1])
386
- if buildSelector != undefined then prefix + buildSelector else prefix + selector
387
-
388
- ###*
389
- # Build class name for block.
390
- # @protected
391
- #
392
- # @param {Object|String} $this
393
- # @param {Number} [index]
394
- # @return {String}
395
- ###
396
-
397
- BEM::getBlockClass = ($this, index) ->
398
- `var index`
399
- blockClasses = @extractBlocks($this)
400
- index = index or 0
401
- if index <= blockClasses.length - 1 then blockClasses[index] else null
402
-
403
- ###*
404
- # Get base class from element.
405
- # @protected
406
- #
407
- # @param {Object} $this
408
- # @return {String}
409
- ###
410
-
411
- BEM::getBaseClass = ($this) ->
412
- self = this
413
- baseClass = null
414
- selectors = @getClasses($this)
415
- $.each selectors, (i, sel) ->
416
- classType = self.getClassType(sel)
417
- if classType and classType != 'mod'
418
- baseClass = sel
419
- return
420
- baseClass
421
-
422
- ###*
423
- # Get class type.
424
- # @protected
425
- #
426
- # @param {String} className
427
- # @return {String}
428
- ###
429
-
430
- BEM::getClassType = (className) ->
431
- if @modClassRe.test(className)
432
- return 'mod'
433
- else if @elemClassRe.test(className)
434
- return 'elem'
435
- else if @blockClassRe.test(className)
436
- return 'block'
437
- null
438
-
439
- ###*
440
- # Create BEM instance.
441
- ###
442
-
443
- $.BEM = new BEM(
444
- namePattern: '[a-zA-Z0-9-]+'
445
- blockPrefix: ''
446
- elemPrefix: '__'
447
- modPrefix: '--'
448
- modDlmtr: '_')
449
-
450
- ###*
451
- # Extend jQuery object.
452
- ###
453
-
454
- $.fn.extend
455
- block: ->
456
- $.BEM.getBlock this
457
- elem: (elemKey) ->
458
- $.BEM.findElem this, elemKey
459
- ctx: (block, elem) ->
460
- $.BEM.switchBlock this, block, elem
461
- mod: (modKey, modVal) ->
462
- if typeof modVal == 'undefined'
463
- modVal = null
464
- if modVal == false
465
- return $.BEM.delMod(this, modKey)
466
- if modVal != null
467
- $.BEM.setMod(this, modKey, modVal)
468
- else
469
- $.BEM.getMod(this, modKey)
470
- setMod: (modKey, modVal) ->
471
- $.BEM.setMod this, modKey, modVal
472
- delMod: (modKey, modVal) ->
473
- $.BEM.delMod this, modKey, modVal
474
- hasMod: (modKey, modVal) ->
475
- $.BEM.hasMod this, modKey, modVal
476
- byMod: (modKey, modVal) ->
477
- $.BEM.byMod this, modKey, modVal
478
- byNotMod: (modKey, modVal) ->
479
- $.BEM.byMod this, modKey, modVal, 'inverse'
480
- toggleMod: (modKey, modVal1, modVal2) ->
481
- if @hasMod(modKey, modVal1)
482
- @delMod(modKey, modVal1).setMod modKey, modVal2
483
- else
484
- @delMod(modKey, modVal2).setMod modKey, modVal1
485
- return
486
- ) jQuery