enjoy_cms 0.1.0.beta1

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 (172) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.rspec +1 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +5 -0
  7. data/Gemfile.lock +249 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +137 -0
  10. data/Rakefile +1 -0
  11. data/app/assets/javascripts/enjoy_cms.coffee +6 -0
  12. data/app/assets/javascripts/enjoy_cms/flash.js.coffee +3 -0
  13. data/app/assets/javascripts/enjoy_cms/map.js.coffee +22 -0
  14. data/app/assets/javascripts/head.load.js +707 -0
  15. data/app/assets/javascripts/jquery.placeholder.js +157 -0
  16. data/app/assets/stylesheets/enjoy_cms.sass +5 -0
  17. data/app/assets/stylesheets/enjoy_cms/flash.sass +63 -0
  18. data/app/assets/stylesheets/enjoy_cms/normalize.scss +406 -0
  19. data/app/assets/stylesheets/enjoy_cms/powered.sass +18 -0
  20. data/app/controllers/concerns/enjoy/errors.rb +93 -0
  21. data/app/controllers/concerns/enjoy/fancybox.rb +14 -0
  22. data/app/controllers/concerns/enjoy/localizeable.rb +33 -0
  23. data/app/controllers/concerns/enjoy/nav_menu.rb +64 -0
  24. data/app/controllers/concerns/enjoy/no_cache.rb +12 -0
  25. data/app/controllers/concerns/enjoy/seo_pages.rb +83 -0
  26. data/app/controllers/enjoy/contacts_controller.rb +5 -0
  27. data/app/controllers/enjoy/home_controller.rb +6 -0
  28. data/app/controllers/enjoy/news_controller.rb +5 -0
  29. data/app/controllers/enjoy/pages_controller.rb +5 -0
  30. data/app/controllers/enjoy/search_controller.rb +6 -0
  31. data/app/helpers/enjoy/gzip_helper.rb +27 -0
  32. data/app/helpers/enjoy/powered_helper.rb +12 -0
  33. data/app/mailers/enjoy/contact_mailer.rb +17 -0
  34. data/app/models/concerns/enjoy/boolean_field.rb +17 -0
  35. data/app/models/concerns/enjoy/enableable.rb +8 -0
  36. data/app/models/concerns/enjoy/geocodeable.rb +4 -0
  37. data/app/models/concerns/enjoy/mappable.rb +95 -0
  38. data/app/models/concerns/enjoy/mongoid_paperclip.rb +37 -0
  39. data/app/models/concerns/enjoy/seoable.rb +36 -0
  40. data/app/models/concerns/enjoy/sitemap_data.rb +23 -0
  41. data/app/models/concerns/enjoy/sort_field.rb +20 -0
  42. data/app/models/concerns/enjoy/sortable.rb +8 -0
  43. data/app/models/enjoy/contact_message.rb +12 -0
  44. data/app/models/enjoy/embedded_element.rb +15 -0
  45. data/app/models/enjoy/embedded_gallery_image.rb +15 -0
  46. data/app/models/enjoy/gallery.rb +10 -0
  47. data/app/models/enjoy/gallery_image.rb +10 -0
  48. data/app/models/enjoy/menu.rb +12 -0
  49. data/app/models/enjoy/news.rb +12 -0
  50. data/app/models/enjoy/page.rb +12 -0
  51. data/app/models/enjoy/seo.rb +13 -0
  52. data/app/views/blocks/_favicon.html.slim +21 -0
  53. data/app/views/blocks/_footer.html.slim +1 -0
  54. data/app/views/blocks/_seo_block.html.slim +18 -0
  55. data/app/views/blocks/_seo_block_with_obj.html.slim +27 -0
  56. data/app/views/devise/registrations/edit.html.slim +21 -0
  57. data/app/views/devise/registrations/new.html.slim +21 -0
  58. data/app/views/devise/sessions/new.html.slim +22 -0
  59. data/app/views/devise/shared/_links.html.slim +11 -0
  60. data/app/views/enjoy/contact_mailer/new_message_email.html.slim +15 -0
  61. data/app/views/enjoy/contacts/index.html.slim +10 -0
  62. data/app/views/enjoy/contacts/new.html.slim +10 -0
  63. data/app/views/enjoy/contacts/sent.html.slim +4 -0
  64. data/app/views/enjoy/home/index.html.slim +1 -0
  65. data/app/views/enjoy/news/index.html.slim +9 -0
  66. data/app/views/enjoy/news/show.html.slim +8 -0
  67. data/app/views/enjoy/pages/show.html.slim +1 -0
  68. data/app/views/enjoy/search/index.html.slim +19 -0
  69. data/app/views/errors/_base.html.slim +3 -0
  70. data/app/views/errors/error_403.html.slim +1 -0
  71. data/app/views/errors/error_404.html.slim +1 -0
  72. data/app/views/errors/error_500.html.slim +1 -0
  73. data/app/views/layouts/application.html.slim +25 -0
  74. data/app/views/rails_admin/main/_check_boxes.html.slim +27 -0
  75. data/app/views/rails_admin/main/_enum_check_boxes.html.slim +5 -0
  76. data/app/views/rails_admin/main/_enum_radio_buttons.html.slim +5 -0
  77. data/app/views/rails_admin/main/_form_raw.html.slim +1 -0
  78. data/app/views/shared/_admin_link.html.slim +3 -0
  79. data/app/views/shared/_messages.html.slim +7 -0
  80. data/app/views/shared/_meta.html.slim +19 -0
  81. data/app/views/shared/_obj.html.slim +21 -0
  82. data/app/views/shared/_og.html.slim +4 -0
  83. data/app/views/simple_captcha/_simple_captcha.html.slim +12 -0
  84. data/config/initializers/simple_captcha.rb +29 -0
  85. data/config/locales/en.enjoy.yml +29 -0
  86. data/config/locales/en.enjoy_admin.yml +6 -0
  87. data/config/locales/ru.cancan.yml +4 -0
  88. data/config/locales/ru.devise.yml +65 -0
  89. data/config/locales/ru.enjoy.yml +39 -0
  90. data/config/locales/ru.enjoy_admin.yml +6 -0
  91. data/config/locales/ru.kaminari.yml +17 -0
  92. data/config/locales/ru.models.yml +103 -0
  93. data/config/locales/ru.mongoid.yml +450 -0
  94. data/config/locales/ru.rails_admin.yml +148 -0
  95. data/config/locales/ru.simple_captcha.yml +3 -0
  96. data/config/locales/ru.simple_form.yml +9 -0
  97. data/config/routes.rb +14 -0
  98. data/enjoy_cms.gemspec +53 -0
  99. data/lib/enjoy/admin.rb +350 -0
  100. data/lib/enjoy/admin/contact_message.rb +36 -0
  101. data/lib/enjoy/admin/embedded_element.rb +11 -0
  102. data/lib/enjoy/admin/embedded_gallery_image.rb +15 -0
  103. data/lib/enjoy/admin/gallery.rb +20 -0
  104. data/lib/enjoy/admin/gallery_image.rb +18 -0
  105. data/lib/enjoy/admin/menu.rb +27 -0
  106. data/lib/enjoy/admin/news.rb +57 -0
  107. data/lib/enjoy/admin/page.rb +81 -0
  108. data/lib/enjoy/admin/seo.rb +17 -0
  109. data/lib/enjoy/configuration.rb +73 -0
  110. data/lib/enjoy/controller.rb +31 -0
  111. data/lib/enjoy/controllers/contacts.rb +70 -0
  112. data/lib/enjoy/controllers/news.rb +36 -0
  113. data/lib/enjoy/controllers/pages.rb +22 -0
  114. data/lib/enjoy/controllers/search.rb +62 -0
  115. data/lib/enjoy/elastic_search.rb +31 -0
  116. data/lib/enjoy/engine.rb +46 -0
  117. data/lib/enjoy/migration.rb +34 -0
  118. data/lib/enjoy/model.rb +22 -0
  119. data/lib/enjoy/models/active_record/contact_message.rb +14 -0
  120. data/lib/enjoy/models/active_record/menu.rb +17 -0
  121. data/lib/enjoy/models/active_record/news.rb +26 -0
  122. data/lib/enjoy/models/active_record/page.rb +20 -0
  123. data/lib/enjoy/models/active_record/seo.rb +17 -0
  124. data/lib/enjoy/models/contact_message.rb +37 -0
  125. data/lib/enjoy/models/embedded_element.rb +12 -0
  126. data/lib/enjoy/models/embedded_gallery_image.rb +16 -0
  127. data/lib/enjoy/models/gallery.rb +29 -0
  128. data/lib/enjoy/models/gallery_image.rb +23 -0
  129. data/lib/enjoy/models/menu.rb +28 -0
  130. data/lib/enjoy/models/mongoid/contact_message.rb +20 -0
  131. data/lib/enjoy/models/mongoid/embedded_element.rb +13 -0
  132. data/lib/enjoy/models/mongoid/embedded_gallery_image.rb +19 -0
  133. data/lib/enjoy/models/mongoid/gallery.rb +23 -0
  134. data/lib/enjoy/models/mongoid/gallery_image.rb +21 -0
  135. data/lib/enjoy/models/mongoid/menu.rb +15 -0
  136. data/lib/enjoy/models/mongoid/news.rb +29 -0
  137. data/lib/enjoy/models/mongoid/page.rb +25 -0
  138. data/lib/enjoy/models/mongoid/seo.rb +28 -0
  139. data/lib/enjoy/models/news.rb +58 -0
  140. data/lib/enjoy/models/page.rb +90 -0
  141. data/lib/enjoy/models/seo.rb +22 -0
  142. data/lib/enjoy/patch.rb +58 -0
  143. data/lib/enjoy/rails_admin_menu.rb +145 -0
  144. data/lib/enjoy/simple_form_patch.rb +12 -0
  145. data/lib/enjoy/tasks.rb +13 -0
  146. data/lib/enjoy/version.rb +3 -0
  147. data/lib/enjoy_cms.rb +109 -0
  148. data/lib/filename_to_slug.rb +34 -0
  149. data/lib/generators/enjoy/ability_generator.rb +14 -0
  150. data/lib/generators/enjoy/admin_generator.rb +21 -0
  151. data/lib/generators/enjoy/capify_generator.rb +39 -0
  152. data/lib/generators/enjoy/layout_generator.rb +14 -0
  153. data/lib/generators/enjoy/migration_generator.rb +18 -0
  154. data/lib/generators/enjoy/templates/Capfile +17 -0
  155. data/lib/generators/enjoy/templates/ability.erb +26 -0
  156. data/lib/generators/enjoy/templates/admin.erb +89 -0
  157. data/lib/generators/enjoy/templates/deploy.erb +47 -0
  158. data/lib/generators/enjoy/templates/dl.erb +30 -0
  159. data/lib/generators/enjoy/templates/migration_contact_messages.rb +15 -0
  160. data/lib/generators/enjoy/templates/migration_news.rb +26 -0
  161. data/lib/generators/enjoy/templates/migration_pages.rb +45 -0
  162. data/lib/generators/enjoy/templates/migration_seos.rb +14 -0
  163. data/lib/generators/enjoy/templates/production.erb +8 -0
  164. data/lib/generators/enjoy/templates/unicorn.erb +66 -0
  165. data/lib/generators/enjoy/utils.rb +21 -0
  166. data/lib/manual_slug.rb +10 -0
  167. data/lib/manual_slug/active_record.rb +32 -0
  168. data/lib/manual_slug/mongoid.rb +36 -0
  169. data/lib/rails_admin/custom_show_in_app.rb +43 -0
  170. data/release.sh +13 -0
  171. data/template.rb +824 -0
  172. metadata +579 -0
