caboose-cms 0.3.129 → 0.4.1

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 (72) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/caboose/admin_block_edit.js +267 -0
  3. data/app/assets/javascripts/caboose/admin_page_edit_content.js +71 -45
  4. data/app/assets/javascripts/caboose/admin_page_edit_content_bak.js +164 -0
  5. data/app/assets/javascripts/caboose/admin_page_new_blocks.js +4 -4
  6. data/app/assets/stylesheets/caboose/admin_page_edit_content.css +37 -16
  7. data/app/controllers/caboose/block_types_controller.rb +162 -0
  8. data/app/controllers/caboose/blocks_controller.rb +293 -0
  9. data/app/controllers/caboose/edit_controller.rb +33 -0
  10. data/app/controllers/caboose/pages_controller.rb +4 -3
  11. data/app/controllers/caboose/posts_controller.rb +1 -1
  12. data/app/models/caboose/block.rb +222 -0
  13. data/app/models/caboose/block_type.rb +28 -0
  14. data/app/models/caboose/core_plugin.rb +6 -6
  15. data/app/models/caboose/page.rb +8 -4
  16. data/app/models/caboose/schema.rb +90 -59
  17. data/app/models/caboose/utilities/schema.rb +3 -3
  18. data/app/views/caboose/block_types/admin_edit.html.erb +111 -0
  19. data/app/views/caboose/{page_block_types → block_types}/admin_index.html.erb +2 -2
  20. data/app/views/caboose/{page_block_types → block_types}/admin_new.html.erb +9 -6
  21. data/app/views/caboose/blocks/_block.html.erb +8 -0
  22. data/app/views/caboose/blocks/_heading.html.erb +7 -0
  23. data/app/views/caboose/blocks/_html.html.erb +7 -0
  24. data/app/views/caboose/blocks/_image.html.erb +0 -0
  25. data/app/views/caboose/blocks/_layout_default.html.erb +33 -0
  26. data/app/views/caboose/blocks/_layout_default_content.html.erb +16 -0
  27. data/app/views/caboose/blocks/_layout_default_footer.html.erb +20 -0
  28. data/app/views/caboose/blocks/_layout_default_header.html.erb +32 -0
  29. data/app/views/caboose/blocks/_richtext.html.erb +7 -0
  30. data/app/views/caboose/{page_blocks/_richtext.html.erb → blocks/_text.html.erb} +1 -2
  31. data/app/views/caboose/blocks/admin_edit.html.erb +106 -0
  32. data/app/views/caboose/{page_blocks → blocks}/admin_edit_custom.html.erb +0 -0
  33. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h1.html.erb +0 -0
  34. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h2.html.erb +0 -0
  35. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h3.html.erb +0 -0
  36. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h4.html.erb +0 -0
  37. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h5.html.erb +0 -0
  38. data/app/views/caboose/{page_blocks → blocks}/admin_edit_h6.html.erb +0 -0
  39. data/app/views/caboose/{page_blocks → blocks}/admin_edit_richtext.html.erb +0 -0
  40. data/app/views/caboose/blocks/admin_new.html.erb +55 -0
  41. data/app/views/caboose/pages/_admin_header.html.erb +1 -1
  42. data/app/views/caboose/pages/_content.html.erb +1 -1
  43. data/app/views/caboose/pages/_new_block_header.html.erb +13 -0
  44. data/app/views/caboose/pages/admin_edit_content.html.erb +24 -20
  45. data/app/views/caboose/pages/show.html.erb +13 -30
  46. data/app/views/layouts/caboose/application.html.erb +26 -14
  47. data/config/routes.rb +38 -30
  48. data/lib/caboose/engine.rb +2 -2
  49. data/lib/caboose/version.rb +1 -1
  50. metadata +33 -35
  51. data/app/controllers/caboose/page_block_field_values_controller.rb +0 -55
  52. data/app/controllers/caboose/page_block_fields_controller.rb +0 -123
  53. data/app/controllers/caboose/page_block_types_controller.rb +0 -100
  54. data/app/controllers/caboose/page_blocks_controller.rb +0 -165
  55. data/app/models/caboose/page_block.rb +0 -49
  56. data/app/models/caboose/page_block_field.rb +0 -21
  57. data/app/models/caboose/page_block_field_value.rb +0 -39
  58. data/app/models/caboose/page_block_renderers/h1.rb +0 -5
  59. data/app/models/caboose/page_block_renderers/h2.rb +0 -5
  60. data/app/models/caboose/page_block_renderers/h3.rb +0 -5
  61. data/app/models/caboose/page_block_renderers/h4.rb +0 -5
  62. data/app/models/caboose/page_block_renderers/h5.rb +0 -5
  63. data/app/models/caboose/page_block_renderers/h6.rb +0 -5
  64. data/app/models/caboose/page_block_renderers/p.rb +0 -5
  65. data/app/models/caboose/page_block_renderers/richtext.rb +0 -5
  66. data/app/models/caboose/page_block_type.rb +0 -12
  67. data/app/views/caboose/page_block_fields/admin_edit.html.erb +0 -77
  68. data/app/views/caboose/page_block_fields/admin_new.html.erb +0 -30
  69. data/app/views/caboose/page_block_types/admin_edit.html.erb +0 -82
  70. data/app/views/caboose/page_blocks/_heading.html.erb +0 -7
  71. data/app/views/caboose/page_blocks/_partial.html.erb +0 -11
  72. data/app/views/caboose/page_blocks/admin_edit.html.erb +0 -69
