caboose-cms 0.3.12 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|