@@ -0,0 +1,21 @@
1
+ h2 Редактирование профиля
2
+ = simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
3
+ /= devise_error_messages!
4
+ .field
5
+ = f.label :email, I18n.t("shared.email")
6
+ br
7
+ = f.email_field :email, autofocus: true
8
+ .field
9
+ = f.label :password
10
+ - if @minimum_password_length
11
+ em
12
+ (Минимум символов: #{@minimum_password_length})
13
+ br
14
+ = f.password_field :password, I18n.t("shared.password"), autocomplete: "off"
15
+ .field
16
+ = f.label :password_confirmation
17
+ br
18
+ = f.password_field :password_confirmation, I18n.t("shared.password_confirmation"), autocomplete: "off"
19
+ .actions
20
+ = f.submit "Зарегистрироваться"
21
+ = render "devise/shared/links"
@@ -0,0 +1,21 @@
1
+ h2 Регистрация
2
+ = simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
3
+ = devise_error_messages!
4
+ .field
5
+ = f.label :email, label: I18n.t("shared.email")
6
+ br
7
+ = f.email_field :email, autofocus: true
8
+ .field
9
+ = f.label :password
10
+ - if @minimum_password_length
11
+ em= " (Минимум символов: #{@minimum_password_length})"
12
+ br
13
+ = f.password_field :password, label: I18n.t("shared.password"), autocomplete: "off"
14
+ .field
15
+ = f.label :password_confirmation
16
+ br
17
+ = f.password_field :password_confirmation, label: I18n.t("shared.password_confirmation"), autocomplete: "off"
18
+ .actions
19
+ = f.submit "Зарегистрироваться"
20
+ br
21
+ = render "devise/shared/links"
@@ -0,0 +1,22 @@
1
+ h2= I18n.t("shared.enter_site")
2
+ = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
3
+ .field
4
+ = f.label :email, I18n.t("shared.email")
5
+ br
6
+ = f.email_field :email, autofocus: true, title: I18n.t("shared.email")
7
+ br
8
+ .field
9
+ = f.label :password, title: I18n.t("shared.password")
10
+ br
11
+ = f.password_field :password, autocomplete: "off", title: I18n.t("shared.password")
12
+ br
13
+ - if devise_mapping.rememberable?
14
+ .field
15
+ = f.check_box :remember_me, title: I18n.t("shared.remember_me")
16
+ = f.label :remember_me, I18n.t("shared.remember_me")
17
+
18
+ .actions
19
+ = f.submit I18n.t("shared.enter")
20
+ br
21
+
22
+ = render "devise/shared/links"
@@ -0,0 +1,11 @@
1
+ - if controller_name != 'sessions'
2
+ = link_to I18n.t("shared.enter_site"), new_session_path(resource_name)
3
+ br
4
+
5
+ - if devise_mapping.registerable? && controller_name != 'registrations'
6
+ = link_to I18n.t("shared.registration"), new_registration_path(resource_name)
7
+ br
8
+
9
+ - if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
10
+ = link_to I18n.t("shared.forget_password"), new_password_path(resource_name)
11
+ br
@@ -0,0 +1,15 @@
1
+ - excluded_column_names = %w[id c_at u_at created_at updated_at _id _type enabled attachment c_at u_at captcha captcha_key veenjoyion creator_id creator updater_id updater modifier modifier_id]
2
+
3
+ h3= "Сообщение из формы связи:"
4
+
5
+ table
6
+ tr
7
+ th(style='padding: 2px 3px') Поле
8
+ th(style='padding: 2px 3px') Значение
9
+ - fields = (Enjoy.mongoid? ? Enjoy::ContactMessage.fields.keys : Enjoy::ContactMessage.columns.map(&:name))
10
+ - fields.reject{|c| excluded_column_names.include?(c) }.each do |c|
11
+ tr
12
+ td(style='padding: 2px 3px')
13
+ = Enjoy::ContactMessage.human_attribute_name(c)
14
+ td(style='padding: 2px 3px')
15
+ = @message.send(c.to_sym)
@@ -0,0 +1,10 @@
1
+ = render 'shared/obj', obj: @seo_page
2
+
3
+ #enjoy_cms_contact_form
4
+ = simple_form_for @contact_message, url: enjoy.contacts_path do |f|
5
+ = f.input :name
6
+ = f.input :email
7
+ = f.input :phone
8
+ = f.input :content
9
+ = f.input :captcha, as: :simple_captcha
10
+ = f.submit t('enjoy.send')
@@ -0,0 +1,10 @@
1
+ = render 'shared/obj', obj: @seo_page
2
+
3
+ #enjoy_cms_contact_form
4
+ = simple_form_for @contact_message, url: enjoy.contacts_path do |f|
5
+ = f.input :name
6
+ = f.input :email
7
+ = f.input :phone
8
+ = f.input :content
9
+ = f.input :captcha
10
+ = f.submit t('enjoy.send')
@@ -0,0 +1,4 @@
1
+ #enjoy_cms_contact_sent
2
+ h1 Обратная связь
3
+ h2 Ваше сообщение отправлено
4
+ div Если оно требует ответа, мы постараемся ответить в ближайшее время
@@ -0,0 +1 @@
1
+ div enjoy_cms test app
@@ -0,0 +1,9 @@
1
+ .enjoy-news-index
2
+ h1= t('enjoy.news')
3
+ - @news.each do |news|
4
+ .enjoy-news-date= l(news.time.to_date)
5
+ = link_to news.name, news, class: "enjoy-news-title", title: news.name
6
+ - if !Enjoy.configuration.news_image_styles.nil? && news.image?
7
+ .enjoy-news-image= image_tag news.image.url(:thumb)
8
+ .enjoy-news-excerpt== news.excerpt
9
+ = paginate @news
@@ -0,0 +1,8 @@
1
+ .enjoy-news-show
2
+ h1.enjoy-news-title= @news.name
3
+ .enjoy-news-date= l(@news.time.to_date)
4
+ .enjoy-news-text== @news.content
5
+ - if !Enjoy.config.news_image_styles.nil? && @news.image?
6
+ .enjoy-news-image= image_tag @news.image.url(:main)
7
+ .enjoy-news-content
8
+ = render 'shared/obj', obj: @news
@@ -0,0 +1 @@
1
+ = render 'shared/obj', obj: @seo_page
@@ -0,0 +1,19 @@
1
+ .enjoy-search-results
2
+ h1 Результаты поиска
3
+ = form_tag enjoy.search_path, method: :get, class: 'nav_search' do
4
+ = text_field_tag 'query', params[:query], placeholder: "Поиск"
5
+ = submit_tag 'Найти'
6
+ ol
7
+ - any = false
8
+ - @results.each do |r|
9
+ - any = true
10
+ li
11
+ .title= link_to (r._highlight.nil? || r._highlight['name'].nil?) ? r.name : r._highlight['name'].join(' ... ').html_safe, url_for(r)
12
+ .text
13
+ = raw (r._highlight.nil? || r._highlight['content'].nil?) ? (r.content.blank? ? '' : SmartExcerpt.truncate(r.content)) : r._highlight['content'].join(' ... ')
14
+ span.more= link_to '', url_for(r)
15
+
16
+ - unless any
17
+ .enjoy-search-no-results К сожалению, ничего не найдено
18
+
19
+ = paginate @results if any
@@ -0,0 +1,3 @@
1
+ #enjoy_cms_error{class="error-#{code}"}
2
+ h1= t('enjoy.erroenjoy.title', code: code)
3
+ p= "#{text}"
@@ -0,0 +1 @@
1
+ = render 'erroenjoy/base', code: 403, text: t('enjoy.erroenjoy.access_denied')
@@ -0,0 +1 @@
1
+ = render 'erroenjoy/base', code: 404, text: t('enjoy.erroenjoy.not_found')
@@ -0,0 +1 @@
1
+ = render 'erroenjoy/base', code: 500, text: t('enjoy.erroenjoy.internal_error')
@@ -0,0 +1,25 @@
1
+ doctype html
2
+ html lang="ru"
3
+ head
4
+ meta chaenjoyet="UTF-8"
5
+ meta name="viewport" content="width=device-width, maximum-scale=1"
6
+ title= page_title
7
+ = yield :meta
8
+ = csrf_meta_tags
9
+ = render partial: "blocks/favicon"
10
+
11
+ = stylesheet_link_tag "application", media: "all", async: true
12
+ = javascript_include_tag "application", async: true
13
+ /[if lt IE 9]
14
+ = javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js", async: true
15
+
16
+ body
17
+ #root
18
+ = render 'shared/messages'
19
+ #sidebar
20
+ = render_navigation &navigation(:main)
21
+ #content
22
+ = yield
23
+ #root_footer
24
+ #footer
25
+ = render 'blocks/footer'
@@ -0,0 +1,27 @@
1
+ - if params[:associations].nil?
2
+ = render 'rails_admin/main/enum_check_boxes', field: field, form: form
3
+ - else
4
+ :ruby
5
+ related_id = params[:associations] && params[:associations][field.name.to_s]
6
+ config = field.associated_model_config
7
+ source_abstract_model = RailsAdmin.config(form.object.class).abstract_model
8
+
9
+ if form.object.new_record? && related_id.present? && related_id != 'new'
10
+ selected = [config.abstract_model.get(related_id)]
11
+ else
12
+ selected = form.object.send(field.name)
13
+ end
14
+ selected_ids = selected.map{|s| s.send(field.associated_primary_key)}
15
+
16
+ current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update'
17
+
18
+ xhr = !field.associated_collection_cache_all
19
+
20
+ collection = if xhr
21
+ selected.map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }
22
+ else
23
+ i = 0
24
+ controller.list_entries(config, :index, field.associated_collection_scope, false).map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }.sort_by {|a| [selected_ids.index(a[1]) || selected_ids.size, i+=1] }
25
+ end
26
+
27
+ = form.collection_check_boxes field.method_name, collection, :last, :fienjoyt, {}, {} { |i| i.label( class: 'checkbox' ) { i.check_box + i.text } }
@@ -0,0 +1,5 @@
1
+ :ruby
2
+ values = form.object.class.send(field.method_name).values.map { |v|
3
+ [t("enumerize.#{form.object.class.name.downcase}.#{field.method_name}.#{v}", default: t("enumerize.defaults.#{field.method_name}.#{v}")), v]
4
+ }
5
+ = form.collection_check_boxes field.method_name, values, :last, :fienjoyt, {}, {} { |i| i.label( class: 'checkbox' ) { i.check_box + i.text } }
@@ -0,0 +1,5 @@
1
+ :ruby
2
+ values = form.object.class.send(field.method_name).values.map { |v|
3
+ [t("enumerize.#{form.object.class.name.downcase}.#{field.method_name}.#{v}", default: t("enumerize.defaults.#{field.method_name}.#{v}")), v]
4
+ }
5
+ = form.collection_radio_buttons field.method_name, values, :last, :fienjoyt, {}, {} { |i| i.label(class: 'radio') { i.radio_button + i.text } }
@@ -0,0 +1 @@
1
+ = field.pretty_value
@@ -0,0 +1,3 @@
1
+ - if user_signed_in? && respond_to?(:can?) && can?(:access, :rails_admin) && can?(:edit, obj)
2
+ .admin_link
3
+ = link_to t('enjoy.edit'), rails_admin.edit_path(obj.class.model_name.i18n_key.to_s.gsub('/', '~'), obj.id), 'data-no-turbolink' => true
@@ -0,0 +1,7 @@
1
+ - unless flash.empty?
2
+ .flash
3
+ - flash.each do |type, message|
4
+ - next if message.blank?
5
+ div{class="message #{type}"}
6
+ a.close_flash ×
7
+ = simple_format(message.strip)
@@ -0,0 +1,19 @@
1
+ - alt_obj ||= nil
2
+
3
+ - if obj.respond_to?(:keywords) and !obj.keywords.blank?
4
+ meta{name="keywords" content="#{obj.keywords}"}/
5
+ - else
6
+ - if alt_obj and alt_obj.respond_to?(:keywords) and !alt_obj.keywords.blank?
7
+ meta{name="keywords" content="#{alt_obj.keywords}"}/
8
+
9
+ - if obj.respond_to?(:description) and !obj.description.blank?
10
+ meta{name="description" content="#{obj.description}"}/
11
+ - else
12
+ - if alt_obj and alt_obj.respond_to?(:description) and !alt_obj.description.blank?
13
+ meta{name="description" content="#{alt_obj.description}"}/
14
+
15
+ - if obj.respond_to?(:robots) and !obj.robots.blank?
16
+ meta{name="robots" content="#{obj.robots}"}/
17
+ - else
18
+ - if alt_obj and alt_obj.respond_to?(:robots) and !alt_obj.robots.blank?
19
+ meta{name="robots" content="#{alt_obj.robots}"}/
@@ -0,0 +1,21 @@
1
+ - unless obj.nil?
2
+ .text_content
3
+ - if (!defined?(h1) || h1) && !obj.h1.blank?
4
+ h1= obj.h1
5
+ - if obj.content.blank?
6
+ - unless @seo_page.nil?
7
+ = raw @seo_page.page_content
8
+ - else
9
+ = raw obj.content
10
+ - if !obj.nil?
11
+ = render 'shared/admin_link', obj: obj
12
+ - if !@seo_page.nil? && (@seo_page.id != obj.id || @seo_page.class.name != obj.class.name)
13
+ = render 'shared/admin_link', obj: @seo_page
14
+
15
+ - content_for :meta do
16
+ = render 'shared/meta', obj: obj
17
+ = render 'shared/og', title: obj.get_og_title, image: obj.og_image
18
+
19
+ - content_for :title do
20
+ - if obj.title
21
+ title= obj.title
@@ -0,0 +1,4 @@
1
+ - if defined?(title) && !title.blank?
2
+ meta{property='og:title' content="#{title}"}
3
+ - if defined?(image) && !image.blank?
4
+ meta{property='og:image' content="http://#{request.host_with_port}#{image}"}
@@ -0,0 +1,12 @@
1
+ label.form-label
2
+ = simple_captcha_options[:label]
3
+ .input_image_block
4
+ .image
5
+ = simple_captcha_options[:image]
6
+ .input
7
+ = simple_captcha_options[:field]
8
+
9
+ - unless simple_captcha_options[:error_messages].blank?
10
+ .errors_black
11
+ - simple_captcha_options[:error_messages].each do |m|
12
+ span.error= m
@@ -0,0 +1,29 @@
1
+ module SimpleCaptcha #:nodoc
2
+ module ViewHelper #:nodoc
3
+ def show_simple_captcha(options={})
4
+ key = simple_captcha_key(options[:object])
5
+ options[:field_value] = set_simple_captcha_data(key, options)
6
+
7
+ defaults = {
8
+ :image => simple_captcha_image(key, options),
9
+ :label => options[:label] || I18n.t('simple_captcha.label'),
10
+ :field => simple_captcha_field(options),
11
+ :error_messages => options[:error_messages]
12
+ }
13
+
14
+ render :partial => 'simple_captcha/simple_captcha', :locals => { :simple_captcha_options => defaults }
15
+ end
16
+ end
17
+ end
18
+
19
+ SimpleCaptcha.setup do |sc|
20
+ sc.image_size = "200x50"
21
+ sc.length = 4
22
+ sc.charset = "1234567890"
23
+
24
+ sc.add_image_style("enjoy_cms_style", ["-alpha set", "-fill '#ffffff'", "-background 'transparent'", "-size 200x50", "xc:transparent"])
25
+
26
+ sc.image_style = 'enjoy_cms_style'
27
+
28
+ sc.tmp_path = "tmp/sc"
29
+ end
@@ -0,0 +1,29 @@
1
+ en:
2
+ enjoy:
3
+ gallery: "Gallery"
4
+ cms: "CMS"
5
+ menu: "Menu"
6
+ settings: 'Settings'
7
+ news: 'News'
8
+ with_final_slash: "should begin with a slash"
9
+ page_url_regex: "Regular expression to check if page is current"
10
+ final_in_menu: "This link is also displayed in menu"
11
+ no_contact_info: "^Please enter your phone or email so we could contact you."
12
+ map: 'Map'
13
+ sitemap: 'Sitemap'
14
+ sitemap_data: 'Sitemap data'
15
+ edit: Edit
16
+ send: Send
17
+ format_time: "%-m/%-d/%Y"
18
+ m:
19
+ enabled: 'added to menu "%{menu}"'
20
+ disabled: 'deleted from menu "%{menu}"'
21
+ error: "Error: %{err}"
22
+ no_id: "No ID"
23
+ errors:
24
+ title: "Error %{code}"
25
+ form_expired: "Token expired"
26
+ internal_error: "Internal error"
27
+ internal_error_full: "Internal error: %{klass} %{message}"
28
+ access_denied: "Access denied"
29
+ not_found: 'The requested page was not found on this server'
@@ -0,0 +1,6 @@
1
+ en:
2
+ admin:
3
+ actions:
4
+ custom_show_in_app:
5
+ title: 'Show in app'
6
+ menu: "Show in app"
@@ -0,0 +1,4 @@
1
+ en:
2
+ unauthorized:
3
+ manage:
4
+ all: "У вас нет прав на действие %{action} над %{subject}."
@@ -0,0 +1,65 @@
1
+ ru:
2
+ devise:
3
+ confirmations:
4
+ confirmed: Ваша учётная запись подтверждена. Теперь вы вошли в систему.
5
+ send_instructions: В течение нескольких минут вы получите письмо с инструкциями по подтверждению вашей учётной записи.
6
+ send_paranoid_instructions: Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по подтверждению вашей учётной записи.
7
+ failure:
8
+ already_authenticated: Вы уже вошли в систему.
9
+ inactive: Ваша учётная запись ещё не активирована.
10
+ invalid: Неверный адрес e-mail или пароль.
11
+ invalid_token: Неверный ключ аутентификации.
12
+ locked: Ваша учётная запись заблокирована.
13
+ not_found_in_database:
14
+ timeout: Ваш сеанс закончился. Пожалуйста, войдите в систему снова.
15
+ unauthenticated: Вам необходимо войти в систему или зарегистрироваться.
16
+ unconfirmed: Вы должны подтвердить вашу учётную запись.
17
+ mailer:
18
+ confirmation_instructions:
19
+ subject: Инструкции по подтверждению учётной записи
20
+ reset_password_instructions:
21
+ subject: Инструкции по восстановлению пароля
22
+ unlock_instructions:
23
+ subject: Инструкции по разблокировке учётной записи
24
+ omniauth_callbacks:
25
+ failure: Вы не можете войти в систему с учётной записью из %{kind}, т.к. "%{reason}".
26
+ success: Вход в систему выполнен с учётной записью из %{kind}.
27
+ passwords:
28
+ no_token: Доступ к этой странице возможен только по ссылке из письма о восстановлении пароля. Если Вы пришли по такой ссылке, пожалуйста убедитесь что Вы скопировали всю ссылку целиком.
29
+ send_instructions: В течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля.
30
+ send_paranoid_instructions: Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля.
31
+ updated: Ваш пароль изменён. Теперь вы вошли в систему.
32
+ updated_not_active: Ваш пароль изменен.
33
+ registrations:
34
+ destroyed: До свидания! Ваша учётная запись удалена. Надеемся снова увидеть вас.
35
+ signed_up: Добро пожаловать! Вы успешно зарегистрировались.
36
+ signed_up_but_inactive: Вы успешно зарегистрированы. Однако, вы не можете войти в систему, потому что ваша учетная запись не активирована.
37
+ signed_up_but_locked: Вы успешно зарегистрированы. Однако, вы не можете войти в систему, потому что ваша учетная запись заблокирована.
38
+ signed_up_but_unconfirmed: Письмо со ссылкой для подтверждения было отправлено на ваш e-mail. Пожалуйста, перейдите по ссылке, чтобы подтвердить вашу учетную запись.
39
+ update_needs_confirmation: Вы успешно обновили данные вашей учетной записи, но нам нужно проверить ваш новый адрес e-mail. Пожалуйста, проверьте ваш почтовый ящик и перейдите по ссылке, чтобы закончить процедуру проверки вашего нового адреса e-mail.
40
+ updated: Ваша учётная запись изменена.
41
+ sessions:
42
+ signed_in: Вход в систему выполнен.
43
+ signed_out: Выход из системы выполнен.
44
+ unlocks:
45
+ send_instructions: В течение нескольких минут вы получите письмо с инструкциями по разблокировке вашей учётной записи.
46
+ send_paranoid_instructions: Если ваша учётная запись существует, то в течение нескольких минут вы получите письмо с инструкциями по её разблокировке.
47
+ unlocked: Ваша учётная запись разблокирована. Теперь вы можете войти в систему.
48
+ failure:
49
+ user:
50
+ not_found_in_database: Пользователь не найден в базе
51
+ invalid: Неверный пароль
52
+ unauthenticated: Необходимо авторизоваться
53
+ unconfirmed: 'Необходимо подтвердить адрес электронной почты'
54
+ errors:
55
+ messages:
56
+ already_confirmed: уже подтверждена. Пожалуйста, попробуйте войти в систему
57
+ confirmation_period_expired:
58
+ expired: устарела. Пожалуйста, запросите новую
59
+ not_found: не найдена
60
+ not_locked: не заблокирована
61
+ not_saved:
62
+ few: ! '%{resource}: сохранение не удалось из-за %{count} ошибок'
63
+ many: ! '%{resource}: сохранение не удалось из-за %{count} ошибок'
64
+ one: ! '%{resource}: сохранение не удалось из-за %{count} ошибки'
65
+ other: ! '%{resource}: сохранение не удалось из-за %{count} ошибки'