decidim-core 0.0.1.alpha2 → 0.0.1.alpha3

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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +11 -6
  3. data/app/assets/config/decidim_core_manifest.js +1 -0
  4. data/app/assets/images/decidim/badge-ajuntament-footer.png +0 -0
  5. data/app/assets/images/decidim/badge-ajuntament-header.svg +60 -0
  6. data/app/assets/images/decidim/cc-badge.png +0 -0
  7. data/app/assets/images/decidim/hero-home.jpg +0 -0
  8. data/app/assets/images/decidim/icons.svg +1 -0
  9. data/app/assets/javascripts/decidim.js +12 -1
  10. data/app/assets/stylesheets/{decidim.css → decidim.scss} +2 -1
  11. data/app/assets/stylesheets/decidim/application.sass +7 -0
  12. data/app/assets/stylesheets/decidim/layouts/_home.scss +244 -0
  13. data/app/assets/stylesheets/decidim/layouts/_user.scss +24 -0
  14. data/app/assets/stylesheets/decidim/layouts/_view.scss +22 -0
  15. data/app/assets/stylesheets/decidim/modules/_address.scss +26 -0
  16. data/app/assets/stylesheets/decidim/modules/_author-avatar.scss +119 -0
  17. data/app/assets/stylesheets/decidim/modules/_buttons.scss +120 -0
  18. data/app/assets/stylesheets/decidim/modules/_callout.scss +25 -0
  19. data/app/assets/stylesheets/decidim/modules/_card-grid.scss +22 -0
  20. data/app/assets/stylesheets/decidim/modules/_cards.scss +520 -0
  21. data/app/assets/stylesheets/decidim/modules/_comments.scss +119 -0
  22. data/app/assets/stylesheets/decidim/modules/_defintion-data.scss +54 -0
  23. data/app/assets/stylesheets/decidim/modules/_extra.scss +43 -0
  24. data/app/assets/stylesheets/decidim/modules/_filters.scss +96 -0
  25. data/app/assets/stylesheets/decidim/modules/_flag.scss +9 -0
  26. data/app/assets/stylesheets/decidim/modules/_footer.scss +90 -0
  27. data/app/assets/stylesheets/decidim/modules/_forms.scss +30 -0
  28. data/app/assets/stylesheets/decidim/modules/_help.scss +14 -0
  29. data/app/assets/stylesheets/decidim/modules/_icons.scss +32 -0
  30. data/app/assets/stylesheets/decidim/modules/_layout.scss +58 -0
  31. data/app/assets/stylesheets/decidim/modules/_list-docs.scss +30 -0
  32. data/app/assets/stylesheets/decidim/modules/_main-container.scss +70 -0
  33. data/app/assets/stylesheets/decidim/modules/_map.scss +72 -0
  34. data/app/assets/stylesheets/decidim/modules/_navbar.scss +258 -0
  35. data/app/assets/stylesheets/decidim/modules/_opinion-toggle.scss +30 -0
  36. data/app/assets/stylesheets/decidim/modules/_order-by.scss +66 -0
  37. data/app/assets/stylesheets/decidim/modules/_owl-carousel.scss +72 -0
  38. data/app/assets/stylesheets/decidim/modules/_phase-nav.scss +177 -0
  39. data/app/assets/stylesheets/decidim/modules/_popularity.scss +74 -0
  40. data/app/assets/stylesheets/decidim/modules/_process-header.scss +125 -0
  41. data/app/assets/stylesheets/decidim/modules/_process-info.scss +44 -0
  42. data/app/assets/stylesheets/decidim/modules/_process-nav.scss +99 -0
  43. data/app/assets/stylesheets/decidim/modules/_reference.scss +6 -0
  44. data/app/assets/stylesheets/decidim/modules/_reveal.scss +20 -0
  45. data/app/assets/stylesheets/decidim/modules/_share.scss +28 -0
  46. data/app/assets/stylesheets/decidim/modules/_signup.scss +39 -0
  47. data/app/assets/stylesheets/decidim/modules/_static-pages.scss +46 -0
  48. data/app/assets/stylesheets/decidim/modules/_status-labels.scss +14 -0
  49. data/app/assets/stylesheets/decidim/modules/_tags.scss +29 -0
  50. data/app/assets/stylesheets/decidim/modules/_timeline.scss +189 -0
  51. data/app/assets/stylesheets/decidim/modules/_title-action.scss +28 -0
  52. data/app/assets/stylesheets/decidim/modules/_typography.scss +116 -0
  53. data/app/assets/stylesheets/decidim/modules/_user-form.scss +14 -0
  54. data/app/assets/stylesheets/decidim/modules/_video.scss +18 -0
  55. data/app/assets/stylesheets/decidim/utils/_fontface.scss +1 -0
  56. data/app/assets/stylesheets/decidim/utils/_helpers.sass +21 -0
  57. data/app/assets/stylesheets/decidim/utils/_keyframes.sass +13 -0
  58. data/app/assets/stylesheets/decidim/utils/_mixins.sass +33 -0
  59. data/app/assets/stylesheets/decidim/utils/_settings.scss +570 -0
  60. data/app/assets/stylesheets/decidim/utils/_toggle-expand.scss +8 -0
  61. data/app/assets/stylesheets/decidim/utils/_variables.scss +25 -0
  62. data/app/controllers/concerns/decidim/needs_organization.rb +31 -0
  63. data/app/controllers/decidim/application_controller.rb +1 -0
  64. data/app/controllers/decidim/devise/confirmations_controller.rb +10 -0
  65. data/app/controllers/decidim/devise/invitations_controller.rb +20 -0
  66. data/app/controllers/decidim/devise/passwords_controller.rb +10 -0
  67. data/app/controllers/decidim/devise/registrations_controller.rb +19 -0
  68. data/app/controllers/decidim/devise/sessions_controller.rb +10 -0
  69. data/app/helpers/decidim/application_helper.rb +3 -0
  70. data/app/helpers/decidim/layout_helper.rb +27 -0
  71. data/app/helpers/decidim/translations_helper.rb +16 -0
  72. data/app/mailers/decidim/decidim_devise_mailer.rb +11 -0
  73. data/app/middleware/decidim/current_organization.rb +28 -0
  74. data/app/models/decidim/organization.rb +9 -0
  75. data/app/models/decidim/participatory_process.rb +14 -0
  76. data/app/models/decidim/user.rb +28 -4
  77. data/app/views/decidim/devise/confirmations/new.html.erb +15 -0
  78. data/app/views/decidim/devise/invitations/edit.html.erb +14 -0
  79. data/app/views/decidim/devise/passwords/edit.html.erb +20 -0
  80. data/app/views/decidim/devise/passwords/new.html.erb +15 -0
  81. data/app/views/decidim/devise/registrations/edit.html.erb +35 -0
  82. data/app/views/decidim/devise/registrations/new.html.erb +23 -0
  83. data/app/views/decidim/devise/sessions/new.html.erb +23 -0
  84. data/app/views/decidim/devise/shared/_links.html.erb +25 -0
  85. data/app/views/decidim/home/show.html.erb +16 -4
  86. data/app/views/devise/mailer/confirmation_instructions.html.erb +4 -0
  87. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +10 -0
  88. data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +11 -0
  89. data/app/views/devise/mailer/password_change.html.erb +3 -0
  90. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  91. data/app/views/layouts/decidim/_footer.html.erb +28 -2
  92. data/app/views/layouts/decidim/_header.html.erb +59 -2
  93. data/config/i18n-tasks.yml +120 -0
  94. data/config/initializers/devise.rb +58 -8
  95. data/config/locales/en.yml +35 -0
  96. data/config/routes.rb +12 -1
  97. data/db/migrate/20160919104837_create_decidim_organizations.rb +13 -0
  98. data/db/migrate/20160920140207_devise_invitable_add_to_decidim_users.rb +23 -0
  99. data/db/migrate/20160920141039_user_belongs_to_organization.rb +5 -0
  100. data/db/migrate/20160920141151_user_has_roles.rb +5 -0
  101. data/db/migrate/20161005130108_add_participatory_processes.rb +17 -0
  102. data/db/migrate/20161005153007_add_description_to_organizations.rb +9 -0
  103. data/db/migrate/20161006085629_add_confirmable_to_devise.rb +14 -0
  104. data/db/seeds.rb +35 -0
  105. data/lib/decidim/core.rb +0 -1
  106. data/lib/decidim/core/engine.rb +30 -0
  107. data/lib/decidim/core/version.rb +1 -1
  108. data/lib/decidim/devise_failure_app.rb +36 -0
  109. data/lib/decidim/form_builder.rb +38 -0
  110. data/lib/decidim/translatable_attributes.rb +86 -0
  111. data/lib/devise/models/decidim_validatable.rb +67 -0
  112. data/lib/tasks/factory_girl.rake +16 -0
  113. metadata +254 -9
  114. data/config/locales/devise.en.yml +0 -62
  115. data/lib/decidim/testing_support/common_rake.rb +0 -13
  116. data/lib/generators/decidim/dummy_generator.rb +0 -58
  117. data/lib/generators/decidim/install_generator.rb +0 -76
  118. data/lib/generators/decidim/templates/initializer.rb +0 -4
