coalla-cms 0.4.4.3 → 0.5.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/Gemfile.lock +91 -84
- data/Rakefile +2 -2
- data/app/assets/javascripts/admin/admin.js +45 -117
- data/app/assets/javascripts/admin/photo_uploader.js +1 -10
- data/app/assets/javascripts/admin/vendor/jquery-ui-timepicker-addon-ru.js +39 -37
- data/app/assets/stylesheets/admin/admin.scss +5 -1
- data/app/controllers/admin/image_upload_controller.rb +1 -1
- data/app/controllers/admin/lookups_controller.rb +9 -4
- data/app/controllers/admin/notifier_controller.rb +7 -0
- data/app/controllers/admin/site_meta_tags_controller.rb +43 -0
- data/app/controllers/concerns/page_meta_tags.rb +71 -0
- data/app/helpers/admin/lookup_helper.rb +23 -0
- data/app/helpers/common_helper.rb +6 -0
- data/app/helpers/lookup_helper.rb +41 -14
- data/app/helpers/twitter_builder_helper.rb +7 -7
- data/app/helpers/twitter_form_builder.rb +9 -3
- data/app/models/lookup.rb +22 -0
- data/app/models/site_meta_tags.rb +16 -0
- data/app/uploaders/meta_tags_image_uploader.rb +5 -0
- data/app/utils/admin_structure.rb +17 -2
- data/app/views/admin/base/_sort.haml +3 -3
- data/app/views/admin/common/_file_upload_template.haml +8 -4
- data/app/views/admin/common/_header.html.haml +5 -4
- data/app/views/admin/common/_image_upload_template.html.haml +1 -1
- data/app/views/admin/common/_slides.html.haml +1 -1
- data/app/views/admin/home/dashboard.html.haml +1 -1
- data/app/views/admin/lookups/_form.html.haml +2 -8
- data/app/views/admin/lookups/edit.html.haml +1 -1
- data/app/views/admin/lookups/index.html.haml +2 -2
- data/app/views/admin/lookups/types/_boolean.haml +1 -0
- data/app/views/admin/lookups/types/_enum.haml +1 -0
- data/app/views/admin/lookups/types/_file.haml +3 -0
- data/app/views/admin/lookups/types/_float.haml +1 -0
- data/app/views/admin/lookups/types/_integer.haml +1 -0
- data/app/views/admin/lookups/types/_memo.haml +1 -0
- data/app/views/admin/lookups/types/_string.haml +1 -0
- data/app/views/admin/lookups/types/_wysiwyg.haml +1 -0
- data/app/views/admin/site_meta_tags/_form.html.haml +22 -0
- data/app/views/admin/site_meta_tags/edit.html.haml +5 -0
- data/app/views/admin/site_meta_tags/index.html.haml +5 -0
- data/app/views/layouts/admin.html.haml +10 -4
- data/app/views/structure/_section.haml +2 -1
- data/coalla-cms.gemspec +2 -0
- data/lib/coalla/cms/version.rb +1 -1
- data/lib/coalla/orm/page_slider.rb +3 -1
- data/lib/coalla/orm/relation.rb +7 -4
- data/lib/generators/coalla/cms/create_admin_administrators_generator.rb +29 -0
- data/lib/generators/coalla/cms/create_markup_generator.rb +30 -0
- data/lib/generators/coalla/cms/init_generator.rb +33 -37
- data/lib/generators/coalla/cms/lookups/install_generator.rb +17 -6
- data/lib/generators/coalla/cms/lookups/templates/migration.rb +4 -0
- data/lib/generators/coalla/cms/market/templates/controllers/products_controller.rb +1 -1
- data/lib/generators/coalla/cms/market/templates/controllers/properties_controller.rb +1 -1
- data/lib/generators/coalla/cms/meta_tags/install_generator.rb +58 -0
- data/lib/generators/coalla/cms/meta_tags/templates/migration.rb +23 -0
- data/lib/generators/coalla/cms/news/templates/views/new.haml.erb +1 -1
- data/lib/generators/coalla/cms/setup_admin_generator.rb +10 -7
- data/lib/generators/coalla/cms/setup_routes_generator.rb +1 -0
- data/lib/generators/coalla/cms/templates/assets.rb +2 -4
- data/lib/generators/coalla/cms/templates/controllers/admin/administrators_controller.rb +55 -0
- data/lib/generators/coalla/cms/templates/controllers/admin/base_controller.rb.erb +2 -2
- data/lib/generators/coalla/cms/templates/controllers/markup_controller.rb.erb +2 -0
- data/lib/generators/coalla/cms/templates/initializers/carrierwave.rb +47 -0
- data/lib/generators/coalla/cms/templates/locales/activerecord.en.yml +16 -0
- data/lib/generators/coalla/cms/templates/locales/activerecord.ru.yml +29 -0
- data/lib/generators/coalla/cms/templates/locales/admin.en.yml +27 -0
- data/lib/generators/coalla/cms/templates/locales/admin.ru.yml +27 -0
- data/lib/generators/coalla/cms/templates/views/admin/administrators/_form.html.haml +9 -0
- data/lib/generators/coalla/cms/templates/views/admin/administrators/edit.html.haml +5 -0
- data/lib/generators/coalla/cms/templates/views/admin/administrators/index.html.haml +15 -0
- data/lib/generators/coalla/cms/templates/views/admin/administrators/new.html.haml +4 -0
- 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/new.html.haml.erb +1 -1
- data/lib/generators/coalla/cms/templates/views/administrators/sessions/new.html.haml +3 -3
- metadata +102 -87
- data/lib/generators/coalla/cms/templates/activerecord.ru.yml +0 -13
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-blockquote.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h1.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h2.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h3.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h4.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h5.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-h6.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-p.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/lbl-pre.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/wymiframe.css +0 -276
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/iframe/default/wymiframe.html +0 -26
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/jquery.wymeditor.js +0 -4819
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/lang/en.js +0 -45
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/lang/ru.js +0 -55
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/plugins/imageupload/icons.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/plugins/imageupload/jquery.wymeditor.imageupload.js +0 -150
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +0 -91
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/plugins/resizable/readme.txt +0 -124
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/compact/icons.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/compact/skin.css +0 -134
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/compact/skin.js +0 -35
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/default/icons.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/default/skin.css +0 -341
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/default/skin.js +0 -40
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/images/bg.header.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/skin.css +0 -131
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/minimal/skin.js +0 -30
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/COPYING +0 -674
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/README +0 -27
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/images/bg.header.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/images/icons.silver.gif +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/skin.css +0 -297
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/silver/skin.js +0 -61
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/twopanels/icons.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/twopanels/skin.css +0 -134
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/twopanels/skin.js +0 -39
- data/lib/generators/coalla/cms/wysiwyg/templates/wymeditor/skins/wymeditor_icon.png +0 -0
- data/lib/generators/coalla/cms/wysiwyg/wymeditor_generator.rb +0 -17
- /data/lib/generators/coalla/cms/templates/{devise.ru.yml → locales/devise.ru.yml} +0 -0
@@ -3,7 +3,12 @@ module Admin
|
|
3
3
|
class LookupsController < BaseController
|
4
4
|
|
5
5
|
def index
|
6
|
-
@
|
6
|
+
@category = params[:category]
|
7
|
+
@lookups = Lookup.where(category: @category).order(:code, :created_at)
|
8
|
+
if @lookups.blank? && @category.present?
|
9
|
+
redirect_to admin_lookups_index_path
|
10
|
+
return
|
11
|
+
end
|
7
12
|
end
|
8
13
|
|
9
14
|
def new
|
@@ -13,7 +18,7 @@ module Admin
|
|
13
18
|
def create
|
14
19
|
@lookup = Lookup.new(params[:lookup])
|
15
20
|
if @lookup.save
|
16
|
-
redirect_to
|
21
|
+
redirect_to admin_lookups_index_path(category: @lookup.category)
|
17
22
|
else
|
18
23
|
render :new
|
19
24
|
end
|
@@ -30,7 +35,7 @@ module Admin
|
|
30
35
|
def update
|
31
36
|
@lookup = Lookup.find(params[:id])
|
32
37
|
if @lookup.update_attributes(params[:lookup].permit!)
|
33
|
-
redirect_to
|
38
|
+
redirect_to admin_lookups_index_path(category: @lookup.category)
|
34
39
|
else
|
35
40
|
render :edit
|
36
41
|
end
|
@@ -39,7 +44,7 @@ module Admin
|
|
39
44
|
def destroy
|
40
45
|
@lookup = Lookup.find(params[:id])
|
41
46
|
@lookup.destroy
|
42
|
-
redirect_to
|
47
|
+
redirect_to admin_lookups_index_path(category: @lookup.category)
|
43
48
|
end
|
44
49
|
|
45
50
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Admin
|
2
|
+
|
3
|
+
class SiteMetaTagsController < BaseController
|
4
|
+
|
5
|
+
def index
|
6
|
+
@meta_tags = SiteMetaTags.order(:created_at)
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@meta_tags = SiteMetaTags.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@meta_tags = SiteMetaTags.new(params[:site_meta_tags].permit!)
|
15
|
+
if @meta_tags.save
|
16
|
+
redirect_to admin_meta_tags_path
|
17
|
+
else
|
18
|
+
render :new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
@meta_tags = SiteMetaTags.find(params[:id])
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
@meta_tags = SiteMetaTags.find(params[:id])
|
28
|
+
if @meta_tags.update_attributes(params[:site_meta_tags].permit!)
|
29
|
+
redirect_to admin_meta_tags_path
|
30
|
+
else
|
31
|
+
render :edit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
@meta_tags = SiteMetaTags.find(params[:id])
|
37
|
+
@meta_tags.destroy
|
38
|
+
redirect_to admin_meta_tags_path
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module PageMetaTags
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
helper_method :current_url
|
6
|
+
|
7
|
+
|
8
|
+
def set_page_meta_tags(options={})
|
9
|
+
id = options.delete(:identifier)
|
10
|
+
|
11
|
+
tags = {
|
12
|
+
site: tag_value(:site, id),
|
13
|
+
title: title_for(tag_value(:title, id)),
|
14
|
+
description: tag_value(:description, id),
|
15
|
+
image: tag_value(:image, id),
|
16
|
+
url: tag_value(:url, id) || current_url,
|
17
|
+
|
18
|
+
og: {
|
19
|
+
title: title_for(tag_value(:title, id, true)).last || defaults.site,
|
20
|
+
description: tag_value(:description, id, true),
|
21
|
+
image: tag_value(:image, id, true),
|
22
|
+
url: tag_value(:url, id, true) || current_url,
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
tags.deep_merge!(options)
|
27
|
+
|
28
|
+
set_meta_tags(tags)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def tag_value(tag_name, identifier, og = false)
|
34
|
+
variants = []
|
35
|
+
|
36
|
+
og_tag_name = "og_#{tag_name}".to_sym if og
|
37
|
+
|
38
|
+
variants << page_tags(identifier).send(:try, og_tag_name) if og
|
39
|
+
variants << page_tags(identifier).send(:try, tag_name)
|
40
|
+
variants << defaults.send(:try, og_tag_name) if og
|
41
|
+
variants << defaults.send(:try, tag_name)
|
42
|
+
|
43
|
+
if tag_name == :image
|
44
|
+
variants = variants.map { |v| URI.join(view_context.root_url, v.try(:url, :main)).to_s if v.try(:url, :main).present? }
|
45
|
+
end
|
46
|
+
|
47
|
+
result = variants.detect(&:present?)
|
48
|
+
return if result.blank?
|
49
|
+
result.html_safe
|
50
|
+
end
|
51
|
+
|
52
|
+
def title_for(title)
|
53
|
+
[title].flatten
|
54
|
+
end
|
55
|
+
|
56
|
+
def current_url
|
57
|
+
request.original_url
|
58
|
+
end
|
59
|
+
|
60
|
+
def defaults
|
61
|
+
@default_tags ||= SiteMetaTags.default_tags
|
62
|
+
end
|
63
|
+
|
64
|
+
def page_tags(identifier)
|
65
|
+
return if identifier.blank?
|
66
|
+
|
67
|
+
@page_tags ||= {}
|
68
|
+
@page_tags[identifier] ||= SiteMetaTags.find_by(identifier: identifier)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Admin
|
2
|
+
module LookupHelper
|
3
|
+
def tooltip_lookup_data(lookup)
|
4
|
+
if lookup.try(:tooltip).present?
|
5
|
+
{toggle: 'tooltip', placement: 'top', title: lookup.tooltip}
|
6
|
+
else
|
7
|
+
{}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def format_lookup(lookup)
|
12
|
+
if %w(string memo wysiwyg integer float).include?(lookup.type_code)
|
13
|
+
raw(truncate(strip_tags(lookup.value), length: 200))
|
14
|
+
elsif lookup.type_code == 'boolean'
|
15
|
+
lookup.value == '1' ? '<i class="glyphicon glyphicon-check"></i>'.html_safe : ''
|
16
|
+
elsif lookup.type_code == 'file'
|
17
|
+
lookup.file.try(:file).try(:filename) || ''
|
18
|
+
elsif lookup.type_code == 'enum'
|
19
|
+
enum_lookup_text(lookup.code)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'standalone_typograf'
|
2
|
+
|
1
3
|
module CommonHelper
|
2
4
|
|
3
5
|
def copyright(start_year)
|
@@ -13,4 +15,8 @@ module CommonHelper
|
|
13
15
|
'display: none;' + style
|
14
16
|
end
|
15
17
|
|
18
|
+
def ty(text)
|
19
|
+
::StandaloneTypograf::Typograf.new(text, mode: :html).prepare.html_safe
|
20
|
+
end
|
21
|
+
|
16
22
|
end
|
@@ -1,40 +1,67 @@
|
|
1
1
|
module LookupHelper
|
2
2
|
|
3
|
-
def lookup
|
4
|
-
_lookup
|
3
|
+
def lookup(code, default = nil, &block)
|
4
|
+
_lookup(code, 'string', default, &block)
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
7
|
+
def integer_lookup(code, default = nil, &block)
|
8
|
+
_lookup(code, 'integer', default, &block).to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
def float_lookup(code, default = nil, &block)
|
12
|
+
_lookup(code, 'float', default, &block).to_f
|
13
|
+
end
|
14
|
+
|
15
|
+
def boolean_lookup(code, default = nil, &block)
|
16
|
+
_lookup(code, 'boolean', default, &block) == '1'
|
17
|
+
end
|
18
|
+
|
19
|
+
def enum_lookup_value(code, default = nil, &block)
|
20
|
+
_lookup(code, 'enum', default, &block).to_sym
|
21
|
+
end
|
22
|
+
|
23
|
+
def file_lookup(code)
|
24
|
+
Lookup.find_by(code: code, type_code: 'file')
|
25
|
+
end
|
26
|
+
|
27
|
+
def enum_lookup_text(code)
|
28
|
+
value = enum_lookup_value(code)
|
29
|
+
return if value.blank?
|
30
|
+
l = Lookup.where(code: code, type_code: 'enum').first
|
31
|
+
l.value_options[value]
|
32
|
+
end
|
33
|
+
|
34
|
+
def memo_lookup(code, default = nil, &block)
|
8
35
|
sf(unsafe_memo_lookup(code, default, &block))
|
9
36
|
end
|
10
37
|
|
11
|
-
def unsafe_memo_lookup
|
12
|
-
_lookup
|
38
|
+
def unsafe_memo_lookup(code, default = nil, &block)
|
39
|
+
_lookup(code, 'memo', default, &block)
|
13
40
|
end
|
14
41
|
|
15
|
-
def wysiwyg_lookup
|
16
|
-
raw(_lookup
|
42
|
+
def wysiwyg_lookup(code, default = nil, &block)
|
43
|
+
raw(_lookup(code, 'wysiwyg', default, &block))
|
17
44
|
end
|
18
45
|
|
19
|
-
def lookup_name
|
46
|
+
def lookup_name(code)
|
20
47
|
t("lookups.#{code}")
|
21
48
|
end
|
22
49
|
|
23
|
-
def sf
|
50
|
+
def sf(text)
|
24
51
|
h(text).gsub("\n", "<br/>").html_safe
|
25
52
|
end
|
26
53
|
|
27
54
|
private
|
28
55
|
|
29
|
-
def _lookup
|
56
|
+
def _lookup(code, type, default, &block)
|
30
57
|
l = Lookup.where(code: code, type_code: type).first
|
31
58
|
return l.value if l
|
32
59
|
|
33
60
|
value = if block.present?
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
61
|
+
capture(self, &block)
|
62
|
+
else
|
63
|
+
default
|
64
|
+
end
|
38
65
|
value = value.strip if value
|
39
66
|
|
40
67
|
l = Lookup.create!(code: code, value: value, type_code: type)
|
@@ -15,7 +15,7 @@ module TwitterBuilderHelper
|
|
15
15
|
class ActionsColumnDefinition < ColumnDefinition
|
16
16
|
|
17
17
|
def initialize
|
18
|
-
self.title = '
|
18
|
+
self.title = I18n.t('admin.common.actions')
|
19
19
|
@actions = []
|
20
20
|
end
|
21
21
|
|
@@ -201,30 +201,30 @@ module TwitterBuilderHelper
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def create_link path
|
204
|
-
content = "<i class='glyphicon glyphicon-plus'></i>  
|
204
|
+
content = "<i class='glyphicon glyphicon-plus'></i> #{I18n.t('admin.common.new')}".html_safe
|
205
205
|
link_to content, path, class: 'btn btn-success'
|
206
206
|
end
|
207
207
|
|
208
208
|
def sort_link path
|
209
|
-
content = "<i class='glyphicon glyphicon-random'></i>  
|
209
|
+
content = "<i class='glyphicon glyphicon-random'></i> #{I18n.t('admin.common.sort')}".html_safe
|
210
210
|
link_to content, path, class: 'btn btn-primary'
|
211
211
|
end
|
212
212
|
|
213
213
|
def edit_link path
|
214
214
|
content = "<i class='glyphicon glyphicon-pencil'></i>".html_safe
|
215
|
-
link_to content, path, class: 'btn btn-default btn-xs', title: '
|
215
|
+
link_to content, path, class: 'btn btn-default btn-xs', title: I18n.t('admin.common.edit')
|
216
216
|
end
|
217
217
|
|
218
218
|
def delete_link path
|
219
219
|
content = "<i class='glyphicon glyphicon-trash'></i>".html_safe
|
220
|
-
link_to content, path, data: {confirm: '
|
220
|
+
link_to content, path, data: {confirm: I18n.t('admin.common.sure')}, method: :delete, class: 'btn btn-danger btn-xs', title: I18n.t('admin.common.delete')
|
221
221
|
end
|
222
222
|
|
223
|
-
def cancel_action path, name = '
|
223
|
+
def cancel_action path, name = I18n.t('admin.common.cancel')
|
224
224
|
link_to name, path, class: 'btn btn-default'
|
225
225
|
end
|
226
226
|
|
227
|
-
def back_action name = '
|
227
|
+
def back_action name = I18n.t('admin.common.return'), path = back_uri
|
228
228
|
link_to name, path, class: 'btn btn-default'
|
229
229
|
end
|
230
230
|
|
@@ -79,11 +79,16 @@ class TwitterFormBuilder < ActionView::Helpers::FormBuilder
|
|
79
79
|
string(method, merge_options({data: {'calendar-datetime' => true}, div_class: 'col-md-3', value: value}, options))
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
82
|
+
def time(method, options = {})
|
83
|
+
value = object.try(method).try(:strftime, '%H:%M')
|
84
|
+
string(method, merge_options({data: {'calendar-time' => true}, div_class: 'col-md-2', value: value}, options))
|
85
|
+
end
|
86
|
+
|
87
|
+
def save text = I18n.t('admin.common.save')
|
83
88
|
submit text, name: :save, class: 'btn btn-success wymupdate'
|
84
89
|
end
|
85
90
|
|
86
|
-
def apply text = '
|
91
|
+
def apply text = I18n.t('admin.common.apply')
|
87
92
|
submit text, name: :apply, class: 'btn btn-default wymupdate'
|
88
93
|
end
|
89
94
|
|
@@ -138,10 +143,11 @@ class TwitterFormBuilder < ActionView::Helpers::FormBuilder
|
|
138
143
|
end
|
139
144
|
|
140
145
|
def multi_field(relation_name, options = {})
|
146
|
+
reflection = self.object.class.reflections[relation_name] || self.object.class.reflections[relation_name.to_s]
|
141
147
|
options = {search_field_name: :name,
|
142
148
|
show_all_on_focus: false,
|
143
149
|
use_cache: true,
|
144
|
-
relation_model_name:
|
150
|
+
relation_model_name: reflection.klass.model_name.singular}.merge!(options)
|
145
151
|
options[:source] ||= @template.admin_autocomplete_path(options[:relation_model_name], options[:search_field_name])
|
146
152
|
string "#{relation_name}_tokens", title: self.object.class.human_attribute_name(relation_name),
|
147
153
|
data: {
|
data/app/models/lookup.rb
CHANGED
@@ -2,5 +2,27 @@ class Lookup < ActiveRecord::Base
|
|
2
2
|
|
3
3
|
validates_presence_of :code
|
4
4
|
validates_uniqueness_of :code
|
5
|
+
validates_numericality_of :value, only_integer: true, if: ->(lookup) { lookup.type_code == 'integer' }
|
6
|
+
validates_numericality_of :value, if: ->(lookup) { lookup.type_code == 'float' }
|
7
|
+
|
8
|
+
mount_uploader :file, FileUploader
|
9
|
+
|
10
|
+
def value_options
|
11
|
+
attr_value = read_attribute(:value_options)
|
12
|
+
|
13
|
+
if attr_value.present?
|
14
|
+
ActiveSupport::JSON.decode(attr_value).with_indifferent_access
|
15
|
+
else
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def value_options=(value)
|
21
|
+
write_attribute(:value_options, ActiveSupport::JSON.encode(value).to_s) if value.present?
|
22
|
+
end
|
23
|
+
|
24
|
+
def select_options
|
25
|
+
value_options.map { |key, value| [value, key] }
|
26
|
+
end
|
5
27
|
|
6
28
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class SiteMetaTags < ActiveRecord::Base
|
2
|
+
self.table_name = 'meta_tags'
|
3
|
+
|
4
|
+
mount_uploader :image, MetaTagsImageUploader
|
5
|
+
mount_uploader :og_image, MetaTagsImageUploader
|
6
|
+
|
7
|
+
validates_uniqueness_of :identifier
|
8
|
+
|
9
|
+
def self.default_tags
|
10
|
+
where(identifier: :default).first
|
11
|
+
end
|
12
|
+
|
13
|
+
def identifier_text
|
14
|
+
identifier == 'default' ? 'Тэги по умолчанию' : identifier
|
15
|
+
end
|
16
|
+
end
|
@@ -17,13 +17,14 @@ class AdminStructure
|
|
17
17
|
|
18
18
|
attr_accessor :sections
|
19
19
|
|
20
|
-
def initialize
|
20
|
+
def initialize(controller)
|
21
|
+
@controller = controller
|
21
22
|
@sections = []
|
22
23
|
load_sections_from_config
|
23
24
|
end
|
24
25
|
|
25
26
|
def menu_items
|
26
|
-
dashboard_item = Section.new('
|
27
|
+
dashboard_item = Section.new(I18n.t('admin.common.dashboard'), admin_dashboard_path, 'glyphicon glyphicon-align-left')
|
27
28
|
[dashboard_item] + @sections
|
28
29
|
end
|
29
30
|
|
@@ -60,6 +61,20 @@ class AdminStructure
|
|
60
61
|
@sections << Section.new(section_name, path, icon, description, counter, show_menu_counter, creation_path)
|
61
62
|
end
|
62
63
|
|
64
|
+
def lookup_section(section_references = 'Настройки', category = nil, options = {})
|
65
|
+
default_options = options.merge(path: send('admin_lookups_index_path', category: category),
|
66
|
+
icon: 'glyphicon glyphicon-wrench',
|
67
|
+
description: 'Раздел содержит различные настройки и тексты')
|
68
|
+
section(section_references, default_options)
|
69
|
+
end
|
70
|
+
|
71
|
+
def meta_tags_section(section_references = 'Мета-тэги', options = {})
|
72
|
+
default_options = options.merge(path: send('admin_meta_tags_path'),
|
73
|
+
icon: 'glyphicon glyphicon-tag',
|
74
|
+
description: 'Раздел содержит мета-тэги')
|
75
|
+
section(section_references, default_options)
|
76
|
+
end
|
77
|
+
|
63
78
|
def separator(title)
|
64
79
|
@sections << Separator.new(title)
|
65
80
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
- model_name = controller_name.classify.constantize
|
2
2
|
.page-header
|
3
3
|
%h1
|
4
|
-
|
4
|
+
#{t('admin.common.sort')}
|
5
5
|
%small
|
6
|
-
|
6
|
+
#{t('admin.common.sort_title')}
|
7
7
|
|
8
8
|
= form_tag action: :sort, method: :post do
|
9
9
|
%table.table.table-striped
|
@@ -16,7 +16,7 @@
|
|
16
16
|
= hidden_field_tag "#{controller_name}[#{sortable.id}]", sortable.id
|
17
17
|
%td= sortable.send(attribute_name)
|
18
18
|
= actions do
|
19
|
-
= submit_tag '
|
19
|
+
= submit_tag t('admin.common.save'), class: 'btn btn-success'
|
20
20
|
= cancel_action action: :index
|
21
21
|
|
22
22
|
:javascript
|
@@ -1,14 +1,18 @@
|
|
1
1
|
- file = f.object.send field
|
2
|
+
- file_label = I18n.t("activerecord.attributes.#{f.object.class.model_name.singular}.#{field}_name")
|
2
3
|
.control-group{data: {file_upload_container: true}}
|
3
4
|
.controls.alert.alert-info.span3
|
4
|
-
%p{id: "#{field}-name-label", style:
|
5
|
+
%p{id: "#{field}-name-label", style: 'margin-bottom: 10px;', data: {file_upload_title: true, label: file_label}}
|
5
6
|
- if file.file
|
6
7
|
= file.file.filename
|
7
8
|
= surround '(', ')' do
|
8
9
|
= number_to_human_size(file.file.size)
|
9
10
|
- else
|
10
|
-
=
|
11
|
+
= file_label
|
11
12
|
|
12
|
-
.custom-file{style: 'cursor: pointer; height:
|
13
|
+
.custom-file{style: 'cursor: pointer; height: 34px; overflow: hidden; position: relative; width: 140px;'}
|
13
14
|
.btn.btn-primary{style: 'position: absolute; left: 0; right: 0;'} Загрузить
|
14
|
-
= f.file_field field, class: 'span5', style:
|
15
|
+
= f.file_field field, class: 'span5', style: 'font-size: 100px; opacity: 0; position: absolute;', data: {file_upload: true}
|
16
|
+
= link_to '#', class: 'btn btn-danger', style:'position: absolute; top: 20px; right: 30px;', data: {file_remove_btn: true} do
|
17
|
+
%i.glyphicon.glyphicon-trash
|
18
|
+
= f.hidden_field "remove_#{field}", data: {file_remove_flag: true}
|
@@ -5,7 +5,7 @@
|
|
5
5
|
%span.icon-bar
|
6
6
|
%span.icon-bar
|
7
7
|
%span.icon-bar
|
8
|
-
= link_to '
|
8
|
+
= link_to t('admin.common.main_page'), root_path, class: 'navbar-brand'
|
9
9
|
|
10
10
|
#navbar-collapse.navbar-collapse.collapse
|
11
11
|
%nav.nav.navbar-nav.side-nav{role: "navigation"}
|
@@ -14,14 +14,15 @@
|
|
14
14
|
%ul.nav.navbar-nav.navbar-right
|
15
15
|
%li
|
16
16
|
%p.navbar-text
|
17
|
-
|
17
|
+
= t('admin.common.logged_in_as')
|
18
18
|
|
19
19
|
= link_to '#', class: 'navbar-link' do
|
20
20
|
%i.glyphicon.glyphicon-user
|
21
21
|
|
22
|
-
|
22
|
+
= current_administrator.email
|
23
23
|
%li
|
24
24
|
= link_to destroy_administrator_session_path, method: Devise.sign_out_via, class: 'navbar-link' do
|
25
25
|
%i.glyphicon.glyphicon-log-out
|
26
26
|
|
27
|
-
|
27
|
+
= t('admin.auth.sign_out')
|
28
|
+
|
@@ -32,7 +32,7 @@
|
|
32
32
|
.col-md-4.col-lg-2
|
33
33
|
.col-md-8.col-lg-10
|
34
34
|
.custom-file{style: 'position: relative; display: inline-block; width: 140px; height: 34px; overflow: hidden;'}
|
35
|
-
.btn.btn-primary{style: 'position: absolute; left: 0; right: 0;'}
|
35
|
+
.btn.btn-primary{style: 'position: absolute; left: 0; right: 0;'}= t('admin.common.upload')
|
36
36
|
= file_field_tag :image, id: nil, data: {file: true, path: upload_uri,
|
37
37
|
container: container, version: version, free_size: free_size},
|
38
38
|
style: 'position: absolute; font-size: 100px; opacity: 0; cursor: pointer;'
|
@@ -9,7 +9,7 @@
|
|
9
9
|
= title if defined? title
|
10
10
|
.custom-file{style: "position: relative; display: inline-block; margin: 0 0 -9px 15px; width: 140px; height: 34px; overflow: hidden;"}
|
11
11
|
.btn.btn-primary{style: "position: absolute; left: 0; right: 0;"}
|
12
|
-
|
12
|
+
= t('admin.common.upload')
|
13
13
|
= file_field_tag "#{slider_type_prefix}_image[]", id: nil, multiple: multiple, data: {file: true, path: send("admin_upload_#{slider_class.to_s.underscore}_path", {slider_type: slider_type, master_object_id: object_id})},
|
14
14
|
style:" position: absolute; font-size: 100px; opacity: 0; cursor: pointer;"
|
15
15
|
.pictograms.row.sortable{data:{object:object_id, slider: slider_type}}
|
@@ -2,15 +2,9 @@
|
|
2
2
|
= f.errors
|
3
3
|
= flash_messages
|
4
4
|
|
5
|
-
=
|
6
|
-
- if @lookup.type_code == 'string'
|
7
|
-
= f.string :value
|
8
|
-
- elsif @lookup.type_code == 'memo'
|
9
|
-
= f.textarea :value, rows: 5
|
10
|
-
- elsif @lookup.type_code == 'wysiwyg'
|
11
|
-
= f.ckeditor :value
|
5
|
+
= render "admin/lookups/types/#{@lookup.type_code}", f: f
|
12
6
|
|
13
7
|
= fixed_actions do
|
14
8
|
= f.save
|
15
|
-
= cancel_action
|
9
|
+
= cancel_action admin_lookups_index_path(category: @lookup.category)
|
16
10
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
%h1 Тексты
|
1
|
+
%h1= @category.present? ? t("lookups.category.#{@category}") : 'Тексты'
|
2
2
|
|
3
3
|
= table_for(Lookup).content(@lookups) do |t|
|
4
4
|
- t.column :code, cols: 4, format: lambda {|e| lookup_name(e)}
|
5
|
-
- t.column :
|
5
|
+
- t.column :self, cols: 7, format: ->(lookup){ format_lookup(lookup) }, title: 'Значение'
|
6
6
|
- t.action :edit
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checkbox :value, checked: @lookup.value == '1', data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.combobox :value, @lookup.select_options, data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.string :value, div_class: 'col-md-2', data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.string :value, div_class: 'col-md-2', data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.textarea :value, rows: 5, data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.string :value, data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.ckeditor :value, data: tooltip_lookup_data(@lookup)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
= twitter_form_for [:admin, @meta_tags], as: :site_meta_tags, url: url_for(action: :update, id: @meta_tags.id) do |f|
|
2
|
+
= f.errors
|
3
|
+
= flash_messages
|
4
|
+
|
5
|
+
= f.static_text :identifier_text
|
6
|
+
|
7
|
+
= f.string :site
|
8
|
+
= f.string :title
|
9
|
+
= f.textarea :description, rows: 4
|
10
|
+
= f.image_upload :image, version: :main, size: '500x500', upload_path: admin_upload_image_path(image_class: :site_meta_tags, field: :image)
|
11
|
+
= f.string :url
|
12
|
+
|
13
|
+
= field_set 'Open Graph' do
|
14
|
+
= f.string :og_title
|
15
|
+
= f.textarea :og_description, rows: 4
|
16
|
+
= f.image_upload :og_image, version: :main, size: '500x500', upload_path: admin_upload_image_path(image_class: :site_meta_tags, field: :og_image)
|
17
|
+
= f.string :og_url
|
18
|
+
|
19
|
+
= fixed_actions do
|
20
|
+
= f.save
|
21
|
+
= cancel_action admin_meta_tags_path
|
22
|
+
|