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.
- checksums.yaml +8 -8
- data/Gemfile +1 -1
- data/app/assets/javascripts/admin/admin.js +233 -34
- data/app/assets/stylesheets/admin/admin.scss +1 -2
- data/app/assets/stylesheets/admin/vendor/bootstrap.min.css +6242 -4
- data/app/assets/stylesheets/admin/vendor/token-input-bootstrap.scss +144 -0
- data/app/controllers/admin/autocomplete_controller.rb +3 -1
- data/app/controllers/admin/base_controller.rb +35 -0
- data/app/controllers/concerns/admin/editable_columns.rb +55 -0
- data/app/controllers/concerns/admin/sortable_columns.rb +16 -0
- data/app/controllers/{admin/sortable_controller.rb → concerns/admin/sortable_models.rb} +1 -5
- data/app/helpers/admin/alerts_helper.rb +31 -0
- data/app/helpers/admin/content_helper.rb +29 -0
- data/app/helpers/admin/form_helper.rb +50 -0
- data/app/helpers/admin/resource_helpers.rb +102 -0
- data/app/helpers/admin/search_helper.rb +44 -40
- data/app/helpers/admin/table_helper.rb +40 -0
- data/app/helpers/common_helper.rb +2 -2
- data/app/models/file_upload.rb +1 -1
- data/app/models/lookup.rb +1 -1
- data/app/models/site_meta_tags.rb +2 -2
- data/app/views/admin/common/_menu_section.haml +1 -1
- data/app/views/admin/common/_nested_fields_for.html.haml +10 -5
- data/app/views/admin/common/_nested_fields_for_element.html.haml +21 -5
- data/app/views/admin/common/_table_template.html.haml +26 -7
- data/app/views/admin/common/_upload_form.html.haml +2 -1
- data/app/views/admin/editable_columns/edit/_boolean.haml +2 -0
- data/app/views/admin/editable_columns/edit/_date.haml +2 -0
- data/app/views/admin/editable_columns/edit/_datetime.haml +3 -0
- data/app/views/admin/editable_columns/edit/_enumerize.haml +2 -0
- data/app/views/admin/editable_columns/edit/_string.haml +2 -0
- data/app/views/admin/editable_columns/edit/_text.haml +2 -0
- data/app/views/admin/editable_columns/edit/_time.haml +3 -0
- data/app/views/admin/editable_columns/edit_column.haml +8 -0
- data/app/views/admin/editable_columns/result/_boolean.haml +2 -0
- data/app/views/admin/editable_columns/result/_date.haml +1 -0
- data/app/views/admin/editable_columns/result/_datetime.haml +1 -0
- data/app/views/admin/editable_columns/result/_enumerize.haml +1 -0
- data/app/views/admin/editable_columns/result/_string.haml +1 -0
- data/app/views/admin/editable_columns/result/_text.haml +1 -0
- data/app/views/admin/editable_columns/result/_time.haml +1 -0
- data/app/views/admin/site_meta_tags/index.html.haml +2 -2
- data/app/views/layouts/admin.html.haml +12 -0
- data/app/views/structure/_section.haml +2 -9
- data/coalla-cms.gemspec +10 -11
- data/lib/coalla/builders/actions_column_definition.rb +44 -0
- data/lib/coalla/builders/admin_structure.rb +86 -0
- data/lib/coalla/builders/column_definition.rb +9 -0
- data/lib/coalla/builders/form_builder.rb +291 -0
- data/lib/coalla/builders/link_renderer.rb +43 -0
- data/lib/coalla/builders/policy.rb +30 -0
- data/lib/coalla/builders/table_builder.rb +99 -0
- data/lib/coalla/builders/table_formatter.rb +133 -0
- data/lib/coalla/builders/text_formatter.rb +22 -0
- data/lib/coalla/cms/engine.rb +3 -2
- data/lib/coalla/cms/version.rb +2 -2
- data/lib/coalla/ext/mapper.rb +7 -0
- data/lib/coalla/orm/{relation.rb → multi_field.rb} +7 -8
- data/lib/coalla/orm/page_slider.rb +2 -28
- data/lib/coalla/orm/sanitized.rb +1 -5
- data/lib/coalla/orm/sortable_association.rb +30 -0
- data/lib/coalla/uploaders/file_uploader.rb +9 -0
- data/lib/coalla/uploaders/image_uploader.rb +62 -0
- data/lib/coalla/uploaders/meta_image_uploader.rb +7 -0
- data/lib/coalla-cms.rb +10 -0
- data/lib/generators/coalla/cms/create_admin_administrators_generator.rb +5 -7
- data/lib/generators/coalla/cms/create_admin_generator.rb +9 -7
- data/lib/generators/coalla/cms/create_admin_login_view_generator.rb +4 -6
- data/lib/generators/coalla/cms/create_markup_generator.rb +2 -2
- data/lib/generators/coalla/cms/file_uploads/install_generator.rb +0 -17
- data/lib/generators/coalla/cms/file_uploads/mount_generator.rb +4 -7
- data/lib/generators/coalla/cms/image/install_generator.rb +0 -3
- data/lib/generators/coalla/cms/image/mount_generator.rb +0 -3
- data/lib/generators/coalla/cms/image/templates/mount/uploader.rb.erb +1 -1
- data/lib/generators/coalla/cms/image/templates/uploader.rb.erb +1 -1
- data/lib/generators/coalla/cms/init_generator.rb +42 -49
- data/lib/generators/coalla/cms/lookups/install_generator.rb +0 -3
- data/lib/generators/coalla/cms/meta_tags/install_generator.rb +0 -2
- data/lib/generators/coalla/cms/scaffold_generator.rb +7 -7
- data/lib/generators/coalla/cms/setup_admin_generator.rb +9 -9
- data/lib/generators/coalla/cms/setup_routes_generator.rb +3 -3
- data/lib/generators/coalla/cms/slider/init_generator.rb +1 -3
- data/lib/generators/coalla/cms/slider/templates/slider_image.rb.erb +0 -1
- data/lib/generators/coalla/cms/slider/templates/slider_image_uploader.rb.erb +1 -1
- data/lib/generators/coalla/cms/templates/.gitignore +3 -3
- data/lib/generators/coalla/cms/templates/controllers/admin/administrators_controller.rb +2 -40
- data/lib/generators/coalla/cms/templates/controllers/admin/scaffold_controller_template.rb.erb +0 -39
- data/lib/generators/coalla/cms/templates/initializers/carrierwave.rb +0 -90
- data/lib/generators/coalla/cms/templates/locales/activerecord.en.yml +14 -1
- data/lib/generators/coalla/cms/templates/views/admin/administrators/_form.html.haml +1 -1
- data/lib/generators/coalla/cms/templates/views/admin/administrators/edit.html.haml +1 -1
- data/lib/generators/coalla/cms/templates/views/admin/administrators/index.html.haml +5 -5
- data/lib/generators/coalla/cms/templates/views/admin/administrators/new.html.haml +1 -1
- data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/_form.html.haml.erb +1 -1
- data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/edit.html.haml.erb +1 -1
- data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/index.html.haml.erb +5 -5
- data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/new.html.haml.erb +1 -1
- data/lib/generators/coalla/cms/templates/views/administrators/sessions/new.html.haml +1 -1
- data/lib/generators/coalla/cms/utils/orm.rb +29 -0
- data/lib/generators/coalla/cms/utils/scaffold.rb +11 -0
- metadata +57 -100
- data/Gemfile.lock +0 -198
- data/app/assets/stylesheets/admin/vendor/token-input-facebook.patched.css +0 -126
- data/app/assets/stylesheets/admin/vendor/token-input.patched.css +0 -116
- data/app/controllers/admin/notifier_controller.rb +0 -7
- data/app/helpers/admin_helper.rb +0 -29
- data/app/helpers/nested_fields_helper.rb +0 -12
- data/app/helpers/static_text_formatter.rb +0 -25
- data/app/helpers/twitter_builder_helper.rb +0 -253
- data/app/helpers/twitter_form_builder.rb +0 -202
- data/app/uploaders/file_uploader.rb +0 -10
- data/app/uploaders/generic_image_uploader.rb +0 -75
- data/app/uploaders/meta_tags_image_uploader.rb +0 -5
- data/app/utils/admin_structure.rb +0 -82
- data/app/utils/bootstrap_link_renderer.rb +0 -40
- data/app/utils/table_helpers.rb +0 -196
- data/lib/generators/coalla/cms/market/install_generator.rb +0 -71
- data/lib/generators/coalla/cms/market/templates/controllers/categories_controller.rb +0 -47
- data/lib/generators/coalla/cms/market/templates/controllers/products_controller.rb +0 -50
- data/lib/generators/coalla/cms/market/templates/controllers/properties_controller.rb +0 -59
- data/lib/generators/coalla/cms/market/templates/market.rb +0 -5
- data/lib/generators/coalla/cms/market/templates/market.ru.yml +0 -53
- data/lib/generators/coalla/cms/market/templates/migrations/create_categories.rb +0 -15
- data/lib/generators/coalla/cms/market/templates/migrations/create_product_properties.rb +0 -18
- data/lib/generators/coalla/cms/market/templates/migrations/create_products.rb +0 -18
- data/lib/generators/coalla/cms/market/templates/migrations/create_properties.rb +0 -11
- data/lib/generators/coalla/cms/market/templates/models/category.rb +0 -36
- data/lib/generators/coalla/cms/market/templates/models/product.rb +0 -16
- data/lib/generators/coalla/cms/market/templates/models/product_property.rb +0 -14
- data/lib/generators/coalla/cms/market/templates/models/property.rb +0 -7
- data/lib/generators/coalla/cms/market/templates/views/categories/_form.html.haml +0 -10
- data/lib/generators/coalla/cms/market/templates/views/categories/edit.html.haml +0 -5
- data/lib/generators/coalla/cms/market/templates/views/categories/index.html.haml +0 -17
- data/lib/generators/coalla/cms/market/templates/views/categories/new.html.haml +0 -4
- data/lib/generators/coalla/cms/market/templates/views/products/_form.html.haml +0 -17
- data/lib/generators/coalla/cms/market/templates/views/products/_product_property_fields.html.haml +0 -13
- data/lib/generators/coalla/cms/market/templates/views/products/edit.html.haml +0 -5
- data/lib/generators/coalla/cms/market/templates/views/products/index.html.haml +0 -17
- data/lib/generators/coalla/cms/market/templates/views/products/new.html.haml +0 -4
- data/lib/generators/coalla/cms/market/templates/views/properties/_form.html.haml +0 -9
- data/lib/generators/coalla/cms/market/templates/views/properties/edit.html.haml +0 -5
- data/lib/generators/coalla/cms/market/templates/views/properties/index.html.haml +0 -15
- data/lib/generators/coalla/cms/market/templates/views/properties/new.html.haml +0 -4
- data/lib/generators/coalla/cms/news/scaffold_generator.rb +0 -50
- data/lib/generators/coalla/cms/news/templates/entity.rb.erb +0 -10
- data/lib/generators/coalla/cms/news/templates/entity_controller_template.rb.erb +0 -47
- data/lib/generators/coalla/cms/news/templates/entity_image_uploader.rb.erb +0 -7
- data/lib/generators/coalla/cms/news/templates/migration.rb.erb +0 -15
- data/lib/generators/coalla/cms/news/templates/views/_form.haml.erb +0 -16
- data/lib/generators/coalla/cms/news/templates/views/edit.haml.erb +0 -5
- data/lib/generators/coalla/cms/news/templates/views/index.haml.erb +0 -18
- data/lib/generators/coalla/cms/news/templates/views/new.haml.erb +0 -5
- data/lib/generators/coalla/cms/orm_helpers.rb +0 -31
- data/lib/generators/coalla/cms/scaffold_helper.rb +0 -11
- data/lib/generators/coalla/cms/templates/controllers/admin/base_controller.rb.erb +0 -35
- /data/{lib/generators/coalla/cms/templates/controllers/admin/home_controller.rb.erb → app/controllers/admin/home_controller.rb} +0 -0
@@ -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
|
5
|
-
|
6
|
-
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
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 |
|
6
|
-
%th{class: th_class(
|
7
|
-
|
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} <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} <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 |
|
12
|
-
|
13
|
-
=
|
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
|
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,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 @@
|
|
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')
|
@@ -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
|
|
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
|
-
|
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(
|
3
|
-
require
|
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 = [
|
19
|
+
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_dependency '
|
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.
|
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
|