├── Rakefile ├── lib ├── version.rb ├── generators │ └── devise │ │ └── views │ │ └── bootstrap_templates │ │ └── bootstrap_templates_generator.rb ├── devise-bootstrap-views.rb └── devise_bootstrap_views_helper.rb ├── Screenshot.png ├── Gemfile ├── .gitignore ├── app └── views │ └── devise │ ├── unlocks │ └── new.html.erb │ ├── passwords │ ├── new.html.erb │ └── edit.html.erb │ ├── confirmations │ └── new.html.erb │ ├── sessions │ └── new.html.erb │ ├── registrations │ ├── new.html.erb │ └── edit.html.erb │ └── shared │ └── _links.html.erb ├── devise-bootstrap-views.gemspec ├── LICENSE.txt ├── README.md ├── locales └── en.yml └── CHANGELOG.md /Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/gem_tasks' 2 | -------------------------------------------------------------------------------- /lib/version.rb: -------------------------------------------------------------------------------- 1 | module DeviseBootstrapViews 2 | VERSION = '1.1.0' 3 | end 4 | -------------------------------------------------------------------------------- /Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hisea/devise-bootstrap-views/HEAD/Screenshot.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in devise-bootstrap-views.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.bundle/ 2 | /.yardoc 3 | /Gemfile.lock 4 | /_yardoc/ 5 | /coverage/ 6 | /doc/ 7 | /pkg/ 8 | /spec/reports/ 9 | /tmp/ 10 | 11 | *.gem 12 | 13 | # macOS 14 | .DS_Store 15 | -------------------------------------------------------------------------------- /lib/generators/devise/views/bootstrap_templates/bootstrap_templates_generator.rb: -------------------------------------------------------------------------------- 1 | module Devise 2 | module Views 3 | class BootstrapTemplatesGenerator < Rails::Generators::Base 4 | source_root File.expand_path('../../../../../../app/views', __FILE__) 5 | 6 | def copy_views 7 | directory('devise', Rails.root.join('app', 'views', 'devise')) 8 | end 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/views/devise/unlocks/new.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.resend_unlock_instructions') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | 6 |
7 | <%= f.label :email %> 8 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control' %> 9 |
10 | 11 |
12 | <%= f.submit t('.resend_unlock_instructions'), class: 'btn btn-primary'%> 13 |
14 | <% end %> 15 | 16 | <%= render 'devise/shared/links' %> 17 | -------------------------------------------------------------------------------- /app/views/devise/passwords/new.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.forgot_your_password') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | 6 |
7 | <%= f.label :email %> 8 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control' %> 9 |
10 | 11 |
12 | <%= f.submit t('.send_me_reset_password_instructions'), class: 'btn btn-primary' %> 13 |
14 | <% end %> 15 | 16 | <%= render 'devise/shared/links' %> 17 | -------------------------------------------------------------------------------- /app/views/devise/confirmations/new.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.resend_confirmation_instructions') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | 6 |
7 | <%= f.label :email %> 8 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email), class: 'form-control' %> 9 |
10 | 11 |
12 | <%= f.submit t('.resend_confirmation_instructions'), class: 'btn btn-primary' %> 13 |
14 | <% end %> 15 | 16 | <%= render 'devise/shared/links' %> 17 | -------------------------------------------------------------------------------- /lib/devise-bootstrap-views.rb: -------------------------------------------------------------------------------- 1 | require 'rails' 2 | require 'devise_bootstrap_views_helper' 3 | 4 | module DeviseBootstrapViews 5 | class Engine < ::Rails::Engine 6 | end 7 | 8 | class Railtie < ::Rails::Railtie #:nodoc: 9 | initializer 'rails-devise-bootstrap-views' do |app| 10 | DeviseBootstrapViews::Railtie.instance_eval do 11 | pattern = pattern_from app.config.i18n.available_locales 12 | 13 | files = Dir[File.join(File.dirname(__FILE__), '../locales', "#{pattern}.yml")] 14 | I18n.load_path.concat(files) 15 | 16 | ActionView::Base.send :include, DeviseBootstrapViewsHelper 17 | end 18 | end 19 | 20 | def self.pattern_from(args) 21 | array = Array(args || []) 22 | array.blank? ? '*' : "{#{array.join ','}}" 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /lib/devise_bootstrap_views_helper.rb: -------------------------------------------------------------------------------- 1 | module DeviseBootstrapViewsHelper 2 | def bootstrap_devise_error_messages! 3 | return '' if resource.errors.empty? 4 | 5 | messages = resource.errors.full_messages.map { |message| content_tag(:li, message) }.join 6 | sentence = I18n.t( 7 | 'errors.messages.not_saved', 8 | count: resource.errors.count, 9 | resource: resource.class.model_name.human.downcase 10 | ) 11 | 12 | html = <<-HTML 13 |
14 | 17 |

