lotus_admin 0.2.4 → 0.3.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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -0
  3. data/app/assets/javascripts/lotus_admin/application.js +5 -0
  4. data/app/assets/javascripts/lotus_admin/datepickers.js.coffee +31 -0
  5. data/app/assets/javascripts/lotus_admin/filters.js.coffee +17 -0
  6. data/app/assets/stylesheets/lotus_admin/application.css.scss +1 -0
  7. data/app/assets/stylesheets/lotus_admin/components/_all.scss +2 -0
  8. data/app/assets/stylesheets/lotus_admin/components/_datepicker.scss +28 -0
  9. data/app/assets/stylesheets/lotus_admin/components/_filters.scss +5 -0
  10. data/app/assets/stylesheets/lotus_admin/components/_forms.scss +4 -0
  11. data/app/controllers/concerns/lotus_admin/exposure.rb +6 -4
  12. data/app/controllers/concerns/lotus_admin/filterable_controller.rb +40 -0
  13. data/app/controllers/concerns/lotus_admin/resourceful_controller.rb +17 -0
  14. data/app/controllers/lotus_admin/application_controller.rb +3 -0
  15. data/app/controllers/lotus_admin/authenticated_controller.rb +2 -0
  16. data/app/helpers/lotus_admin/filter_helpers.rb +23 -0
  17. data/app/helpers/lotus_admin/form_helpers.rb +7 -3
  18. data/app/helpers/lotus_admin/render_helpers.rb +7 -0
  19. data/app/inputs/date_picker_input.rb +28 -0
  20. data/app/models/lotus_admin/filters/configuration.rb +201 -0
  21. data/app/views/lotus_admin/shared/_index.html.haml +16 -0
  22. data/app/views/lotus_admin/shared/filters/_modal.html.haml +17 -0
  23. data/app/views/lotus_admin/shared/filters/_results_banner.html.haml +6 -0
  24. data/config/locales/filters.en.yml +7 -0
  25. data/lib/lotus_admin/configuration.rb +6 -0
  26. data/lib/lotus_admin/version.rb +1 -1
  27. data/lib/lotus_admin.rb +4 -0
  28. metadata +86 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a814142b8f422254f1effaec6c0bbd77268e9c00
4
- data.tar.gz: 6ddd82547ec5dc69cc72a8e03825028495a22053
3
+ metadata.gz: 8228038c5b61febcfeee7306c78be057b48d0da9
4
+ data.tar.gz: 8a1720486228e5de812f47457e477b9db4a4baf5
5
5
  SHA512:
6
- metadata.gz: 85e1e97d18fa218fe04f87713cb06420f8d3b18deef112248d43efaf76ad4dc700f499b1406750743978acaa9fd45cf2bdc1022b66d76b7dcdcbd5721d146474
7
- data.tar.gz: e911baa026266b783824c1b441c27083e1710a46f41286a09ee146bec3598d7ad32f4ca5b147008cc1eb28721e38cf2e698c0d441c71cbd1d724bda0c4e0945e
6
+ metadata.gz: d1c9914c1ad413b283116277377eb0bb5997e04d81f6fb4f134f69794890733eeb66171275b220c1636967dc2eb3a7701871676264c20094326e28eaf522f3f5
7
+ data.tar.gz: 8a87778cdc9b1dab765577060bbbc68b1617716ae1c65011e6ff6a43257fd3b51b8ddf4d9f51bd2a49a00da99ccbbe3b7e7e7abe7bf0a529b79e5859d64b4654
data/README.md CHANGED
@@ -20,6 +20,15 @@ You will need to define these secrets.
20
20
 
21
21
  ### Setup
22
22
 
