weeler 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +1 -1
  4. data/.travis.yml +7 -2
  5. data/CHANGELOG.md +149 -1
  6. data/LICENSE.txt +2 -2
  7. data/README.md +83 -1
  8. data/app/.DS_Store +0 -0
  9. data/app/assets/javascripts/weeler/init.js.coffee +13 -2
  10. data/app/assets/javascripts/weeler/lib/notify.js +18 -0
  11. data/app/assets/javascripts/weeler/lib/sortable.js +9 -0
  12. data/app/assets/stylesheets/weeler/init.css.erb +2 -1
  13. data/app/assets/stylesheets/weeler/style.css.scss +22 -0
  14. data/app/controllers/concerns/weeler/section_seo.rb +16 -0
  15. data/app/controllers/weeler/administration_controller.rb +11 -0
  16. data/app/controllers/weeler/application_controller.rb +5 -0
  17. data/app/controllers/weeler/base_controller.rb +16 -12
  18. data/app/controllers/weeler/configuration_controller.rb +9 -0
  19. data/app/controllers/weeler/content_controller.rb +12 -0
  20. data/app/controllers/weeler/home_controller.rb +5 -2
  21. data/app/controllers/weeler/seo_items_controller.rb +24 -0
  22. data/app/controllers/weeler/settings_controller.rb +21 -0
  23. data/app/controllers/weeler/static_sections_controller.rb +19 -0
  24. data/app/controllers/weeler/translations_controller.rb +36 -18
  25. data/app/models/concerns/weeler/seoable.rb +61 -0
  26. data/app/models/concerns/weeler/sluger.rb +32 -0
  27. data/app/models/settings.rb +2 -0
  28. data/app/models/weeler/seo.rb +9 -0
  29. data/app/views/kaminari/{_first_page.html.erb → weeler/_first_page.html.erb} +1 -1
  30. data/app/views/kaminari/{_gap.html.erb → weeler/_gap.html.erb} +1 -1
  31. data/app/views/kaminari/{_last_page.html.erb → weeler/_last_page.html.erb} +1 -1
  32. data/app/views/kaminari/{_next_page.html.erb → weeler/_next_page.html.erb} +1 -1
  33. data/app/views/kaminari/{_page.html.erb → weeler/_page.html.erb} +0 -0
  34. data/app/views/kaminari/{_paginator.html.erb → weeler/_paginator.html.erb} +1 -1
  35. data/app/views/kaminari/{_prev_page.html.erb → weeler/_prev_page.html.erb} +1 -1
  36. data/app/views/layouts/weeler/base.html.haml +22 -0
  37. data/{lib/generators/weeler/templates/views/weeler/example/index.html.erb → app/views/weeler/administration/_filter.html.haml} +0 -0
  38. data/app/views/weeler/administration/_header_row.html.haml +5 -0
  39. data/app/views/weeler/administration/_row.html.haml +5 -0
  40. data/app/views/weeler/administration/_side_navbar.html.haml +8 -0
  41. data/app/views/weeler/administration/index.html.haml +17 -0
  42. data/app/views/weeler/administration/welcome.html.haml +5 -0
  43. data/app/views/weeler/base/_flash.html.haml +3 -0
  44. data/app/views/weeler/base/_footer.html.haml +2 -0
  45. data/app/views/weeler/base/_header_navbar.html.haml +19 -0
  46. data/app/views/weeler/base/_side_navbar.html.haml +2 -0
  47. data/app/views/weeler/configuration/_side_navbar.html.haml +12 -0
  48. data/app/views/weeler/configuration/index.html.haml +3 -0
  49. data/app/views/weeler/content/_error_messages.html.haml +5 -0
  50. data/app/views/weeler/content/_form.html.haml +6 -0
  51. data/app/views/weeler/content/_list.html.haml +23 -0
  52. data/app/views/weeler/content/_object_seo.html.haml +31 -0
  53. data/app/views/weeler/content/_side_navbar.html.haml +17 -0
  54. data/app/views/weeler/content/_sortable_list.html.haml +24 -0
  55. data/app/views/weeler/content/edit.html.haml +2 -0
  56. data/app/views/weeler/content/index.html.haml +10 -0
  57. data/app/views/weeler/content/new.html.haml +2 -0
  58. data/app/views/weeler/content/welcome.html.haml +3 -0
  59. data/app/views/weeler/home/_side_navbar.html.haml +8 -0
  60. data/app/views/weeler/home/about.html.haml +15 -0
  61. data/app/views/weeler/home/index.html.haml +3 -0
  62. data/app/views/weeler/seo_items/edit.html.haml +28 -0
  63. data/app/views/weeler/seo_items/index.html.haml +15 -0
  64. data/app/views/weeler/settings/index.html.haml +19 -0
  65. data/app/views/weeler/static_sections/show.html.haml +26 -0
  66. data/app/views/weeler/translations/_form.html.haml +27 -0
  67. data/app/views/weeler/translations/_translation.html.haml +11 -0
  68. data/app/views/weeler/translations/edit.html.haml +14 -0
  69. data/app/views/weeler/translations/index.html.haml +76 -0
  70. data/app/views/weeler/translations/new.html.haml +13 -0
  71. data/lib/.DS_Store +0 -0
  72. data/lib/generators/weeler/.DS_Store +0 -0
  73. data/lib/generators/weeler/install_generator.rb +30 -26
  74. data/lib/generators/weeler/templates/assets/javascripts/weeler/app/index.js +2 -0
  75. data/lib/generators/weeler/templates/assets/stylesheets/weeler/app/index.css +4 -0
  76. data/lib/generators/weeler/templates/controllers/weeler/application_controller.rb +6 -0
  77. data/lib/generators/weeler/templates/initializers/weeler.rb +30 -2
  78. data/lib/generators/weeler/templates/migrations/create_weeler_seos.rb +14 -0
  79. data/lib/generators/weeler/templates/migrations/create_weeler_settings.rb +17 -0
  80. data/lib/generators/weeler/templates/migrations/translate_weeler_seos.rb +15 -0
  81. data/lib/generators/weeler/templates/views/weeler/.keep +0 -0
  82. data/lib/i18n/backend/weeler.rb +102 -22
  83. data/lib/i18n/backend/weeler/dedupe.rb +31 -0
  84. data/lib/i18n/backend/weeler/exporter.rb +67 -5
  85. data/lib/i18n/backend/weeler/html_checker.rb +41 -0
  86. data/lib/i18n/backend/weeler/importer.rb +30 -13
  87. data/lib/i18n/backend/weeler/translation.rb +12 -7
  88. data/lib/i18n/humanize_missing_translations.rb +1 -0
  89. data/lib/i18n/weeler.rb +8 -2
  90. data/lib/tasks/weeler.rake +8 -0
  91. data/lib/weeler.rb +80 -7
  92. data/lib/weeler/.DS_Store +0 -0
  93. data/lib/weeler/action_controller/acts/restful.rb +185 -0
  94. data/lib/weeler/action_dispatch/routing/mapper.rb +87 -0
  95. data/lib/weeler/action_view/helpers/form_helper.rb +13 -0
  96. data/lib/weeler/action_view/helpers/image_form_helper.rb +84 -0
  97. data/lib/weeler/action_view/helpers/translation_helper.rb +15 -0
  98. data/lib/weeler/deprecator.rb +9 -0
  99. data/lib/weeler/engine.rb +18 -4
  100. data/lib/weeler/version.rb +7 -1
  101. data/rspec.html +426 -147
  102. data/spec/.DS_Store +0 -0
  103. data/spec/controllers/translations_controller_spec.rb +76 -5
  104. data/spec/dummy/app/controllers/weeler/posts_controller.rb +3 -7
  105. data/spec/dummy/app/models/post.rb +17 -0
  106. data/spec/dummy/app/models/translation.rb +2 -0
  107. data/spec/dummy/config/locales/en.yml +4 -1
  108. data/spec/dummy/config/routes.rb +3 -3
  109. data/spec/dummy/db/development.sqlite3 +0 -0
  110. data/spec/dummy/db/migrate/20140123083704_create_weeler_seos.rb +14 -0
  111. data/spec/dummy/db/migrate/20140123083705_create_weeler_settings.rb +17 -0
  112. data/spec/dummy/db/migrate/{20131015144900_create_weeler_translations.rb → 20140123083706_create_weeler_translations.rb} +0 -0
  113. data/spec/dummy/db/migrate/20140123083707_translate_weeler_seos.rb +15 -0
  114. data/spec/dummy/db/migrate/20140718103237_create_posts.rb +12 -0
  115. data/spec/dummy/db/migrate/20140726151210_create_translations.rb +12 -0
  116. data/spec/dummy/db/schema.rb +59 -1
  117. data/spec/dummy/db/test.sqlite3 +0 -0
  118. data/spec/dummy/log/development.log +221 -0
  119. data/spec/factories/dummy_posts.rb +6 -0
  120. data/spec/fixtures/.DS_Store +0 -0
  121. data/spec/routing/routes_spec.rb +4 -4
  122. data/spec/spec_helper.rb +14 -3
  123. data/spec/weeler/action_controller/acts/restful_spec.rb +155 -0
  124. data/spec/weeler/action_view/helpers/form_helper_spec.rb +26 -0
  125. data/spec/weeler/action_view/helpers/translation_helper_spec.rb +16 -0
  126. data/spec/weeler/i18n/backend/weeler/dedupe_spec.rb +21 -0
  127. data/spec/weeler/i18n/backend/weeler/exporter_spec.rb +2 -4
  128. data/spec/weeler/i18n/backend/weeler/importer_spec.rb +5 -2
  129. data/spec/weeler/i18n/backend/weeler_spec.rb +121 -23
  130. data/weeler.gemspec +15 -7
  131. metadata +207 -85
  132. data/.DS_Store +0 -0
  133. data/app/assets/stylesheets/weeler/vendor/bootstrap.css +0 -6086
  134. data/app/views/layouts/weeler/base.html.erb +0 -40
  135. data/app/views/weeler/home/about.html.erb +0 -16
  136. data/app/views/weeler/home/index.html.erb +0 -4
  137. data/app/views/weeler/shared/_flash.html.erb +0 -17
  138. data/app/views/weeler/shared/_footer.html.erb +0 -3
  139. data/app/views/weeler/shared/_header_navbar.html.erb +0 -18
  140. data/app/views/weeler/shared/_side_navbar.html.erb +0 -14
  141. data/app/views/weeler/translations/_form.html.erb +0 -43
  142. data/app/views/weeler/translations/_translation.html.erb +0 -11
  143. data/app/views/weeler/translations/edit.html.erb +0 -19
  144. data/app/views/weeler/translations/index.html.erb +0 -103
  145. data/app/views/weeler/translations/new.html.erb +0 -19
  146. data/lib/generators/weeler/templates/controllers/weeler/example_controller.rb.example +0 -7
  147. data/lib/i18n/backend/weeler/exporter/active_record.rb +0 -37
  148. data/lib/i18n/backend/weeler/exporter/active_record_relation.rb +0 -38
  149. data/lib/i18n/backend/weeler/store_procs.rb +0 -39
  150. data/lib/weeler/route_mapper.rb +0 -41
  151. data/spec/dummy/db/production.sqlite3 +0 -0
  152. data/spec/dummy/log/test.log +0 -88454
@@ -0,0 +1,9 @@
1
+ module Weeler
2
+ class ConfigurationController < BaseController
3
+ def index; end
4
+ private
5
+ def set_current_menu_item
6
+ @current_menu_item = "configuration"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module Weeler
2
+ class ContentController < BaseController
3
+ def index
4
+ render :welcome
5
+ end
6
+
7
+ protected
8
+ def set_current_menu_item
9
+ @current_menu_item = "content"
10
+ end
11
+ end
12
+ end
@@ -1,8 +1,11 @@
1
1
  module Weeler
2
2
  class HomeController < BaseController
3
3
  def index; end
4
- def about
5
- @current_menu_item = "about"
4
+ def about; end
5
+
6
+ private
7
+ def set_current_menu_item
8
+ @current_menu_item = "home"
6
9
  end
7
10
  end
8
11
  end
@@ -0,0 +1,24 @@
1
+ module Weeler
2
+ class SeoItemsController < ConfigurationController
3
+
4
+ def index
5
+ @translations_in_seo = I18n::Backend::Weeler::Translation.select("key").where("key LIKE ?", "seo.%").order("key")
6
+ @groups = @translations_in_seo.map{ |t| t.key.split(".")[1...-1].join('_') }.uniq{ |t| t}
7
+ end
8
+
9
+ def edit
10
+ @section = params[:id].gsub('_', '.')
11
+ end
12
+
13
+ def update
14
+ params[:translations].each do |translation|
15
+ id, value = translation.first, translation.last
16
+ translation = I18n::Backend::Weeler::Translation.find(id)
17
+ translation.value = value
18
+ translation.save
19
+ end
20
+ Settings.i18n_updated_at = Time.now
21
+ redirect_to({action: :edit, id: params[:id]}, {flash: {success: "Section updated."}})
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ class Weeler::SettingsController < Weeler::ConfigurationController
2
+ def index
3
+ # to get all items for render list
4
+ @settings = Settings.unscoped
5
+ end
6
+
7
+ def update
8
+ @setting = Settings.unscoped.find(params[:id])
9
+ if @setting.update_attributes(setting_params)
10
+ redirect_to weeler_settings_path, flash: {success: "Setting updated."}
11
+ else
12
+ flash.now[:error] = "Errors in updating."
13
+ render :index
14
+ end
15
+ end
16
+ protected
17
+ def setting_params
18
+ params.require(:settings).permit([:value])
19
+ end
20
+
21
+ end
@@ -0,0 +1,19 @@
1
+ module Weeler
2
+ class StaticSectionsController < ContentController
3
+ def show
4
+ @section = params[:id]
5
+ @items = Weeler.static_sections[@section.to_sym]
6
+ end
7
+
8
+ def update
9
+ params[:translations].each do |translation|
10
+ id, value = translation.first, translation.last
11
+ translation = I18n::Backend::Weeler::Translation.find(id)
12
+ translation.value = value
13
+ translation.save
14
+ end
15
+ Settings.i18n_updated_at = Time.now
16
+ redirect_to({action: :show, id: params[:id]}, {flash: {success: "Section updated."}})
17
+ end
18
+ end
19
+ end
@@ -1,12 +1,12 @@
1
1
  module Weeler
2
- class TranslationsController < BaseController
3
-
2
+ class TranslationsController < ConfigurationController
3
+
4
4
  def index
5
5
  @translations = translations_by_params
6
6
  @translations = @translations.page(params[:page]).per(20)
7
7
  @groups = I18n::Backend::Weeler::Translation.groups
8
8
  end
9
-
9
+
10
10
  def new
11
11
  @translation = I18n::Backend::Weeler::Translation.new
12
12
  end
@@ -18,9 +18,8 @@ module Weeler
18
18
  def create
19
19
  @translation = I18n::Backend::Weeler::Translation.new(translation_params)
20
20
 
21
-
22
-
23
21
  if @translation.save
22
+ Settings.i18n_updated_at = Time.now
24
23
  redirect_to edit_weeler_translation_path(@translation), flash: {success: "Translation saved."}
25
24
  else
26
25
  flash.now[:error] = "Errors in saving."
@@ -30,7 +29,10 @@ module Weeler
30
29
 
31
30
  def update
32
31
  @translation = I18n::Backend::Weeler::Translation.find(params[:id])
32
+
33
33
  if @translation.update_attributes(translation_params)
34
+ Settings.i18n_updated_at = Time.now
35
+
34
36
  redirect_to edit_weeler_translation_path(@translation), flash: {success: "Translation updated."}
35
37
  else
36
38
  flash.now[:error] = "Errors in updating."
@@ -41,6 +43,9 @@ module Weeler
41
43
  def destroy
42
44
  @translation = I18n::Backend::Weeler::Translation.find(params[:id])
43
45
  @translation.destroy
46
+
47
+ Settings.i18n_updated_at = Time.now
48
+
44
49
  redirect_to weeler_translations_path, flash: {success: "Translation succesfully removed."}
45
50
  end
46
51
 
@@ -55,24 +60,37 @@ module Weeler
55
60
  end
56
61
 
57
62
  def import
58
- I18n::Backend::Weeler::Translation.import params[:file].tempfile.path
59
- redirect_to weeler_translations_path, flash: {success: "Translations succesfully imported."}
60
- end
63
+ if params[:file].present?
64
+ I18n::Backend::Weeler::Translation.import params[:file]
61
65
 
62
- private
66
+ Settings.i18n_updated_at = Time.now
63
67
 
64
- def translation_params
65
- params.require(:i18n_backend_weeler_translation).permit([:locale, :key, :value, :is_proc, :interpolations => []])
68
+ redirect_to weeler_translations_path, flash: {success: "Translations succesfully imported."}
69
+ else
70
+ redirect_to weeler_translations_path, flash: {success: "No file choosen"}
66
71
  end
72
+ end
73
+
74
+ private
75
+
76
+ def translation_params
77
+ params.require(:i18n_backend_weeler_translation).permit([:locale, :key, :value, :is_proc, :interpolations => []])
78
+ end
79
+
80
+ def translations_by_params
81
+ translations = I18n::Backend::Weeler::Translation.order("locale, key")
67
82
 
68
- def translations_by_params
69
- translations = I18n::Backend::Weeler::Translation.order("locale, key")
83
+ translations = translations.where(locale: I18n.available_locales)
70
84
 
71
- translations = translations.where("key LIKE ?", "%#{params[:query]}%") if params[:query]
72
- translations = translations.where(locale: params[:locale]) if params[:locale].present?
73
- translations = translations.lookup(params[:group]) if params[:group].present?
74
- translations
85
+ ::Weeler.excluded_i18n_groups.each do |key|
86
+ translations = translations.except_key(key)
75
87
  end
76
88
 
89
+ translations = translations.where("key ILIKE ? OR value ILIKE ?", "%#{params[:query]}%", "%#{params[:query]}%") if params[:query]
90
+ translations = translations.where(locale: params[:filtered_locale]) if params[:filtered_locale].present?
91
+ translations = translations.lookup(params[:group]) if params[:group].present?
92
+ translations
93
+ end
94
+
77
95
  end
78
- end
96
+ end
@@ -0,0 +1,61 @@
1
+ module Weeler
2
+ module Seoable
3
+ extend ActiveSupport::Concern
4
+ include ::ActionView::Helpers::TextHelper
5
+
6
+ included do
7
+ # Set relations
8
+ has_one :seo, as: :seoable, dependent: :destroy, class_name: "Weeler::Seo"
9
+ accepts_nested_attributes_for :seo, reject_if: :all_blank, allow_destroy: true
10
+
11
+ # Callbacks
12
+ after_save :generate_seo
13
+
14
+ @@force_seoable = true
15
+ end
16
+
17
+ # Generate seo data in each avaivable locale
18
+ #
19
+ def generate_seo
20
+ self.seo = Weeler::Seo.create if self.seo.blank?
21
+
22
+ I18n.available_locales.each do |locale|
23
+ Globalize.with_locale(locale) do
24
+
25
+ if self.respond_to? :seo_title
26
+ self.seo.title = prepare_seoabled_text(seo_title) if (self.seo.title.blank? || @@force_seoable)
27
+ else
28
+ self.seo.title = seo_attribute :title
29
+ end
30
+
31
+ if self.respond_to? :seo_description
32
+ self.seo.description = prepare_seoabled_text(seo_description, length: 159) if (self.seo.description.blank? || @@force_seoable)
33
+ else
34
+ self.seo.description = seo_attribute :content, length: 159
35
+ end
36
+
37
+ if self.respond_to? :seo_keywords
38
+ self.seo.keywords = prepare_seoabled_text(seo_keywords, length: 200) if (self.seo.keywords.blank? || @@force_seoable)
39
+ end
40
+
41
+ self.seo.save
42
+ end
43
+ end
44
+ end
45
+
46
+ # Prepeare attribute
47
+ #
48
+ def seo_attribute attribute, length: 80
49
+ if self.has_attribute?(attribute) && self[attribute].present? && (self.seo.title.blank? || @@force_seoable)
50
+ prepare_seoabled_text self[attribute], length: length
51
+ end
52
+ end
53
+
54
+ # Strip, sanitize and truncate text in Rails way
55
+ #
56
+ def prepare_seoabled_text text, length: 80
57
+ truncate(ActionView::Base.full_sanitizer.sanitize(text).strip, omission: '', length: length)
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,32 @@
1
+ module Weeler
2
+ module Sluger
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ after_save :set_slug
7
+ @@sluger_param = :title
8
+ end
9
+
10
+ def set_slug
11
+ I18n.available_locales.each do |locale|
12
+ Globalize.with_locale(locale) do
13
+ if self.slug != generate_slug
14
+ self.slug = generate_slug
15
+ self.save!
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ def generate_slug
22
+ transliterated = "-#{I18n.transliterate(self[@@sluger_param]).parameterize}" if self[@@sluger_param].present?
23
+ transliterated = "" if transliterated.blank?
24
+ "#{self.id}#{transliterated}"
25
+ end
26
+
27
+ def to_param
28
+ slug
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ class Settings < RailsSettings::CachedSettings
2
+ end
@@ -0,0 +1,9 @@
1
+ module Weeler
2
+ class Seo < ActiveRecord::Base
3
+ self.table_name = "weeler_seos"
4
+ translates :title, :description, :keywords
5
+
6
+ belongs_to :seoable, polymorphic: true
7
+ accepts_nested_attributes_for :translations
8
+ end
9
+ end
@@ -8,6 +8,6 @@
8
8
  -%>
9
9
  <% unless current_page.first? -%>
10
10
  <li class="first">
11
- <%= link_to raw(t 'views.pagination.first'), url, {:remote => remote} %>
11
+ <%= link_to "<<", url, {:remote => remote} %>
12
12
  </li>