#{sentence}

18 | 19 |
20 | HTML 21 | 22 | html.html_safe 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /devise-bootstrap-views.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'version' 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = 'devise-bootstrap-views' 8 | spec.version = DeviseBootstrapViews::VERSION 9 | spec.authors = ['Yinghai Zhao'] 10 | spec.email = ['zyinghai@gmail.com'] 11 | spec.summary = 'Bootstrap views for Devise.' 12 | spec.description = 'Bootstrap views for Devise with I18n support.' 13 | spec.homepage = 'https://github.com/hisea/devise-bootstrap-views' 14 | spec.license = 'MIT' 15 | 16 | spec.files = `git ls-files -z`.split("\x0") 17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 19 | spec.require_paths = ['lib'] 20 | 21 | spec.add_development_dependency 'bundler', '~> 1.6' 22 | spec.add_development_dependency 'rake', '~> 11.0' 23 | end 24 | -------------------------------------------------------------------------------- /app/views/devise/sessions/new.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.sign_in') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 4 |
5 | <%= f.label :email %> 6 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control' %> 7 |
8 | 9 |
10 | <%= f.label :password %> 11 | <%= f.password_field :password, autocomplete: 'current-password', class: 'form-control' %> 12 |
13 | 14 | <% if devise_mapping.rememberable? %> 15 |
16 | <%= f.check_box :remember_me, class: 'form-check-input' %> 17 | <%= f.label :remember_me, class: 'form-check-label' do %> 18 | <%= resource.class.human_attribute_name('remember_me') %> 19 | <% end %> 20 |
21 | <% end %> 22 | 23 |
24 | <%= f.submit t('.sign_in'), class: 'btn btn-primary' %> 25 |
26 | <% end %> 27 | 28 | <%= render 'devise/shared/links' %> 29 | -------------------------------------------------------------------------------- /app/views/devise/passwords/edit.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.change_your_password') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | <%= f.hidden_field :reset_password_token %> 6 | 7 |
8 | <%= f.label :password, t('.new_password') %> 9 | <%= f.password_field :password, autofocus: true, class: 'form-control' %> 10 | 11 | <% if @minimum_password_length %> 12 | <%= t('devise.shared.minimum_password_length', count: @minimum_password_length) %> 13 | <% end %> 14 |
15 | 16 |
17 | <%= f.label :password_confirmation, t('.confirm_new_password') %> 18 | <%= f.password_field :password_confirmation, autocomplete: 'off', class: 'form-control' %> 19 |
20 | 21 |
22 | <%= f.submit t('.change_my_password'), class: 'btn btn-primary' %> 23 |
24 | <% end %> 25 | 26 | <%= render 'devise/shared/links' %> 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Yinghai Zhao 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /app/views/devise/registrations/new.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.sign_up') %>