23
+ Manually configure ranack to use simple form, before rails boots.
24
+ ```ruby
25
+ # config/application.rb
26
+ require_relative 'boot'
27
+ ENV['RANSACK_FORM_BUILDER'] = '::SimpleForm::FormBuilder'
28
+
29
+ require 'rails/all'
30
+ ```
31
+
23
32
  ```ruby
24
33
  # Gemfile
25
34
  gem 'lotus_admin', '~> 0.1.0'
@@ -1,5 +1,10 @@
1
1
  //= require jquery
2
2
  //= require jquery_ujs
3
3
  //= require bootstrap-sprockets
4
+ //= require moment
5
+ //= require bootstrap-datetimepicker
4
6
 
5
7
  //= require lotus_admin/theme/app
8
+
9
+ //= require lotus_admin/filters
10
+ //= require lotus_admin/datepickers
@@ -0,0 +1,31 @@
1
+ $ ->
2
+ icons = {
3
+ time: 'fa fa-clock-o',
4
+ date: 'fa fa-calendar',
5
+ up: 'fa fa-arrow-up',
6
+ down: 'fa fa-arrow-down',
7
+ previous: 'fa fa-arrow-left',
8
+ next: 'fa fa-arrow-right',
9
+ today: 'fa fa-home',
10
+ clear: 'fa fa-trash',
11
+ close: 'fa fa-remove'
12
+ }
13
+
14
+ setup_datepickers = (container)->
15
+ container.find('.input-group.date, .form-control.date').datetimepicker
16
+ format: 'YYYY-MM-DD',
17
+ icons: icons
18
+
19
+ container.find('.input-group.datetime, .form-control.datetime').datetimepicker
20
+ format: 'YYYY-MM-DD hh:mm a',
21
+ icons: icons,
22
+ debug: true
23
+
24
+ # On page load
25
+ setup_datepickers($('body'))
26
+
27
+ # On modal load
28
+ $('.modal').on 'shown.bs.modal', (e)->
29
+ setTimeout ->
30
+ setup_datepickers($(e.target))
31
+ , 1000
@@ -0,0 +1,17 @@
1
+ $ ->
2
+ change_integer_predicate_input_name = (predicate_select)->
3
+ $form_group = predicate_select.closest('.form-group')
4
+ attribute = $form_group.data('attribute-name')
5
+ predicate = predicate_select.val()
6
+
7
+ input_name = "q[#{ attribute }_#{ predicate }]"
8
+ $form_group.find(".form-control:not(.filter-predicate-select)").attr("name", input_name)
9
+
10
+ $('.filter-predicate-select').change (e)->
11
+ change_integer_predicate_input_name $(e.target)
12
+
13
+ $.each $('.filter-predicate-select'), (idx, el)->
14
+ change_integer_predicate_input_name($(el))
15
+
16
+ $('#filter-modal form').on 'submit', (e)->
17
+ $('#filter-modal').addClass('loading')
@@ -3,6 +3,7 @@
3
3
 
4
4
  @import "bootstrap";
5
5
  @import "font-awesome";
6
+ @import "bootstrap-datetimepicker";
6
7
  @import "lotus_admin/theme/app";
7
8
 
8
9
  @import "lotus_admin/components/all";
@@ -1,4 +1,6 @@
1
1
  @import "lotus_admin/components/alerts";
2
+ @import "lotus_admin/components/datepicker";
2
3
  @import "lotus_admin/components/devise";
4
+ @import "lotus_admin/components/filters";
3
5
  @import "lotus_admin/components/forms";
4
6
  @import "lotus_admin/components/tables";
@@ -0,0 +1,28 @@
1
+ .bootstrap-datetimepicker-widget {
2
+ &.dropdown-menu {
3
+ width: auto;
4
+ }
5
+
6
+ table td {
7
+ border-radius: 0;
8
+ }
9
+
10
+ .picker-switch.accordion-toggle {
11
+ table td {
12
+ span {
13
+ background: $brand-primary;
14
+ border-radius: 0;
15
+ color: #fff;
16
+ &:after {
17
+ content: " Time";
18
+ }
19
+ }
20
+
21
+ &:hover {
22
+ span {
23
+ background: lighten($brand-primary, 10%);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,5 @@
1
+ .filter-form {
2
+ .form-group > label {
3
+ width: 100%;
4
+ }
5
+ }
@@ -5,3 +5,7 @@
5
5
  }
6
6
  }
7
7
  }
8
+
9
+ .input-group-addon {
10
+ border-bottom: 1px solid $input-border;
11
+ }
@@ -5,16 +5,18 @@ module LotusAdmin
5
5
  class_methods do
6
6
  def let(attribute_name, &block)
7
7
 
8
+ method_name = attribute_name.to_s.gsub('?', '')
9
+
8
10
  # instance setter method
9
- define_method("#{ attribute_name }=") do |value|
10
- instance_variable_set("@#{ attribute_name }", value)
11
+ define_method("#{ method_name }=") do |value|
12
+ instance_variable_set("@#{ method_name }", value)
11
13
  end
12
14
 
13
15
  # instance method to meomize the block result
14
16
  define_method(attribute_name) do
15
- instance_variable_get("@#{ attribute_name }") || begin
17
+ instance_variable_get("@#{ method_name }") || begin
16
18
  value = instance_eval(&block)
17
- public_send("#{ attribute_name }=", value)
19
+ public_send("#{ method_name }=", value)
18
20
 
19
21
  value
20
22
  end
@@ -0,0 +1,40 @@
1
+ module LotusAdmin
2
+ module FilterableController
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper FilterHelpers
7
+
8
+ class_attribute :filters_enabled
9
+ self.filters_enabled = false
10
+
11
+ class_attribute :_beginning_of_scope_chain, instance_accessor: false
12
+ beginning_of_scope_chain {}
13
+
14
+ let(:filters) { self.class.filters_config }
15
+ let(:apply_filters?) do
16
+ params.fetch(:q, {}).to_unsafe_h.any? { |_,v| !v.blank? }
17
+ end
18
+
19
+ let(:filters_enabled?) { self.class.filters_enabled }
20
+ let(:ransack_object) { instance_exec(&self.class._beginning_of_scope_chain).ransack(params[:q]) }
21
+ let(:collection) { paginate(ransack_object.result) }
22
+ end
23
+
24
+ class_methods do
25
+ def filter(name, options={})
26
+ self.filters_enabled = true
27
+
28
+ filters_config << Filters::Configuration.new(new.resource_class, name, options)
29
+ end
30
+
31
+ def filters_config
32
+ @filters_config ||= []
33
+ end
34
+
35
+ def beginning_of_scope_chain(&block)
36
+ self._beginning_of_scope_chain = block
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ module LotusAdmin::ResourcefulController
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ class_attribute :_resource_class, instance_accessor: false
6
+
7
+ let(:menu_identifier) { "#{ resource_class.model_name.route_key }_index" }
8
+ let(:resource_class) { self.class._resource_class }
9
+ let(:collection_path) { url_for(resource_class) }
10
+ end
11
+
12
+ class_methods do
13
+ def manages(model_class)
14
+ self._resource_class = model_class
15
+ end
16
+ end
17
+ end
@@ -4,12 +4,15 @@ module LotusAdmin
4
4
 
5
5
  include Exposure
6
6
 
7
+ helper FontAwesome::Rails::IconHelper
8
+
7
9
  helper LotusAdmin::ApplicationHelper
8
10
  helper LotusAdmin::FormHelpers
9
11
  helper LotusAdmin::LinkHelpers
10
12
  helper LotusAdmin::PaginationHelpers
11
13
  helper LotusAdmin::PanelHelpers
12
14
  helper LotusAdmin::SidebarHelpers
15
+ helper LotusAdmin::RenderHelpers
13
16
 
14
17
  private
15
18
 
@@ -1,5 +1,7 @@
1
1
  class LotusAdmin::AuthenticatedController < LotusAdmin::ApplicationController
2
2
  include LotusAdmin::PermittedParams
3
+ include LotusAdmin::FilterableController
4
+ include LotusAdmin::ResourcefulController
3
5
 
4
6
  before_action :authenticate_administrator!
5
7
  around_action :use_user_time_zone, if: :administrator_signed_in?
@@ -0,0 +1,23 @@
1
+ module LotusAdmin
2
+ module FilterHelpers
3
+ def render_filter_modal
4
+ return unless filters_enabled?
5
+
6
+ render 'lotus_admin/shared/filters/modal'
7
+ end
8
+
9
+ def render_filters_results_banner
10
+ return unless apply_filters?
11
+
12
+ render 'lotus_admin/shared/filters/results_banner'
13
+ end
14
+
15
+ def filter_search_btn
16
+ return unless filters_enabled?
17
+
18
+ link_to '#', class: LotusAdmin.configuration.filter_search_btn_css_classes, data: { toggle: :modal, target: '#filter-modal' } do
19
+ fa_icon(:search)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -13,13 +13,17 @@ module LotusAdmin
13
13
  label = "Create #{ resource.class.model_name.human }"
14
14
  label = "Save Changes" if resource.persisted?
15
15
 
16
- button_tag class: 'btn btn-success' do
17
- label.html_safe + content_tag(:i, nil, class: 'zmdi zmdi-arrow-forward')
18
- end
16
+ material_form_button(label)
19
17
  end
20
18
 
21
19
  def material_form_cancel(path)
22
20
  link_to 'Cancel', path, class: 'btn btn-link'
23
21
  end
22
+
23
+ def material_form_button(label)
24
+ button_tag class: 'btn btn-success' do
25
+ label.html_safe + content_tag(:i, nil, class: 'zmdi zmdi-arrow-forward')
26
+ end
27
+ end
24
28
  end
25
29
  end
@@ -0,0 +1,7 @@
1
+ module LotusAdmin::RenderHelpers
2
+ def render_index(title = nil, &block)
3
+ title = title.presence || resource_class.model_name.human(count: 2)
4
+
5
+ render 'lotus_admin/shared/index', title: title, renderer: block
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ class DatePickerInput < SimpleForm::Inputs::Base
2
+ def input(wrapper_options)
3
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
4
+
5
+ content_tag(:div, input_group(merged_input_options), class: "input-group date")
6
+ end
7
+
8
+ private
9
+
10
+ def input_group(merged_input_options)
11
+ "#{ calendar_addon } #{ @builder.text_field(attribute_name, merged_input_options) }".html_safe
12
+ end
13
+
14
+ def calendar_addon
15
+ content_tag(:span, calendar_icon, class: "input-group-addon")
16
+ end
17
+
18
+ def calendar_icon
19
+ @builder.template.fa_icon(:calendar)
20
+ end
21
+
22
+ def input_html_options
23
+ super.merge({
24
+ class: 'date',
25
+ value: @builder.object.public_send(attribute_name)&.strftime('%Y-%m-%d')
26
+ })
27
+ end
28
+ end
@@ -0,0 +1,201 @@
1
+ module LotusAdmin
2
+ class Filters::Configuration
3
+ attr_reader :method, :resource_class
4
+
5
+ NUMBER_PREDICATE_FILTER_OPTIONS = [['Greater Than', 'gteq'], ['Equals', 'eq'], ['Less Than', 'lteq']].freeze
6
+ STRING_PREDICATE_FILTER_OPTIONS = [['Contains', 'cont'], ['Equals', 'eq'], ['Starts With', 'start'], ['Ends With', 'end']].freeze
7
+ DATE_PREDICATE_FILTER_OPTIONS = [['After', 'gteq'], ['Exactly', 'eq'], ['Before', 'lteq']].freeze
8
+
9
+ # By default, a filter type will be selected based upon the attribute type
10
+ #
11
+ # For example, a date will get a datepicker, a datetime gets a datetime picker
12
+ # A string gets a text search, and a numerical field gets a number search
13
+ #
14
+ # To provide a select dropdown, such as filtering on an association, simply
15
+ # provide a collection attribute (as a Proc to be evaluated in the view context)
16
+ #
17
+ # Examples:
18
+ #
19
+ # filter :id (numeric)
20
+ # filter :device_id (numeric)
21
+ # filter :device_id, collection: ->{ [[1, 'device']] } (select)
22
+ # filter :created_at (datetime)
23
+ # filter :created_at, as: :date (date)
24
+ # filter :name (string)
25
+
26
+ def initialize(resource_class, method, options={})
27
+ @resource_class = resource_class
28
+ @method = method
29
+ @options = options
30
+ end
31
+
32
+ def label
33
+ @label ||= translate_label
34
+ end
35
+
36
+ def render(f)
37
+ case as
38
+ when :number
39
+ render_number_input_group(f)
40
+ when :select, :grouped_select
41
+ render_collection(f)
42
+ when :datetime
43
+ render_date_or_time_input_group(f, true)
44
+ when :date
45
+ render_date_or_time_input_group(f, false)
46
+ when :boolean
47
+ render_boolean_input_group(f)
48
+ when :string
49
+ render_string_input_group(f)
50
+ end
51
+ end
52
+
53
+ def input_options(view_ctx = nil)
54
+ input_options = {
55
+ collection: collection(view_ctx),
56
+ input_html: input_html_options,
57
+ as: as,
58
+ label: label
59
+ }
60
+
61
+ input_options.delete(:collection) if input_options[:collection].nil?
62
+ input_options.merge!(@options.fetch(:input_options, {}))
63
+
64
+ input_options
65
+ end
66
+
67
+ def datepicker?
68
+ @options.fetch(:datepicker, false)
69
+ end
70
+
71
+ private
72
+
73
+ def predicate_select(f)
74
+ input_name = "#{ method }_predicate"
75
+ selected_value = f.template.params.fetch(input_name, nil)
76
+
77
+ filter_options = case as
78
+ when :number then NUMBER_PREDICATE_FILTER_OPTIONS
79
+ when :string then STRING_PREDICATE_FILTER_OPTIONS
80
+ when :date, :datetime then DATE_PREDICATE_FILTER_OPTIONS
81
+ end
82
+
83
+ f.template.select_tag("#{ method }_predicate", f.template.options_for_select(filter_options, selected: selected_value), class: 'form-control select filter-predicate-select')
84
+ end
85
+
86
+ def input_html_options
87
+ options = @options.fetch(:input_html, {})
88
+ options.merge!(class: 'datepicker', data: { field: :date }) if datepicker?
89
+
90
+ options
91
+ end
92
+
93
+ def as
94
+ # Allow for specifying a :grouped_select for instance
95
+ unless @options[:collection].blank?
96
+ return @options.fetch(:as, :select)
97
+ end
98
+
99
+ default_type = case attribute_type
100
+ when :integer, :decimal then :number
101
+ when :datetime then :datetime
102
+ when :date then :date
103
+ when :boolean then :boolean
104
+ else
105
+ :string
106
+ end
107
+
108
+ @options.fetch(:as, default_type)
109
+ end
110
+
111
+ def translate_label
112
+ I18n.t(method_name.parameterize(separator: '_'), scope: "lotus_admin.filters.config.#{ resource_class.model_name.i18n_key }", default: method_name.titleize)
113
+ end
114
+
115
+ def collection(view_ctx)
116
+ return if @options[:collection].nil?
117
+
118
+ @options[:as] ||= :select
119
+
120
+ if view_ctx.nil?
121
+ @options[:collection].call
122
+ else
123
+ view_ctx.instance_exec(&@options[:collection])
124
+ end
125
+ end
126
+
127
+ def method_name
128
+ method.to_s
129
+ end
130
+
131
+ def attribute_type
132
+ @attribute_type ||= resource_class.type_for_attribute(method_name).type
133
+ end
134
+
135
+ def render_number_input_group(f)
136
+ render_form_group_with_predicate_and_input(f) do |value|
137
+ f.template.text_field_tag(input_name, value, class: 'form-control string')
138
+ end
139
+ end
140
+
141
+ def render_string_input_group(f)
142
+ render_form_group_with_predicate_and_input(f) do |value|
143
+ f.template.text_field_tag(input_name, value, class: 'form-control string')
144
+ end
145
+ end
146
+
147
+ def render_collection(f)
148
+ f.input(method, input_options(f.template))
149
+ end
150
+
151
+ def render_date_or_time_input_group(f, include_time = false)
152
+ data_field_name = :date
153
+ data_field_name = :datetime if include_time
154
+
155
+ render_form_group_with_predicate_and_input(f) do |value|
156
+ f.template.content_tag(:div, class: "input-group #{ data_field_name }") do
157
+ f.template.text_field_tag(input_name, value, class: 'form-control string') +
158
+ f.template.content_tag(:span, class: 'input-group-addon') do
159
+ f.template.fa_icon(:calendar)
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ def render_boolean_input_group(f)
166
+ f.input("#{ method_name }_eq", as: :select, label: translate_label)
167
+ end
168
+
169
+ def render_form_group_with_predicate_and_input(f, &block)
170
+ f.template.content_tag(:div, class: 'form-group', data: { attribute_name: method_name }) do
171
+ f.template.label_tag(method, label, for: input_id) +
172
+ f.template.content_tag(:div, class: 'row') do
173
+ f.template.content_tag(:div, class: 'col-sm-4') do
174
+ predicate_select(f)
175
+ end +
176
+ f.template.content_tag(:div, class: 'col-sm-8') do
177
+ value = find_predicate_input_value(f)
178
+
179
+ block.call(value)
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ def find_predicate_input_value(f)
186
+ _, value = f.template.params.fetch(:q, {}).to_unsafe_h.find do |k,_|
187
+ k.starts_with?(method_name)
188
+ end
189
+
190
+ value
191
+ end
192
+
193
+ def input_name
194
+ "q[#{ method_name }]"
195
+ end
196
+
197
+ def input_id
198
+ ['q', method_name].join('_')
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,16 @@
1
+ = render_filter_modal
2
+
3
+ .block-header
4
+ %h2= page_title!(title)
5
+
6
+ %ul.actions
7
+ - if filters_enabled?
8
+ %li= filter_search_btn
9
+ = yield(:action_items)
10
+
11
+ .card
12
+ .card-body
13
+ = capture_haml(&renderer)
14
+
15
+ = render_filters_results_banner
16
+ = pagination(collection)
@@ -0,0 +1,17 @@
1
+ #filter-modal.modal.fade
2
+ .modal-dialog
3
+ .modal-content
4
+ = search_form_for ransack_object, url: collection_path, class: 'filter-form' do |f|
5
+ .modal-header
6
+ %button.close{type: 'button', "data-dismiss" => :modal}
7
+ %span &times;
8
+
9
+ %h4.modal-title= t('lotus_admin.filters.modal.title')
10
+
11
+ .modal-body
12
+ - filters.each do |filter|
13
+ = filter.render(f)
14
+
15
+ .modal-footer
16
+ = link_to t('lotus_admin.filters.modal.reset_btn'), collection_path, class: 'btn btn-link pull-left'
17
+ = material_form_button t('lotus_admin.filters.modal.submit_btn')
@@ -0,0 +1,6 @@
1
+ .row.filtered-collection-results-banner.noprint
2
+ .col-xs-12
3
+ .alert.alert-info
4
+ %p
5
+ %span Showing search results,
6
+ = link_to 'click to modify search.', '#', class: 'btn-js', data: { toggle: :modal, target: '#filter-modal' }
@@ -0,0 +1,7 @@
1
+ en:
2
+ lotus_admin:
3
+ filters:
4
+ modal:
5
+ title: Filter Results
6
+ submit_btn: Search
7
+ reset_btn: Reset Filters
@@ -1,5 +1,7 @@
1
1
  module LotusAdmin
2
2
  class Configuration
3
+ attr_accessor :filter_search_btn_css_classes
4
+
3
5
  def routes(&block)
4
6
  routing_options.push(block)
5
7
  end
@@ -7,5 +9,9 @@ module LotusAdmin
7
9
  def routing_options
8
10
  @routing_options ||= []
9
11
  end
12
+
13
+ def filter_search_btn_css_classes
14
+ @filter_search_btn_css_classes ||= %w(btn btn-default filter-toggle-btn btn-js)
15
+ end
10
16
  end
11
17
  end
@@ -1,3 +1,3 @@
1
1
  module LotusAdmin
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/lotus_admin.rb CHANGED
@@ -5,12 +5,16 @@ require 'simple_form'
5
5
 
6
6
  require 'haml'
7
7
  require 'sass-rails'
8
+ require 'coffee-rails'
8
9
  require 'uglifier'
9
10
  require 'font-awesome-rails'
10
11
  require 'bootstrap-sass'
12
+ require 'momentjs-rails'
13
+ require 'bootstrap3-datetimepicker-rails'
11
14
  require 'jquery-rails'
12
15
  require 'page_title_helper'
13
16
  require 'kaminari'
17
+ require 'ransack'
14
18
 
15
19
  require 'lotus_admin/configuration'
16
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lotus_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Millsaps-Brewer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-01 00:00:00.000000000 Z
11
+ date: 2018-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.3.6
125
+ - !ruby/object:Gem::Dependency
126
+ name: coffee-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '4.2'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '4.2'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: font-awesome-rails
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,34 @@ dependencies:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '4.7'
153
+ - !ruby/object:Gem::Dependency
154
+ name: momentjs-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 2.17.0
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.17.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: bootstrap3-datetimepicker-rails
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '4.17'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '4.17'
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: page_title_helper
141
183
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +206,20 @@ dependencies:
164
206
  - - "~>"
165
207
  - !ruby/object:Gem::Version
166
208
  version: '1.0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: ransack
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '1.8'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1.8'
167
223
  - !ruby/object:Gem::Dependency
168
224
  name: pg
169
225
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +304,20 @@ dependencies:
248
304
  - - "~>"
249
305
  - !ruby/object:Gem::Version
250
306
  version: '1.6'
307
+ - !ruby/object:Gem::Dependency
308
+ name: capybara
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '2.6'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '2.6'
251
321
  description: Bootstrap 3 Material Design Simple Admin Interface.
252
322
  email:
253
323
  - matt@madebylotus.com
@@ -261,16 +331,22 @@ files:
261
331
  - app/assets/config/lotus_admin_manifest.js
262
332
  - app/assets/images/lotus_admin/profile-menu.png
263
333
  - app/assets/javascripts/lotus_admin/application.js
334
+ - app/assets/javascripts/lotus_admin/datepickers.js.coffee
335
+ - app/assets/javascripts/lotus_admin/filters.js.coffee
264
336
  - app/assets/stylesheets/lotus_admin/_variables.scss
265
337
  - app/assets/stylesheets/lotus_admin/application.css.scss
266
338
  - app/assets/stylesheets/lotus_admin/components/_alerts.scss
267
339
  - app/assets/stylesheets/lotus_admin/components/_all.scss
340
+ - app/assets/stylesheets/lotus_admin/components/_datepicker.scss
268
341
  - app/assets/stylesheets/lotus_admin/components/_devise.scss
342
+ - app/assets/stylesheets/lotus_admin/components/_filters.scss
269
343
  - app/assets/stylesheets/lotus_admin/components/_forms.scss
270
344
  - app/assets/stylesheets/lotus_admin/components/_tables.scss
271
345
  - app/controllers/concerns/lotus_admin/devise_controllers.rb
272
346
  - app/controllers/concerns/lotus_admin/exposure.rb
347
+ - app/controllers/concerns/lotus_admin/filterable_controller.rb
273
348
  - app/controllers/concerns/lotus_admin/permitted_params.rb
349
+ - app/controllers/concerns/lotus_admin/resourceful_controller.rb
274
350
  - app/controllers/lotus_admin/application_controller.rb
275
351
  - app/controllers/lotus_admin/authenticated_controller.rb
276
352
  - app/controllers/lotus_admin/confirmations_controller.rb
@@ -280,15 +356,19 @@ files:
280
356
  - app/controllers/lotus_admin/sessions_controller.rb
281
357
  - app/controllers/lotus_admin/users_controller.rb
282
358
  - app/helpers/lotus_admin/application_helper.rb
359
+ - app/helpers/lotus_admin/filter_helpers.rb
283
360
  - app/helpers/lotus_admin/form_helpers.rb
284
361
  - app/helpers/lotus_admin/link_helpers.rb
285
362
  - app/helpers/lotus_admin/pagination_helpers.rb
286
363
  - app/helpers/lotus_admin/panel_helpers.rb
364
+ - app/helpers/lotus_admin/render_helpers.rb
287
365
  - app/helpers/lotus_admin/sidebar_helpers.rb
366
+ - app/inputs/date_picker_input.rb
288
367
  - app/jobs/lotus_admin/application_job.rb
289
368
  - app/mailers/lotus_admin/application_mailer.rb
290
369
  - app/mailers/lotus_admin/user_mailer.rb
291
370
  - app/models/lotus_admin/application_record.rb
371
+ - app/models/lotus_admin/filters/configuration.rb
292
372
  - app/models/lotus_admin/user.rb
293
373
  - app/views/administrators/_links.html.haml
294
374
  - app/views/administrators/confirmations/new.html.haml
@@ -320,6 +400,9 @@ files:
320
400
  - app/views/lotus_admin/dashboard/show.html.haml
321
401
  - app/views/lotus_admin/profiles/edit.html.haml
322
402
  - app/views/lotus_admin/shared/_collection_pagination.html.haml
403
+ - app/views/lotus_admin/shared/_index.html.haml
404
+ - app/views/lotus_admin/shared/filters/_modal.html.haml
405
+ - app/views/lotus_admin/shared/filters/_results_banner.html.haml
323
406
  - app/views/lotus_admin/user_mailer/invited.html.haml
324
407
  - app/views/lotus_admin/user_mailer/invited.text.erb
325
408
  - app/views/lotus_admin/users/_form.html.haml
@@ -333,6 +416,7 @@ files:
333
416
  - config/initializers/simple_form_material.rb
334
417
  - config/locales/dates.en.yml
335
418
  - config/locales/devise.en.yml
419
+ - config/locales/filters.en.yml
336
420
  - config/locales/mailers.en.yml
337
421
  - config/locales/page_titles.en.yml
338
422
  - config/locales/simple_form.en.yml