coalla-cms 0.5.2.4 → 0.6.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +8 -8
  2. data/Gemfile +1 -1
  3. data/app/assets/javascripts/admin/admin.js +233 -34
  4. data/app/assets/stylesheets/admin/admin.scss +1 -2
  5. data/app/assets/stylesheets/admin/vendor/bootstrap.min.css +6242 -4
  6. data/app/assets/stylesheets/admin/vendor/token-input-bootstrap.scss +144 -0
  7. data/app/controllers/admin/autocomplete_controller.rb +3 -1
  8. data/app/controllers/admin/base_controller.rb +35 -0
  9. data/app/controllers/concerns/admin/editable_columns.rb +55 -0
  10. data/app/controllers/concerns/admin/sortable_columns.rb +16 -0
  11. data/app/controllers/{admin/sortable_controller.rb → concerns/admin/sortable_models.rb} +1 -5
  12. data/app/helpers/admin/alerts_helper.rb +31 -0
  13. data/app/helpers/admin/content_helper.rb +29 -0
  14. data/app/helpers/admin/form_helper.rb +50 -0
  15. data/app/helpers/admin/resource_helpers.rb +102 -0
  16. data/app/helpers/admin/search_helper.rb +44 -40
  17. data/app/helpers/admin/table_helper.rb +40 -0
  18. data/app/helpers/common_helper.rb +2 -2
  19. data/app/models/file_upload.rb +1 -1
  20. data/app/models/lookup.rb +1 -1
  21. data/app/models/site_meta_tags.rb +2 -2
  22. data/app/views/admin/common/_menu_section.haml +1 -1
  23. data/app/views/admin/common/_nested_fields_for.html.haml +10 -5
  24. data/app/views/admin/common/_nested_fields_for_element.html.haml +21 -5
  25. data/app/views/admin/common/_table_template.html.haml +26 -7
  26. data/app/views/admin/common/_upload_form.html.haml +2 -1
  27. data/app/views/admin/editable_columns/edit/_boolean.haml +2 -0
  28. data/app/views/admin/editable_columns/edit/_date.haml +2 -0
  29. data/app/views/admin/editable_columns/edit/_datetime.haml +3 -0
  30. data/app/views/admin/editable_columns/edit/_enumerize.haml +2 -0
  31. data/app/views/admin/editable_columns/edit/_string.haml +2 -0
  32. data/app/views/admin/editable_columns/edit/_text.haml +2 -0
  33. data/app/views/admin/editable_columns/edit/_time.haml +3 -0
  34. data/app/views/admin/editable_columns/edit_column.haml +8 -0
  35. data/app/views/admin/editable_columns/result/_boolean.haml +2 -0
  36. data/app/views/admin/editable_columns/result/_date.haml +1 -0
  37. data/app/views/admin/editable_columns/result/_datetime.haml +1 -0
  38. data/app/views/admin/editable_columns/result/_enumerize.haml +1 -0
  39. data/app/views/admin/editable_columns/result/_string.haml +1 -0
  40. data/app/views/admin/editable_columns/result/_text.haml +1 -0
  41. data/app/views/admin/editable_columns/result/_time.haml +1 -0
  42. data/app/views/admin/site_meta_tags/index.html.haml +2 -2
  43. data/app/views/layouts/admin.html.haml +12 -0
  44. data/app/views/structure/_section.haml +2 -9
  45. data/coalla-cms.gemspec +10 -11
  46. data/lib/coalla/builders/actions_column_definition.rb +44 -0
  47. data/lib/coalla/builders/admin_structure.rb +86 -0
  48. data/lib/coalla/builders/column_definition.rb +9 -0
  49. data/lib/coalla/builders/form_builder.rb +291 -0
  50. data/lib/coalla/builders/link_renderer.rb +43 -0
  51. data/lib/coalla/builders/policy.rb +30 -0
  52. data/lib/coalla/builders/table_builder.rb +99 -0
  53. data/lib/coalla/builders/table_formatter.rb +133 -0
  54. data/lib/coalla/builders/text_formatter.rb +22 -0
  55. data/lib/coalla/cms/engine.rb +3 -2
  56. data/lib/coalla/cms/version.rb +2 -2
  57. data/lib/coalla/ext/mapper.rb +7 -0
  58. data/lib/coalla/orm/{relation.rb → multi_field.rb} +7 -8
  59. data/lib/coalla/orm/page_slider.rb +2 -28
  60. data/lib/coalla/orm/sanitized.rb +1 -5
  61. data/lib/coalla/orm/sortable_association.rb +30 -0
  62. data/lib/coalla/uploaders/file_uploader.rb +9 -0
  63. data/lib/coalla/uploaders/image_uploader.rb +62 -0
  64. data/lib/coalla/uploaders/meta_image_uploader.rb +7 -0
  65. data/lib/coalla-cms.rb +10 -0
  66. data/lib/generators/coalla/cms/create_admin_administrators_generator.rb +5 -7
  67. data/lib/generators/coalla/cms/create_admin_generator.rb +9 -7
  68. data/lib/generators/coalla/cms/create_admin_login_view_generator.rb +4 -6
  69. data/lib/generators/coalla/cms/create_markup_generator.rb +2 -2
  70. data/lib/generators/coalla/cms/file_uploads/install_generator.rb +0 -17
  71. data/lib/generators/coalla/cms/file_uploads/mount_generator.rb +4 -7
  72. data/lib/generators/coalla/cms/image/install_generator.rb +0 -3
  73. data/lib/generators/coalla/cms/image/mount_generator.rb +0 -3
  74. data/lib/generators/coalla/cms/image/templates/mount/uploader.rb.erb +1 -1
  75. data/lib/generators/coalla/cms/image/templates/uploader.rb.erb +1 -1
  76. data/lib/generators/coalla/cms/init_generator.rb +42 -49
  77. data/lib/generators/coalla/cms/lookups/install_generator.rb +0 -3
  78. data/lib/generators/coalla/cms/meta_tags/install_generator.rb +0 -2
  79. data/lib/generators/coalla/cms/scaffold_generator.rb +7 -7
  80. data/lib/generators/coalla/cms/setup_admin_generator.rb +9 -9
  81. data/lib/generators/coalla/cms/setup_routes_generator.rb +3 -3
  82. data/lib/generators/coalla/cms/slider/init_generator.rb +1 -3
  83. data/lib/generators/coalla/cms/slider/templates/slider_image.rb.erb +0 -1
  84. data/lib/generators/coalla/cms/slider/templates/slider_image_uploader.rb.erb +1 -1
  85. data/lib/generators/coalla/cms/templates/.gitignore +3 -3
  86. data/lib/generators/coalla/cms/templates/controllers/admin/administrators_controller.rb +2 -40
  87. data/lib/generators/coalla/cms/templates/controllers/admin/scaffold_controller_template.rb.erb +0 -39
  88. data/lib/generators/coalla/cms/templates/initializers/carrierwave.rb +0 -90
  89. data/lib/generators/coalla/cms/templates/locales/activerecord.en.yml +14 -1
  90. data/lib/generators/coalla/cms/templates/views/admin/administrators/_form.html.haml +1 -1
  91. data/lib/generators/coalla/cms/templates/views/admin/administrators/edit.html.haml +1 -1
  92. data/lib/generators/coalla/cms/templates/views/admin/administrators/index.html.haml +5 -5
  93. data/lib/generators/coalla/cms/templates/views/admin/administrators/new.html.haml +1 -1
  94. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/_form.html.haml.erb +1 -1
  95. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/edit.html.haml.erb +1 -1
  96. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/index.html.haml.erb +5 -5
  97. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/new.html.haml.erb +1 -1
  98. data/lib/generators/coalla/cms/templates/views/administrators/sessions/new.html.haml +1 -1
  99. data/lib/generators/coalla/cms/utils/orm.rb +29 -0
  100. data/lib/generators/coalla/cms/utils/scaffold.rb +11 -0
  101. metadata +57 -100
  102. data/Gemfile.lock +0 -198
  103. data/app/assets/stylesheets/admin/vendor/token-input-facebook.patched.css +0 -126
  104. data/app/assets/stylesheets/admin/vendor/token-input.patched.css +0 -116
  105. data/app/controllers/admin/notifier_controller.rb +0 -7
  106. data/app/helpers/admin_helper.rb +0 -29
  107. data/app/helpers/nested_fields_helper.rb +0 -12
  108. data/app/helpers/static_text_formatter.rb +0 -25
  109. data/app/helpers/twitter_builder_helper.rb +0 -253
  110. data/app/helpers/twitter_form_builder.rb +0 -202
  111. data/app/uploaders/file_uploader.rb +0 -10
  112. data/app/uploaders/generic_image_uploader.rb +0 -75
  113. data/app/uploaders/meta_tags_image_uploader.rb +0 -5
  114. data/app/utils/admin_structure.rb +0 -82
  115. data/app/utils/bootstrap_link_renderer.rb +0 -40
  116. data/app/utils/table_helpers.rb +0 -196
  117. data/lib/generators/coalla/cms/market/install_generator.rb +0 -71
  118. data/lib/generators/coalla/cms/market/templates/controllers/categories_controller.rb +0 -47
  119. data/lib/generators/coalla/cms/market/templates/controllers/products_controller.rb +0 -50
  120. data/lib/generators/coalla/cms/market/templates/controllers/properties_controller.rb +0 -59
  121. data/lib/generators/coalla/cms/market/templates/market.rb +0 -5
  122. data/lib/generators/coalla/cms/market/templates/market.ru.yml +0 -53
  123. data/lib/generators/coalla/cms/market/templates/migrations/create_categories.rb +0 -15
  124. data/lib/generators/coalla/cms/market/templates/migrations/create_product_properties.rb +0 -18
  125. data/lib/generators/coalla/cms/market/templates/migrations/create_products.rb +0 -18
  126. data/lib/generators/coalla/cms/market/templates/migrations/create_properties.rb +0 -11
  127. data/lib/generators/coalla/cms/market/templates/models/category.rb +0 -36
  128. data/lib/generators/coalla/cms/market/templates/models/product.rb +0 -16
  129. data/lib/generators/coalla/cms/market/templates/models/product_property.rb +0 -14
  130. data/lib/generators/coalla/cms/market/templates/models/property.rb +0 -7
  131. data/lib/generators/coalla/cms/market/templates/views/categories/_form.html.haml +0 -10
  132. data/lib/generators/coalla/cms/market/templates/views/categories/edit.html.haml +0 -5
  133. data/lib/generators/coalla/cms/market/templates/views/categories/index.html.haml +0 -17
  134. data/lib/generators/coalla/cms/market/templates/views/categories/new.html.haml +0 -4
  135. data/lib/generators/coalla/cms/market/templates/views/products/_form.html.haml +0 -17
  136. data/lib/generators/coalla/cms/market/templates/views/products/_product_property_fields.html.haml +0 -13
  137. data/lib/generators/coalla/cms/market/templates/views/products/edit.html.haml +0 -5
  138. data/lib/generators/coalla/cms/market/templates/views/products/index.html.haml +0 -17
  139. data/lib/generators/coalla/cms/market/templates/views/products/new.html.haml +0 -4
  140. data/lib/generators/coalla/cms/market/templates/views/properties/_form.html.haml +0 -9
  141. data/lib/generators/coalla/cms/market/templates/views/properties/edit.html.haml +0 -5
  142. data/lib/generators/coalla/cms/market/templates/views/properties/index.html.haml +0 -15
  143. data/lib/generators/coalla/cms/market/templates/views/properties/new.html.haml +0 -4
  144. data/lib/generators/coalla/cms/news/scaffold_generator.rb +0 -50
  145. data/lib/generators/coalla/cms/news/templates/entity.rb.erb +0 -10
  146. data/lib/generators/coalla/cms/news/templates/entity_controller_template.rb.erb +0 -47
  147. data/lib/generators/coalla/cms/news/templates/entity_image_uploader.rb.erb +0 -7
  148. data/lib/generators/coalla/cms/news/templates/migration.rb.erb +0 -15
  149. data/lib/generators/coalla/cms/news/templates/views/_form.haml.erb +0 -16
  150. data/lib/generators/coalla/cms/news/templates/views/edit.haml.erb +0 -5
  151. data/lib/generators/coalla/cms/news/templates/views/index.haml.erb +0 -18
  152. data/lib/generators/coalla/cms/news/templates/views/new.haml.erb +0 -5
  153. data/lib/generators/coalla/cms/orm_helpers.rb +0 -31
  154. data/lib/generators/coalla/cms/scaffold_helper.rb +0 -11
  155. data/lib/generators/coalla/cms/templates/controllers/admin/base_controller.rb.erb +0 -35
  156. /data/{lib/generators/coalla/cms/templates/controllers/admin/home_controller.rb.erb → app/controllers/admin/home_controller.rb} +0 -0
