headmin 0.4.2 → 0.5.2
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 +4 -4
- data/CHANGELOG.md +10 -3
- data/Gemfile +14 -0
- data/Gemfile.lock +78 -1
- data/app/assets/javascripts/headmin/controllers/date_range_controller.js +12 -6
- data/app/assets/javascripts/headmin/controllers/filter_controller.js +61 -11
- data/app/assets/javascripts/headmin/controllers/filter_row_controller.js +50 -0
- data/app/assets/javascripts/headmin/controllers/flatpickr_controller.js +2 -6
- data/app/assets/javascripts/headmin/controllers/media_controller.js +237 -0
- data/app/assets/javascripts/headmin/controllers/media_modal_controller.js +110 -0
- data/app/assets/javascripts/headmin/controllers/popup_controller.js +3 -1
- data/app/assets/javascripts/headmin/controllers/remote_modal_controller.js +10 -0
- data/app/assets/javascripts/headmin/controllers/table_actions_controller.js +16 -21
- data/app/assets/javascripts/headmin/controllers/textarea_controller.js +34 -0
- data/app/assets/javascripts/headmin/index.js +10 -0
- data/app/assets/javascripts/headmin.js +413 -38
- data/app/assets/stylesheets/headmin/filter.scss +74 -0
- data/app/assets/stylesheets/headmin/forms/file.scss +40 -5
- data/app/assets/stylesheets/headmin/forms/media.scss +10 -0
- data/app/assets/stylesheets/headmin/forms/repeater.scss +4 -0
- data/app/assets/stylesheets/headmin/forms.scss +7 -0
- data/app/assets/stylesheets/headmin/general.scss +0 -1
- data/app/assets/stylesheets/headmin/layout/body.scss +5 -0
- data/app/assets/stylesheets/headmin/layout/sidebar.scss +0 -1
- data/app/assets/stylesheets/headmin/media/index.scss +9 -0
- data/app/assets/stylesheets/headmin/media.scss +1 -0
- data/app/assets/stylesheets/headmin/popup.scss +0 -1
- data/app/assets/stylesheets/headmin/table.scss +15 -0
- data/app/assets/stylesheets/headmin.css +137 -9
- data/app/assets/stylesheets/headmin.scss +1 -0
- data/app/controllers/concerns/headmin/filterable.rb +27 -0
- data/app/controllers/headmin/media_controller.rb +52 -0
- data/app/controllers/headmin_controller.rb +2 -0
- data/app/models/concerns/headmin/field.rb +0 -1
- data/app/models/concerns/headmin/fieldable.rb +10 -1
- data/app/models/concerns/headmin/form/hintable.rb +6 -1
- data/app/models/headmin/blocks_view.rb +1 -1
- data/app/models/headmin/filter/base.rb +238 -0
- data/app/models/headmin/filter/base_view.rb +64 -0
- data/app/models/headmin/filter/boolean.rb +15 -0
- data/app/models/headmin/filter/boolean_view.rb +61 -0
- data/app/models/headmin/filter/button_view.rb +25 -0
- data/app/models/headmin/filter/conditional_view.rb +16 -0
- data/app/models/headmin/filter/date.rb +67 -0
- data/app/models/headmin/filter/date_view.rb +52 -0
- data/app/models/headmin/filter/flatpickr_view.rb +54 -0
- data/app/models/headmin/filter/menu_item_view.rb +6 -0
- data/app/models/headmin/filter/money.rb +13 -0
- data/app/models/headmin/filter/number.rb +27 -0
- data/app/models/headmin/filter/number_view.rb +54 -0
- data/app/models/headmin/filter/operator_view.rb +30 -0
- data/app/models/headmin/filter/options_view.rb +61 -0
- data/app/models/headmin/filter/row_view.rb +13 -0
- data/app/models/headmin/filter/search.rb +18 -0
- data/app/models/headmin/filter/search_view.rb +31 -0
- data/app/models/headmin/filter/text.rb +25 -0
- data/app/models/headmin/filter/text_view.rb +53 -0
- data/app/models/headmin/filters.rb +29 -0
- data/app/models/headmin/form/color_view.rb +48 -0
- data/app/models/headmin/form/datetime_range_view.rb +25 -0
- data/app/models/headmin/form/datetime_view.rb +45 -0
- data/app/models/headmin/form/flatpickr_range_view.rb +4 -15
- data/app/models/headmin/form/flatpickr_view.rb +3 -12
- data/app/models/headmin/form/media_view.rb +113 -0
- data/app/models/headmin/form/textarea_view.rb +6 -1
- data/app/models/view_model.rb +1 -1
- data/app/views/headmin/_blocks.html.erb +3 -3
- data/app/views/headmin/_breadcrumbs.html.erb +1 -1
- data/app/views/headmin/_dropdown.html.erb +1 -1
- data/app/views/headmin/_filters.html.erb +9 -9
- data/app/views/headmin/_heading.html.erb +1 -1
- data/app/views/headmin/_notifications.html.erb +1 -1
- data/app/views/headmin/_pagination.html.erb +2 -2
- data/app/views/headmin/dropdown/_devise.html.erb +7 -7
- data/app/views/headmin/dropdown/_list.html.erb +1 -1
- data/app/views/headmin/filters/_base.html.erb +95 -0
- data/app/views/headmin/filters/_boolean.html.erb +23 -0
- data/app/views/headmin/filters/_date.html.erb +14 -38
- data/app/views/headmin/filters/_flatpickr.html.erb +15 -48
- data/app/views/headmin/filters/_number.html.erb +23 -0
- data/app/views/headmin/filters/_options.html.erb +24 -0
- data/app/views/headmin/filters/_search.html.erb +14 -12
- data/app/views/headmin/filters/_text.html.erb +23 -0
- data/app/views/headmin/filters/filter/_button.html.erb +9 -10
- data/app/views/headmin/filters/filter/_conditional.html.erb +18 -0
- data/app/views/headmin/filters/filter/_menu_item.html.erb +5 -2
- data/app/views/headmin/filters/filter/_null_select.html.erb +8 -0
- data/app/views/headmin/filters/filter/_operator.html.erb +16 -0
- data/app/views/headmin/filters/filter/_row.html.erb +11 -0
- data/app/views/headmin/forms/_autocomplete.html.erb +2 -2
- data/app/views/headmin/forms/_blocks.html.erb +3 -3
- data/app/views/headmin/forms/_checkbox.html.erb +5 -5
- data/app/views/headmin/forms/_color.html.erb +32 -0
- data/app/views/headmin/forms/_date.html.erb +8 -8
- data/app/views/headmin/forms/_datetime.html.erb +41 -0
- data/app/views/headmin/forms/_datetime_range.html.erb +40 -0
- data/app/views/headmin/forms/_email.html.erb +9 -9
- data/app/views/headmin/forms/_file.html.erb +9 -9
- data/app/views/headmin/forms/_flatpickr.html.erb +1 -1
- data/app/views/headmin/forms/_flatpickr_range.html.erb +9 -10
- data/app/views/headmin/forms/_hidden.html.erb +1 -1
- data/app/views/headmin/forms/_hint.html.erb +7 -2
- data/app/views/headmin/forms/_media.html.erb +58 -0
- data/app/views/headmin/forms/_number.html.erb +8 -8
- data/app/views/headmin/forms/_password.html.erb +7 -7
- data/app/views/headmin/forms/_redactorx.html.erb +2 -2
- data/app/views/headmin/forms/_search.html.erb +9 -9
- data/app/views/headmin/forms/_select.html.erb +8 -8
- data/app/views/headmin/forms/_switch.html.erb +2 -2
- data/app/views/headmin/forms/_text.html.erb +9 -9
- data/app/views/headmin/forms/_textarea.html.erb +7 -7
- data/app/views/headmin/forms/_url.html.erb +9 -9
- data/app/views/headmin/forms/_validation.html.erb +1 -1
- data/app/views/headmin/forms/_wysiwyg.html.erb +2 -2
- data/app/views/headmin/forms/fields/_base.html.erb +1 -1
- data/app/views/headmin/forms/fields/_file.html.erb +1 -1
- data/app/views/headmin/forms/fields/_files.html.erb +1 -1
- data/app/views/headmin/forms/fields/_group.html.erb +2 -2
- data/app/views/headmin/forms/fields/_list.html.erb +1 -1
- data/app/views/headmin/forms/fields/_text.html.erb +1 -1
- data/app/views/headmin/forms/media/_item.html.erb +32 -0
- data/app/views/headmin/forms/media/_validation.html.erb +10 -0
- data/app/views/headmin/forms/repeater/_row.html.erb +12 -11
- data/app/views/headmin/layout/_footer.html.erb +1 -1
- data/app/views/headmin/layout/_main.html.erb +2 -0
- data/app/views/headmin/layout/_remote_modal.html.erb +1 -0
- data/app/views/headmin/layout/_sidebar.html.erb +1 -1
- data/app/views/headmin/media/_item.html.erb +17 -0
- data/app/views/headmin/media/_media_item_modal.html.erb +51 -0
- data/app/views/headmin/media/_modal.html.erb +35 -0
- data/app/views/headmin/media/create.turbo_stream.erb +5 -0
- data/app/views/headmin/media/index.html.erb +3 -0
- data/app/views/headmin/media/show.html.erb +9 -0
- data/app/views/headmin/media/update.turbo_stream.erb +3 -0
- data/app/views/headmin/nav/item/_devise.html.erb +7 -7
- data/app/views/headmin/table/_actions.html.erb +1 -4
- data/app/views/headmin/table/actions/_action.html.erb +3 -3
- data/app/views/headmin/table/actions/_delete.html.erb +2 -2
- data/app/views/headmin/table/actions/_export.html.erb +1 -1
- data/app/views/headmin/table/body/_color.html.erb +10 -0
- data/app/views/headmin/table/body/_image.html.erb +18 -0
- data/app/views/headmin/table/foot/_cell.html.erb +1 -1
- data/app/views/headmin/table/foot/_id.html.erb +1 -1
- data/app/views/headmin/views/devise/confirmations/_new.html.erb +2 -2
- data/app/views/headmin/views/devise/passwords/_edit.html.erb +2 -2
- data/app/views/headmin/views/devise/passwords/_new.html.erb +2 -2
- data/app/views/headmin/views/devise/registrations/_edit.html.erb +1 -1
- data/app/views/headmin/views/devise/registrations/_new.html.erb +2 -2
- data/app/views/headmin/views/devise/sessions/_new.html.erb +1 -1
- data/app/views/headmin/views/devise/unlocks/_new.html.erb +2 -2
- data/config/locales/devise/nl.yml +1 -1
- data/config/locales/en.yml +4 -0
- data/config/locales/headmin/dropdown/en.yml +6 -0
- data/config/locales/headmin/dropdown/nl.yml +6 -0
- data/config/locales/headmin/filters/en.yml +26 -1
- data/config/locales/headmin/filters/nl.yml +26 -1
- data/config/locales/headmin/forms/en.yml +8 -0
- data/config/locales/headmin/forms/nl.yml +8 -0
- data/config/locales/headmin/layout/en.yml +0 -9
- data/config/locales/headmin/layout/nl.yml +0 -9
- data/config/locales/headmin/media/en.yml +23 -0
- data/config/locales/headmin/media/nl.yml +22 -0
- data/config/locales/headmin/nav/en.yml +7 -0
- data/config/locales/headmin/nav/nl.yml +7 -0
- data/config/locales/headmin/table/en.yml +2 -0
- data/config/locales/headmin/table/nl.yml +2 -0
- data/config/locales/nl.yml +4 -0
- data/config/routes.rb +10 -0
- data/lib/generators/templates/views/auth/confirmations/new.html.erb +1 -1
- data/lib/generators/templates/views/auth/mailer/confirmation_instructions.html.erb +1 -1
- data/lib/generators/templates/views/auth/mailer/email_changed.html.erb +1 -1
- data/lib/generators/templates/views/auth/mailer/password_change.html.erb +1 -1
- data/lib/generators/templates/views/auth/mailer/reset_password_instructions.html.erb +1 -1
- data/lib/generators/templates/views/auth/mailer/unlock_instructions.html.erb +1 -1
- data/lib/generators/templates/views/auth/passwords/edit.html.erb +1 -1
- data/lib/generators/templates/views/auth/passwords/new.html.erb +1 -1
- data/lib/generators/templates/views/auth/registrations/edit.html.erb +1 -1
- data/lib/generators/templates/views/auth/registrations/new.html.erb +1 -1
- data/lib/generators/templates/views/auth/sessions/new.html.erb +1 -1
- data/lib/generators/templates/views/auth/unlocks/new.html.erb +1 -1
- data/lib/headmin/version.rb +1 -1
- data/package.json +1 -1
- metadata +70 -7
- data/.lock-487e157d270f3062a98b7b2a012753708-1272821827 +0 -0
- data/app/controllers/concerns/headmin/filter.rb +0 -5
- data/app/controllers/concerns/headmin/searchable.rb +0 -15
- data/app/views/headmin/filters/_select.html.erb +0 -45
- data/app/views/headmin/filters/filter/_template.html.erb +0 -13
@@ -6,24 +6,24 @@
|
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
8
|
# Basic version
|
9
|
-
# <%= render
|
10
|
-
# <%= render
|
9
|
+
# <%= render 'headmin/filters' do %#>
|
10
|
+
# <%= render 'headmin/filters/select', name: 'color', options: ['red', 'green', 'blue'] %#>
|
11
11
|
# <% end %#>
|
12
12
|
#
|
13
13
|
# With custom URL
|
14
|
-
# <%= render
|
14
|
+
# <%= render 'headmin/filters', url: admin_polls_path %#>
|
15
15
|
|
16
16
|
action = local_assigns.has_key?(:url) ? url : request.path
|
17
|
-
|
18
|
-
# Perform yield in order to capture content blocks
|
19
|
-
yield
|
20
17
|
%>
|
21
18
|
|
22
|
-
|
19
|
+
<%= form_with url: action, method: :get, data: {controller: "filters", filters_target: "form"} do |form| %>
|
20
|
+
|
21
|
+
<%# Perform yield in order to capture content blocks, pass form so we can use headmin form inputs %>
|
22
|
+
<%= yield(form) %>
|
23
23
|
|
24
24
|
<!-- Default parameters (e.g. sorting, pagination) -->
|
25
25
|
<% default_params.except('page').each do |name, value| %>
|
26
|
-
<%=
|
26
|
+
<%= form.hidden_field name.to_sym, value: value %>
|
27
27
|
<% end %>
|
28
28
|
|
29
29
|
<div class="d-flex flex-column flex-md-row align-content-start align-items-md-start">
|
@@ -69,8 +69,8 @@
|
|
69
69
|
|
70
70
|
<!-- Filter templates -->
|
71
71
|
<%= yield :filters_templates %>
|
72
|
-
</form>
|
73
72
|
|
73
|
+
<% end %>
|
74
74
|
|
75
75
|
<%
|
76
76
|
# Clears content blocks to make this view reusable
|
@@ -6,12 +6,12 @@
|
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
8
|
# Basic version
|
9
|
-
# <%= render
|
9
|
+
# <%= render 'headmin/pagination, collection: @pages' %#>
|
10
10
|
%>
|
11
11
|
|
12
12
|
<div class="d-flex flex-row-reverse flex-md-row align-items-center justify-content-between justify-content-md-end my-1">
|
13
13
|
<% content_for :collection_total_count, collection.total_count.to_s unless content_for?(:collection_total_count) %>
|
14
|
-
<div class="ms-2 me-md-2 text-secondary">
|
14
|
+
<div class="ms-2 me-md-2 text-secondary flex-grow-1 flex-shrink-0">
|
15
15
|
<%= t('.items', count: content_for(:collection_total_count).to_i) %>
|
16
16
|
</div>
|
17
17
|
<%= paginate collection, views_prefix: 'headmin/pagination' %>
|
@@ -2,17 +2,17 @@
|
|
2
2
|
# headmin/dropdown/devise
|
3
3
|
#
|
4
4
|
# ==== Options
|
5
|
-
# * +scope</tt> - (symbol) devise scope, i.e.
|
5
|
+
# * +scope</tt> - (symbol) devise scope, i.e. ":users" => current_user
|
6
6
|
# * +class</tt> - Custom class names to put on the dropdown
|
7
7
|
#
|
8
8
|
# ==== Examples
|
9
9
|
# Basic version
|
10
|
-
# <%= render
|
10
|
+
# <%= render 'headmin/dropdown/devise' %#>
|
11
11
|
#
|
12
12
|
# Custom scope
|
13
|
-
# <%= render
|
13
|
+
# <%= render 'headmin/dropdown/devise', scope: :admins %#>
|
14
14
|
|
15
|
-
class_names = local_assigns.has_key?(:class) ? local_assigns[:class] :
|
15
|
+
class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : ""
|
16
16
|
scope = local_assigns.has_key?(:scope) ? scope : :users
|
17
17
|
singular = scope.to_s.singularize.to_sym
|
18
18
|
user = send("current_#{singular}")
|
@@ -23,9 +23,9 @@
|
|
23
23
|
<%= render 'headmin/dropdown/button' do %>
|
24
24
|
<%= user.to_s %>
|
25
25
|
<% end %>
|
26
|
-
<%= render 'headmin/dropdown/list', class:
|
27
|
-
<%= render 'headmin/dropdown/item', name: t(
|
26
|
+
<%= render 'headmin/dropdown/list', class: "dropdown-menu-end" do %>
|
27
|
+
<%= render 'headmin/dropdown/item', name: t("headmin.dropdown.devise.edit_profile"), url: polymorphic_path([:edit, :admin, user]) %>
|
28
28
|
<%= render 'headmin/dropdown/divider' %>
|
29
|
-
<%= render 'headmin/dropdown/item', name: t(
|
29
|
+
<%= render 'headmin/dropdown/item', name: t("headmin.dropdown.devise.log_out"), url: polymorphic_path([:destroy, singular, :session]), method: :delete %>
|
30
30
|
<% end %>
|
31
31
|
<% end %>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
#
|
8
8
|
# ==== Examples
|
9
9
|
# Basic version
|
10
|
-
# <%= render
|
10
|
+
# <%= render 'headmin/dropdown/list', id: 'dropdown-1' %#>
|
11
11
|
|
12
12
|
class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : ''
|
13
13
|
id = local_assigns.has_key?(:id) ? id : 'dropdown-1'
|
@@ -0,0 +1,95 @@
|
|
1
|
+
<%
|
2
|
+
# headmin/filters/base
|
3
|
+
#
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +form+ - Form object
|
6
|
+
# * +name+ - Name of the filter parameter
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +label+ - Display label
|
10
|
+
#
|
11
|
+
# ==== Examples
|
12
|
+
# Basic version
|
13
|
+
#
|
14
|
+
# <%= render 'headmin/filters/base', name: :title do |value| %#>
|
15
|
+
# <%= render 'headmin/forms/text', value: value %#>
|
16
|
+
# <% end %#>
|
17
|
+
#
|
18
|
+
|
19
|
+
|
20
|
+
base = Headmin::Filter::BaseView.new(local_assigns)
|
21
|
+
%>
|
22
|
+
|
23
|
+
<%= content_for :filters_menu do %>
|
24
|
+
<%= render 'headmin/filters/filter/menu_item', base.menu_item_options %>
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<%= content_for :filters_templates do %>
|
28
|
+
<template data-filter-name="<%= name %>" data-filters-target="template">
|
29
|
+
<%= render 'headmin/filters/filter/button', name: name, label: label, filter: nil, value: nil, id: "template_id" do %>
|
30
|
+
<div class="h-filter-rows mb-3" data-filter-target="wrapper">
|
31
|
+
<%= render 'headmin/filters/filter/row' do %>
|
32
|
+
<%= render 'headmin/filters/filter/operator', base.filter_operator_options.merge({selected: nil}) %>
|
33
|
+
<%= yield(nil) %>
|
34
|
+
<%= render 'headmin/filters/filter/null_select', value: nil %>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<!-- Apply button -->
|
39
|
+
<button type="submit" class="btn btn-primary w-100" data-action="click->filters#update">
|
40
|
+
<%= t("headmin.filters.apply") %>
|
41
|
+
</button>
|
42
|
+
|
43
|
+
<!-- Filter field -->
|
44
|
+
<%= hidden_field_tag("#{name}", "", data: {filter_target: "hidden"}) %>
|
45
|
+
|
46
|
+
<!-- Filter template -->
|
47
|
+
<template data-filter-target="template">
|
48
|
+
<%= render 'headmin/filters/filter/conditional' %>
|
49
|
+
<%= render 'headmin/filters/filter/row' do %>
|
50
|
+
<%= render 'headmin/filters/filter/operator', base.filter_operator_options.merge({selected: nil}) %>
|
51
|
+
<%= yield(nil) %>
|
52
|
+
<%= render 'headmin/filters/filter/null_select', value: nil %>
|
53
|
+
<% end %>
|
54
|
+
</template>
|
55
|
+
<% end %>
|
56
|
+
</template>
|
57
|
+
<% end %>
|
58
|
+
|
59
|
+
<%= content_for :filters_buttons do %>
|
60
|
+
<% if filter_param_exists?(name) %>
|
61
|
+
<%= render 'headmin/filters/filter/button', base.filter_button_options.merge({id: "#{name}_#{SecureRandom.hex}"}) do %>
|
62
|
+
<div class="h-filter-rows mb-3" data-filter-target="wrapper">
|
63
|
+
<% filter.values.each_with_index do |value, index| %>
|
64
|
+
<% if index > 0 %>
|
65
|
+
<%= render 'headmin/filters/filter/conditional', selected: filter.conditionals[index - 1] %>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
<%= render 'headmin/filters/filter/row' do %>
|
69
|
+
<%= render 'headmin/filters/filter/operator', base.filter_operator_options.merge({selected: filter.operators[index]}) %>
|
70
|
+
<%= yield(value) %>
|
71
|
+
<%= render 'headmin/filters/filter/null_select', value: value %>
|
72
|
+
<% end %>
|
73
|
+
<% end %>
|
74
|
+
</div>
|
75
|
+
|
76
|
+
<!-- Apply button -->
|
77
|
+
<button type="submit" class="btn btn-primary w-100" data-action="click->filters#update">
|
78
|
+
<%= t("headmin.filters.apply") %>
|
79
|
+
</button>
|
80
|
+
|
81
|
+
<!-- Filter field -->
|
82
|
+
<%= hidden_field_tag("#{name}", params[name], data: {filter_target: "hidden"}) %>
|
83
|
+
|
84
|
+
<!-- Filter template -->
|
85
|
+
<template data-filter-target="template">
|
86
|
+
<%= render 'headmin/filters/filter/conditional' %>
|
87
|
+
<%= render 'headmin/filters/filter/row' do %>
|
88
|
+
<%= render 'headmin/filters/filter/operator', base.filter_operator_options.merge({selected: nil}) %>
|
89
|
+
<%= yield(nil) %>
|
90
|
+
<%= render 'headmin/filters/filter/null_select', value: nil %>
|
91
|
+
<% end %>
|
92
|
+
</template>
|
93
|
+
<% end %>
|
94
|
+
<% end %>
|
95
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%
|
2
|
+
# headmin/filters/boolean
|
3
|
+
#
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +attribute+ - Name of the attribute to be filtered
|
6
|
+
# * +form+ - Form object
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +name+ - Name of the filter parameter
|
10
|
+
# * +label+ - Display label
|
11
|
+
#
|
12
|
+
# ==== Examples
|
13
|
+
# Basic version
|
14
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
15
|
+
# <%= render 'headmin/filters/boolean', form: form, attribute: :published %#>
|
16
|
+
# <% end %#>
|
17
|
+
|
18
|
+
boolean = Headmin::Filter::BooleanView.new(local_assigns.merge(params: params))
|
19
|
+
%>
|
20
|
+
|
21
|
+
<%= render 'headmin/filters/base', boolean.base_options do |value| %>
|
22
|
+
<%= render 'headmin/forms/select', boolean.input_options.merge(selected: value) %>
|
23
|
+
<% end %>
|
@@ -1,47 +1,23 @@
|
|
1
1
|
<%
|
2
2
|
# headmin/filters/date
|
3
3
|
#
|
4
|
-
# ====
|
5
|
-
# * +
|
6
|
-
# * +
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +attribute+ - Name of the attribute to be filtered
|
6
|
+
# * +form+ - Form object
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +name+ - Name of the filter parameter
|
10
|
+
# * +label+ - Display label
|
7
11
|
#
|
8
12
|
# ==== Examples
|
9
13
|
# Basic version
|
10
|
-
# <%= render
|
11
|
-
|
12
|
-
|
13
|
-
label = local_assigns.has_key?(:label) ? label : name.to_s.humanize
|
14
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
15
|
+
# <%= render 'headmin/filters/date', form: form, attribute: :created_at %#>
|
16
|
+
# <% end %#>
|
14
17
|
|
15
|
-
|
16
|
-
placeholder: 'dd/mm/yyyy',
|
17
|
-
class: "form-control",
|
18
|
-
required: true,
|
19
|
-
data: {
|
20
|
-
'filters-target': 'input',
|
21
|
-
'action': 'change->filters#update',
|
22
|
-
}
|
23
|
-
}
|
18
|
+
date = Headmin::Filter::DateView.new(local_assigns.merge(params: params))
|
24
19
|
%>
|
25
20
|
|
26
|
-
<%=
|
27
|
-
<%= render 'headmin/
|
28
|
-
<% end %>
|
29
|
-
|
30
|
-
<%= content_for :filters_templates do %>
|
31
|
-
<%= render 'headmin/filters/filter/template', name: name, label: label do %>
|
32
|
-
<div class="input-group">
|
33
|
-
<%= date_field_tag(name, nil, input_options) %>
|
34
|
-
</div>
|
35
|
-
<% end %>
|
36
|
-
<% end %>
|
37
|
-
|
38
|
-
<%= content_for :filters_buttons do %>
|
39
|
-
<% if filter_param_exists?(name) %>
|
40
|
-
<% value_formatted = Date.parse(params[name]).strftime('%d/%m/%Y') %>
|
41
|
-
<%= render 'headmin/filters/filter/button', name: name, label: label, value: value_formatted do %>
|
42
|
-
<div class="input-group">
|
43
|
-
<%= date_field_tag(name, params[name], input_options) %>
|
44
|
-
</div>
|
45
|
-
<% end %>
|
46
|
-
<% end %>
|
47
|
-
<% end %>
|
21
|
+
<%= render 'headmin/filters/base', date.base_options do |value| %>
|
22
|
+
<%= render 'headmin/forms/date', date.input_options.merge({value: value}) %>
|
23
|
+
<% end %>
|
@@ -1,57 +1,24 @@
|
|
1
1
|
<%
|
2
2
|
# headmin/filters/flatpickr
|
3
3
|
#
|
4
|
-
# ====
|
5
|
-
# * +
|
6
|
-
# * +
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +form+ - Form object
|
6
|
+
# * +attribute+ - Name of the attribute to be filtered
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +label+ - Display label
|
10
|
+
# * +name+ - Name of the filter parameter
|
7
11
|
#
|
8
12
|
# ==== Examples
|
9
13
|
# Basic version
|
10
|
-
# <%= render
|
11
|
-
|
12
|
-
|
13
|
-
label = local_assigns.has_key?(:label) ? label : name.to_s.humanize
|
14
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
15
|
+
# <%= render 'headmin/filters/flatpickr', form: form, attribute: :created_at %#>
|
16
|
+
# <% end %#>
|
14
17
|
|
15
|
-
|
16
|
-
placeholder: 'dd/mm/yyyy',
|
17
|
-
class: "form-control",
|
18
|
-
required: true,
|
19
|
-
data: {
|
20
|
-
'filters-target': 'input',
|
21
|
-
'flatpickr-target': 'input',
|
22
|
-
'action': 'change->filters#update',
|
23
|
-
'flatpickr-options': {
|
24
|
-
defaultDate: params[name]
|
25
|
-
}
|
26
|
-
}
|
27
|
-
}
|
18
|
+
flatpickr = Headmin::Filter::FlatpickrView.new(local_assigns.merge(params: params))
|
28
19
|
%>
|
29
20
|
|
30
|
-
<%=
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
<%= content_for :filters_templates do %>
|
35
|
-
<%= render 'headmin/filters/filter/template', name: name, label: label do %>
|
36
|
-
<div class="input-group" data-controller="flatpickr">
|
37
|
-
<span class="input-group-text">
|
38
|
-
<%= bootstrap_icon('calendar') %>
|
39
|
-
</span>
|
40
|
-
<%= date_field_tag(name, nil, input_options) %>
|
41
|
-
</div>
|
42
|
-
<% end %>
|
43
|
-
<% end %>
|
44
|
-
|
45
|
-
<%= content_for :filters_buttons do %>
|
46
|
-
<% if filter_param_exists?(name) %>
|
47
|
-
<% value_formatted = Date.parse(params[name]).strftime('%d/%m/%Y') %>
|
48
|
-
<%= render 'headmin/filters/filter/button', name: name, label: label, value: value_formatted do %>
|
49
|
-
<div class="input-group" data-controller="flatpickr">
|
50
|
-
<span class="input-group-text">
|
51
|
-
<%= bootstrap_icon('calendar') %>
|
52
|
-
</span>
|
53
|
-
<%= date_field_tag(name, params[name], input_options) %>
|
54
|
-
</div>
|
55
|
-
<% end %>
|
56
|
-
<% end %>
|
57
|
-
<% end %>
|
21
|
+
<%= render 'headmin/filters/base', flatpickr.base_options do |value| %>
|
22
|
+
<% default_date = value != 1 && value != 0 ? value&.strftime("%d/%m/%Y") : value %>
|
23
|
+
<%= render 'headmin/forms/flatpickr', flatpickr.input_options.deep_merge({value: value, data: {flatpickr: {defaultDate: default_date}}}) %>
|
24
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%
|
2
|
+
# headmin/filters/number
|
3
|
+
#
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +attribute+ - Name of the attribute to be filtered
|
6
|
+
# * +form+ - Form object
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +label+ - Display label
|
10
|
+
# * +name+ - Name of the filter parameter
|
11
|
+
#
|
12
|
+
# ==== Examples
|
13
|
+
# Basic version
|
14
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
15
|
+
# <%= render 'headmin/filters/number', form: form, attribute: :beverages %#>
|
16
|
+
# <% end %#>
|
17
|
+
|
18
|
+
number = Headmin::Filter::NumberView.new(local_assigns.merge(params: params))
|
19
|
+
%>
|
20
|
+
|
21
|
+
<%= render 'headmin/filters/base', number.base_options do |value| %>
|
22
|
+
<%= render 'headmin/forms/number', number.input_options.merge({value: value}) %>
|
23
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<%
|
2
|
+
# headmin/filters/boolean
|
3
|
+
#
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +attribute+ - Name of the attribute to be filtered
|
6
|
+
# * +collection+ - Values to create option tags for
|
7
|
+
# * +form+ - Form object
|
8
|
+
#
|
9
|
+
# ==== Optional parameters
|
10
|
+
# * +label+ - Display label
|
11
|
+
# * +name+ - Name of the filter parameter
|
12
|
+
#
|
13
|
+
# ==== Examples
|
14
|
+
# Basic version
|
15
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
16
|
+
# <%= render 'headmin/filters/options', form: form, attribute: :category %#>
|
17
|
+
# <% end %#>
|
18
|
+
|
19
|
+
options = Headmin::Filter::OptionsView.new(local_assigns.merge(params: params))
|
20
|
+
%>
|
21
|
+
|
22
|
+
<%= render 'headmin/filters/base', options.base_options do |value| %>
|
23
|
+
<%= render 'headmin/forms/select', options.input_options.merge(selected: value) %>
|
24
|
+
<% end %>
|
@@ -1,22 +1,24 @@
|
|
1
1
|
<%
|
2
2
|
# headmin/filters/search
|
3
3
|
#
|
4
|
-
# ====
|
5
|
-
# * +
|
6
|
-
# * +
|
7
|
-
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +attribute+ - Name of the attribute to be filtered
|
6
|
+
# * +form+ - Form object
|
7
|
+
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +name+ - Name of the filter parameter
|
10
|
+
# * +label+ - Name of the resource to be used in the placeholder (search in ...)
|
11
|
+
# * +placeholder+ - Placeholder in the search field
|
8
12
|
#
|
9
13
|
# ==== Examples
|
10
14
|
# Basic version.
|
11
|
-
# <%= render 'headmin/filters
|
12
|
-
|
13
|
-
|
14
|
-
label = local_assigns.has_key?(:label) ? label : name.to_s.humanize
|
15
|
-
placeholder = local_assigns.has_key?(:placeholder) ? placeholder : t('.placeholder', resource: label)
|
15
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
16
|
+
# <%= render 'headmin/filters/search', attribute: :search, label: Poll.model_name.human(count: 2) %#>
|
17
|
+
# <% end %#>
|
16
18
|
|
17
|
-
|
19
|
+
search = Headmin::Filter::SearchView.new(local_assigns.merge(params: params))
|
18
20
|
%>
|
19
21
|
|
20
22
|
<% content_for :filters_search do %>
|
21
|
-
|
22
|
-
<% end %>
|
23
|
+
<%= render 'headmin/forms/search', search.input_options %>
|
24
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%
|
2
|
+
# headmin/filters/text
|
3
|
+
#
|
4
|
+
# ==== Required parameters
|
5
|
+
# * +form+ - Form object
|
6
|
+
# * +attribute+ - Name of the attribute to be filtered
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
9
|
+
# * +label+ - Display label
|
10
|
+
# * +name+ - Name of the filter parameter
|
11
|
+
#
|
12
|
+
# ==== Examples
|
13
|
+
# Basic version
|
14
|
+
# <%= render 'headmin/filters', url: admin_orders_path do |form| %#>
|
15
|
+
# <%= render 'headmin/filters/text', form: form, attribute: :title %#>
|
16
|
+
# <% end %#>
|
17
|
+
|
18
|
+
text = Headmin::Filter::TextView.new(local_assigns.merge(params: params))
|
19
|
+
%>
|
20
|
+
|
21
|
+
<%= render 'headmin/filters/base', text.base_options do |value| %>
|
22
|
+
<%= render 'headmin/forms/text', text.input_options.merge({value: value}) %>
|
23
|
+
<% end %>
|
@@ -3,28 +3,27 @@
|
|
3
3
|
accepts block: yes
|
4
4
|
parameters:
|
5
5
|
name: (string) Name of the parameter
|
6
|
-
label: (string) Display name
|
7
6
|
value: (string) Value of the parameter
|
8
7
|
%>
|
9
|
-
<% id = local_assigns.has_key?(:id) ? id : SecureRandom.hex %>
|
10
|
-
<% name = local_assigns.has_key?(:name) ? name.to_sym : nil %>
|
11
|
-
<% label = local_assigns.has_key?(:label) ? label : name.to_s.humanize %>
|
12
|
-
<% value = local_assigns.has_key?(:value) ? value : nil %>
|
13
8
|
|
14
|
-
|
9
|
+
<% button_view = Headmin::Filter::ButtonView.new(local_assigns) %>
|
10
|
+
|
11
|
+
<div class="h-filter me-1 my-1" data-controller="filter" data-filter-name="<%= button_view.name %>" data-filter-name-value="<%= button_view.name %>">
|
15
12
|
<button
|
16
13
|
type="button"
|
17
14
|
class="h-filter-button btn h-btn-outline-transparent"
|
18
15
|
data-filter-target="button"
|
19
16
|
data-popup-target="button"
|
20
|
-
data-popup-id="<%= id %>"
|
17
|
+
data-popup-id="<%= button_view.id %>"
|
21
18
|
data-action="click->popup#open"
|
22
19
|
>
|
23
|
-
<%= "#{label}
|
24
|
-
<span class="h-filter-remove" data-action="click->filters#remove"
|
20
|
+
<%= raw("#{button_view.label} #{button_view.filter&.string(display_values: button_view.display_values)}") %>
|
21
|
+
<span class="h-filter-remove" data-action="click->filters#remove">
|
22
|
+
<%= bootstrap_icon('x-lg') %>
|
23
|
+
</span>
|
25
24
|
</button>
|
26
25
|
|
27
|
-
<%= render 'headmin/popup', id: "#{id}", data: {'filter-target': 'popup'} do %>
|
26
|
+
<%= render 'headmin/popup', id: "#{button_view.id}", data: {'filter-target': 'popup'} do %>
|
28
27
|
<%= yield %>
|
29
28
|
<% end %>
|
30
29
|
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%#
|
2
|
+
headmin/filters/filter/conditional
|
3
|
+
accepts block: no
|
4
|
+
parameters:
|
5
|
+
|
6
|
+
%>
|
7
|
+
|
8
|
+
<% conditional = Headmin::Filter::ConditionalView.new(local_assigns) %>
|
9
|
+
|
10
|
+
<div class="h-filter-conditional">
|
11
|
+
<select class="form-control-plaintext form-control-sm" data-action="change->filter#updateHiddenValue" data-filter-target="conditional">
|
12
|
+
<% conditional.values.each do |value, display_value| %>
|
13
|
+
<option value="<%= value %>" <%= conditional.selected == value.to_s ? "selected" : "" %>>
|
14
|
+
<%= display_value.upcase %>
|
15
|
+
</option>
|
16
|
+
<% end %>
|
17
|
+
</select>
|
18
|
+
</div>
|
@@ -5,8 +5,11 @@
|
|
5
5
|
name: (string) Name of the parameter
|
6
6
|
label: (string) Display name
|
7
7
|
%>
|
8
|
+
|
9
|
+
<% menu_item = Headmin::Filter::MenuItemView.new(local_assigns) %>
|
10
|
+
|
8
11
|
<li>
|
9
|
-
<a class="dropdown-item" href="#" data-filters-target="menuItem" data-action="click->filters#add" data-filter-name="<%= name %>">
|
10
|
-
<%= label %>
|
12
|
+
<a class="dropdown-item" href="#" data-filters-target="menuItem" data-action="click->filters#add" data-filter-name="<%= menu_item.name %>">
|
13
|
+
<%= menu_item.label %>
|
11
14
|
</a>
|
12
15
|
</li>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<select class="form-select" data-filter-row-target="null" data-action="change->filter#updateHiddenValue" data-filter-target="value">
|
2
|
+
<option value="1" <%= value == 1 ? "selected" : "" %>>
|
3
|
+
<%= t('headmin.filters.values.yes') %>
|
4
|
+
</option>
|
5
|
+
<option value="0" <%= value == 0 ? "selected" : "" %>>
|
6
|
+
<%= t('headmin.filters.values.no') %>
|
7
|
+
</option>
|
8
|
+
</select>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%#
|
2
|
+
headmin/filters/filter/button
|
3
|
+
accepts block: no
|
4
|
+
parameters:
|
5
|
+
|
6
|
+
%>
|
7
|
+
|
8
|
+
<% operators = Headmin::Filter::OperatorView.new(local_assigns) %>
|
9
|
+
|
10
|
+
<select class="h-filter-operator form-select" data-action="change->filter#updateHiddenValue" data-filter-target="operator" data-filter-row-target="operator">
|
11
|
+
<% operators.allowed_operators.each do |operator| %>
|
12
|
+
<option value="<%= operator.to_s %>" <%= operators.selected == operator.to_s ? "selected" : "" %>>
|
13
|
+
<%= raw(operators.operator_symbol[operator.to_sym]) %>
|
14
|
+
</option>
|
15
|
+
<% end %>
|
16
|
+
</select>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% row = Headmin::Filter::RowView.new(local_assigns) %>
|
2
|
+
|
3
|
+
<div class="h-filter-row" data-controller="filter-row" data-filter-target="row">
|
4
|
+
<%= yield(row.operator, row.value) %>
|
5
|
+
<button type="button" class="btn btn-sm btn-link h-filter-add-input" data-action="click->filter#add">
|
6
|
+
<i class="bi bi-plus-circle"></i>
|
7
|
+
</button>
|
8
|
+
<button type="button" class="btn btn-sm btn-link h-filter-remove-input" data-action="click->filter#remove">
|
9
|
+
<i class="bi bi-dash-circle"></i>
|
10
|
+
</button>
|
11
|
+
</div>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<div class="h-autocomplete d-none" data-autocomplete-target="dropdown">
|
2
2
|
<% if collection.any? %>
|
3
|
-
<%= render
|
3
|
+
<%= render 'headmin/forms/autocomplete/list' do %>
|
4
4
|
<% collection.each do |value, name| %>
|
5
|
-
<%= render
|
5
|
+
<%= render 'headmin/forms/autocomplete/item', value: value do %>
|
6
6
|
<%= name %>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
@@ -10,13 +10,13 @@
|
|
10
10
|
#
|
11
11
|
# ==== Examples
|
12
12
|
# Basic version. (looks in views/admin/blocks, views/blocks or views directory )
|
13
|
-
# <%= render
|
13
|
+
# <%= render 'headmin/forms/blocks', form: form, names: %w(text image button) %#>
|
14
14
|
#
|
15
15
|
# Define one ore more path where the templates could be located:
|
16
|
-
# <%= render
|
16
|
+
# <%= render 'headmin/forms/blocks', form: form, names: %w(text image button), paths: %w(admin/pages/blocks) %#>
|
17
17
|
#
|
18
18
|
# Limit the types of blocks
|
19
|
-
# <%= render
|
19
|
+
# <%= render 'headmin/forms/blocks', form: form, names: %w(text text_image list) %#>
|
20
20
|
|
21
21
|
blocks = Headmin::Form::BlocksView.new(local_assigns)
|
22
22
|
@lookup_context.prefixes = @lookup_context.prefixes + blocks.prefixes
|