rails_blocks 0.7.12 → 0.9.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2a84c6a01f23c69fe7f169d96b91e5782294f46183580d00228e560b48432a8
4
- data.tar.gz: f0b7db3e83e3c440af25cf6aadada6a570fad79cfb3f307ae7f83d1a5f06f327
3
+ metadata.gz: 033ebb0f7ed446801f2ae9cd57276c54881fa1ce0790b67475e8c0d3d58aaf68
4
+ data.tar.gz: 909f87b36efb9f8c909de64e51564b5ca57c575253052374c4791b891f0705c6
5
5
  SHA512:
6
- metadata.gz: 960c9b3f790bb2f7a569b57fa5c08b24db852597651bef47a8a3035b1e925b4bf50bdc45c560354108ceb52975c6cef09998fd2a3f7c1f8af8f99bf7a0c0208c
7
- data.tar.gz: b715a1b9720ba3e34aee0ac527c151f20cda6fc4d4230a6b5015bb613df7d426af748b76018ddb54bf96767cad5fb1928d2478898762c627e255336356b697b0
6
+ metadata.gz: ed545d3e344a507e4c30cbd7b14bee0186e464e9a54c60d8f4498557607bec1bc1df142eefcfa9d37039f254cb08e5ab7cc0863123d6d4363a9a43480af58133
7
+ data.tar.gz: 6f95e004db9ef7883bf17f41bd36fd226b3c7659ae3b5e85ae975c3dd6f63fcafe093de2674312a12ad915f8fcbc2b50c2ae4197bbbcbbbc9c1d03828cec5be6
@@ -0,0 +1,140 @@
1
+ (function() {
2
+ var hasProp = {}.hasOwnProperty;
3
+
4
+ window.$$ = {
5
+ decls: {},
6
+ cache: {},
7
+ bem_class: 'js-bem',
8
+ bem_class_selector: ".js-bem",
9
+ bemDataKey: 'bem',
10
+ blockInitializationErrorHandler: function(e) {
11
+ return console.error("Can't initialize block " + name + ", check declaration. " + e.name + " : " + e.message);
12
+ },
13
+ processOptions: function($dom, item_name, b_name, o) {
14
+ var attr, attr_value, currentData, e_name, e_o, ref, ref1;
15
+ if (o.attrs) {
16
+ ref = o.attrs;
17
+ for (attr in ref) {
18
+ attr_value = ref[attr];
19
+ $dom.prop(attr, attr_value);
20
+ }
21
+ }
22
+ if (o.content) {
23
+ $dom.html(o.content);
24
+ }
25
+ if (o.mix) {
26
+ $dom.addClass($$.mixClass(o.mix));
27
+ }
28
+ if (o.data) {
29
+ currentData = $dom.data($$.bemDataKey) || {};
30
+ currentData[item_name] = o.data;
31
+ $dom.data($$.bemDataKey, currentData);
32
+ }
33
+ if (o.elements) {
34
+ ref1 = o.elements;
35
+ for (e_name in ref1) {
36
+ e_o = ref1[e_name];
37
+ $$.makeElement($dom, b_name, e_name, e_o);
38
+ }
39
+ }
40
+ return $dom;
41
+ },
42
+ makeDom: function(o, klass) {
43
+ var tag;
44
+ o || (o = {});
45
+ tag = o.tag || 'div';
46
+ return $("<" + tag + ">)").addClass(klass);
47
+ },
48
+ makeElement: function($parent, b_name, e_name, o) {
49
+ var $e, item_name;
50
+ item_name = $$.elementClass(b_name, e_name);
51
+ $e = this.makeDom(o, item_name);
52
+ $$.processOptions($e, item_name, b_name, o);
53
+ if (o.prepend) {
54
+ $parent.prepend($e);
55
+ } else {
56
+ $parent.append($e);
57
+ }
58
+ return $e;
59
+ },
60
+ makeBlock: function(b_name, o) {
61
+ var $b, item_name;
62
+ item_name = $$.blockClass(b_name);
63
+ $b = this.makeDom(o, item_name);
64
+ $$.processOptions($b, item_name, b_name, o);
65
+ return $b;
66
+ },
67
+ init: function($context) {
68
+ var $blocks;
69
+ $blocks = $context.find($$.bem_class_selector);
70
+ if ($context.hasClass($$.bem_class)) {
71
+ $blocks = $blocks.add($context);
72
+ }
73
+ return $$.initBlocks($blocks);
74
+ },
75
+ initBlocks: function($context, options) {
76
+ return $context.each(function() {
77
+ var $node, allParams, name, params, results;
78
+ $node = $(this);
79
+ allParams = $node.data($$.bemDataKey);
80
+ results = [];
81
+ for (name in allParams) {
82
+ if (!hasProp.call(allParams, name)) continue;
83
+ params = allParams[name];
84
+ if (name.indexOf('__') !== -1) {
85
+ continue;
86
+ }
87
+ results.push($$.getBlock($node, name, params));
88
+ }
89
+ return results;
90
+ });
91
+ },
92
+ getBlock: function($b, name, params) {
93
+ var bid, block, cacheKey, e;
94
+ cacheKey = name + "_bid";
95
+ bid = $b.data(cacheKey);
96
+ if (bid) {
97
+ return $$.cache[bid];
98
+ }
99
+ try {
100
+ block = new $$.decls[$$.utils.camelCase(name)]($b, params, name);
101
+ bid = block.id;
102
+ $b.data(cacheKey, bid);
103
+ $$.cache[bid] = block;
104
+ return block;
105
+ } catch (error) {
106
+ e = error;
107
+ if ($$.blockInitializationErrorHandler) {
108
+ return $$.blockInitializationErrorHandler(e, name, params);
109
+ }
110
+ }
111
+ },
112
+ makeMod: function(name, value) {
113
+ var mod;
114
+ mod = name;
115
+ if (value) {
116
+ mod += "_" + value;
117
+ }
118
+ return mod;
119
+ },
120
+ mixClass: function(mix) {
121
+ if (mix.e) {
122
+ return mix.b + "__" + mix.e;
123
+ }
124
+ return mix.b;
125
+ },
126
+ blockModClass: function(name, mod, value) {
127
+ return name + "--" + ($$.makeMod(mod, value));
128
+ },
129
+ elementModClass: function(b_name, e_name, mod, value) {
130
+ return ($$.elementClass(b_name, e_name)) + "--" + ($$.makeMod(mod, value));
131
+ },
132
+ blockClass: function(b_name) {
133
+ return b_name;
134
+ },
135
+ elementClass: function(b_name, e_name) {
136
+ return b_name + "__" + e_name;
137
+ }
138
+ };
139
+
140
+ }).call(this);
@@ -0,0 +1,94 @@
1
+ class Block {
2
+ constructor($b, params, name) {
3
+ this.$node = $b;
4
+ this.name = name;
5
+ this.id = $$.utils.guid();
6
+ this.params = params;
7
+ if (this.events) {
8
+ this._addEvents();
9
+ }
10
+ if (this.init) {
11
+ this.init();
12
+ }
13
+ }
14
+
15
+ elem(e_name, mod_name, mod_value, context) {
16
+ var $elem;
17
+ if (context == null) {
18
+ context = this.$node;
19
+ }
20
+ $elem = $(this.elemSelector(e_name, mod_name, mod_value), context);
21
+ $elem.e_name = e_name;
22
+ $elem.b_name = this.name;
23
+ return $elem;
24
+ };
25
+
26
+ elemSelector(e_name, mod_name, mod_value) {
27
+ if (mod_name) {
28
+ return "." + ($$.elementModClass(this.name, e_name, mod_name, mod_value));
29
+ }
30
+ return "." + (this._elementClass(e_name));
31
+ };
32
+
33
+ on() {
34
+ return this.$node.on.apply(this.$node, arguments);
35
+ };
36
+
37
+ _addEvents(element) {
38
+ var event_name, handler, p, ref, results;
39
+ ref = this.events;
40
+ results = [];
41
+ for (event_name in ref) {
42
+ handler = ref[event_name];
43
+ p = event_name.split(' ');
44
+ if (typeof handler === 'string') {
45
+ handler = decl.methods[handler];
46
+ }
47
+ results.push(this.$node.on(p[0], p[1], handler.bind(this)));
48
+ }
49
+ return results;
50
+ };
51
+
52
+ _trigger(event, data) {
53
+ return this.$node.trigger(event, data);
54
+ };
55
+
56
+ _elementClass(e_name) {
57
+ return $$.elementClass(this.name, e_name);
58
+ };
59
+
60
+ addElem(e_name, o, $parent) {
61
+ var $elem;
62
+ o || (o = {});
63
+ $elem = $$.makeElement($parent || this.$node, this.name, e_name, o);
64
+ $elem.e_name = e_name;
65
+ $elem.b_name = this.name;
66
+ return $elem;
67
+ };
68
+
69
+ asElem($elem, name) {
70
+ $elem.e_name = name;
71
+ $elem.b_name = this.name;
72
+ return $elem;
73
+ };
74
+
75
+ addMod(mod, value) {
76
+ return this.$node.addClass($$.blockModClass(this.name, mod, value));
77
+ };
78
+
79
+ delMod(mod, value) {
80
+ return this.$node.removeClass($$.blockModClass(this.name, mod, value));
81
+ };
82
+
83
+ toggleMod(mod, value) {
84
+ if (this.hasMod(mod, value)) {
85
+ return this.delMod(mod, value);
86
+ } else {
87
+ return this.addMod(mod, value);
88
+ }
89
+ };
90
+
91
+ hasMod(mod, value) {
92
+ return this.$node.hasClass($$.blockModClass(this.name, mod, value));
93
+ };
94
+ }
@@ -0,0 +1,72 @@
1
+ (function() {
2
+ $(function() {
3
+ var originalEq;
4
+ $.b = function(name) {
5
+ arguments[0] = '.' + name;
6
+ return $.apply(null, arguments);
7
+ };
8
+ originalEq = $.fn.eq;
9
+ return $.fn.extend({
10
+ destroyBlocks: function() {
11
+ return this.find($$.bem_class_selector).getBlocks().each(function() {
12
+ return this.destroy();
13
+ });
14
+ },
15
+ isElem: function() {
16
+ if (this.e_name) {
17
+ return true;
18
+ }
19
+ return false;
20
+ },
21
+ addMod: function(name, value) {
22
+ if (this.isElem()) {
23
+ return this.addClass($$.elementModClass(this.b_name, this.e_name, name, value));
24
+ } else {
25
+ return this.addClass($$.blockModClass(this.b_name, name, value));
26
+ }
27
+ },
28
+ hasMod: function(name, value) {
29
+ if (this.isElem()) {
30
+ return this.hasClass($$.elementModClass(this.b_name, this.e_name, name, value));
31
+ } else {
32
+ return this.hasClass($$.blockModClass(this.b_name, name, value));
33
+ }
34
+ },
35
+ toggleMod: function(mod, value) {
36
+ if (this.hasMod(mod, value)) {
37
+ return this.delMod(mod, value);
38
+ } else {
39
+ return this.addMod(mod, value);
40
+ }
41
+ },
42
+ delMod: function(name, value) {
43
+ if (this.isElem()) {
44
+ return this.removeClass($$.elementModClass(this.b_name, this.e_name, name, value));
45
+ } else {
46
+ return this.removeClass($$.blockModClass(this.b_name, name, value));
47
+ }
48
+ },
49
+ asBlock: function(name, o) {
50
+ this.addClass("" + name);
51
+ return $$.getBlock(this, name, o);
52
+ },
53
+ bemParams: function() {
54
+ var allParams;
55
+ allParams = this.data($$.bemDataKey);
56
+ if (this.isElem()) {
57
+ return allParams[$$.elementClass(this.b_name, this.e_name)];
58
+ } else {
59
+ return console.log('Error, only for elements. Use initBlock for blocks.');
60
+ }
61
+ },
62
+ eq: function() {
63
+ var collection;
64
+ collection = originalEq.apply(this, arguments);
65
+ collection.b_name = this.b_name;
66
+ collection.e_name = this.e_name;
67
+ return collection;
68
+ }
69
+ });
70
+ });
71
+
72
+ }).call(this);
@@ -0,0 +1,17 @@
1
+ (function() {
2
+ window.$$.utils = {
3
+ _id: 0,
4
+ camelCase: function(input) {
5
+ return input.toLowerCase().replace(/(^|-)(.)/g, function(match, $1, $2) {
6
+ return $2.toUpperCase();
7
+ });
8
+ },
9
+ dash: function(input) {
10
+ return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
11
+ },
12
+ guid: function() {
13
+ return this._id++;
14
+ }
15
+ };
16
+
17
+ }).call(this);
@@ -1,6 +1,18 @@
1
1
  require 'rails_blocks/names'