@@ -1,4 +1,4 @@
1
- - active = current_page?(item.path)
1
+ - active = current_page?(item.path) || item.section_name.to_s == controller_name
2
2
  %li{class: active && 'active'}
3
3
  = link_to item.path do
4
4
  %i{class: item.icon}
@@ -1,6 +1,11 @@
1
1
  - partial = "#{collection.to_s.singularize}_fields"
2
- = field_set section_name do
3
- = f.fields_for collection do |builder|
4
- = render 'admin/common/nested_fields_for_element', builder: builder, partial: partial
5
- .nested_buttons
6
- = link_to_add_fields('Добавить', f, collection)
2
+ = field_set section_name, data: {sortable_blocks: options[:sort]} do
3
+ = f.fields_for collection, record_object, options do |builder|
4
+ = render('admin/common/nested_fields_for_element', builder: builder, partial: partial, options: options, block: block)
5
+ - if options[:add]
6
+ .nested_buttons
7
+ - new_object = f.object.send(collection).klass.new
8
+ - id = new_object.object_id
9
+ - fields = f.fields_for(collection, new_object, options.merge(child_index: id)) do |builder|
10
+ = render('admin/common/nested_fields_for_element', builder: builder, partial: partial, options: options, block: block)
11
+ = link_to(t('admin.common.new'), '#', class: 'add_fields btn btn-success', data: {id: id, fields: fields.gsub("\n", '')})
@@ -1,5 +1,21 @@
1
- .fields_container{style: (builder.object.marked_for_destruction? ? 'display:none;' : 'position:relative'), class: 'well'}
2
- = render partial, builder: builder
3
- = builder.hidden_field :_destroy
4
- = link_to '#', class: 'btn btn-danger remove_field', style:'position: absolute; top: 20px; right: 30px;' do
5
- %i.glyphicon.glyphicon-trash
1
+ .fields_container{style: (builder.object.try(:marked_for_destruction?) ? 'display:none;' : 'position:relative'), class: 'well'}
2
+ - if !options[:include_id] && builder.object.try(:persisted?)
3
+ = builder.hidden_field :id
4
+ - if options[:sort] || options[:destroy]
5
+ .row.form-group
6
+ .col-md-2.col-xs-2
7
+ - if options[:sort]
8
+ = link_to '#', data: {sort_up: true} do
9
+ %i.glyphicon.glyphicon-arrow-up
10
+ = link_to '#', data: {sort_down: true} do
11
+ %i.glyphicon.glyphicon-arrow-down
12
+ .col-md-1.col-md-offset-9.col-xs-1.col-xs-offset-8
13
+ - if options[:destroy]
14
+ = link_to '#', class: 'btn btn-danger remove_field' do
15
+ %i.glyphicon.glyphicon-trash
16
+ - if options[:destroy]
17
+ = builder.hidden_field :_destroy
18
+ - if block.present?
19
+ = capture(builder, options, &block)
20
+ - else
21
+ = render partial, builder: builder, options: options
@@ -2,13 +2,32 @@
2
2
  %table.table.table-striped
