diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss index 05581b774..c6e72a248 100644 --- a/app/assets/stylesheets/admin.scss +++ b/app/assets/stylesheets/admin.scss @@ -315,7 +315,7 @@ $table-header: #ecf1f6; } .admin-content { - .proposal-form { + .proposal-new { padding-top: 0; } } diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index fe57dab83..e49fb0e52 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -38,7 +38,9 @@ @import "tags"; @import "admin/**/*"; @import "budgets/**/*"; +@import "debates/**/*"; @import "layout/**/*"; +@import "proposals/**/*"; @import "sdg/**/*"; @import "sdg_management/*"; @import "sdg_management/**/*"; diff --git a/app/assets/stylesheets/budgets/investments/form.scss b/app/assets/stylesheets/budgets/investments/form.scss index 6d84a466d..4d8c15d01 100644 --- a/app/assets/stylesheets/budgets/investments/form.scss +++ b/app/assets/stylesheets/budgets/investments/form.scss @@ -1,62 +1,3 @@ .budget-investment-form { - - .required-fields { - @include full-width-background($adjust-padding: true); - background: $light; - margin-bottom: $line-height; - padding-top: $line-height; - } - - > fieldset > legend { - float: left; - font-size: rem-calc(36); - font-weight: bold; - margin-bottom: $line-height; - text-transform: uppercase; - - + * { - clear: left; - } - } - - select { - min-height: $line-height * 2; - - @include breakpoint(medium) { - &:not(.js-add-language):not(.js-select-language) { - width: 50%; - } - } - } - - .globalize-languages, - .translatable-fields { - @include grid-row-nest; - @include grid-column-gutter; - } - - .sdg-related-list-selector { - padding-left: 0; - padding-right: 0; - } - - [type="submit"] { - @include regular-button; - font-size: map-get($button-sizes, large); - margin-top: $line-height; - } - - .actions { - border: 6px solid $border; - border-radius: rem-calc(12); - margin-left: auto; - margin-right: auto; - margin-top: $line-height * 2; - padding: $line-height * 2 $line-height; - text-align: center; - - @include breakpoint(medium) { - width: 75%; - } - } + @extend %public-form; } diff --git a/app/assets/stylesheets/budgets/investments/new.scss b/app/assets/stylesheets/budgets/investments/new.scss index f13325fbf..95d1e2e09 100644 --- a/app/assets/stylesheets/budgets/investments/new.scss +++ b/app/assets/stylesheets/budgets/investments/new.scss @@ -1,85 +1,7 @@ .budget-investment-new { - $border-width: 4px; - @include grid-column-gutter; - - > :first-child:not(.print-info) { - @include full-width-background($adjust-padding: true); - background: $light; - margin-top: -$line-height; - padding-top: $line-height; - } + @extend %public-form-header; h1 { - margin-bottom: 0; - } - - header { - @include has-fa-icon(building, regular, after); - align-items: center; - background-color: $body-background; - border: $border-width solid; - color: $brand-secondary; - border-bottom-right-radius: rem-calc(12); - border-top-right-radius: rem-calc(12); - display: flex; - margin-top: $line-height * 2; - - @include breakpoint(large) { - padding-right: $line-height; - } - - &::after { - display: none; - - @include breakpoint(large) { - display: block; - font-size: rem-calc(100); - margin-left: $line-height; - } - } - - h1 { - @include brand-background($brand-secondary); - @include background-till-left-of-screen; - @include has-fa-icon(chart-pie, solid, after); - align-items: center; - display: flex; - flex: 1; - font-size: rem-calc(36); - padding: $line-height * 2 0; - - @include breakpoint(large) { - clip-path: polygon( - -100vw -#{$border-width}, - 100% -#{$border-width}, - calc(100% - #{rem-calc(20)}) 50%, - 100% calc(100% + #{$border-width}), - -100vw calc(100% + #{$border-width}) - ); - font-size: rem-calc(44); - } - - &::before { - top: -$border-width; - height: calc(100% + 2 * #{$border-width}); - } - - &::after { - display: none; - - @include breakpoint(medium) { - display: block; - font-size: 2em; - margin-left: auto; - margin-right: rem-calc(60); - } - } - - span span { - display: block; - font-size: 0.75em; - margin-top: $line-height / 2; - } - } + @include has-fa-icon(chart-pie, solid, after); } } diff --git a/app/assets/stylesheets/debates/form.scss b/app/assets/stylesheets/debates/form.scss new file mode 100644 index 000000000..749053aee --- /dev/null +++ b/app/assets/stylesheets/debates/form.scss @@ -0,0 +1,3 @@ +.debate-form { + @extend %public-form; +} diff --git a/app/assets/stylesheets/debates/new.scss b/app/assets/stylesheets/debates/new.scss new file mode 100644 index 000000000..5c212c2c9 --- /dev/null +++ b/app/assets/stylesheets/debates/new.scss @@ -0,0 +1,15 @@ +.debate-new { + @extend %public-form-header; + + h1 { + @include has-fa-icon(comment-alt, regular, after); + } + + aside { + margin-top: $line-height; + } + + .recommendations li::before { + color: $debates; + } +} diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index ec9aef363..bb15ed9c0 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -64,6 +64,20 @@ body { } } +main { + display: block; + + &.budget-investment-new, + &.debate-new, + &.proposal-new, + &.sdg-goals-index, + &.sdg-goal-show, + &.topic-edit, + &.topic-new { + @include grid-column-gutter; + } +} + h1, h2, h3, diff --git a/app/assets/stylesheets/mixins/forms.scss b/app/assets/stylesheets/mixins/forms.scss new file mode 100644 index 000000000..c321b6acb --- /dev/null +++ b/app/assets/stylesheets/mixins/forms.scss @@ -0,0 +1,178 @@ +@import "mixins/icons"; +@import "mixins/layouts"; + +@mixin public-form-header { + $border-width: 4px; + + h1 { + margin-bottom: 0; + } + + header { + $icon-size: $line-height * 4; + $padding-right: rem-calc(20); + $icon-size-with-padding: $icon-size + $padding-right; + $polygon-size: $icon-size / 2; + @include background-till-left-of-screen; + @include brand-background($brand-secondary); + border: $border-width solid $brand-secondary; + border-bottom-right-radius: rem-calc(12); + border-top-right-radius: rem-calc(12); + margin-top: $line-height * 2; + padding: $line-height * 2 0; + position: relative; + + @include breakpoint(small) { + &::after { + display: none; + } + } + + @include breakpoint(large) { + $rounding-error: 6px; + padding-right: $icon-size-with-padding; + background-image: linear-gradient( + to right, + #{$brand-secondary} 0, + #{$brand-secondary} calc(100% - #{$icon-size-with-padding} - 1px), + #{$body-background} calc(100% - #{$icon-size-with-padding}), + #{$body-background} 100% + ); + + &::after { + background: $body-background; + content: ""; + clip-path: polygon(50% 0, 100% 0, 100% 100%, 50% calc(100% + 1px), 0 50%); + display: block; + position: absolute; + right: calc(#{$icon-size-with-padding} - #{$rounding-error}); + top: 0; + height: 100%; + width: $polygon-size; + } + } + + &::before { + top: -$border-width; + height: calc(100% + #{$border-width * 2}); + } + + h1 { + $heading-icon-size: $icon-size * 0.85; + @include has-fa-icon(building, regular); + font-size: rem-calc(36); + + @include breakpoint(small) { + &::after, + &::before { + display: none; + position: absolute; + top: 50%; + transform: translateY(-50%); + } + } + + @include breakpoint(medium) { + padding-right: $heading-icon-size * 2.5; + + &::after { + display: block; + font-size: $heading-icon-size; + right: $heading-icon-size; + } + } + + @include breakpoint(large) { + font-size: rem-calc(44); + + &::after { + right: $icon-size-with-padding + $polygon-size + $heading-icon-size / 2; + } + + &::before { + color: $brand-secondary; + display: block; + font-size: $icon-size; + right: $padding-right; + } + } + + span { + display: block; + font-size: 0.75em; + margin-top: $line-height / 2; + } + } + + a { + color: inherit; + text-decoration: underline; + } + } +} + +%public-form-header { + @include public-form-header; +} + +@mixin public-form { + + .required-fields { + @include full-width-background($adjust-padding: true); + background: $light; + margin-bottom: $line-height; + padding-top: $line-height; + } + + > fieldset > legend { + float: left; + font-size: rem-calc(36); + font-weight: bold; + margin-bottom: $line-height; + text-transform: uppercase; + + + * { + clear: left; + } + } + + select { + min-height: $line-height * 2; + + @include breakpoint(medium) { + &:not(.js-add-language):not(.js-select-language) { + width: 50%; + } + } + } + + .globalize-languages, + .translatable-fields { + @include grid-row-nest; + @include grid-column-gutter; + } + + [type="submit"] { + @include regular-button; + font-size: map-get($button-sizes, large); + margin-top: $line-height; + } + + .actions { + border: 6px solid $border; + border-radius: rem-calc(12); + margin-left: auto; + margin-right: auto; + margin-top: $line-height * 2; + padding: $line-height * 2 $line-height; + text-align: center; + + @include breakpoint(medium) { + width: 75%; + } + } +} + +%public-form { + @include public-form; +} diff --git a/app/assets/stylesheets/mixins/layouts.scss b/app/assets/stylesheets/mixins/layouts.scss index 445e8e6f0..fecb67d2c 100644 --- a/app/assets/stylesheets/mixins/layouts.scss +++ b/app/assets/stylesheets/mixins/layouts.scss @@ -87,7 +87,7 @@ position: relative; &::before { - background: inherit; + background-color: inherit; content: ""; height: 100%; position: absolute; diff --git a/app/assets/stylesheets/participation.scss b/app/assets/stylesheets/participation.scss index 1a1228b3c..e2e9d9eda 100644 --- a/app/assets/stylesheets/participation.scss +++ b/app/assets/stylesheets/participation.scss @@ -244,71 +244,23 @@ // 02. New participation // --------------------- -.debate-form, -.proposal-form, -.budget-investment-form, -.document-form, -.topic-new, -.topic-form { - - .icon-debates, - .icon-proposals, - .icon-budget, - .icon-image { - font-size: rem-calc(50); - line-height: $line-height; - opacity: 0.5; - } - - .icon-debates { - color: $debates; - } - - .icon-proposals, - .icon-image { - color: $proposals; - } - - .icon-budget { - color: $budget; - } -} - .recommendations { list-style-type: none; margin-left: 0; margin-top: $line-height; li { - font-size: $small-font-size; + @include has-fa-icon(check, solid); margin: $line-height / 2 0; &::before { - content: "l "; - font-family: "icons" !important; + margin-right: $font-icon-margin * 1.5; } } } -.debate-form { - - .recommendations li::before { - color: $debates; - } -} - -.proposal-form, -.document-form, -.topic-form, -.topic-new { - - .recommendations li::before { - color: $proposals; - } -} - .budget-investment-new, -.proposal-form, +.proposal-new, .proposal-edit, .polls-form, .poll-question-form, diff --git a/app/assets/stylesheets/proposals/form.scss b/app/assets/stylesheets/proposals/form.scss new file mode 100644 index 000000000..a3a8bf538 --- /dev/null +++ b/app/assets/stylesheets/proposals/form.scss @@ -0,0 +1,3 @@ +.proposal-form { + @extend %public-form; +} diff --git a/app/assets/stylesheets/proposals/new.scss b/app/assets/stylesheets/proposals/new.scss new file mode 100644 index 000000000..50e9aa694 --- /dev/null +++ b/app/assets/stylesheets/proposals/new.scss @@ -0,0 +1,15 @@ +.proposal-new { + @extend %public-form-header; + + header h1 { + @include has-fa-icon(lightbulb, regular, after); + } + + aside { + margin-top: $line-height; + } + + .recommendations li::before { + color: $proposals; + } +} diff --git a/app/assets/stylesheets/sdg/goals/index.scss b/app/assets/stylesheets/sdg/goals/index.scss index 9ca2002f7..91588aaaa 100644 --- a/app/assets/stylesheets/sdg/goals/index.scss +++ b/app/assets/stylesheets/sdg/goals/index.scss @@ -1,5 +1,4 @@ .sdg-goals-index { - @include grid-column-gutter; .section-header { diff --git a/app/assets/stylesheets/sdg/goals/show.scss b/app/assets/stylesheets/sdg/goals/show.scss index f0ddce8a6..f86539b6a 100644 --- a/app/assets/stylesheets/sdg/goals/show.scss +++ b/app/assets/stylesheets/sdg/goals/show.scss @@ -1,5 +1,4 @@ .sdg-goal-show { - @include grid-column-gutter; .sdg-goal { diff --git a/app/assets/stylesheets/sdg/related_list_selector.scss b/app/assets/stylesheets/sdg/related_list_selector.scss index 7b32edaf7..cf97da3f7 100644 --- a/app/assets/stylesheets/sdg/related_list_selector.scss +++ b/app/assets/stylesheets/sdg/related_list_selector.scss @@ -1,5 +1,4 @@ .sdg-related-list-selector { - @include grid-column-gutter; clear: both; > legend { diff --git a/app/assets/stylesheets/sdg_management/relations/edit.scss b/app/assets/stylesheets/sdg_management/relations/edit.scss deleted file mode 100644 index a719b4336..000000000 --- a/app/assets/stylesheets/sdg_management/relations/edit.scss +++ /dev/null @@ -1,6 +0,0 @@ -.sdg-relations-edit { - - .sdg-related-list-selector { - padding: 0; - } -} diff --git a/app/components/budgets/investments/new_component.html.erb b/app/components/budgets/investments/new_component.html.erb new file mode 100644 index 000000000..49ff6f2f2 --- /dev/null +++ b/app/components/budgets/investments/new_component.html.erb @@ -0,0 +1,7 @@ +
+ <%= back_link_to budgets_path %> + + <%= header %> + + <%= render "/budgets/investments/form", form_url: budget_investments_path(budget) %> +
diff --git a/app/components/budgets/investments/new_component.rb b/app/components/budgets/investments/new_component.rb new file mode 100644 index 000000000..f893a2ad9 --- /dev/null +++ b/app/components/budgets/investments/new_component.rb @@ -0,0 +1,26 @@ +class Budgets::Investments::NewComponent < ApplicationComponent + include Header + attr_reader :budget + + def initialize(budget) + @budget = budget + end + + def title + safe_join([base_title, subtitle].compact, " ") + end + + private + + def base_title + sanitize(t("budgets.investments.form.title")) + end + + def subtitle + if budget.single_heading? + tag.span t("budgets.investments.form.subtitle", + heading: budget.headings.first.name, + price: budget.formatted_heading_price(budget.headings.first)) + end + end +end diff --git a/app/components/concerns/header.rb b/app/components/concerns/header.rb index bc90818b3..fe62a0d9b 100644 --- a/app/components/concerns/header.rb +++ b/app/components/concerns/header.rb @@ -3,14 +3,24 @@ module Header def header(&block) provide(:title) do - "#{t("#{namespace}.header.title")} - #{title}" + [ + t("#{namespace}.header.title", default: ""), + strip_tags(title), + setting["org_name"] + ].reject(&:blank?).join(" - ") end + heading_tag = if %w[admin management moderation sdg_management valuation].include?(namespace) + "h2" + else + "h1" + end + tag.header do if block_given? - tag.h2(title) + capture(&block) + content_tag(heading_tag, title) + capture(&block) else - tag.h2(title) + content_tag(heading_tag, title) end end end diff --git a/app/components/debates/form_component.html.erb b/app/components/debates/form_component.html.erb new file mode 100644 index 000000000..f7d1b2098 --- /dev/null +++ b/app/components/debates/form_component.html.erb @@ -0,0 +1,55 @@ +<%= translatable_form_for(debate, html: { class: "debate-form" }) do |f| %> + <%= render "shared/errors", resource: debate %> + +
+ <%= t("shared.required") %> + + <%= render "shared/globalize_locales", resource: debate %> + + <%= f.translatable_fields do |translations_form| %> +
+ <%= translations_form.text_field :title, + maxlength: Debate.title_max_length, + data: suggest_data(debate) %> +
+
+ +
+ <%= translations_form.text_area :description, + maxlength: Debate.description_max_length, + class: "html-area" %> +
+ <% end %> +
+ + <%= f.invisible_captcha :subtitle %> + +
+ <%= t("shared.optional") %> + +
+ <%= f.text_field :tag_list, value: debate.tag_list.to_s, + hint: t("debates.form.tags_instructions"), + placeholder: t("debates.form.tags_placeholder"), + data: { js_url: suggest_tags_path }, + class: "tag-autocomplete" %> +
+ + <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+ +
+ <% if debate.new_record? %> +
+ <%= f.check_box :terms_of_service, + title: t("form.accept_terms_title"), + label: t("form.accept_terms", + policy: link_to(t("form.policy"), "/privacy", target: "blank"), + conditions: link_to(t("form.conditions"), "/conditions", target: "blank") + ) %> +
+ <% end %> + + <%= f.submit(class: "button", value: t("debates.#{action_name}.form.submit_button")) %> +
+<% end %> diff --git a/app/components/debates/form_component.rb b/app/components/debates/form_component.rb new file mode 100644 index 000000000..508e003cc --- /dev/null +++ b/app/components/debates/form_component.rb @@ -0,0 +1,10 @@ +class Debates::FormComponent < ApplicationComponent + include TranslatableFormHelper + include GlobalizeHelper + attr_reader :debate + delegate :suggest_data, to: :helpers + + def initialize(debate) + @debate = debate + end +end diff --git a/app/components/debates/new_component.html.erb b/app/components/debates/new_component.html.erb new file mode 100644 index 000000000..91510dd95 --- /dev/null +++ b/app/components/debates/new_component.html.erb @@ -0,0 +1,22 @@ +
+ <%= back_link_to debates_path, t("debates.index.section_header.title") %> + + <%= header do %> + <%= link_to help_path(anchor: "debates"), title: t("shared.target_blank"), target: "_blank" do %> + <%= t("debates.new.more_info") %> + <% end %> + <% end %> + + + + <%= render Debates::FormComponent.new(debate) %> +
diff --git a/app/components/debates/new_component.rb b/app/components/debates/new_component.rb new file mode 100644 index 000000000..7ca2c1c9f --- /dev/null +++ b/app/components/debates/new_component.rb @@ -0,0 +1,12 @@ +class Debates::NewComponent < ApplicationComponent + include Header + attr_reader :debate + + def initialize(debate) + @debate = debate + end + + def title + t("debates.new.start_new") + end +end diff --git a/app/components/proposals/form_component.html.erb b/app/components/proposals/form_component.html.erb new file mode 100644 index 000000000..f1af97081 --- /dev/null +++ b/app/components/proposals/form_component.html.erb @@ -0,0 +1,114 @@ +<%= translatable_form_for(proposal, url: url, html: { class: "proposal-form" }) do |f| %> + <%= render "shared/errors", resource: proposal %> + +
+ <%= t("shared.required") %> + + <%= render "shared/globalize_locales", resource: proposal %> + + <%= f.translatable_fields do |translations_form| %> +
+ <%= translations_form.text_field :title, + maxlength: Proposal.title_max_length, + data: suggest_data(proposal) %> +
+
+ +
+ <%= translations_form.text_area :summary, + rows: 4, maxlength: 200, + hint: t("proposals.form.proposal_summary_note") %> +
+ +
+ <%= translations_form.text_area :description, + maxlength: Proposal.description_max_length, + class: "html-area" %> +
+ <% end %> +
+ + <%= f.invisible_captcha :subtitle %> + +
+ <%= t("shared.optional") %> + +
+ <%= f.text_field :video_url, hint: t("proposals.form.proposal_video_url_note") %> +
+ + <% if feature?(:allow_images) %> +
+ <%= render "images/nested_image", imageable: proposal, f: f %> +
+ <% end %> + + <% if feature?(:allow_attached_documents) %> +
+ <%= render "documents/nested_documents", documentable: proposal, f: f %> +
+ <% end %> + +
+ <%= f.select :geozone_id, geozone_select_options, + include_blank: t("geozones.none") %> +
+ + <% if feature?(:map) %> +
+ <%= render "map_locations/form_fields", + form: f, + map_location: proposal.map_location || MapLocation.new, + label: t("proposals.form.map_location"), + help: t("proposals.form.map_location_instructions"), + remove_marker_label: t("proposals.form.map_remove_marker"), + parent_class: "proposal", + i18n_namespace: "proposals" %> +
+ <% end %> + +
+ <%= f.label :tag_list, t("proposals.form.tags_label") %> +

