beautiful_scaffold 1.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/CHANGELOG +78 -1
  4. data/Gemfile +25 -9
  5. data/README.rdoc +45 -28
  6. data/Rakefile +29 -0
  7. data/beautiful_scaffold.gemspec +7 -7
  8. data/lib/beautiful_scaffold/version.rb +3 -0
  9. data/lib/generators/USAGE +3 -1
  10. data/lib/generators/beautiful_cancancan_generator.rb +51 -0
  11. data/lib/generators/beautiful_jointable_generator.rb +41 -8
  12. data/lib/generators/beautiful_locale_generator.rb +107 -104
  13. data/lib/generators/beautiful_migration_generator.rb +14 -20
  14. data/lib/generators/beautiful_scaffold_common_methods.rb +56 -26
  15. data/lib/generators/beautiful_scaffold_generator.rb +116 -78
  16. data/lib/generators/beautiful_sorcery_generator.rb +137 -0
  17. data/lib/generators/beautiful_storage_generator.rb +61 -0
  18. data/lib/generators/templates/app/assets/javascripts/application-bs.js +5 -7
  19. data/lib/generators/templates/app/assets/javascripts/beautiful_scaffold.js +65 -79
  20. data/lib/generators/templates/app/assets/javascripts/bootstrap-datetimepicker-for-beautiful-scaffold.js +26 -23
  21. data/lib/generators/templates/app/assets/javascripts/fixed_menu.js +3 -1
  22. data/lib/generators/templates/app/assets/javascripts/jstree.min.js +6 -0
  23. data/lib/generators/templates/app/assets/stylesheets/application-bs.css +14 -6
  24. data/lib/generators/templates/app/assets/stylesheets/beautiful-scaffold.css.scss +20 -3
  25. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/32px.png +0 -0
  26. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/40px.png +0 -0
  27. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/style.scss +1146 -0
  28. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/throbber.gif +0 -0
  29. data/lib/generators/templates/app/assets/stylesheets/themes/default/32px.png +0 -0
  30. data/lib/generators/templates/app/assets/stylesheets/themes/default/40px.png +0 -0
  31. data/lib/generators/templates/app/assets/stylesheets/themes/default/style.scss +1102 -0
  32. data/lib/generators/templates/app/assets/stylesheets/themes/default/throbber.gif +0 -0
  33. data/lib/generators/templates/app/controllers/base.rb +14 -7
  34. data/lib/generators/templates/app/controllers/master_base.rb +19 -25
  35. data/lib/generators/templates/app/controllers/user_sessions_controller.rb +20 -0
  36. data/lib/generators/templates/app/helpers/beautiful_helper.rb +102 -66
  37. data/lib/generators/templates/app/initializers/link_renderer.rb +23 -18
  38. data/lib/generators/templates/app/locales/beautiful_scaffold.en.yml +8 -0
  39. data/lib/generators/templates/app/locales/beautiful_scaffold.fr.yml +9 -1
  40. data/lib/generators/templates/app/locales/beautiful_scaffold.ja.yml +9 -2
  41. data/lib/generators/templates/app/mailers/user_mailer.rb +13 -0
  42. data/lib/generators/templates/app/models/ability.rb +39 -0
  43. data/lib/generators/templates/app/models/concerns/caption_concern.rb +1 -1
  44. data/lib/generators/templates/app/models/user.rb +11 -0
  45. data/lib/generators/templates/app/views/_form.html.erb +4 -1
  46. data/lib/generators/templates/app/views/_form_habtm_tag.html.erb +6 -2
  47. data/lib/generators/templates/app/views/_mass_inserting.html.erb +38 -30
  48. data/lib/generators/templates/app/views/_modal_columns.html.erb +3 -3
  49. data/lib/generators/templates/app/views/edit.html.erb +1 -3
  50. data/lib/generators/templates/app/views/index.html.erb +83 -79
  51. data/lib/generators/templates/app/views/layout.html.erb +36 -36
  52. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.html.erb +16 -0
  53. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.text.erb +9 -0
  54. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.html.erb +16 -0
  55. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.text.erb +8 -0
  56. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.html.erb +19 -0
  57. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.text.erb +8 -0
  58. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.html.erb +19 -0
  59. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.text.erb +8 -0
  60. data/lib/generators/templates/app/views/login_logout/user_sessions/_form.html.erb +15 -0
  61. data/lib/generators/templates/app/views/login_logout/user_sessions/new.html.erb +3 -0
  62. data/lib/generators/templates/app/views/new.html.erb +0 -2
  63. data/lib/generators/templates/app/views/partials/_forget_password.html.erb +2 -2
  64. data/lib/generators/templates/app/views/partials/_form_field.html.erb +37 -29
  65. data/lib/generators/templates/app/views/partials/_index_batch.html.erb +1 -1
  66. data/lib/generators/templates/app/views/partials/_index_column.html.erb +6 -4
  67. data/lib/generators/templates/app/views/partials/_index_header.html.erb +1 -1
  68. data/lib/generators/templates/app/views/partials/_index_search.html.erb +1 -1
  69. data/lib/generators/templates/app/views/partials/_login_logout_register.html.erb +7 -0
  70. data/lib/generators/templates/app/views/partials/_show_field.html.erb +5 -3
  71. data/lib/generators/templates/app/views/show.html.erb +2 -2
  72. data/lib/generators/templates/app/views/treeview.html.erb +8 -5
  73. metadata +38 -24
  74. data/lib/generators/beautiful_devisecancan_generator.rb +0 -128
  75. data/lib/generators/templates/app/assets/javascripts/bootstrap-colorpicker.js +0 -520
  76. data/lib/generators/templates/app/assets/javascripts/jquery.jstree.js +0 -4551
  77. data/lib/generators/templates/app/assets/stylesheets/bootstrap_and_overrides.css.less +0 -40
  78. data/lib/generators/templates/app/assets/stylesheets/colorpicker.css +0 -127
  79. data/lib/generators/templates/app/assets/stylesheets/datepicker.css +0 -224
  80. data/lib/generators/templates/app/assets/stylesheets/reset.css +0 -48
  81. data/lib/generators/templates/app/assets/stylesheets/themes/default/d.gif +0 -0
  82. data/lib/generators/templates/app/assets/stylesheets/themes/default/d.png +0 -0
  83. data/lib/generators/templates/app/assets/stylesheets/themes/default/style.css +0 -74
  84. data/lib/generators/templates/app/assets/stylesheets/timepicker.css +0 -89
  85. data/lib/generators/templates/app/views/partials/_register_form.html.erb +0 -44
  86. data/lib/generators/templates/app/views/partials/_sign_in_form.html.erb +0 -18
  87. data/lib/generators/templates/app/views/partials/_sign_in_sign_out.html.erb +0 -19
  88. data/lib/generators/templates/lib/custom_failure.rb +0 -15