3
3
  %thead
4
4
  %tr
5
- - definitions.each do |column|
6
- %th{class: th_class(column)}
7
- = column.title
5
+ - definitions.each do |definition|
6
+ %th{class: th_class(definition)}
7
+ - if !definition.sort
8
+ = definition.title
9
+ - else
10
+ - url_params = params.permit!.to_h
11
+ - sort_by, sort_direction = sort_order.split("\s")
12
+ - if definition.sort == sort_by
13
+ - arrow_class = sort_direction == 'desc' ? 'glyphicon-sort-by-attributes-alt' : 'glyphicon-sort-by-attributes'
14
+ - direction = sort_direction == 'desc' ? 'asc' : 'desc'
15
+ = link_to url_for(url_params.merge(sort_by: sort_by, sort_direction: direction)) do
16
+ = "#{definition.title}&nbsp;<i class='glyphicon #{arrow_class}'></i>".html_safe
17
+ - else
18
+ = link_to url_for(url_params.merge(sort_by: definition.sort, sort_direction: 'asc')) do
19
+ = "#{definition.title}&nbsp;<i class='glyphicon glyphicon-sort'></i>".html_safe
8
20
  %tbody
9
21
  - items.each do |item|
10
22
  %tr{class: tr_class(row_class, item)}
11
- - definitions.each do |column|
12
- %td{class: td_class(column)}<
13
- = column.value(item, self)
14
-
23
+ - definitions.each do |definition|
24
+ - if definition.edit
25
+ - edit = definition.edit.dup
26
+ - url_option = edit.delete(:url)
27
+ - url = url_option.is_a?(Proc) ? url_option.(item) : url_for(action: :edit_column, id: item)
28
+ - data = {url: url, editable_column: true}.merge(edit).map{|key,value| [key, value.to_s]}.to_h
29
+ %td{class: td_class(definition), data: data}<
30
+ = definition.value(item, self)
31
+ - else
32
+ %td{class: td_class(definition)}<
33
+ = definition.value(item, self)
@@ -1,4 +1,5 @@
1
- = form_tag "###URL###", multipart: true, remote: true, style: 'display: none;', method: :post, authenticity_token: true do
1
+ = form_tag "###URL###", multipart: true, remote: true, style: 'display: none;', method: :post do
2
+ = hidden_field_tag :authenticity_token, form_authenticity_token
2
3
  = hidden_field_tag :container, '###CONTAINER###', id: nil