13
13
  <% end -%>
@@ -5,4 +5,4 @@
5
5
  per_page: number of items to fetch per page
6
6
  remote: data-remote
7
7
  -%>
8
- <li class="page gap disabled"><a href="javascript:void(0)"><%= raw(t 'views.pagination.truncate') %></a></li>
8
+ <li class="page gap disabled"><a href="javascript:void(0)">...</a></li>
@@ -8,6 +8,6 @@
8
8
  -%>
9
9
  <% unless current_page.last? -%>
10
10
  <li class="last">
11
- <%= link_to raw(t 'views.pagination.last'), url, {:remote => remote} %>
11
+ <%= link_to ">>", url, {:remote => remote} %>
12
12
  </li>
13
13
  <% end -%>
@@ -9,6 +9,6 @@
9
9
 
10
10
  <% unless current_page.last? -%>
11
11
  <li class="next">
12
- <%= link_to raw(t 'views.pagination.next'), url, :remote => remote, :rel => 'next' %>
12
+ <%= link_to ">", url, :remote => remote, :rel => 'next' %>
13
13
  </li>
14
14
  <% end -%>
@@ -7,7 +7,7 @@
7
7
  paginator: the paginator that renders the pagination tags inside
8
8
  -%>
9
9
  <%= paginator.render do -%>
10
- <ul class="pagination pagination-lg pull-right">
10
+ <ul class="pagination pagination-lg col-lg-12 col-md-12">
11
11
  <%= first_page_tag unless current_page.first? %>
12
12
  <%= prev_page_tag unless current_page.first? %>
13
13
  <% each_page do |page| -%>
@@ -8,6 +8,6 @@
8
8
  -%>
9
9
  <% unless current_page.first? -%>
10
10
  <li class="prev">
11
- <%= link_to raw(t 'views.pagination.previous'), url, :remote => remote, :rel => 'prev' %>
11
+ <%= link_to "<", url, :remote => remote, :rel => 'prev' %>
12
12
  </li>
13
13
  <% end -%>
@@ -0,0 +1,22 @@
1
+ !!! 5
2
+ %html
3
+ %head
4
+ %title
5
+ = Weeler
6
+ %meta{charset:"utf-8"}
7
+ %meta{name:"viewport", content:"width=device-width, initial-scale=1, maximum-scale=1"}
8
+ = stylesheet_link_tag "weeler/init", :media => "all"
9
+ = javascript_include_tag "weeler/init"
10
+ = csrf_meta_tags
11
+ = yield :weeler_header
12
+
13
+ %body{data: {controller: controller_name, action: action_name, name_space: 'weeler', tag: "#{yield :weeler_body_tag}" }}
14
+ = render "header_navbar"
15
+ .container
16
+ .row.row-offcanvas.row-offcanvas-right
17
+ = render "side_navbar"
18
+ .col-xs-12.col-sm-9
19
+ = yield
20
+ %hr
21
+ = render "footer"
22
+ = render "flash"
@@ -0,0 +1,5 @@
1
+ %tr
2
+ %th
3
+ = "Object"
4
+ %th
5
+ = "Created at"
@@ -0,0 +1,5 @@
1
+ %tr
2
+ %td
3
+ = link_to item.to_s, action: :show, id: item.id
4
+ %td
5
+ = item.created_at.strftime("%d.%m.%Y. %H:%M")
@@ -0,0 +1,8 @@
1
+ .col-xs-6.col-sm-3.sidebar-offcanvas#sidebar{role:"navigation"}
2
+ .well.sidebar-nav
3
+ %ul.nav
4
+ %li Administration
5
+ - Weeler.administration_menu_items.each do |item|
6
+ %li
7
+ = link_to item[:name].humanize, "/#{Weeler.mount_location_namespace}/#{item[:weeler_path]}/"
8
+
@@ -0,0 +1,17 @@
1
+ %h1
2
+ All #{@items.klass.to_s.underscore.humanize.downcase} items
3
+
4
+ = link_to "Add new #{@items.klass.to_s.underscore.humanize.downcase}", {action: :new}
5
+
6
+ = render 'filter', items: @items
7
+ .row
8
+ %table.table{data: {provides: "rowlink"}}
9
+ %thead
10
+ = render "header_row", items: @items
11
+ %tbody
12
+ - @items.each do |item|
13
+ = render "row", item: item
14
+
15
+ - if @paginate.present? && @paginate > 0
16
+ .row
17
+ = paginate @items, params: { action: "index" }, theme: "weeler"