@@ -0,0 +1,8 @@
1
+ //Generic toggle expand
2
+
3
+ .toggle-show{
4
+ display: none;
5
+ &.is-expanded{
6
+ display: block;
7
+ }
8
+ }
@@ -0,0 +1,25 @@
1
+ // Variables
2
+
3
+ $primary: map-get($foundation-palette, primary);
4
+ $secondary: map-get($foundation-palette, secondary);
5
+ $success: map-get($foundation-palette, success);
6
+ $warning: map-get($foundation-palette, warning);
7
+ $alert: map-get($foundation-palette, alert);
8
+
9
+ $light-gray-dark: darken($light-gray, 2.5);
10
+
11
+ $proposals: #238FF7;
12
+ $actions: #57D685;
13
+ $debates: #FA6C96;
14
+ $meetings: #FABC6C;
15
+
16
+ $twitter: #55acee;
17
+ $facebook: #3b5998;
18
+ $google: #dd4b39;
19
+
20
+ $muted: lighten($body-font-color, 30);
21
+
22
+ $border: 1px solid $medium-gray;
23
+
24
+
25
+
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ # Shared behaviour for controllers that need an organization present in order
7
+ # to work. The origanization is injected via the CurrentOrganization
8
+ # middleware.
9
+ module NeedsOrganization
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ before_action :verify_organization
14
+ helper_method :current_organization
15
+
16
+ # The current organization for the request.
17
+ #
18
+ # Returns an Organization.
19
+ def current_organization
20
+ @current_organization ||= request.env["decidim.current_organization"]
21
+ end
22
+
23
+ private
24
+
25
+ # Raises a 404 if no organization is present.
26
+ def verify_organization
27
+ raise ActionController::RoutingError, "Not Found" unless current_organization
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,6 +2,7 @@
2
2
  module Decidim
