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
|