<%= t("proposals.form.tags_instructions") %>

+ +
+ <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> + <% categories.each do |tag| %> + <%= tag.name %> + <% end %> +
+ +
+ <%= f.text_field :tag_list, value: proposal.tag_list.to_s, + label: false, + placeholder: t("proposals.form.tags_placeholder"), + class: "js-tag-list tag-autocomplete", + aria: { describedby: "tag-list-help-text" }, + data: { js_url: suggest_tags_path } %> +
+ + <% if current_user.unverified? %> +
+ <%= f.text_field :responsible_name, + hint: t("proposals.form.proposal_responsible_name_note") %> +
+ <% end %> + + <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+ +
+ <% if proposal.new_record? %> +
+ <%= f.check_box :terms_of_service, + title: t("form.accept_terms_title"), + label: t("form.accept_terms", + policy: link_to(t("form.policy"), "/privacy", target: "blank"), + conditions: link_to(t("form.conditions"), "/conditions", target: "blank") + ) %> +
+ <% end %> + + <%= f.submit(class: "button", value: t("proposals.#{action_name}.form.submit_button")) %> +
+<% end %> diff --git a/app/components/proposals/form_component.rb b/app/components/proposals/form_component.rb new file mode 100644 index 000000000..4ec266d05 --- /dev/null +++ b/app/components/proposals/form_component.rb @@ -0,0 +1,17 @@ +class Proposals::FormComponent < ApplicationComponent + include TranslatableFormHelper + include GlobalizeHelper + attr_reader :proposal, :url + delegate :current_user, :suggest_data, :geozone_select_options, to: :helpers + + def initialize(proposal, url:) + @proposal = proposal + @url = url + end + + private + + def categories + Tag.category.order(:name) + end +end diff --git a/app/components/proposals/new_component.html.erb b/app/components/proposals/new_component.html.erb new file mode 100644 index 000000000..986f230dd --- /dev/null +++ b/app/components/proposals/new_component.html.erb @@ -0,0 +1,21 @@ +
+ <%= back_link_to proposals_path, t("proposals.index.section_header.title") %> + + <%= header do %> + <%= link_to help_path(anchor: "proposals"), title: t("shared.target_blank"), target: "_blank" do %> + <%= t("proposals.new.more_info") %> + <% end %> + <% end %> + + + + <%= render Proposals::FormComponent.new(proposal, url: proposals_path) %> +
diff --git a/app/components/proposals/new_component.rb b/app/components/proposals/new_component.rb new file mode 100644 index 000000000..05dbc81c1 --- /dev/null +++ b/app/components/proposals/new_component.rb @@ -0,0 +1,12 @@ +class Proposals::NewComponent < ApplicationComponent + include Header + attr_reader :proposal + + def initialize(proposal) + @proposal = proposal + end + + def title + t("proposals.new.start_new") + end +end diff --git a/app/components/sdg/goals/show_component.html.erb b/app/components/sdg/goals/show_component.html.erb index 2cd9176ed..74b2a3a6b 100644 --- a/app/components/sdg/goals/show_component.html.erb +++ b/app/components/sdg/goals/show_component.html.erb @@ -1,6 +1,6 @@ <% provide(:title) { goal.title } %> -
+
<%= back_link_to sdg_goals_path %>
@@ -36,4 +36,4 @@ <% end %> <%= render SDG::Goals::TargetsComponent.new(goal) %> -
+ diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb index 31ced92e1..1d1b647f9 100644 --- a/app/controllers/concerns/commentable_actions.rb +++ b/app/controllers/concerns/commentable_actions.rb @@ -52,7 +52,6 @@ module CommentableActions redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id) redirect_to redirect_path, notice: t("flash.actions.create.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :new @@ -66,7 +65,6 @@ module CommentableActions if resource.update(strong_params) redirect_to resource, notice: t("flash.actions.update.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :edit diff --git a/app/controllers/management/proposals_controller.rb b/app/controllers/management/proposals_controller.rb index a384bb541..740a4b81c 100644 --- a/app/controllers/management/proposals_controller.rb +++ b/app/controllers/management/proposals_controller.rb @@ -7,7 +7,6 @@ class Management::ProposalsController < Management::BaseController before_action :only_verified_users, except: :print before_action :set_proposal, only: [:vote, :show] before_action :parse_search_terms, only: :index - before_action :load_categories, only: [:new, :edit] before_action :load_geozones, only: [:edit] has_orders %w[confidence_score hot_score created_at most_commented random], only: [:index, :print] @@ -22,7 +21,6 @@ class Management::ProposalsController < Management::BaseController redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id) redirect_to redirect_path, notice: t("flash.actions.create.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :new diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index fc0b977df..dd4932ed1 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -7,7 +7,7 @@ class ProposalsController < ApplicationController include MapLocationAttributes include Translatable - before_action :load_categories, only: [:index, :new, :create, :edit, :map, :summary] + before_action :load_categories, only: [:index, :map, :summary] before_action :load_geozones, only: [:edit, :map, :summary] before_action :authenticate_user!, except: [:index, :show, :map, :summary] before_action :destroy_map_location_association, only: :update diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index 1ecfec53d..98ab0e51c 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -187,7 +187,9 @@
- <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+ <%= render SDG::RelatedListSelectorComponent.new(f) %> +
diff --git a/app/views/admin/poll/polls/_form.html.erb b/app/views/admin/poll/polls/_form.html.erb index cb542612d..b3ce9eaf3 100644 --- a/app/views/admin/poll/polls/_form.html.erb +++ b/app/views/admin/poll/polls/_form.html.erb @@ -56,7 +56,9 @@
- <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+ <%= render SDG::RelatedListSelectorComponent.new(f) %> +
diff --git a/app/views/budgets/investments/new.html.erb b/app/views/budgets/investments/new.html.erb index df1291c36..51b90a799 100644 --- a/app/views/budgets/investments/new.html.erb +++ b/app/views/budgets/investments/new.html.erb @@ -1,23 +1 @@ -
-
- <%= back_link_to budgets_path %> - -
-

- - <%= t("budgets.investments.form.title") %> - - <% if @budget.single_heading? %> - - <%= t("budgets.investments.form.subtitle", - heading: @budget.headings.first.name, - price: @budget.formatted_heading_price(@budget.headings.first)) %> - - <% end %> - -

-
-
- - <%= render "/budgets/investments/form", form_url: budget_investments_path(@budget) %> -
+<%= render Budgets::Investments::NewComponent.new(@budget) %> diff --git a/app/views/debates/_form.html.erb b/app/views/debates/_form.html.erb index 76719da4c..c3409558a 100644 --- a/app/views/debates/_form.html.erb +++ b/app/views/debates/_form.html.erb @@ -1,50 +1 @@ -<%= render "shared/globalize_locales", resource: @debate %> - -<%= translatable_form_for(@debate) do |f| %> - - <%= render "shared/errors", resource: @debate %> - -
- <%= f.translatable_fields do |translations_form| %> -
- <%= translations_form.text_field :title, - maxlength: Debate.title_max_length, - data: suggest_data(@debate) %> -
-
- -
- <%= translations_form.text_area :description, - maxlength: Debate.description_max_length, - class: "html-area" %> -
- <% end %> - - <%= f.invisible_captcha :subtitle %> - -
- <%= f.text_field :tag_list, value: @debate.tag_list.to_s, - hint: t("debates.form.tags_instructions"), - placeholder: t("debates.form.tags_placeholder"), - data: { js_url: suggest_tags_path }, - class: "tag-autocomplete" %> -
- - <%= render SDG::RelatedListSelectorComponent.new(f) %> - -
- <% if @debate.new_record? %> - <%= f.check_box :terms_of_service, - title: t("form.accept_terms_title"), - label: t("form.accept_terms", - policy: link_to(t("form.policy"), "/privacy", target: "blank"), - conditions: link_to(t("form.conditions"), "/conditions", target: "blank") - ) %> - <% end %> -
- -
- <%= f.submit(class: "button", value: t("debates.#{action_name}.form.submit_button")) %> -
-
-<% end %> +<%= render Debates::FormComponent.new(@debate) %> diff --git a/app/views/debates/edit.html.erb b/app/views/debates/edit.html.erb index 8645be255..da1a51e05 100644 --- a/app/views/debates/edit.html.erb +++ b/app/views/debates/edit.html.erb @@ -1,4 +1,4 @@ -
+
<%= back_link_to %> diff --git a/app/views/debates/new.html.erb b/app/views/debates/new.html.erb index 4e75679de..d798c7b8b 100644 --- a/app/views/debates/new.html.erb +++ b/app/views/debates/new.html.erb @@ -1,30 +1 @@ -
- -
- <%= back_link_to debates_path %> - -

<%= t("debates.new.start_new") %>

-
- <%= sanitize(t("debates.new.info", - info_link: link_to(t("debates.new.info_link"), new_proposal_path))) %> - - <% if feature?(:help_page) %> - <%= link_to help_path, title: t("shared.target_blank"), target: "_blank" do %> - <%= t("debates.new.more_info") %> - <% end %> - <% end %> -
- <%= render "form" %> -
- -
- -

<%= t("debates.new.recommendations_title") %>

-
    -
  • <%= t("debates.new.recommendation_one") %>
  • -
  • <%= t("debates.new.recommendation_two") %>
  • -
  • <%= t("debates.new.recommendation_three") %>
  • -
  • <%= t("debates.new.recommendation_four") %>
  • -
-
-
+<%= render Debates::NewComponent.new(@debate) %> diff --git a/app/views/legislation/proposals/new.html.erb b/app/views/legislation/proposals/new.html.erb index 058914f5d..e0a707fef 100644 --- a/app/views/legislation/proposals/new.html.erb +++ b/app/views/legislation/proposals/new.html.erb @@ -1,4 +1,4 @@ -
+
<%= back_link_to %> diff --git a/app/views/management/proposals/new.html.erb b/app/views/management/proposals/new.html.erb index 5d6a21159..943d63d71 100644 --- a/app/views/management/proposals/new.html.erb +++ b/app/views/management/proposals/new.html.erb @@ -1,4 +1,4 @@ -
+
<%= render "/shared/print" %> diff --git a/app/views/proposals/_form.html.erb b/app/views/proposals/_form.html.erb index 44b14fc59..aa749b961 100644 --- a/app/views/proposals/_form.html.erb +++ b/app/views/proposals/_form.html.erb @@ -1,111 +1 @@ -<%= render "shared/globalize_locales", resource: @proposal %> - -<%= translatable_form_for(@proposal, url: form_url) do |f| %> - - <%= render "shared/errors", resource: @proposal %> - -
- <%= f.translatable_fields do |translations_form| %> -
- <%= translations_form.text_field :title, - maxlength: Proposal.title_max_length, - data: suggest_data(@proposal) %> -
-
- -
- <%= translations_form.text_area :summary, - rows: 4, maxlength: 200, - hint: t("proposals.form.proposal_summary_note") %> -
- -
- <%= translations_form.text_area :description, - maxlength: Proposal.description_max_length, - class: "html-area" %> -
- <% end %> - - <%= f.invisible_captcha :subtitle %> - -
- <%= f.text_field :video_url, hint: t("proposals.form.proposal_video_url_note") %> -
- - <% if feature?(:allow_images) %> -
- <%= render "images/nested_image", imageable: @proposal, f: f %> -
- <% end %> - - <% if feature?(:allow_attached_documents) %> -
- <%= render "documents/nested_documents", documentable: @proposal, f: f %> -
- <% end %> - -
- <%= f.select :geozone_id, geozone_select_options, - include_blank: t("geozones.none") %> -
- - <% if feature?(:map) %> -
- - <%= render "map_locations/form_fields", - form: f, - map_location: @proposal.map_location || MapLocation.new, - label: t("proposals.form.map_location"), - help: t("proposals.form.map_location_instructions"), - remove_marker_label: t("proposals.form.map_remove_marker"), - parent_class: "proposal", - i18n_namespace: "proposals" %> - -
- <% end %> - -
- <%= f.label :tag_list, t("proposals.form.tags_label") %> -

<%= t("proposals.form.tags_instructions") %>

- -
- <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> - <% @categories.each do |tag| %> - <%= tag.name %> - <% end %> -
- -
- <%= f.text_field :tag_list, value: @proposal.tag_list.to_s, - label: false, - placeholder: t("proposals.form.tags_placeholder"), - class: "js-tag-list tag-autocomplete", - aria: { describedby: "tag-list-help-text" }, - data: { js_url: suggest_tags_path } %> -
- - <% if current_user.unverified? %> -
- <%= f.text_field :responsible_name, - hint: t("proposals.form.proposal_responsible_name_note") %> -
- <% end %> - - <%= render SDG::RelatedListSelectorComponent.new(f) %> - -
- <% if @proposal.new_record? %> - <%= f.check_box :terms_of_service, - title: t("form.accept_terms_title"), - label: t("form.accept_terms", - policy: link_to(t("form.policy"), "/privacy", target: "blank"), - conditions: link_to(t("form.conditions"), "/conditions", target: "blank") - ) %> - <% end %> -
- -
- <%= f.submit(class: "button", value: t("proposals.#{action_name}.form.submit_button")) %> -
-
-<% end %> +<%= render Proposals::FormComponent.new(@proposal, url: form_url) %> diff --git a/app/views/proposals/edit.html.erb b/app/views/proposals/edit.html.erb index a615dda37..a66bd0ce8 100644 --- a/app/views/proposals/edit.html.erb +++ b/app/views/proposals/edit.html.erb @@ -1,4 +1,4 @@ -
+
<%= back_link_to %> diff --git a/app/views/proposals/new.html.erb b/app/views/proposals/new.html.erb index f38b9f3ce..92a9ce0e4 100644 --- a/app/views/proposals/new.html.erb +++ b/app/views/proposals/new.html.erb @@ -1,24 +1 @@ -
- -
- <%= back_link_to %> - -

<%= t("proposals.new.start_new") %>

-
- <%= link_to help_path(anchor: "proposals"), title: t("shared.target_blank"), target: "_blank" do %> - <%= t("proposals.new.more_info") %> - <% end %> -
- <%= render "proposals/form", form_url: proposals_path %> -
- -
- -

<%= t("proposals.new.recommendations_title") %>

-
    -
  • <%= t("proposals.new.recommendation_one") %>
  • -
  • <%= t("proposals.new.recommendation_two") %>
  • -
  • <%= t("proposals.new.recommendation_three") %>
  • -
-
-
+<%= render Proposals::NewComponent.new(@proposal) %> diff --git a/app/views/topics/_form.html.erb b/app/views/topics/_form.html.erb index 579dfd141..739040616 100644 --- a/app/views/topics/_form.html.erb +++ b/app/views/topics/_form.html.erb @@ -2,13 +2,8 @@ <%= render "shared/errors", resource: @topic %> -
-
- <%= f.text_field :title %> - <%= f.text_area :description, rows: "5" %> - - <%= f.submit(class: "button", value: t("community.topic.form.#{action_name}.submit_button")) %> -
-
+ <%= f.text_field :title %> + <%= f.text_area :description, rows: "5" %> + <%= f.submit(class: "button", value: t("community.topic.form.#{action_name}.submit_button")) %> <% end %> diff --git a/app/views/topics/_recommendations.html.erb b/app/views/topics/_recommendations.html.erb deleted file mode 100644 index ff86b877b..000000000 --- a/app/views/topics/_recommendations.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

<%= t("community.topic.sidebar.recommendations_title") %>

- -
    -
  • <%= t("community.topic.sidebar.recommendation_one") %>
  • -
  • <%= t("community.topic.sidebar.recommendation_two") %>
  • -
  • <%= t("community.topic.sidebar.recommendation_three") %>
  • -
diff --git a/app/views/topics/edit.html.erb b/app/views/topics/edit.html.erb index e305acd13..8788b1229 100644 --- a/app/views/topics/edit.html.erb +++ b/app/views/topics/edit.html.erb @@ -1,12 +1,7 @@ -
+
+ <%= back_link_to community_path(@community) %> -
- <%= back_link_to community_path(@community) %> -

<%= t("community.topic.edit") %>

- <%= render "form" %> -
+

<%= t("community.topic.edit") %>

-
- <%= render "recommendations" %> -
-
+ <%= render "form" %> + diff --git a/app/views/topics/new.html.erb b/app/views/topics/new.html.erb index bf13b1294..aed9fbd71 100644 --- a/app/views/topics/new.html.erb +++ b/app/views/topics/new.html.erb @@ -1,12 +1,17 @@ -
+
+ <%= back_link_to community_path(@community) %> -
- <%= back_link_to community_path(@community) %> -

<%= t("community.topic.create") %>

- <%= render "form" %> -
+

<%= t("community.topic.create") %>

-
- <%= render "recommendations" %> -
-
+ + + <%= render "form" %> + diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index d0d1ff500..a9abab348 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -127,9 +127,7 @@ en: new: form: submit_button: Start a debate - info: If you want to make a proposal, this is the wrong section, enter %{info_link}. - info_link: create new proposal - more_info: More information + more_info: How do debates work? recommendation_four: Enjoy this space and the voices that fill it. It belongs to you too. recommendation_one: Do not use capital letters for the debate title or for whole sentences. On the internet, this is considered shouting. And nobody likes being shouted at. recommendation_three: Ruthless criticism is very welcome. This is a space for reflection. But we recommend that you stick to elegance and intelligence. The world is a better place with these virtues in it. diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index aa8b4b8ee..0dad1fe8b 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -127,9 +127,7 @@ es: new: form: submit_button: Empieza un debate - info: Si lo que quieres es hacer una propuesta, esta es la sección incorrecta, entra en %{info_link}. - info_link: crear nueva propuesta - more_info: Más información + more_info: "¿Cómo funcionan los debates?" recommendation_four: Disfruta de este espacio, de las voces que lo llenan, también es tuyo. recommendation_one: No escribas el título del debate o frases enteras en mayúsculas. En internet eso se considera gritar. Y a nadie le gusta que le griten. recommendation_three: Las críticas despiadadas son muy bienvenidas. Este es un espacio de pensamiento. Pero te recomendamos conservar la elegancia y la inteligencia. El mundo es mejor con ellas presentes. diff --git a/spec/system/ckeditor_spec.rb b/spec/system/ckeditor_spec.rb index d13b67498..03fc745b0 100644 --- a/spec/system/ckeditor_spec.rb +++ b/spec/system/ckeditor_spec.rb @@ -9,7 +9,10 @@ describe "CKEditor" do expect(page).to have_css ".translatable-fields[data-locale='en'] .cke_wysiwyg_frame" - click_link "Debates" + within ".subnavigation" do + click_link "Debates" + end + click_link "Start a debate" expect(page).to have_css ".translatable-fields[data-locale='en'] .cke_wysiwyg_frame"