3
4
  = hidden_field_tag :version, '###VERSION###', id: nil
4
5
  = hidden_field_tag :free_size, '###FREE_SIZE###', id: nil
@@ -0,0 +1,2 @@
1
+ .checkbox
2
+ = builder.check_box options.column
@@ -0,0 +1,2 @@
1
+ .form-group
2
+ = builder.text_field options.column, class: 'form-control', data: {calendar_date: true}
@@ -0,0 +1,3 @@
1
+ .form-group
2
+ - value = builder.object.try(options.column).try(:strftime, '%Y-%m-%d %H:%M')
3
+ = builder.text_field options.column, class: 'form-control', data: {calendar_datetime: true}, value: value
@@ -0,0 +1,2 @@
1
+ .form-group
2
+ = builder.select options.column, controller_model.send(options.column).options, {}, class: 'form-control'
@@ -0,0 +1,2 @@
1
+ .form-group
2
+ = builder.text_field options.column, class: 'form-control'
@@ -0,0 +1,2 @@
1
+ .form-group
2
+ = builder.text_field options.column, class: 'form-control'
@@ -0,0 +1,3 @@
1
+ .form-group
2
+ - value = builder.object.try(options.column).try(:strftime, '%H:%M')
3
+ = builder.text_field options.column, class: 'form-control', data: {calendar_time: true}, value: value
@@ -0,0 +1,8 @@
1
+ = twitter_form_for item, url: url_for(action: :update_column, id: item), method: :put, remote: true, as: :item, html: {class: 'form-inline', data: {editable_column_form: true}} do |f|
2
+ = hidden_field_tag :column, options.column
3
+ = hidden_field_tag :custom, options.custom
4
+ = render partial: column_partial, locals: {builder: f, options: options}
5
+ = button_tag type: 'submit', class: 'btn btn-success btn-sm' do
6
+ %i.glyphicon.glyphicon-ok
7
+ = button_tag type: 'button', class: 'btn btn-default btn-sm', data: {editable_column_cancel: true} do
8
+ %i.glyphicon.glyphicon-remove
@@ -0,0 +1,2 @@
1
+ - if item.try(options.column)
2
+ %i.glyphicon.glyphicon-check
@@ -0,0 +1 @@
1
+ = item.try(options.column).try(:strftime, '%d.%m.%Y')
@@ -0,0 +1 @@
1
+ = item.try(options.column).try(:strftime, '%d.%m.%Y %H:%M')
@@ -0,0 +1 @@
1
+ = item.try(options.column).try(:text)
@@ -0,0 +1 @@
1
+ = item.try(options.column).to_s.html_safe
@@ -0,0 +1 @@
1
+ = item.try(options.column).to_s.html_safe
@@ -0,0 +1 @@
1
+ = item.try(options.column).try(:strftime, '%H:%M')
@@ -1,5 +1,5 @@
1
- %h1 Мета-тэги
1
+ %h1= SiteMetaTags.model_name.human
2
2
 
