katalyst-govuk-formbuilder 1.19.0 → 1.20.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.
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Katalyst
4
+ module GOVUK
5
+ module FormBuilder
6
+ module Elements
7
+ class Image < GOVUKDesignSystemFormBuilder::Base
8
+ include ActionDispatch::Routing::RouteSet::MountedHelpers
9
+
10
+ include GOVUKDesignSystemFormBuilder::Traits::Error
11
+ include GOVUKDesignSystemFormBuilder::Traits::Hint
12
+ include GOVUKDesignSystemFormBuilder::Traits::Label
13
+ include GOVUKDesignSystemFormBuilder::Traits::Supplemental
14
+ include GOVUKDesignSystemFormBuilder::Traits::HTMLAttributes
15
+ include GOVUKDesignSystemFormBuilder::Traits::HTMLClasses
16
+
17
+ include FormBuilder::Traits::File
18
+
19
+ def initialize(builder, object_name, attribute_name, hint:, label:, caption:, form_group:, mime_types:,
20
+ **kwargs, &)
21
+ super(builder, object_name, attribute_name, &)
22
+
23
+ @mime_types = mime_types
24
+ @label = label
25
+ @caption = caption
26
+ @hint = hint
27
+ @html_attributes = kwargs.merge(file_input_options)
28
+ @form_group = form_group
29
+ end
30
+
31
+ def html
32
+ GOVUKDesignSystemFormBuilder::Containers::FormGroup.new(
33
+ *bound,
34
+ **default_form_group_options(**@form_group),
35
+ ).html do
36
+ safe_join([label_element, preview, hint_element, error_element, file, destroy_element,
37
+ supplemental_content])
38
+ end
39
+ end
40
+
41
+ def preview
42
+ options = {}
43
+ add_option(options, :data, "#{stimulus_controller}_target", "preview")
44
+ add_option(options, :class, "preview-image")
45
+ options[:hidden] = "" unless preview?
46
+
47
+ tag.div(**options) do
48
+ tag.img(src: preview_url, class: "image-thumbnail") + destroy_element_trigger
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def stimulus_controller
55
+ "govuk-image-field"
56
+ end
57
+
58
+ def form_group_class
59
+ "govuk-image-field"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -4,7 +4,7 @@ require "govuk_design_system_formbuilder"
4
4
 
5
5
  module Katalyst
6
6
  module GOVUK
7
- module Formbuilder
7
+ module FormBuilder
8
8
  module Elements
9
9
  # Extend Elements::Label to add support for human_attribute_name as a fallback
10
10
  module Label
@@ -4,7 +4,7 @@ require "govuk_design_system_formbuilder"
4
4
 
5
5
  module Katalyst
6
6
  module GOVUK
7
- module Formbuilder
7
+ module FormBuilder
8
8
  module Elements
9
9
  # Extend Elements::Legend to add support for human_attribute_name as a fallback
10
10
  module Legend
@@ -4,7 +4,7 @@ require "govuk_design_system_formbuilder"
4
4
 
5
5
  module Katalyst
6
6
  module GOVUK
7
- module Formbuilder
7
+ module FormBuilder
8
8
  module Elements
9
9
  class RichTextArea < GOVUKDesignSystemFormBuilder::Base
10
10
  using GOVUKDesignSystemFormBuilder::PrefixableArray
@@ -6,15 +6,18 @@ require "rails/engine"
6
6
 
7
7
  module Katalyst
8
8
  module GOVUK
9
- module Formbuilder
9
+ module FormBuilder
10
10
  class Engine < ::Rails::Engine
11
11
  ActiveSupport::Inflector.inflections(:en) do |inflect|
12
12
  inflect.acronym "GOVUK"
13
13
  end
14
14
 
15
- config.eager_load_namespaces << Katalyst::GOVUK::Formbuilder
16
15
  config.paths.add("lib", autoload_once: true)
17
16
 
17
+ initializer "katalyst-govuk-formbuilder.autoload", before: :setup_once_autoloader do
18
+ Rails.autoloaders.once.ignore File.expand_path(root.join("lib/katalyst-govuk-formbuilder.rb"))
19
+ end
20
+
18
21
  initializer "katalyst-govuk-formbuilder.assets" do
19
22
  config.after_initialize do |app|
20
23
  if app.config.respond_to?(:assets)
@@ -25,7 +28,7 @@ module Katalyst
25
28
  end
26
29
 
27
30
  initializer "katalyst-govuk-formbuilder.extensions" do
28
- GOVUKDesignSystemFormBuilder::Builder.include(Formbuilder::Extensions)
31
+ GOVUKDesignSystemFormBuilder::Builder.include(FormBuilder::Extensions)
29
32
  end
30
33
 
31
34
  initializer "katalyst-govuk-formbuilder.importmap", before: "importmap" do |app|
@@ -4,11 +4,12 @@ require "govuk_design_system_formbuilder"
4
4
 
5
5
  module Katalyst
6
6
  module GOVUK
7
- module Formbuilder
7
+ module FormBuilder
8
8
  module Extensions
9
9
  extend ActiveSupport::Concern
10
10
 
11
11
  included do
12
+ GOVUKDesignSystemFormBuilder.include(Config)
12
13
  GOVUKDesignSystemFormBuilder::Builder.include(Builder)
13
14
  GOVUKDesignSystemFormBuilder::Elements::Label.include(Elements::Label)
14
15
  GOVUKDesignSystemFormBuilder::Elements::Legend.include(Elements::Legend)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Katalyst
4
4
  module GOVUK
5
- module Formbuilder
5
+ module FormBuilder
6
6
  module Frontend
7
7
  # rubocop:disable Rails/OutputSafety
8
8
  def govuk_formbuilder_init
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "govuk_design_system_formbuilder"
4
+
5
+ module Katalyst
6
+ module GOVUK
7
+ module FormBuilder
8
+ module Traits
9
+ module File
10
+ extend ActiveSupport::Concern
11
+
12
+ protected
13
+
14
+ def stimulus_controller_actions
15
+ <<~ACTIONS.gsub(/\s+/, " ").freeze
16
+ dragover->#{stimulus_controller}#dragover
17
+ dragenter->#{stimulus_controller}#dragenter
18
+ dragleave->#{stimulus_controller}#dragleave
19
+ drop->#{stimulus_controller}#drop
20
+ ACTIONS
21
+ end
22
+
23
+ def file
24
+ previous_input = @builder.hidden_field(@attribute_name, id: nil, value: value.signed_id) if attached?
25
+ file_input = @builder.file_field(@attribute_name, attributes(@html_attributes))
26
+
27
+ safe_join([previous_input, file_input])
28
+ end
29
+
30
+ def destroy_element
31
+ return if @html_attributes[:optional].blank?
32
+
33
+ @builder.fields_for(:"#{@attribute_name}_attachment") do |form|
34
+ form.hidden_field :_destroy, value: false, data: { "#{stimulus_controller}_target" => "destroy" }
35
+ end
36
+ end
37
+
38
+ def destroy_element_trigger
39
+ return if @html_attributes[:optional].blank?
40
+
41
+ content_tag(:button, "", class: "file-destroy", data: { action: "#{stimulus_controller}#setDestroy" })
42
+ end
43
+
44
+ def preview_url
45
+ preview? ? main_app.polymorphic_path(value, only_path: true) : ""
46
+ end
47
+
48
+ def preview?
49
+ attached?
50
+ end
51
+
52
+ def attached?
53
+ value&.attached? && value.blob.persisted?
54
+ end
55
+
56
+ def value
57
+ @builder.object.send(@attribute_name)
58
+ end
59
+
60
+ def file_input_options
61
+ default_file_input_options = options
62
+
63
+ add_option(default_file_input_options, :accept, @mime_types.join(","))
64
+ add_option(default_file_input_options, :data, :action, "change->#{stimulus_controller}#onUpload")
65
+
66
+ default_file_input_options
67
+ end
68
+
69
+ def options
70
+ {
71
+ id: field_id(link_errors: true),
72
+ class: classes,
73
+ aria: { describedby: combine_references(hint_id, error_id, supplemental_id) },
74
+ }
75
+ end
76
+
77
+ using GOVUKDesignSystemFormBuilder::PrefixableArray
78
+
79
+ def classes
80
+ build_classes(%(file-upload), %(file-upload--error) => has_errors?).prefix(brand)
81
+ end
82
+
83
+ def default_form_group_options(**form_group_options)
84
+ add_option(form_group_options, :class, "govuk-form-group #{form_group_class}")
85
+ add_option(form_group_options, :data, :controller, stimulus_controller)
86
+ add_option(form_group_options, :data, :action, stimulus_controller_actions)
87
+ add_option(form_group_options, :data, :"#{stimulus_controller}_mime_types_value",
88
+ @mime_types.to_json)
89
+
90
+ form_group_options
91
+ end
92
+
93
+ def add_option(options, key, *path)
94
+ if path.length > 1
95
+ add_option(options[key] ||= {}, *path)
96
+ else
97
+ options[key] = [options[key], *path].compact.join(" ")
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -4,7 +4,7 @@ require "govuk_design_system_formbuilder"
4
4
 