2 | 3 | <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | 6 |
7 | <%= f.label :email %> 8 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control' %> 9 |
10 | 11 |
12 | <%= f.label :password %> 13 | <%= f.password_field :password, autocomplete: 'current-password', class: 'form-control' %> 14 | 15 | <% if @minimum_password_length %> 16 | <%= t('devise.shared.minimum_password_length', count: @minimum_password_length) %> 17 | <% end %> 18 |
19 | 20 |
21 | <%= f.label :password_confirmation %> 22 | <%= f.password_field :password_confirmation, autocomplete: 'current-password', class: 'form-control' %> 23 |
24 | 25 |
26 | <%= f.submit t('.sign_up'), class: 'btn btn-primary' %> 27 |
28 | <% end %> 29 | 30 | <%= render 'devise/shared/links' %> 31 | -------------------------------------------------------------------------------- /app/views/devise/shared/_links.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <%- if controller_name != 'sessions' %> 3 | <%= link_to t(".sign_in"), new_session_path(resource_name) %>
4 | <% end -%> 5 | 6 | <%- if devise_mapping.registerable? && controller_name != 'registrations' %> 7 | <%= link_to t(".sign_up"), new_registration_path(resource_name) %>
8 | <% end -%> 9 | 10 | <%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %> 11 | <%= link_to t(".forgot_your_password"), new_password_path(resource_name) %>
12 | <% end -%> 13 | 14 | <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> 15 | <%= link_to t('.didn_t_receive_confirmation_instructions'), new_confirmation_path(resource_name) %>
16 | <% end -%> 17 | 18 | <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> 19 | <%= link_to t('.didn_t_receive_unlock_instructions'), new_unlock_path(resource_name) %>
20 | <% end -%> 21 | 22 | <%- if devise_mapping.omniauthable? %> 23 | <%- resource_class.omniauth_providers.each do |provider| %> 24 | <%= link_to t('.sign_in_with_provider', provider: OmniAuth::Utils.camelize(provider)), omniauth_authorize_path(resource_name, provider) %>
25 | <% end -%> 26 | <% end -%> 27 |
28 | -------------------------------------------------------------------------------- /app/views/devise/registrations/edit.html.erb: -------------------------------------------------------------------------------- 1 |

<%= t('.title', resource: resource_name.to_s.humanize) %>

2 | 3 | <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 4 | <%= bootstrap_devise_error_messages! %> 5 | 6 |
7 | <%= f.label :email %> 8 | <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control' %> 9 |
10 | 11 |
12 | <%= f.label :password %> 13 | <%= f.password_field :password, autocomplete: 'new-password', class: 'form-control' %> 14 | 15 | <%= t('.leave_blank_if_you_don_t_want_to_change_it') %> 16 |
17 | 18 |
19 | <%= f.label :password_confirmation %> 20 | <%= f.password_field :password_confirmation, autocomplete: 'new-password', class: 'form-control' %> 21 |
22 | 23 |
24 | <%= f.label :current_password %> 25 | <%= f.password_field :current_password, autocomplete: 'current-password', class: 'form-control' %> 26 | 27 | <%= t('.we_need_your_current_password_to_confirm_your_changes') %> 28 |
29 | 30 |
31 | <%= f.submit t('.update'), class: 'btn btn-primary' %> 32 |
33 | <% end %> 34 | 35 |

<%= t('.unhappy') %>? <%= link_to t('.cancel_my_account'), registration_path(resource_name), data: { confirm: t('.are_you_sure') }, method: :delete %>.