3
3
  # The main application controller that inherits from Rails.
4
4
  class ApplicationController < ActionController::Base
5
+ include Decidim::NeedsOrganization
5
6
  protect_from_forgery with: :exception, prepend: true
6
7
 
7
8
  layout "application"
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Devise
4
+ # Custom Devise ConfirmationsController to avoid namespace problems.
5
+ class ConfirmationsController < ::Devise::ConfirmationsController
6
+ include Decidim::NeedsOrganization
7
+ layout "application"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Devise
4
+ # This controller customizes the behaviour of Devise::Invitiable.
5
+ class InvitationsController < ::Devise::InvitationsController
6
+ # We don't users to create invitations, so we just redirect them to the
7
+ # homepage.
8
+ def authenticate_inviter!
9
+ redirect_to root_path
10
+ end
11
+
12
+ # Overwrite the method that returns the path after a user accepts an
13
+ # invitation. Using the param `invite_redirect` we can redirect the user
14
+ # to a custom path after it has accepted the invitation.
15
+ def after_accept_path_for(resource)
16
+ params[:invite_redirect] || after_sign_in_path_for(resource)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Devise
4
+ # Custom Devise PasswordsController to avoid namespace problems.
5
+ class PasswordsController < ::Devise::PasswordsController
6
+ include Decidim::NeedsOrganization
7
+ layout "application"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Devise
4
+ # This controller customizes the behaviour of Devise's
5
+ # RegistrationsController so we can specify a custom layout.
6
+ class RegistrationsController < ::Devise::RegistrationsController
7
+ include Decidim::NeedsOrganization
8
+ layout "application"
9
+
10
+ protected
11
+
12
+ # Called before resource.save
13
+ def build_resource(hash = nil)
14
+ super(hash)
15
+ resource.organization = current_organization
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Devise
4
+ # Custom Devise SessionsController to avoid namespace problems.
5
+ class SessionsController < ::Devise::SessionsController
6
+ include Decidim::NeedsOrganization
7
+ layout "application"
8
+ end
9
+ end
10
+ end
@@ -2,5 +2,8 @@
2
2
  module Decidim
3
3
  # Main module to add application-wide helpers.
4
4
  module ApplicationHelper
5
+ def link_to_organization(organization)
6
+ link_to(organization.name, root_url(host: organization.host))
7
+ end
5
8
  end
6
9
  end
@@ -5,5 +5,32 @@ module Decidim
5
5
  def decidim_page_title
6
6
  Decidim.config.application_name
7
7
  end
