activeadmin-selleo-cms 0.0.32 → 0.0.33
Sign up to get free protection for your applications and to get access to all the features.
- data/app/admin/activeadmin_selleo_cms/asset.rb +1 -1
- data/app/admin/activeadmin_selleo_cms/attachment.rb +23 -0
- data/app/admin/activeadmin_selleo_cms/image.rb +23 -0
- data/app/admin/activeadmin_selleo_cms/page.rb +13 -10
- data/app/admin/activeadmin_selleo_cms/related_item.rb +1 -1
- data/app/admin/activeadmin_selleo_cms/section_translation.rb +50 -0
- data/app/assets/javascripts/activeadmin-selleo-cms/custom.js +49 -17
- data/app/assets/stylesheets/activeadmin-selleo-cms/custom.css +38 -1
- data/app/assets/stylesheets/activeadmin-selleo-cms/jquery-ui.css +38 -31
- data/app/helpers/pages_helper.rb +38 -0
- data/app/models/activeadmin_selleo_cms/asset.rb +3 -0
- data/app/models/activeadmin_selleo_cms/layout.rb +12 -12
- data/app/models/activeadmin_selleo_cms/locale.rb +1 -0
- data/app/models/activeadmin_selleo_cms/page.rb +9 -3
- data/app/models/activeadmin_selleo_cms/section.rb +31 -7
- data/app/modules/activeadmin_selleo_cms/content_translation.rb +6 -0
- data/app/views/admin/assets/destroy.js.erb +3 -1
- data/app/views/admin/attachments/_attachment.html.haml +6 -0
- data/app/views/admin/attachments/_form.html.haml +14 -0
- data/app/views/admin/attachments/create.js.erb +14 -0
- data/app/views/admin/attachments/edit.html.erb +9 -0
- data/app/views/admin/attachments/new.html.erb +1 -0
- data/app/views/admin/attachments/update.js.erb +2 -0
- data/app/views/admin/images/_form.html.haml +10 -0
- data/app/views/admin/images/_image.html.haml +6 -0
- data/app/views/admin/images/create.js.erb +14 -0
- data/app/views/admin/images/edit.html.erb +8 -0
- data/app/views/admin/images/new.html.erb +1 -0
- data/app/views/admin/images/update.js.erb +3 -0
- data/app/views/admin/pages/_form.html.haml +35 -5
- data/app/views/admin/pages/_translated_fields.html.haml +33 -68
- data/app/views/admin/pages/update.js.erb +1 -0
- data/app/views/admin/related_items/_form.html.haml +10 -0
- data/app/views/admin/related_items/_related_item.html.haml +5 -0
- data/app/views/admin/related_items/create.js.erb +6 -0
- data/app/views/admin/related_items/destroy.js.erb +3 -1
- data/app/views/admin/related_items/edit.html.erb +6 -0
- data/app/views/admin/related_items/update.js.erb +3 -0
- data/app/views/admin/section_translations/_attachments_form.html.haml +14 -0
- data/app/views/admin/section_translations/_form.html.haml +36 -0
- data/app/views/admin/section_translations/_images_form.html.haml +11 -0
- data/app/views/admin/section_translations/_related_items_form.html.haml +10 -0
- data/app/views/admin/section_translations/edit.html.erb +1 -0
- data/app/views/admin/sections/_form.html.haml +1 -1
- data/config/initializers/active_admin.rb +3 -1
- data/config/initializers/acts_as_list.rb +1 -0
- data/config/locales/cms.en.yml +30 -1
- data/db/migrate/20130531154539_add_position_to_assets.rb +9 -0
- data/db/migrate/20130601141800_add_position_to_related_items.rb +9 -0
- data/lib/activeadmin-selleo-cms/version.rb +1 -1
- metadata +67 -6
@@ -0,0 +1,23 @@
|
|
1
|
+
ActiveAdmin.register ActiveadminSelleoCms::Attachment, as: 'Attachment' do
|
2
|
+
menu false
|
3
|
+
|
4
|
+
form :partial => "form"
|
5
|
+
|
6
|
+
controller do
|
7
|
+
respond_to :html, :js
|
8
|
+
|
9
|
+
def edit
|
10
|
+
super do |format|
|
11
|
+
format.html { render action: :edit, layout: false }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
super do |format|
|
17
|
+
format.html { render action: :new, layout: false }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
ActiveAdmin.register ActiveadminSelleoCms::Image, as: 'Image' do
|
2
|
+
menu false
|
3
|
+
|
4
|
+
form :partial => "form"
|
5
|
+
|
6
|
+
controller do
|
7
|
+
respond_to :html, :js
|
8
|
+
|
9
|
+
def edit
|
10
|
+
super do |format|
|
11
|
+
format.html { render action: :edit, layout: false }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
super do |format|
|
17
|
+
format.html { render action: :new, layout: false }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -53,19 +53,19 @@ ActiveAdmin.register ActiveadminSelleoCms::Page, as: "Page", sort_order: "lft_as
|
|
53
53
|
end
|
54
54
|
|
55
55
|
action_item only:[:show] do
|
56
|
-
link_to "
|
56
|
+
link_to t("active_admin.edit_model", model: nil), edit_admin_page_path(page.id)
|
57
57
|
end
|
58
58
|
|
59
59
|
action_item only:[:index] do
|
60
|
-
link_to "
|
60
|
+
link_to t("active_admin.new_model", model: active_admin_config.resource_label), new_admin_page_path
|
61
61
|
end
|
62
62
|
|
63
63
|
action_item only:[:show,:edit] do
|
64
|
-
link_to "
|
64
|
+
link_to t("active_admin.cms.view_on_site"), page.url, target: '_blank'
|
65
65
|
end
|
66
66
|
|
67
67
|
action_item only:[:show,:edit] do
|
68
|
-
link_to "
|
68
|
+
link_to t("active_admin.delete_model", model: nil), admin_page_path(page.id), method: 'DELETE', confirm: 'Are you sure?'
|
69
69
|
end
|
70
70
|
|
71
71
|
collection_action :reorder, :method => :get do
|
@@ -98,23 +98,26 @@ ActiveAdmin.register ActiveadminSelleoCms::Page, as: "Page", sort_order: "lft_as
|
|
98
98
|
else
|
99
99
|
update! do |success, failure|
|
100
100
|
success.html { redirect_to admin_page_path(@page.id) }
|
101
|
+
success.js { render action: :update }
|
101
102
|
failure.html { render action: :edit }
|
102
103
|
end
|
103
104
|
end
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
sidebar "
|
108
|
+
sidebar I18n.t("active_admin.cms.navigation"), only: [:edit, :new] do
|
109
|
+
h4 link_to t("active_admin.cms.general_options"), '#id-general-options'
|
110
|
+
h4 link_to t("active_admin.cms.metadata"), '#id-meta-data'
|
108
111
|
ol do
|
109
|
-
if resource.
|
110
|
-
resource.
|
111
|
-
li link_to
|
112
|
+
if resource.sections.any?
|
113
|
+
resource.sections.order(:name).each do |section|
|
114
|
+
li link_to section.name.titleize, "#id-#{section.name}", onclick: "$('#id-#{section.name}').effect('highlight')"
|
112
115
|
end
|
113
116
|
else
|
114
|
-
li "
|
117
|
+
li t("active_admin.cms.no_sections_defined")
|
115
118
|
end
|
116
119
|
end
|
120
|
+
button_to_function(t("active_admin.cms.save_changes"), "savePage()")
|
117
121
|
end
|
118
122
|
|
119
|
-
|
120
123
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
ActiveAdmin.register ActiveadminSelleoCms::Section::Translation, as: 'SectionTranslation' do
|
2
|
+
menu false
|
3
|
+
|
4
|
+
form :partial => "form"
|
5
|
+
|
6
|
+
controller do
|
7
|
+
respond_to :html
|
8
|
+
|
9
|
+
def edit
|
10
|
+
super do |format|
|
11
|
+
format.html { render action: :edit, layout: false }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
create! do |success, failure|
|
17
|
+
success.html { redirect_to admin_sections_path }
|
18
|
+
failure.html { render action: :new }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def update
|
23
|
+
update! do |success, failure|
|
24
|
+
success.html { redirect_to admin_sections_path }
|
25
|
+
failure.html { render action: :edit }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
member_action :sort_assets, :method => :post do
|
32
|
+
if params[:asset]
|
33
|
+
_collection = resource.assets
|
34
|
+
_hash = params[:asset]
|
35
|
+
elsif params[:related_item]
|
36
|
+
_collection = resource.related_items
|
37
|
+
_hash = params[:related_item]
|
38
|
+
else
|
39
|
+
_collection = []
|
40
|
+
_hash = {}
|
41
|
+
end
|
42
|
+
|
43
|
+
_collection.each do |sortable|
|
44
|
+
sortable.position = _hash.index(sortable.id.to_s) + 1
|
45
|
+
sortable.save
|
46
|
+
end
|
47
|
+
|
48
|
+
render nothing: true
|
49
|
+
end
|
50
|
+
end
|
@@ -16,22 +16,44 @@ var slug = function(str) {
|
|
16
16
|
return str;
|
17
17
|
};
|
18
18
|
|
19
|
-
function
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}).error(function(){
|
24
|
-
alert('Could not delete attachment');
|
25
|
-
});
|
19
|
+
function fileManager(url){
|
20
|
+
$('#file-manager').html('').load(url, function() {
|
21
|
+
$(this).dialog("option", "position", ['center', 'center'] );
|
22
|
+
}).dialog('open');
|
26
23
|
}
|
27
24
|
|
28
|
-
function
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
25
|
+
function delete_asset(asset_id) {
|
26
|
+
if(confirm('Are you sure?')) {
|
27
|
+
$.ajax({
|
28
|
+
url: '/admin/assets/' + asset_id + '.js',
|
29
|
+
type: 'DELETE'
|
30
|
+
}).error(function(){
|
31
|
+
alert('An error occured while trying to delete the asset');
|
32
|
+
});
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
function edit_attachment(attachment_id) {
|
37
|
+
fileManager('/admin/attachments/' + attachment_id + '/edit.js');
|
38
|
+
}
|
39
|
+
|
40
|
+
function edit_image(image_id) {
|
41
|
+
fileManager('/admin/images/' + image_id + '/edit.js');
|
42
|
+
}
|
43
|
+
|
44
|
+
function edit_related_item(related_item_id) {
|
45
|
+
fileManager('/admin/related_items/' + related_item_id + '/edit.js');
|
46
|
+
}
|
47
|
+
|
48
|
+
function delete_related_item(related_item_id) {
|
49
|
+
if(confirm('Are you sure?')) {
|
50
|
+
$.ajax({
|
51
|
+
url: '/admin/related_items/' + related_item_id + '.js',
|
52
|
+
type: 'DELETE'
|
53
|
+
}).error(function(){
|
54
|
+
alert('An error occured while trying to delete the related item');
|
55
|
+
});
|
56
|
+
}
|
35
57
|
}
|
36
58
|
|
37
59
|
function update_positions(pagesArray) {
|
@@ -85,8 +107,6 @@ $(function(){
|
|
85
107
|
$(this).closest('fieldset').find('ol').toggle();
|
86
108
|
});
|
87
109
|
|
88
|
-
// $('i.folded').click();
|
89
|
-
|
90
110
|
$('input[multiple]').each(function(){
|
91
111
|
$(this).attr('name', $(this).attr('name').replace(/\[\]$/, '') );
|
92
112
|
});
|
@@ -94,4 +114,16 @@ $(function(){
|
|
94
114
|
$( ".sortable" ).sortable();
|
95
115
|
$( ".sortable" ).disableSelection();
|
96
116
|
|
97
|
-
});
|
117
|
+
});
|
118
|
+
|
119
|
+
function savePage(){
|
120
|
+
form = $('form[id*="_page_"]');
|
121
|
+
$.ajax( {
|
122
|
+
type: "POST",
|
123
|
+
url: form.attr('action'),
|
124
|
+
data: form.serialize(),
|
125
|
+
success: function(resp) {
|
126
|
+
$('body').effect('highlight')
|
127
|
+
}
|
128
|
+
} );
|
129
|
+
}
|
@@ -60,4 +60,41 @@ table#translations td.key {
|
|
60
60
|
|
61
61
|
.sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
|
62
62
|
.sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
|
63
|
-
.sortable li span { position: absolute; margin-left: -1.3em; }
|
63
|
+
.sortable li span { position: absolute; margin-left: -1.3em; }
|
64
|
+
|
65
|
+
div.ui-dialog {
|
66
|
+
border: 1px solid #d0d0d0 !important;
|
67
|
+
}
|
68
|
+
|
69
|
+
#file-manager form fieldset.assets {
|
70
|
+
padding: 5px;
|
71
|
+
}
|
72
|
+
|
73
|
+
#file-manager form fieldset.assets ol li {
|
74
|
+
-moz-border-radius-topleft: 4px;
|
75
|
+
-webkit-border-top-left-radius: 4px;
|
76
|
+
-khtml-border-top-left-radius: 4px;
|
77
|
+
border-top-left-radius: 4px;
|
78
|
+
border: 1px solid #ccc;
|
79
|
+
margin: 5px;
|
80
|
+
overflow: hidden;
|
81
|
+
max-width: 100px;
|
82
|
+
float: left;
|
83
|
+
}
|
84
|
+
|
85
|
+
#file-manager h3.upload-file {
|
86
|
+
margin: 5px 0 10px 0;
|
87
|
+
}
|
88
|
+
|
89
|
+
#file-manager h3.manage-files {
|
90
|
+
margin-top: 10px;
|
91
|
+
margin-bottom: 5px;
|
92
|
+
}
|
93
|
+
|
94
|
+
#sidebar h4 {
|
95
|
+
margin-bottom: 0.25em;
|
96
|
+
}
|
97
|
+
|
98
|
+
.fltr {
|
99
|
+
float: right;
|
100
|
+
}
|
@@ -470,7 +470,7 @@ body .ui-tooltip { border-width: 2px; }
|
|
470
470
|
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
|
471
471
|
|
472
472
|
/* Overlays */
|
473
|
-
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .
|
473
|
+
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .7;filter:Alpha(Opacity=70)/*{opacityOverlay}*/; }
|
474
474
|
.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
|
475
475
|
|
476
476
|
li.hidden {
|
@@ -480,38 +480,45 @@ li.hidden {
|
|
480
480
|
|
481
481
|
/*******************************************************************************
|
482
482
|
* Language Tabs
|
483
|
-
*
|
484
483
|
*******************************************************************************/
|
485
|
-
.ui-
|
486
|
-
border: none;
|
487
|
-
}
|
488
|
-
.ui-widget-header {
|
489
|
-
border: 0;
|
490
|
-
border-bottom: 1px solid #ccc;
|
491
|
-
background: none;
|
492
|
-
}
|
493
|
-
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
|
494
|
-
border: 1px solid #ccc;
|
495
|
-
}
|
496
|
-
.ui-tabs {
|
497
|
-
padding: 0;
|
498
|
-
}
|
499
|
-
.ui-tabs .ui-tabs-panel {
|
484
|
+
.language-tabs .ui-tabs-panel {
|
500
485
|
padding: 0;
|
501
|
-
padding-top: 1px;
|
502
|
-
}
|
503
|
-
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl, {
|
504
|
-
-moz-border-radius-bottomleft: 0;
|
505
|
-
-webkit-border-bottom-left-radius: 0;
|
506
|
-
border-bottom-left-radius: 0;
|
507
|
-
}
|
508
|
-
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
|
509
|
-
-moz-border-radius-bottomright: 0;
|
510
|
-
-webkit-border-bottom-right-radius: 0;
|
511
|
-
border-bottom-right-radius: 0;
|
512
486
|
}
|
513
487
|
|
514
|
-
|
515
|
-
|
488
|
+
.ui-sortable-placeholder {
|
489
|
+
float: left;
|
490
|
+
}
|
516
491
|
|
517
|
-
|
492
|
+
/*.language-tabs.ui-widget-content {*/
|
493
|
+
/*border: none;*/
|
494
|
+
/*}*/
|
495
|
+
/*.language-tabs.ui-widget-header {*/
|
496
|
+
/*border: 0;*/
|
497
|
+
/*border-bottom: 1px solid #ccc;*/
|
498
|
+
/*background: none;*/
|
499
|
+
/*}*/
|
500
|
+
/*.language-tabs.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {*/
|
501
|
+
/*border: 1px solid #ccc;*/
|
502
|
+
/*}*/
|
503
|
+
/*.language-tabs.ui-tabs {*/
|
504
|
+
/*padding: 0;*/
|
505
|
+
/*}*/
|
506
|
+
/*.language-tabs.ui-tabs .ui-tabs-panel {*/
|
507
|
+
/*padding: 0;*/
|
508
|
+
/*padding-top: 1px;*/
|
509
|
+
/*}*/
|
510
|
+
/*.language-tabs.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl, {*/
|
511
|
+
/*-moz-border-radius-bottomleft: 0;*/
|
512
|
+
/*-webkit-border-bottom-left-radius: 0;*/
|
513
|
+
/*border-bottom-left-radius: 0;*/
|
514
|
+
/*}*/
|
515
|
+
/*.language-tabs.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {*/
|
516
|
+
/*-moz-border-radius-bottomright: 0;*/
|
517
|
+
/*-webkit-border-bottom-right-radius: 0;*/
|
518
|
+
/*border-bottom-right-radius: 0;*/
|
519
|
+
/*}*/
|
520
|
+
|
521
|
+
/*div.index_as_list > ol.ui-sortable { list-style-type: disc; margin: 0; padding: 0; zoom: 1; }*/
|
522
|
+
/*div.index_as_list > ol.ui-sortable > li > ol { list-style-type: circle; margin: 0; padding: 0; zoom: 1; padding-left: 20px; }*/
|
523
|
+
|
524
|
+
/*div.index_as_list > ol.ui-sortable > li { margin: 0 5px 5px 5px; padding: 3px; width: 90%; }*/
|
data/app/helpers/pages_helper.rb
CHANGED
@@ -39,4 +39,42 @@ module PagesHelper
|
|
39
39
|
body += link_to(t("active_admin.cms.edit"), edit_admin_section_path(section)) if current_user and current_user.respond_to? :admin? and current_user.admin?
|
40
40
|
body.html_safe
|
41
41
|
end
|
42
|
+
|
43
|
+
def menu(options={})
|
44
|
+
options[:ul] ||= {}
|
45
|
+
options[:li] ||= {}
|
46
|
+
|
47
|
+
content_tag :ul, class: options[:ul][:class] do
|
48
|
+
ActiveadminSelleoCms::Page.published.show_in_menu.where(parent_id: options[:root]).reorder("lft ASC").collect{ |page|
|
49
|
+
classes = [options[:li][:class], options[:li][:selected]].compact.join(" ") if page == @page
|
50
|
+
if block_given?
|
51
|
+
concat(content_tag :li, yield(page), class: classes)
|
52
|
+
else
|
53
|
+
concat(content_tag :li, link_to_page(page), class: classes)
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def locales(options={}, &block)
|
60
|
+
options[:ul] ||= {}
|
61
|
+
options[:li] ||= {}
|
62
|
+
locales_scope = ActiveadminSelleoCms::Locale.enabled
|
63
|
+
locales_scope = locales_scope.exclude(I18n.locale) unless options[:current_locale]
|
64
|
+
|
65
|
+
content_tag :ul, class: options[:ul][:class] do
|
66
|
+
locales_scope.collect{ |locale|
|
67
|
+
classes = [options[:li][:class], options[:li][:selected]].compact.join(" ") if locale == I18n.locale
|
68
|
+
if block_given?
|
69
|
+
concat(content_tag :li, yield(locale), class: classes)
|
70
|
+
else
|
71
|
+
concat(content_tag :li, link_to_locale(locale.code.to_s.upcase, locale, @page), class: classes)
|
72
|
+
end
|
73
|
+
}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def root
|
78
|
+
page_path(I18n.locale, ActiveadminSelleoCms::Page.root)
|
79
|
+
end
|
42
80
|
end
|
@@ -3,6 +3,8 @@ module ActiveadminSelleoCms
|
|
3
3
|
attr_protected :id
|
4
4
|
attr_accessor :cover_width, :cover_height, :cover_resize_method
|
5
5
|
|
6
|
+
acts_as_list :scope => [:assetable_type, :assetable_id]
|
7
|
+
|
6
8
|
belongs_to :assetable, polymorphic: true
|
7
9
|
|
8
10
|
has_attached_file :cover,
|
@@ -12,6 +14,7 @@ module ActiveadminSelleoCms
|
|
12
14
|
:default_style => :normal
|
13
15
|
|
14
16
|
validates_attachment_size :cover, :less_than => 10.megabytes
|
17
|
+
validates_presence_of :assetable
|
15
18
|
|
16
19
|
def url(format=nil)
|
17
20
|
data.url(format)
|
@@ -40,18 +40,18 @@ module ActiveadminSelleoCms
|
|
40
40
|
attr_accessor :name, :type, :toolbar, :width, :height, :resize_method, :cover_width, :cover_height, :cover_resize_method
|
41
41
|
|
42
42
|
def initialize(node)
|
43
|
-
@name
|
44
|
-
@type
|
45
|
-
@attachments
|
46
|
-
@attachment
|
47
|
-
@related
|
48
|
-
@toolbar
|
49
|
-
@width
|
50
|
-
@height
|
51
|
-
@resize_method
|
52
|
-
@cover_width
|
53
|
-
@cover_height
|
54
|
-
@cover_resize_method
|
43
|
+
@name = node.attributes["name"].content
|
44
|
+
@type = node.attributes["data-type"] ? node.attributes["data-type"].content : 'ckeditor'
|
45
|
+
@attachments = node.attributes["data-attachments"].present?
|
46
|
+
@attachment = node.attributes["data-attachment"].present?
|
47
|
+
@related = node.attributes["data-related"].present?
|
48
|
+
@toolbar = node.attributes["data-toolbar"] ? node.attributes["data-toolbar"].content : 'Minimal'
|
49
|
+
@width = node.attributes["data-width"] ? node.attributes["data-width"].content : 640
|
50
|
+
@height = node.attributes["data-height"] ? node.attributes["data-height"].content : 480
|
51
|
+
@resize_method = node.attributes["data-resize-method"] ? node.attributes["data-resize-method"].content : "#"
|
52
|
+
@cover_width = node.attributes["data-cover-width"] ? node.attributes["data-cover-width"].content : 140
|
53
|
+
@cover_height = node.attributes["data-cover-height"] ? node.attributes["data-cover-height"].content : 199
|
54
|
+
@cover_resize_method = node.attributes["data-cover-resize-method"] ? node.attributes["data-cover-resize-method"].content : ">"
|
55
55
|
end
|
56
56
|
|
57
57
|
def text?
|
@@ -7,6 +7,7 @@ module ActiveadminSelleoCms
|
|
7
7
|
|
8
8
|
scope :enabled, where(enabled: true)
|
9
9
|
scope :available_locales, enabled
|
10
|
+
scope :exclude, ->(codes){ where("code NOT IN (?)", Array(codes)) }
|
10
11
|
|
11
12
|
scope :popular, where(code: %w(da de el en es fr hu it lt lv nl no pl pt ru sk sl sv))
|
12
13
|
|
@@ -70,6 +70,12 @@ module ActiveadminSelleoCms
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
def create_missing_sections
|
74
|
+
section_names.each do |section_name|
|
75
|
+
sections.create(name: section_name) unless sections.detect{|section| section.name == section_name}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
73
79
|
def to_s
|
74
80
|
title
|
75
81
|
end
|
@@ -95,7 +101,7 @@ module ActiveadminSelleoCms
|
|
95
101
|
end
|
96
102
|
|
97
103
|
def breadcrumb
|
98
|
-
self_and_ancestors.map(
|
104
|
+
self_and_ancestors.map{|p| p.translated_attribute(:title, I18n.default_locale)}.join(' » ').html_safe
|
99
105
|
end
|
100
106
|
|
101
107
|
def url(options={locale: true})
|
@@ -136,8 +142,8 @@ module ActiveadminSelleoCms
|
|
136
142
|
|
137
143
|
belongs_to :activeadmin_selleo_cms_page, class_name: 'ActiveadminSelleoCms::Page'
|
138
144
|
|
139
|
-
validates :title, presence: true, if: ->(translation){ translation.locale.eql? I18n.
|
140
|
-
validates :slug, presence: true, format: { with: /^[a-z0-9\-_]+$/i }, if: ->(translation) { translation.locale.eql? I18n.
|
145
|
+
validates :title, presence: true, if: ->(translation){ translation.locale.eql? I18n.default_locale }
|
146
|
+
validates :slug, presence: true, format: { with: /^[a-z0-9\-_]+$/i }, if: ->(translation) { translation.locale.eql? I18n.default_locale }
|
141
147
|
validate do |translation|
|
142
148
|
if slug.present? and translation.class.joins(:activeadmin_selleo_cms_page).
|
143
149
|
where(locale: locale, slug: slug, activeadmin_selleo_cms_pages: { parent_id: activeadmin_selleo_cms_page.parent_id }).all.reject{|p| p == self}.any?
|
@@ -29,7 +29,7 @@ module ActiveadminSelleoCms
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def image
|
32
|
-
if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.image}
|
32
|
+
@image ||= if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.image}
|
33
33
|
current_translation.image
|
34
34
|
else
|
35
35
|
nil
|
@@ -37,7 +37,7 @@ module ActiveadminSelleoCms
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def attachment
|
40
|
-
if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.attachment}
|
40
|
+
@attachment ||= if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.attachment}
|
41
41
|
current_translation.attachment
|
42
42
|
else
|
43
43
|
nil
|
@@ -45,25 +45,49 @@ module ActiveadminSelleoCms
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def images
|
48
|
-
if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.images.any? }
|
48
|
+
@images ||= if current_translation = translations.with_locales(I18n.fallbacks[I18n.locale]).detect{|t| t.images.any? }
|
49
49
|
current_translation.images
|
50
50
|
else
|
51
51
|
[]
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
def to_s
|
56
|
+
section_definition = sectionable.layout.find_section(name) if sectionable and sectionable.respond_to? :layout
|
57
|
+
if section_definition
|
58
|
+
if section_definition.text?
|
59
|
+
body.to_s.html_safe
|
60
|
+
elsif section_definition.image?
|
61
|
+
image ? image.url : ""
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def layout_section
|
67
|
+
@layout_section ||= layout ? layout.find_section(name) : nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def method_missing(sym, *args)
|
71
|
+
if layout_section and layout_section.respond_to? sym
|
72
|
+
layout_section.send(sym)
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
55
78
|
class Translation
|
56
79
|
attr_protected :id
|
57
80
|
|
58
|
-
has_many :
|
59
|
-
has_many :
|
81
|
+
has_many :assets, as: :assetable, dependent: :destroy
|
82
|
+
has_many :attachments, as: :assetable, dependent: :destroy, order: 'position ASC'
|
83
|
+
has_many :images, as: :assetable, dependent: :destroy, order: 'position ASC'
|
60
84
|
has_one :attachment, as: :assetable, dependent: :destroy
|
61
85
|
has_one :image, as: :assetable, dependent: :destroy
|
62
|
-
has_many :related_items, as: :relatable, dependent: :destroy
|
86
|
+
has_many :related_items, as: :relatable, dependent: :destroy, order: 'position ASC'
|
63
87
|
|
64
88
|
accepts_nested_attributes_for :attachments, reject_if: lambda{ |a| a[:data].blank? }
|
65
89
|
accepts_nested_attributes_for :attachment, reject_if: lambda{ |a| a[:data].blank? }
|
66
|
-
accepts_nested_attributes_for :image, reject_if: lambda{ |i| i[:data].blank? }
|
90
|
+
accepts_nested_attributes_for :image, reject_if: lambda{ |i| i[:data].blank? and i[:caption].blank? }
|
67
91
|
accepts_nested_attributes_for :images, reject_if: lambda{ |i| i[:data].blank? }
|
68
92
|
accepts_nested_attributes_for :related_items, reject_if: lambda{ |ri| ri[:related_url].blank? and ri[:page_id].blank? }
|
69
93
|
end
|
@@ -14,6 +14,12 @@ module ActiveadminSelleoCms
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def create_missing_translations
|
18
|
+
Locale.available_locale_codes.each do |locale_code|
|
19
|
+
translations.create(locale: locale_code) unless translations.detect{|t| t.locale == locale_code}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
17
23
|
def translated_attribute(attr, locale)
|
18
24
|
_locale = I18n.locale
|
19
25
|
I18n.locale = locale
|
@@ -0,0 +1,6 @@
|
|
1
|
+
%li{"id" => "asset_#{attachment.id}", "data-asset-id" => attachment.id}
|
2
|
+
.attachment
|
3
|
+
.cover-image= attachment.cover.exists? ? image_tag(attachment.cover.url, style: "max-width:100px") : image_tag("http://placehold.it/100x80&text=No%20cover", style: "max-width:100px")
|
4
|
+
.file-name= attachment.caption.blank? ? attachment.data_file_name : attachment.caption
|
5
|
+
= link_to_function t("active_admin.cms.edit"), "edit_attachment(#{attachment.id})"
|
6
|
+
= link_to_function t("active_admin.cms.delete"), "delete_asset(#{attachment.id})", class: 'fltr'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
= semantic_form_for [:admin, resource], remote: true, html: { multipart: true } do |form|
|
2
|
+
|
3
|
+
-#= @page.errors.full_messages
|
4
|
+
|
5
|
+
= form.inputs id: 'attachment_fields' do
|
6
|
+
= form.input :data, hint: resource.data_file_name
|
7
|
+
= form.input :assetable_type, as: :hidden, value: resource.assetable_type
|
8
|
+
= form.input :assetable_id, as: :hidden, value: resource.assetable_id
|
9
|
+
= form.input :cover_width, as: :hidden, value: resource.assetable.activeadmin_selleo_cms_section.cover_width
|
10
|
+
= form.input :cover_height, as: :hidden, value: resource.assetable.activeadmin_selleo_cms_section.cover_height
|
11
|
+
= form.input :cover_resize_method, as: :hidden, value: resource.assetable.activeadmin_selleo_cms_section.cover_resize_method
|
12
|
+
= form.input :cover, hint: (resource.cover.exists? ? image_tag(resource.cover.url) : t("active_admin.cms.file_manager.no_cover"))
|
13
|
+
= form.input :caption
|
14
|
+
= form.actions :submit
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% if resource.valid? %>
|
2
|
+
<% if resource.assetable.activeadmin_selleo_cms_section.attachments? %>
|
3
|
+
$('<%= j render partial: 'attachment', locals: { attachment: resource } %>').appendTo('ol#assets');
|
4
|
+
$('#new_attachment').replaceWith('<%= j render partial: '/admin/section_translations/attachments_form', locals: { attachment: ActiveadminSelleoCms::Attachment.new, section_translation: resource.assetable } %>');
|
5
|
+
<% elsif resource.assetable.activeadmin_selleo_cms_section.attachment? %>
|
6
|
+
$('#file-manager').html('<%= j render partial: 'form' %>');
|
7
|
+
<% end %>
|
8
|
+
<% else %>
|
9
|
+
<% if resource.assetable.activeadmin_selleo_cms_section.attachments? %>
|
10
|
+
$('#new_attachment').replaceWith('<%= j render partial: '/admin/section_translations/attachments_form', locals: { attachment: resource, section_translation: resource.assetable } %>');
|
11
|
+
<% elsif resource.assetable.activeadmin_selleo_cms_section.attachment? %>
|
12
|
+
$('#file-manager').html('<%= j render partial: 'form' %>');
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|