caboose-cms 0.5.224 → 0.5.225
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/caboose/block_media_controller.js +131 -0
- data/app/assets/javascripts/caboose/model/bound_image_bak.js +140 -0
- data/app/assets/stylesheets/caboose/admin_block_edit_image.css.scss +117 -0
- data/app/controllers/caboose/blocks_controller.rb +16 -5
- data/app/models/caboose/block.rb +42 -3
- data/app/models/caboose/block_type.rb +1 -1
- data/app/models/caboose/media.rb +5 -0
- data/app/models/caboose/schema.rb +4 -5
- data/app/views/caboose/blocks/_file.html.erb +18 -7
- data/app/views/caboose/blocks/_image.html.erb +10 -54
- data/app/views/caboose/blocks/_image2.html.erb +69 -0
- data/app/views/caboose/blocks/admin_edit.html.erb +4 -4
- data/app/views/caboose/blocks/admin_edit_file.html.erb +73 -0
- data/app/views/caboose/blocks/admin_edit_image.html.erb +69 -0
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +8 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzhiODE1NTkwZWI3NTQ3M2RiZjZkOTVlMDUzN2NlZDYwN2JjZjZmZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDNkZmY3YTRjZWRmZjlmMWQ0MDBkNDU2YmZhYjBlN2I2ZWU4ZmIwZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTJhZmRkNGQzY2U1MzQ1ZmFjOTgxYzMxMjMxOTUyYWZjYjNmNGNkOGJkMGYy
|
10
|
+
N2VlNDQ0YjI3MDU1MWFkOWE0MDI5N2IzZDFhNjEzMWM0OTEzOGUwYWM2Yzkz
|
11
|
+
N2NmMzcwMmI4YmYyNTQ4ODBhOTYxYzY2ZmQzOWEzYmMyZDBiMjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjQwN2ViNjZlNjZlMTNkNjdjMDk5OTQyZjUxNGY1ZmQwYWU3NjYzNzc3Nzgx
|
14
|
+
YWIxODc5OWEwZWI2NWRkNTkwNTdmMzhmOTY3OTQ0NWJkM2Y0NzRlZWEyNjU0
|
15
|
+
NDc2MDVlZGExMzg5OTc5ODgzNTZhY2Y1MWUzNGVkYjg4NzMzOWM=
|
@@ -0,0 +1,131 @@
|
|
1
|
+
|
2
|
+
var BlockMediaController = function(params) { this.init(params); };
|
3
|
+
|
4
|
+
BlockMediaController.prototype = {
|
5
|
+
|
6
|
+
post_id: false,
|
7
|
+
page_id: false,
|
8
|
+
block_parent_id: false,
|
9
|
+
block_id: false,
|
10
|
+
top_cat_id: false,
|
11
|
+
cat: false,
|
12
|
+
cat_id: false,
|
13
|
+
|
14
|
+
init: function(params) {
|
15
|
+
var that = this;
|
16
|
+
for (var i in params)
|
17
|
+
this[i] = params[i];
|
18
|
+
that.refresh();
|
19
|
+
},
|
20
|
+
|
21
|
+
refresh: function()
|
22
|
+
{
|
23
|
+
var that = this;
|
24
|
+
that.refresh_categories(function() {
|
25
|
+
that.refresh_media();
|
26
|
+
});
|
27
|
+
},
|
28
|
+
|
29
|
+
refresh_categories: function(after)
|
30
|
+
{
|
31
|
+
var that = this;
|
32
|
+
$.ajax({
|
33
|
+
url: '/admin/media-categories/flat-tree',
|
34
|
+
type: 'get',
|
35
|
+
async: false,
|
36
|
+
success: function(resp) {
|
37
|
+
that.categories = resp;
|
38
|
+
if (!that.cat_id)
|
39
|
+
that.cat_id = that.categories[0].id;
|
40
|
+
that.print_categories();
|
41
|
+
if (after) after();
|
42
|
+
}
|
43
|
+
});
|
44
|
+
},
|
45
|
+
|
46
|
+
refresh_media: function()
|
47
|
+
{
|
48
|
+
var that = this;
|
49
|
+
$.ajax({
|
50
|
+
url: '/admin/media/json',
|
51
|
+
type: 'get',
|
52
|
+
async: false,
|
53
|
+
data: { media_category_id: that.cat_id },
|
54
|
+
success: function(resp) {
|
55
|
+
that.cat = resp;
|
56
|
+
that.cat_id = that.cat.id;
|
57
|
+
that.selected_media = [];
|
58
|
+
that.print_media();
|
59
|
+
}
|
60
|
+
});
|
61
|
+
},
|
62
|
+
|
63
|
+
print_categories: function()
|
64
|
+
{
|
65
|
+
var that = this;
|
66
|
+
var ul = $('<ul/>');
|
67
|
+
if (that.categories.length > 0)
|
68
|
+
{
|
69
|
+
$.each(that.categories, function(i, cat) {
|
70
|
+
var li = $('<li/>')
|
71
|
+
.addClass('category')
|
72
|
+
.attr('id', 'cat' + cat.id)
|
73
|
+
.data('media_category_id', cat.id)
|
74
|
+
.append($('<a/>').attr('href', '#').html(cat.name + ' (' + cat.media_count + ')').click(function(e) { e.preventDefault(); that.select_category($(this).parent().data('media_category_id')); }));
|
75
|
+
if (cat.id == that.cat_id)
|
76
|
+
li.addClass('selected');
|
77
|
+
ul.append(li);
|
78
|
+
});
|
79
|
+
}
|
80
|
+
else
|
81
|
+
ul = $('<p/>').html("There are no media categories.");
|
82
|
+
$('#categories').empty().append(ul);
|
83
|
+
},
|
84
|
+
|
85
|
+
print_media: function()
|
86
|
+
{
|
87
|
+
var that = this;
|
88
|
+
var ul = $('<ul/>');
|
89
|
+
if (that.cat.media.length > 0)
|
90
|
+
{
|
91
|
+
$.each(that.cat.media, function(i, m) {
|
92
|
+
var li = $('<li/>')
|
93
|
+
.attr('id', 'media' + m.id)
|
94
|
+
.addClass('media')
|
95
|
+
.data('media_id', m.id)
|
96
|
+
.click(function(e) { that.select_media($(this).data('media_id')); })
|
97
|
+
.append($('<span/>').addClass('name').html(m.name));
|
98
|
+
if (m.image_urls)
|
99
|
+
li.append($('<img/>').attr('src', m.image_urls.tiny_url));
|
100
|
+
ul.append(li);
|
101
|
+
});
|
102
|
+
}
|
103
|
+
else
|
104
|
+
ul = $('<p/>').html("This category is empty.");
|
105
|
+
$('#media').empty().append(ul);
|
106
|
+
},
|
107
|
+
|
108
|
+
//============================================================================
|
109
|
+
|
110
|
+
select_media: function(media_id)
|
111
|
+
{
|
112
|
+
var that = this;
|
113
|
+
$.ajax({
|
114
|
+
url: '/admin/' + (that.page_id ? 'pages/' + that.page_id : 'posts/' + that.post_id) + '/blocks/' + that.block_id,
|
115
|
+
type: 'put',
|
116
|
+
data: { media_id: media_id },
|
117
|
+
success: function(resp) {
|
118
|
+
window.location = '/admin/pages/' + that.page_id + '/blocks/' + that.block_parent_id + '/edit';
|
119
|
+
}
|
120
|
+
});
|
121
|
+
},
|
122
|
+
|
123
|
+
select_category: function(cat_id)
|
124
|
+
{
|
125
|
+
var that = this;
|
126
|
+
that.cat_id = cat_id;
|
127
|
+
that.print_categories();
|
128
|
+
that.refresh_media();
|
129
|
+
}
|
130
|
+
|
131
|
+
};
|
@@ -0,0 +1,140 @@
|
|
1
|
+
|
2
|
+
BoundImage = BoundControl.extend({
|
3
|
+
|
4
|
+
//el: false,
|
5
|
+
//model: false,
|
6
|
+
//attribute: false,
|
7
|
+
//binder: false,
|
8
|
+
|
9
|
+
width: 100,
|
10
|
+
style: 'medium',
|
11
|
+
authenticity_token: false,
|
12
|
+
|
13
|
+
init: function(params) {
|
14
|
+
for (var thing in params)
|
15
|
+
this[thing] = params[thing];
|
16
|
+
|
17
|
+
this.el = this.el ? this.el : this.model.name.toLowerCase() + '_' + this.model.id + '_' + this.attribute.name;
|
18
|
+
|
19
|
+
if (!this.attribute.update_url)
|
20
|
+
this.attribute.update_url = this.model.update_url;
|
21
|
+
|
22
|
+
var this2 = this;
|
23
|
+
$('#'+this.el).wrap($('<div/>')
|
24
|
+
.attr('id', this.el + '_container')
|
25
|
+
.addClass('mb_container')
|
26
|
+
.css('position', 'relative')
|
27
|
+
);
|
28
|
+
$('#'+this.el+'_container').empty();
|
29
|
+
|
30
|
+
$('#'+this.el+'_container').append($('<img/>')
|
31
|
+
.attr('src', this.attribute.value)
|
32
|
+
.css('width', this.width)
|
33
|
+
.css('float', 'left')
|
34
|
+
.css('margin-right', 10)
|
35
|
+
);
|
36
|
+
$('#'+this.el+'_container')
|
37
|
+
.append($('<form target="' + this.el + '_iframe"></form>')
|
38
|
+
.attr('id', this.el + '_form')
|
39
|
+
.attr('action', this.attribute.update_url)
|
40
|
+
.attr('method', 'post')
|
41
|
+
.attr('enctype', 'multipart/form-data')
|
42
|
+
.attr('encoding', 'multipart/form-data')
|
43
|
+
//.attr('target', this.el + '_iframe')
|
44
|
+
.on('submit', function() {
|
45
|
+
$('#'+this2.el+'_message').html("<p class='loading'>Uploading...</p>");
|
46
|
+
$('#'+this2.el+'_iframe').on('load', function() { this2.post_upload(); });
|
47
|
+
return true;
|
48
|
+
})
|
49
|
+
.append($('<input/>').attr('type', 'hidden').attr('name', 'authenticity_token').val(this.binder.authenticity_token))
|
50
|
+
.append($('<div/>')
|
51
|
+
.attr('id', this.el + '_fake_file_input')
|
52
|
+
.addClass('mb_fake_file_input')
|
53
|
+
.append($('<input/>')
|
54
|
+
.attr('type', 'button')
|
55
|
+
.attr('id', this.el + '_update_button')
|
56
|
+
.val('Update ' + this.attribute.nice_name)
|
57
|
+
.click(function() { $('#'+this2.el+'_file').click(); })
|
58
|
+
)
|
59
|
+
.append($('<input/>')
|
60
|
+
.attr('type', 'file')
|
61
|
+
.attr('id', this.el + '_file')
|
62
|
+
.attr('name', this.attribute.name)
|
63
|
+
.change(function() { $('#'+this2.el+'_form').trigger('submit'); })
|
64
|
+
)
|
65
|
+
.append($('<input/>')
|
66
|
+
.attr('type', 'submit')
|
67
|
+
.val('Submit')
|
68
|
+
)
|
69
|
+
)
|
70
|
+
);
|
71
|
+
$('#'+this.el+'_container').append($('<div/>')
|
72
|
+
.attr('id', this.el + '_message')
|
73
|
+
);
|
74
|
+
iframe = $("<iframe name=\"" + this.el + "_iframe\" id=\"" + this.el + "_iframe\" src=''></iframe>");
|
75
|
+
if (this.attribute.debug)
|
76
|
+
iframe.css('width', '100%').css('height', 600).css('background', '#fff');
|
77
|
+
else
|
78
|
+
iframe.css('width', 0).css('height', 0).css('border', 0);
|
79
|
+
$('#'+this.el+'_container').append(iframe);
|
80
|
+
$('#'+this.el+'_container').append($('<br/>').css('clear', 'both'));
|
81
|
+
|
82
|
+
var w = $('#' + this.el + '_update_button').outerWidth(true);
|
83
|
+
$('#' + this.el + '_fake_file_input').css('width', '' + w + 'px');
|
84
|
+
},
|
85
|
+
|
86
|
+
post_upload: function() {
|
87
|
+
$('#'+this.el+'_message').empty();
|
88
|
+
|
89
|
+
var str = frames[this.el+'_iframe'].document.documentElement.innerHTML;
|
90
|
+
str = str.replace(/[\s\S]*?{([\s\S]*?)/, '{$1');
|
91
|
+
str = str.substr(0, str.lastIndexOf('}')+1);
|
92
|
+
var resp = $.parseJSON(str);
|
93
|
+
if (resp.success)
|
94
|
+
{
|
95
|
+
if (resp.attributes && resp.attributes[this.attribute.name])
|
96
|
+
for (var thing in resp.attributes[this.attribute.name])
|
97
|
+
this.attribute[thing] = resp.attributes[this.attribute.name][thing];
|
98
|
+
this.attribute.value_clean = this.attribute.value;
|
99
|
+
}
|
100
|
+
|
101
|
+
if (resp.error)
|
102
|
+
this.error(resp.error);
|
103
|
+
else
|
104
|
+
{
|
105
|
+
if (this.attribute.image_refresh_delay)
|
106
|
+
{
|
107
|
+
var that = this;
|
108
|
+
setTimeout(function() { that.refresh_image(); }, this.attribute.image_refresh_delay);
|
109
|
+
}
|
110
|
+
else
|
111
|
+
{
|
112
|
+
this.refresh_image();
|
113
|
+
}
|
114
|
+
}
|
115
|
+
},
|
116
|
+
|
117
|
+
refresh_image: function() {
|
118
|
+
var src = this.attribute.value;
|
119
|
+
if (src.indexOf('?') > 0)
|
120
|
+
src = src.split('?')[0];
|
121
|
+
src = src + '?' + Math.random();
|
122
|
+
$('#'+this.el+'_container img').attr('src', src);
|
123
|
+
},
|
124
|
+
|
125
|
+
error: function(str) {
|
126
|
+
if (!$('#'+this.el+'_message').length)
|
127
|
+
{
|
128
|
+
$('#'+this.el+'_container').append($('<div/>')
|
129
|
+
.attr('id', this.el + '_message')
|
130
|
+
.css('width', $('#'+this.el).outerWidth())
|
131
|
+
);
|
132
|
+
}
|
133
|
+
$('#'+this.el+'_message').hide();
|
134
|
+
$('#'+this.el+'_message').html("<p class='note error'>" + str + "</p>");
|
135
|
+
$('#'+this.el+'_message').slideDown();
|
136
|
+
var this2 = this;
|
137
|
+
setTimeout(function() { $('#'+this2.el+'_message').slideUp(function() { $(this).empty(); }); }, 3000);
|
138
|
+
}
|
139
|
+
|
140
|
+
});
|
@@ -0,0 +1,117 @@
|
|
1
|
+
|
2
|
+
#left_content {
|
3
|
+
width: 280px;
|
4
|
+
float: left;
|
5
|
+
}
|
6
|
+
|
7
|
+
#right_content {
|
8
|
+
margin-left: 300px;
|
9
|
+
max-height: 600px;
|
10
|
+
overflow-y: scroll;
|
11
|
+
}
|
12
|
+
|
13
|
+
#categories {
|
14
|
+
ul {
|
15
|
+
list-style: none;
|
16
|
+
margin: 0;
|
17
|
+
padding: 0;
|
18
|
+
|
19
|
+
li {
|
20
|
+
list-style: none;
|
21
|
+
margin: 0;
|
22
|
+
padding: 0;
|
23
|
+
|
24
|
+
a {
|
25
|
+
display: block;
|
26
|
+
margin: 0 0 2px 0;
|
27
|
+
padding: 4px 8px;
|
28
|
+
background: #ddd;
|
29
|
+
border: #999 1px solid;
|
30
|
+
color: #000;
|
31
|
+
text-decoration: none;
|
32
|
+
|
33
|
+
&:hover {
|
34
|
+
background-color: #fff799;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
&.selected {
|
39
|
+
a {
|
40
|
+
font-weight: bold;
|
41
|
+
background-color: #90dbf9;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
&.cat_hover {
|
45
|
+
a {
|
46
|
+
background-color: #fff799 !important;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
#controls {
|
54
|
+
#delete {
|
55
|
+
p.delete_dropper {
|
56
|
+
padding: 8px 8px;
|
57
|
+
background: #ddd;
|
58
|
+
border: #999 1px solid;
|
59
|
+
color: #000;
|
60
|
+
text-decoration: none;
|
61
|
+
}
|
62
|
+
&.hover {
|
63
|
+
p.delete_dropper {
|
64
|
+
background-color: #fff799 !important;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
#the_uploader {
|
71
|
+
margin-bottom: 20px;
|
72
|
+
padding-right: 20px;
|
73
|
+
}
|
74
|
+
|
75
|
+
#media {
|
76
|
+
ul {
|
77
|
+
list-style: none;
|
78
|
+
margin: 0 0 20px 0;
|
79
|
+
padding: 0;
|
80
|
+
|
81
|
+
li {
|
82
|
+
position: relative;
|
83
|
+
list-style: none;
|
84
|
+
margin: 4px;
|
85
|
+
padding: 0;
|
86
|
+
display: inline-block;
|
87
|
+
width: 150px;
|
88
|
+
height: 150px;
|
89
|
+
overflow: hidden;
|
90
|
+
background-color: #666;
|
91
|
+
background-position: center;
|
92
|
+
background-size: contain;
|
93
|
+
background-repeat: no-repeat;
|
94
|
+
border: #666 4px solid;
|
95
|
+
|
96
|
+
span.name {
|
97
|
+
display: block;
|
98
|
+
position: absolute;
|
99
|
+
bottom: 4px;
|
100
|
+
width: 150px;
|
101
|
+
text-align: center;
|
102
|
+
color: #fff;
|
103
|
+
text-decoration: none !important;
|
104
|
+
}
|
105
|
+
&:hover {
|
106
|
+
background-color: #fff799;
|
107
|
+
border: #fff799 4px solid;
|
108
|
+
span { background-color: #fff799; color: #000; }
|
109
|
+
}
|
110
|
+
&.selected {
|
111
|
+
background-color: #90dbf9;
|
112
|
+
border: #90dbf9 4px solid;
|
113
|
+
span { background-color: #90dbf9; color: #000; }
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
@@ -206,11 +206,21 @@ module Caboose
|
|
206
206
|
@document_domain = request.host
|
207
207
|
@document_domain.gsub('http://', '')
|
208
208
|
@document_domain.gsub('https://', '')
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
209
|
+
|
210
|
+
full_name = @block.block_type.full_name
|
211
|
+
begin
|
212
|
+
if full_name != 'image'
|
213
|
+
render "caboose/blocks/admin_edit_#{@block.block_type.full_name}", :layout => 'caboose/modal'
|
214
|
+
else
|
215
|
+
render :layout => 'caboose/modal'
|
216
|
+
end
|
217
|
+
rescue ActionView::MissingTemplate => ex
|
218
|
+
begin
|
219
|
+
render "caboose/blocks/admin_edit_#{@block.block_type.field_type}", :layout => 'caboose/modal'
|
220
|
+
rescue ActionView::MissingTemplate => ex
|
221
|
+
render :layout => 'caboose/modal'
|
222
|
+
Caboose.log('test4')
|
223
|
+
end
|
214
224
|
end
|
215
225
|
end
|
216
226
|
|
@@ -322,6 +332,7 @@ module Caboose
|
|
322
332
|
when 'sort_order' then b.sort_order = v
|
323
333
|
when 'constrain' then b.constrain = v
|
324
334
|
when 'full_width' then b.full_width = v
|
335
|
+
when 'media_id' then b.media_id = v
|
325
336
|
when 'name' then b.name = v
|
326
337
|
when 'value' then
|
327
338
|
|
data/app/models/caboose/block.rb
CHANGED
@@ -6,11 +6,10 @@ class Caboose::Block < ActiveRecord::Base
|
|
6
6
|
|
7
7
|
belongs_to :post
|
8
8
|
belongs_to :page
|
9
|
+
belongs_to :media
|
9
10
|
belongs_to :block_type
|
10
11
|
belongs_to :parent, :foreign_key => 'parent_id', :class_name => 'Caboose::Block'
|
11
12
|
has_many :children, :foreign_key => 'parent_id', :class_name => 'Caboose::Block', :dependent => :delete_all, :order => 'sort_order'
|
12
|
-
belongs_to :media_file
|
13
|
-
belongs_to :media_image
|
14
13
|
has_attached_file :file, :path => ':path_prefixuploads/:block_file_upload_name.:extension'
|
15
14
|
do_not_validate_attachment_file_type :file
|
16
15
|
has_attached_file :image,
|
@@ -55,7 +54,7 @@ class Caboose::Block < ActiveRecord::Base
|
|
55
54
|
#end
|
56
55
|
end
|
57
56
|
|
58
|
-
def full_name
|
57
|
+
def full_name
|
59
58
|
return self.name if parent_id.nil?
|
60
59
|
return "#{parent.full_name}_#{self.name}"
|
61
60
|
end
|
@@ -63,6 +62,14 @@ class Caboose::Block < ActiveRecord::Base
|
|
63
62
|
def child_value(name)
|
64
63
|
b = self.child(name)
|
65
64
|
return nil if b.nil?
|
65
|
+
#if b.block_type.field_type == 'image'
|
66
|
+
# return b.media.image if b.media
|
67
|
+
# return b.image
|
68
|
+
#end
|
69
|
+
#if b.block_type.field_type == 'file'
|
70
|
+
# return b.media.file if b.media
|
71
|
+
# return b.file
|
72
|
+
#end
|
66
73
|
return b.image if b.block_type.field_type == 'image'
|
67
74
|
return b.file if b.block_type.field_type == 'file'
|
68
75
|
return b.value
|
@@ -211,6 +218,7 @@ class Caboose::Block < ActiveRecord::Base
|
|
211
218
|
"caboose/blocks/#{block.block_type.name}",
|
212
219
|
"caboose/blocks/#{block.block_type.field_type}"
|
213
220
|
]
|
221
|
+
Caboose.log(arr)
|
214
222
|
str = self.render_helper(view, options2, block, full_name, arr, 0)
|
215
223
|
|
216
224
|
end
|
@@ -491,5 +499,36 @@ class Caboose::Block < ActiveRecord::Base
|
|
491
499
|
end
|
492
500
|
return str
|
493
501
|
end
|
502
|
+
|
503
|
+
def migrate_media
|
504
|
+
|
505
|
+
if self.block_type.field_type == 'image' && !self.image_file_name.nil? && self.media_id.nil?
|
506
|
+
|
507
|
+
site_id = self.page_id ? self.page.site_id : self.post.site_id
|
508
|
+
cat = Caboose::MediaCategory.top_category(site_id)
|
509
|
+
m = Caboose::Media.create(:media_category_id => cat.id, :original_name => self.image_file_name, :name => Caboose::Media.upload_name(self.image_file_name))
|
510
|
+
m.image = URI.parse(self.image.url(:original))
|
511
|
+
m.processed = true
|
512
|
+
m.save
|
513
|
+
|
514
|
+
self.media_id = m.id
|
515
|
+
self.save
|
516
|
+
|
517
|
+
elsif self.block_type.field_type == 'file' && !self.file_file_name.nil? && self.media_id.nil?
|
518
|
+
|
519
|
+
site_id = self.page_id ? self.page.site_id : self.post.site_id
|
520
|
+
cat = Caboose::MediaCategory.top_category(site_id)
|
521
|
+
m = Caboose::Media.create(:media_category_id => cat.id, :original_name => self.file_file_name, :name => Caboose::Media.upload_name(self.file_file_name))
|
522
|
+
m.file = URI.parse(self.file.url)
|
523
|
+
m.processed = true
|
524
|
+
m.save
|
525
|
+
|
526
|
+
self.media_id = m.id
|
527
|
+
self.save
|
528
|
+
|
529
|
+
end
|
530
|
+
|
531
|
+
end
|
532
|
+
|
494
533
|
|
495
534
|
end
|
@@ -32,7 +32,7 @@ class Caboose::BlockType < ActiveRecord::Base
|
|
32
32
|
:share, # Whether or not to share the block type in the existing block store.
|
33
33
|
:downloaded # Whether the full block type has been download or just the name and description.
|
34
34
|
|
35
|
-
def full_name
|
35
|
+
def full_name
|
36
36
|
return name if parent_id.nil?
|
37
37
|
return "#{parent.full_name}_#{name}"
|
38
38
|
end
|
data/app/models/caboose/media.rb
CHANGED
@@ -90,5 +90,10 @@ class Caboose::Media < ActiveRecord::Base
|
|
90
90
|
return '' if str.nil?
|
91
91
|
return File.basename(str, File.extname(str)).downcase.gsub(' ', '-').gsub(/[^\w-]/, '')
|
92
92
|
end
|
93
|
+
|
94
|
+
def file_url
|
95
|
+
return self.image.url(:original) if self.image && !self.image.url(:original).starts_with?('http://placehold.it')
|
96
|
+
return self.file.url
|
97
|
+
end
|
93
98
|
|
94
99
|
end
|
@@ -149,10 +149,11 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
149
149
|
[ :page_id , :integer ],
|
150
150
|
[ :post_id , :integer ],
|
151
151
|
[ :parent_id , :integer ],
|
152
|
+
[ :media_id , :integer ],
|
152
153
|
[ :block_type_id , :integer ],
|
153
154
|
[ :sort_order , :integer , { :default => 0 }],
|
154
155
|
[ :constrain , :boolean , { :default => false }],
|
155
|
-
[ :full_width , :boolean , { :default => false }],
|
156
|
+
[ :full_width , :boolean , { :default => false }],
|
156
157
|
[ :name , :string ],
|
157
158
|
[ :value , :text ],
|
158
159
|
[ :file , :attachment ],
|
@@ -925,10 +926,8 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
925
926
|
|
926
927
|
# Make sure a top-level media category for each site exists
|
927
928
|
Caboose::Site.all.each do |site|
|
928
|
-
cat = Caboose::MediaCategory.where(
|
929
|
-
Caboose::MediaCategory.create(:site_id => site.id, :name => '
|
930
|
-
cat = Caboose::MediaCategory.where("parent_id is null and site_id = ? and name = ?", site.id, 'Files').first
|
931
|
-
Caboose::MediaCategory.create(:site_id => site.id, :name => 'Files') if cat.nil?
|
929
|
+
cat = Caboose::MediaCategory.where(:site_id => site.id, :parent_id => nil, :name => 'Media').first
|
930
|
+
Caboose::MediaCategory.create(:site_id => site.id, :parent_id => nil, :name => 'Media') if cat.nil?
|
932
931
|
end
|
933
932
|
|
934
933
|
# Make sure a default category exists for all products
|
@@ -1,11 +1,22 @@
|
|
1
1
|
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
url = nil
|
3
|
+
name = nil
|
4
|
+
if block.media
|
5
|
+
url = block.media.file_url
|
6
|
+
name = block.media.file_file_name
|
7
|
+
name = block.media.image_file_name if name.nil?
|
8
|
+
elsif block.file
|
9
|
+
url = block.file.url
|
10
|
+
name = block.file_file_name
|
9
11
|
end
|
10
12
|
|
13
|
+
if editing
|
14
|
+
if url.nil? || url.starts_with?('http://placehold.it') || url.include?('missing')
|
15
|
+
%><div id='block_<%= block.id %>'><p>Please upload a file.</p></div><%
|
16
|
+
else
|
17
|
+
%><div id='block_<%= block.id %>'><p><a href="/admin/<%= block.page_id ? "pages/#{block.page_id}" : "posts/#{block.post_id}" %>/blocks/<%= block.id %>/edit"><%= name %></a></p></div><%
|
18
|
+
end
|
19
|
+
elsif url
|
20
|
+
%><div id='block_<%= block.id %>'><p><a href="<%= raw file.url %>">Download File</a></p></div><%
|
21
|
+
end
|
11
22
|
%>
|
@@ -1,58 +1,14 @@
|
|
1
|
-
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
mb = block.child_value('margin_bottom')
|
11
|
-
ml = block.child_value('margin_left')
|
12
|
-
mt.downcase! if mt
|
13
|
-
mr.downcase! if mr
|
14
|
-
mb.downcase! if mb
|
15
|
-
ml.downcase! if ml
|
16
|
-
url = img ? img.url(img_style.downcase.to_sym) : nil
|
17
|
-
|
18
|
-
img = nil
|
19
|
-
if url && !url.include?('missing.png')
|
20
|
-
style = []
|
21
|
-
if align == 'Center'
|
22
|
-
ml = 'auto'
|
23
|
-
mr = 'auto'
|
24
|
-
style << "display: block"
|
25
|
-
end
|
26
|
-
|
27
|
-
ml = "#{ml}px" if ml && ml != 'auto' && !ml.ends_with?('px') && !ml.ends_with?('em') && !ml.ends_with?('%')
|
28
|
-
mr = "#{mr}px" if mr && mr != 'auto' && !mr.ends_with?('px') && !mr.ends_with?('em') && !mr.ends_with?('%')
|
29
|
-
mt = "#{mt}px" if mt && mt != 'auto' && !mt.ends_with?('px') && !mt.ends_with?('em') && !mt.ends_with?('%')
|
30
|
-
mb = "#{mb}px" if mb && mb != 'auto' && !mb.ends_with?('px') && !mb.ends_with?('em') && !mb.ends_with?('%')
|
31
|
-
|
32
|
-
style << "width: #{width}px" if width
|
33
|
-
style << "max-height: #{height}px" if height
|
34
|
-
style << "float: left" if align == 'Left'
|
35
|
-
style << "float: right" if align == 'Right'
|
36
|
-
style << "margin-left: #{ml}" if ml
|
37
|
-
style << "margin-right: #{mr}" if mr
|
38
|
-
style << "margin-top: #{mt}" if mt
|
39
|
-
style << "margin-bottom: #{mb}" if mb
|
40
|
-
style = style.join('; ')
|
41
|
-
|
42
|
-
img = "<img src='#{url}' style='#{style}' id='block_#{block.id}' />"
|
43
|
-
if link && link.strip.length > 0
|
44
|
-
if editing
|
45
|
-
img = "<a href='#'>#{img}</a>"
|
46
|
-
else
|
47
|
-
img = "<a href='#{link}'>#{img}</a>"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
if editing && img.nil?
|
1
|
+
<%
|
2
|
+
url = nil
|
3
|
+
if block.media
|
4
|
+
url = block.media.image.url(:tiny)
|
5
|
+
elsif block.image
|
6
|
+
url = block.image.url(:tiny)
|
7
|
+
end
|
8
|
+
|
9
|
+
if editing && url.nil?
|
53
10
|
%><p id='block_<%= block.id %>'>Please upload an image.</p><%
|
54
11
|
else
|
55
|
-
|
12
|
+
%><img src='<%= raw url %>' id='block_<%= block.id %>' /><%
|
56
13
|
end
|
57
|
-
|
58
14
|
%>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<%
|
2
|
+
Caboose.log(block.id)
|
3
|
+
image_src = block.child('image_src')
|
4
|
+
Caboose.log(image_src)
|
5
|
+
Caboose.log(image_src.media_id)
|
6
|
+
|
7
|
+
img = block.child_value('image_src')
|
8
|
+
img_style = block.child_value('image_style')
|
9
|
+
link = block.child_value('link')
|
10
|
+
align = block.child_value('align')
|
11
|
+
width = block.child_value('width')
|
12
|
+
height = block.child_value('height')
|
13
|
+
mt = block.child_value('margin_top')
|
14
|
+
mr = block.child_value('margin_right')
|
15
|
+
mb = block.child_value('margin_bottom')
|
16
|
+
ml = block.child_value('margin_left')
|
17
|
+
mt.downcase! if mt
|
18
|
+
mr.downcase! if mr
|
19
|
+
mb.downcase! if mb
|
20
|
+
ml.downcase! if ml
|
21
|
+
url = img ? img.url(img_style.downcase.to_sym) : nil
|
22
|
+
url = nil
|
23
|
+
|
24
|
+
if image_src && image_src.media
|
25
|
+
url = image_src.media.image.url(img_style.downcase.to_sym)
|
26
|
+
elsif img
|
27
|
+
url = img.url(img_style.downcase.to_sym)
|
28
|
+
end
|
29
|
+
|
30
|
+
img = nil
|
31
|
+
alt = block.child_value('alt_text').blank? ? "" : block.child_value('alt_text')
|
32
|
+
if url && !url.include?('missing.png')
|
33
|
+
style = []
|
34
|
+
if align == 'Center'
|
35
|
+
ml = 'auto'
|
36
|
+
mr = 'auto'
|
37
|
+
style << "display: block"
|
38
|
+
end
|
39
|
+
|
40
|
+
ml = "#{ml}px" if ml && ml != 'auto' && !ml.ends_with?('px') && !ml.ends_with?('em') && !ml.ends_with?('%')
|
41
|
+
mr = "#{mr}px" if mr && mr != 'auto' && !mr.ends_with?('px') && !mr.ends_with?('em') && !mr.ends_with?('%')
|
42
|
+
mt = "#{mt}px" if mt && mt != 'auto' && !mt.ends_with?('px') && !mt.ends_with?('em') && !mt.ends_with?('%')
|
43
|
+
mb = "#{mb}px" if mb && mb != 'auto' && !mb.ends_with?('px') && !mb.ends_with?('em') && !mb.ends_with?('%')
|
44
|
+
|
45
|
+
style << "width: #{width}px" if width
|
46
|
+
style << "max-height: #{height}px" if height
|
47
|
+
style << "float: left" if align == 'Left'
|
48
|
+
style << "float: right" if align == 'Right'
|
49
|
+
style << "margin-left: #{ml}" if ml
|
50
|
+
style << "margin-right: #{mr}" if mr
|
51
|
+
style << "margin-top: #{mt}" if mt
|
52
|
+
style << "margin-bottom: #{mb}" if mb
|
53
|
+
style = style.join('; ')
|
54
|
+
|
55
|
+
img = "<img src='#{url}' style='#{style}' id='block_#{block.id}' alt='#{alt}' />"
|
56
|
+
if link && link.strip.length > 0
|
57
|
+
if editing
|
58
|
+
img = "<a href='#'>#{img}</a>"
|
59
|
+
else
|
60
|
+
img = "<a href='#{link}'>#{img}</a>"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
if editing && img.nil?
|
65
|
+
%><p id='block_<%= block.id %>'>TPlease upload an image.</p><%
|
66
|
+
else
|
67
|
+
%><%= raw img %><%
|
68
|
+
end
|
69
|
+
%>
|
@@ -41,12 +41,12 @@ end
|
|
41
41
|
<!-- Stop -->
|
42
42
|
<% elsif @block.block_type.field_type != 'block' %>
|
43
43
|
<p><div id='block_<%= @block.id %>_value'></div></p>
|
44
|
-
<% else %>
|
44
|
+
<% else %>
|
45
45
|
<% if @block.children.count > 0 %>
|
46
|
-
<% @block.children.order(:sort_order).each do |b| %>
|
47
|
-
<% if b.block_type.field_type != 'block' && b.block_type.field_type != 'richtext' %>
|
46
|
+
<% @block.children.order(:sort_order).each do |b| %>
|
47
|
+
<% if b.block_type.field_type != 'block' && b.block_type.field_type != 'richtext' && b.block_type.field_type != 'image' && b.block_type.field_type != 'file' %>
|
48
48
|
<div style='margin-bottom: 10px;'><div id='block_<%= b.id %>_value'></div></div>
|
49
|
-
<% else %>
|
49
|
+
<% else %>
|
50
50
|
<%
|
51
51
|
#Caboose.log(b.value)
|
52
52
|
#Caboose.log(b.name)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<%
|
2
|
+
base_url = @block.page_id ? "/admin/pages/#{@block.page_id}/blocks" : "/admin/posts/#{@block.post_id}/blocks"
|
3
|
+
crumbs = []
|
4
|
+
b = @block
|
5
|
+
while b
|
6
|
+
href = b.id == @block.id ? "#" : "#{base_url}/#{b.id}/edit"
|
7
|
+
text = b.name ? "#{b.block_type.description} (#{b.name})" : b.block_type.description
|
8
|
+
crumbs << "<a href=\"#{href}\">#{text}</a>"
|
9
|
+
b = b.parent
|
10
|
+
end
|
11
|
+
|
12
|
+
url = nil
|
13
|
+
name = nil
|
14
|
+
if @block.media
|
15
|
+
url = @block.media.file_url
|
16
|
+
name = @block.media.file_file_name
|
17
|
+
name = @block.media.image_file_name if name.nil?
|
18
|
+
elsif @block.image
|
19
|
+
url = @block.file.url
|
20
|
+
name = @block.file_file_name
|
21
|
+
end
|
22
|
+
|
23
|
+
%>
|
24
|
+
<h2 style='margin-top: 0; padding-top: 0;'><%= raw crumbs.reverse.join(' > ') %></h2>
|
25
|
+
|
26
|
+
<div id='left_content'>
|
27
|
+
<div id='categories'></div>
|
28
|
+
<div id='controls'>
|
29
|
+
<% if url.nil? || url.include?('missing') %>
|
30
|
+
<p>Please select a file.</p>
|
31
|
+
<% else %>
|
32
|
+
<p>Current File</p>
|
33
|
+
<p><%= name %></p>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div id='right_content'>
|
38
|
+
<div id='uploader'></div>
|
39
|
+
<div id='media'></div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<p>
|
43
|
+
<input type='button' value='< Back' onclick="window.location='/admin/pages/<%= @block.page_id %>/blocks/<%= @block.parent_id %>/edit';" />
|
44
|
+
<input type='button' value='Close' onclick="parent.controller.render_blocks(); modal.close();" />
|
45
|
+
<input type='button' value='Manage Media' onclick="parent.window.location='/admin/media';" />
|
46
|
+
</p>
|
47
|
+
|
48
|
+
<% content_for :caboose_css do %>
|
49
|
+
<%= stylesheet_link_tag 'caboose/admin_block_edit_image' %>
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
<% content_for :caboose_js do %>
|
53
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
54
|
+
<%= javascript_include_tag "caboose/block_media_controller" %>
|
55
|
+
<script type='text/javascript'>
|
56
|
+
|
57
|
+
var modal = false;
|
58
|
+
$(window).load(function() {
|
59
|
+
modal = new CabooseModal(800);
|
60
|
+
});
|
61
|
+
|
62
|
+
var controller = false;
|
63
|
+
$(document).ready(function() {
|
64
|
+
controller = new BlockMediaController({
|
65
|
+
<% if @block.page_id %>page_id: <%= @block.page_id %><% else %>post_id: <%= @block.post_id %><% end %>,
|
66
|
+
block_id: <%= @block.id %>,
|
67
|
+
block_parent_id: <%= @block.parent_id %>,
|
68
|
+
authenticity_token: '<%= form_authenticity_token %>'
|
69
|
+
});
|
70
|
+
});
|
71
|
+
|
72
|
+
</script>
|
73
|
+
<% end %>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<%
|
2
|
+
base_url = @block.page_id ? "/admin/pages/#{@block.page_id}/blocks" : "/admin/posts/#{@block.post_id}/blocks"
|
3
|
+
crumbs = []
|
4
|
+
b = @block
|
5
|
+
while b
|
6
|
+
href = b.id == @block.id ? "#" : "#{base_url}/#{b.id}/edit"
|
7
|
+
text = b.name ? "#{b.block_type.description} (#{b.name})" : b.block_type.description
|
8
|
+
crumbs << "<a href=\"#{href}\">#{text}</a>"
|
9
|
+
b = b.parent
|
10
|
+
end
|
11
|
+
|
12
|
+
url = nil
|
13
|
+
if @block.media
|
14
|
+
url = @block.media.image.url(:tiny)
|
15
|
+
elsif @block.image
|
16
|
+
url = @block.image.url(:tiny)
|
17
|
+
end
|
18
|
+
|
19
|
+
%>
|
20
|
+
<h2 style='margin-top: 0; padding-top: 0;'><%= raw crumbs.reverse.join(' > ') %></h2>
|
21
|
+
|
22
|
+
<div id='left_content'>
|
23
|
+
<div id='categories'></div>
|
24
|
+
<div id='controls'>
|
25
|
+
<% if url.nil? %>
|
26
|
+
<p>Please upload an image.</p>
|
27
|
+
<% else %>
|
28
|
+
<p>Current Image</p>
|
29
|
+
<p><img src='<%= raw url %>' /></p>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<div id='right_content'>
|
34
|
+
<div id='uploader'></div>
|
35
|
+
<div id='media'></div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<p>
|
39
|
+
<input type='button' value='< Back' onclick="window.location='/admin/pages/<%= @block.page_id %>/blocks/<%= @block.parent_id %>/edit';" />
|
40
|
+
<input type='button' value='Close' onclick="parent.controller.render_blocks(); modal.close();" />
|
41
|
+
<input type='button' value='Manage Media' onclick="parent.window.location='/admin/media';" />
|
42
|
+
</p>
|
43
|
+
|
44
|
+
<% content_for :caboose_css do %>
|
45
|
+
<%= stylesheet_link_tag 'caboose/admin_block_edit_image' %>
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<% content_for :caboose_js do %>
|
49
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
50
|
+
<%= javascript_include_tag "caboose/block_media_controller" %>
|
51
|
+
<script type='text/javascript'>
|
52
|
+
|
53
|
+
var modal = false;
|
54
|
+
$(window).load(function() {
|
55
|
+
modal = new CabooseModal(800);
|
56
|
+
});
|
57
|
+
|
58
|
+
var controller = false;
|
59
|
+
$(document).ready(function() {
|
60
|
+
controller = new BlockMediaController({
|
61
|
+
<% if @block.page_id %>page_id: <%= @block.page_id %><% else %>post_id: <%= @block.post_id %><% end %>,
|
62
|
+
block_id: <%= @block.id %>,
|
63
|
+
block_parent_id: <%= @block.parent_id %>,
|
64
|
+
authenticity_token: '<%= form_authenticity_token %>'
|
65
|
+
});
|
66
|
+
});
|
67
|
+
|
68
|
+
</script>
|
69
|
+
<% end %>
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
require "caboose/version"
|
2
2
|
|
3
3
|
namespace :caboose do
|
4
|
-
|
4
|
+
|
5
|
+
desc "Migrate block images to media"
|
6
|
+
task :migrate_block_images_to_media => :environment do
|
7
|
+
Caboose::Block.where("image_file_name is not null").reorder(:id).limit(1).all.each do |b|
|
8
|
+
b.migrate_media
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
5
12
|
desc "Update expired caches and cache pages that aren't cached"
|
6
13
|
task :cache_pages => :environment do
|
7
14
|
Caboose::PageCacher.delay.refresh
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.225
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -406,6 +406,7 @@ files:
|
|
406
406
|
- app/assets/javascripts/caboose/admin_products.js
|
407
407
|
- app/assets/javascripts/caboose/application.js
|
408
408
|
- app/assets/javascripts/caboose/authorize.net.js
|
409
|
+
- app/assets/javascripts/caboose/block_media_controller.js
|
409
410
|
- app/assets/javascripts/caboose/cart.js
|
410
411
|
- app/assets/javascripts/caboose/cart_old.js
|
411
412
|
- app/assets/javascripts/caboose/checkout.js
|
@@ -443,6 +444,7 @@ files:
|
|
443
444
|
- app/assets/javascripts/caboose/model/bound_date_time.js
|
444
445
|
- app/assets/javascripts/caboose/model/bound_file.js
|
445
446
|
- app/assets/javascripts/caboose/model/bound_image.js
|
447
|
+
- app/assets/javascripts/caboose/model/bound_image_bak.js
|
446
448
|
- app/assets/javascripts/caboose/model/bound_richtext.js
|
447
449
|
- app/assets/javascripts/caboose/model/bound_s3_image.js
|
448
450
|
- app/assets/javascripts/caboose/model/bound_select.js
|
@@ -538,6 +540,7 @@ files:
|
|
538
540
|
- app/assets/javascripts/plupload/plupload.min.js
|
539
541
|
- app/assets/javascripts/tinymce/plugins/caboose/plugin.js
|
540
542
|
- app/assets/stylesheets/caboose/admin.css
|
543
|
+
- app/assets/stylesheets/caboose/admin_block_edit_image.css.scss
|
541
544
|
- app/assets/stylesheets/caboose/admin_crumbtrail.css.scss
|
542
545
|
- app/assets/stylesheets/caboose/admin_main.css
|
543
546
|
- app/assets/stylesheets/caboose/admin_media_index.css.scss
|
@@ -779,6 +782,7 @@ files:
|
|
779
782
|
- app/views/caboose/blocks/_heading.html.erb
|
780
783
|
- app/views/caboose/blocks/_html.html.erb
|
781
784
|
- app/views/caboose/blocks/_image.html.erb
|
785
|
+
- app/views/caboose/blocks/_image2.html.erb
|
782
786
|
- app/views/caboose/blocks/_layout_basic.html.erb
|
783
787
|
- app/views/caboose/blocks/_layout_basic_content.html.erb
|
784
788
|
- app/views/caboose/blocks/_layout_basic_footer.html.erb
|
@@ -815,6 +819,7 @@ files:
|
|
815
819
|
- app/views/caboose/blocks/admin_edit.html.erb
|
816
820
|
- app/views/caboose/blocks/admin_edit_advanced.html.erb
|
817
821
|
- app/views/caboose/blocks/admin_edit_custom.html.erb
|
822
|
+
- app/views/caboose/blocks/admin_edit_file.html.erb
|
818
823
|
- app/views/caboose/blocks/admin_edit_h1.html.erb
|
819
824
|
- app/views/caboose/blocks/admin_edit_h2.html.erb
|
820
825
|
- app/views/caboose/blocks/admin_edit_h3.html.erb
|
@@ -822,6 +827,7 @@ files:
|
|
822
827
|
- app/views/caboose/blocks/admin_edit_h5.html.erb
|
823
828
|
- app/views/caboose/blocks/admin_edit_h6.html.erb
|
824
829
|
- app/views/caboose/blocks/admin_edit_heading.html
|
830
|
+
- app/views/caboose/blocks/admin_edit_image.html.erb
|
825
831
|
- app/views/caboose/blocks/admin_edit_richtextold.html.erb
|
826
832
|
- app/views/caboose/blocks/admin_new.html.erb
|
827
833
|
- app/views/caboose/blocks/admin_render_second_level.json.erb
|