@@ -1,39 +1,44 @@
1
- require 'will_paginate/view_helpers/link_renderer_base'
1
+ require 'will_paginate/view_helpers/action_view'
2
2
 
3
3
  module WillPaginate
4
- module ViewHelpers
5
- # This class does the heavy lifting of actually building the pagination
6
- # links. It is used by +will_paginate+ helper internally.
7
- class LinkRenderer < LinkRendererBase
4
+ module ActionView
5
+ class BootstrapLinkRenderer < LinkRenderer
6
+
7
+ protected
8
8
 
9
- protected
10
-
11
9
  def page_number(page)
12
- unless page == current_page
13
- link(page, page, :rel => rel_value(page), :class => "btn btn-default")
10
+ is_current_page = (page == current_page)
11
+ temphtml = '<li class="page-item ' + (is_current_page ? 'active' : '') + '">'
12
+ unless is_current_page
13
+ temphtml += link(page, page, :rel => rel_value(page), :class => 'page-link')
14
14
  else
15
- tag(:a, page, :class => 'current active btn btn-default')
15
+ temphtml += tag(:a, page, :class => 'current active page-link')
16
16
  end
17
+ temphtml += '</li>'
18
+ temphtml
17
19
  end
18
-
20
+
19
21
  def gap
20
22
  text = @template.will_paginate_translate(:page_gap) { '&hellip;' }