@@ -1,55 +0,0 @@
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
- # POST /admin/page-block-field-values/:id/image
27
- def admin_update_image
28
- return unless user_is_allowed('pages', 'edit')
29
-
30
- resp = StdClass.new({'attributes' => {}})
31
- fv = PageBlockFieldValue.find(params[:id])
32
- fv.image = params[:value]
33
- fv.save
34
- resp.success = true
35
- resp.attributes = { 'value' => { 'value' => fv.image.url(:tiny) }}
36
-
37
- render :json => resp
38
- end
39
-
40
- # POST /admin/page-block-field-values/:id/file
41
- def admin_update_file
42
- return unless user_is_allowed('pages', 'edit')
43
-
44
- resp = StdClass.new({'attributes' => {}})
45
- fv = PageBlockFieldValue.find(params[:id])
46
- fv.file = params[:value]
47
- fv.save
48
- resp.success = true
49
- resp.attributes = { 'value' => { 'value' => fv.file.url }}
50
-
51
- render :json => resp
52
- end
53
-
54
- end
55
- end
@@ -1,123 +0,0 @@
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' then field.page_block_type_id = v
66
- when 'name' then field.name = v
67
- when 'field_type' then field.field_type = v
68
- when 'nice_name' then field.nice_name = v
69
- when 'default' then field.default = v
70
- when 'width' then field.width = v
71
- when 'height' then field.height = v
72
- when 'fixed_placeholder' then field.fixed_placeholder = v
73
- when 'options' then field.options = v
74
- when 'options_function' then field.options_function = v
75
- when 'options_url' then field.options_url = v
76
- end
77
- end
78
-
79
- resp.success = save && field.save
80
- render :json => resp
81
- end
82
-
83
- # DELETE /admin/page-block-types/:block_type_id/fields/:id
84
- def admin_delete
85
- return unless user_is_allowed('pages', 'delete')
86
- PageBlockField.find(params[:id]).destroy
87
- resp = StdClass.new({
88
- 'redirect' => "/admin/page-block-types/#{params[:block_type_id]}/edit"
89
- })
90
- render :json => resp
91
- end
92
-
93
- # GET /admin/page-block-fields/field-type-options
94
- def admin_field_type_options
95
- return unless user_is_allowed('pages', 'edit')
96
- options = [
97
- { 'value' => 'checkbox' , 'text' => 'checkbox' },
98
- { 'value' => 'checkbox_multiple' , 'text' => 'checkbox_multiple' },
99
- { 'value' => 'image' , 'text' => 'image' },
100
- { 'value' => 'file' , 'text' => 'file' },
101
- { 'value' => 'richtext' , 'text' => 'richtext' },
102
- { 'value' => 'select' , 'text' => 'select' },
103
- { 'value' => 'text' , 'text' => 'text' },
104
- { 'value' => 'textarea' , 'text' => 'textarea' }
105
- ]
106
- render :json => options
107
- end
108
-
109
- # GET /admin/page-block-fields/:id/options
110
- def admin_field_options
111
- return unless user_is_allowed('pages', 'edit')
112
- f = PageBlockField.find(params[:id])
113
- options = []
114
- if f.options_function
115
- options = f.render_options
116
- elsif f.options
117
- options = f.options.strip.split("\n").collect { |line| { 'value' => line, 'text' => line }}
118
- end
119
- render :json => options
120
- end
121
-
122
- end
123
- end
@@ -1,100 +0,0 @@
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
@@ -1,165 +0,0 @@
1
-
2
- module Caboose
3
- class PageBlocksController < ApplicationController
4
-
5
- #===========================================================================
6
- # Admin actions
7
- #===========================================================================
8
-
9
- # GET /admin/pages/:page_id/blocks
10
- def admin_index
11
- return if !user_is_allowed('pages', 'view')
12
- blocks = PageBlock.where(:page_id => params[:page_id]).reorder(:sort_order)
13
- render :json => blocks
14
- end
15
-
16
- # GET /admin/pages/:page_id/blocks/new
17
- def admin_new
18
- return unless user_is_allowed('pages', 'add')
19
- @page = Page.find(params[:page_id])
20
- @block = PageBlock.new(:page_id => params[:page_id])
21
- render :layout => 'caboose/admin'
22
- end
23
-
24
- # GET /admin/pages/:page_id/blocks/:id
25
- def admin_show
26
- return unless user_is_allowed('pages', 'edit')
27
- block = PageBlock.find(params[:id])
28
- render :json => block
29
- end
30
-
31
- # GET /admin/pages/:page_id/blocks/:id/render
32
- def admin_render
33
- return unless user_is_allowed('pages', 'edit')
34
- b = PageBlock.find(params[:id])
35
- bt = b.page_block_type
36
- if bt.nil?
37
- bt = PageBlockType.where(:name => 'richtext').first
38
- b.page_block_type_id = bt.id
39
- b.save
40
- end
41
- html = nil
42
-
43
- if bt.use_render_function && bt.render_function
44
- html = b.render_from_function(params[:empty_text], true)
45
- else
46
- html = render_to_string({
47
- :partial => "caboose/page_blocks/#{b.page_block_type.name}",
48
- :locals => {
49
- :block => b,
50
- :empty_text => params[:empty_text],
51
- :editing => true
52
- }
53
- })
54
- end
55
- render :json => html
56
- end
57
-
58
- # GET /admin/pages/:page_id/blocks/render
59
- def admin_render_all
60
- return unless user_is_allowed('pages', 'edit')
61
- p = Page.find(params[:page_id])
62
- blocks = p.page_blocks.collect do |b|
63
- bt = b.page_block_type
64
- if bt.nil?
65
- bt = PageBlockType.where(:name => 'richtext').first
66
- b.page_block_type_id = bt.id
67
- b.save
68
- end
69
- html = nil
70
- if bt.use_render_function && bt.render_function
71
- html = b.render_from_function(params[:empty_text], true)
72
- else
73
- html = render_to_string({
74
- :partial => "caboose/page_blocks/#{bt.name}",
75
- :locals => { :block => b, :empty_text => params[:empty_text], :editing => true }
76
- })
77
- end
78
- {
79
- :id => b.id,
80
- :page_block_type_id => bt.id,
81
- :sort_order => b.sort_order,
82
- :html => html
83
- }
84
- end
85
- render :json => blocks
86
- end
87
-
88
- # GET /admin/pages/:page_id/blocks/:id/edit
89
- def admin_edit
90
- return unless user_is_allowed('pages', 'edit')
91
- @page = Page.find(params[:page_id])
92
- PageBlock.create_field_values(params[:id])
93
- @block = PageBlock.find(params[:id])
94
- #render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal'
95
- render :layout => 'caboose/modal'
96
- end
97
-
98
- # POST /admin/pages/:page_id/blocks
99
- def admin_create
100
- return unless user_is_allowed('pages', 'add')
101
-
102
- resp = Caboose::StdClass.new({
103
- 'error' => nil,
104
- 'redirect' => nil
105
- })
106
-
107
- b = PageBlock.new
108
- b.page_id = params[:page_id].to_i
109
- b.page_block_type_id = params[:page_block_type_id]
110
-
111
- if !params[:index].nil?
112
- b.sort_order = params[:index].to_i
113
- elsif params[:after_id]
114
- b2 = PageBlock.find(params[:after_id].to_i)
115
- b.sort_order = b2.sort_order + 1
116
- end
117
-
118
- i = b.sort_order + 1
119
- PageBlock.where("page_id = ? and sort_order >= ?", b.page_id, b.sort_order).reorder(:sort_order).each do |b2|
120
- b2.sort_order = i
121
- b2.save
122
- i = i + 1
123
- end
124
-
125
- # Save the block
126
- b.save
127
-
128
- # Send back the response
129
- resp.block = b
130
- render :json => resp
131
- end
132
-
133
- # PUT /admin/pages/:page_id/blocks/:id
134
- def admin_update
135
- return unless user_is_allowed('pages', 'edit')
136
-
137
- resp = StdClass.new({'attributes' => {}})
138
- b = PageBlock.find(params[:id])
139
- obj = b.object
140
-
141
- save = true
142
- user = logged_in_user
143
-
144
- b.block_type_definition[:attributes].each do |attrib|
145
- obj[attrib[:name]] = params[attrib[:name]] if params[attrib[:name]]
146
- end
147
-
148
- b.value = JSON.generate(obj)
149
- resp.success = save && b.save
150
- render :json => resp
151
- end
152
-
153
- # DELETE /admin/pages/:page_id/blocks/:id
154
- def admin_delete
155
- return unless user_is_allowed('pages', 'delete')
156
- PageBlock.find(params[:id]).destroy
157
- resp = StdClass.new({
158
- 'redirect' => "/admin/pages/#{params[:page_id]}/edit"
159
- })
160
- render :json => resp
161
- end
162
-
163
- end
164
-
165
- end
@@ -1,49 +0,0 @@
1
-
2
- class Caboose::PageBlock < ActiveRecord::Base
3
- self.table_name = "page_blocks"
4
-
5
- belongs_to :page
6
- belongs_to :page_block_type
7
- has_many :page_block_field_values
8
- attr_accessible :id, :page_id, :page_block_type_id, :sort_order
9
-
10
- def fields
11
- return page_block_type.fields
12
- end
13
-
14
- def field_value(name)
15
- page_block_field_values.each do |fv|
16
- if fv.page_block_field.name == name
17
- if fv.page_block_field.field_type == 'image' then return fv.image
18
- elsif fv.page_block_field.field_type == 'file' then return fv.file
19
- else return fv.value
20
- end
21
- end
22
- end
23
- return nil
24
- end
25
-
26
- def field_value_object(name)
27
- page_block_field_values.each do |fv|
28
- #Caboose.log("fv = #{fv}")
29
- return fv if fv.page_block_field.name == name
30
- end
31
- return nil
32
- end
33
-
34
- def self.create_field_values(block_id)
35
- block = self.find(block_id)
36
- block.page_block_type.fields.each do |f|
37
- if block.field_value_object(f.name).nil?
38
- Caboose::PageBlockFieldValue.create(:page_block_id => block.id, :page_block_field_id => f.id, :value => f.default)
39
- end
40
- end
41
- end
42
-
43
- def render_from_function(empty_text = nil, editing = false)
44
- locals = OpenStruct.new(:block => self, :empty_text => empty_text, :editing => editing)
45
- erb = ERB.new(page_block_type.render_function)
46
- return erb.result(locals.instance_eval { binding })
47
- end
48
-
49
- end