decidim-core 0.0.1.alpha2 → 0.0.1.alpha3

Sign up to get free protection for your applications and to get access to all the features.
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" %>