21
23
  %(<a class="gap btn btn-default disabled">#{text}</a>)
22
24
  end
23
-
25
+
24
26
  def previous_or_next_page(page, text, classname)
27
+ temphtml = '<li class="page-item">'
25
28
  if page
26
- link(text, page, :class => classname + ' btn btn-default')
29
+ temphtml += link(text, page, :class => classname + ' page-link')
27
30
  else
28
- tag(:a, text, :class => classname + ' disabled btn btn-default')
31
+ temphtml += tag(:a, text, :class => classname + ' page-link')
29
32
  end
33
+ temphtml += '</li>'
34
+ temphtml
30
35
  end
31
-
36
+
32
37
  def html_container(html)
33
- html
38
+ '<ul class="pagination pagination-sm justify-content-end mb-0">' + html + '</ul>'
34
39
  end
35
-
36
- private
40
+
41
+ private
37
42
 
38
43
  def param_name
39
44
  @options[:param_name].to_s
@@ -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"
@@ -15,7 +15,7 @@ ja:
15
15
  cancel: "キャンセル"
16
16
  export: "エクスポート"
17
17
  search: "検索"
18
- sort: "Sort"
18
+ sort: "トライ"
19
19
  download: "ダウンロード"
20
20
  "yes": "はい"
21
21
  "no": "いいえ"
@@ -47,4 +47,11 @@ ja:
47
47
  register: "登録"
48
48
  search_and_filter: "検索条件"
49
49
  more_options: "追加オプション..."
50
-
50
+ edit_profile: "プロファイル編集"
51
+ logout: "ログアウト"
52
+ register: "登録"
53
+ login: "ログイン"
54
+ logged_out: "ログアウトしました"
55
+ login_failed: "ログインに失敗しました"
56
+ login_successful: "ログイン成功"
57
+ crypted_password: "暗号化されたパスワード"
@@ -0,0 +1,13 @@
1
+ class UserMailer < ApplicationMailer
2
+ def activation_needed_email(user)
3
+ @user = user
4
+ @url = activate_user_url(@user.activation_token)
5
+ mail(to: user.email, subject: 'Welcome to My Awesome Site')
6
+ end
7
+
8
+ def activation_success_email(user)
9
+ @user = user
10
+ @url = login_url
11
+ mail(to: user.email, subject: 'Your account is now activated')
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Ability
4
+ include CanCan::Ability
5
+
6
+ def initialize(user)
7
+ if !user.nil?
8
+ if user.id == 1
9
+ can :manage, :all
10
+ end
11
+ end
12
+ # Define abilities for the passed in user here. For example:
13
+ #
14
+ # user ||= User.new # guest user (not logged in)
15
+ # if user.admin?
16
+ # can :manage, :all
17
+ # else
18
+ # can :read, :all
19
+ # end
20
+ #
21
+ # The first argument to `can` is the action you are giving the user
22
+ # permission to do.
23
+ # If you pass :manage it will apply to every action. Other common actions
24
+ # here are :read, :create, :update and :destroy.
25
+ #
26
+ # The second argument is the resource the user can perform the action on.
27
+ # If you pass :all it will apply to every resource. Otherwise pass a Ruby
28
+ # class of the resource.
29
+ #
30
+ # The third argument is an optional hash of conditions to further filter the
31
+ # objects.
32
+ # For example, here the user can only update published articles.
33
+ #
34
+ # can :update, Article, :published => true
35
+ #
36
+ # See the wiki for details:
37
+ # https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
38
+ end
39
+ end
@@ -3,6 +3,6 @@ module CaptionConcern
3
3
 
4
4
  # You can OVERRIDE this method used in model form and search form (in belongs_to relation)
5
5
  def caption
6
- (self["name"] || self["label"] || self["description"] || "##{id}")
6
+ (self["name"] || self["label"] || self["description"] || self["email"] || "##{id}")
7
7
  end
8
8
  end
@@ -0,0 +1,11 @@
1
+ class User < ApplicationRecord
2
+ authenticates_with_sorcery!
3
+
4
+ validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] }
5
+ validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] }
6
+ validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] }
7
+
8
+ before_update :setup_activation, if: -> { email_changed? }
9
+ after_update :send_activation_needed_email!, if: -> { previous_changes["email"].present? }
10
+
11
+ end
@@ -1,6 +1,6 @@
1
1
  <%-
2
2
  strformfor = "@#{singular_table_name}"
3
- if not namespace_alone.blank? then
3
+ if !namespace_alone.blank?
4
4
  strformfor = "[:#{namespace_alone}, @#{singular_table_name} ]"
5
5
  end
6
6
  -%>
@@ -17,6 +17,9 @@ end
17
17
  <%% end %>
18
18
  <%= render_partial 'app/views/partials/_form_field.html.erb' %><!-- Beautiful_scaffold - AddField - Do not remove -->
19
19
  <div>
20
+ <%%= link_to <%= namespace_for_route %><%= plural_table_name %>_path, :class => "btn btn-light" do %>
21
+ <i class="fa fa-chevron-left"></i> <%%= t(:back, :default => "Back") %>
22
+ <%% end %>
20
23
  <%%= f.submit :class => "btn btn-primary", :data => { :disable_with => t(:saving, :default => "Saving...") } %>
21
24
  </div>
22
25
  <%% end %>
@@ -6,17 +6,21 @@
6
6
  :linked_model_name => "tag",
7
7
  :plural_linked_model_name => "tags",
8
8
  :namespace_bs => "admin",
9
+ :engine_bs => "YOUR_ENGINE_OR_EMPTY_STRING",
9
10
  :field_to_search_for_linked_model => "name",
11
+ :attr_to_show => "caption",
10
12
  :f => f
11
13
  }
12
14
  # Example to put in a _form.html.erb
13
15
  %>
14
- <% path_namespace = '/' + namespace_bs if not namespace_bs.blank? %>
16
+ <% path_namespace = "/" %>
17
+ <% path_namespace += "#{engine_bs}/" if engine_bs.present? %>
18
+ <% path_namespace += "/#{namespace_bs}/" if namespace_bs.present? %>
15
19
 