8
+
9
+ # Outputs an SVG-based icon.
10
+ #
11
+ # name - The String with the icon name.
12
+ # options - The Hash options used to customize the icon (default {}):
13
+ # :width - The Number of width in pixels (optional).
14
+ # :height - The Number of height in pixels (optional).
15
+ # :aria_label - The String to set as aria label (optional).
16
+ # :aria_hidden - The Truthy value to enable aria_hidden (optional).
17
+ # :role - The String to set as the role (optional).
18
+ # :class - The String to add as a CSS class (optional).
19
+ #
20
+ # Returns a String.
21
+ def icon(name, options = {})
22
+ html_properties = {}
23
+
24
+ html_properties["width"] = options[:width]
25
+ html_properties["height"] = options[:height]
26
+ html_properties["aria-label"] = options[:aria_label]
27
+ html_properties["role"] = options[:role]
28
+ html_properties["aria-hidden"] = options[:aria_hidden]
29
+ html_properties["class"] = "icon icon--#{name} #{options[:class]}"
30
+
31
+ content_tag :svg, html_properties do
32
+ content_tag :use, nil, "xlink:href" => "#{asset_url("decidim/icons.svg")}#icon-#{name}"
33
+ end
34
+ end
8
35
  end
9
36
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Helper that provides convenient methods to deal with translated attributes.
4
+ module TranslationsHelper
5
+ # Public: Returns the translation of an attribute using the current locale,
6
+ # if available.
7
+ #
8
+ # attribute - A Hash where keys (strings) are locales, and their values are
9
+ # the translation for each locale.
10
+ #
11
+ # Returns a String with the translation.
12
+ def translated_attribute(attribute)
13
+ attribute.try(:[], I18n.locale.to_s)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # A custom mailer for Devise so we can tweak the invitation instructions for
4
+ # each role.
5
+ class DecidimDeviseMailer < Devise::Mailer
6
+ def invitation_instructions(record, token, opts = {})
7
+ @token = token
8
+ devise_mail(record, opts[:invitation_instructions] || :invitation_instructions, opts)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # A middleware that enhances the request with the current organization based
4
+ # on the hostname.
5
+ class CurrentOrganization
6
+ # Initializes the Rack Middleware.
7
+ #
8
+ # app - The Rack application
9
+ def initialize(app)
10
+ @app = app
11
+ end
12
+
13
+ # Main entry point for a Rack Middleware.
14
+ #
15
+ # env - A Hash.
16
+ def call(env)
17
+ env["decidim.current_organization"] = detect_current_organization(env)
18
+ @app.call(env)
19
+ end
20
+
21
+ private
22
+
23
+ def detect_current_organization(env)
24
+ host = Rack::Request.new(env).host.downcase
25
+ Decidim::Organization.where(host: host).first
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Organizations are one of the main models of Decidim. In a single Decidim
4
+ # installation we can find many organizations and each of them can start
5
+ # their own participatory processes.
6
+ class Organization < ApplicationRecord
7
+ validates :name, :host, uniqueness: true
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Interaction between a user and an organization is done via a
4
+ # ParticipatoryProcess. It's a unit of action from the Organization point of
5
+ # view that groups several features (proposals, debates...) distributed in
6
+ # steps that get enabled or disabled depending on which step is currently
7
+ # active.
8
+ class ParticipatoryProcess < ApplicationRecord
9
+ belongs_to :organization, foreign_key: "decidim_organization_id", class_name: Decidim::Organization
10
+
11
+ validates :title, :slug, :subtitle, :short_description, :description, presence: true
12
+ validates :slug, uniqueness: true
13
+ end
14
+ end
@@ -1,10 +1,34 @@
1
1
  # frozen_string_literal: true
2
+ require_dependency "devise/models/decidim_validatable"
3
+
2
4
  module Decidim
3
5
  # A User is a citizen that wants to join the platform to participate.
4
6
  class User < ApplicationRecord
5
- # Include default devise modules. Others available are:
6
- # :confirmable, :lockable, :timeoutable and :omniauthable
7
- devise :database_authenticatable, :registerable,
8
- :recoverable, :rememberable, :trackable, :validatable
7
+ devise :invitable, :database_authenticatable, :registerable, :confirmable,
8
+ :recoverable, :rememberable, :trackable, :decidim_validatable
9
+
10
+ belongs_to :organization, foreign_key: "decidim_organization_id", class_name: Decidim::Organization
11
+
12
+ ROLES = %w(admin moderator official).freeze
13
+
14
+ validates :organization, presence: true
15
+ validate :all_roles_are_valid
16
+
17
+ # Public: Allows customizing the invitation instruction email content when
18
+ # inviting a user.
19
+ #
20
+ # Returns a String.
21
+ attr_accessor :invitation_instructions
22
+
23
+ private
24
+
25
+ def all_roles_are_valid
26
+ errors.add(:roles, :invalid) unless roles.all? { |role| ROLES.include?(role) }
27
+ end
28
+
29
+ # Changes default Devise behaviour to use ActiveJob to send async emails.
30
+ def send_devise_notification(notification, *args)
31
+ devise_mailer.send(notification, self, *args).deliver_later
32
+ end
9
33
  end