2
2
  require 'rails_blocks/path'
3
3
 
4
+ class RenderContext
5
+ attr_accessor :slots, :rendered_slots
6
+ def initialize
7
+ @slots = {}
8
+ @rendered_slots = {}
9
+ end
10
+
11
+ def slot(name, &block)
12
+ slots[name] = block
13
+ end
14
+ end
15
+
4
16
  module BlockHelper
5
17
  include RailsBlocks::Path
6
18
  include RailsBlocks::Names
@@ -65,12 +77,14 @@ module BlockHelper
65
77
  end
66
78
 
67
79
  def entity(template, type, name, options, &block)
68
- content = block ? capture(&block) : options[:content]
80
+ ctx = RenderContext.new
81
+ content = block ? capture(ctx, &block) : options[:content]
82
+ ctx.slots.each {|k, v| ctx.rendered_slots[k] = capture(&v)}
69
83
  #важно заполнять публичные поля только после того, как закапчюрится то, что внутри энтити, иначе они перезапишутся.
70
84
  @attrs = nil
71
85
  @current_options = options
72
86
  @current_entity = {type: type, name: name}
73
- template.nil? ? empty(content) : render(file: template, locals: {content: content, options: options})
87
+ template.nil? ? empty(content) : render(template: template, locals: {content: content, options: options, slots: ctx.rendered_slots})
74
88
  end