3
3
  = table_for(SiteMetaTags).content(@meta_tags) do |t|
4
4
  - t.column :identifier_text
5
- - t.action ->(item){ edit_link(url_for(action: :edit, id: item.id))}
5
+ - t.edit
@@ -5,6 +5,7 @@
5
5
  = favicon_link_tag
6
6
  = stylesheet_link_tag 'admin/admin', media: 'all'
7
7
  = javascript_include_tag 'admin/admin'
8
+ = yield :js
8
9
  = csrf_meta_tags
9
10
  = yield(:head)
10
11
  :css
@@ -31,6 +32,10 @@
31
32
  .wrapper
32
33
  .page-wrapper#content
33
34
  = yield
35
+ #modal.modal.fade{role: 'dialog', tabindex: '-1'}
36
+ .modal-dialog.modal-lg{role: 'document'}
37
+ .modal-content
38
+ = yield :modal
34
39
 
35
40
  :javascript
36
41
  $(function () {
@@ -39,6 +44,13 @@
39
44
  PhotoUploader.addUploadListener();
40
45
  };
41
46
  addUploadListener();
47
+
42
48
  window.NestedFormCallbacks = window.NestedFormCallbacks || [];
43
49
  window.NestedFormCallbacks.push(addUploadListener);
50
+
51
+ window.EditableColumnCallbacks = window.EditableColumnCallbacks || [];
52
+ window.EditableColumnCallbacks.push(addUploadListener);
53
+
54
+ window.RemoteModalCallbacks = window.RemoteModalCallbacks || [];
55
+ window.RemoteModalCallbacks.push(addUploadListener);
44
56
  });
