module Poodle module ActionView # This module creates Bootstrap wrappers around basic View Tags module ThemeHelper # theme_fa_icon('plus') # # theme_fa_icon('plus', 'lg') # 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 def theme_button_text(text) " #{text}" end # theme_button is used to create poodle like 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 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') #
#
Manage Projects
#
def theme_heading(heading, icon='') content_tag :div, class: "row mb-10" do content_tag :div, class: "fs-22 col-sm-12" do raw((icon ? theme_fa_icon(icon, 'lg') : "") + " #{heading}") end end end # theme_search_form is a helper to create a form to filter the results by entering a search query def theme_search_form(cls, url, method=:get, remote=true, text="Search!", placeholder="Search ...") form_for cls.new, :url => url, :method => method, :remote=>remote, :html=>{:class=>"pull-right", :style=>"margin-bottom:0px;"} do |f| content_tag :div, class: "input-group" do text_field_tag('query','', :class => 'form-control', :placeholder => placeholder) + content_tag(:span, class: "input-group-btn") do button_tag(type: 'submit', class: "btn btn-default") do raw(theme_fa_icon('search') + content_tag(:span, class: "btn-text") do " " + text end) end end end end end def theme_drop_down(collection, method_name, **options) options.reverse_merge!( 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("Choose a Project" + 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_paginate(@projects) # # is equivalent to: # --------------------------- #
# <% if @projects.any? %> # <%= content_tag :div, :class=>"pull-right" do %> # <%= paginate @projects, :remote => true %> # <% end %> # <% end %> #
# --------------------------- def theme_paginate(collection) return "" if collection.empty? clear_tag(10) + content_tag(:div, :class=>"pull-right") do paginate(collection, :remote => true) end + clear_tag(10) 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;") 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.client.name) # # is equivalent to: # --------------------------- #
<%= project.client.name if project.client %>
def theme_item_sub_title(text, classes = "text-color-red fs-14") content_tag(:div, text, class: classes) end # Example # theme_item_description(project.client.name, 120) # # is equivalent to: # --------------------------- #
<%= project.client.description %>
def theme_item_description(text, limit=120, classes = "text-color-grey fs-12") description = scrap_word(text, limit) content_tag(:div, description, class: classes) end def theme_detail_box(collection, **options) options.reverse_merge!( show_partial: "show", new_partial: "form", edit_partial: "form", index_partial: "show", ) case params[:action] when "show" render partial: options[:show_partial] when "new" render partial: options[:new_partial] when "edit" render partial: options[:edit_partial] when "index" collection.empty? ? (theme_panel_message(I18n.translate("forms.no_results"))) : render(partial: options[:index_partial]) else theme_panel_message(I18n.translate("forms.no_results")) end end # Example # theme_more_widget(object, data_columns=[:id, :created_at, :updated_at], super_admin = true) # is equivalent to: # --------------------------- # <% if @current_user.is_super_admin? %> # <%= render :partial => "widgets/more_details", :locals=>{ # :data_model => @project, # :data_columns => [:id, :created_at, :updated_at], # :heading => "Technical Details", # :display_footer => false} %> # <% end %> def theme_more_widget(object, **options) options.reverse_merge!( data_columns: [:id, :created_at, :updated_at], super_admin: false, heading: "Technical Details" ) display = options[:super_admin] ? @current_user.is_super_admin? : true render(:partial => "widgets/more_details", :locals=>{:data_model => object, :data_columns => options[:data_columns], :heading => options[:heading], :display_footer => false}) if display 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_client_path(@project.client)) # is equivalent to: # --------------------------- # link_to(@project.client.name, admin_client_path(@project.client), 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 end end end