caboose-cms 0.3.12 → 0.3.13
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/admin_page_edit_content.js +6 -6
- data/app/controllers/caboose/page_block_field_values_controller.rb +27 -0
- data/app/controllers/caboose/page_block_fields_controller.rb +139 -0
- data/app/controllers/caboose/page_block_types_controller.rb +100 -0
- data/app/controllers/caboose/page_blocks_controller.rb +49 -36
- data/app/controllers/caboose/pages_controller.rb +2 -1
- data/app/models/caboose/core_plugin.rb +25 -5
- data/app/models/caboose/page.rb +4 -4
- data/app/models/caboose/page_block.rb +36 -15
- data/app/models/caboose/page_block_field.rb +9 -0
- data/app/models/caboose/page_block_field_value.rb +9 -0
- data/app/models/caboose/page_block_renderers/h1.rb +5 -0
- data/app/models/caboose/page_block_renderers/h2.rb +5 -0
- data/app/models/caboose/page_block_renderers/h3.rb +5 -0
- data/app/models/caboose/page_block_renderers/h4.rb +5 -0
- data/app/models/caboose/page_block_renderers/h5.rb +5 -0
- data/app/models/caboose/page_block_renderers/h6.rb +5 -0
- data/app/models/caboose/page_block_renderers/p.rb +5 -0
- data/app/models/caboose/page_block_renderers/richtext.rb +5 -0
- data/app/models/caboose/page_block_type.rb +12 -0
- data/app/models/caboose/schema.rb +48 -7
- data/app/views/caboose/page_block_fields/admin_edit.html.erb +70 -0
- data/app/views/caboose/page_block_fields/admin_new.html.erb +30 -0
- data/app/views/caboose/page_block_types/admin_edit.html.erb +77 -0
- data/app/views/caboose/page_block_types/admin_index.html.erb +24 -0
- data/app/views/caboose/page_block_types/admin_new.html.erb +30 -0
- data/app/views/caboose/page_blocks/_heading.html.erb +7 -0
- data/app/views/caboose/page_blocks/_richtext.html.erb +8 -0
- data/app/views/caboose/page_blocks/admin_edit.html.erb +32 -13
- data/app/views/caboose/page_blocks/admin_edit_custom.html.erb +35 -0
- data/app/views/caboose/pages/_content.html.erb +3 -0
- data/app/views/caboose/pages/admin_edit_content.html.erb +1 -7
- data/config/routes.rb +19 -0
- data/lib/caboose/engine.rb +1 -1
- data/lib/caboose/version.rb +1 -1
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzM5Yzk3ZmMyZDA3MTIzZjQ5NjcxNjEyOWY3NWQ3ZTk4ZDE1ZDA2MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTc2ZGZmYTkxYTI0MTI5ZGRiM2Y2ZTg4ZDBkNjQyYjk0OWE3YjJjMA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWMwZThjYjUwMzliOGEzZmQ4ZTlhNTYzYWI5M2U5MmU0M2I4NjUwYWNjZDY0
|
10
|
+
NWU4OTA2ZTg3M2YwNWZjYjJiMmMxMjlmYzVjMzE0Y2M1ZDA2OTM0NjViMjAx
|
11
|
+
NmRmODA1MGNkMmEzYThlOGZmMzU4OTNmNmRiMDU1M2Y0YWVkNjQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjMxYzUyN2I0MGFjNTdjM2E5MjU5YWYwOTc0MjY3N2ZkMjAzOWIzODk1NWEw
|
14
|
+
ZmU0YmE1NjFmZWE3OTJhMjc5Y2E2ZDk3NWE5Mzg2OTU2ZjkwZDkwZjRjMTdm
|
15
|
+
N2E1YjcwYmM3ODRiNDY1YWZiMDBmNzVjNDhlYmUwZTEzNjVkZWQ=
|
@@ -4,7 +4,7 @@ var PageContentController = function(page_id) { this.init(page_id); };
|
|
4
4
|
PageContentController.prototype = {
|
5
5
|
|
6
6
|
page_id: false,
|
7
|
-
|
7
|
+
new_block_type_id: false,
|
8
8
|
|
9
9
|
init: function(page_id)
|
10
10
|
{
|
@@ -23,18 +23,18 @@ PageContentController.prototype = {
|
|
23
23
|
placeholder: 'sortable-placeholder',
|
24
24
|
handle: '.sort_handle',
|
25
25
|
receive: function(e, ui) {
|
26
|
-
that.
|
26
|
+
that.new_block_type_id = ui.item.attr('id').replace('new_block_', '');
|
27
27
|
},
|
28
28
|
update: function(e, ui) {
|
29
|
-
if (that.
|
29
|
+
if (that.new_block_type_id)
|
30
30
|
{
|
31
31
|
$.ajax({
|
32
32
|
url: '/admin/pages/' + that.page_id + '/blocks',
|
33
33
|
type: 'post',
|
34
|
-
data: {
|
34
|
+
data: { page_block_type_id: that.new_block_type_id, index: ui.item.index() },
|
35
35
|
success: function(resp) { that.render_blocks(function() { that.edit_block(resp.block.id); }); }
|
36
36
|
});
|
37
|
-
that.
|
37
|
+
that.new_block_type_id = false;
|
38
38
|
}
|
39
39
|
else
|
40
40
|
{
|
@@ -126,7 +126,7 @@ PageContentController.prototype = {
|
|
126
126
|
},
|
127
127
|
|
128
128
|
render_block_html: function(block_id, html)
|
129
|
-
{
|
129
|
+
{
|
130
130
|
var that = this;
|
131
131
|
$('#pageblock_' + block_id).empty().html(html);
|
132
132
|
$('#pageblock_' + block_id).attr('onclick','').unbind('click');
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
module Caboose
|
3
|
+
class PageBlockFieldValuesController < ApplicationController
|
4
|
+
|
5
|
+
# PUT /admin/page-block-field-values/:id
|
6
|
+
def admin_update
|
7
|
+
return unless user_is_allowed('pages', 'edit')
|
8
|
+
|
9
|
+
resp = StdClass.new({'attributes' => {}})
|
10
|
+
fv = PageBlockFieldValue.find(params[:id])
|
11
|
+
|
12
|
+
save = true
|
13
|
+
user = logged_in_user
|
14
|
+
|
15
|
+
params.each do |k,v|
|
16
|
+
case k
|
17
|
+
when 'value'
|
18
|
+
fv.value = v
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
resp.success = save && fv.save
|
23
|
+
render :json => resp
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
|
2
|
+
module Caboose
|
3
|
+
class PageBlockFieldsController < ApplicationController
|
4
|
+
|
5
|
+
#===========================================================================
|
6
|
+
# Admin actions
|
7
|
+
#===========================================================================
|
8
|
+
|
9
|
+
# GET /admin/page-block-types/:block_type_id/fields
|
10
|
+
def admin_index
|
11
|
+
return if !user_is_allowed('pages', 'view')
|
12
|
+
fields = PageBlockField.where(:page_block_type_id => params[:block_type_id]).reorder(:name).all
|
13
|
+
render :json => fields
|
14
|
+
end
|
15
|
+
|
16
|
+
# GET /admin/page-block-types/:block_type_id/fields/new
|
17
|
+
def admin_new
|
18
|
+
return unless user_is_allowed('pages', 'add')
|
19
|
+
@block_type = PageBlockType.find(params[:block_type_id])
|
20
|
+
@field = PageBlockField.new
|
21
|
+
render :layout => 'caboose/admin'
|
22
|
+
end
|
23
|
+
|
24
|
+
# GET /admin/page-block-types/:block_type_id/fields/:id/edit
|
25
|
+
def admin_edit
|
26
|
+
return unless user_is_allowed('pages', 'edit')
|
27
|
+
@field = PageBlockField.find(params[:id])
|
28
|
+
render :layout => 'caboose/admin'
|
29
|
+
end
|
30
|
+
|
31
|
+
# POST /admin/page-block-types/:block_type_id
|
32
|
+
def admin_create
|
33
|
+
return unless user_is_allowed('pages', 'add')
|
34
|
+
|
35
|
+
resp = Caboose::StdClass.new({
|
36
|
+
'error' => nil,
|
37
|
+
'redirect' => nil
|
38
|
+
})
|
39
|
+
|
40
|
+
field = PageBlockField.new(
|
41
|
+
:page_block_type_id => params[:block_type_id],
|
42
|
+
:name => params[:name].downcase.gsub(' ', '_'),
|
43
|
+
:nice_name => params[:name],
|
44
|
+
:field_type => 'text'
|
45
|
+
)
|
46
|
+
field.save
|
47
|
+
|
48
|
+
# Send back the response
|
49
|
+
resp.redirect = "/admin/page-block-types/#{params[:block_type_id]}/fields/#{field.id}/edit"
|
50
|
+
render :json => resp
|
51
|
+
end
|
52
|
+
|
53
|
+
# PUT /admin/page-block-types/:block_type_id/fields/:id
|
54
|
+
def admin_update
|
55
|
+
return unless user_is_allowed('pages', 'edit')
|
56
|
+
|
57
|
+
resp = StdClass.new({'attributes' => {}})
|
58
|
+
field = PageBlockField.find(params[:id])
|
59
|
+
|
60
|
+
save = true
|
61
|
+
user = logged_in_user
|
62
|
+
|
63
|
+
params.each do |k,v|
|
64
|
+
case k
|
65
|
+
when 'page_block_type_id'
|
66
|
+
field.page_block_type_id = v
|
67
|
+
break
|
68
|
+
when 'name'
|
69
|
+
field.name = v
|
70
|
+
break
|
71
|
+
when 'field_type'
|
72
|
+
field.field_type = v
|
73
|
+
break
|
74
|
+
when 'nice_name'
|
75
|
+
field.nice_name = v
|
76
|
+
break
|
77
|
+
when 'default'
|
78
|
+
field.default = v
|
79
|
+
break
|
80
|
+
when 'width'
|
81
|
+
field.width = v
|
82
|
+
break
|
83
|
+
when 'height'
|
84
|
+
field.height = v
|
85
|
+
break
|
86
|
+
when 'fixed_placeholder'
|
87
|
+
field.fixed_placeholder = v
|
88
|
+
break
|
89
|
+
when 'options'
|
90
|
+
field.options = v
|
91
|
+
break
|
92
|
+
when 'options_url'
|
93
|
+
field.options_url = v
|
94
|
+
break
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
resp.success = save && field.save
|
99
|
+
render :json => resp
|
100
|
+
end
|
101
|
+
|
102
|
+
# DELETE /admin/page-block-types/:block_type_id/fields/:id
|
103
|
+
def admin_delete
|
104
|
+
return unless user_is_allowed('pages', 'delete')
|
105
|
+
PageBlockField.find(params[:id]).destroy
|
106
|
+
resp = StdClass.new({
|
107
|
+
'redirect' => "/admin/page-block-types/#{params[:block_type_id]}/edit"
|
108
|
+
})
|
109
|
+
render :json => resp
|
110
|
+
end
|
111
|
+
|
112
|
+
# GET /admin/page-block-fields/field-type-options
|
113
|
+
def admin_field_type_options
|
114
|
+
return unless user_is_allowed('pages', 'edit')
|
115
|
+
options = [
|
116
|
+
{ 'value' => 'checkbox' , 'text' => 'checkbox' },
|
117
|
+
{ 'value' => 'checkbox_multiple' , 'text' => 'checkbox_multiple' },
|
118
|
+
{ 'value' => 'image' , 'text' => 'image' },
|
119
|
+
{ 'value' => 'richtext' , 'text' => 'richtext' },
|
120
|
+
{ 'value' => 'select' , 'text' => 'select' },
|
121
|
+
{ 'value' => 'text' , 'text' => 'text' },
|
122
|
+
{ 'value' => 'textarea' , 'text' => 'textarea' }
|
123
|
+
]
|
124
|
+
render :json => options
|
125
|
+
end
|
126
|
+
|
127
|
+
# GET /admin/page-block-fields/:id/options
|
128
|
+
def admin_field_options
|
129
|
+
return unless user_is_allowed('pages', 'edit')
|
130
|
+
f = PageBlockField.find(params[:id])
|
131
|
+
options = []
|
132
|
+
if f.options
|
133
|
+
options = f.options.strip.split("\n").collect { |line| { 'value' => line, 'text' => line }}
|
134
|
+
end
|
135
|
+
render :json => options
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
|
2
|
+
module Caboose
|
3
|
+
class PageBlockTypesController < ApplicationController
|
4
|
+
|
5
|
+
#===========================================================================
|
6
|
+
# Admin actions
|
7
|
+
#===========================================================================
|
8
|
+
|
9
|
+
# GET /admin/page-block-types
|
10
|
+
def admin_index
|
11
|
+
return if !user_is_allowed('pages', 'view')
|
12
|
+
@block_types = PageBlockType.reorder(:name).all
|
13
|
+
render :layout => 'caboose/admin'
|
14
|
+
end
|
15
|
+
|
16
|
+
# GET /admin/page-block-types/:id
|
17
|
+
def admin_show
|
18
|
+
return if !user_is_allowed('pages', 'view')
|
19
|
+
block_type = PageBlockType.find(params[:id])
|
20
|
+
render :json => block_type
|
21
|
+
end
|
22
|
+
|
23
|
+
# GET /admin/page-block-types/new
|
24
|
+
def admin_new
|
25
|
+
return unless user_is_allowed('pages', 'add')
|
26
|
+
@block_type = PageBlockType.new
|
27
|
+
render :layout => 'caboose/admin'
|
28
|
+
end
|
29
|
+
|
30
|
+
# GET /admin/page-block-types/:id/edit
|
31
|
+
def admin_edit
|
32
|
+
return unless user_is_allowed('pages', 'edit')
|
33
|
+
@block_type = PageBlockType.find(params[:id])
|
34
|
+
render :layout => 'caboose/admin'
|
35
|
+
end
|
36
|
+
|
37
|
+
# POST /admin/page-block-types
|
38
|
+
def admin_create
|
39
|
+
return unless user_is_allowed('pages', 'add')
|
40
|
+
|
41
|
+
resp = Caboose::StdClass.new({
|
42
|
+
'error' => nil,
|
43
|
+
'redirect' => nil
|
44
|
+
})
|
45
|
+
|
46
|
+
bt = PageBlockType.new(
|
47
|
+
:name => params[:name].downcase.gsub(' ', '_'),
|
48
|
+
:description => params[:name],
|
49
|
+
:use_render_function => false
|
50
|
+
)
|
51
|
+
bt.save
|
52
|
+
|
53
|
+
# Send back the response
|
54
|
+
resp.redirect = "/admin/page-block-types/#{bt.id}/edit"
|
55
|
+
render :json => resp
|
56
|
+
end
|
57
|
+
|
58
|
+
# PUT /admin/page-block-types/:id
|
59
|
+
def admin_update
|
60
|
+
return unless user_is_allowed('pages', 'edit')
|
61
|
+
|
62
|
+
resp = StdClass.new({'attributes' => {}})
|
63
|
+
bt = PageBlockType.find(params[:id])
|
64
|
+
|
65
|
+
save = true
|
66
|
+
user = logged_in_user
|
67
|
+
|
68
|
+
params.each do |k,v|
|
69
|
+
case k
|
70
|
+
when 'name'
|
71
|
+
bt.name = v
|
72
|
+
break
|
73
|
+
when 'description'
|
74
|
+
bt.description = v
|
75
|
+
break
|
76
|
+
when 'use_render_function'
|
77
|
+
bt.use_render_function = v
|
78
|
+
break
|
79
|
+
when 'render_function'
|
80
|
+
bt.render_function = v
|
81
|
+
break
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
resp.success = save && bt.save
|
86
|
+
render :json => resp
|
87
|
+
end
|
88
|
+
|
89
|
+
# DELETE /admin/page-block-types/:id
|
90
|
+
def admin_delete
|
91
|
+
return unless user_is_allowed('pages', 'delete')
|
92
|
+
PageBlockType.find(params[:id]).destroy
|
93
|
+
resp = StdClass.new({
|
94
|
+
'redirect' => "/admin/page-block-types"
|
95
|
+
})
|
96
|
+
render :json => resp
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -31,22 +31,46 @@ module Caboose
|
|
31
31
|
# GET /admin/pages/:page_id/blocks/:id/render
|
32
32
|
def admin_render
|
33
33
|
return unless user_is_allowed('pages', 'edit')
|
34
|
-
|
35
|
-
|
34
|
+
b = PageBlock.find(params[:id])
|
35
|
+
bt = b.page_block_type
|
36
|
+
html = nil
|
37
|
+
|
38
|
+
if bt.use_render_function && bt.render_function
|
39
|
+
html = b.render_from_function(params[:empty_text])
|
40
|
+
else
|
41
|
+
html = render_to_string({
|
42
|
+
:partial => "caboose/page_blocks/#{b.page_block_type.name}",
|
43
|
+
:locals => {
|
44
|
+
:block => b,
|
45
|
+
:empty_text => params[:empty_text]
|
46
|
+
}
|
47
|
+
})
|
48
|
+
end
|
49
|
+
render :json => html
|
36
50
|
end
|
37
51
|
|
38
52
|
# GET /admin/pages/:page_id/blocks/render
|
39
53
|
def admin_render_all
|
40
54
|
return unless user_is_allowed('pages', 'edit')
|
41
55
|
p = Page.find(params[:page_id])
|
42
|
-
blocks = p.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
56
|
+
blocks = p.page_blocks.collect do |b|
|
57
|
+
bt = b.page_block_type
|
58
|
+
html = nil
|
59
|
+
if bt.use_render_function && bt.render_function
|
60
|
+
html = b.render_from_function(params[:empty_text])
|
61
|
+
else
|
62
|
+
html = render_to_string({
|
63
|
+
:partial => "caboose/page_blocks/#{bt.name}",
|
64
|
+
:locals => { :block => b, :empty_text => params[:empty_text] }
|
65
|
+
})
|
66
|
+
end
|
67
|
+
{
|
68
|
+
:id => b.id,
|
69
|
+
:page_block_type_id => bt.id,
|
70
|
+
:sort_order => b.sort_order,
|
71
|
+
:html => html
|
72
|
+
}
|
73
|
+
end
|
50
74
|
render :json => blocks
|
51
75
|
end
|
52
76
|
|
@@ -54,8 +78,10 @@ module Caboose
|
|
54
78
|
def admin_edit
|
55
79
|
return unless user_is_allowed('pages', 'edit')
|
56
80
|
@page = Page.find(params[:page_id])
|
57
|
-
|
58
|
-
|
81
|
+
PageBlock.create_field_values(params[:id])
|
82
|
+
@block = PageBlock.find(params[:id])
|
83
|
+
#render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal'
|
84
|
+
render :layout => 'caboose/modal'
|
59
85
|
end
|
60
86
|
|
61
87
|
# POST /admin/pages/:page_id/blocks
|
@@ -68,10 +94,8 @@ module Caboose
|
|
68
94
|
})
|
69
95
|
|
70
96
|
b = PageBlock.new
|
71
|
-
b.page_id
|
72
|
-
b.
|
73
|
-
b.name = params[:name] if params[:name]
|
74
|
-
b.value = params[:value] if params[:value]
|
97
|
+
b.page_id = params[:page_id].to_i
|
98
|
+
b.page_block_type_id = params[:page_block_type_id]
|
75
99
|
|
76
100
|
if !params[:index].nil?
|
77
101
|
b.sort_order = params[:index].to_i
|
@@ -101,28 +125,16 @@ module Caboose
|
|
101
125
|
|
102
126
|
resp = StdClass.new({'attributes' => {}})
|
103
127
|
b = PageBlock.find(params[:id])
|
128
|
+
obj = b.object
|
104
129
|
|
105
130
|
save = true
|
106
|
-
user = logged_in_user
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
i = b.sort_order + 1
|
114
|
-
PageBlock.where("page_id = ? and sort_order >= ?", b.page_id, b.sort_order).reorder(:sort_order).each do |b2|
|
115
|
-
b2.sort_order = i
|
116
|
-
b2.save
|
117
|
-
i = i + 1
|
118
|
-
end
|
119
|
-
when 'name'
|
120
|
-
b.name = value
|
121
|
-
when 'value'
|
122
|
-
b.value = value
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
131
|
+
user = logged_in_user
|
132
|
+
|
133
|
+
b.block_type_definition[:attributes].each do |attrib|
|
134
|
+
obj[attrib[:name]] = params[attrib[:name]] if params[attrib[:name]]
|
135
|
+
end
|
136
|
+
|
137
|
+
b.value = JSON.generate(obj)
|
126
138
|
resp.success = save && b.save
|
127
139
|
render :json => resp
|
128
140
|
end
|
@@ -138,4 +150,5 @@ module Caboose
|
|
138
150
|
end
|
139
151
|
|
140
152
|
end
|
153
|
+
|
141
154
|
end
|