16
20
  <div class="form-group">
17
21
  <%= f.label plural_linked_model_name.to_sym, t(plural_linked_model_name.to_sym, :default => plural_linked_model_name.capitalize), :class => "control-label" %>
18
22
  <div>
19
- <ul class="bs-tagit" id="<%= model_name %>_<%= linked_model_name %>_ids" name="<%= model_name %>[<%= linked_model_name %>_ids][]" data-url="<%= path_namespace %>/<%= plural_linked_model_name %>/search_and_filter.json" data-param="q[<%= field_to_search_for_linked_model %>_cont]" data-result="caption">
23
+ <ul class="bs-tagit" id="<%= model_name %>_<%= linked_model_name %>_ids" name="<%= model_name %>[<%= linked_model_name %>_ids][]" data-url="<%= path_namespace %><%= plural_linked_model_name %>/search_and_filter.json" data-param="q[<%= field_to_search_for_linked_model %>_cont]" data-result="<%= attr_to_show %>">
20
24
  <% begin %>
21
25
  <% for elt in model_class.send(plural_linked_model_name) %>
22
26
  <li data-value="<%= elt.id %>"><%= elt.caption %></li>
@@ -1,37 +1,45 @@
1
1
  <% model = ("#{(engine.blank? ? '' : "#{engine.camelize}::")}#{model_name.camelize}").constantize %>
2
2
  <% formparams = [] %>
3
- <% if not namespace.blank? then %>
3
+ <% if !namespace.blank? %>
4
4
  <% formparams << namespace %>
5
5
  <% end %>
6
6
  <% formparams << model.new %>
7
- <%= form_for formparams, :method => :post, :html => { :class => "well well-small form-inline mass-inserting #{(params[:mass_inserting] ? 'setfocus' : '')}" } do |f| %>
8
- <%= hidden_field_tag :mass_inserting, true %>
9
- <% for col in model_columns %>
10
- <div <%= visible_column(model_name, col, 'inline') %> class="col-<%= col %>">
11
- <%=
12
- ar = model.columns_hash[col]
13
- if not ar.nil? then
14
- case ar.type
15
- when :integer then
16
- if col =~ /.*_id/ then
17
- f.collection_select((col).to_sym, col.camelize.constantize.all, :id, :caption, { :include_blank => true, :selected => (begin params[:q][col + "_eq"].to_i rescue '' end) }, {:class => "form-control"})
18
- else
19
- f.text_field(col.to_sym, :placeholder => t(i18n_translate_path(model_name, col)).capitalize, :class => "form-control")
20
- end
21
- when :boolean then
22
- (
23
- "<label class='bs-label-ib'>#{f.check_box(col.to_sym, {}, true, false)}#{t(i18n_translate_path(model_name, col)).capitalize}</label>".html_safe
24
- )
25
- else
26
- f.text_field(col.to_sym, :placeholder => t(i18n_translate_path(model_name, col)).capitalize, :class => "form-control")
27
- end
28
- else
29
- f.collection_select((col + '_id').to_sym, col.camelize.constantize.all, :id, :caption, { :include_blank => true, :selected => (begin params[:q][col + "_id_eq"].to_i rescue '' end) }, {:class => "form-control"})
30
- end
31
- %>
7
+ <div class="container-fluid mb-3">
8
+ <div class="row">
9
+ <div class="col-md">
10
+ <div class="card card-body bg-light">
11
+ <%= form_for formparams, :method => :post, :html => { :class => "form-inline mass-inserting #{(params[:mass_inserting] ? 'setfocus' : '')}" } do |f| %>
12
+ <%= hidden_field_tag :mass_inserting, true %>
13
+ <% for col in model_columns %>
14
+ <div <%= visible_column(model_name, col, 'inline') %> class="form-group mr-sm-2 col-<%= col %>">
15
+ <%=
16
+ ar = model.columns_hash[col]
17
+ if !ar.nil?
18
+ case ar.type
19
+ when :integer then
20
+ if col =~ /.*_id/
21
+ f.collection_select((col).to_sym, col.camelize.constantize.all, :id, :caption, { :include_blank => true, :selected => (begin params[:q]["#{col}_eq"].to_i rescue '' end) }, {:class => "form-control"})
22
+ else
23
+ f.text_field(col.to_sym, :placeholder => t(i18n_translate_path(model_name, col), default: "#{model_name}.#{col}").capitalize, :class => "form-control")
24
+ end
25
+ when :boolean then
26
+ (
27
+ "<label class='bs-label-ib'>#{f.check_box(col.to_sym, {}, true, false)}#{t(i18n_translate_path(model_name, col), default: "#{model_name}.#{col}").capitalize}</label>".html_safe
28
+ )
29
+ else
30
+ f.text_field(col.to_sym, :placeholder => t(i18n_translate_path(model_name, col), default: "#{model_name}.#{col}").capitalize, :class => "form-control")
31
+ end
32
+ else
33
+ f.collection_select(("#{false ? "#{engine}_" : ''}#{col}_id").to_sym, ("#{(engine.blank? ? '' : "#{engine.camelize}::")}#{col.camelize}").constantize.all, :id, :caption, { :include_blank => true, :selected => (begin params[:q]["#{col}_id_eq"].to_i rescue '' end) }, {:class => "form-control"})
34
+ end
35
+ %>
36
+ </div>
37
+ <% end %>
38
+ <div class="form-group">
39
+ <%= f.submit t(:create, :default => "Create"), :class => "btn btn-outline-secondary", :data => { :disable_with => t(:saving, :default => "Saving...") } %>
40
+ </div>
41
+ <% end %>
42
+ </div>
32
43
  </div>
33
- <% end %>
34
- <div style="display:inline;">
35
- <%= f.submit t(:create, :default => "Create"), :class => "btn btn-default", :data => { :disable_with => t(:saving, :default => "Saving...") } %>
36
44
  </div>
37
- <% end %>
45
+ </div>
@@ -2,8 +2,8 @@
2
2
  <div class="modal-dialog">
3
3
  <div class="modal-content">
4
4
  <div class="modal-header">
5
+ <h5 class="modal-title"><%= t(:select_columns, :default => "Select Columns") %></h5>
5
6
  <button type="button" class="close" data-dismiss="modal">×</button>
6
- <h3><%= t(:select_columns, :default => "Select Columns") %></h3>
7
7
  </div>
8
8
  <div class="modal-body">
9
9
  <% for field in model_columns %>
@@ -13,8 +13,8 @@
13
13
  <% end %>
14
14
  </div>
15
15
  <div class="modal-footer">
16
- <button type="button" class="btn btn-primary" id="filter-columns" data-url="/<%= engine_name %><%= model_name %>/select_fields">Ok</button>
17
- <button type="button" class="btn btn-default" id="cancel-filter-columns"><%= t(:cancel, :default => "Cancel") %></button>
16
+ <button type="button" class="btn btn-primary" id="filter-columns" data-url="<%= select_fields_url(model_name) %>">Ok</button>
17
+ <button type="button" class="btn btn-light" id="cancel-filter-columns"><%= t(:cancel, :default => "Cancel") %></button>
18
18
  </div>
19
19
  </div>
20
20
  </div>
@@ -1,5 +1,3 @@
1
1
  <h2><%%= t(:editing, :default => 'Editing') %> <%%= <%= i18n_t_m(singular_table_name) %> %></h2>
2
2
 
3
- <%%= render 'form' %>
4
-
5
- <%%= link_to t(:back, :default => "Back"), <%= namespace_for_route %><%= plural_table_name %>_path, :class => "btn btn-default" %>
3
+ <%%= render 'form' %>
@@ -1,72 +1,75 @@
1
- <h2><%%= t(:listing, :default => "Listing") %> <%%= <%= i18n_t_m_p(singular_table_name) %> %></h2>
2
-
3
- <p>
4
- <%%= link_to '<i class="fa fa-plus"></i> '.html_safe + t(:new, :default => "New") + ' ' + <%= i18n_t_m(model) %>, new_<%= namespace_for_route %><%= singular_table_name %>_path, :class => "btn btn-default" %>
5
- <%% if <%= model_with_engine_camelize %>.columns.map(&:name).include?("<%= model %>_id") then %>
6
- <%%= link_to '<i class="fa fa-folder-close"></i> '.html_safe + t(:treeview, :default => "Treeview") + ' ' + <%= i18n_t_m(model) %>, treeview_<%= namespace_for_route %><%= model_pluralize %>_path, :class => "btn btn-default" %>
7
- <%% end %>
8
- </p>
1
+ <div class="container-fluid">
2
+ <div class="row">
3
+ <div class="col-md">
4
+ <h2 class="title-index"><%%= t(:listing, :default => "Listing") %> <%%= <%= i18n_t_m_p(singular_table_name) %> %></h2>
5
+ <p>
6
+ <%%= link_to '<i class="fa fa-plus"></i> '.html_safe + t(:new, :default => "New") + ' ' + <%= i18n_t_m(model) %>, new_<%= namespace_for_route %><%= singular_table_name %>_path, :class => "btn btn-outline-secondary" %>
7
+ <%% if <%= model_with_engine_camelize %>.columns.map(&:name).include?("<%= model %>_id") %>
8
+ <%%= link_to '<i class="fa fa-folder-close"></i> '.html_safe + t(:treeview, :default => "Treeview") + ' ' + <%= i18n_t_m(model) %>, treeview_<%= namespace_for_route %><%= model_pluralize %>_path, :class => "btn btn-outline-secondary" %>
9
+ <%% end %>
10
+ </p>
11
+ </div>
12
+ </div>
13
+ </div>
9
14
 
10
15
  <%%= render :partial => "layouts/mass_inserting", :locals => { :engine => '<%= engine_opt %>', :namespace => '<%= namespace_alone %>', :model_name => '<%= model %>', :model_columns => [<%= attributes.map{ |e| "'#{e.name}'" }.join(',') %>] } %>
11
16
 
12
17
  <%%# Set your scopes below (string in array) %>
13
18
  <%% scopes = [] %>
14
- <%% if not scopes.blank? then %>
15
- <div class="btn-toolbar">
16
- <div class="btn-group">
17
- <%%= link_to "All (#{@<%= model %>_scope_for_scope.count})", <%= namespace_for_route %><%= plural_table_name %>_path(:scope => ""), :class => "btn btn-default #{((session[:scope][:<%= model %>].to_s == '') ? 'active' : '')}" %>
18
- <%% for scope in scopes %>
19
- <%%= link_to "#{scope} (#{@<%= model %>_scope_for_scope.send(scope).count})", <%= namespace_for_route %><%= plural_table_name %>_path(:scope => scope), :class => "btn btn-default #{((session[:scope][:<%= model %>].to_s == scope) ? 'active' : '')}" %>
20
- <%% end %>
19
+ <%% if !scopes.blank? %>
20
+ <div class="container-fluid mb-3" id="scopes-div" data-present-title="<%%= t(:help_scope, :default => "Filter by scope") %>" data-present-description="<%%= t(:help_scope_description, :default => "Filter by scope") %>" data-present-order="1">
21
+ <div class="row">
22
+ <div class="col-md btn-toolbar">
23
+ <div class="btn-group">
24
+ <%%= link_to "All (#{@<%= model %>_scope_for_scope.count})", <%= namespace_for_route %><%= plural_table_name %>_path(:scope => ""), :class => "btn btn-outline-secondary #{((session[:scope][:<%= model %>].to_s == '') ? 'active' : '')}" %>
25
+ <%% for scope in scopes %>
26
+ <%%= link_to "#{scope} (#{@<%= model %>_scope_for_scope.send(scope).count})", <%= namespace_for_route %><%= plural_table_name %>_path(:scope => scope), :class => "btn btn-outline-secondary #{((session[:scope][:<%= model %>].to_s == scope) ? 'active' : '')}" %>
27
+ <%% end %>
28
+ </div>
29
+ </div>
21
30
  </div>
22
31
  </div>
23
32
  <%% end %>
24
33
 
25
- <div class="row">
26
- <div class="col-md-12">
27
- <a class="btn btn-xs btn-default" id="hide-menu-btn">
28
- <i class="fa fa-caret-left"></i>
29
- <i class="fa fa-caret-left"></i>
30
- </a>
31
- <a class="btn btn-xs btn-default" id="show-menu-btn">
32
- <i class="fa fa-caret-right"></i>
33
- <i class="fa fa-caret-right"></i>
34
- </a>
35
-
36
- <a class="btn btn-xs btn-default pull-right" id="hide-search-btn">
37
- <i class="fa fa-caret-right"></i>
38
- <i class="fa fa-caret-right"></i>
39
- </a>
40
- <a class="btn btn-xs btn-default pull-right" id="show-search-btn">
41
- <i class="fa fa-caret-left"></i>
42
- <i class="fa fa-caret-left"></i>
43
- </a>
44
- </div>
45
- </div>
46
-
34
+ <div class="container-fluid">
47
35
  <div class="row">
48
36
  <div class="col-md-9">
49
- <%%= form_tag batch_<%= namespace_for_route %><%= plural_table_name %>_path, :class => "form-inline" do %>
50
- <div class="well well-small">
51
- <label class="control-label" for="select01"><%%= t(:batch, :default => "Batch") %></label>
52
-
53
- <select id="select01" name="actionprocess" class="form-control">
54
- <option value="destroy"><%%= t(:destroy, :default => "Destroy") %></option>
55
- <%= render_partial 'app/views/partials/_index_batch.html.erb' %>
56
- <!-- Beautiful_scaffold - AddField - Batch - Do not remove -->
57
- </select>
58
- <button class="btn btn-default" type="submit"><i class="fa fa-ok"></i> <%%= t(:process, :default => "Process") %></button>
37
+ <%%= form_tag batch_<%= namespace_for_route %><%= plural_table_name %>_path do %>
38
+ <div class="card card-body bg-light mb-3">
39
+ <div class="row">
40
+ <div class="form-inline col-md" id="batch-div" data-present-title="<%%= t(:help_batch, :default => "Batch processing") %>" data-present-description="<%%= t(:help_batch_description, :default => "Batch processing description") %>" data-present-order="2">
41
+ <label class="control-label mb-2 mr-sm-2" for="select01"><%%= t(:batch, :default => "Batch") %></label>
42
+
43
+ <select id="select01" name="actionprocess" class="custom-select mb-2 mr-sm-2">
44
+ <option value="destroy"><%%= t(:destroy, :default => "Destroy") %></option>
45
+ <option value="touch"><%%= t(:touch, :default => "Touch") %></option>
46
+ <%= render_partial 'app/views/partials/_index_batch.html.erb' %>
47
+ <!-- Beautiful_scaffold - AddField - Batch - Do not remove -->
48
+ </select>
49
+ <button class="btn btn-outline-secondary mb-2 mr-sm-2" type="submit"><i class="fa fa-ok"></i> <%%= t(:process, :default => "Process") %></button>
50
+ </div>
51
+ <div class="col-md">
52
+ <a class="btn btn-xs btn-light float-right" id="hide-search-btn">
53
+ <i class="fa fa-caret-right"></i>
54
+ <i class="fa fa-caret-right"></i>
55
+ </a>
56
+ <a class="btn btn-xs btn-light float-right" id="show-search-btn">
57
+ <i class="fa fa-caret-left"></i>
58
+ <i class="fa fa-caret-left"></i>
59
+ </a>
60
+ </div>
61
+ </div>
59
62
  </div>
60
63
 
61
64
  <%%= render :partial => "layouts/modal_columns", :locals => { :engine_name => '<%= engine_opt %>', :model_name => "<%= singular_table_name %>", :model_columns => [<%= (attributes.map{ |e| "'#{e.name}'" }.to_a + ["'created_at'", "'updated_at'"]).join(',') %>] } %>
62
65
 
63
- <table class="table table-striped table-bordered table-condensed">
66
+ <table class="table table-striped table-bordered table-sm">
64
67
  <thead>
65
68
  <tr>
66
69
  <th class="ac">
67
70
  <a class="" data-toggle="modal" href="#modal-columns" title="<%%= t(:select_columns, :default => "Select Columns") %>" ><i class="fa fa-th-list"></i></a>
68
71
  </th>
69
- <th>
72
+ <th id="checkall-div" data-present-title="<%%= t(:help_checkall, :default => "Check all elements") %>" data-present-description="<%%= t(:help_checkall_description, :default => "Check all elements visible on the page") %>" data-present-order="3">
70
73
  <%%= check_box_tag :checkall, '' %>
71
74
  </th>
72
75
  <%= render_partial 'app/views/partials/_index_header.html.erb' %>
@@ -78,7 +81,7 @@
78
81
  <%%= sorting_header("<%= singular_table_name %>", "updated_at", "<%= namespace_alone %>") %>
79
82
  </th>
80
83
  <th colspan="3">
81
- <label class="checkbox">
84
+ <label class="checkbox mb-0" id="checkallall-div" data-present-title="<%%= t(:help_checkallall, :default => "Check all elements") %>" data-present-description="<%%= t(:help_checkallall_description, :default => "Check all elements, that match current filter even if they are not visible on the page") %>" data-present-order="4">
82
85
  <%%= check_box_tag :checkallelt, 'all' %>
83
86
  <%%= pluralize(@<%= singular_table_name %>_scope.count, <%= i18n_t_m(singular_table_name) %>, <%= i18n_t_m_p(singular_table_name) %>) %>
84
87
  </label>
@@ -98,7 +101,7 @@
98
101
  <%%= l(<%= singular_table_name %>.updated_at, :format => :long) %>
99
102
  </td>
100
103
  <td class="ac am"><%%= link_to '<i class="fa fa-search"></i>'.html_safe, <%= namespace_for_route %><%= singular_table_name %>_path(<%= singular_table_name %>), :title => t(:show, :default => "Show") %></td>
101
- <td class="ac am"><%%= link_to '<i class="fa fa-pencil"></i>'.html_safe, edit_<%= namespace_for_route %><%= singular_table_name %>_path(<%= singular_table_name %>), :title => t(:edit, :default => "Edit") %></td>
104
+ <td class="ac am"><%%= link_to '<i class="fa fa-edit"></i>'.html_safe, edit_<%= namespace_for_route %><%= singular_table_name %>_path(<%= singular_table_name %>), :title => t(:edit, :default => "Edit") %></td>
102
105
  <td class="ac am"><%%= link_to '<i class="fa fa-times"></i>'.html_safe, <%= namespace_for_route %><%= singular_table_name %>_path(<%= singular_table_name %>), :data => { :confirm => t(:are_you_sure, :default => "Are you sure?") }, :method => :delete, :title => t(:destroy, :default => "Destroy") %></td>
103
106
  </tr>
104
107
  <%% end %>
@@ -112,45 +115,46 @@
112
115
  :inner_window => 0,
113
116
  :outer_window => 0,
114
117
  :previous_label => t(:prev, :default => "Previous"),
115
- :next_label => t(:next, :default => "Next") %>
118
+ :next_label => t(:next, :default => "Next"),
119
+ :renderer => WillPaginate::ActionView::BootstrapLinkRenderer
120
+ %>
116
121
 
117
122
  </div>
118
- <div class="btn-group pull-right">
119
- <%%= link_to '<i class="fa fa-download"></i> CSV'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :csv), :class => "btn btn-default" %>
120
- <%%= link_to '<i class="fa fa-download"></i> XML'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :xml), :class => "btn btn-default" %>
121
- <%%= link_to '<i class="fa fa-download"></i> JSON'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :json), :class => "btn btn-default" %>
122
- <%%= link_to '<i class="fa fa-download"></i> PDF'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :pdf), :class => "btn btn-default" %>
123
+ <div class="btn-group btn-group-sm float-right">
124
+ <%%= link_to '<i class="fa fa-download"></i> CSV'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :csv), :class => "btn btn-outline-secondary" %>
125
+ <%%= link_to '<i class="fa fa-download"></i> XML'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :xml), :class => "btn btn-outline-secondary" %>
126
+ <%%= link_to '<i class="fa fa-download"></i> JSON'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :json), :class => "btn btn-outline-secondary" %>
127
+ <%%= link_to '<i class="fa fa-download"></i> PDF'.html_safe, <%= namespace_for_route %><%= plural_table_name %>_path(:format => :pdf), :class => "btn btn-outline-secondary" %>
123
128
  </div>
