weeler 0.0.1 → 0.0.2

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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/README.md +4 -0
  4. data/app/.DS_Store +0 -0
  5. data/app/assets/.DS_Store +0 -0
  6. data/app/assets/javascripts/.DS_Store +0 -0
  7. data/app/assets/javascripts/weeler.js.coffee +8 -0
  8. data/app/assets/javascripts/weeler/.DS_Store +0 -0
  9. data/app/assets/javascripts/weeler/bootstrap-fileupload.js +169 -0
  10. data/app/assets/javascripts/weeler/bootstrap.js +1992 -0
  11. data/app/assets/javascripts/weeler/bootstrap.rowlink.js +71 -0
  12. data/app/assets/javascripts/weeler/bootstrap.switch.js +382 -0
  13. data/app/assets/javascripts/weeler/jquery.pnotify.js +912 -0
  14. data/app/assets/stylesheets/.DS_Store +0 -0
  15. data/app/assets/stylesheets/weeler.css +9 -0
  16. data/app/assets/stylesheets/weeler/.DS_Store +0 -0
  17. data/app/assets/stylesheets/weeler/bootstrap-fileupload.css +132 -0
  18. data/app/assets/stylesheets/weeler/bootstrap.css +6086 -0
  19. data/app/assets/stylesheets/weeler/bootstrap.min.css +9 -0
  20. data/app/assets/stylesheets/weeler/bootstrap.rowlink.css +50 -0
  21. data/app/assets/stylesheets/weeler/bootstrap.spinner.css +43 -0
  22. data/app/assets/stylesheets/weeler/bootstrap.switch.css +408 -0
  23. data/app/assets/stylesheets/weeler/jquery.pnotify.css +84 -0
  24. data/app/assets/stylesheets/weeler/style.css.scss.erb +48 -0
  25. data/app/controllers/weeler/base_controller.rb +16 -0
  26. data/app/controllers/weeler/home_controller.rb +8 -0
  27. data/app/controllers/weeler/translations_controller.rb +151 -0
  28. data/app/views/kaminari/_first_page.html.erb +13 -0
  29. data/app/views/kaminari/_gap.html.erb +8 -0
  30. data/app/views/kaminari/_last_page.html.erb +13 -0
  31. data/app/views/kaminari/_next_page.html.erb +14 -0
  32. data/app/views/kaminari/_page.html.erb +12 -0
  33. data/app/views/kaminari/_paginator.html.erb +23 -0
  34. data/app/views/kaminari/_prev_page.html.erb +13 -0
  35. data/app/views/layouts/weeler/base.html.erb +86 -0
  36. data/app/views/weeler/home/about.html.erb +16 -0
  37. data/app/views/weeler/home/index.html.erb +4 -0
  38. data/app/views/weeler/translations/_form.html.erb +43 -0
  39. data/app/views/weeler/translations/_translation.html.erb +11 -0
  40. data/app/views/weeler/translations/edit.html.erb +19 -0
  41. data/app/views/weeler/translations/index.html.erb +106 -0
  42. data/app/views/weeler/translations/new.html.erb +19 -0
  43. data/config/initializers/weeler_mime_types.rb +1 -0
  44. data/lib/.DS_Store +0 -0
  45. data/lib/generators/weeler/.DS_Store +0 -0
  46. data/lib/generators/weeler/install_generator.rb +73 -0
  47. data/lib/generators/weeler/templates/initializers/weeler.rb +7 -0
  48. data/lib/generators/weeler/templates/migrations/create_weeler_translations.rb +16 -0
  49. data/lib/i18n/.DS_Store +0 -0
  50. data/lib/i18n/backend/.DS_Store +0 -0
  51. data/lib/i18n/backend/weeler.rb +76 -0
  52. data/lib/i18n/backend/weeler/store_procs.rb +39 -0
  53. data/lib/i18n/backend/weeler/translation.rb +118 -0
  54. data/lib/i18n/humanize_missing_translations.rb +11 -0
  55. data/lib/i18n/weeler.rb +6 -0
  56. data/lib/weeler.rb +25 -1
  57. data/lib/weeler/.DS_Store +0 -0
  58. data/lib/weeler/engine.rb +11 -0
  59. data/lib/weeler/route_mapper.rb +41 -0
  60. data/lib/weeler/version.rb +1 -1
  61. data/rspec.html +454 -0
  62. data/spec/.DS_Store +0 -0
  63. data/spec/controllers/translations_controller_spec.rb +41 -0
  64. data/spec/dummy/README.rdoc +28 -0
  65. data/spec/dummy/Rakefile +6 -0
  66. data/spec/dummy/app/assets/images/.keep +0 -0
  67. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  68. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  69. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  70. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  71. data/spec/dummy/app/controllers/weeler/posts_controller.rb +7 -0
  72. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  73. data/spec/dummy/app/mailers/.keep +0 -0
  74. data/spec/dummy/app/models/.keep +0 -0
  75. data/spec/dummy/app/models/concerns/.keep +0 -0
  76. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  77. data/spec/dummy/bin/bundle +3 -0
  78. data/spec/dummy/bin/rails +4 -0
  79. data/spec/dummy/bin/rake +4 -0
  80. data/spec/dummy/config.ru +4 -0
  81. data/spec/dummy/config/application.rb +23 -0
  82. data/spec/dummy/config/boot.rb +5 -0
  83. data/spec/dummy/config/database.yml +25 -0
  84. data/spec/dummy/config/environment.rb +5 -0
  85. data/spec/dummy/config/environments/development.rb +29 -0
  86. data/spec/dummy/config/environments/production.rb +80 -0
  87. data/spec/dummy/config/environments/test.rb +36 -0
  88. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  89. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  90. data/spec/dummy/config/initializers/inflections.rb +16 -0
  91. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  92. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  93. data/spec/dummy/config/initializers/session_store.rb +3 -0
  94. data/spec/dummy/config/initializers/weeler.rb +2 -0
  95. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  96. data/spec/dummy/config/locales/en.yml +23 -0
  97. data/spec/dummy/config/routes.rb +5 -0
  98. data/spec/dummy/db/development.sqlite3 +0 -0
  99. data/spec/dummy/db/migrate/20131015144900_create_weeler_translations.rb +16 -0
  100. data/spec/dummy/db/production.sqlite3 +0 -0
  101. data/spec/dummy/db/schema.rb +29 -0
  102. data/spec/dummy/db/test.sqlite3 +0 -0
  103. data/spec/dummy/lib/assets/.keep +0 -0
  104. data/spec/dummy/log/.keep +0 -0
  105. data/spec/dummy/log/development.log +19 -0
  106. data/spec/dummy/log/production.log +4 -0
  107. data/spec/dummy/log/test.log +38396 -0
  108. data/spec/dummy/public/404.html +58 -0
  109. data/spec/dummy/public/422.html +58 -0
  110. data/spec/dummy/public/500.html +57 -0
  111. data/spec/dummy/public/favicon.ico +0 -0
  112. data/spec/factories/translations.rb +7 -0
  113. data/spec/routing/routes_spec.rb +140 -0
  114. data/spec/spec_helper.rb +54 -0
  115. data/spec/weeler/.DS_Store +0 -0
  116. data/spec/weeler/i18n_backend_weeler_spec.rb +169 -0
  117. data/spec/weeler/i18n_humanize_missing_translations_spec.rb +18 -0
  118. data/weeler.gemspec +14 -0
  119. metadata +354 -3