10
34
  end
@@ -0,0 +1,15 @@
1
+ <h2><%= t("devise.confirmations.new.resend_confirmation_instructions") %></h2>
2
+
3
+ <%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div class="field">
7
+ <%= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
8
+ </div>
9
+
10
+ <div class="actions">
11
+ <%= f.submit t("devise.confirmations.new.resend_confirmation_instructions") %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "decidim/devise/shared/links" %>
@@ -0,0 +1,14 @@
1
+ <h2><%= t "devise.invitations.edit.header" %></h2>
2
+
3
+ <%= form_for resource, as: resource_name, url: invitation_path(resource_name, invite_redirect: params[:invite_redirect]), html: { method: :put } do |f| %>
4
+ <%= devise_error_messages! %>
5
+ <%= f.hidden_field :invitation_token %>
6
+
7
+ <% if f.object.class.require_password_on_accepting %>
8
+ <%= f.password_field :password %></p>
9
+
10
+ <%= f.password_field :password_confirmation %></p>
11
+ <% end %>
12
+
13
+ <p><%= f.submit t("devise.invitations.edit.submit_button") %></p>
14
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <h2><%= t("devise.passwords.edit.change_your_password") %></h2>
2
+
3
+ <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+ <%= f.hidden_field :reset_password_token %>
6
+
7
+ <div class="field">
8
+ <%= f.password_field :password, autocomplete: "off" %>
9
+ </div>
10
+
11
+ <div class="field">
12
+ <%= f.password_field :password_confirmation, autocomplete: "off" %>
13
+ </div>
14
+
15
+ <div class="actions">
16
+ <%= f.submit t("devise.passwords.edit.change_my_password") %>
17
+ </div>
18
+ <% end %>
19
+
20
+ <%= render "decidim/devise/shared/links" %>
@@ -0,0 +1,15 @@
1
+ <h2><%= t("devise.passwords.new.forgot_your_password") %></h2>
2
+
3
+ <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div class="field">
7
+ <%= f.email_field :email, autofocus: true %>
8
+ </div>
9
+
10
+ <div class="actions">
11
+ <%= f.submit t("devise.passwords.new.send_me_reset_password_instructions") %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "decidim/devise/shared/links" %>
@@ -0,0 +1,35 @@
1
+ <h2><%= t("devise.registrations.edit.title", resource: resource_class.model_name.human) %></h2>
2
+
3
+ <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div class="field">
7
+ <%= f.email_field :email %>
8
+ </div>
9
+
10
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
11
+ <p>
12
+ <%= t("devise.registrations.edit.currently_waiting_confirmation_for_email", email: resource.unconfirmed_email) %>
13
+ </p>
14
+ <% end %>
15
+
16
+ <div class="field">
17
+ <%= f.password_field :password, autocomplete: "off" %>
18
+ </div>
19
+
20
+ <div class="field">
21
+ <%= f.password_field :password_confirmation %>
22
+ </div>
23
+
24
+ <div class="field">
25
+ <%= f.password_field :current_password %>
26
+ </div>
27
+
28
+ <div><%= f.submit t("devise.registrations.edit.update") %></div>
29
+ <% end %>
30
+
31
+ <h3><%= t("devise.registrations.edit.cancel_my_account") %></h3>
32
+
33
+ <p><%= t("devise.registrations.edit.unhappy") %> <%= link_to t("devise.registrations.edit.cancel_my_account"), registration_path(resource_name), data: { confirm: t("devise.registrations.edit.are_you_sure") }, method: :delete %>.</p>
34
+
35
+ <%= link_to t("devise.shared.links.back"), :back %>
@@ -0,0 +1,23 @@
1
+ <h2><%= t("devise.registrations.new.sign_up") %></h2>
2
+
3
+ <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <div class="field">
7
+ <%= f.email_field :email, autofocus: true %>
8
+ </div>
9
+
10
+ <div class="field">
11
+ <%= f.password_field :password, autocomplete: "off" %>
12
+ </div>
13
+
14
+ <div class="field">
15
+ <%= f.password_field :password_confirmation, autocomplete: "off" %>
16
+ </div>
17
+
18
+ <div class="actions">
19
+ <%= f.submit t("devise.registrations.new.sign_up") %>
20
+ </div>
21
+ <% end %>
22
+
23
+ <%= render "decidim/devise/shared/links" %>