beautiful_scaffold 2.0.0.pre → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/CHANGELOG +45 -0
- data/Gemfile +5 -4
- data/README.rdoc +22 -4
- data/Rakefile +0 -3
- data/beautiful_scaffold.gemspec +0 -2
- data/lib/beautiful_scaffold/version.rb +1 -1
- data/lib/generators/USAGE +25 -11
- data/lib/generators/beautiful_cancancan_generator.rb +51 -0
- data/lib/generators/beautiful_jointable_generator.rb +3 -5
- data/lib/generators/beautiful_locale_generator.rb +15 -13
- data/lib/generators/beautiful_migration_generator.rb +3 -1
- data/lib/generators/beautiful_scaffold_common_methods.rb +10 -2
- data/lib/generators/beautiful_scaffold_generator.rb +2 -10
- data/lib/generators/beautiful_sorcery_generator.rb +137 -0
- data/lib/generators/beautiful_storage_generator.rb +61 -0
- data/lib/generators/templates/app/assets/javascripts/application-bs.js +0 -2
- data/lib/generators/templates/app/assets/javascripts/beautiful_scaffold.js +15 -30
- data/lib/generators/templates/app/assets/javascripts/bootstrap-datetimepicker-for-beautiful-scaffold.js +16 -15
- data/lib/generators/templates/app/assets/stylesheets/application-bs.css +0 -2
- data/lib/generators/templates/app/assets/stylesheets/beautiful-scaffold.css.scss +9 -1
- data/lib/generators/templates/app/controllers/user_sessions_controller.rb +20 -0
- data/lib/generators/templates/app/helpers/beautiful_helper.rb +19 -5
- data/lib/generators/templates/app/locales/beautiful_scaffold.en.yml +8 -0
- data/lib/generators/templates/app/locales/beautiful_scaffold.fr.yml +9 -1
- data/lib/generators/templates/app/locales/beautiful_scaffold.ja.yml +9 -2
- data/lib/generators/templates/app/mailers/user_mailer.rb +13 -0
- data/lib/generators/templates/app/models/ability.rb +39 -0
- data/lib/generators/templates/app/models/concerns/caption_concern.rb +1 -1
- data/lib/generators/templates/app/models/user.rb +11 -0
- data/lib/generators/templates/app/views/_form_habtm_tag.html.erb +3 -3
- data/lib/generators/templates/app/views/layout.html.erb +12 -2
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.html.erb +16 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.text.erb +9 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.html.erb +16 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.text.erb +8 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.html.erb +19 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.text.erb +8 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.html.erb +19 -0
- data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.text.erb +8 -0
- data/lib/generators/templates/app/views/login_logout/user_sessions/_form.html.erb +15 -0
- data/lib/generators/templates/app/views/login_logout/user_sessions/new.html.erb +3 -0
- data/lib/generators/templates/app/views/partials/_form_field.html.erb +33 -25
- data/lib/generators/templates/app/views/partials/_index_column.html.erb +2 -0
- data/lib/generators/templates/app/views/partials/_login_logout_register.html.erb +7 -0
- data/lib/generators/templates/app/views/partials/_show_field.html.erb +2 -0
- metadata +23 -15
- data/Gemfile.lock +0 -209
- data/lib/generators/beautiful_devisecancan_generator.rb +0 -128
- data/lib/generators/templates/app/assets/javascripts/bootstrap-colorpicker.js +0 -520
- data/lib/generators/templates/app/assets/javascripts/tagit.js +0 -489
- data/lib/generators/templates/app/assets/stylesheets/colorpicker.css +0 -127
- data/lib/generators/templates/app/assets/stylesheets/tagit-dark-grey.css +0 -135
- data/lib/generators/templates/app/views/partials/_register_form.html.erb +0 -44
- data/lib/generators/templates/app/views/partials/_sign_in_form.html.erb +0 -18
- data/lib/generators/templates/app/views/partials/_sign_in_sign_out.html.erb +0 -19
- data/lib/generators/templates/lib/custom_failure.rb +0 -15
@@ -0,0 +1,137 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
class BeautifulSorceryGenerator < Rails::Generators::Base
|
3
|
+
require_relative 'beautiful_scaffold_common_methods'
|
4
|
+
include BeautifulScaffoldCommonMethods
|
5
|
+
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
#argument :model, :type => :string, :desc => "Name of model (ex: User)"
|
9
|
+
|
10
|
+
def install_sorcery
|
11
|
+
model = "User"
|
12
|
+
view_path = "app/views/"
|
13
|
+
|
14
|
+
if !File.read('Gemfile').include?("sorcery")
|
15
|
+
gem("sorcery", "0.16.0")
|
16
|
+
end
|
17
|
+
|
18
|
+
Bundler.with_unbundled_env do
|
19
|
+
run "bundle install"
|
20
|
+
end
|
21
|
+
|
22
|
+
raise "Model must be specified" if model.blank?
|
23
|
+
|
24
|
+
# Install sorcery
|
25
|
+
generate("sorcery:install", "remember_me reset_password user_activation brute_force_protection external --model #{model}")
|
26
|
+
|
27
|
+
# If exist users migration just add columns
|
28
|
+
create_user_migration = Dir.glob("db/migrate/*create_users.rb").first
|
29
|
+
if create_user_migration
|
30
|
+
already_email = File.read(create_user_migration).include?(":email")
|
31
|
+
sorcery_core_file = Dir.glob("db/migrate/*sorcery_core.rb").first
|
32
|
+
File.open(sorcery_core_file, "w+") do |f|
|
33
|
+
f.write("class SorceryCore < ActiveRecord::Migration[6.1]
|
34
|
+
def change
|
35
|
+
#{(already_email ? '' : 'add_column :users, :email, :string')}
|
36
|
+
add_column :users, :crypted_password, :string
|
37
|
+
add_column :users, :salt, :string
|
38
|
+
|
39
|
+
#{(already_email ? '' : 'add_index :users, :email, unique: true')}
|
40
|
+
end
|
41
|
+
end")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Generate mailer
|
46
|
+
copy_file("app/mailers/user_mailer.rb")
|
47
|
+
|
48
|
+
# Install controllers
|
49
|
+
copy_file("app/controllers/user_sessions_controller.rb")
|
50
|
+
|
51
|
+
# ===== Controller
|
52
|
+
inject_into_file("app/controllers/users_controller.rb",
|
53
|
+
"\n
|
54
|
+
skip_before_action :require_login, only: [:new, :create, :activate]
|
55
|
+
\n", after: "< BeautifulController")
|
56
|
+
|
57
|
+
inject_into_file("app/controllers/users_controller.rb",
|
58
|
+
"def activate
|
59
|
+
if @user = User.load_from_activation_token(params[:id])
|
60
|
+
@user.activate!
|
61
|
+
redirect_to(login_path, :notice => 'User was successfully activated.')
|
62
|
+
else
|
63
|
+
not_authenticated
|
64
|
+
end
|
65
|
+
end\n\n ", before: "private")
|
66
|
+
|
67
|
+
# ====== Model
|
68
|
+
# Add password & password_confirmation in model
|
69
|
+
inject_into_file("app/models/user.rb",
|
70
|
+
"\n
|
71
|
+
validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] }
|
72
|
+
validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] }
|
73
|
+
validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] }
|
74
|
+
|
75
|
+
before_update :setup_activation, if: -> { email_changed? }
|
76
|
+
after_update :send_activation_needed_email!, if: -> { previous_changes['email'].present? }\n",
|
77
|
+
after: "ApplicationRecord")
|
78
|
+
|
79
|
+
inject_into_file("app/models/user.rb", ":password,:password_confirmation,", :after => "def self.permitted_attributes\n return ")
|
80
|
+
|
81
|
+
# ====== Views
|
82
|
+
inject_into_file("app/views/users/_form.html.erb",
|
83
|
+
' <div class="form-group">
|
84
|
+
<%= f.label :password, t(\'app.models.user.bs_attributes.password\', :default => \'password\').capitalize, :class => "control-label" %><br />
|
85
|
+
<%= f.password_field :password, :class => "form-control" %>
|
86
|
+
</div>
|
87
|
+
<div class="form-group">
|
88
|
+
<%= f.label :password_confirmation, t(\'app.models.user.bs_attributes.password_confirmation\', :default => \'password_confirmation\').capitalize, :class => "control-label" %><br />
|
89
|
+
<%= f.password_field :password_confirmation, :class => "form-control" %>
|
90
|
+
</div>', before: '<!-- Beautiful_scaffold - AddField - Do not remove -->')
|
91
|
+
|
92
|
+
# Install all views for login/logout
|
93
|
+
directory "app/views/login_logout", "app/views"
|
94
|
+
|
95
|
+
# Domain in action_mailer
|
96
|
+
for current_env in ['production', 'development', 'test']
|
97
|
+
inject_into_file("config/environments/#{current_env}.rb", " config.action_mailer.default_url_options = { :host => 'localhost:3000' }", :after => "Rails.application.configure do\n" )
|
98
|
+
end
|
99
|
+
|
100
|
+
# In model
|
101
|
+
#remove_file("app/models/user.rb") # remove generated by sorcery
|
102
|
+
#copy_file("app/models/user.rb") # copy BS version ;)
|
103
|
+
|
104
|
+
# Limited access
|
105
|
+
inject_into_file("app/controllers/beautiful_controller.rb",
|
106
|
+
"\n before_action :require_login, except: [:dashboard]\n",
|
107
|
+
:after => 'layout "beautiful_layout"' + "\n")
|
108
|
+
|
109
|
+
inject_into_file("config/initializers/sorcery.rb",
|
110
|
+
"\nuser.user_activation_mailer = UserMailer\n",
|
111
|
+
:after => "# user.user_activation_mailer =\n")
|
112
|
+
|
113
|
+
# Routes (session)
|
114
|
+
inject_into_file("config/routes.rb",
|
115
|
+
'
|
116
|
+
resources :user_sessions, only: [:create]
|
117
|
+
get "login" => "user_sessions#new", :as => :login
|
118
|
+
post "logout" => "user_sessions#destroy", :as => :logout' + "\n\n\n",
|
119
|
+
:after => "Rails.application.routes.draw do\n")
|
120
|
+
|
121
|
+
# Activate
|
122
|
+
inject_into_file("config/routes.rb", " do
|
123
|
+
member do
|
124
|
+
get :activate
|
125
|
+
end
|
126
|
+
end", after: 'resources :users, concerns: :bs_routes')
|
127
|
+
|
128
|
+
copy_file("#{view_path}partials/_login_logout_register.html.erb", "#{view_path}layouts/_login_logout_register.html.erb")
|
129
|
+
|
130
|
+
# Sign in sign out
|
131
|
+
inject_into_file("#{view_path}layouts/beautiful_layout.html.erb",
|
132
|
+
"\n<%= render :partial => 'layouts/login_logout_register' %>\n",
|
133
|
+
:after => "<!-- Beautiful_scaffold - Signin - Do not remove -->")
|
134
|
+
|
135
|
+
say "Beautiful-Scaffold enable 'user_activation' sorcery module for you, so when you sign up, find in logs the activation link. You can't sign in yourself until you activate the account"
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
class BeautifulStorageGenerator < Rails::Generators::Base
|
3
|
+
require_relative 'beautiful_scaffold_common_methods'
|
4
|
+
include BeautifulScaffoldCommonMethods
|
5
|
+
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
# TODO voir pour engine
|
9
|
+
|
10
|
+
argument :model, :type => :string, :desc => "Name of model (ex: user)"
|
11
|
+
argument :storage_name, :type => :string, :desc => "Storage's name (ex: picture_file)"
|
12
|
+
|
13
|
+
class_option :mountable_engine, default: nil
|
14
|
+
|
15
|
+
def install_storage
|
16
|
+
|
17
|
+
#if !File.read('Gemfile').include?("image_processing")
|
18
|
+
gem("image_processing", '~> 1.2')
|
19
|
+
#end
|
20
|
+
|
21
|
+
Bundler.with_unbundled_env do
|
22
|
+
run "bundle install"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Install activestorage
|
26
|
+
run "bin/rails active_storage:install"
|
27
|
+
#run "rake db:migrate"
|
28
|
+
|
29
|
+
raise "Model must be specified" if model.blank?
|
30
|
+
raise "Attachment must be specified" if storage_name.blank?
|
31
|
+
|
32
|
+
# ===== Model
|
33
|
+
inject_into_file("app/models/#{engine_name}#{model}.rb",
|
34
|
+
"\n
|
35
|
+
has_one_attached :#{storage_name}
|
36
|
+
\n", after: "< ApplicationRecord")
|
37
|
+
inject_into_file("app/models/#{engine_name}#{model}.rb", ":#{storage_name},", :after => "def self.permitted_attributes\n return ")
|
38
|
+
|
39
|
+
# ====== Views
|
40
|
+
inject_into_file("app/views/#{engine_name}#{model_pluralize}/_form.html.erb",
|
41
|
+
" <div class='form-group'>
|
42
|
+
<%= f.label :#{storage_name}, t('app.models.#{model}.bs_attributes.#{storage_name}', :default => '#{storage_name}').capitalize, :class => 'control-label' %><br />
|
43
|
+
<%= f.file_field :#{storage_name}, direct_upload: true, :class => 'form-control' %>
|
44
|
+
</div>\n", before: '<!-- Beautiful_scaffold - AddField - Do not remove -->')
|
45
|
+
|
46
|
+
inject_into_file("app/views/#{engine_name}#{model_pluralize}/_form.html.erb",
|
47
|
+
", multipart: true", after: "form_for(@#{model}")
|
48
|
+
|
49
|
+
inject_into_file("app/views/#{engine_name}#{model_pluralize}/show.html.erb",
|
50
|
+
"<p><b><%= t('app.models.#{model}.bs_attributes.#{storage_name}', :default => '#{storage_name}') %>:</b><br><%= image_tag @#{model}.#{storage_name}.variant(resize_to_limit: [100, 100]) %></p>",
|
51
|
+
before: "<!-- Beautiful_scaffold - AddField - Field - Do not remove -->")
|
52
|
+
|
53
|
+
# Controller
|
54
|
+
#inject_into_file("app/controllers/#{engine_name}#{model_pluralize}_controller.rb",
|
55
|
+
# "\n before_action :require_login, except: [:dashboard]\n",
|
56
|
+
# :after => 'layout "beautiful_layout"' + "\n")
|
57
|
+
|
58
|
+
say "You must run 'rake db:migrate' to create activestorage migrations !"
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
@@ -4,14 +4,12 @@
|
|
4
4
|
//= require popper
|
5
5
|
//= require bootstrap-sprockets
|
6
6
|
//= require a-wysihtml5-0.3.0.min
|
7
|
-
//= require bootstrap-colorpicker
|
8
7
|
//= require moment
|
9
8
|
//= require moment/fr
|
10
9
|
//= require tempusdominus-bootstrap-4.js
|
11
10
|
//= require bootstrap-datetimepicker-for-beautiful-scaffold
|
12
11
|
//= require bootstrap-wysihtml5
|
13
12
|
//= require jstree.min.js
|
14
|
-
//= require tagit.js
|
15
13
|
//= require jquery-barcode
|
16
14
|
//= require beautiful_scaffold
|
17
15
|
//= require fixed_menu
|
@@ -18,42 +18,27 @@ function bs_init(){
|
|
18
18
|
return false;
|
19
19
|
});
|
20
20
|
|
21
|
-
//
|
21
|
+
// habtm (select2 - tag)
|
22
22
|
$('.bs-tagit').each(function( index ) {
|
23
23
|
var tagitelt = this;
|
24
|
-
$(tagitelt).
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
data: data_to_send,
|
38
|
-
dataType: "json",
|
39
|
-
success: function( data ) {
|
40
|
-
response( $.map( data, function( item ) {
|
41
|
-
return { label: item[result], value: item.id };
|
42
|
-
}));
|
43
|
-
}
|
44
|
-
});
|
45
|
-
},
|
46
|
-
triggerKeys:['enter', 'comma', 'tab'],
|
47
|
-
select : true,
|
48
|
-
allowNewTags : false
|
24
|
+
$(tagitelt).select2({
|
25
|
+
ajax: {
|
26
|
+
processResults: function (data) {
|
27
|
+
// Transforms the top-level key of the response object from 'items' to 'results'
|
28
|
+
return {
|
29
|
+
results: $.map(data, function (obj) {
|
30
|
+
obj.id = obj.id;
|
31
|
+
obj.text = obj.caption;
|
32
|
+
return obj;
|
33
|
+
})
|
34
|
+
};
|
35
|
+
}
|
36
|
+
}
|
49
37
|
});
|
50
|
-
// Bootstrap...
|
51
|
-
$('.tagit-input').addClass("form-control");
|
52
38
|
});
|
53
39
|
|
54
|
-
// Wysiwyg
|
40
|
+
// Wysiwyg field
|
55
41
|
$('.wysiwyg-editor').wysihtml5({"html": true});
|
56
|
-
$('.color').colorpicker({format: 'rgba'});
|
57
42
|
|
58
43
|
// Processing
|
59
44
|
$(document).on('click', '#checkall', function(){
|
@@ -1,21 +1,22 @@
|
|
1
1
|
function datetimepicker_init(){
|
2
|
-
$('.tpicker').datetimepicker({ format: 'LT'
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
$('.tpicker').datetimepicker({ format: 'LT', widgetPositioning: {
|
3
|
+
horizontal: 'auto',
|
4
|
+
vertical: 'auto'
|
5
|
+
} });
|
6
|
+
$('.tpicker').on('change.datetimepicker', function(elt){
|
6
7
|
var eltid = $(elt.target).attr('data-field');
|
7
|
-
$('#' + eltid + '
|
8
|
-
$('#' + eltid + '
|
8
|
+
$('#' + eltid + '4i').val(elt.date.hour());
|
9
|
+
$('#' + eltid + '5i').val(elt.date.minute());
|
9
10
|
});
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
$('.dpicker').datetimepicker({ format: 'L', widgetPositioning: {
|
12
|
+
horizontal: 'auto',
|
13
|
+
vertical: 'auto'
|
14
|
+
} });
|
15
|
+
$('.dpicker').on('change.datetimepicker', function(elt){
|
15
16
|
var eltid = $(elt.target).attr('data-field');
|
16
|
-
$('#' + eltid + '
|
17
|
-
$('#' + eltid + '
|
18
|
-
$('#' + eltid + '
|
17
|
+
$('#' + eltid + '3i').val(elt.date.date());
|
18
|
+
$('#' + eltid + '2i').val(elt.date.month()+1);
|
19
|
+
$('#' + eltid + '1i').val(elt.date.year());
|
19
20
|
});
|
20
21
|
$(document).on('click', '.dpicker', function(e){
|
21
22
|
$(this).datetimepicker('show');
|
@@ -24,6 +25,6 @@ function datetimepicker_init(){
|
|
24
25
|
$(this).datetimepicker('show');
|
25
26
|
});
|
26
27
|
$(".datetimepicker-input").each(function(i, elt){
|
27
|
-
|
28
|
+
$(elt).removeAttr("name");
|
28
29
|
});
|
29
30
|
}
|
@@ -177,10 +177,12 @@ html, body {
|
|
177
177
|
margin-bottom: 0px;
|
178
178
|
margin-left: 20px;
|
179
179
|
}
|
180
|
+
/*
|
180
181
|
.search-and-filter .form-group label{
|
181
182
|
margin-bottom: 0;
|
182
183
|
margin-top: 5px;
|
183
184
|
}
|
185
|
+
*/
|
184
186
|
|
185
187
|
/*
|
186
188
|
div.filler.show-menu{
|
@@ -199,4 +201,10 @@ div.fixed.hide-menu{
|
|
199
201
|
|
200
202
|
.title-index{
|
201
203
|
font-size: 30px;
|
202
|
-
}
|
204
|
+
}
|
205
|
+
|
206
|
+
.overview-color{
|
207
|
+
display:inline-block;
|
208
|
+
width: 40px;
|
209
|
+
height: 24px;
|
210
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class UserSessionsController < BeautifulController
|
2
|
+
|
3
|
+
skip_before_action :require_login, only: [:new, :create]
|
4
|
+
|
5
|
+
def create
|
6
|
+
@user = login(params[:email], params[:password])
|
7
|
+
|
8
|
+
if @user
|
9
|
+
redirect_back_or_to(:users, notice: 'Login successful')
|
10
|
+
else
|
11
|
+
flash.now[:alert] = 'Login failed'
|
12
|
+
render action: 'new'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
logout
|
18
|
+
redirect_to(:users, notice: 'Logged out!')
|
19
|
+
end
|
20
|
+
end
|
@@ -92,12 +92,15 @@ module BeautifulHelper
|
|
92
92
|
|
93
93
|
cap = i18n_translate_path(model_name, attribute_name)
|
94
94
|
|
95
|
+
type_of_column = ar_model.columns_hash[attribute_name].type unless ar_model.columns_hash[attribute_name].nil?
|
96
|
+
type_of_column ||= :other
|
97
|
+
|
95
98
|
infostr = ''
|
96
99
|
response = '' # See at end
|
100
|
+
response += '<div class="form-check form-check-inline">' if type_of_column == :boolean
|
97
101
|
response += f.label name_field, t(cap, :default => default_caption).capitalize, :class => "control-label"
|
102
|
+
response += '</div>' if type_of_column == :boolean
|
98
103
|
|
99
|
-
type_of_column = ar_model.columns_hash[attribute_name].type unless ar_model.columns_hash[attribute_name].nil?
|
100
|
-
type_of_column ||= :other
|
101
104
|
case type_of_column
|
102
105
|
when :date, :datetime
|
103
106
|
dt = (type_of_column == :datetime)
|
@@ -178,9 +181,20 @@ module BeautifulHelper
|
|
178
181
|
infostr = info_input(model_name, [(name_field + "_dp_lt").to_sym, (name_field + "_tp_lt").to_sym, (name_field + "_dp_gt").to_sym, (name_field + "_tp_gt").to_sym])
|
179
182
|
when :boolean
|
180
183
|
# Specify a default value (false) in rails migration
|
181
|
-
response +=
|
182
|
-
response += f.
|
183
|
-
response += f.label name_field + "
|
184
|
+
response += '<div class="form-check form-check-inline">'
|
185
|
+
response += f.radio_button((name_field + "_eq").to_sym, true, { class: 'form-check-input'})
|
186
|
+
response += f.label name_field + "_eq_true", h(t(:yes, default: "Yes")), class: "form-check-label"
|
187
|
+
response += '</div>'
|
188
|
+
|
189
|
+
response += '<div class="form-check form-check-inline">'
|
190
|
+
response += f.radio_button((name_field + "_eq").to_sym, false, { class: 'form-check-input'})
|
191
|
+
response += f.label name_field + "_eq_false", h(t(:no, default: "No")), class: "form-check-label"
|
192
|
+
response += '</div>'
|
193
|
+
|
194
|
+
response += '<div class="form-check form-check-inline">'
|
195
|
+
response += f.radio_button((name_field + "_eq").to_sym, nil, { class: 'form-check-input'})
|
196
|
+
response += f.label name_field + "_eq", h(t(:all, default: "All")), class: "form-check-label"
|
197
|
+
response += '</div>'
|
184
198
|
|
185
199
|
infostr = (begin session['search'][model_name][(name_field + "_eq").to_sym] == "on" ? "" : "info" rescue "" end)
|
186
200
|
when :string
|
@@ -47,3 +47,11 @@ en:
|
|
47
47
|
register: "Register"
|
48
48
|
search_and_filter: "Search and filter"
|
49
49
|
more_options: "More options..."
|
50
|
+
edit_profile: "edit profile"
|
51
|
+
logout: "Logout"
|
52
|
+
register: "Register"
|
53
|
+
login: "Login"
|
54
|
+
logged_out: "Logged out"
|
55
|
+
login_failed: "Login failed"
|
56
|
+
login_successful: "Login successful"
|
57
|
+
crypted_password: "Crypted password"
|
@@ -46,4 +46,12 @@ fr:
|
|
46
46
|
send_me_reset_password_instructions: "Me ré-envoyer les instructions de réinitialisation du mot de passe"
|
47
47
|
register: "Inscription"
|
48
48
|
search_and_filter: "Option de filtre"
|
49
|
-
more_options: "Plus d'options..."
|
49
|
+
more_options: "Plus d'options..."
|
50
|
+
edit_profile: "Editer mon profil"
|
51
|
+
logout: "Déconnexion"
|
52
|
+
register: "S'incrire"
|
53
|
+
login: "S'identifier"
|
54
|
+
logged_out: "déconnecté"
|
55
|
+
login_failed: "Erreur d'identification"
|
56
|
+
login_successful: "Identification réussie"
|
57
|
+
crypted_password: "Crypted password"
|