@@ -2,16 +2,9 @@
2
2
  .well.well-lg
3
3
  %h3
4
4
  = link_to section.name.html_safe, section.path
5
- - if section.counter
5
+ - if section.show_menu_counter? && section.counter
6
6
  &nbsp;
7
7
  %span.badge.badge-primary
8
8
  = section.counter.call
9
9
  - if section.description
10
- %p= section.description
11
- - if section.creation_path
12
- = link_to section.creation_path, class: 'btn btn-success' do
13
- %i.glyphicon.glyphicon-plus
14
- &nbsp;
15
- = t('admin.common.new')
16
-
17
-
10
+ %p= section.description
data/coalla-cms.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "coalla/cms/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'coalla/cms/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'coalla-cms'
@@ -16,19 +16,17 @@ Gem::Specification.new do |s|
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
- s.require_paths = ["lib"]
19
+ s.require_paths = ['lib']
20
20
 
21
- s.add_dependency 'railties', '~> 4.0'
22
- s.add_dependency 'rails', '~> 4.0'
23
- s.add_dependency 'devise'
24
- s.add_dependency 'haml'
25
- s.add_dependency 'coffee-rails'
26
- s.add_dependency 'sass-rails'
27
- s.add_dependency 'coalla-deploy', '~> 0.1'
21
+ s.add_dependency 'rails', '~> 5.0'
28
22
  s.add_dependency 'jquery-rails'
23
+ s.add_dependency 'listen'
29
24
  s.add_dependency 'jquery-ui-rails'
30
25
  s.add_dependency 'jquery-timepicker-addon-rails'
31
26
  s.add_dependency 'js-routes'
27
+ s.add_dependency 'devise'
28
+ s.add_dependency 'haml'
29
+ s.add_dependency 'sass-rails'
32
30
  s.add_dependency 'carrierwave'
33
31
  s.add_dependency 'ckeditor'
34
32
  s.add_dependency 'mini_magick'
@@ -37,6 +35,7 @@ Gem::Specification.new do |s|
37
35
  s.add_dependency 'rmagick'
38
36
  s.add_dependency 'will_paginate'
39
37
  s.add_dependency 'standalone_typograf', '~> 3.0.2'
40
- s.add_dependency 'meta-tags', '~> 2.1.0'
38
+ s.add_dependency 'meta-tags', '~> 2.4.0'
41
39
 
40
+ s.required_ruby_version = '>= 2.0.0'
42
41
  end
