caboose-cms 0.8.44 → 0.8.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/caboose/admin_page_edit_content.js +14 -10
  3. data/app/assets/javascripts/caboose/block_modal_controllers/#Untitled-1# +3 -0
  4. data/app/assets/javascripts/caboose/block_modal_controllers/block_modal_controller.js +255 -0
  5. data/app/assets/javascripts/caboose/{modal_controllers/modal_button_controller.js → block_modal_controllers/button_modal_controller.js} +1 -1
  6. data/app/assets/javascripts/caboose/block_modal_controllers/default_block_modal_controller.js +237 -0
  7. data/app/assets/javascripts/caboose/{modal_controllers/modal_media_controller.js → block_modal_controllers/media_modal_controller.js} +36 -37
  8. data/app/assets/javascripts/caboose/block_modal_controllers/richtext_modal_controller.js +94 -0
  9. data/app/assets/javascripts/caboose/modal_controller.js +129 -0
  10. data/app/assets/javascripts/caboose/model/bound_richtext.js +5 -0
  11. data/app/assets/javascripts/caboose/tinymce_init.js +15 -0
  12. data/app/assets/stylesheets/caboose/admin_block_edit_image.css.scss +0 -9
  13. data/app/assets/stylesheets/caboose/icomoon_fonts.css +10 -2
  14. data/app/assets/stylesheets/caboose/modal_inline.css +12 -0
  15. data/app/controllers/caboose/blocks_controller.rb +29 -34
  16. data/app/views/caboose/blocks/tinymce.js.erb +1 -0
  17. data/app/views/caboose/pages/admin_edit_content.html.erb +7 -4
  18. data/lib/caboose/version.rb +1 -1
  19. metadata +11 -6
  20. data/app/assets/javascripts/caboose/modal_controllers/modal_block_controller.js +0 -325
  21. data/app/assets/javascripts/caboose/modal_controllers/modal_controller.js +0 -217
@@ -1,5 +1,5 @@
1
1
 