5
5
  module Katalyst
6
6
  module GOVUK
7
- module Formbuilder
7
+ module FormBuilder
8
8
  module Traits
9
9
  # Extend GovukDesignSystemFormBuilder::Traits::Label set the default size to small for non-nested labels.
10
10
  module Label
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "active_support/rails"
5
+
6
+ module Katalyst
7
+ module GOVUK
8
+ module FormBuilder
9
+ end
10
+ end
11
+ end
12
+
13
+ require "katalyst/govuk/form_builder/engine"
@@ -1,13 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support"
3
+ require "katalyst-govuk-formbuilder"
4
4
 
5
+ # Backwards compatibility for Koi 4
5
6
  module Katalyst
6
7
  module GOVUK
7
- module Formbuilder
8
- extend ActiveSupport::Autoload
9
- end
8
+ Formbuilder = FormBuilder
10
9
  end
11
10
  end
12
-
13
- require "katalyst/govuk/formbuilder/engine"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "katalyst/govuk/form_builder"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-govuk-formbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
@@ -35,22 +35,29 @@ files:
35
35
  - app/assets/builds/katalyst/govuk/formbuilder.css
36
36
  - app/assets/builds/katalyst/govuk/formbuilder.js
37
37
  - app/assets/builds/katalyst/govuk/formbuilder.min.js
38
+ - app/assets/builds/katalyst/govuk/formbuilder.min.js.map
38
39
  - app/assets/config/katalyst-govuk-formbuilder.js
39
40
  - app/assets/stylesheets/katalyst/govuk/components/combobox/_index.scss
40
41
  - app/assets/stylesheets/katalyst/govuk/components/richtextarea/_index.scss
41
42
  - app/assets/stylesheets/katalyst/govuk/formbuilder.scss
42
43
  - config/importmap.rb
44
+ - lib/katalyst-govuk-formbuilder.rb
45
+ - lib/katalyst/govuk/form_builder.rb
46
+ - lib/katalyst/govuk/form_builder/builder.rb
47
+ - lib/katalyst/govuk/form_builder/config.rb
48
+ - lib/katalyst/govuk/form_builder/containers/fieldset_context.rb
49
+ - lib/katalyst/govuk/form_builder/elements/combobox.rb
50
+ - lib/katalyst/govuk/form_builder/elements/document.rb
51
+ - lib/katalyst/govuk/form_builder/elements/image.rb
52
+ - lib/katalyst/govuk/form_builder/elements/label.rb
53
+ - lib/katalyst/govuk/form_builder/elements/legend.rb
54
+ - lib/katalyst/govuk/form_builder/elements/rich_text_area.rb
55
+ - lib/katalyst/govuk/form_builder/engine.rb
56
+ - lib/katalyst/govuk/form_builder/extensions.rb
57
+ - lib/katalyst/govuk/form_builder/frontend.rb
58
+ - lib/katalyst/govuk/form_builder/traits/file.rb
59
+ - lib/katalyst/govuk/form_builder/traits/label.rb
43
60
  - lib/katalyst/govuk/formbuilder.rb
44
- - lib/katalyst/govuk/formbuilder/builder.rb
45
- - lib/katalyst/govuk/formbuilder/containers/fieldset_context.rb
46
- - lib/katalyst/govuk/formbuilder/elements/combobox.rb
47
- - lib/katalyst/govuk/formbuilder/elements/label.rb
48
- - lib/katalyst/govuk/formbuilder/elements/legend.rb
49
- - lib/katalyst/govuk/formbuilder/elements/rich_text_area.rb
50
- - lib/katalyst/govuk/formbuilder/engine.rb
51
- - lib/katalyst/govuk/formbuilder/extensions.rb
52
- - lib/katalyst/govuk/formbuilder/frontend.rb
53
- - lib/katalyst/govuk/formbuilder/traits/label.rb
54
61
  - node_modules/govuk-frontend/dist/govuk/_base.scss
55
62
  - node_modules/govuk-frontend/dist/govuk/all.scss
56
63
  - node_modules/govuk-frontend/dist/govuk/components/_all.scss
@@ -196,6 +203,7 @@ homepage: https://github.com/katalyst/govuk-formbuilder
196
203
  licenses:
197
204
  - MIT
198
205
  metadata:
206
+ changelog_uri: https://github.com/katalyst/govuk-formbuilder/releases
199
207
  rubygems_mfa_required: 'true'
200
208
  rdoc_options: []
201
209
  require_paths: