caboose-cms 0.4.149 → 0.4.150

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjA2MGI3NWRhMWVlMDFlNmRiYjg1YzlhMWRhOWNjOTkwOTBmMDU1OA==
4
+ ZGZlMDM5NDZkZTI0NjBkZmQyN2JkMmM0M2M5Mzc1YjQ0MzMxOGNjOA==
5
5
  data.tar.gz: !binary |-
6
- NDdlYmZlOGU5NzY3NDhjMGE5NTE2Y2E2ZjJhM2RkNjY1MDQ2YjFmMQ==
6
+ M2QzNWNlYmY2YWJiZjY2OWNkMGU2YTc3M2FjMjg4OTczMDQxMjBmZg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OGZhM2UzMzY5MWM1ZGZlNDdkMTg3ZDc4MTQwYzVkOGQ1M2M3M2ZmNjJmOWE2
10
- ZWU0YTdiMGI2ZDdjMzk2NTYxYmZiMGE0MGJjNmYzYmMyZGNlY2M0MTAwNWQz
11
- NzFjZjEyM2E4ZmIyZGEwZjgzODY5MWI1ZDQ0NTIxZDkwNzQwYzc=
9
+ Y2EzYWExMDU3MzY4MjA4ZjdlZmIxYWU2MzY4ZTk5YmQyMDJjZTYyYWExYTA4
10
+ NTM5ODk1MDgzNjA0OGRkNjg3ZDMxY2Q0NTFkMTdmMDkzZGNiNzY1OTM1Yzc0
11
+ MzYxZTY2YTJlMjQ2Nzc4OWUwNjM4YTZkM2JkYWU2YTIzMDhhYTk=
12
12
  data.tar.gz: !binary |-