@@ -0,0 +1,44 @@
1
+ module Coalla
2
+ class ActionsColumnDefinition < ColumnDefinition
3
+ def initialize
4
+ self.title = I18n.t('admin.common.actions')
5
+ @actions = []
6
+ end
7
+
8
+ def cols
9
+ @cols || @actions.size % 2 + @actions.size / 2
10
+ end
11
+
12
+ def col_class
13
+ "col-xs-#{cols}"
14
+ end
15
+
16
+ def cols=(value)
17
+ @cols = value
18
+ end
19
+
20
+ def value(item, context = self)
21
+ @actions.collect do |action|
22
+ options = action.second
23
+ if options[:if]
24
+ context.instance_exec(item, &action.first) if options[:if].call(item)
25
+ else
26
+ context.instance_exec(item, &action.first)
27
+ end
28
+ end.compact.join(' ').html_safe
29
+ end
30
+
31
+ def action(method, options = {})
32
+ @actions << case method
33
+ when :edit
34
+ [->(item) { edit_link(url_for(action: :edit, id: item)) }, options.merge(action_name: :edit)]
35
+ when :delete
36
+ [->(item) { delete_link(url_for(action: :destroy, id: item)) }, options.merge(action_name: :destroy)]
37
+ when Proc
38
+ [method, options]
39
+ else
40
+ raise "unsupported method: #{method.inspect}"
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,86 @@
1
+ #encoding: utf-8
2
+ module Coalla
3
+ class AdminStructure
4
+ Section = Struct.new(:name, :path, :icon, :description, :counter, :show_menu_counter, :creation_path, :section_name) do
5
+
6
+ def show_menu_counter?
7
+ show_menu_counter.present?
8
+ end
9
+
10
+ end
11
+
12
+ Separator = Struct.new(:title)
13
+
14
+ CONFIG_FILE_NAME = 'structure.rb'
15
+
16
+ attr_accessor :sections
17
+
18
+ def initialize(controller, routes)
19
+ @controller = controller
20
+ @sections = []
21
+ self.class.include(routes.url_helpers)
22
+ load_sections_from_config
23
+ end
24
+
25
+ def menu_items
26
+ dashboard_item = Section.new(I18n.t('admin.common.dashboard'), admin_dashboard_path, 'glyphicon glyphicon-align-left')
27
+ [dashboard_item] + @sections
28
+ end
29
+
30
+ def sections
31
+ @sections.find_all { |section| section.is_a?(Section) }
32
+ end
33
+
34
+ private
35
+
36
+ def load_sections_from_config
37
+ config_path = Rails.root.join('config', CONFIG_FILE_NAME).to_s
38
+ if File.exist?(config_path)
39
+ instance_eval(File.read(config_path), config_path)
40
+ end
41
+ end
42
+
43
+ # Options:
44
+ # creation_path - false or path string
45
+ def section(section_reference, options = {})
46
+ path = options.delete(:path)
47
+ icon = options.delete(:icon)
48
+ description = options.delete(:description)
49
+ counter = options.delete(:counter)
50
+ show_menu_counter = options.delete(:show_menu_counter)
51
+ creation_path = options.delete(:creation_path)
52
+ if section_reference.is_a?(Class)
53
+ section_name = section_reference.model_name.human
54
+ path = send("admin_#{section_reference.model_name.route_key}_path") unless path
55
+ counter = ->() { section_reference.count } unless counter
56
+ creation_path = send("new_admin_#{section_reference.model_name.singular}_path") if creation_path.nil?
57
+ else
58
+ section_name = section_reference
59
+ end
60
+ return unless policy.section_enabled?(options[:section_name], options)
61
+ @sections << Section.new(section_name, path, icon, description, counter, show_menu_counter, creation_path, options[:section_name])
62
+ end
63
+
64
+ def lookup_section(section_references = I18n.t('activerecord.models.lookup'), category = nil, options = {})
65
+ default_options = {path: send('admin_lookups_index_path', category: category),
66
+ icon: 'glyphicon glyphicon-wrench',
67
+ description: ''}.merge(options)
68
+ section(section_references, default_options)
69
+ end
70
+
71
+ def meta_tags_section(section_references = I18n.t('activerecord.models.meta_tags'), options = {})
72
+ default_options = {path: send('admin_meta_tags_path'),
73
+ icon: 'glyphicon glyphicon-tag',
74
+ description: ''}.merge(options)
75
+ section(section_references, default_options)
76
+ end
77
+
78
+ def separator(title)
79
+ @sections << Separator.new(title)
80
+ end
81
+
82
+ def policy
83
+ @controller.policy
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,9 @@
1
+ module Coalla
2
+ class ColumnDefinition
3
+ attr_accessor :title, :cols, :col_class, :value_extractor, :align, :sort, :edit
4
+
5
+ def value(item, context = self)
6
+ self.value_extractor.call(item)
7
+ end
8
+ end
9
+ end