36 | 37 | <%= link_to t('.back'), :back %> 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Devise Bootstrap Views 2 | 3 | Here are some of the highlights: 4 | 5 | - Devise views with Bootstrap 4 6 | - Responsive layout 7 | - I18n support 8 | 9 | ![Screenshot](https://raw.githubusercontent.com/hisea/devise-bootstrap-views/master/Screenshot.png) 10 | 11 | ## Installation 12 | 13 | Make sure Bootstrap 4 is installed, either as a Ruby gem or using CDN: 14 | 15 | ```html 16 | 17 | ``` 18 | 19 | 20 | Add this line to your application's Gemfile: 21 | 22 | ```ruby 23 | gem 'devise-bootstrap-views', '~> 1.0' 24 | ``` 25 | 26 | And then execute: 27 | 28 | $ bundle install 29 | 30 | ## I18n 31 | 32 | Install [devise-i18n](https://github.com/tigrish/devise-i18n) for other locales. Make sure to insert `gem 'devise-i18n'` before `gem 'devise-bootstrap-views'`, see [#55](https://github.com/hisea/devise-bootstrap-views/issues/55). 33 | 34 | ## Customizing Views 35 | 36 | The `devise:views:bootstrap_templates` generator will copy all views to your application, so you can modify the files as you wish: 37 | 38 | ```sh 39 | $ rails generate devise:views:bootstrap_templates 40 | ``` 41 | 42 | ## Contributing 43 | 44 | 1. Fork it ( https://github.com/hisea/devise-bootstrap-views/fork ) 45 | 2. Create your feature branch (`git checkout -b my-new-feature`) 46 | 3. Commit your changes (`git commit -am 'Add some feature'`) 47 | 4. Push to the branch (`git push origin my-new-feature`) 48 | 5. Create a new Pull Request 49 | -------------------------------------------------------------------------------- /locales/en.yml: -------------------------------------------------------------------------------- 1 | en: 2 | activerecord: 3 | attributes: 4 | user: 5 | confirmation_sent_at: Confirmation sent at 6 | confirmation_token: Confirmation token 7 | confirmed_at: Confirmed at 8 | created_at: Created at 9 | current_password: Current password 10 | current_sign_in_at: Current sign in at 11 | current_sign_in_ip: Current sign in IP 12 | email: Email 13 | encrypted_password: Encrypted password 14 | failed_attempts: Failed attempts 15 | last_sign_in_at: Last sign in at 16 | last_sign_in_ip: Last sign in IP 17 | locked_at: Locked at 18 | password: Password 19 | password_confirmation: Password confirmation 20 | remember_created_at: Remember created at 21 | remember_me: Remember me 22 | reset_password_sent_at: Reset password sent at 23 | reset_password_token: Reset password token 24 | sign_in_count: Sign in count 25 | unconfirmed_email: Unconfirmed email 26 | unlock_token: Unlock token 27 | updated_at: Updated at 28 | models: 29 | user: User 30 | devise: 31 | confirmations: 32 | confirmed: Your email address has been successfully confirmed. 33 | new: 34 | resend_confirmation_instructions: Resend confirmation instructions 35 | send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. 36 | send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. 37 | failure: 38 | already_authenticated: You are already signed in. 39 | inactive: Your account is not activated yet. 40 | invalid: Invalid %{authentication_keys} or password. 41 | last_attempt: You have one more attempt before your account is locked. 42 | locked: Your account is locked. 43 | not_found_in_database: Invalid %{authentication_keys} or password. 44 | timeout: Your session expired. Please sign in again to continue. 45 | unauthenticated: You need to sign in or sign up before continuing. 46 | unconfirmed: You have to confirm your email address before continuing. 47 | mailer: 48 | confirmation_instructions: 49 | action: Confirm my account 50 | greeting: Welcome %{recipient}! 51 | instruction: 'You can confirm your account email through the link below:' 52 | subject: Confirmation instructions 53 | email_changed: 54 | greeting: Hello %{recipient}! 55 | message: We're contacting you to notify you that your email is being changed to %{email}. 56 | subject: Email Changed 57 | password_change: 58 | greeting: Hello %{recipient}! 59 | message: We're contacting you to notify you that your password has been changed. 60 | subject: Password Changed 61 | reset_password_instructions: 62 | action: Change my password 63 | greeting: Hello %{recipient}! 64 | instruction: Someone has requested a link to change your password, and you can do this through the link below. 65 | instruction_2: If you didn't request this, please ignore this email. 66 | instruction_3: Your password won't change until you access the link above and create a new one. 67 | subject: Reset password instructions 68 | unlock_instructions: 69 | action: Unlock my account 70 | greeting: Hello %{recipient}! 71 | instruction: 'Click the link below to unlock your account:' 72 | message: Your account has been locked due to an excessive amount of unsuccessful sign in attempts. 73 | subject: Unlock instructions 74 | omniauth_callbacks: 75 | failure: Could not authenticate you from %{kind} because "%{reason}". 76 | success: Successfully authenticated from %{kind} account. 77 | passwords: 78 | edit: 79 | change_my_password: Change my password 80 | change_your_password: Change your password 81 | confirm_new_password: Confirm new password 82 | new_password: New password 83 | new: 84 | forgot_your_password: Forgot your password? 85 | send_me_reset_password_instructions: Send me reset password instructions 86 | no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. 87 | send_instructions: You will receive an email with instructions on how to reset your password in a few minutes. 88 | send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. 89 | updated: Your password has been changed successfully. You are now signed in. 90 | updated_not_active: Your password has been changed successfully. 91 | registrations: 92 | destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. 93 | edit: 94 | are_you_sure: Are you sure? 95 | cancel_my_account: Cancel my account 96 | currently_waiting_confirmation_for_email: 'Currently waiting confirmation for: %{email}' 97 | leave_blank_if_you_don_t_want_to_change_it: leave blank if you don't want to change it 98 | title: Edit %{resource} 99 | unhappy: Unhappy? 100 | update: Update 101 | we_need_your_current_password_to_confirm_your_changes: we need your current password to confirm your changes 102 | new: 103 | sign_up: Sign up 104 | signed_up: Welcome! You have signed up successfully. 105 | signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. 106 | signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. 107 | signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. 108 | update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. 109 | updated: Your account has been updated successfully. 110 | sessions: 111 | already_signed_out: Signed out successfully. 112 | new: 113 | sign_in: Log in 114 | signed_in: Signed in successfully. 115 | signed_out: Signed out successfully. 116 | shared: 117 | links: 118 | back: Back 119 | didn_t_receive_confirmation_instructions: Didn't receive confirmation instructions? 120 | didn_t_receive_unlock_instructions: Didn't receive unlock instructions? 121 | forgot_your_password: Forgot your password? 122 | sign_in: Log in 123 | sign_in_with_provider: Sign in with %{provider} 124 | sign_up: Sign up 125 | minimum_password_length: 126 | one: "(%{count} character minimum)" 127 | other: "(%{count} characters minimum)" 128 | unlocks: 129 | new: 130 | resend_unlock_instructions: Resend unlock instructions 131 | send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. 132 | send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. 133 | unlocked: Your account has been unlocked successfully. Please sign in to continue. 134 | errors: 135 | messages: 136 | already_confirmed: was already confirmed, please try signing in 137 | confirmation_period_expired: needs to be confirmed within %{period}, please request a new one 138 | expired: has expired, please request a new one 139 | not_found: not found 140 | not_locked: was not locked 141 | not_saved: 142 | one: '1 error prohibited this %{resource} from being saved:' 143 | other: "%{count} errors prohibited this %{resource} from being saved:" 144 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [Unreleased](https://github.com/hisea/devise-bootstrap-views/tree/HEAD) 4 | 5 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v1.1.0...HEAD) 6 | 7 | **Closed issues:** 8 | 9 | - bootstrap\_devise\_error\_messages not working [\#68](https://github.com/hisea/devise-bootstrap-views/issues/68) 10 | - Branch bootstrap4 [\#65](https://github.com/hisea/devise-bootstrap-views/issues/65) 11 | 12 | **Merged pull requests:** 13 | 14 | - Fix typo in README.md [\#67](https://github.com/hisea/devise-bootstrap-views/pull/67) ([danfrenette](https://github.com/danfrenette)) 15 | 16 | ## [v1.1.0](https://github.com/hisea/devise-bootstrap-views/tree/v1.1.0) (2018-08-20) 17 | 18 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v1.0.0...v1.1.0) 19 | 20 | **Closed issues:** 21 | 22 | - Rely on devise-i18n gem for translations [\#63](https://github.com/hisea/devise-bootstrap-views/issues/63) 23 | - Change of view paths makes Rails not find correct translations [\#49](https://github.com/hisea/devise-bootstrap-views/issues/49) 24 | - Lowercasing model name does not work in all languages [\#44](https://github.com/hisea/devise-bootstrap-views/issues/44) 25 | 26 | ## [v1.0.0](https://github.com/hisea/devise-bootstrap-views/tree/v1.0.0) (2018-08-20) 27 | 28 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.11...v1.0.0) 29 | 30 | **Closed issues:** 31 | 32 | - Unlocking account through email link does not work [\#61](https://github.com/hisea/devise-bootstrap-views/issues/61) 33 | - Haml and Slim templates should not be present in the gem [\#58](https://github.com/hisea/devise-bootstrap-views/issues/58) 34 | - Update for Bootstrap 4 beta [\#57](https://github.com/hisea/devise-bootstrap-views/issues/57) 35 | - uninitialized constant Net::HTTP [\#52](https://github.com/hisea/devise-bootstrap-views/issues/52) 36 | - couldn't find file 'devise\_bootstrap\_views\_less' with type 'text/css' [\#42](https://github.com/hisea/devise-bootstrap-views/issues/42) 37 | - with bootstrap 4 [\#30](https://github.com/hisea/devise-bootstrap-views/issues/30) 38 | - How to have a main devise custom layout with devise-bootstrap-views subviews? [\#8](https://github.com/hisea/devise-bootstrap-views/issues/8) 39 | 40 | **Merged pull requests:** 41 | 42 | - Bootstrap 4 [\#62](https://github.com/hisea/devise-bootstrap-views/pull/62) ([hisea](https://github.com/hisea)) 43 | - Add how to remove devise-bootstrap-views to README.md [\#60](https://github.com/hisea/devise-bootstrap-views/pull/60) ([fjustin](https://github.com/fjustin)) 44 | - Solved Issue \#42 [\#56](https://github.com/hisea/devise-bootstrap-views/pull/56) ([TheDreamSaver](https://github.com/TheDreamSaver)) 45 | 46 | ## [v0.0.11](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.11) (2017-03-27) 47 | 48 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v1.0.0.alpha1...v0.0.11) 49 | 50 | **Merged pull requests:** 51 | 52 | - Fixed error for Net:HTTP not being explicitly required [\#53](https://github.com/hisea/devise-bootstrap-views/pull/53) ([rderik](https://github.com/rderik)) 53 | - Update Slovenian locale. [\#51](https://github.com/hisea/devise-bootstrap-views/pull/51) ([viroulep](https://github.com/viroulep)) 54 | - Missing pt translation fix [\#50](https://github.com/hisea/devise-bootstrap-views/pull/50) ([cubizh](https://github.com/cubizh)) 55 | 56 | ## [v1.0.0.alpha1](https://github.com/hisea/devise-bootstrap-views/tree/v1.0.0.alpha1) (2016-12-20) 57 | 58 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.10...v1.0.0.alpha1) 59 | 60 | **Merged pull requests:** 61 | 62 | - Bootstrap 4 [\#46](https://github.com/hisea/devise-bootstrap-views/pull/46) ([dankimio](https://github.com/dankimio)) 63 | 64 | ## [v0.0.10](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.10) (2016-12-20) 65 | 66 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.9...v0.0.10) 67 | 68 | **Closed issues:** 69 | 70 | - Can we use git git submodules for locales? [\#37](https://github.com/hisea/devise-bootstrap-views/issues/37) 71 | 72 | **Merged pull requests:** 73 | 74 | - Add Haml and Slim generators [\#48](https://github.com/hisea/devise-bootstrap-views/pull/48) ([dmk1991](https://github.com/dmk1991)) 75 | - missing quote [\#47](https://github.com/hisea/devise-bootstrap-views/pull/47) ([patleb](https://github.com/patleb)) 76 | - Convert to new hash syntax [\#45](https://github.com/hisea/devise-bootstrap-views/pull/45) ([dankimio](https://github.com/dankimio)) 77 | - Rewrite locale generator, update translations, and add new languages [\#43](https://github.com/hisea/devise-bootstrap-views/pull/43) ([brunofacca](https://github.com/brunofacca)) 78 | 79 | ## [v0.0.9](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.9) (2016-08-22) 80 | 81 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.8...v0.0.9) 82 | 83 | **Closed issues:** 84 | 85 | - remember me checkbox text isn't in t\(\) method [\#40](https://github.com/hisea/devise-bootstrap-views/issues/40) 86 | 87 | **Merged pull requests:** 88 | 89 | - Fix remember me i18n [\#41](https://github.com/hisea/devise-bootstrap-views/pull/41) ([bastengao](https://github.com/bastengao)) 90 | - Remove unnecessary br tags, fix indentation [\#38](https://github.com/hisea/devise-bootstrap-views/pull/38) ([dankimio](https://github.com/dankimio)) 91 | - Update new.html.erb [\#36](https://github.com/hisea/devise-bootstrap-views/pull/36) ([bogdanvlviv](https://github.com/bogdanvlviv)) 92 | 93 | ## [v0.0.8](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.8) (2016-03-05) 94 | 95 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.7...v0.0.8) 96 | 97 | **Closed issues:** 98 | 99 | - Single quote not correctly escaped in locales/uk.yml [\#33](https://github.com/hisea/devise-bootstrap-views/issues/33) 100 | 101 | **Merged pull requests:** 102 | 103 | - Fix incorrect escape of a single quote in uk.yml [\#35](https://github.com/hisea/devise-bootstrap-views/pull/35) ([jandillmann](https://github.com/jandillmann)) 104 | - Add class selector "devise-bs" for top-level divs [\#34](https://github.com/hisea/devise-bootstrap-views/pull/34) ([smartlime](https://github.com/smartlime)) 105 | - Fix remember\_me check box in new session file [\#32](https://github.com/hisea/devise-bootstrap-views/pull/32) ([mabras](https://github.com/mabras)) 106 | - Updated README to include Sample Application [\#31](https://github.com/hisea/devise-bootstrap-views/pull/31) ([ethirajsrinivasan](https://github.com/ethirajsrinivasan)) 107 | 108 | ## [v0.0.7](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.7) (2015-11-22) 109 | 110 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.6...v0.0.7) 111 | 112 | **Closed issues:** 113 | 114 | - invalid multibyte char \(US-ASCII\) \(SyntaxError\) [\#18](https://github.com/hisea/devise-bootstrap-views/issues/18) 115 | 116 | **Merged pull requests:** 117 | 118 | - Update devise\_bootstrap\_views\_helper.rb [\#29](https://github.com/hisea/devise-bootstrap-views/pull/29) ([bogdanvlviv](https://github.com/bogdanvlviv)) 119 | - updated ru.yml [\#28](https://github.com/hisea/devise-bootstrap-views/pull/28) ([agm1988](https://github.com/agm1988)) 120 | - Hungarian translation fix. [\#27](https://github.com/hisea/devise-bootstrap-views/pull/27) ([egivandor](https://github.com/egivandor)) 121 | - Fix invalid HTML [\#26](https://github.com/hisea/devise-bootstrap-views/pull/26) ([kpthomas](https://github.com/kpthomas)) 122 | 123 | ## [v0.0.6](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.6) (2015-09-09) 124 | 125 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.5...v0.0.6) 126 | 127 | **Closed issues:** 128 | 129 | - \<%= bootstrap\_devise\_error\_messages! %\> [\#14](https://github.com/hisea/devise-bootstrap-views/issues/14) 130 | - Simple Form generator [\#5](https://github.com/hisea/devise-bootstrap-views/issues/5) 131 | 132 | **Merged pull requests:** 133 | 134 | - add arabic - ar.yml [\#25](https://github.com/hisea/devise-bootstrap-views/pull/25) ([mabras](https://github.com/mabras)) 135 | - Move shared/\_links.erb to links.html.erb. [\#24](https://github.com/hisea/devise-bootstrap-views/pull/24) ([shhavel](https://github.com/shhavel)) 136 | - Update devise\_bootstrap\_views\_helper.rb [\#23](https://github.com/hisea/devise-bootstrap-views/pull/23) ([christianmeichtry](https://github.com/christianmeichtry)) 137 | - Update devise\_bootstrap\_views\_helper.rb [\#22](https://github.com/hisea/devise-bootstrap-views/pull/22) ([christianmeichtry](https://github.com/christianmeichtry)) 138 | - Update edit.html.erb [\#21](https://github.com/hisea/devise-bootstrap-views/pull/21) ([bogdanvlviv](https://github.com/bogdanvlviv)) 139 | - adding missing pt-BR translations for passowrds\#edit [\#20](https://github.com/hisea/devise-bootstrap-views/pull/20) ([fwitzke](https://github.com/fwitzke)) 140 | - Fix I18n for 'back' link [\#19](https://github.com/hisea/devise-bootstrap-views/pull/19) ([blueplanet](https://github.com/blueplanet)) 141 | - cs locales [\#17](https://github.com/hisea/devise-bootstrap-views/pull/17) ([cervinka](https://github.com/cervinka)) 142 | - Fix FR i18n [\#16](https://github.com/hisea/devise-bootstrap-views/pull/16) ([BenoitMC](https://github.com/BenoitMC)) 143 | - added Ukrainian language and change locales/ru.yml [\#13](https://github.com/hisea/devise-bootstrap-views/pull/13) ([bogdanvlviv](https://github.com/bogdanvlviv)) 144 | 145 | ## [v0.0.5](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.5) (2015-05-04) 146 | 147 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/v0.0.4...v0.0.5) 148 | 149 | **Closed issues:** 150 | 151 | - Typo: "dont" instead of "don't" [\#11](https://github.com/hisea/devise-bootstrap-views/issues/11) 152 | 153 | **Merged pull requests:** 154 | 155 | - dont -\> don't [\#12](https://github.com/hisea/devise-bootstrap-views/pull/12) ([jfly](https://github.com/jfly)) 156 | - Update pt-BR.yml to fix a few typos [\#10](https://github.com/hisea/devise-bootstrap-views/pull/10) ([rafaelgoulart](https://github.com/rafaelgoulart)) 157 | - use utf-8 times symbol instead of 'x' to dismiss error messages [\#9](https://github.com/hisea/devise-bootstrap-views/pull/9) ([egbert](https://github.com/egbert)) 158 | - Update edit.html.erb [\#7](https://github.com/hisea/devise-bootstrap-views/pull/7) ([bogdanvlviv](https://github.com/bogdanvlviv)) 159 | - add missing closing label to sessions\#new view [\#6](https://github.com/hisea/devise-bootstrap-views/pull/6) ([nicolasmlv](https://github.com/nicolasmlv)) 160 | 161 | ## [v0.0.4](https://github.com/hisea/devise-bootstrap-views/tree/v0.0.4) (2015-01-28) 162 | 163 | [Full Changelog](https://github.com/hisea/devise-bootstrap-views/compare/fa1777335189357ea8283815618562ae049f796e...v0.0.4) 164 | 165 | **Closed issues:** 166 | 167 | - Confirmation Instructions view confirmation\_url should use Devise's friendly token instead of token set in database [\#4](https://github.com/hisea/devise-bootstrap-views/issues/4) 168 | 169 | **Merged pull requests:** 170 | 171 | - Add autofocus attribute to all the first form fields [\#3](https://github.com/hisea/devise-bootstrap-views/pull/3) ([ghost](https://github.com/ghost)) 172 | - fixed typo [\#2](https://github.com/hisea/devise-bootstrap-views/pull/2) ([steigr](https://github.com/steigr)) 173 | - adding less support [\#1](https://github.com/hisea/devise-bootstrap-views/pull/1) ([dmvt](https://github.com/dmvt)) 174 | 175 | 176 | 177 | \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* 178 | --------------------------------------------------------------------------------