caboose-cms 0.5.9 → 0.5.10

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
- ZmJlNWVhODY0NzgxOTc3OGQ3MTMzN2E1NzViNWUwNjdiODg4ZDk4OA==
4
+ MTY2ZTViY2Y3MTJiMzBlNmJkYzJjOWEzNDZlMWVmNzg3ZmJlMjYxYw==
5
5
  data.tar.gz: !binary |-
6
- YzI5ZjIzOTIzYmNmOTk5NDFmZmE1NTQ1ODc3NjRjODBjNmI3OTE0YQ==
6
+ YWE3MmZkZDFmOWNjYjFmMjdkYmQxMzFiYWE0Y2I0ODlhODQ0NmUxNw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YTg4OTUwMGNmZDBjNTI5YmU5ZjM4M2E0MjVlNmM0MjMzODkwYTdmODJiZTY2
10
- NDU1MjFiZDI1ZThiNmJkM2Y3NTYxY2JjYjQ0MjIzOWZmMzg5NWQyZDM1OTRk
11
- MWE0ZDI0Nzc3ZTEwZDYzM2ExMTM1MTQxMDJjMDQ3NDliMjFlNmU=
9
+ OTE4YWY0NzRjMjVkY2E3MThmNzgzNDZhNmJlNDMzOGZhNTNjNDZjZTVkMGEw
10
+ MzYwNzc0ZjI5ZjkzODkxOGNjZjM4MzMzMTAwODcyNWZkNDQyMjEzOTEyZTQ4
11
+ NzI0MzFkMjU2ZDQzYTdhNmUxYmU0M2E0YmZmNWE2OWYwYjRkNDM=
12
12
  data.tar.gz: !binary |-
