module Kuppayam
module ActionView
# This module creates Bootstrap wrappers around basic View Tags
module ThemeHelper
# theme_fa_icon('plus')
#
# theme_fa_icon('plus', 'lg')
#
# TBR: To Be Removed
def theme_fa_icon(icon_text, size="")
size_class = %w{lg 2x 3x 4x 5x}.include?(size.strip) ? " fa-#{size.strip}" : ""
""
end
# theme_button_text('New Project')
# New Project
# TBR: To Be Removed
def theme_button_text(text)
" #{text}"
end
# theme_button is used to create buttons which has built in classes and icons
# e.g:
# theme_button('New Project', 'plus', new_admin_project_path)
# The above is equivalent to
# link_to raw(" New Project"), new_admin_project_path, :class=>"btn btn-primary pull-right ml-5", :remote=>true
# And produces the following html
# New Project
# TBR: To Be Removed
def theme_button(text, icon, url, options={})
options.reverse_merge!(
method: :get,
remote: true,
btn_type: :primary,
btn_size: :md,
classes: "pull-right ml-5 mb-5",
data: {}
)
display_content = raw(theme_fa_icon(icon)+theme_button_text(text))
link_to(display_content, url, :class=>"btn btn-#{options[:btn_type]} btn-#{options[:btn_size]} #{options[:classes]}", :remote=>options[:remote], method: options[:method], data: options[:data])
end
# Example
# theme_edit_button(edit_admin_project_path(@project))
# is equivalent to:
# ---------------------------
# link_to raw(" Edit"), edit_admin_project_path(@project), :class=>"btn btn-default btn-xs pull-right ml-10", :remote=>true %>
def theme_edit_button(url, options={})
options.reverse_merge!(
text: "Edit",
icon: "edit",
method: :get,
remote: true,
btn_type: :default,
btn_size: :xs,
classes: "pull-right ml-10"
)
theme_button(options[:text], options[:icon], url, options)
end
# Example
# theme_delete_button(admin_project_path(@project))
# is equivalent to:
# ---------------------------
# link_to raw(" Delete"), admin_project_path(@project), method: :delete, data: { confirm: 'Are you sure?' }, :class=>"btn btn-danger btn-xs pull-right", :remote=>true
def theme_delete_button(url, options={})
options.reverse_merge!(
text: "Delete",
icon: "trash",
method: :delete,
remote: true,
btn_type: :danger,
btn_size: :xs,
classes: "pull-right ml-10",
data: { confirm: 'Are you sure?' }
)
theme_button(options[:text], options[:icon], url, options)
end
# theme_heading(heading)
# theme_heading(heading, icon='cog')
#
def theme_heading(heading, **options)
options.reverse_merge!(
icon: '',
row_class: "",
col_class: ""
)
content_tag :div, class: "row mb-10 #{options[:row_class]}" do
content_tag :div, class: "fs-22 col-sm-12 #{options[:col_class]}" do
raw((options[:icon].blank? ? '' : theme_fa_icon(options[:icon], 'lg')) + " #{heading}")
end
end
end
def theme_drop_down(collection, method_name, **options)
options.reverse_merge!(
text: "Click to View Items",
scope: :admin
)
content_tag(:div, class: "btn-group mt-10 mb-10", style: "width:100%;") do
button_tag(type: 'button', :class => "btn btn-default btn-block dropdown-toggle", "data-toggle" => "dropdown") do
raw(options[:text] + content_tag(:span, "", class: "caret"))
end +
content_tag(:ul, class: "dropdown-menu", role: "menu") do
li_array = []
collection.each do |item|
li_array << content_tag(:li) do
url = main_app.url_for([options[:scope], item])
link_to item.send(method_name), url, :remote => true
end
end
raw(li_array.join(" ")) +
content_tag(:li, link_to_next_page(collection, 'Next Page', :remote => true)) +
content_tag(:li, link_to_previous_page(collection, 'Previous Page', :remote => true))
end
end
end
def clear_tag(height=nil)
height_class = height ? " cl-#{height}" : ""
content_tag(:div, "", class: "clearfix#{height_class}")
end
# Example
# theme_panel_message("No Results found")
#
# is equivalent to:
# ---------------------------
#
# "No Results found"
#
def theme_panel_message(message)
content_tag(:div, class: "panel panel-default panel-message text-color-grey p-80 text-align-center", style: "height:200px;width:100%;") do
raw(message)
end
end
# Example
# theme_panel_title("Team Members")
#
# is equivalent to:
# ---------------------------
# Team Members
def theme_panel_title(title, classes="")
content_tag(:h3, title, class: "panel-title #{classes}")
end
# Example
# theme_item_title(project.name, admin_project_path(project))
#
# is equivalent to:
# ---------------------------
# <%= link_to project.name, admin_project_path(project), :remote=>true, :class=>"text-color-blue fs-16" %>
def theme_item_title(title, url, classes = "text-color-blue fs-16", remote=true)
link_to(title, url, :remote=>remote, :class=>classes)
end
# Example
# theme_item_sub_title(project.customer.name)
#
# is equivalent to:
# ---------------------------
# <%= project.customer.name if project.customer %>
def theme_item_sub_title(text, classes = "text-color-red fs-14")
content_tag(:div, text, class: classes)
end
# Example
# theme_item_description(project.customer.name, 120)
#
# is equivalent to:
# ---------------------------
# <%= project.customer.description %>
def theme_item_description(text, limit=120, classes = "text-color-grey fs-12")
description = truncate(text, limit: limit)
content_tag(:div, description, class: classes)
end
# Example
# theme_panel_heading(@project.name)
# is equivalent to:
# ---------------------------
# <%= @project.name %>
def theme_panel_heading(text, classes="fs-24 text-color-green")
content_tag(:div, text, class: classes)
end
# Example
# theme_panel_sub_heading(@project.name, admin_customer_path(@project.customer))
# is equivalent to:
# ---------------------------
# link_to(@project.customer.name, admin_customer_path(@project.customer), class: "fs-16 text-color-red")
def theme_panel_sub_heading(text, url, classes="fs-16 text-color-red")
link_to(text, url, class: classes)
end
# Example
# theme_panel_description(@project.pretty_url, "fs-14")
# theme_panel_description(@project.description, "fs-14 mt-10")
# is equivalent to:
# ---------------------------
# <%= @project.pretty_url %>
# <%= @project.description %>
def theme_panel_description(text, classes="fs-14")
content_tag(:div, text, class: classes)
end
def drop_down_filter(text, items, **options)
options.reverse_merge!(
color: "white",
remote: false
)
content_tag(:div, class: "btn-group") do
content_tag(:button, text, class: "btn btn-#{options[:color]}", type: :button) +
content_tag(:button, class: "btn btn-#{options[:color]} dropdown-toggle", type: :button, "data-toggle": "dropdown", "aria-haspopup": "true", "aria-expanded": "false") do
content_tag(:span, "", class: "caret") +
content_tag(:span, "Toggle Dropdown", class: "sr-only")
end +
content_tag(:ul, class: "dropdown-menu") do
items.collect {|item, link| concat(content_tag(:li, link_to(item, link, remote: options[:remote])))}
end
end
end
end
end
end