@@ -0,0 +1,84 @@
1
+ /*
2
+ Document : jquery.pnotify.default.css
3
+ Created on : Nov 23, 2009, 3:14:10 PM
4
+ Author : Hunter Perrin
5
+ Version : 1.2.0
6
+ Link : http://pinesframework.org/pnotify/
7
+ Description:
8
+ Default styling for Pines Notify jQuery plugin.
9
+ */
10
+ /* -- Notice */
11
+ .ui-pnotify {
12
+ bottom: 25px;
13
+ right: 25px;
14
+ position: absolute;
15
+ height: auto;
16
+ /* Ensures notices are above everything */
17
+ z-index: 9999;
18
+ }
19
+ /* Hides position: fixed from IE6 */
20
+ html > body .ui-pnotify {
21
+ position: fixed;
22
+ }
23
+ .ui-pnotify .ui-pnotify-shadow {
24
+ -webkit-box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5);
25
+ -moz-box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5);
26
+ box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5);
27
+ }
28
+ .ui-pnotify-container {
29
+ background-position: 0 0;
30
+ padding: .8em;
31
+ height: 100%;
32
+ margin: 0;
33
+ }
34
+ .ui-pnotify-sharp {
35
+ -webkit-border-radius: 0;
36
+ -moz-border-radius: 0;
37
+ border-radius: 0;
38
+ }
39
+ .ui-pnotify-closer, .ui-pnotify-sticker {
40
+ float: right;
41
+ margin-left: .1em;
42
+ }
43
+ .ui-pnotify-title {
44
+ display: block;
45
+ margin-bottom: .1em;
46
+ text-transform: capitalize;
47
+ }
48
+ .ui-pnotify-text {
49
+ display: block;
50
+ }
51
+ .ui-pnotify-icon, .ui-pnotify-icon span {
52
+ display: block;
53
+ float: left;
54
+ margin-right: .1em;
55
+ }
56
+ /* -- History Pulldown */
57
+ .ui-pnotify-history-container {
58
+ position: absolute;
59
+ top: 0;
60
+ right: 18px;
61
+ width: 70px;
62
+ border-top: none;
63
+ padding: 0;
64
+ -webkit-border-top-left-radius: 0;
65
+ -moz-border-top-left-radius: 0;
66
+ border-top-left-radius: 0;
67
+ -webkit-border-top-right-radius: 0;
68
+ -moz-border-top-right-radius: 0;
69
+ border-top-right-radius: 0;
70
+ /* Ensures history container is above notices. */
71
+ z-index: 10000;
72
+ }
73
+ .ui-pnotify-history-container .ui-pnotify-history-header {
74
+ padding: 2px;
75
+ }
76
+ .ui-pnotify-history-container button {
77
+ cursor: pointer;
78
+ display: block;
79
+ width: 100%;
80
+ }
81
+ .ui-pnotify-history-container .ui-pnotify-history-pulldown {
82
+ display: block;
83
+ margin: 0 auto;
84
+ }
@@ -0,0 +1,48 @@
1
+ /*
2
+ * Style twaks
3
+ * --------------------------------------------------
4
+ */
5
+ body {
6
+ padding-top: 70px;
7
+ }
8
+ footer {
9
+ padding-left: 15px;
10
+ padding-right: 15px;
11
+ }
12
+
13
+ /*
14
+ * Off Canvas
15
+ * --------------------------------------------------
16
+ */
17
+ @media screen and (max-width: 768px) {
18
+ .row-offcanvas {
19
+ position: relative;
20
+ -webkit-transition: all 0.25s ease-out;
21
+ -moz-transition: all 0.25s ease-out;
22
+ transition: all 0.25s ease-out;
23
+ }
24
+
25
+ .row-offcanvas-right
26
+ .sidebar-offcanvas {
27
+ right: -50%; /* 6 columns */
28
+ }
29
+
30
+ .row-offcanvas-left
31
+ .sidebar-offcanvas {
32
+ left: -50%; /* 6 columns */
33
+ }
34
+
35
+ .row-offcanvas-right.active {
36
+ right: 50%; /* 6 columns */
37
+ }
38
+
39
+ .row-offcanvas-left.active {
40
+ left: 50%; /* 6 columns */
41
+ }
42
+
43
+ .sidebar-offcanvas {
44
+ position: absolute;
45
+ top: 0;
46
+ width: 50%; /* 6 columns */
47
+ }
48
+ }
@@ -0,0 +1,16 @@
1
+ module Weeler
2
+ class BaseController < ApplicationController
3
+ before_filter :set_current_menu_item
4
+ before_filter :run_weeler_required_user_method
5
+
6
+ private
7
+
8
+ def set_current_menu_item
9
+ @current_menu_item = "home"
10
+ end
11
+
12
+ def run_weeler_required_user_method
13
+ eval(Weeler.required_user_method.to_s) if Weeler.required_user_method.present?
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ module Weeler
2
+ class HomeController < BaseController
3
+ def index; end
4
+ def about
5
+ @current_menu_item = "about"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,151 @@
1
+ module Weeler
2
+ class TranslationsController < BaseController
3
+
4
+ def index
5
+ @translations = translations_by_params
6
+ @translations = @translations.page(params[:page]).per(20)
7
+ @groups = I18n::Backend::Weeler::Translation.groups
8
+ end
9
+
10
+ def new
11
+ @translation = I18n::Backend::Weeler::Translation.new
12
+ end
13
+
14
+ def edit
15
+ @translation = I18n::Backend::Weeler::Translation.find(params[:id])
16
+ end
17
+
18
+ def create
19
+ @translation = I18n::Backend::Weeler::Translation.new(translation_params)
20
+ if @translation.save
21
+ redirect_to edit_weeler_translation_path(@translation), flash: {success: "Translation saved."}
22
+ else
23
+ flash.now[:error] = "Errors in saving."
24
+ render :edit
25
+ end
26
+ end
27
+
28
+ def update
29
+ @translation = I18n::Backend::Weeler::Translation.find(params[:id])
30
+ if @translation.update_attributes(translation_params)
31
+ redirect_to edit_weeler_translation_path(@translation), flash: {success: "Translation updated."}
32
+ else
33
+ flash.now[:error] = "Errors in updating."
34
+ render :edit
35
+ end
36
+ end
37
+
38
+ def destroy
39
+ @translation = I18n::Backend::Weeler::Translation.find(params[:id])
40
+ @translation.destroy
41
+ redirect_to weeler_translations_path, flash: {success: "Translation succesfully removed."}
42
+ end
43
+
44
+ def export
45
+ require( 'axlsx' )
46
+
47
+ # construct xlsx file
48
+ p = Axlsx::Package.new
49
+ # Numbers requires this
50
+ p.use_shared_strings = true
51
+
52
+ sheet = p.workbook.add_worksheet(name: "translations")
53
+
54
+ # All used locales and translations by params
55
+ locales = I18n::Backend::Weeler::Translation.available_locales
56
+ locales = locales.select{ |l| l.present? }
57
+ @translations = translations_by_params
58
+
59
+ # title row
60
+ row = [ 'Key' ]
61
+ locales.each do |locale|
62
+ row.push(locale.capitalize)
63
+ end
64
+
65
+ sheet.add_row(row)
66
+
67
+ @translations.each do |translation|
68
+ row = [ translation.key ]
69
+ locales.each do |locale|
70
+ result = I18n::Backend::Weeler::Translation.locale(locale).lookup(translation.key).load
71
+ if result.first.present?
72
+ row.push(result.first.value)
73
+ else
74
+ row.push("")
75
+ end
76
+ end
77
+
78
+ sheet.add_row(row)
79
+ end
80
+
81
+ respond_to do |format|
82
+ format.xlsx do
83
+ outstrio = StringIO.new
84
+ outstrio.write(p.to_stream.read)
85
+ send_data(outstrio.string, filename: "translations" + '.xlsx')
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ def import
92
+ require "roo"
93
+ xls = Roo::Excelx.new(params[:file].tempfile.path, file_warning: :ignore)
94
+
95
+ xls.each_with_pagename do |name, sheet|
96
+
97
+ # Lookup locales
98
+ locales = []
99
+ sheet.row(1).each_with_index do |cell, i|
100
+ if i > 0
101
+ locales.push(cell.downcase)
102
+ end
103
+ end
104
+
105
+ # Lookup values
106
+ (2..sheet.last_row).each do |row_no|
107
+ locale = nil
108
+ key = nil
109
+ value = nil
110
+ sheet.row(row_no).each_with_index do |cell, i|
111
+ if i == 0
112
+ key = cell
113
+ else
114
+ locale = locales[ i - 1 ]
115
+ value = cell.nil? ? '' : cell
116
+
117
+ p "> Readed: #{locale}.#{key} = #{value} "
118
+ if locale.present? && key.present?
119
+ translation = I18n::Backend::Weeler::Translation.find_or_initialize_by locale: locale, key: key
120
+ if translation.value != value
121
+ translation.value = value
122
+ translation.save
123
+ end
124
+ end
125
+
126
+ end
127
+ end # cells
128
+
129
+ end # rows
130
+
131
+ end # sheets
132
+ redirect_to weeler_translations_path, flash: {success: "Translations succesfully imported."}
133
+ end
134
+
135
+ private
136
+
137
+ def translation_params
138
+ params.require(:i18n_backend_weeler_translation).permit([:locale, :key, :value, :is_proc, :interpolations => []])
139
+ end
140
+
141
+ def translations_by_params
142
+ translations = I18n::Backend::Weeler::Translation.order("locale, key")
143
+
144
+ translations = translations.where("key LIKE ?", "%#{params[:query]}%") if params[:query]
145
+ translations = translations.where(locale: params[:locale]) if params[:locale].present?
146
+ translations = translations.lookup(params[:group]) if params[:group].present?
147
+ translations
148
+ end
149
+
150
+ end
151
+ end
@@ -0,0 +1,13 @@
1
+ <%# Link to the "First" page
2
+ - available local variables
3
+ url: url to the first page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+ <% unless current_page.first? -%>
10
+ <li class="first">
11
+ <%= link_to raw(t 'views.pagination.first'), url, {:remote => remote} %>
12
+ </li>
13
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ <%# Non-link tag that stands for skipped pages...
2
+ - available local variables
3
+ current_page: a page object for the currently displayed page
4
+ total_pages: total number of pages
5
+ per_page: number of items to fetch per page
6
+ remote: data-remote
7
+ -%>
8
+ <li class="page gap disabled"><a href="javascript:void(0)"><%= raw(t 'views.pagination.truncate') %></a></li>
@@ -0,0 +1,13 @@
1
+ <%# Link to the "Last" page
2
+ - available local variables
3
+ url: url to the last page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+ <% unless current_page.last? -%>
10
+ <li class="last">
11
+ <%= link_to raw(t 'views.pagination.last'), url, {:remote => remote} %>
12
+ </li>
13
+ <% end -%>
@@ -0,0 +1,14 @@
1
+ <%# Link to the "Next" page
2
+ - available local variables
3
+ url: url to the next page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+
10
+ <% unless current_page.last? -%>
11
+ <li class="next">
12
+ <%= link_to raw(t 'views.pagination.next'), url, :remote => remote, :rel => 'next' %>
13
+ </li>
14
+ <% end -%>
@@ -0,0 +1,12 @@
1
+ <%# Link showing page number
2
+ - available local variables
3
+ page: a page object for "this" page
4
+ url: url to this page
5
+ current_page: a page object for the currently displayed page
6
+ total_pages: total number of pages
7
+ per_page: number of items to fetch per page
8
+ remote: data-remote
9
+ -%>
10
+ <li class="page<%= ' active' if page.current? %>">
11
+ <%= link_to page, (page.current? ? 'javascript:void(0)' : url), opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
12
+ </li>
@@ -0,0 +1,23 @@
1
+ <%# The container tag
2
+ - available local variables
3
+ current_page: a page object for the currently displayed page
4
+ total_pages: total number of pages
5
+ per_page: number of items to fetch per page
6
+ remote: data-remote
7
+ paginator: the paginator that renders the pagination tags inside
8
+ -%>
9
+ <%= paginator.render do -%>
10
+ <ul class="pagination pagination-lg pull-right">
11
+ <%= first_page_tag unless current_page.first? %>
12
+ <%= prev_page_tag unless current_page.first? %>
13
+ <% each_page do |page| -%>
14
+ <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
15
+ <%= page_tag page %>
16
+ <% elsif !page.was_truncated? -%>
17
+ <%= gap_tag %>
18
+ <% end -%>
19
+ <% end -%>
20
+ <%= next_page_tag unless current_page.last? %>
21
+ <%= last_page_tag unless current_page.last? %>
22
+ </ul>
23
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ <%# Link to the "Previous" page
2
+ - available local variables
3
+ url: url to the previous page
4
+ current_page: a page object for the currently displayed page
5
+ total_pages: total number of pages
6
+ per_page: number of items to fetch per page
7
+ remote: data-remote
8
+ -%>
9
+ <% unless current_page.first? -%>
10
+ <li class="prev">
11
+ <%= link_to raw(t 'views.pagination.previous'), url, :remote => remote, :rel => 'prev' %>
12
+ </li>
13
+ <% end -%>
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <title>Weeler</title>
6
+
7
+ <meta charset="utf-8">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
9
+
10
+ <%= stylesheet_link_tag "weeler", :media => "all" %>
11
+ <%= javascript_include_tag "weeler" %>
12
+
13
+ <%= csrf_meta_tags %>
14
+
15
+ <% flash.each do |name, message| %>
16
+ <script type="text/javascript">
17
+ $(function(){
18
+ $.pnotify({
19
+ type: '<%= name %>', // 'notice', 'info', 'success', 'error'
20
+ title: '<%= name %>',
21
+ text: '<%= message %>',
22
+ styling: 'bootstrap',
23
+ shadow: false,
24
+ animation: 'fade',
25
+ closer: true,
26
+ history: false,
27
+ auto_display: true
28
+ });
29
+ });
30
+ </script>
31
+ <% end %>
32
+ </head>
33
+
34
+ <body>
35
+ <div class="navbar navbar-fixed-top navbar-inverse" role="navigation">
36
+ <div class="container">
37
+ <div class="navbar-header">
38
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
39
+ <span class="icon-bar"></span>
40
+ <span class="icon-bar"></span>
41
+ <span class="icon-bar"></span>
42
+ </button>
43
+ <a class="navbar-brand" href="<%= weeler_root_path %>">Weeler</a>
44
+ </div>
45
+ <div class="collapse navbar-collapse">
46
+ <ul class="nav navbar-nav">
47
+ <li class="<%= 'active' if @current_menu_item == 'home' %>"><a href="<%= weeler_root_path %>">Home</a></li>
48
+ <li class="<%= 'active' if @current_menu_item == 'about' %>"><a href="<%= weeler_about_path %>">About</a></li>
49
+ </ul>
50
+ </div><!-- /.nav-collapse -->
51
+ </div><!-- /.container -->
52
+ </div><!-- /.navbar -->
53
+
54
+ <div class="container">
55
+
56
+ <div class="row row-offcanvas row-offcanvas-right">
57
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar" role="navigation">
58
+ <div class="well sidebar-nav">
59
+ <ul class="nav">
60
+ <li>Configuration</li>
61
+ <li class="<%= "active" %> "><a href="<%= weeler_translations_path %>">Translations</a></li>
62
+ <li>Content</li>
63
+
64
+ <% Weeler.menu_items.each do |item| %>
65
+ <li><%= link_to item.to_s.capitalize, eval("weeler_#{item.to_s}_path") %></li>
66
+ <% end %>
67
+
68
+ </ul>
69
+ </div><!--/.well -->
70
+ </div><!--/span-->
71
+ <div class="col-xs-12 col-sm-9">
72
+ <%= yield %>
73
+ </div><!--/span-->
74
+ </div><!--/row-->
75
+
76
+ <hr>
77
+
78
+ <footer>
79
+ <p>&copy; Weby 2013</p>
80
+ </footer>
81
+
82
+ </div><!--/.container-->
83
+
84
+ </body>
85
+
86
+ </html>