13
- YzNhYjkyN2U1ZTg1NGZiZmM2Njc5ZmZjMGIyZjk2ODI0MjY5OTA1NTIyYjIz
14
- ZTgxNTU2NmM1MWFiYWM3MTJjZDA2MmY1ZTE3MGJjYjhhN2EzNzNiOTg0ZWQ4
15
- NjI0ZmY0MGUwMjM1MDAxZjdlZjE5OTNlNjViYTdlNjI4ODE4NWQ=
13
+ NmI0YjE3ZGYzYzkwN2RkYmY4MmI3NGNmZWIwMDI0ZWJlMjk5ZTY3YzdhYjI0
14
+ N2ZmNGM5YmZhZDZmNmZjODkyNzg2YTFhYTYxNmEwOTc4NjA3NTkxY2M3NGZj
15
+ YjlhZmI0ZmQxNjg1OTQ3Zjk4MDAxNzcyZmM4MDY4N2U0ZGY0Y2Q=
@@ -8,37 +8,21 @@ IndexTable.prototype = {
8
8
 
9
9
  form_authenticity_token: false,
10
10
 
11
- // Container for the table
12
- container: 'models',
13
-
14
11
  // Base URL used for default refresh/update/delete/bulk URLs
15
12
  base_url: false,
16
13
 
17
- // Where to get model json data
18
- refresh_url: false,
19
- refresh_single_url: false,
14
+ // Where to get json data for all the models
15
+ refresh_url: false,
20
16
 
21
17
  // Where to send bulk updates
22
18
  bulk_update_url: false,
23
19
 
24
20
  // Where to send bulk deletes
25
21
  bulk_delete_url: false,
26
-
27
- // Where to send normal updates
28
- // Example: function(model_id) { return '/admin/models/' + model_id; }
29
- update_url: false,
30
-
31
- // Where to send duplicate calls
32
- // Example: function(model_id) { return '/admin/models/' + model_id + '/duplicate' },
33
- duplicate_url: false,
34
22
 
35
23
  // Where to post new models
36
24
  add_url: false,
37
25
 
38
- // What to do when a row is clicked
39
- // Example: function (model_id) { return '/admin/models/' + model_id; }
40
- row_click_handler: false,
41
-
42
26
  // Array of fields you want to show in the table (given as model binder attributes with additional text and value functions)
43
27
  // [{
44
28
  // show: true,
@@ -54,68 +38,76 @@ IndexTable.prototype = {
54
38
  // }]
55
39
  fields: [],
56
40
 
57
- // The post/get in the original request
58
- post_get: false,
41
+ //============================================================================
42
+ // Additional parameters
43
+ //============================================================================
44
+
45
+ // Container for the table
46
+ container: 'models',
47
+
48
+ // Where to get json data for a single model
49
+ refresh_single_url: function(model_id, it) { return it.base_url + '/' + model_id + '/json'; },
50
+
51
+ // Where to send normal updates
52
+ update_url: function(model_id, it) { return it.base_url + '/' + model_id; },
53
+
54
+ // Where to send duplicate calls
55
+ duplicate_url: function(model_id, it) { return it.base_url + '/' + model_id + '/duplicate'; },
56
+
57
+ // What to do when the edit button is clicked for a model
58
+ edit_click_handler: function(model_id, it) { window.location = it.base_url + '/' + model_id; },
59
+
60
+ // What to do when a row is click. Default is quick edit mode.
61
+ row_click_handler: function(model_id, it, e) {
62
+ if (it.quick_edit_model_id == model_id)
63
+ {
64
+ if ($(e.target).prop('tagName') == 'TD')
65
+ it.quick_edit_model_id = false;
66
+ else
67
+ return;
68
+ }
69
+ else
70
+ it.quick_edit_model_id = model_id;
71
+ it.print();
72
+ },
59
73
 
60
74
  allow_bulk_edit: true,
61
75
  allow_bulk_delete: true,
62
76
  allow_duplicate: true,
63
-
77
+ allow_advanced_edit: true,
64
78
  no_models_text: "There are no models right now.",
65
79
  new_model_text: 'New',
66
- new_model_fields: [
67
- { name: 'name', nice_name: 'Name', type: 'text', width: 400 }
68
- ],
80
+ new_model_fields: [{ name: 'name', nice_name: 'Name', type: 'text', width: 400 }],
69
81
 
70
82
  //============================================================================
71
- // End of required parameters
83
+ // End of parameters
72
84
  //============================================================================
73
85
 
74
- models: [],
75
- model_ids: [],
76
- quick_edit_model_id: false, // The id of the model currently being edited
77
- refresh_count: 0,
78
- pager: {
79
- options: { page: 1 },
86
+ models: [], // The models we get from the server
87
+ model_ids: [], // IDs of currently selected models
88
+ quick_edit_model_id: false, // The id of the model currently being edited
89
+ pager: {
90
+ options: { page: 1 },
80
91
  params: {}
81
92
  },
82
93
 
94
+ // Constructor
83
95
  init: function(params) {
84
96
  for (var thing in params)
85
97
  this[thing] = params[thing];
86
98
 
87
99
  var that = this;
88
- if (!this.refresh_url ) this.refresh_url = this.base_url + '/json';
89
- if (!this.bulk_update_url ) this.bulk_update_url = this.base_url + '/bulk';
90
- if (!this.bulk_delete_url ) this.bulk_delete_url = this.base_url + '/bulk';
91
- if (!this.add_url ) this.add_url = this.base_url;
92
- if (!this.update_url ) this.update_url = function(model_id) { return that.base_url + '/' + model_id; };
93
- if (!this.duplicate_url ) this.duplicate_url = function(model_id) { return that.base_url + '/' + model_id + '/duplicate'; };
94
- if (!this.refresh_single_url) this.refresh_single_url = function(model_id) { return that.base_url + '/' + model_id + '/json'; };
95
- if (!this.row_click_handler ) this.row_click_handler = function(model_id, e) {
96
- if (that.quick_edit_model_id == model_id)
97
- {
98
- if ($(e.target).prop('tagName') == 'TD')
99
- that.quick_edit_model_id = false;
100
- else
101
- return;
102
- }
103
- else
104
- that.quick_edit_model_id = model_id;
105
- that.print();
106
- };
107
- this.init_fields();
108
-
109
- $(window).on('hashchange', function() { that.refresh(); });
110
- this.refresh();
111
- },
112
-
113
- init_fields: function()
114
- {
115
- var that = this;
100
+ if (!this.refresh_url ) this.refresh_url = this.base_url + '/json';
101
+ if (!this.bulk_update_url ) this.bulk_update_url = this.base_url + '/bulk';
102
+ if (!this.bulk_delete_url ) this.bulk_delete_url = this.base_url + '/bulk';
103
+ if (!this.add_url ) this.add_url = this.base_url;
104
+
116
105
  $.each(this.fields, function(i, f) {
117
106
  if (f.editable == null) f.editable = true;
118
107
  });
108
+
109
+ $(window).on('hashchange', function() { that.refresh(); });
110
+ this.refresh();
119
111
  },
120
112
 
121
113
  parse_querystring: function()
@@ -173,11 +165,11 @@ IndexTable.prototype = {
173
165
  var that = this;
174
166
  var $el = $('#' + this.container + '_columns').length > 0 ? $('#' + this.container + '_table_container') : $('#' + this.container);
175
167
  $el.html("<p class='loading'>Refreshing...</p>");
176
- $.ajax({
168
+ $.ajax({
177
169
  url: that.refresh_url,
178
170
  type: 'get',
179
171
  data: that.pager_params(),
180
- success: function(resp) {
172
+ success: function(resp) {
181
173
  for (var thing in resp['pager'])
182
174
  that.pager[thing] = resp['pager'][thing];
183
175
  that.models = resp['models'];
@@ -186,16 +178,7 @@ IndexTable.prototype = {
186
178
  var m = that.models[i];
187
179
  m.id = parseInt(m.id);
188
180
  }
189
- that.print();
190
-
191
- // Set the history state
192
- //var qs = that.pager_querystring();
193
- //if (that.refresh_count > 0 && qs != window.location.hash)
194
- //{
195
- // if(history.pushState) history.pushState(null, null, '#' + qs);
196
- // else location.hash = '#' + qs;
197
- //}
198
- that.refresh_count += 1;
181
+ that.print();
199
182
  },
200
183
  error: function() { $('#' + this.container).html("<p class='note error'>Error retrieving data.</p>"); }
201
184
  });
@@ -205,7 +188,7 @@ IndexTable.prototype = {
205
188
  {
206
189
  var that = this;
207
190
  $.ajax({
208
- url: that.refresh_single_url(model_id),
191
+ url: that.refresh_single_url(model_id, that),
209
192
  type: 'get',
210
193
  success: function(resp) {
211
194
  for (var i=0; i<that.models.length; i++)
@@ -281,7 +264,7 @@ IndexTable.prototype = {
281
264
  new ModelBinder({
282
265
  name: 'Model',
283
266
  id: m.id,
284
- update_url: that.update_url(m.id),
267
+ update_url: that.update_url(m.id, that),
285
268
  authenticity_token: that.form_authenticity_token,
286
269
  attributes: [attrib]
287
270
  });
@@ -290,13 +273,41 @@ IndexTable.prototype = {
290
273
  }
291
274
  },
292
275
 
276
+ all_models_selected: function()
277
+ {
278
+ var that = this;
279
+ var all_checked = true;
280
+ $.each(that.models, function(i, m) {
281
+ if (that.model_ids.indexOf(m.id) == -1)
282
+ {
283
+ all_checked = false;
284
+ return false;
285
+ }
286
+ });
287
+ return all_checked;
288
+ },
289
+
293
290
  table_headers: function()
294
291
  {
295
292
  var that = this;
296
293
  var tr = $('<tr/>');
297
294
 
298
- if (this.allow_bulk_edit || this.allow_bulk_delete || this.allow_duplicate)
299
- tr.append($('<th/>').html('&nbsp;'));
295
+ if (this.allow_bulk_edit || this.allow_bulk_delete || this.allow_duplicate)
296
+ {
297
+ var input = $('<input/>').attr('type', 'checkbox').attr('id', that.container + '_check_all').val(1)
298
+ .change(function() {
299
+ var checked = $(this).prop('checked');
300
+ that.model_ids = [];
301
+ $.each(that.models, function(i, m) {
302
+ $('#model_' + m.id).prop('checked', checked);
303
+ if (checked) that.model_ids.push(m.id);
304
+ });
305
+ });
306
+ input.prop('checked', that.all_models_selected());
307
+ tr.append($('<th/>').append(input));
308
+ }
309
+ if (this.allow_advanced_edit)
310
+ tr.append($('<th/>').html('&nbsp;'));
300
311
 
301
312
  $.each(this.fields, function(i, field) {
302
313
  if (field.show)
@@ -351,14 +362,25 @@ IndexTable.prototype = {
351
362
  if (checked && i == -1) that.model_ids.push(model_id);
352
363
  if (!checked && i > -1) that.model_ids.splice(i, 1);
353
364
  }
365
+ $('#' + that.container + '_check_all').prop('checked', that.all_models_selected());
354
366
  });
355
367
  if (that.model_ids.indexOf(m.id) > -1)
356
368
  checkbox.prop('checked', 'true');
357
369
  tr.append($('<td/>').append(checkbox));
358
- }
370
+ }
371
+ if (this.allow_advanced_edit)
372
+ {
373
+ tr.append($('<td/>')
374
+ .addClass('edit_button')
375
+ .mouseover(function() { $(this).addClass('edit_button_over'); })
376
+ .mouseout( function() { $(this).removeClass('edit_button_over'); })
377
+ .click(function(e) { e.stopPropagation(); that.edit_click_handler(m.id, that, e); })
378
+ .append($('<span/>').addClass('ui-icon ui-icon-pencil'))
379
+ );
380
+ }
359
381
  tr.click(function(e) {
360
382
  var model_id = $(this).attr('id').replace('model_row_', '');
361
- that.row_click_handler(model_id, e);
383
+ that.row_click_handler(model_id, that, e);
362
384
  });
363
385
 
364
386
  $.each(that.fields, function(j, field) {
@@ -513,7 +535,7 @@ IndexTable.prototype = {
513
535
  }
514
536
  $('#message').html("<p class='loading'>Duplicating...</p>");
515
537
  $.ajax({
516
- url: that.duplicate_url(that.model_ids[0]),
538
+ url: that.duplicate_url(that.model_ids[0], that),
517
539
  type: 'post',
518
540
  data: { count: count },
519
541
  success: function(resp) {
@@ -291,6 +291,14 @@ select.fake option {
291
291
  padding: 8px 12px;
292
292
  }
293
293
 
294
+ #content table.data td.edit_button {
295
+
296
+ }
297
+
298
+ #content table.data td.edit_button_over {
299
+ background: #f9ad81 !important;
300
+ }
301
+
294
302
  #content table.data tr:nth-child(even) td {
295
303
  background-color: #efefef;
296
304
  }
@@ -26,8 +26,9 @@ $(document).ready(function() {
26
26
  container: 'products',
27
27
  base_url: '/admin/products',
28
28
  allow_bulk_edit: false,
29
- allow_bulk_delete: false,
29
+ allow_bulk_delete: true,
30
30
  allow_duplicate: false,
31
+ allow_advanced_edit: true,
31
32
  fields: [
32
33
  { show: true , name: 'id' , nice_name: 'ID' , sort: 'id' , type: 'text' , value: function(p) { return p.id }, width: 500, editable: false },
33
34
  { show: true , name: 'title' , nice_name: 'Title' , sort: 'title' , type: 'text' , value: function(p) { return p.title }, width: 200 },
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.5.9'
2
+ VERSION = '0.5.10'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry