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

#contentObject



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

#emptyObject



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_ctxObject



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

#thisObject



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