75
89
 
76
90
  def empty(content)
@@ -10,12 +10,14 @@ module RailsBlocks
10
10
  end
11
11
 
12
12
  def self.tree
13
- #so slow, переделать на оновление при запросе, а не каждый раз
14
- #return build_tree if Rails.env.development?
15
13
  @tree ||= (
16
14
  build_tree
17
15
  )
18
16
  end
17
+
18
+ def self.reload_tree
19
+ @tree = build_tree
20
+ end
19
21
 
20
22
  def self.blocks_dir
21
23
  Rails.root.join RailsBlocks.config.blocks_dir
@@ -64,8 +66,11 @@ module RailsBlocks
64
66
  files = Dir["#{blocks_dir}/**/*#{RailsBlocks.config.template_engine}"]
65
67
  files.each do |file|
66
68
  file.sub! blocks_dir.to_s + '/', ''
69
+ file.sub! '.html' + RailsBlocks.config.template_engine, ''
70
+
67
71
  parts = file.split('/')
68
- filename = parts[2].sub RailsBlocks.config.template_engine, ''
72
+ filename = File.basename(file, RailsBlocks.config.template_engine)
73
+ filename = File.basename(filename, '.html')
69
74
  template = {
70
75
  level: parts[0],
71
76
  block: parts[1],
@@ -1,3 +1,3 @@
1
1
  module RailsBlocks
2
- VERSION = "0.7.12".freeze
2
+ VERSION = "0.9.0.beta.1".freeze
3
3
  end
data/lib/rails_blocks.rb CHANGED
@@ -21,4 +21,8 @@ module RailsBlocks
21
21
  def self.reset
22
22
  @config = Configuration.new
23
23
  end
24
+
25
+ def self.reload_tree
26
+
27
+ end
24
28
  end
data/rails_blocks.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'rails', '~> 5.0'
21
+ spec.add_dependency 'rails', ">= 5.2", "< 7.1"
22
22
  #testing
23
23
  spec.add_development_dependency 'combustion', '~> 0.5.5'
24
24
  spec.add_development_dependency 'bundler', '~> 1.7'
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_blocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.12
4
+ version: 0.9.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Potetiurin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-27 00:00:00.000000000 Z
11
+ date: 2023-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '5.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.1'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '5.2'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '5.0'
32
+ version: '7.1'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: combustion
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -151,11 +157,11 @@ files:
151
157
  - LICENSE.txt
152
158
  - README.md
153
159
  - Rakefile
154
- - app/assets/javascripts/bem_blocks.coffee
155
- - app/assets/javascripts/block.coffee
156
- - app/assets/javascripts/jquery.bem_exts.coffee
160
+ - app/assets/javascripts/bem_blocks.js
161
+ - app/assets/javascripts/block.js
162
+ - app/assets/javascripts/jquery.bem_exts.js
157
163
  - app/assets/javascripts/rails_blocks.js
158
- - app/assets/javascripts/utils.coffee
164
+ - app/assets/javascripts/utils.js
159
165
  - app/assets/stylesheets/rails_blocks.sass
160
166
  - app/helpers/block_helper.rb
161
167
  - app/views/rails_blocks/element.slim
@@ -221,12 +227,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
221
227
  version: '0'
222
228
  required_rubygems_version: !ruby/object:Gem::Requirement
223
229
  requirements:
224
- - - ">="
230
+ - - ">"
225
231
  - !ruby/object:Gem::Version
226
- version: '0'
232
+ version: 1.3.1
227
233
  requirements: []
228
- rubyforge_project:
229
- rubygems_version: 2.7.7
234
+ rubygems_version: 3.4.15
230
235
  signing_key:
231
236
  specification_version: 4
232
237
  summary: Rails plugin for work with some modification of BEM methodology
@@ -1,95 +0,0 @@
1
- window.$$ =
2
- decls: {}
3
- cache: {}
4
- bem_class: 'js-bem'
5
- bem_class_selector: ".js-bem"
6
- bemDataKey: 'bem'
7
-
8
- blockInitializationErrorHandler: (e) ->
9
- console.error "Can't initialize block #{name}, check declaration. #{e.name} : #{e.message}"
10
-
11
- processOptions: ($dom, item_name, b_name, o) ->
12
- if o.attrs
13
- for attr, attr_value of o.attrs
14
- $dom.prop(attr, attr_value)
15
- if o.content
16
- $dom.html(o.content)
17
- if o.mix
18
- $dom.addClass($$.mixClass(o.mix))
19
- if o.data
20
- currentData = $dom.data($$.bemDataKey) || {}
21
- currentData[item_name] = o.data
22
- $dom.data($$.bemDataKey, currentData)
23
- if o.elements
24
- for e_name, e_o of o.elements
25
- $$.makeElement($dom, b_name, e_name, e_o)
26
- $dom
27
-
28
- makeDom: (o, klass) ->
29
- o ||= {}
30
- tag = o.tag || 'div'
31
- $("<#{tag}>)").addClass(klass)
32
-
33
- makeElement: ($parent, b_name, e_name, o) ->
34
- item_name = $$.elementClass(b_name, e_name)
35
- $e = @makeDom(o, item_name)
36
- $$.processOptions($e, item_name, b_name, o)
37
- if o.prepend
38
- $parent.prepend $e
39
- else
40
- $parent.append $e
41
- $e
42
-
43
- makeBlock: (b_name, o) ->
44
- item_name = $$.blockClass(b_name)
45
- $b = @makeDom(o, item_name)
46
- $$.processOptions($b, item_name, b_name, o)
47
- $b
48
-
49
- init: ($context) ->
50
- $blocks = $context.find($$.bem_class_selector)
51
- $blocks = $blocks.add($context) if $context.hasClass $$.bem_class
52
- $$.initBlocks($blocks)
53
-
54
- initBlocks: ($context, options) ->
55
- $context.each ->
56
- $node = $(this)
57
- allParams = $node.data($$.bemDataKey)
58
- for own name, params of allParams
59
- continue if name.indexOf('__') != -1
60
- $$.getBlock($node, name, params)
61
-
62
- getBlock: ($b, name, params)->
63
- cacheKey = "#{name}_bid"
64
- bid = $b.data(cacheKey)
65
- if bid
66
- return $$.cache[bid]
67
- try
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
73
- catch e
74
- $$.blockInitializationErrorHandler(e) if $$.blockInitializationErrorHandler
75
-
76
- makeMod: (name, value) ->
77
- mod = name
78
- mod += "_#{value}" if value
79
- mod
80
-
81
- mixClass: (mix) ->
82
- return "#{mix.b}__#{mix.e}" if mix.e
83
- mix.b
84
-
85
- blockModClass: (name, mod, value) ->
86
- "#{name}--#{$$.makeMod(mod, value)}"
87
-
88
- elementModClass: (b_name, e_name, mod, value) ->
89
- "#{$$.elementClass(b_name, e_name)}--#{$$.makeMod(mod, value)}"
90
-
91
- blockClass: (b_name) ->
92
- b_name
93
-
94
- elementClass: (b_name, e_name) ->
95
- "#{b_name}__#{e_name}"
@@ -1,65 +0,0 @@
1
- class window.Block
2
- constructor: ($b, params, name) ->
3
- @$node = $b
4
- @name = name
5
- @id = $$.utils.guid()
6
- @params = params
7
- #$.extend this, decl.methods
8
- @_addEvents() if @events
9
- # if @elements
10
- # for element in @elements
11
- # @_addEvents(element)
12
- @init() if @init
13
-
14
- elem: (e_name, mod_name, mod_value, context = @$node) ->
15
- $elem = $(@elemSelector.apply(@, arguments), context)
16
- $elem.e_name = e_name
17
- $elem.b_name = @name
18
- $elem
19
-
20
- elemSelector: (e_name, mod_name, mod_value) ->
21
- return ".#{$$.elementModClass(@name, e_name, mod_name, mod_value)}" if mod_name
22
- ".#{@_elementClass(e_name)}"
23
-
24
- on: () ->
25
- @$node.on.apply(@$node, arguments)
26
-
27
- _addEvents: (element)->
28
- for event_name, handler of @events
29
- p = event_name.split(' ')
30
- if typeof handler == 'string'
31
- handler = decl.methods[handler]
32
- @$node.on p[0], p[1], handler.bind(@)
33
-
34
- _trigger: (event, data) ->
35
- @$node.trigger event, data
36
-
37
- _elementClass: (e_name) ->
38
- $$.elementClass(@name, e_name)
39
-
40
- addElem: (e_name, o, $parent) ->
41
- o ||= {}
42
- $elem = $$.makeElement($parent || @$node, @name, e_name, o)
43
- $elem.e_name = e_name
44
- $elem.b_name = @name
45
- $elem
46
-
47
- asElem: ($elem, name) ->
48
- $elem.e_name = name
49
- $elem.b_name = @name
50
- $elem
51
-
52
- addMod: (mod, value) ->
53
- @$node.addClass($$.blockModClass(@name, mod, value))
54
-
55
- delMod: (mod, value) ->
56
- @$node.removeClass($$.blockModClass(@name, mod, value))
57
-
58
- toggleMod: (mod, value) ->
59
- if @hasMod(mod, value)
60
- @delMod(mod, value)
61
- else
62
- @addMod(mod, value)
63
-
64
- hasMod: (mod, value) ->
65
- @$node.hasClass($$.blockModClass(@name, mod, value))
@@ -1,56 +0,0 @@
1
- $ ->
2
- $.b = (name) ->
3
- arguments[0] = '.' + name
4
- $.apply(null, arguments)
5
-
6
- originalEq = $.fn.eq;
7
-
8
- $.fn.extend
9
- destroyBlocks: ->
10
- @find($$.bem_class_selector).getBlocks().each ->
11
- @destroy()
12
-
13
- isElem: ->
14
- return true if @e_name
15
- false
16
-
17
- addMod: (name, value) ->
18
- if @isElem()
19
- @addClass($$.elementModClass(@b_name, @e_name, name, value))
20
- else
21
- @addClass($$.blockModClass(@b_name, name, value))
22
-
23
- hasMod: (name, value) ->
24
- if @isElem()
25
- return @hasClass($$.elementModClass(@b_name, @e_name, name, value))
26
- else
27
- return @hasClass($$.blockModClass(@b_name, name, value))
28
-
29
- toggleMod: (mod, value) ->
30
- if @hasMod(mod, value)
31
- @delMod(mod, value)
32
- else
33
- @addMod(mod, value)
34
-
35
- delMod: (name, value) ->
36
- if @isElem()
37
- @removeClass($$.elementModClass(@b_name, @e_name, name, value))
38
- else
39
- @removeClass($$.blockModClass(@b_name, name, value))
40
-
41
- asBlock: (name, o) ->
42
- @addClass("#{name}")
43
- $$.getBlock(@, name, o)
44
-
45
- bemParams: () ->
46
- allParams = @data($$.bemDataKey)
47
- if @isElem()
48
- return allParams[$$.elementClass(@b_name, @e_name)]
49
- else
50
- console.log('Error, only for elements. Use initBlock for blocks.')
51
-
52
- eq: () ->
53
- collection = originalEq.apply(@, arguments)
54
- collection.b_name = @b_name
55
- collection.e_name = @e_name
56
- collection
@@ -1,9 +0,0 @@
1
- window.$$.utils =
2
- _id: 0
3
- camelCase: (input) ->
4
- input.toLowerCase().replace /(^|-)(.)/g, (match, $1, $2) ->
5
- $2.toUpperCase()
6
- dash: (input) ->
7
- input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
8
- guid: () ->
9
- return @_id++