13
- OTI5M2M5Y2FkYTU3MjVjM2EyY2U5N2JhYzJmOTAxODEyYmYzMzYzMDA2ZWQ3
14
- MTBiZDQyMGNhZDhkMWI5MWQ2ZmVjYmM3MDllOTNhMDRjNDVmYmM1MjkzMWI3
15
- ODM1ZGEyZWE3OGY2NDI4Yjg4ZmViMzQwNmM2ZmY1ZWZhZDhiYjI=
13
+ MmNiMzg1ZTIzMTkzZGE3ZTE1Y2E4NzRiYzg5MWUxYmU1NGQ0MmY2NjFkYWI5
14
+ OTI2YWUyZjdkOGYyOWNhMmIxYzFkMzk2YTdlMDk5MjdiODQyNDQ3NTQwMzcy
15
+ MDQ2ZWI3NTQ2MThmM2QwMzU3OWRiYmQ2MjJkZjYyZDI3ZjIxOWQ=
@@ -31,6 +31,9 @@ IndexTable.prototype = {
31
31
  // Example: function(model_id) { return '/admin/models/' + model_id + '/duplicate' },
32
32
  duplicate_url: false,
33
33
 
34
+ // Where to post new models
35
+ add_url: false,
36
+
34
37
  // What to do when a row is clicked
35
38
  // Example: function (model_id) { return '/admin/models/' + model_id; }
36
39
  row_click_handler: false,
@@ -56,7 +59,13 @@ IndexTable.prototype = {
56
59
  allow_bulk_edit: true,
57
60
  allow_bulk_delete: true,
58
61
  allow_duplicate: true,
59
-
62
+
63
+ no_models_text: "There are no models right now.",
64
+ new_model_text: 'New',
65
+ new_model_fields: [
66
+ { name: 'name', nice_name: 'Name', type: 'text', width: 400 }
67
+ ],
68
+
60
69
  //============================================================================
61
70
  // End of required parameters
62
71
  //============================================================================
@@ -64,15 +73,10 @@ IndexTable.prototype = {
64
73
  models: [],
65
74
  model_ids: [],
66
75
  quick_edit_field: false, // The field currently being edited
67
- refresh_count: 0,
68
-
69
- // Pager fields
70
- pager_params: {
71
- //sort: '',
72
- //desc: false,
73
- //item_count: 0,
74
- //items_per_page: 4,
75
- //page: 1
76
+ refresh_count: 0,
77
+ pager: {
78
+ options: { page: 1 },
79
+ params: {}
76
80
  },
77
81
 
78
82
  init: function(params) {
@@ -82,7 +86,8 @@ IndexTable.prototype = {
82
86
  var that = this;
83
87
  if (!this.refresh_url ) this.refresh_url = this.base_url + '/json';
84
88
  if (!this.bulk_update_url ) this.bulk_update_url = this.base_url + '/bulk';
85
- if (!this.bulk_delete_url ) this.bulk_delete_url = this.base_url + '/bulk';
89
+ if (!this.bulk_delete_url ) this.bulk_delete_url = this.base_url + '/bulk';
90
+ if (!this.add_url ) this.add_url = this.base_url;
86
91
  if (!this.update_url ) this.update_url = function(model_id) { return this.base_url + '/' + model_id; };
87
92
  if (!this.duplicate_url ) this.duplicate_url = function(model_id) { return this.base_url + '/' + model_id + '/duplicate'; };
88
93
  if (!this.row_click_handler ) this.row_click_handler = function(model_id) { window.location = this.base_url + '/' + model_id; };
@@ -122,8 +127,13 @@ IndexTable.prototype = {
122
127
  }
123
128
 
124
129
  // Set both hash and querystring values in the pager
125
- for (var i in b)
126
- this.pager_params[i] = b[i];
130
+ for (var i in b)
131
+ {
132
+ if (i == 'sort' || i == 'desc' || i == 'page')
133
+ this.pager.options[i] = b[i];
134
+ else
135
+ this.pager.params[i] = b[i];
136
+ }
127
137
 
128
138
  // If there's a querystring, then redirect to hash
129
139
  //if (window.location.search.length > 0)
@@ -134,25 +144,26 @@ IndexTable.prototype = {
134
144
  },
135
145
 
136
146
  refresh: function()
137
- {
147
+ {
148
+ this.pager = { options: { page: 1 }, params: {}};
138
149
  this.parse_querystring();
139
150
 
140
151
  var that = this;
141
- var $el = $('#columns').length > 0 ? $('#table_container') : $('#'+this.container);
142
- $el.html("<p class='loading'>Refreshing...</p>");
152
+ var $el = $('#' + this.container + '_columns').length > 0 ? $('#' + this.container + '_table_container') : $('#' + this.container);
153
+ $el.html("<p class='loading'>Refreshing...</p>");
143
154
  $.ajax({
144
155
  url: that.refresh_url,
145
156
  type: 'get',
146
- data: that.pager_params.params,
147
- success: function(resp) {
157
+ data: that.pager_params(),
158
+ success: function(resp) {
148
159
  for (var thing in resp['pager'])
149
- that.pager_params[thing] = resp['pager'][thing];
160
+ that.pager[thing] = resp['pager'][thing];
150
161
  that.models = resp['models'];
151
162
  for (var i=0; i<that.models.length; i++)
152
163
  {
153
164
  var m = that.models[i];
154
165
  m.id = parseInt(m.id);
155
- }
166
+ }
156
167
  that.print();
157
168
 
158
169
  // Set the history state
@@ -172,34 +183,48 @@ IndexTable.prototype = {
172
183
  {
173
184
  var that = this;
174
185
 
186
+ if (that.models == null || that.models.length == 0)
187
+ {
188
+ $('#' + that.container).empty()
189
+ .append($('<p/>').append(that.new_model_link()))
190
+ .append($('<div/>').attr('id', that.container + '_new_form_container'))
191
+ .append($('<p/>').append(that.no_models_text));
192
+ return;
193
+ }
194
+
175
195
  var tbody = $('<tbody/>').append(this.table_headers());
176
196
  $.each(that.models, function(i, m) {
177
197
  tbody.append(that.table_row(m));
178
198
  });
179
199
  var table = $('<table/>').addClass('data').css('margin-bottom', '10px').append(tbody);
180
- var pager = this.pager();
200
+ var pager_div = this.pager_div();
181
201
 
182
- if ($('#columns').length > 0)
202
+ if ($('#' + this.container + '_columns').length > 0)
183
203
  {
184
- $('#table_container').empty().append(table);
185
- $('#pager').empty().append(pager);
204
+ $('#' + this.container + '_table_container').empty().append(table);
205
+ $('#' + this.container + '_pager').empty().append(pager_div);
206
+ $('#' + this.container + '_new_form_container').empty();
186
207
  }
187
208
  else
188
209
  {
189
210
  var columns = this.column_checkboxes();
190
211
  var controls = $('<p/>');
191
- if (this.allow_bulk_edit ) controls.append($('<input/>').attr('type', 'button').attr('id', 'bulk_edit' ).val('Bulk Edit' ).click(function(e) { that.bulk_edit(); })).append(' ');
192
- if (this.allow_bulk_delete ) controls.append($('<input/>').attr('type', 'button').attr('id', 'bulk_delete').val('Bulk Delete').click(function(e) { that.bulk_delete(); })).append(' ');
193
- if (this.allow_duplicate ) controls.append($('<input/>').attr('type', 'button').attr('id', 'duplicate' ).val('Duplicate' ).click(function(e) { that.duplicate(); }));
212
+ if (this.allow_bulk_edit ) controls.append($('<input/>').attr('type', 'button').attr('id', this.container + '_bulk_edit' ).val('Bulk Edit' ).click(function(e) { that.bulk_edit(); })).append(' ');
213
+ if (this.allow_bulk_delete ) controls.append($('<input/>').attr('type', 'button').attr('id', this.container + '_bulk_delete').val('Bulk Delete').click(function(e) { that.bulk_delete(); })).append(' ');
214
+ if (this.allow_duplicate ) controls.append($('<input/>').attr('type', 'button').attr('id', this.container + '_duplicate' ).val('Duplicate' ).click(function(e) { that.duplicate(); }));
194
215
 
195
216
  $('#' + that.container).empty()
196
- .append($('<a/>').attr('href', '#').html('Show/Hide Columns').click(function(e) { e.preventDefault(); $('#columns').slideToggle(); }))
197
- .append($('<div/>').attr('id', 'columns').append(columns))
198
- .append($('<div/>').attr('id', 'table_container').append(table))
199
- .append($('<div/>').attr('id', 'pager').append(pager))
200
- .append($('<div/>').attr('id', 'message'))
217
+ .append($('<p/>')
218
+ .append(that.new_model_link()).append(' | ')
219
+ .append($('<a/>').attr('href', '#').html('Show/Hide Columns').click(function(e) { e.preventDefault(); $('#' + that.container + '_columns').slideToggle(); }))
220
+ )
221
+ .append($('<div/>').attr('id', that.container + '_new_form_container'))
222
+ .append($('<div/>').attr('id', that.container + '_columns').append(columns))
223
+ .append($('<div/>').attr('id', that.container + '_table_container').append(table))
224
+ .append($('<div/>').attr('id', that.container + '_pager').append(pager_div))
225
+ .append($('<div/>').attr('id', that.container + '_message'))
201
226
  .append(controls);
202
- $('#columns').hide();
227
+ $('#' + that.container + '_columns').hide();
203
228
  }
204
229
 
205
230
  if (that.quick_edit_field)
@@ -238,10 +263,14 @@ IndexTable.prototype = {
238
263
  if (field.show)
239
264
  {
240
265
  var s = field.sort ? field.sort : field.name;
241
- var arrow = that.pager_params.sort == s ? (parseInt(that.pager_params.desc) == 1 ? ' &uarr;' : ' &darr;') : '';
266
+ console.log("field.name = " + field.name);
267
+ console.log("that.pager.options.sort = " + that.pager.options.sort);
268
+ console.log("that.pager.options.desc = " + that.pager.options.desc);
269
+ console.log("------------------------------");
270
+ var arrow = that.pager.options.sort == s ? (parseInt(that.pager.options.desc) == 1 ? ' &uarr;' : ' &darr;') : '';
242
271
  var link = that.pager_hash({
243
272
  sort: s,
244
- desc: (that.pager_params.sort == s ? (parseInt(that.pager_params.desc) == 1 ? '0' : '1') : '0')
273
+ desc: (that.pager.options.sort == s ? (parseInt(that.pager.options.desc) == 1 ? '0' : '1') : '0')
245
274
  });
246
275
 
247
276
  var input = $('<input/>').attr('type', 'checkbox').attr('id', 'quick_edit_' + field.name).val(field.name)
@@ -326,7 +355,7 @@ IndexTable.prototype = {
326
355
  column_checkboxes: function()
327
356
  {
328
357
  var that = this;
329
- var div = $('<div/>').attr('id', 'columns');
358
+ var div = $('<div/>').attr('id', that.container + '_columns');
330
359
  $.each(this.fields, function(i, field) {
331
360
  var input = $('<input/>')
332
361
  .attr('type', 'checkbox')
@@ -471,22 +500,22 @@ IndexTable.prototype = {
471
500
  });
472
501
  },
473
502
 
474
- pager: function(summary)
503
+ pager_div: function(summary)
475
504
  {
476
505
  var that = this;
477
- var pp = this.pager_params;
506
+ var p = this.pager;
478
507
 
479
- // Set default parameter values if not present
480
- if (!pp.items_per_page) pp.items_per_page = 10
481
- if (!pp.page) pp.page = 1
508
+ // Set default parameter values if not present
509
+ if (!p.options.items_per_page) p.options.items_per_page = 10
510
+ if (!p.options.page) p.options.page = 1
482
511
 
483
- var page = parseInt(pp.page);
512
+ var page = parseInt(p.options.page);
484
513
 
485
514
  // Max links to show (must be odd)
486
515
  var total_links = 5;
487
516
  var prev_page = page - 1;
488
517
  var next_page = page + 1;
489
- var total_pages = Math.ceil(parseFloat(pp.item_count)/parseFloat(pp.items_per_page));
518
+ var total_pages = Math.ceil(parseFloat(p.options.item_count)/parseFloat(p.options.items_per_page));
490
519
  var start = 1;
491
520
  var stop = 1;
492
521
 
@@ -517,35 +546,114 @@ IndexTable.prototype = {
517
546
  {
518
547
  var div2 = $('<div/>').addClass('page_links');
519
548
  if (page > 1)
520
- div2.append($('<a/>').attr('href', this.pager_hash({ page: prev_page })).html('Previous'));
549
+ div2.append($('<a/>').attr('href', this.pager_hash({ page: prev_page })).html('Previous').click(function(e) { that.hash_click(e, this); }));
521
550
  for (i=start; i<=stop; i++)
522
551
  {
523
552
  if (page != i)
524
- div2.append($('<a/>').attr('href', this.pager_hash({ page: i })).html(i));
553
+ div2.append($('<a/>').attr('href', this.pager_hash({ page: i })).html(i).click(function(e) { that.hash_click(e, this); }));
525
554
  else
526
555
  div2.append($('<span/>').addClass('current_page').html(i));
527
556
  }
528
557
  if (page < total_pages)
529
- div2.append($('<a/>').attr('href', this.pager_hash({ page: next_page })).html('Next'));
558
+ div2.append($('<a/>').attr('href', this.pager_hash({ page: next_page })).html('Next').click(function(e) { that.hash_click(e, this); }));
530
559
  div.append(div2);
531
560
  }
532
561
  return div;
533
562
  },
534
563
 
535
- pager_hash: function(h)
564
+ hash_click: function(e, el) {
565
+ e.preventDefault();
566
+ e.stopPropagation();
567
+ window.location.hash = $(el).attr('href').substr(1);
568
+ this.refresh();
569
+ },
570
+
571
+ pager_params: function(h)
536
572
  {
537
- var that = this;
538
- var pp = $.extend({}, this.pager_params);
539
- for (var i in h)
540
- pp[i] = h[i];
541
-
573
+ var that = this;
574
+ var p = $.extend({}, this.pager.params);
575
+ if (this.pager.options)
576
+ {
577
+ if (this.pager.options.sort) p.sort = this.pager.options.sort;
578
+ if (this.pager.options.desc) p.desc = this.pager.options.desc ? 1 : 0;
579
+ if (this.pager.options.page) p.page = this.pager.options.page;
580
+ }
581
+ if (h)
582
+ {
583
+ for (var i in h)
584
+ {
585
+ //console.log('' + i + ' = ' + h[i]);
586
+ //console.log(typeof(h[i]));
587
+ //console.log('-------------------');
588
+ if (typeof(h[i]) == 'boolean')
589
+ p[i] = h[i] ? 1 : 0;
590
+ else
591
+ p[i] = h[i];
592
+ }
593
+ }
594
+ return p;
595
+ },
596
+
597
+ pager_hash: function(h)
598
+ {
599
+ var p = this.pager_params(h);
542
600
  var qs = [];
543
- $.each(pp, function(k,v) {
544
- if (k == 'base_url' || k == 'item_count' || k == 'items_per_page' || k == 'use_url_params')
545
- return;
546
- qs.push('' + k + '=' + encodeURIComponent(v));
547
- });
601
+ $.each(p, function(k,v) { qs.push('' + k + '=' + encodeURIComponent(v)); });
548
602
  return '#' + qs.join('&');
549
- }
603
+ },
604
+
605
+ /****************************************************************************/
606
+
607
+ new_model_link: function()
608
+ {
609
+ var that = this;
610
+ return $('<a/>').attr('href', '#').html(that.new_model_text).click(function(e) { e.preventDefault(); that.new_form(); });
611
+ },
612
+
613
+ new_form: function()
614
+ {
615
+ var that = this;
616
+ if (!$('#' + that.container + '_new_form_container').is(':empty'))
617
+ {
618
+ $('#' + that.container + '_new_form_container').slideUp(function() {
619
+ $('#' + that.container + '_new_form_container').empty();
620
+ });
621
+ return;
622
+ }
623
+
624
+ var form = $('<form/>').attr('id', 'new_form')
625
+ .append($('<input/>').attr('type', 'hidden').attr('name', 'authenticity_token').val(that.form_authenticity_token));
626
+ $.each(this.new_model_fields, function(i, f) {
627
+ form.append($('<p/>').append($('<input/>').attr('type', 'text').attr('name', f.name).attr('placeholder', f.nice_name).css('width', '' + f.width + 'px')));
628
+ });
629
+ form
630
+ .append($('<div/>').attr('id', 'new_message'))
631
+ .append($('<p>')
632
+ .append($('<input/>').attr('type', 'button').val('Cancel').click(function(e) { $('#' + that.container + '_new_form_container').empty(); }))
633
+ .append(' ')
634
+ .append($('<input/>').attr('type', 'submit').val('Add').click(function(e) { that.add_model(); return false; }))
635
+ );
636
+ $('#' + that.container + '_new_form_container').hide().empty().append(
637
+ $('<div/>').addClass('note').css('margin-bottom', '10px')
638
+ .append($('<h2/>').css('margin-top', 0).css('padding-top', 0).html(that.new_model_text))
639
+ .append(form)
640
+ ).slideDown();
641
+ },
642
+
643
+ add_model: function()
644
+ {
645
+ var that = this;
646
+ $('#new_message').html("<p class='loading'>Adding...</p>");
647
+ $.ajax({
648
+ url: this.add_url,
649
+ type: 'post',
650
+ data: $('#new_form').serialize(),
651
+ success: function(resp) {
652
+ if (resp.error) $('#new_message').html("<p class='note error'>" + resp.error + "</p>");
653
+ if (resp.redirect || resp.refresh) that.refresh();
654
+ }
655
+ });
656
+ },
657
+
550
658
 
551
659
  };
@@ -29,7 +29,7 @@ module Caboose
29
29
  'sort' => 'description',
30
30
  'desc' => 'false',
31
31
  'base_url' => "/admin/block-types",
32
- 'items_per_page' => 100
32
+ 'items_per_page' => 10
33
33
  })
34
34
  render :json => {
35
35
  :pager => pager,
@@ -12,7 +12,6 @@ bt = @block_type
12
12
  <p><div id='blocktype_<%= bt.id %>_description' ></div></p>
13
13
 
14
14
  <h2>Children</h2>
15
- <p><a href='/admin/block-types/<%= @block_type.id %>/new'>New Child Block</a></p>
16
15
  <div id='block_types'></div>
17
16
 
18
17
  <h2>Advanced</h2>
@@ -82,9 +81,10 @@ $(document).ready(function() {
82
81
  container: 'block_types',
83
82
  base_url: '/admin/block-types',
84
83
  refresh_url: '/admin/block-types/json?parent_id=<%= @block_type.id %>',
84
+ add_url: '/admin/block-types?parent_id=<%= @block_type.id %>',
85
85
  allow_bulk_edit: false,
86
86
  allow_bulk_delete: false,
87
- allow_duplicate: false,
87
+ allow_duplicate: false,
88
88
  fields: [
89
89
  { name: 'parent_id' , sort: 'parent_id' , show: false , bulk_edit: false, nice_name: 'Parent' , type: 'select' , value: function(bt) { return bt.parent_id; }, width: 400, options_url: '/admin/block-types/tree-options' },
90
90
  { name: 'name' , sort: 'name' , show: true , bulk_edit: false, nice_name: 'Name' , type: 'text' , value: function(bt) { return bt.name; }, width: 400 },
@@ -104,14 +104,18 @@ $(document).ready(function() {
104
104
  { name: 'options_url' , sort: 'options_url' , show: false , bulk_edit: false, nice_name: 'Options URL' , type: 'text' , value: function(bt) { return bt.options_url; }, width: 400 },
105
105
  { name: 'options_function' , sort: 'options_function' , show: false , bulk_edit: false, nice_name: 'Options Function' , type: 'textarea' , value: function(bt) { return bt.options_function; }, width: 400, height: 100 },
106
106
  { name: 'options' , sort: 'options' , show: false , bulk_edit: false, nice_name: 'Options' , type: 'textarea' , value: function(bt) { return bt.options; }, width: 400, height: 100 }
107
- ]
107
+ ],
108
+ new_model_text: 'New Child Block',
109
+ new_model_fields: [
110
+ { name: 'name', nice_name: 'Name', type: 'text', width: 400 }
111
+ ],
108
112
  });
109
113
 
110
114
  m = new ModelBinder({
111
115
  name: 'BlockType',
112
116
  id: <%= @block_type.id %>,
113
117
  update_url: '/admin/block-types/<%= @block_type.id %>',
114
- authenticity_token: '<%= form_authenticity_token %>',
118
+ authenticity_token: '<%= form_authenticity_token %>',
115
119
  attributes: [
116
120
  { name: 'parent_id' , nice_name: 'Parent' , type: 'select' , value: <%= raw Caboose.json(bt.parent_id) %>, width: 400, options_url: '/admin/block-types/tree-options' },
117
121
  { name: 'name' , nice_name: 'Name' , type: 'text' , value: <%= raw Caboose.json(bt.name) %>, width: 400 },
@@ -4,12 +4,9 @@
4
4
  </div>
5
5
 
6
6
  <h1>Block Types</h1>
7
-
8
- <p>
9
- <a href='/admin/block-types/store'>Block Type Store</a> |
10
- <a href='/admin/block-types/new'>New Block Type</a>
11
- </p>
7
+ <p><a href='/admin/block-types/store'>Block Type Store</a></p>
12
8
  <div id='block_types'></div>
9
+ <% (0..100).each do |i| %><p>&nbsp;</p><% end %>
13
10
 
14
11
  <% content_for :caboose_js do %>
15
12
  <%= javascript_include_tag 'caboose/model/all' %>
@@ -21,27 +18,31 @@ $(document).ready(function() {
21
18
  form_authenticity_token: '<%= form_authenticity_token %>',
22
19
  container: 'block_types',
23
20
  base_url: '/admin/block-types',
24
- fields: [
25
- { name: 'parent_id' , sort: 'parent_id' , show: false , bulk_edit: false, nice_name: 'Parent' , type: 'select' , value: function(bt) { return bt.parent_id; }, width: 400, options_url: '/admin/block-types/tree-options' },
26
- { name: 'name' , sort: 'name' , show: true , bulk_edit: false, nice_name: 'Name' , type: 'text' , value: function(bt) { return bt.name; }, width: 400 },
27
- { name: 'description' , sort: 'description' , show: true , bulk_edit: false, nice_name: 'Description' , type: 'text' , value: function(bt) { return bt.description; }, width: 400 },
28
- { name: 'site_id' , sort: 'site_id' , show: true , bulk_edit: false, nice_name: 'Site' , type: 'checkbox-multiple' , value: function(bt) { return bt.sites ? bt.sites.map(function(s) { return s.id }) : []; }, text: function(bt) { return bt.sites ? bt.sites.map(function(s) { return s.description }).join(', ') : ''; }, width: 400, height: 200, options_url: '/admin/block-types/site-options' },
29
- { name: 'block_type_category_id' , sort: 'block_type_category_id' , show: false , bulk_edit: false, nice_name: 'Category' , type: 'select' , value: function(bt) { return bt.block_type_category_id; }, width: 400, options_url: '/admin/block-type-categories/tree-options' },
30
- { name: 'is_global' , sort: 'is_global' , show: false , bulk_edit: false, nice_name: 'Global' , type: 'checkbox' , value: function(bt) { return bt.is_global; }, width: 400 },
31
- { name: 'use_render_function' , sort: 'use_render_function' , show: false , bulk_edit: false, nice_name: 'Use Render Function' , type: 'checkbox' , value: function(bt) { return bt.use_render_function; }, width: 400 },
32
- { name: 'use_render_function_for_layout' , sort: 'use_render_function_for_layout' , show: false , bulk_edit: false, nice_name: 'Use Render Function for Layout' , type: 'checkbox' , value: function(bt) { return bt.use_render_function_for_layout; }, width: 400 },
33
- { name: 'allow_child_blocks' , sort: 'allow_child_blocks' , show: false , bulk_edit: false, nice_name: 'Allow Child Blocks' , type: 'checkbox' , value: function(bt) { return bt.allow_child_blocks; }, width: 400 },
34
- { name: 'default_child_block_type_id' , sort: 'default_child_block_type_id' , show: false , bulk_edit: false, nice_name: 'Default Child Block Type' , type: 'select' , value: function(bt) { return bt.default_child_block_type_id; }, width: 400, options_url: '/admin/block-types/options' },
35
- { name: 'render_function' , sort: 'render_function' , show: false , bulk_edit: false, nice_name: 'Render Function' , type: 'textarea' , value: function(bt) { return bt.render_function; }, width: 800, height: 200 },
36
- { name: 'field_type' , sort: 'field_type' , show: false , bulk_edit: false, nice_name: 'Field type' , type: 'select' , value: function(bt) { return bt.field_type; }, width: 400, options_url: '/admin/block-types/field-type-options' },
37
- { name: 'default' , sort: 'default' , show: false , bulk_edit: false, nice_name: 'Default value' , type: 'text' , value: function(bt) { return bt.default; }, width: 400 },
38
- { name: 'width' , sort: 'width' , show: false , bulk_edit: false, nice_name: 'Width' , type: 'text' , value: function(bt) { return bt.width; }, width: 400 },
39
- { name: 'height' , sort: 'height' , show: false , bulk_edit: false, nice_name: 'Height' , type: 'text' , value: function(bt) { return bt.height; }, width: 400 },
40
- { name: 'fixed_placeholder' , sort: 'fixed_placeholder' , show: false , bulk_edit: false, nice_name: 'Fixed placeholder' , type: 'checkbox' , value: function(bt) { return bt.fixed_placeholder; }, width: 400 },
41
- { name: 'options_url' , sort: 'options_url' , show: false , bulk_edit: false, nice_name: 'Options URL' , type: 'text' , value: function(bt) { return bt.options_url; }, width: 400 },
42
- { name: 'options_function' , sort: 'options_function' , show: false , bulk_edit: false, nice_name: 'Options Function' , type: 'textarea' , value: function(bt) { return bt.options_function; }, width: 400, height: 100 },
43
- { name: 'options' , sort: 'options' , show: false , bulk_edit: false, nice_name: 'Options' , type: 'textarea' , value: function(bt) { return bt.options; }, width: 400, height: 100 }
44
- ]
21
+ fields: [
22
+ { name: 'name' , sort: 'name' , show: true , bulk_edit: false, nice_name: 'Name' , type: 'text' , value: function(bt) { return bt.name; }, width: 400 },
23
+ { name: 'description' , sort: 'description' , show: false , bulk_edit: false, nice_name: 'Description' , type: 'text' , value: function(bt) { return bt.description; }, width: 400 },
24
+ { name: 'field_type' , sort: 'field_type' , show: true , bulk_edit: false, nice_name: 'Field type' , type: 'select' , value: function(bt) { return bt.field_type; }, width: 400, options_url: '/admin/block-types/field-type-options' },
25
+ { name: 'site_id' , sort: 'site_id' , show: false , bulk_edit: false, nice_name: 'Site' , type: 'checkbox-multiple' , value: function(bt) { return bt.sites ? bt.sites.map(function(s) { return s.id }) : []; }, text: function(bt) { return bt.sites ? bt.sites.map(function(s) { return s.description }).join(', ') : ''; }, width: 400, height: 200, options_url: '/admin/block-types/site-options' },
26
+ { name: 'parent_id' , sort: 'parent_id' , show: false , bulk_edit: false, nice_name: 'Parent' , type: 'select' , value: function(bt) { return bt.parent_id; }, width: 400, options_url: '/admin/block-types/tree-options' },
27
+ { name: 'block_type_category_id' , sort: 'block_type_category_id' , show: false , bulk_edit: false, nice_name: 'Category' , type: 'select' , value: function(bt) { return bt.block_type_category_id; }, width: 400, options_url: '/admin/block-type-categories/tree-options' },
28
+ { name: 'is_global' , sort: 'is_global' , show: false , bulk_edit: false, nice_name: 'Global' , type: 'checkbox' , value: function(bt) { return bt.is_global ? 'Yes' : 'No'; }, width: 20 },
29
+ { name: 'use_render_function' , sort: 'use_render_function' , show: true , bulk_edit: false, nice_name: 'Use Render Function' , type: 'checkbox' , value: function(bt) { return bt.use_render_function ? 'Yes' : 'No' }, width: 20 },
30
+ { name: 'use_render_function_for_layout' , sort: 'use_render_function_for_layout' , show: true , bulk_edit: false, nice_name: 'Use Render Function for Layout' , type: 'checkbox' , value: function(bt) { return bt.use_render_function_for_layout ? 'Yes' : 'No' }, width: 20 },
31
+ { name: 'allow_child_blocks' , sort: 'allow_child_blocks' , show: true , bulk_edit: false, nice_name: 'Allow Child Blocks' , type: 'checkbox' , value: function(bt) { return bt.allow_child_blocks ? 'Yes' : 'No' }, width: 20 },
32
+ { name: 'default_child_block_type_id' , sort: 'default_child_block_type_id' , show: false , bulk_edit: false, nice_name: 'Default Child Block Type' , type: 'select' , value: function(bt) { return bt.default_child_block_type_id; }, width: 400, options_url: '/admin/block-types/options' },
33
+ { name: 'render_function' , sort: 'render_function' , show: false , bulk_edit: false, nice_name: 'Render Function' , type: 'textarea' , value: function(bt) { return bt.render_function; }, width: 800, height: 200 },
34
+ { name: 'default' , sort: 'default' , show: false , bulk_edit: false, nice_name: 'Default value' , type: 'text' , value: function(bt) { return bt.default; }, width: 400 },
35
+ { name: 'width' , sort: 'width' , show: false , bulk_edit: false, nice_name: 'Width' , type: 'text' , value: function(bt) { return bt.width; }, width: 400 },
36
+ { name: 'height' , sort: 'height' , show: false , bulk_edit: false, nice_name: 'Height' , type: 'text' , value: function(bt) { return bt.height; }, width: 400 },
37
+ { name: 'fixed_placeholder' , sort: 'fixed_placeholder' , show: false , bulk_edit: false, nice_name: 'Fixed placeholder' , type: 'checkbox' , value: function(bt) { return bt.fixed_placeholder ? 'Yes' : 'No'; }, width: 400 },
38
+ { name: 'options_url' , sort: 'options_url' , show: false , bulk_edit: false, nice_name: 'Options URL' , type: 'text' , value: function(bt) { return bt.options_url; }, width: 400 },
39
+ { name: 'options_function' , sort: 'options_function' , show: false , bulk_edit: false, nice_name: 'Options Function' , type: 'textarea' , value: function(bt) { return bt.options_function; }, width: 400, height: 100 },
40
+ { name: 'options' , sort: 'options' , show: false , bulk_edit: false, nice_name: 'Options' , type: 'textarea' , value: function(bt) { return bt.options; }, width: 400, height: 100 }
41
+ ],
42
+ new_model_text: 'New Block Type',
43
+ new_model_fields: [
44
+ { name: 'name', nice_name: 'Name', type: 'text', width: 400 }
45
+ ],
45
46
  });
46
47
  });
47
48
 
@@ -8,8 +8,7 @@
8
8
  <p><select name='block_type_id'>
9
9
  <option value=''>-- Select a layout --</option>
10
10
  <% cat_ids = Caboose::BlockTypeCategory.layouts.collect{ |cat| cat.id } %>
11
- <% Caboose::BlockType.where("block_type_category_id in (?)", cat_ids).reorder(:description).all.each do |bt| %>
12
- <% next if bt.site_id && bt.site_id != @site.id %>
11
+ <% Caboose::BlockType.includes(:block_type_site_memberships).where("block_type_category_id in (?) and block_type_site_memberships.site_id = ?", cat_ids, @site.id).reorder(:description).all.each do |bt| %>
13
12
  <option value="<%= bt.id %>"><%= bt.description %></option>
14
13
  <% end %>
15
14
  </select></p>
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.4.149'
2
+ VERSION = '0.4.150'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.149
4
+ version: 0.4.150
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-13 00:00:00.000000000 Z
11
+ date: 2014-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails