module Bemonrails::BemRenderHelper

Public Instance Methods

block(b_name, builder={}) click to toggle source
# 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() click to toggle source
# File lib/bem-on-rails/bem_render_helper.rb, line 101
def content
    render "bemonrails/essences/content"
end
create_ctx(builder={}) click to toggle source
# 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) click to toggle source
# 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={}) click to toggle source
# 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() click to toggle source
# File lib/bem-on-rails/bem_render_helper.rb, line 93
def empty
    "<div class=#{ @this[:attrs][:class] }></div>".html_safe
end
resolve_ctx() click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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() click to toggle source
# File lib/bem-on-rails/bem_render_helper.rb, line 97
def this
    @this
end
update_ctx(essence, name) click to toggle source
# 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