124
129
  </div>
125
130
  <%% end %>
126
131
  </div>
127
132
  <div class="col-md-3">
128
- <%%= search_form_for @q, :url => <%= namespace_for_route + 'search_' + model_pluralize + '_path' %>, :html => { :class => "well well-small search-and-filter" }, :method => :post do |f| %>
129
-
130
- <h3><%%= t("search_and_filter", :default => "Search & filter") %></h3>
131
-
132
- <%= render_partial 'app/views/partials/_index_search.html.erb' %>
133
-
134
- <!-- Beautiful_scaffold - AddField - Search - Do not remove -->
135
-
136
- <div class="panel-group">
137
- <div class="panel panel-default">
138
- <div class="panel-heading">
139
- <a class="accordion-toggle" data-toggle="collapse-next">
140
- <%%= t(:more_options, :default => "More options...") %>
141
- </a>
142
- </div>
143
- <div class="panel-collapse collapse">
144
- <div class="panel-body">
145
- <%= render_partial 'app/views/partials/_index_search_default_fields.html.erb' %>
133
+ <%%= search_form_for @q, :url => <%= namespace_for_route + 'search_' + model_pluralize + '_path' %>, :html => { :class => "card bg-light mb-3 search-and-filter" }, :method => :post do |f| %>
134
+ <div class="card-header"><%%= t("search_and_filter", :default => "Search & filter") %></div>
135
+ <div class="card-body">
136
+ <div class="card-text">
137
+ <%= render_partial 'app/views/partials/_index_search.html.erb' %>
138
+ <!-- Beautiful_scaffold - AddField - Search - Do not remove -->
139
+ <div class="panel-group">
140
+ <div class="panel panel-default">
141
+ <div class="panel-heading">
142
+ <a class="badge badge-light accordion-toggle" data-toggle="collapse-next">
143
+ <%%= t(:more_options, :default => "More options...") %>
144
+ </a>
145
+ </div>
146
+ <div class="panel-collapse collapse">
147
+ <div class="panel-body">
148
+ <%= render_partial 'app/views/partials/_index_search_default_fields.html.erb' %>
149
+ </div>
150
+ </div>
146
151
  </div>
147
152
  </div>
153
+ <%%= f.submit t(:filter, :default => "Filter"), :class => "btn btn-primary btn-sm btn-block" %>
154
+ <%%= link_to t(:cancel, :default => "Cancel"), <%= namespace_for_route %><%= model_pluralize %>_path(:nosearch => "ok"), :class => "btn btn-light btn-sm btn-block" %>
148
155
  </div>
149
156
  </div>
150
-
151
-
152
- <%%= f.submit t(:filter, :default => "Filter"), :class => "btn btn-primary" %>
153
- <%%= link_to t(:cancel, :default => "Cancel"), <%= namespace_for_route %><%= model_pluralize %>_path(:nosearch => "ok"), :class => "btn btn-default" %>
154
157
  <%% end %>
155
158
  </div>
156
159
  </div>
160
+ </div>