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.
Files changed (37) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/caboose/admin_page_edit_content.js +6 -6
  3. data/app/controllers/caboose/page_block_field_values_controller.rb +27 -0
  4. data/app/controllers/caboose/page_block_fields_controller.rb +139 -0
  5. data/app/controllers/caboose/page_block_types_controller.rb +100 -0
  6. data/app/controllers/caboose/page_blocks_controller.rb +49 -36
  7. data/app/controllers/caboose/pages_controller.rb +2 -1
  8. data/app/models/caboose/core_plugin.rb +25 -5
  9. data/app/models/caboose/page.rb +4 -4
  10. data/app/models/caboose/page_block.rb +36 -15
  11. data/app/models/caboose/page_block_field.rb +9 -0
  12. data/app/models/caboose/page_block_field_value.rb +9 -0
  13. data/app/models/caboose/page_block_renderers/h1.rb +5 -0
  14. data/app/models/caboose/page_block_renderers/h2.rb +5 -0
  15. data/app/models/caboose/page_block_renderers/h3.rb +5 -0
  16. data/app/models/caboose/page_block_renderers/h4.rb +5 -0
  17. data/app/models/caboose/page_block_renderers/h5.rb +5 -0
  18. data/app/models/caboose/page_block_renderers/h6.rb +5 -0
  19. data/app/models/caboose/page_block_renderers/p.rb +5 -0
  20. data/app/models/caboose/page_block_renderers/richtext.rb +5 -0
  21. data/app/models/caboose/page_block_type.rb +12 -0
  22. data/app/models/caboose/schema.rb +48 -7
  23. data/app/views/caboose/page_block_fields/admin_edit.html.erb +70 -0
  24. data/app/views/caboose/page_block_fields/admin_new.html.erb +30 -0
  25. data/app/views/caboose/page_block_types/admin_edit.html.erb +77 -0
  26. data/app/views/caboose/page_block_types/admin_index.html.erb +24 -0
  27. data/app/views/caboose/page_block_types/admin_new.html.erb +30 -0
  28. data/app/views/caboose/page_blocks/_heading.html.erb +7 -0
  29. data/app/views/caboose/page_blocks/_richtext.html.erb +8 -0
  30. data/app/views/caboose/page_blocks/admin_edit.html.erb +32 -13
  31. data/app/views/caboose/page_blocks/admin_edit_custom.html.erb +35 -0
  32. data/app/views/caboose/pages/_content.html.erb +3 -0
  33. data/app/views/caboose/pages/admin_edit_content.html.erb +1 -7
  34. data/config/routes.rb +19 -0
  35. data/lib/caboose/engine.rb +1 -1
  36. data/lib/caboose/version.rb +1 -1
  37. metadata +25 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTQxYjY4ZjYyNTE4ODQ3ODg5MDRkOGVlNjVkMzgzYzQxYmVlYjE2ZA==
4
+ MzM5Yzk3ZmMyZDA3MTIzZjQ5NjcxNjEyOWY3NWQ3ZTk4ZDE1ZDA2MQ==
5
5
  data.tar.gz: !binary |-
6
- ZmFkM2ZjZmY0NDBjZGU3NWZiYmNhYzdlOWUyM2UwOWZjODAzODEzMQ==
6
+ ZTc2ZGZmYTkxYTI0MTI5ZGRiM2Y2ZTg4ZDBkNjQyYjk0OWE3YjJjMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Yjk5ZWI2MDM5MmYyNGQzOWQyYzU0OTY3YzcyNzYxYmI4M2IyZDQ1ZjVjNGVh
10
- OTA3MWQzYThhNTMyNTNiYWRhNjEwMTY0YTJiMDA0MDNjNjNhMTU3OWIyMjFh
11
- YjRkZTYyMWM5NWFhM2YxOGU2YTE5YjA5MGE5YmNlYjQ5MzBhZTg=
9
+ NWMwZThjYjUwMzliOGEzZmQ4ZTlhNTYzYWI5M2U5MmU0M2I4NjUwYWNjZDY0
10
+ NWU4OTA2ZTg3M2YwNWZjYjJiMmMxMjlmYzVjMzE0Y2M1ZDA2OTM0NjViMjAx
11
+ NmRmODA1MGNkMmEzYThlOGZmMzU4OTNmNmRiMDU1M2Y0YWVkNjQ=
12
12
  data.tar.gz: !binary |-
13
- MDIyNDkwODc4N2MzNjFmMzIyNDJkZWI4OTRlZTYwYjc2MjJhNWZjM2UyNDNl
14
- YTgxMDJjOTk0YzAxMjkyMTBjY2YwNDY3Nzg0ZjYxNTc1Y2I1ODcyZjdiZjc2
15
- MjM0NWFjYmU0OTEyN2ZmYzBlMzU0ZjQ3MWEzZGYxZjgzYjJmNjQ=
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
- new_block_type: false,
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.new_block_type = ui.item.attr('id').replace('new_block_', '');
26
+ that.new_block_type_id = ui.item.attr('id').replace('new_block_', '');
27
27
  },
28
28
  update: function(e, ui) {
29
- if (that.new_block_type)
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: { block_type: that.new_block_type, index: ui.item.index() },
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.new_block_type = false;
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
- block = PageBlock.find(params[:id])
35
- render :text => block.render(params[:empty_text])
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.blocks.collect { |b| {
43
- :id => b.id,
44
- :block_type => b.block_type,
45
- :sort_order => b.sort_order,
46
- :name => b.name,
47
- :value => b.value,
48
- :html => b.render(params[:empty_text])
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
- @block = PageBlock.find(params[:id])
58
- render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal'
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 = params[:page_id].to_i
72
- b.block_type = params[:block_type]
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
- params.each do |name, value|
108
- case name
109
- when 'block_type'
110
- b.block_type = value
111
- when 'sort_order'
112
- b.sort_order = value.to_i
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