pure-admin-rails 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +131 -0
- data/app/assets/images/menu-fade-left.png +0 -0
- data/app/assets/images/menu-fade-right.png +0 -0
- data/app/assets/images/pending.gif +0 -0
- data/app/assets/javascripts/pure_admin.js +6 -0
- data/app/assets/javascripts/pure_admin/dropdown.js +178 -0
- data/app/assets/javascripts/pure_admin/flash_messages.js +13 -0
- data/app/assets/javascripts/pure_admin/inputs.js +24 -0
- data/app/assets/javascripts/pure_admin/inputs/select.js +21 -0
- data/app/assets/javascripts/pure_admin/main_header.js +21 -0
- data/app/assets/javascripts/pure_admin/main_menu.js +108 -0
- data/app/assets/javascripts/pure_admin/modals.js +228 -0
- data/app/assets/javascripts/pure_admin/partial_refresh.js +92 -0
- data/app/assets/javascripts/pure_admin/portlets.js +139 -0
- data/app/assets/javascripts/pure_admin/tabs.js +14 -0
- data/app/assets/stylesheets/pure_admin.css.scss +23 -0
- data/app/assets/stylesheets/pure_admin/_dropdowns.scss +58 -0
- data/app/assets/stylesheets/pure_admin/_tabs.scss +76 -0
- data/app/assets/stylesheets/pure_admin/auth.css.scss +22 -0
- data/app/assets/stylesheets/pure_admin/breadcrumbs.css.scss +69 -0
- data/app/assets/stylesheets/pure_admin/buttons.css.scss +48 -0
- data/app/assets/stylesheets/pure_admin/details_panels.css.scss +99 -0
- data/app/assets/stylesheets/pure_admin/flash_messages.css.scss +97 -0
- data/app/assets/stylesheets/pure_admin/forms.css.scss +129 -0
- data/app/assets/stylesheets/pure_admin/inputs/select.css.scss +99 -0
- data/app/assets/stylesheets/pure_admin/jquery.tagsinput.css.scss +67 -0
- data/app/assets/stylesheets/pure_admin/main_menu.css.scss +146 -0
- data/app/assets/stylesheets/pure_admin/modals.css.scss +122 -0
- data/app/assets/stylesheets/pure_admin/pagination.css.scss +67 -0
- data/app/assets/stylesheets/pure_admin/portlets.css.scss +154 -0
- data/app/assets/stylesheets/pure_admin/scopes.css.scss +44 -0
- data/app/assets/stylesheets/pure_admin/shell.css.scss +222 -0
- data/app/assets/stylesheets/pure_admin/side_menu.css.scss +70 -0
- data/app/assets/stylesheets/pure_admin/table_filters.css.scss +90 -0
- data/app/assets/stylesheets/pure_admin/tables.css.scss +70 -0
- data/app/assets/stylesheets/pure_admin/tags.css.scss +37 -0
- data/app/assets/stylesheets/pure_admin/utilities.css.scss +24 -0
- data/app/assets/stylesheets/pure_admin/variables.css.scss +38 -0
- data/app/helpers/pure_admin/application_helper.rb +12 -0
- data/app/helpers/pure_admin/button_helper.rb +58 -0
- data/app/helpers/pure_admin/details_panel_helper.rb +121 -0
- data/app/helpers/pure_admin/dropdown_helper.rb +40 -0
- data/app/helpers/pure_admin/menu_helper.rb +120 -0
- data/app/helpers/pure_admin/portlet_helper.rb +75 -0
- data/app/helpers/pure_admin/table_filters_helper.rb +158 -0
- data/app/inputs/addon_input.rb +17 -0
- data/app/inputs/collection_select_input.rb +17 -0
- data/app/inputs/email_input.rb +5 -0
- data/app/inputs/tel_input.rb +5 -0
- data/lib/generators/pure_admin/layout/USAGE +10 -0
- data/lib/generators/pure_admin/layout/layout_generator.rb +8 -0
- data/lib/generators/pure_admin/layout/templates/admin.css.scss +8 -0
- data/lib/generators/pure_admin/layout/templates/admin.html.erb +105 -0
- data/lib/generators/pure_admin/scaffold/USAGE +11 -0
- data/lib/generators/pure_admin/scaffold/scaffold_generator.rb +66 -0
- data/lib/generators/pure_admin/scaffold/templates/_form.html.erb +12 -0
- data/lib/generators/pure_admin/scaffold/templates/_show.html.erb +11 -0
- data/lib/generators/pure_admin/scaffold/templates/_table.html.erb +21 -0
- data/lib/generators/pure_admin/scaffold/templates/models_controller.rb +69 -0
- data/lib/generators/pure_admin/simple_form/USAGE +8 -0
- data/lib/generators/pure_admin/simple_form/simple_form_generator.rb +7 -0
- data/lib/pure-admin-rails.rb +8 -0
- data/lib/pure-admin-rails/version.rb +5 -0
- metadata +261 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
##
|
2
|
+
# Helper methods for dropdown functionality.
|
3
|
+
#
|
4
|
+
# The recommended way of using this helper is
|
5
|
+
#
|
6
|
+
# dropdown 'Tools', class: ''do
|
7
|
+
# dropdown_item :name, 'url', item_html: { class: '' }
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# @note this helper depends {PureAdmin::MenuHelper}
|
11
|
+
module PureAdmin::DropdownHelper
|
12
|
+
##
|
13
|
+
# Renders a dropdown to the view.
|
14
|
+
# @param name (String) the name to display on the main dropdown link.
|
15
|
+
# @param options (Hash) all options that can be passed to the menu_helper as menu_html are
|
16
|
+
# respected here.
|
17
|
+
# @yield The contents for the dropdown
|
18
|
+
def dropdown(name, options = {}, &block)
|
19
|
+
opts = {}
|
20
|
+
opts[:menu_html] = options
|
21
|
+
opts[:menu_html][:class] = merge_html_classes('dropdown pure-menu-horizontal', opts[:class])
|
22
|
+
|
23
|
+
content = capture(&block)
|
24
|
+
content = content_tag(:ul, content, class: 'pure-menu-children')
|
25
|
+
content = content_tag(:li, link_to(name, '', class: 'pure-menu-link') + content,
|
26
|
+
class: 'pure-menu-item pure-menu-has-children')
|
27
|
+
|
28
|
+
menu(opts) { content }
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Renders a dropdown item to the view.
|
33
|
+
# @param name (String) the name to pass to PureAdmin::MenuHelper.menu_item_and_link
|
34
|
+
# @param name (url) the url to pass to PureAdmin::MenuHelper.menu_item_and_link
|
35
|
+
# @param name (Hash) the options to pass to PureAdmin::MenuHelper.menu_item_and_link
|
36
|
+
# @yield the content to pass to PureAdmin::MenuHelper.menu_item_and_link
|
37
|
+
def dropdown_item(name = nil, url = nil, options = nil, &block)
|
38
|
+
menu_item_and_link(name, url, options, &block)
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
|
2
|
+
##
|
3
|
+
# Helper methods to assist in building the Pure Admin menu.
|
4
|
+
module PureAdmin::MenuHelper
|
5
|
+
##
|
6
|
+
# Renders a pure menu wrapper to the view.
|
7
|
+
# @param options (Hash) a container for options to be passed to menus and menu lists.
|
8
|
+
# @param options[:menu_html] (Hash) all options that can be passed to content_tag are respected here.
|
9
|
+
# @param options[:list_html] (Hash) all options that can be passed to content_tag are respected here.
|
10
|
+
# @yield The contents of the menu panel
|
11
|
+
def menu(options = {}, &block)
|
12
|
+
menu_html = options.delete(:menu_html) || {}
|
13
|
+
menu_html[:class] = merge_html_classes('pure-menu', menu_html[:class])
|
14
|
+
|
15
|
+
list_html = options.delete(:list_html) || {}
|
16
|
+
list_html[:class] = merge_html_classes('pure-menu-list', list_html[:class])
|
17
|
+
|
18
|
+
content_tag(:nav, menu_html) do
|
19
|
+
content_tag(:ul, '', list_html, &block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Renders a pure sub-menu to the view.
|
25
|
+
# @param options (Hash) all options that can be passed to content_tag are respected here.
|
26
|
+
# @yield The contents of the menu panel
|
27
|
+
def sub_menu(options = {}, &block)
|
28
|
+
options[:class] = merge_html_classes('pure-menu-list sub-menu', options[:class])
|
29
|
+
content_tag(:ul, '', options, &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Renders a "menu link" to the view.
|
34
|
+
# @param name (String, Symbol)
|
35
|
+
# @param url (String, Array)
|
36
|
+
# @param options (Hash) all options that can be passed to link_to are respected here.
|
37
|
+
def menu_link(name = nil, url = nil, options = nil, &block)
|
38
|
+
options, url, name = url, name, capture(&block) if block_given?
|
39
|
+
options ||= {}
|
40
|
+
|
41
|
+
name = name.to_s.titleize unless block_given? || name.respond_to?(:titleize)
|
42
|
+
|
43
|
+
options[:class] = merge_html_classes('pure-menu-link', options[:class])
|
44
|
+
|
45
|
+
url.present? ? link_to(name, url, options) : content_tag(:span, name, options)
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Renders a "menu item" to the view.
|
50
|
+
# @param options (Hash) all options that can be passed to content_tag are respected here.
|
51
|
+
def menu_item(options = {}, &block)
|
52
|
+
options[:class] = merge_html_classes('pure-menu-item', options[:class])
|
53
|
+
options[:class] << 'current' if options.delete(:current)
|
54
|
+
|
55
|
+
condition = options.key?(:if) ? options.delete(:if) : true
|
56
|
+
condition = !options.delete(:unless) if options.key?(:unless)
|
57
|
+
|
58
|
+
content_tag(:li, capture(&block), options) if condition
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Renders a "menu item" and "menu link" to the view.
|
63
|
+
# @param name (String, Symbol)
|
64
|
+
# @param url (String, Array)
|
65
|
+
# @param options (Hash) a container for options to be passed to menu items and links.
|
66
|
+
# @param options[:item_html] (Hash) all options that can be passed to content_tag are respected here.
|
67
|
+
# @param options[:link_html] (Hash) all options that can be passed to link_to are respected here.
|
68
|
+
def menu_item_and_link(name = nil, url = nil, options = nil, &block)
|
69
|
+
options, url, name = url, name, capture(&block) if block_given?
|
70
|
+
options ||= {}
|
71
|
+
|
72
|
+
item_html = options.delete(:item_html) || {}
|
73
|
+
item_html[:class] = merge_html_classes('pure-menu-item', item_html[:class])
|
74
|
+
item_html[:if] = options[:if] if options.key?(:if)
|
75
|
+
item_html[:unless] = options[:unless] if options.key?(:unless)
|
76
|
+
item_html[:current] = true if current_menu_item?(url)
|
77
|
+
|
78
|
+
link_html = options.delete(:link_html) || {}
|
79
|
+
|
80
|
+
menu_item(item_html) do
|
81
|
+
menu_link(name, url, link_html)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
##
|
86
|
+
# Check if the menu item is currently active
|
87
|
+
# @param url (String) the menu item's URL.
|
88
|
+
def current_menu_item?(url)
|
89
|
+
return false unless url
|
90
|
+
|
91
|
+
begin
|
92
|
+
menu_item_path = URI.parse(url).try(:path)
|
93
|
+
rescue
|
94
|
+
menu_item_path = nil
|
95
|
+
end
|
96
|
+
|
97
|
+
return false unless menu_item_path
|
98
|
+
|
99
|
+
# only match roots on exact match
|
100
|
+
return request.original_fullpath == menu_item_path
|
101
|
+
end
|
102
|
+
|
103
|
+
##
|
104
|
+
# Check if the menu item is currently active. Is active if it is parent or current.
|
105
|
+
# @param url (String) the menu item's URL.
|
106
|
+
def current_parent?(url)
|
107
|
+
return false unless url
|
108
|
+
|
109
|
+
begin
|
110
|
+
menu_item_path = URI.parse(url).try(:path)
|
111
|
+
rescue
|
112
|
+
menu_item_path = nil
|
113
|
+
end
|
114
|
+
|
115
|
+
return false unless menu_item_path
|
116
|
+
|
117
|
+
# match all other items to start of original_fullpath
|
118
|
+
return request.original_fullpath =~ /^#{Regexp.escape(menu_item_path)}(\/|$)/
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
##
|
2
|
+
# Helper methods to assist in building Pure Admin portlets.
|
3
|
+
module PureAdmin::PortletHelper
|
4
|
+
##
|
5
|
+
# Renders a "portlet" to the view.
|
6
|
+
# @param title (String)
|
7
|
+
# @param options (Hash) a container for options to the portlet.
|
8
|
+
# @param options[:portlet_html] (Hash) all options that can be passed to content_tag are respected here.
|
9
|
+
# @param options[:heading_html] (Hash) all options that can be passed to content_tag are respected here.
|
10
|
+
# @param options[:body_html] (Hash) all options that can be passed to content_tag are respected here.
|
11
|
+
# @yield The contents of the portlet
|
12
|
+
def portlet(title, options = {}, &block)
|
13
|
+
portlet_html = options[:portlet_html] || {}
|
14
|
+
portlet_html[:class] = ['portlet clear-fix', portlet_html[:class]]
|
15
|
+
portlet_html[:data] ||= {}
|
16
|
+
portlet_html[:data][:source] = options[:source] unless block_given?
|
17
|
+
|
18
|
+
heading_html = options.delete(:heading_html) || {}
|
19
|
+
heading_html[:class] = merge_html_classes('portlet-heading', heading_html[:class])
|
20
|
+
|
21
|
+
body_html = options.delete(:body_html) || {}
|
22
|
+
body_html[:class] = merge_html_classes('portlet-body clear-fix', body_html[:class])
|
23
|
+
|
24
|
+
if options[:icon]
|
25
|
+
icon = content_tag(:i, nil, class: "portlet-heading-icon fa fa-fw fa-#{options[:icon].to_s.dasherize}")
|
26
|
+
end
|
27
|
+
|
28
|
+
# This determines if the portlet can be closed. If it is remote it can be closed. If not,
|
29
|
+
# it is determined by the presence of expand in the options.
|
30
|
+
# e.g. <%= portlet 'A title', expand: true do %>...
|
31
|
+
closable = options.key?(:source) || options.key?(:expand)
|
32
|
+
|
33
|
+
portlet_html[:data][:closable] = closable
|
34
|
+
|
35
|
+
controls_content = ''.html_safe
|
36
|
+
controls = options.delete(:controls)
|
37
|
+
if controls.present?
|
38
|
+
if controls.respond_to?(:each)
|
39
|
+
controls.each do |control|
|
40
|
+
controls_content << content_tag(:span, control, class: 'portlet-control-item')
|
41
|
+
end
|
42
|
+
else
|
43
|
+
controls_content << content_tag(:span, controls, class: 'portlet-control-item')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if closable
|
48
|
+
controls_content << content_tag(:span, nil, class: 'portlet-indicator')
|
49
|
+
end
|
50
|
+
|
51
|
+
if controls_content.present?
|
52
|
+
controls_wrapper = content_tag(:div, controls_content, class: 'portlet-controls')
|
53
|
+
end
|
54
|
+
|
55
|
+
# This determines if the portlet should be expanded by default. If it is explicitly given that
|
56
|
+
# takes precedence. If not, by default all remote portlets are not expanded and all static
|
57
|
+
# portlets are.
|
58
|
+
expand = options.key?(:expand) ? options[:expand] : block_given?
|
59
|
+
|
60
|
+
if expand
|
61
|
+
portlet_html[:class] << 'expanded'
|
62
|
+
portlet_html[:data][:expand] = true
|
63
|
+
end
|
64
|
+
|
65
|
+
heading_content = content_tag(:div, heading_html) do
|
66
|
+
(icon || ''.html_safe) + content_tag(:h4, title) + (controls_wrapper || ''.html_safe)
|
67
|
+
end
|
68
|
+
|
69
|
+
body_content = content_tag(:div, (capture(&block) if block_given?), body_html)
|
70
|
+
|
71
|
+
content_tag(:div, portlet_html) do
|
72
|
+
heading_content + body_content
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
##
|
2
|
+
# Helper methods for table filters functionality.
|
3
|
+
#
|
4
|
+
# The recommended way of using this helper is
|
5
|
+
#
|
6
|
+
# filters_for admin_members_path do |filter|
|
7
|
+
# filter.on :query the default is a text field
|
8
|
+
# filter.on :answer, options: %w(Yes No) if given an options hash, a select will be used
|
9
|
+
# filter.on :status, as: :active_status when given :active_status it will use the options
|
10
|
+
# All, Active, and Inactive and the default of
|
11
|
+
# Active. However these can be overridden by
|
12
|
+
# :options and :default respectively.
|
13
|
+
# filter.on :starts_on, as: :date when given :date, it will enable the pure_date
|
14
|
+
# input type
|
15
|
+
# end
|
16
|
+
module PureAdmin::TableFiltersHelper
|
17
|
+
##
|
18
|
+
# Renders the table filters form to the view.
|
19
|
+
# @param path (String) the path for the form_tag
|
20
|
+
# @param options (Hash) all options that can be passed to form_tag are respected here.
|
21
|
+
# @yield The contents for the table filters
|
22
|
+
def table_filters(path, options = {}, &block)
|
23
|
+
options[:class] = merge_html_classes('pure-form pure-form-stacked table-filters
|
24
|
+
js-partial-refresh clear-fix', options[:class])
|
25
|
+
|
26
|
+
options[:remote] = false || options[:remote]
|
27
|
+
options[:method] ||= :get
|
28
|
+
|
29
|
+
content = capture(&block)
|
30
|
+
|
31
|
+
if content
|
32
|
+
content << content_tag(:div, submit_tag('Go', class: 'pure-button pure-button-primary'),
|
33
|
+
class: 'filter-group filter-submit')
|
34
|
+
content << hidden_field_tag(:sort, params[:sort])
|
35
|
+
content << hidden_field_tag(:reverse_order, params[:reverse_order])
|
36
|
+
|
37
|
+
form_tag path, options do
|
38
|
+
content
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Renders a table filter item to the view.
|
45
|
+
# @param attribute (String, Symbol)
|
46
|
+
# @param options (Hash)
|
47
|
+
# @options options (Symbol) :type the type of field to display
|
48
|
+
# @options options (Hash) :options the select options for select inputs
|
49
|
+
# @options options (String) :default the default select option for select inputs
|
50
|
+
# @options options (Hash) :input_html any data contained within this hash will be passed to
|
51
|
+
# the appropriate *_tag method
|
52
|
+
# @options options (Boolean, String) :label the text to display as a label if a string. If false,
|
53
|
+
# this will prevent the label from being shown
|
54
|
+
# @options options (Hash) :label_html any data contained within this hash will be passed to
|
55
|
+
# the content_tag builder for the label
|
56
|
+
# @yield The contents of the table filter with the label (unless options[:label] is false)
|
57
|
+
def table_filter_item(attribute, options = {}, &block)
|
58
|
+
if block_given?
|
59
|
+
field = capture(&block)
|
60
|
+
else
|
61
|
+
type = options.delete(:as) || :string
|
62
|
+
|
63
|
+
# If we're given an options array, we assume it to be a select filter.
|
64
|
+
# This allows for more concise code in the form
|
65
|
+
# table_filter_item :status, options: %w(Yes No)
|
66
|
+
# or
|
67
|
+
# filter.on :status, options %W(Yes No)
|
68
|
+
type = :select if options[:options].present?
|
69
|
+
|
70
|
+
# We define the :active_status type to shortcut a common filter type.
|
71
|
+
if type == :active_status
|
72
|
+
type = :select
|
73
|
+
options[:options] ||= %w(All Active Inactive)
|
74
|
+
options[:default] ||= 'Active'
|
75
|
+
end
|
76
|
+
|
77
|
+
input_html = options.delete(:input_html) || {}
|
78
|
+
input_html[:class] = merge_html_classes('filter-control', input_html[:class])
|
79
|
+
|
80
|
+
# Defaulting to a simple text field, we choose which field to output here.
|
81
|
+
# @note if at some point we wish to add a new field type, here is the place to add it
|
82
|
+
case type
|
83
|
+
when :select
|
84
|
+
options[:options] ||= []
|
85
|
+
field = select_tag(attribute,
|
86
|
+
options_for_select(options[:options], params[attribute.to_sym] || options[:default]),
|
87
|
+
input_html)
|
88
|
+
when :date
|
89
|
+
input_html[:class] = merge_html_classes('pure-admin-date', input_html[:class])
|
90
|
+
field = text_field_tag(attribute, params[attribute.to_sym], input_html)
|
91
|
+
icon = content_tag(:span, nil, class: 'input-addon fa fa-fw fa-calendar')
|
92
|
+
field = content_tag(:div, icon + field, class: 'addon-wrapper')
|
93
|
+
else # :string
|
94
|
+
field = text_field_tag(attribute, params[attribute.to_sym], input_html)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
label = ''.html_safe
|
99
|
+
if options[:label] != false
|
100
|
+
label_html = options.delete(:label_html) || {}
|
101
|
+
label_text = options.delete(:label) || attribute.to_s.titleize
|
102
|
+
label = label_tag(attribute, label_text, label_html)
|
103
|
+
end
|
104
|
+
|
105
|
+
content_tag(:div, label + field, class: 'filter-group')
|
106
|
+
end
|
107
|
+
|
108
|
+
##
|
109
|
+
# Renders a table filters section to the view using the table filter builder DSL.
|
110
|
+
# @param resource (ActiveRecord::Base) the model instance to build the table filters for.
|
111
|
+
# @param options (Hash) all options that can be passed to content_tag are respected here.
|
112
|
+
# @yield The contents of the table filters section
|
113
|
+
def filters_for(path, options = {}, &block)
|
114
|
+
builder = TableFiltersBuilder.new(self)
|
115
|
+
table_filters(path, options) do
|
116
|
+
capture(builder, &block)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
##
|
121
|
+
# Allows building of table filters using a custom DSL.
|
122
|
+
#
|
123
|
+
# <%= filters_for resources_path do |filter| %>
|
124
|
+
# <%= filter.on :query %>
|
125
|
+
# <% end %>
|
126
|
+
class TableFiltersBuilder
|
127
|
+
##
|
128
|
+
# Creates an instance of TableFiltersBuilder
|
129
|
+
# @param helper (ApplicationHelper) instance of application helper to allow access to view helpers.
|
130
|
+
# @yield instance of TableFiltersBuilder
|
131
|
+
def initialize(helper)
|
132
|
+
@helper = helper
|
133
|
+
end
|
134
|
+
|
135
|
+
##
|
136
|
+
# Renders a table_filter_item inside the table_filters using a custom DSL.
|
137
|
+
#
|
138
|
+
# @param attribute (Symbol) the attribute on the resource
|
139
|
+
# @param options (Hash) all options that can be passed to content_tag are respected here.
|
140
|
+
# @yield The contents of the details panel item
|
141
|
+
def on(attribute, options = {}, &block)
|
142
|
+
if block_given?
|
143
|
+
helper.table_filter_item(attribute, options, &block)
|
144
|
+
else
|
145
|
+
helper.table_filter_item(attribute, options)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
##
|
152
|
+
# Access view helpers within the details panel builder
|
153
|
+
# @yield instance of ApplicationHelper
|
154
|
+
def helper
|
155
|
+
@helper
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
##
|
2
|
+
# Overrides the :email input type to add a default prefix.
|
3
|
+
class AddonInput < SimpleForm::Inputs::StringInput
|
4
|
+
extend PureAdmin::ApplicationHelper
|
5
|
+
|
6
|
+
def icon
|
7
|
+
if options[:icon].present?
|
8
|
+
template.content_tag(:span, nil, class: ['input-addon', 'fa', 'fa-fw', options[:icon]])
|
9
|
+
else
|
10
|
+
''
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def input(wrapper_options = nil)
|
15
|
+
icon + super(wrapper_options)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
##
|
2
|
+
# Overrides SimpleForm's default CollectionSelectInput to add a class.
|
3
|
+
# This class is then used to initialise Select2 on all collection select inputs.
|
4
|
+
class CollectionSelectInput < SimpleForm::Inputs::CollectionSelectInput
|
5
|
+
def input_html_classes
|
6
|
+
super.push('pure-admin-select')
|
7
|
+
end
|
8
|
+
|
9
|
+
def input_html_options
|
10
|
+
super.deep_merge(
|
11
|
+
style: 'width: 100%;',
|
12
|
+
data: {
|
13
|
+
tags: options[:create_when_no_match] || false
|
14
|
+
}
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|