Module: Bemonrails::BemRenderHelper
- Includes:
- BemNames
- Defined in:
- lib/bem-on-rails/bem_render_helper.rb
Instance Method Summary
collapse
Methods included from BemNames
#build_b, #build_def, #build_e, #build_m, #generate_klass, #path_e, #path_l, #path_m, #path_resolve, #resolve_essence, #template_exists?
Instance Method Details
#block(b_name, builder = {}) ⇒ Object
5
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 5
def block(b_name, builder={})
unless b_name.blank?
builder[:block] = b_name
path = File.join path_resolve(:block, builder, false)
target = File.join path, build_b(b_name)
create_ctx builder
update_ctx :block, b_name
resolve_ctx
template_exists?(target) ? render(file: target) : empty
end
end
|
#content ⇒ Object
101
102
103
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 101
def content
render "bemonrails/essences/content"
end
|
#create_ctx(builder = {}) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 30
def create_ctx(builder={})
@this = {}
BEM[:attrs].each do |mod|
if builder[mod]
@this[mod] = builder[mod]
builder = builder.except(mod)
end
end
@this[:ctx] = builder
@this[:bem] ||= true
@this[:attrs] ||= {}
@this[:tag] ||= :div
end
|
#dom_class(essence, classes_array) ⇒ Object
83
84
85
86
87
88
89
90
91
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 83
def dom_class(essence, classes_array)
if essence[:block] && essence[:elem]
classes_array.push(build_e(essence[:block], essence[:elem]))
resolve_mods(essence[:elemMods], classes_array, essence[:block], essence[:elem])
elsif essence[:block]
classes_array.push(build_b(essence[:block]))
resolve_mods(essence[:mods], classes_array, essence[:block])
end
end
|
#elem(e_name, builder = {}) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 17
def elem(e_name, builder={})
unless e_name.blank?
builder[:block] = this[:block]
builder[:element] = e_name
path = File.join path_resolve(:element, builder, false)
target = File.join path, build_e(this[:block], e_name)
create_ctx builder
update_ctx :element, e_name
resolve_ctx
template_exists?(target) ? render(file: target) : empty
end
end
|
#empty ⇒ Object
93
94
95
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 93
def empty
"<div class=#{ @this[:attrs][:class] }></div>".html_safe
end
|
#resolve_ctx ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 56
def resolve_ctx
classes_array = []
if this[:bem]
dom_class(this, classes_array)
resolve_mixes(this[:mix], classes_array)
else
classes_array.push(this[:elem] ? this[:elem] : this[:block])
end
this[:attrs].merge!({class: [classes_array, this[:cls]].join(" ").strip!})
end
|
#resolve_mixes(mixs, classes_array) ⇒ Object
76
77
78
79
80
81
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 76
def resolve_mixes(mixs, classes_array)
mixs = mixs || {}
mixs.each do |mix|
generate_class(mix, classes_array)
end
end
|
#resolve_mods(mods, classes_array, bl, el = false) ⇒ Object
69
70
71
72
73
74
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 69
def resolve_mods(mods, classes_array, bl, el=false)
mods = mods || {}
mods.each do |m, v|
classes_array.push(build_m(build_b(bl), el ? build_e(bl, el) : nil, m.to_s, v))
end
end
|
#this ⇒ Object
97
98
99
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 97
def this
@this
end
|
#update_ctx(essence, name) ⇒ Object
46
47
48
49
50
51
52
53
54
|
# File 'lib/bem-on-rails/bem_render_helper.rb', line 46
def update_ctx(essence, name)
case essence
when :block
@this[:block] = @block_buffer = name
when :element
@this[:block] = @block_buffer
@this[:elem] = name
end
end
|