metadata_presenter 2.17.11 → 2.17.14
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/app/controllers/metadata_presenter/answers_controller.rb +3 -1
- data/app/controllers/metadata_presenter/engine_controller.rb +7 -0
- data/app/controllers/metadata_presenter/pages_controller.rb +1 -4
- data/app/models/metadata_presenter/autocomplete_item.rb +1 -1
- data/app/models/metadata_presenter/component.rb +16 -1
- data/app/models/metadata_presenter/page.rb +1 -1
- data/app/models/metadata_presenter/page_answers.rb +4 -3
- data/app/presenters/metadata_presenter/page_answers_presenter.rb +4 -0
- data/app/validators/metadata_presenter/autocomplete_validator.rb +21 -0
- data/app/validators/metadata_presenter/validate_answers.rb +11 -4
- data/app/views/layouts/metadata_presenter/application.html.erb +5 -8
- data/app/views/metadata_presenter/component/_autocomplete.html.erb +6 -1
- data/default_metadata/component/autocomplete.json +2 -1
- data/default_metadata/string/error.autocomplete.json +6 -0
- data/fixtures/countries.json +7 -0
- data/fixtures/version.json +2 -1
- data/lib/metadata_presenter/version.rb +1 -1
- data/schemas/component/autocomplete.json +3 -5
- data/schemas/definition/select.json +3 -9
- data/schemas/definition/select_item.json +1 -5
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e97452ef08994e231a3652ad8f9ccdae67668e04bb3e449fd958a0872e4320ca
|
4
|
+
data.tar.gz: 6bacb894b8f40bda5ac33ffa4625d9a0970ba676d11184cdd97c8c1c5db2d0d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c446088262eea4845c754ed6f17b30237fc50acdd1b9f96b9bb78e2acb28d45445bf50d26a699188497ef58e90e8799fa2d7d384f350dac509e46d98b77faa36
|
7
|
+
data.tar.gz: e583b37191f8d82e357c06eb0bd17113bf2531ae1f7e4de3a40991d20ddcb4ce2877bf9cfa8bc81ae8da1964ab5c0b0150154feb2e6f8e7a013eed632fdf07e1
|
@@ -4,7 +4,7 @@ module MetadataPresenter
|
|
4
4
|
|
5
5
|
def create
|
6
6
|
@previous_answers = reload_user_data.deep_dup
|
7
|
-
@page_answers = PageAnswers.new(page, answers_params)
|
7
|
+
@page_answers = PageAnswers.new(page, answers_params, autocomplete_items(page.components))
|
8
8
|
|
9
9
|
upload_files if upload?
|
10
10
|
|
@@ -43,6 +43,8 @@ module MetadataPresenter
|
|
43
43
|
|
44
44
|
def render_validation_error
|
45
45
|
@user_data = answers_params
|
46
|
+
load_autocomplete_items
|
47
|
+
|
46
48
|
render template: page.template, status: :unprocessable_entity
|
47
49
|
end
|
48
50
|
|
@@ -57,6 +57,13 @@ module MetadataPresenter
|
|
57
57
|
end
|
58
58
|
helper_method :analytics_tags_present?
|
59
59
|
|
60
|
+
def load_autocomplete_items
|
61
|
+
if @page.autocomplete_component_present?
|
62
|
+
items = autocomplete_items(@page.components)
|
63
|
+
@page.assign_autocomplete_items(items)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
60
67
|
private
|
61
68
|
|
62
69
|
def not_found
|
@@ -5,10 +5,7 @@ module MetadataPresenter
|
|
5
5
|
@page ||= service.find_page_by_url(request.env['PATH_INFO'])
|
6
6
|
|
7
7
|
if @page
|
8
|
-
|
9
|
-
items = autocomplete_items(@page.components)
|
10
|
-
@page.assign_autocomplete_items(items)
|
11
|
-
end
|
8
|
+
load_autocomplete_items
|
12
9
|
|
13
10
|
@page_answers = PageAnswers.new(@page, @user_data)
|
14
11
|
render template: @page.template
|
@@ -10,6 +10,17 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
10
10
|
# Threshold percentage at which the remaining count is shown
|
11
11
|
VALIDATION_STRING_LENGTH_THRESHOLD = 75
|
12
12
|
|
13
|
+
# Overriding here because autocomplete component's items property is non interactable
|
14
|
+
# in the Editor therefore it does not need to exist in the data-fb-content-data
|
15
|
+
# attribute on the page. The data-fb-content-data attribute is what is used to
|
16
|
+
# update user interactable elements such as the component question or page section
|
17
|
+
# heading etc.
|
18
|
+
def to_json(*_args)
|
19
|
+
return super unless autocomplete?
|
20
|
+
|
21
|
+
JSON.parse(super).to_json(except: 'items')
|
22
|
+
end
|
23
|
+
|
13
24
|
def to_partial_path
|
14
25
|
"metadata_presenter/component/#{type}"
|
15
26
|
end
|
@@ -25,7 +36,7 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
25
36
|
end
|
26
37
|
|
27
38
|
def item_klass
|
28
|
-
|
39
|
+
autocomplete? ? MetadataPresenter::AutocompleteItem : MetadataPresenter::Item
|
29
40
|
end
|
30
41
|
|
31
42
|
SUPPORTS_BRANCHING = %w[radios checkboxes].freeze
|
@@ -34,6 +45,10 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
34
45
|
type.in?(SUPPORTS_BRANCHING)
|
35
46
|
end
|
36
47
|
|
48
|
+
def autocomplete?
|
49
|
+
type == 'autocomplete'
|
50
|
+
end
|
51
|
+
|
37
52
|
def content?
|
38
53
|
type == 'content'
|
39
54
|
end
|
@@ -3,16 +3,17 @@ module MetadataPresenter
|
|
3
3
|
include ActiveModel::Model
|
4
4
|
include ActiveModel::Validations
|
5
5
|
include ActionView::Helpers
|
6
|
-
attr_reader :page, :answers, :uploaded_files
|
6
|
+
attr_reader :page, :answers, :uploaded_files, :autocomplete_items
|
7
7
|
|
8
|
-
def initialize(page, answers)
|
8
|
+
def initialize(page, answers, autocomplete_items = nil)
|
9
9
|
@page = page
|
10
10
|
@answers = answers
|
11
|
+
@autocomplete_items = autocomplete_items
|
11
12
|
@uploaded_files = []
|
12
13
|
end
|
13
14
|
|
14
15
|
def validate_answers
|
15
|
-
ValidateAnswers.new(self, components: components).valid?
|
16
|
+
ValidateAnswers.new(self, components: components, autocomplete_items: autocomplete_items).valid?
|
16
17
|
end
|
17
18
|
|
18
19
|
delegate :components, to: :page
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class AutocompleteValidator < BaseValidator
|
3
|
+
attr_reader :autocomplete_items
|
4
|
+
|
5
|
+
def initialize(page_answers:, component:, autocomplete_items:)
|
6
|
+
super(page_answers: page_answers, component: component)
|
7
|
+
|
8
|
+
@autocomplete_items = autocomplete_items
|
9
|
+
end
|
10
|
+
|
11
|
+
def invalid_answer?
|
12
|
+
return if autocomplete_item_list.blank?
|
13
|
+
|
14
|
+
autocomplete_item_list.exclude?(JSON.parse(user_answer))
|
15
|
+
end
|
16
|
+
|
17
|
+
def autocomplete_item_list
|
18
|
+
@autocomplete_item_list ||= autocomplete_items[component.uuid]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module MetadataPresenter
|
2
2
|
class ValidateAnswers
|
3
|
-
attr_reader :page_answers, :components
|
3
|
+
attr_reader :page_answers, :components, :autocomplete_items
|
4
4
|
|
5
|
-
def initialize(page_answers, components:)
|
5
|
+
def initialize(page_answers, components:, autocomplete_items:)
|
6
6
|
@page_answers = page_answers
|
7
7
|
@components = Array(components)
|
8
|
+
@autocomplete_items = autocomplete_items
|
8
9
|
end
|
9
10
|
|
10
11
|
def valid?
|
@@ -21,8 +22,10 @@ module MetadataPresenter
|
|
21
22
|
components.map { |component|
|
22
23
|
component_validations(component).map do |key|
|
23
24
|
"MetadataPresenter::#{key.classify}Validator".constantize.new(
|
24
|
-
|
25
|
-
|
25
|
+
{
|
26
|
+
component: component,
|
27
|
+
page_answers: page_answers
|
28
|
+
}.merge(autocomplete_param(key))
|
26
29
|
)
|
27
30
|
end
|
28
31
|
}.compact.flatten
|
@@ -33,5 +36,9 @@ module MetadataPresenter
|
|
33
36
|
|
34
37
|
component.validation.select { |_, value| value.present? }.keys
|
35
38
|
end
|
39
|
+
|
40
|
+
def autocomplete_param(key)
|
41
|
+
key == 'autocomplete_item' ? { autocomplete_items: autocomplete_items } : {}
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
@@ -14,8 +14,8 @@
|
|
14
14
|
<link rel="apple-touch-icon" sizes="152x152" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon-152x152.png') %>">
|
15
15
|
<link rel="apple-touch-icon" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon.png') %>">
|
16
16
|
|
17
|
-
<%=
|
18
|
-
<%=
|
17
|
+
<%= javascript_pack_tag 'runner_application', 'govuk', defer: true %>
|
18
|
+
<%= stylesheet_pack_tag 'govuk', 'runner_application', media: 'all' %>
|
19
19
|
|
20
20
|
<% if allow_analytics? %>
|
21
21
|
<%= render template: 'metadata_presenter/analytics/analytics' %>
|
@@ -30,15 +30,12 @@
|
|
30
30
|
<%= render template: 'metadata_presenter/header/show' %>
|
31
31
|
<div class="govuk-width-container govuk-body-m">
|
32
32
|
<main class="govuk-main-wrapper govuk-main-wrapper--auto-spacing" id="main-content" role="main">
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
<% if back_link.present? %>
|
34
|
+
<a class="govuk-back-link" href="<%= back_link %>">Back</a>
|
35
|
+
<% end %>
|
37
36
|
<%= yield %>
|
38
37
|
</main>
|
39
38
|
</div>
|
40
39
|
<%= render template: 'metadata_presenter/footer/footer' %>
|
41
|
-
<%= javascript_pack_tag 'runner_application' %>
|
42
|
-
<%= javascript_pack_tag 'govuk' %>
|
43
40
|
</body>
|
44
41
|
</html>
|
@@ -3,14 +3,19 @@
|
|
3
3
|
component.items,
|
4
4
|
:id,
|
5
5
|
:name,
|
6
|
+
selected: component.value,
|
6
7
|
label: { text: input_title },
|
7
8
|
hint: {
|
8
9
|
data: { "fb-default-text" => default_text('hint') },
|
9
10
|
text: component.hint
|
10
11
|
},
|
11
|
-
class: "govuk-!-width-two-thirds"
|
12
|
+
class: "govuk-!-width-two-thirds fb-autocomplete",
|
13
|
+
options: {
|
14
|
+
include_blank: true
|
15
|
+
}
|
12
16
|
%>
|
13
17
|
|
14
18
|
<% if editable? %>
|
15
19
|
<%= render partial: '/partials/editable_autocomplete', locals: { component: component } %>
|
16
20
|
<% end %>
|
21
|
+
|
data/fixtures/version.json
CHANGED
@@ -4,14 +4,12 @@
|
|
4
4
|
"title": "Autocomplete",
|
5
5
|
"description": "Let users select one option from an auto-completing list",
|
6
6
|
"type": "object",
|
7
|
-
"allOf": [
|
8
|
-
{
|
9
|
-
"$ref": "definition.select"
|
10
|
-
}
|
11
|
-
],
|
12
7
|
"properties": {
|
13
8
|
"_type": {
|
14
9
|
"const": "autocomplete"
|
10
|
+
},
|
11
|
+
"items": {
|
12
|
+
"$ref": "definition.select"
|
15
13
|
}
|
16
14
|
}
|
17
15
|
}
|
@@ -2,15 +2,9 @@
|
|
2
2
|
"$id": "http://gov.uk/schema/v1.0.0/definition/select",
|
3
3
|
"_name": "definition.select",
|
4
4
|
"title": "Select component definition",
|
5
|
-
"
|
6
|
-
|
7
|
-
|
8
|
-
"description": "Items that users can select",
|
9
|
-
"type": "array",
|
10
|
-
"items": {
|
11
|
-
"$ref": "definition.select_item"
|
12
|
-
}
|
13
|
-
}
|
5
|
+
"type": "array",
|
6
|
+
"items": {
|
7
|
+
"$ref": "definition.select_item"
|
14
8
|
},
|
15
9
|
"required": [
|
16
10
|
"items"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.17.
|
4
|
+
version: 2.17.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MoJ Forms
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govuk_design_system_formbuilder
|
@@ -299,6 +299,7 @@ files:
|
|
299
299
|
- app/operators/metadata_presenter/operator.rb
|
300
300
|
- app/presenters/metadata_presenter/page_answers_presenter.rb
|
301
301
|
- app/validators/metadata_presenter/accept_validator.rb
|
302
|
+
- app/validators/metadata_presenter/autocomplete_validator.rb
|
302
303
|
- app/validators/metadata_presenter/base_validator.rb
|
303
304
|
- app/validators/metadata_presenter/date_after_validator.rb
|
304
305
|
- app/validators/metadata_presenter/date_before_validator.rb
|
@@ -390,6 +391,7 @@ files:
|
|
390
391
|
- default_metadata/page/start.json
|
391
392
|
- default_metadata/service/base.json
|
392
393
|
- default_metadata/string/error.accept.json
|
394
|
+
- default_metadata/string/error.autocomplete.json
|
393
395
|
- default_metadata/string/error.date.json
|
394
396
|
- default_metadata/string/error.date_after.json
|
395
397
|
- default_metadata/string/error.date_before.json
|
@@ -435,6 +437,7 @@ files:
|
|
435
437
|
- fixtures/branching_8.png
|
436
438
|
- fixtures/branching_9.json
|
437
439
|
- fixtures/branching_9.png
|
440
|
+
- fixtures/countries.json
|
438
441
|
- fixtures/exit_only_service.json
|
439
442
|
- fixtures/invalid_content_page.json
|
440
443
|
- fixtures/no_component_page.json
|