weeler 0.0.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"