2
- var ModalMediaController = ModalController.extend({
2
+ var MediaModalController = DefaultBlockModalController.extend({
3
3
 
4
4
  media_id: false,
5
5
  top_cat_id: false,
@@ -24,6 +24,20 @@ var ModalMediaController = ModalController.extend({
24
24
  'plupload/jquery.ui.plupload/css/jquery.ui.plupload.css'
25
25
  ];
26
26
  },
27
+
28
+ refresh: function(callback)
29
+ {
30
+ var that = this;
31
+ that.refresh_block(function() {
32
+ that.refresh_categories(function() {
33
+ that.refresh_media(function() {
34
+ that.refresh_policy(function() {
35
+ that.print();
36
+ });
37
+ });
38
+ });
39
+ })
40
+ },
27
41
 
28
42
  refresh_categories: function(after)
29
43
  {
@@ -74,31 +88,12 @@ var ModalMediaController = ModalController.extend({
74
88
  });
75
89
  },
76
90
 
77
- print: function()
91
+ print_content: function()
78
92
  {
79
93
  var that = this;
80
- if (!that.block)
81
- {
82
- var div = $('<div/>')
83
- .append($('<div/>').attr('id', 'top_controls'))
84
- .append($('<div/>').attr('id', 'media' ))
85
- .append($('<div/>').attr('id', 'controls')
86
- .append($('<p/>').css('clear', 'both')
87
- .append($('<input/>').attr('type', 'button').val('Close' ).click(function(e) { that.parent_controller.render_blocks(); that.close(); }))
88
- )
89
- );
90
- that.modal(div, 800);
91
- that.refresh(function() {
92
- that.refresh_categories(function() {
93
- that.refresh_media(function() {
94
- that.refresh_policy(function() {
95
- that.print();
96
- });
97
- });
98
- });
99
- })
100
- return;
101
- }
94
+ $('#modal_content').empty()
95
+ .append($('<div/>').attr('id', 'top_controls' ))
96
+ .append($('<div/>').attr('id', 'media' ));
102
97
  that.print_top_controls();
103
98
  that.print_media();
104
99
  that.autosize();
@@ -214,9 +209,13 @@ var ModalMediaController = ModalController.extend({
214
209
  .append($('<p/>').append($('<div/>').attr('id', 'media_' + media_id + '_description' )))
215
210
  .append($('<h2/>').append('Image URLs'))
216
211
  .append(image_urls);
217
- $('#controls').empty()
212
+ $('#modal_controls').empty()
218
213
  .append($('<p/>').css('clear', 'both')
219
- .append($('<input/>').attr('type', 'button').val('< Back' ).click(function(e) { that.print_top_controls(); that.print_media(); }))
214
+ .append($('<input/>').attr('type', 'button').val('< Back' ).click(function(e) {
215
+ that.print_top_controls();
216
+ that.print_media();
217
+ that.print_controls();
218
+ }))
220
219
  .append($('<input/>').attr('type', 'button').val('Select this Image' ).click(function(e) { that.select_media(media_id) }))
221
220
  .append($('<input/>').attr('type', 'button').val('Close' ).click(function(e) { that.parent_controller.render_blocks(); that.close(); }))
222
221
  );
@@ -240,17 +239,17 @@ var ModalMediaController = ModalController.extend({
240
239
  $('#image_urls input.url' ).css('width', '270px').css('border', '#ccc 1px solid');
241
240
  $('#image_urls button').css('width', '60px');
242
241
 
243
- c = new Clipboard('.clippy');
244
- c.on('success', function(e) {
245
- console.info('Action:', e.action);
246
- console.info('Text:', e.text);
247
- console.info('Trigger:', e.trigger);
248
- e.clearSelection();
249
- });
250
- c.on('error', function(e) {
251
- console.error('Action:', e.action);
252
- console.error('Trigger:', e.trigger);
253
- });
242
+ //c = new Clipboard('.clippy');
243
+ //c.on('success', function(e) {
244
+ // console.info('Action:', e.action);
245
+ // console.info('Text:', e.text);
246
+ // console.info('Trigger:', e.trigger);
247
+ // e.clearSelection();
248
+ //});
249
+ //c.on('error', function(e) {
250
+ // console.error('Action:', e.action);
251
+ // console.error('Trigger:', e.trigger);
252
+ //});
254
253
 
255
254
  that.autosize();
256
255
  },
@@ -0,0 +1,94 @@
1
+
2
+ var RichtextModalController = DefaultBlockModalController.extend({
3
+
4
+ tinymce_initialized: false,
5
+ modal_width: 820,
6
+ modal_height: 500,
7
+
8
+ assets_to_include: function()
9
+ {
10
+ return [
11
+ '//cdn.tinymce.com/4/tinymce.min.js'
12
+ //'//tinymce.cachefly.net/4.0/tinymce.min.js',
13
+ //'caboose/tinymce_init.js'
14
+ ]
15
+ },
16
+
17
+ print_content: function()
18
+ {
19
+ var that = this;
20
+
21
+ $(document).bind('cbox_cleanup', function(){
22
+ if (tinymce.get('block_' + that.block_id + '_value'))
23
+ tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value');
24
+ });
25
+
26
+ var exists = true;
27
+ try { exists = tinymce && tinymce != null; } catch(err) { exists = false; }
28
+ if (!exists)
29
+ {
30
+ $('#modal_content').html("<p class='loading'>Loading...</p>");
31
+ setTimeout(function() { that.print_content(); }, 100)
32
+ return;
33
+ }
34
+ that.init_tinymce();
35
+ //if (tinymce.get('block_' + that.block_id + '_value'))
36
+ // tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value');
37
+
38
+ $('#modal_content').empty().append($('<div/>').attr('id', 'block_' + that.block_id + '_value'));
39
+ $(document).ready(function() {
40
+ m = new ModelBinder({
41
+ name: 'Block',
42
+ id: that.block.id,
43
+ update_url: that.block_url(),
44
+ authenticity_token: that.authenticity_token,
45
+ attributes: [{
46
+ name: 'value',
47
+ nice_name: 'Content',
48
+ type: 'richtext',
49
+ value: that.block.value,
50
+ width: 800,
51
+ height: 300,
52
+ fixed_placeholder: false,
53
+ after_update: function() {
54
+ tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value');
55
+ that.parent_controller.render_blocks();
56
+ that.close();
57
+ },
58
+ after_cancel: function() { that.parent_controller.render_blocks(); that.close(); }
59
+ }]
60
+ });
61
+ });
62
+ that.autosize();
63
+ },
64
+
65
+ before_crumbtrail_click: function() { var that = this; tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value'); },
66
+ before_close: function() { var that = this; tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value'); },
67
+ before_print_advanced: function() { var that = this; tinymce.EditorManager.execCommand('mceRemoveEditor', true, 'block_' + that.block_id + '_value'); },
68
+
69
+ init_tinymce: function(force)
70
+ {
71
+ var that = this;
72
+ if (force || that.parent_controller.tinymce_initialized == undefined)
73
+ {
74
+ console.log("Initializing tinymce...");
75
+
76
+ tinymce.init({
77
+ selector: 'textarea.tinymce',
78
+ width: '800px',
79
+ height: '300px',
80
+ convert_urls: false,
81
+ plugins: 'advlist autolink lists link image charmap print preview hr anchor pagebreak searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking table contextmenu directionality emoticons template paste textcolor caboose',
82
+ toolbar1: 'caboose_save caboose_cancel | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
83
+ image_advtab: true,
84
+ external_plugins: { 'caboose': '//d9hjv462jiw15.cloudfront.net/assets/tinymce/plugins/caboose/plugin.js' },
85
+ setup: function(editor) {
86
+ var control = ModelBinder.tinymce_control(editor.id);
87
+ editor.on('keyup', function(e) { control.tinymce_change(editor); });
88
+ }
89
+ });
90
+ that.parent_controller.tinymce_initialized = true;
91
+ }
92
+ }
93
+
94
+ });
@@ -0,0 +1,129 @@
1
+
2
+ var ModalController = Class.extend({
3
+
4
+ modal_width: false,
5
+ modal_height: false,
6
+ modal_element: false,
7
+ parent_controller: false,
8
+
9
+ modal: function(el, width, height, callback)
10
+ {
11
+ var that = this;
12
+ if (!width) width = that.modal_width ? that.modal_width : 400;
13
+ if (!height) height = that.modal_height ? that.modal_height : $(el).outerHeight(true);
14
+ that.modal_element = el;
15
+ el.attr('id', 'the_modal').addClass('modal').css('width', '' + width + 'px');
16
+ $.colorbox({
17
+ html: el,
18
+ initialWidth: width,
19
+ //initialHeight: height,
20
+ innerWidth: width,
21
+ //innerHeight: height,
22
+ scrolling: false,
23
+ closeButton: false,
24
+ opacity: 0.50,
25
+ onComplete: function() {
26
+ var arr = ['TopLeft','TopCenter','TopRight','BottomLeft','BottomCenter','BottomRight','MiddleLeft','MiddleRight'];
27
+ for (var i in arr) $('#cbox' + arr[i]).css('background-color', '#fff !important');
28
+ $("#cboxClose").hide();
29
+ if (callback) callback();
30
+ }
31
+ });
32
+ },
33
+
34
+ last_size: 0,
35
+ autosize: function(msg, msg_container, flag)
36
+ {
37
+ var that = this;
38
+ if (!flag)
39
+ that.last_size = 0;
40
+ if (!that.modal_element) return;
41
+ if (msg) $('#' + (msg_container ? msg_container : 'modal_message')).html(msg);
42
+ var h = that.modal_height ? that.modal_height : $(that.modal_element).outerHeight(true) + 20;
43
+ if (h > 0 && h > that.last_size)
44
+ $.colorbox.resize({ innerHeight: '' + h + 'px' });
45
+ that.last_size = h;
46
+
47
+ if (!flag || flag < 2)
48
+ setTimeout(function() { that.autosize(false, false, flag ? flag + 1 : 1); }, 200);
49
+ },
50
+
51
+ before_close: false,
52
+ close: function()
53
+ {
54
+ var that = this;
55
+ if (that.before_close) that.before_close();
56
+ $.colorbox.close();
57
+ },
58
+
59
+ /*****************************************************************************
60
+ Asset management
61
+ *****************************************************************************/
62
+
63
+ // To be overridden in each controller
64
+ assets_to_include: function() { return []; },
65
+
66
+ // Called at the beginning of init to include modal assets,
67
+ // and can be called at anytime with more assets
68
+ include_assets: function(arr)
69
+ {
70
+ var that = this;
71
+ if (!arr) arr = that.assets_to_include();
72
+ if (!arr) return;
73
+
74
+ if (!that.parent_controller.included_assets || that.parent_controller.included_assets == undefined)
75
+ that.parent_controller.included_assets = [];
76
+ if (typeof arr == 'string') arr = [arr];
77
+ $.each(arr, function(i, url) {
78
+ if (that.parent_controller.included_assets.indexOf(url) > -1) return;
79
+ var full_url = url.match(/^http:.*?/) || url.match(/^https:.*?$/) || url.match(/^\/\/.*?$/) ? url : that.assets_path + url;
80
+ if (url.match(/\.js/))
81
+ {
82
+ var el = document.createElement('script');
83
+ el.setAttribute('type', 'text/javascript');
84
+ el.setAttribute('src', full_url);
85
+ document.getElementsByTagName('head')[0].appendChild(el)
86
+ }
87
+ else if (url.match(/\.css/))
88
+ {
89
+ var el = document.createElement('link');
90
+ el.setAttribute('rel', 'stylesheet');
91
+ el.setAttribute('type', 'text/css');
92
+ el.setAttribute('href', full_url);
93
+ document.getElementsByTagName('head')[0].appendChild(el)
94
+ }
95
+ that.parent_controller.included_assets.push(url);
96
+ });
97
+ },
98
+
99
+ include_inline_css: function(str)
100
+ {
101
+ var that = this;
102
+
103
+ if (!that.parent_controller.included_css || that.parent_controller.included_css == undefined)
104
+ that.parent_controller.included_css = [];
105
+ var h = that.hashify(str);
106
+ if (that.parent_controller.included_css.indexOf(h) > -1)
107
+ return;
108
+
109
+ var el = document.createElement('style');
110
+ el.setAttribute('type', 'text/css');
111
+ el.innerHTML = str;
112
+ document.getElementsByTagName('head')[0].appendChild(el)
113
+
114
+ that.parent_controller.included_css.push(h);
115
+ },
116
+
117
+ hashify: function(str)
118
+ {
119
+ var hash = 0, i, chr, len;
120
+ if (str.length === 0) return hash;
121
+ for (i=0, len=str.length; i<len; i++) {
122
+ chr = str.charCodeAt(i);
123
+ hash = ((hash << 5) - hash) + chr;
124
+ hash |= 0; // Convert to 32bit integer
125
+ }
126
+ return hash;
127
+ }
128
+
129
+ });
@@ -43,6 +43,11 @@ BoundRichText = BoundControl.extend({
43
43
  setTimeout(function() {
44
44
  //tinymce.EditorManager.execCommand("mceAddEditor", false, this2.el);
45
45
  //tinymce.EditorManager.execCommand("mceAddEditor", false, this2.el);
46
+
47
+ if (tinymce.get(this2.el))
48
+ {
49
+ try { tinymce.EditorManager.execCommand('mceRemoveEditor', true, this2.el); } catch(err) {}
50
+ }
46
51
  tinymce.execCommand("mceAddEditor", false, this2.el);
47
52
  //var ed = tinymce.EditorManager.createEditor(this2.el);
48
53
  //alert(ed);
@@ -0,0 +1,15 @@
1
+
2
+ tinymce.init({
3
+ selector: 'textarea.tinymce',
4
+ width: '800px',
5
+ height: '300px',
6
+ convert_urls: false,
7
+ plugins: 'advlist autolink lists link image charmap print preview hr anchor pagebreak searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking table contextmenu directionality emoticons template paste textcolor caboose',
8
+ toolbar1: 'caboose_save caboose_cancel | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
9
+ image_advtab: true,
10
+ external_plugins: { 'caboose': '//d9hjv462jiw15.cloudfront.net/assets/tinymce/plugins/caboose/plugin.js' },
11
+ setup: function(editor) {
12
+ var control = ModelBinder.tinymce_control(editor.id);
13
+ editor.on('keyup', function(e) { control.tinymce_change(editor); });
14
+ }
15
+ });
@@ -155,12 +155,3 @@
155
155
  }
156
156
  }
157
157
  }
158
-
159
- #the_modal div.icons { height: 400px; overflow-y: scroll; }
160
- #the_modal div.icons h2 { clear: both; padding: 20px 0px 10px 0; text-align: center; }
161
- #the_modal div.icons a { display: block; float: left; margin: 4px; border: #fff 0px solid; width: 120px; height: 100px; text-align: center; vertical-align: middle; border: #666 4px solid; }
162
- #the_modal div.icons a span.icon { display: block; padding: 10px 20px; font-size: 24pt; color: #fff; }
163
- #the_modal div.icons a span.name { display: block; }
164
- #the_modal div.icons a:hover { background: #fff69f; color: #000; border: #666 0px solid; border: #666 4px solid; }
165
- #the_modal div.icons a:hover span.icon { color: #000; }
166
- #the_modal div.icons a:hover span.name { color: #000; }
@@ -1,3 +1,4 @@
1
+ /*
1
2
  @font-face {
2
3
  font-family: 'icomoon';
3
4
  src:url('/assets/icomoon.eot?-tne7s4');
@@ -8,9 +9,16 @@
8
9
  font-weight: normal;
9
10
  font-style: normal;
10
11
  }
12
+ */
11
13
 
12
- [class^="icon-"], [class*=" icon-"] {
13
- font-family: 'icomoon';
14
+ #the_modal div.icons [class^="icon-"]:before,
15
+ #the_modal div.icons [class*=" icon-"]:before {
16
+ font-family: 'icomoon' !important;
17
+ }
18
+
19
+ #the_modal div.icons [class^="icon-"],
20
+ #the_modal div.icons [class*=" icon-"] {
21
+ font-family: 'icomoon' !important;
14
22
  speak: none;
15
23
  font-style: normal;
16
24
  font-weight: normal;
@@ -1,4 +1,13 @@
1
1
 
2
+ #the_modal div.icons { max-height: 800px; overflow-y: scroll; }
3
+ #the_modal div.icons h2 { clear: both; padding: 20px 0px 10px 0; text-align: center; }
4
+ #the_modal div.icons a { display: block; float: left; margin: 4px; width: 120px; height: 100px; text-align: center; vertical-align: middle; border: #000 1px solid; text-decoration: none; border-radius: 3px; overflow: hidden; }
5
+ #the_modal div.icons a span.icon { display: block; padding: 10px 20px; font-size: 24pt; color: #000 !important; }
6
+ #the_modal div.icons a span.name { display: block; font-size: 12pt; color: #000 !important; }
7
+ #the_modal div.icons a:hover { color: #000 !important; background: #fff69f; border: #000 1px solid; }
8
+ #the_modal div.icons a:hover span.icon { color: #000 !important; }
9
+ #the_modal div.icons a:hover span.name { color: #000 !important; }
10
+
2
11
  #the_modal { box-sizing: border-box; }
3
12
  #the_modal p { margin-bottom: 10px; }
4
13
  #the_modal .mb_container input { border: #ccc 1px solid; }
@@ -7,4 +16,7 @@
7
16
  #the_modal div.mb_container select { border: #ccc 1px solid; height: 36px; }
8
17
  #the_modal div.mb_container select option { font-size: 16px; }
9
18
  #the_modal div.mb_container input[type=checkbox] { top: 12px; }
19
+ #the_modal #modal_crumbtrail,
20
+ #the_modal #modal_crumbtrail h2,
21
+ #the_modal #modal_crumbtrail h2 a { font-size: 16pt !important; }
10
22
 
@@ -82,18 +82,18 @@ module Caboose
82
82
  'id' => b.id,
83
83
  'parent_id' => b.parent_id,
84
84
  'page_id' => b.page_id,
85
- 'post_id' => b.post_id,
86
- 'block_type' => bt,
87
- 'block_type_id' => bt.id,
88
- 'children' => admin_tree_helper(b),
89
- 'field_type' => bt.field_type,
90
- 'allow_child_blocks' => bt.allow_child_blocks,
91
- 'use_js_for_modal' => bt.use_js_for_modal,
92
- 'name' => b.name ? b.name : bt.name,
85
+ 'post_id' => b.post_id,
86
+ 'name' => b.name,
93
87
  'value' => b.value,
94
88
  'constrain' => b.constrain,
95
89
  'full_width' => b.full_width,
90
+ 'block_type' => bt,
91
+ 'children' => admin_tree_helper(b),
96
92
  'crumbtrail' => self.crumbtrail(b)
93
+ #'block_type_id' => bt.id,
94
+ #'field_type' => bt.field_type,
95
+ #'allow_child_blocks' => bt.allow_child_blocks,
96
+ #'use_js_for_modal' => bt.use_js_for_modal,
97
97
  }
98
98
  else
99
99
  q = params[:page_id] ? ["parent_id is null and page_id = ?", params[:page_id]] : ["parent_id is null and post_id = ?", params[:post_id]]
@@ -103,17 +103,17 @@ module Caboose
103
103
  'id' => b.id,
104
104
  'parent_id' => b.parent_id,
105
105
  'page_id' => b.page_id,
106
- 'post_id' => b.post_id,
107
- 'block_type' => bt,
108
- 'block_type_id' => bt.id,
109
- 'children' => admin_tree_helper(b),
110
- 'field_type' => bt.field_type,
111
- 'allow_child_blocks' => bt.allow_child_blocks,
112
- 'use_js_for_modal' => bt.use_js_for_modal,
113
- 'name' => b.name ? b.name : bt.name,
106
+ 'post_id' => b.post_id,
107
+ 'name' => b.name,
114
108
  'value' => b.value,
115
109
  'constrain' => b.constrain,
116
- 'full_width' => b.full_width
110
+ 'full_width' => b.full_width,
111
+ 'block_type' => bt,
112
+ 'children' => admin_tree_helper(b)
113
+ #'block_type_id' => bt.id,
114
+ #'field_type' => bt.field_type,
115
+ #'allow_child_blocks' => bt.allow_child_blocks,
116
+ #'use_js_for_modal' => bt.use_js_for_modal,
117
117
  }
118
118
  end
119
119
  end
@@ -143,16 +143,16 @@ module Caboose
143
143
  'parent_id' => b2.parent_id,
144
144
  'page_id' => b2.page_id,
145
145
  'post_id' => b2.post_id,
146
- 'block_type' => bt,
147
- 'block_type_id' => bt.id,
148
- 'children' => admin_tree_helper(b2),
149
- 'field_type' => bt.field_type,
150
- 'allow_child_blocks' => bt.allow_child_blocks,
151
- 'use_js_for_modal' => bt.use_js_for_modal,
152
- 'name' => b2.name ? b2.name : bt.name,
146
+ 'name' => b2.name,
153
147
  'value' => b2.value,
154
148
  'constrain' => b2.constrain,
155
- 'full_width' => b2.full_width
149
+ 'full_width' => b2.full_width,
150
+ 'block_type' => bt,
151
+ 'children' => admin_tree_helper(b2)
152
+ #'block_type_id' => bt.id,
153
+ #'field_type' => bt.field_type,
154
+ #'allow_child_blocks' => bt.allow_child_blocks,
155
+ #'use_js_for_modal' => bt.use_js_for_modal,
156
156
  }
157
157
  end
158
158
  return arr
@@ -306,10 +306,7 @@ module Caboose
306
306
  def admin_create
307
307
  return unless user_is_allowed('pages', 'add')
308
308
 
309
- resp = Caboose::StdClass.new({
310
- 'error' => nil,
311
- 'redirect' => nil
312
- })
309
+ resp = Caboose::StdClass.new
313
310
 
314
311
  b = Block.new
315
312
  if params[:page_id]
@@ -369,11 +366,9 @@ module Caboose
369
366
 
370
367
  # Send back the response
371
368
  #resp.block = b
372
- if params[:page_id]
373
- resp.redirect = "/admin/pages/#{b.page_id}/blocks/#{b.id}/edit"
374
- else
375
- resp.redirect = "/admin/posts/#{b.post_id}/blocks/#{b.id}/edit"
376
- end
369
+ resp.success = true
370
+ resp.new_id = b.id
371
+ resp.redirect = params[:page_id] ? "/admin/pages/#{b.page_id}/blocks/#{b.id}" : "/admin/posts/#{b.post_id}/blocks/#{b.id}"
377
372
  render :json => resp
378
373
  end
379
374