caboose-cms 0.5.55 → 0.5.56

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWFiNTgyMjY5NzczYmMzNjA4NDY5MjAxOGQxNzI2MmM2NmNlMGIzNQ==
4
+ NTkzNGRkMmQ3YWRiMDVmOWE1NjA3MjExMTM5ZDI2NGI5MWUxODc3MA==
5
5
  data.tar.gz: !binary |-
6
- Y2E4YzI3MzkwNjk0ZTYwMjU0OWQyMjFjMzkxN2E3M2RhM2ExNmViMQ==
6
+ NGI4NjU2ZGU5ZDUzOTQzMDc4NmVkZDcxMzRlOTUxMzIxMmJkZmYyOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmM3MDdkMGU3M2ZhZjNiZmI2NjhiOTY0ZmMyZmIzZGU1MDMzNjg3MjAxNWNl
10
- YjFmODAyMDIyOWY0YTQ5Mzk4YTViNGVmMGQwZWMzNDljN2NjNjk4MTA4ZjBm
11
- YmQ3OTk5ZmQwZjQ3MDRlNThmOWM2ZTkyZmQxNWFhZjU4MGFiY2E=
9
+ MzM1NzQ4MGE0MTAxMzIyNjQ5YzE3YWY2MDJjY2E2MjdiZThlYjI1NmQ2OWYx
10
+ MzA5YzE4MWYwZTUyYTJmNGQ2YzVjYmE2YjgxYzliZjU5ZTU2ZDdlYmE3NmM4
11
+ YTMyMGZlYTMxZGQ3ZWVmZGM5MjZiMjllNWY1OGVkM2EzMmFiYmE=
12
12
  data.tar.gz: !binary |-
13
- NWY1Y2E4MjUzMTc5MDFhZjk1ZWIzMTJhZmFhYzE4MTAzMTg0ZTQ0YzgwOTM4
14
- OTNlZmJhNjc3OGNmOTVkZWEzNTc4MzhmMjgzNWZjNDI5NDdhOTI1M2RkZjc4
15
- MWFjYzYwMDI1YzkwZWZhOTczYzAyMmE2NzkzNWU0MzIxYzE2YzU=
13
+ OWY5NmJiOTdmNmVkZGRiYzExM2QyNTZkMmI3YjM4MWIxNmE2YmFiYTZjYmY0
14
+ MDVlOWFhODc5ZThhOGNhMTAzYzBiMjQ3NGUzZDdjMWQ1MzU0NGI1Mjc5NzMz
15
+ YWQwNTVkNDhmM2NlMjM5ZThiZWViOWNlMjQzMjgwZTEwY2JiNzI=
@@ -378,41 +378,6 @@ module Caboose
378
378
  render :layout => 'caboose/admin'
379
379
  end
380
380
 
381
- # GET /admin/products/:id/variants
382
- # GET /admin/products/:id/variants/:variant_id
383
- def admin_edit_variants
384
- return if !user_is_allowed('products', 'edit')
385
- @product = Product.find(params[:id])
386
-
387
- if @product.variants.nil? || @product.variants.count == 0
388
- v = Variant.new
389
- v.option1 = @product.default1 if @product.option1
390
- v.option2 = @product.default2 if @product.option2
391
- v.option3 = @product.default3 if @product.option3
392
- v.status = 'Active'
393
- @product.variants = [v]
394
- @product.save
395
- end
396
- @variant = params[:variant_id] ? Variant.find(params[:variant_id]) : @product.variants[0]
397
- session['variant_cols'] = self.default_variant_cols if session['variant_cols'].nil?
398
- @cols = session['variant_cols']
399
-
400
- @highlight_variant_id = params[:highlight] ? params[:highlight].to_i : nil
401
-
402
- if @product.options.nil? || @product.options.count == 0
403
- render 'caboose/products/admin_edit_variants_single', :layout => 'caboose/admin'
404
- else
405
- render 'caboose/products/admin_edit_variants', :layout => 'caboose/admin'
406
- end
407
- end
408
-
409
- # GET /admin/products/:id/variants/json
410
- def admin_variants_json
411
- render :json => false if !user_is_allowed('products', 'edit')
412
- p = Product.find(params[:id])
413
- render :json => p.variants
414
- end
415
-
416
381
  # GET /admin/products/:id/variant-cols
417
382
  def admin_edit_variant_columns
418
383
  return if !user_is_allowed('products', 'edit')
@@ -560,13 +525,6 @@ module Caboose
560
525
  render :layout => 'caboose/admin'
561
526
  end
562
527
 
563
- # GET /admin/products/:id/variants/sort-order
564
- def admin_edit_variant_sort_order
565
- return if !user_is_allowed('products', 'edit')
566
- @product = Product.find(params[:id])
567
- render :layout => 'caboose/admin'
568
- end
569
-
570
528
  # GET /admin/products/:id/delete
571
529
  def admin_delete_form
572
530
  return if !user_is_allowed('products', 'edit')
@@ -596,7 +554,7 @@ module Caboose
596
554
  when 'seo_description' then product.seo_description = value
597
555
  when 'status' then product.status = value
598
556
  when 'category_id' then product.toggle_category(value[0], value[1])
599
- when 'stackable_group_id' then product.stackable_group_id = value
557
+ when 'stackable_group_id' then product.stackable_group_id = value
600
558
  when 'option1' then product.option1 = value
601
559
  when 'option2' then product.option2 = value
602
560
  when 'option3' then product.option3 = value
@@ -754,39 +712,7 @@ module Caboose
754
712
  end
755
713
  render :json => { :success => true }
756
714
  end
757
-
758
- # PUT /admin/products/:id/variants/option1-sort-order
759
- def admin_update_variant_option1_sort_order
760
- product_id = params[:id]
761
- params[:values].each_with_index do |value, i|
762
- Variant.where(:product_id => product_id, :option1 => value).all.each do |v|
763
- v.update_attribute(:option1_sort_order, i)
764
- end
765
- end
766
- render :json => { :success => true }
767
- end
768
-
769
- # PUT /admin/products/:id/variants/option1-sort-order
770
- def admin_update_variant_option2_sort_order
771
- product_id = params[:id]
772
- params[:values].each_with_index do |value, i|
773
- Variant.where(:product_id => product_id, :option2 => value).all.each do |v|
774
- v.update_attribute(:option2_sort_order, i)
775
- end
776
- end
777
- render :json => { :success => true }
778
- end
779
-
780
- # PUT /admin/products/:id/variants/option1-sort-order
781
- def admin_update_variant_option3_sort_order
782
- product_id = params[:id]
783
- params[:values].each_with_index do |value, i|
784
- Variant.where(:product_id => product_id, :option3 => value).all.each do |v|
785
- v.update_attribute(:option3_sort_order, i)
786
- end
787
- end
788
- render :json => { :success => true }
789
- end
715
+
790
716
  end
791
717
  end
792
718
 
@@ -29,53 +29,61 @@ module Caboose
29
29
  # Admin actions
30
30
  #=============================================================================
31
31
 
32
+ # GET /admin/products/:product_id/variants/json
33
+ def admin_json
34
+ return if !user_is_allowed('products', 'view')
35
+
36
+ pager = Caboose::PageBarGenerator.new(params, {
37
+ 'product_id' => params[:product_id]
38
+ }, {
39
+ 'model' => 'Caboose::Variant',
40
+ 'sort' => 'option1, option2, option3',
41
+ 'desc' => false,
42
+ 'base_url' => "/admin/products/#{params[:product_id]}/variants",
43
+ 'items_per_page' => 100,
44
+ 'use_url_params' => false
45
+ })
46
+ render :json => {
47
+ :pager => pager,
48
+ :models => pager.items
49
+ }
50
+ end
51
+
32
52
  # GET /admin/variants/:variant_id/edit
33
53
  # GET /admin/products/:product_id/variants/:variant_id/edit
34
54
  def admin_edit
35
55
  return if !user_is_allowed('variants', 'edit')
36
56
  @variant = Variant.find(params[:variant_id])
37
57
  @product = @variant.product
38
- render :layout => 'caboose/admin'
58
+ render :layout => 'caboose/admin'
39
59
  end
40
60
 
41
- # GET /admin/variants
42
- def admin_group
43
- return if !user_is_allowed('variants', 'edit')
44
-
45
- joins = []
46
- where = ''
47
- values = []
48
-
49
- if params[:category_ids]
50
- joins << [:category_memberships]
51
- where << 'store_category_memberships.category_id IN (?)'
52
- values << params[:category_ids]
53
- end
54
-
55
- if params[:vendor_ids]
56
- joins << [:vendor]
57
- where << 'store_vendors.id IN (?)'
58
- values << params[:vendor_ids]
59
- end
61
+ # GET /admin/products/:id/variants
62
+ # GET /admin/products/:id/variants/:variant_id
63
+ def admin_edit_variants
64
+ return if !user_is_allowed('products', 'edit')
65
+ @product = Product.find(params[:id])
60
66
 
61
- if params[:title]
62
- where << 'LOWER(store_products.title) LIKE ?'
63
- values << "%#{params[:title].downcase}%"
67
+ if @product.variants.nil? || @product.variants.count == 0
68
+ v = Variant.new
69
+ v.option1 = @product.default1 if @product.option1
70
+ v.option2 = @product.default2 if @product.option2
71
+ v.option3 = @product.default3 if @product.option3
72
+ v.status = 'Active'
73
+ @product.variants = [v]
74
+ @product.save
64
75
  end
76
+ @variant = params[:variant_id] ? Variant.find(params[:variant_id]) : @product.variants[0]
77
+ session['variant_cols'] = self.default_variant_cols if session['variant_cols'].nil?
78
+ @cols = session['variant_cols']
65
79
 
66
- # Query for all relevant products
67
- products = values.any? ? Caboose::Product.joins(joins).where([where].concat(values)) : []
68
-
69
- # Grab variants for each product
70
- @variants = products.collect { |product| product.variants }.flatten
71
-
72
- # Grab all categories; except for all and uncategorized
73
- @categories = Caboose::Category.where('parent_id IS NOT NULL')
80
+ @highlight_variant_id = params[:highlight] ? params[:highlight].to_i : nil
74
81
 
75
- # Grab all vendors
76
- @vendors = Caboose::Vendor.all
77
-
78
- render layout: 'caboose/admin'
82
+ if @product.options.nil? || @product.options.count == 0
83
+ render 'caboose/products/admin_edit_variants_single', :layout => 'caboose/admin'
84
+ else
85
+ render 'caboose/products/admin_edit_variants', :layout => 'caboose/admin'
86
+ end
79
87
  end
80
88
 
81
89
  # PUT /admin/variants/:id
@@ -88,40 +96,23 @@ module Caboose
88
96
  save = true
89
97
  params.each do |name,value|
90
98
  case name
91
- when 'alternate_id'
92
- v.alternate_id = value
93
- when 'sku'
94
- v.sku = value
95
- when 'barcode'
96
- v.barcode = value
97
- when 'price'
98
- v.price = value
99
- when 'quantity_in_stock'
100
- v.quantity_in_stock = value
101
- when 'ignore_quantity'
102
- v.ignore_quantity = value
103
- when 'allow_backorder'
104
- v.allow_backorder = value
105
- when 'status'
106
- v.status = value
107
- when 'weight'
108
- v.weight = value
109
- when 'length'
110
- v.length = value
111
- when 'width'
112
- v.width = value
113
- when 'height'
114
- v.height = value
115
- when 'option1'
116
- v.option1 = value
117
- when 'option2'
118
- v.option2 = value
119
- when 'option3'
120
- v.option3 = value
121
- when 'requires_shipping'
122
- v.requires_shipping = value
123
- when 'taxable'
124
- v.taxable = value
99
+ when 'alternate_id' then v.alternate_id = value
100
+ when 'sku' then v.sku = value
101
+ when 'barcode' then v.barcode = value
102
+ when 'price' then v.price = value
103
+ when 'quantity_in_stock' then v.quantity_in_stock = value
104
+ when 'ignore_quantity' then v.ignore_quantity = value
105
+ when 'allow_backorder' then v.allow_backorder = value
106
+ when 'status' then v.status = value
107
+ when 'weight' then v.weight = value
108
+ when 'length' then v.length = value
109
+ when 'width' then v.width = value
110
+ when 'height' then v.height = value
111
+ when 'option1' then v.option1 = value
112
+ when 'option2' then v.option2 = value
113
+ when 'option3' then v.option3 = value
114
+ when 'requires_shipping' then v.requires_shipping = value
115
+ when 'taxable' then v.taxable = value
125
116
  end
126
117
  end
127
118
  resp.success = save && v.save
@@ -201,7 +192,87 @@ module Caboose
201
192
  :redirect => "/admin/products/#{v.product_id}/variants"
202
193
  })
203
194
  end
195
+
196
+ # GET /admin/products/:product_id/variants/sort-order
197
+ def admin_edit_sort_order
198
+ return if !user_is_allowed('products', 'edit')
199
+ @product = Product.find(params[:product_id])
200
+ render :layout => 'caboose/admin'
201
+ end
202
+
203
+ # PUT /admin/products/:product_id/variants/option1-sort-order
204
+ def admin_update_option1_sort_order
205
+ product_id = params[:product_id]
206
+ params[:values].each_with_index do |value, i|
207
+ Variant.where(:product_id => product_id, :option1 => value).all.each do |v|
208
+ v.update_attribute(:option1_sort_order, i)
209
+ end
210
+ end
211
+ render :json => { :success => true }
212
+ end
213
+
214
+ # PUT /admin/products/:product_id/variants/option1-sort-order
215
+ def admin_update_option2_sort_order
216
+ product_id = params[:product_id]
217
+ params[:values].each_with_index do |value, i|
218
+ Variant.where(:product_id => product_id, :option2 => value).all.each do |v|
219
+ v.update_attribute(:option2_sort_order, i)
220
+ end
221
+ end
222
+ render :json => { :success => true }
223
+ end
224
+
225
+ # PUT /admin/products/:product_id/variants/option1-sort-order
226
+ def admin_update_option3_sort_order
227
+ product_id = params[:product_id]
228
+ params[:values].each_with_index do |value, i|
229
+ Variant.where(:product_id => product_id, :option3 => value).all.each do |v|
230
+ v.update_attribute(:option3_sort_order, i)
231
+ end
232
+ end
233
+ render :json => { :success => true }
234
+ end
204
235
 
236
+ # GET /admin/variants
237
+ def admin_group
238
+ return if !user_is_allowed('variants', 'edit')
239
+
240
+ joins = []
241
+ where = ''
242
+ values = []
243
+
244
+ if params[:category_ids]
245
+ joins << [:category_memberships]
246
+ where << 'store_category_memberships.category_id IN (?)'
247
+ values << params[:category_ids]
248
+ end
249
+
250
+ if params[:vendor_ids]
251
+ joins << [:vendor]
252
+ where << 'store_vendors.id IN (?)'
253
+ values << params[:vendor_ids]
254
+ end
255
+
256
+ if params[:title]
257
+ where << 'LOWER(store_products.title) LIKE ?'
258
+ values << "%#{params[:title].downcase}%"
259
+ end
260
+
261
+ # Query for all relevant products
262
+ products = values.any? ? Caboose::Product.joins(joins).where([where].concat(values)) : []
263
+
264
+ # Grab variants for each product
265
+ @variants = products.collect { |product| product.variants }.flatten
266
+
267
+ # Grab all categories; except for all and uncategorized
268
+ @categories = Caboose::Category.where('parent_id IS NOT NULL')
269
+
270
+ # Grab all vendors
271
+ @vendors = Caboose::Vendor.all
272
+
273
+ render :layout => 'caboose/admin'
274
+ end
275
+
205
276
  # GET /admin/variants/status-options
206
277
  def admin_status_options
207
278
  arr = ['Active', 'Inactive', 'Deleted']
@@ -75,12 +75,14 @@ module Caboose
75
75
  block.children.each{ |b2| self.cache_helper(site, p, b2) }
76
76
  end
77
77
 
78
- def self.cache_helper2(site, p, bt)
78
+ def self.cache_helper2(site, p, bt)
79
+ return if bt.nil?
79
80
  self.add_block_type(site, p, bt)
80
81
  bt.children.each{ |bt2| self.cache_helper2(site, p, bt2) }
81
82
  end
82
83
 
83
84
  def self.add_block_type(site, p, bt)
85
+ return if bt.nil?
84
86
  if !@render_functions.has_key?(bt.id)
85
87
  f = ''
86
88
  if bt.use_render_function && bt.render_function
@@ -3,22 +3,7 @@ p = @product
3
3
  %>
4
4
  <%= render :partial => 'caboose/products/admin_header' %>
5
5
 
6
- <div id='categories'>
7
- <table>
8
- <tr>
9
- <% @top_categories.each do |cat| %>
10
- <% next if cat.children && cat.children.count > 0 %>
11
- <td valign='top'><%= raw category_checkboxes([cat], @selected_ids) %></td>
12
- <% end %>
13
- </tr>
14
- <tr>
15
- <% @top_categories.each do |cat| %>
16
- <% next if cat.children.nil? || cat.children.count == 0 %>
17
- <td valign='top'><%= raw category_checkboxes([cat], @selected_ids) %></td>
18
- <% end %>
19
- </tr>
20
- </table>
21
- </div>
6
+ <div id='product_<%= p.id %>_category_id'></div>
22
7
 
23
8
  <%= render :partial => 'caboose/products/admin_footer' %>
24
9
 
@@ -35,39 +20,26 @@ p = @product
35
20
  <% content_for :caboose_js do %>
36
21
  <script type='text/javascript'>
37
22
 
23
+ var mb = false;
38
24
  $(document).ready(function() {
39
- $('#categories input').click(function() {
40
- var cat_id = $(this).attr('id').split('_')[1];
41
- if ($(this).is(':checked'))
42
- add_product_to_category(<%= p.id %>, cat_id);
43
- else
44
- remove_product_from_category(<%= p.id %>, cat_id);
25
+ mb = new ModelBinder({
26
+ name: 'Product',
27
+ id: <%= p.id %>,
28
+ update_url: '/admin/products/<%= p.id %>',
29
+ authenticity_token: '<%= form_authenticity_token %>',
30
+ attributes: [
31
+ {
32
+ name: 'category_id',
33
+ nice_name: 'Categories',
34
+ type: 'checkbox-multiple',
35
+ options_url: '/admin/categories/options',
36
+ value: <%= raw Caboose.json(p.categories.collect{ |cat| cat.id }) %>,
37
+ fixed_placeholder: false,
38
+ width: 400
39
+ }
40
+ ]
45
41
  });
46
42
  });
47
43
 
48
- var modal = false;
49
- $(window).load(function() {
50
- modal = new CabooseModal(800);
51
- });
52
-
53
- function add_product_to_category(product_id, cat_id)
54
- {
55
- $.ajax({
56
- url: '/admin/products/' + product_id + '/categories',
57
- type: 'post',
58
- data: { category_id: cat_id },
59
- success: function(resp) {}
60
- });
61
- }
62
-
63
- function remove_product_from_category(product_id, cat_id)
64
- {
65
- $.ajax({
66
- url: '/admin/products/' + product_id + '/categories/' + cat_id,
67
- type: 'delete',
68
- success: function(resp) {}
69
- });
70
- }
71
-
72
44
  </script>
73
45
  <% end %>
@@ -15,10 +15,7 @@ p = @product
15
15
  <div id='images'>
16
16
  <% if p.product_images.count > 0 %>
17
17
  <% p.product_images.each do |img| %>
18
- <%
19
- #url = "https://s3.amazonaws.com/tuskwear/products/#{img.product_id}_#{img.id}_tiny.jpg"
20
- url = img.image.url(:tiny)
21
- %>
18
+ <% url = img.image.url(:tiny) %>
22
19
  <div id='img_<%= img.id %>_container'><a href="javascript:select_image(<%= img.id %>);"><img src='<%= url %>' width='75' /></a></div>
23
20
  <% end %>
24
21
  <% else %>
@@ -42,13 +39,7 @@ p = @product
42
39
  <% content_for :caboose_js do %>
43
40
  <script type='text/javascript'>
44
41
 
45
- var modal = false;
46
- $(window).load(function() {
47
- modal.autosize();
48
- });
49
-
50
- $(document).ready(function() {
51
- modal = new CabooseModal(900);
42
+ $(document).ready(function() {
52
43
  <% if p.product_images.count > 0 %>
53
44
  select_image(<%= p.product_images[0].id %>);
54
45
  <% end %>
@@ -76,7 +67,7 @@ function select_image(image_id, confirm)
76
67
  {
77
68
  if (!variants)
78
69
  {
79
- modal.autosize("<p class='loading'>Getting attached product variants...</p>", 'variants');
70
+ $('#variants').html("<p class='loading'>Getting attached product variants...</p>");
80
71
  $.ajax({
81
72
  url: '/admin/products/<%= p.id %>/variants/json',
82
73
  success: function(resp) { variants = resp; select_image(image_id); }
@@ -109,8 +100,7 @@ function select_image(image_id, confirm)
109
100
  $('#variants').empty().append('<br/>');
110
101
  $('#variants').append($('<div/>').attr('id','delete_message'));
111
102
  $('#variants').append($('<input/>').attr('type','button').val('Delete Image').click(function() { delete_image(image_id); }));
112
- $('#variants').append(tbl);
113
- modal.autosize();
103
+ $('#variants').append(tbl);
114
104
  }
115
105
 
116
106
  function variants_subtable(image_id, x, y)
@@ -121,20 +111,6 @@ function variants_subtable(image_id, x, y)
121
111
  var v = variants[i];
122
112
  if (!v) break;
123
113
  checked = image_is_attached_to_variant(v.id);
124
-
125
- //var a = $('<a/>')
126
- // .attr('href', '#')
127
- // .attr('id', 'v_' + v.id)
128
- // .html(variant_title(v))
129
- // .click(function(e) {
130
- // e.preventDefault();
131
- // variant_id = $(this).attr('id').split('_')[1];
132
- // var attach = false;
133
- // if ($(this).hasClass('selected')) { attach = false; $(this).removeClass('selected'); }
134
- // else { attch = true; $(this).addClass('selected'); }
135
- // attach_image_to_variant(image_id, variant_id, attach);
136
- // });
137
- //tbody.append($('<tr/>').append($('<td/>').append(a)));
138
114
 
139
115
  tbody.append($('<tr/>')
140
116
  .append($('<td/>')
@@ -145,8 +121,8 @@ function variants_subtable(image_id, x, y)
145
121
  .css('position','relative')
146
122
  .val('1')
147
123
  .click(function() {
148
- variant_id = $(this).attr('id').split('_')[1];
149
- attach_image_to_variant(image_id, variant_id, $(this).is(':checked'));
124
+ variant_id = $(this).attr('id').split('_')[1];
125
+ attach_image_to_variant(image_id, variant_id, $(this).prop('checked'));
150
126
  })
151
127
  )
152
128
  )
@@ -173,9 +149,7 @@ function variant_title(v)
173
149
  }
174
150
 
175
151
  function attach_image_to_variant(image_id, variant_id, attach)
176
- {
177
- attach = attach || true;
178
-
152
+ {
179
153
  if (attach)
180
154
  image_variant_ids[image_variant_ids.length] = variant_id;
181
155
  else
@@ -193,8 +167,7 @@ function attach_image_to_variant(image_id, variant_id, attach)
193
167
 
194
168
  function add_image()
195
169
  {
196
- $('#new_image_message').html("<p class='loading'>Adding image...</p>");
197
- modal.autosize();
170
+ $('#new_image_message').html("<p class='loading'>Adding image...</p>");
198
171
  }
199
172
 
200
173
  function delete_image(image_id, confirm)
@@ -204,17 +177,17 @@ function delete_image(image_id, confirm)
204
177
  var p = $('<p/>').addClass('note error').css('margin-bottom', '10px')
205
178
  .append("Are you sure you want to delete the image?<br />This can't be undone.<br /><br />")
206
179
  .append($('<input/>').attr('type', 'button').val('Yes').click(function() { delete_image(image_id, true); })).append(' ')
207
- .append($('<input/>').attr('type', 'button').val('No').click(function() { $('#delete_message').empty(); modal.autosize(); }));
208
- modal.autosize(p, 'delete_message');
180
+ .append($('<input/>').attr('type', 'button').val('No').click(function() { $('#delete_message').empty(); }));
181
+ $('#delete_message').empty().append(p);
209
182
  return;
210
183
  }
211
- modal.autosize("<p class='loading'>Deleting the image...</p>", 'delete_message');
184
+ $('#delete_message').empty().append("<p class='loading'>Deleting the image...</p>");
212
185
  $.ajax({
213
186
  url: '/admin/product-images/' + image_id,
214
187
  type: 'delete',
215
188
  success: function(resp) {
216
189
  if (resp.error)
217
- modal.autosize("<p class='note error'>" + resp.error + "</p>", 'delete_message');
190
+ $('#delete_message').html("<p class='note error'>" + resp.error + "</p>");
218
191
  else
219
192
  window.location.reload(true);
220
193
  }
@@ -15,7 +15,7 @@ v = @variant
15
15
 
16
16
  <%= render :partial => 'caboose/products/admin_header' %>
17
17
 
18
- <p style='font-size: 75%;'><a href='/admin/products/<%= p.id %>/variant-cols'>Edit visible columns</a></p>
18
+ <div id='variants'></div>
19
19
 
20
20
  <div id='message'><%
21
21
  # Make sure we're not trying to highlight a deleted variant
@@ -29,57 +29,6 @@ if @highlight_variant_id
29
29
  end
30
30
  %></div>
31
31
 
32
- <div id='variants_wrapper'>
33
- <table id='variants'>
34
- <tr>
35
- <th>&nbsp;</th>
36
- <% if @cols['option1' ] && p.option1 %><th valign='bottom'><%= p.option1 %></th><% end %>
37
- <% if @cols['option2' ] && p.option2 %><th valign='bottom'><%= p.option2 %></th><% end %>
38
- <% if @cols['option3' ] && p.option3 %><th valign='bottom'><%= p.option3 %></th><% end %>
39
- <% if @cols['status' ] == true %><th valign='bottom'>Status </th><% end %>
40
- <% if @cols['alternate_id' ] == true %><th valign='bottom'>Alternate ID </th><% end %>
41
- <% if @cols['barcode' ] == true %><th valign='bottom'>Barcode </th><% end %>
42
- <% if @cols['price' ] == true %><th valign='bottom'>Price </th><% end %>
43
- <% if @cols['quantity_in_stock' ] == true %><th valign='bottom'>Quantity </th><% end %>
44
- <% if @cols['weight' ] == true %><th valign='bottom'>Weight </th><% end %>
45
- <% if @cols['length' ] == true %><th valign='bottom'>Length </th><% end %>
46
- <% if @cols['width' ] == true %><th valign='bottom'>Width </th><% end %>
47
- <% if @cols['height' ] == true %><th valign='bottom'>Height </th><% end %>
48
- <% if @cols['cylinder' ] == true %><th valign='bottom'>Cylinder </th><% end %>
49
- <% if @cols['requires_shipping' ] == true %><th valign='bottom'>Requires Shipping </th><% end %>
50
- <% if @cols['allow_backorder' ] == true %><th valign='bottom'>Allow Backorder </th><% end %>
51
- <% if @cols['taxable' ] == true %><th valign='bottom'>Taxable </th><% end %>
52
- <th>&nbsp;</th>
53
- <th>&nbsp;</th>
54
- </tr>
55
- <tbody id='variants_tbody'>
56
- <% p.variants.where(:status => ['Active', 'Inactive']).each do |v| %>
57
- <tr id='variant_<%= v.id %>' <% if @highlight_variant_id && v.id == @highlight_variant_id %>class='highlight'<% end %>>
58
- <td class='sort_handle'>&nbsp;</td>
59
- <% if @cols['option1' ] && p.option1 %><td><div id='variant_<%= v.id %>_option1' ></div></td><% end %>
60
- <% if @cols['option2' ] && p.option2 %><td><div id='variant_<%= v.id %>_option2' ></div></td><% end %>
61
- <% if @cols['option3' ] && p.option3 %><td><div id='variant_<%= v.id %>_option3' ></div></td><% end %>
62
- <% if @cols['status' ] == true %><td><div id='variant_<%= v.id %>_status' ></div></td><% end %>
63
- <% if @cols['alternate_id' ] == true %><td><div id='variant_<%= v.id %>_alternate_id' ></div></td><% end %>
64
- <% if @cols['barcode' ] == true %><td><div id='variant_<%= v.id %>_barcode' ></div></td><% end %>
65
- <% if @cols['price' ] == true %><td><div id='variant_<%= v.id %>_price' ></div></td><% end %>
66
- <% if @cols['quantity_in_stock' ] == true %><td><div id='variant_<%= v.id %>_quantity_in_stock' ></div></td><% end %>
67
- <% if @cols['weight' ] == true %><td><div id='variant_<%= v.id %>_weight' ></div></td><% end %>
68
- <% if @cols['length' ] == true %><td><div id='variant_<%= v.id %>_length' ></div></td><% end %>
69
- <% if @cols['width' ] == true %><td><div id='variant_<%= v.id %>_width' ></div></td><% end %>
70
- <% if @cols['height' ] == true %><td><div id='variant_<%= v.id %>_height' ></div></td><% end %>
71
- <% if @cols['cylinder' ] == true %><td><div id='variant_<%= v.id %>_cylinder' ></div></td><% end %>
72
- <% if @cols['requires_shipping' ] == true %><td><div id='variant_<%= v.id %>_requires_shipping' ></div></td><% end %>
73
- <% if @cols['allow_backorder' ] == true %><td><div id='variant_<%= v.id %>_allow_backorder' ></div></td><% end %>
74
- <% if @cols['taxable' ] == true %><td><div id='variant_<%= v.id %>_taxable' ></div></td><% end %>
75
- <td class='edit'><a href='/admin/products/<%= p.id %>/variants/<%= v.id %>/edit'>Edit</a></td>
76
- <td class='delete'><a href='#' onclick='delete_variant(<%= v.id %>);'>Delete</a></td>
77
- </tr>
78
- <% end %>
79
- </tbody>
80
- </table>
81
- </div>
82
-
83
32
  <p><input type='button' value='New Variant' onclick="add_variant(<%= p.id %>);" /></p>
84
33
 
85
34
  <form id="add-multiple" action="/admin/products/<%= @product.id %>/variants/add-multiple" method="post">
@@ -102,69 +51,41 @@ td.sort_handle { background: #ccc; width: 20px; }
102
51
  <script type='text/javascript'>
103
52
 
104
53
  $(document).ready(function() {
105
- $('form#add-multiple').on('submit', function(event) {
106
- event.preventDefault();
107
- var $form = $(event.target);
108
-
109
- $.ajax({
110
- type: $form.attr('method'),
111
- url: $form.attr('action'),
112
- data: $form.serialize(),
113
- success: function(response) {
114
- console.log(response);
115
- if (response.success) {
116
- location.reload();
117
- } else {
118
- $form.find('.message').empty().text(response.error);
119
- }
120
- }
121
- });
122
- });
123
-
124
- <% p.variants.each do |v| %>
125
- new ModelBinder({
126
- name: 'Variant',
127
- id: <%= v.id %>,
128
- update_url: '/admin/variants/<%= v.id %>',
129
- authenticity_token: '<%= form_authenticity_token %>',
130
- attributes: [
131
- <% if @cols['option1' ] && p.option1 %>{ name: 'option1' , nice_name: <%= raw Caboose.json(p.option1) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option1 ) %>, width: 75, fixed_placeholder: false },<% end %>
132
- <% if @cols['option2' ] && p.option2 %>{ name: 'option2' , nice_name: <%= raw Caboose.json(p.option2) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option2 ) %>, width: 75, fixed_placeholder: false },<% end %>
133
- <% if @cols['option3' ] && p.option3 %>{ name: 'option3' , nice_name: <%= raw Caboose.json(p.option3) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option3 ) %>, width: 75, fixed_placeholder: false },<% end %>
134
- <% if @cols['status' ] == true %>{ name: 'status' , nice_name: 'Status' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.status ) %>, width: 75, fixed_placeholder: false },<% end %>
135
- <% if @cols['alternate_id' ] == true %>{ name: 'alternate_id' , nice_name: 'Alternate ID' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.alternate_id ) %>, width: 75, fixed_placeholder: false },<% end %>
136
- <% if @cols['sku' ] == true %>{ name: 'sku' , nice_name: 'SKU' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.sku ) %>, width: 75, fixed_placeholder: false },<% end %>
137
- <% if @cols['barcode' ] == true %>{ name: 'barcode' , nice_name: 'Barcode' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.barcode ) %>, width: 75, fixed_placeholder: false },<% end %>
138
- <% if @cols['price' ] == true %>{ name: 'price' , nice_name: 'Price' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.price ) %>, width: 75, fixed_placeholder: false },<% end %>
139
- <% if @cols['quantity_in_stock' ] == true %>{ name: 'quantity_in_stock' , nice_name: 'Quantity' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.quantity_in_stock ) %>, width: 50, fixed_placeholder: false },<% end %>
140
- <% if @cols['weight' ] == true %>{ name: 'weight' , nice_name: 'Weight (grams)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.weight ) %>, width: 50, fixed_placeholder: false },<% end %>
141
- <% if @cols['length' ] == true %>{ name: 'length' , nice_name: 'Length (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.length ) %>, width: 50, fixed_placeholder: false },<% end %>
142
- <% if @cols['width' ] == true %>{ name: 'width' , nice_name: 'Width (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.width ) %>, width: 50, fixed_placeholder: false },<% end %>
143
- <% if @cols['height' ] == true %>{ name: 'height' , nice_name: 'Height (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.height ) %>, width: 50, fixed_placeholder: false },<% end %>
144
- <% if @cols['cylinder' ] == true %>{ name: 'cylinder' , nice_name: 'Cylinder' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.cylinder ) %>, width: 50, fixed_placeholder: false },<% end %>
145
- <% if @cols['requires_shipping' ] == true %>{ name: 'requires_shipping' , nice_name: 'Requires shipping' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.requires_shipping ) %>, width: 50, fixed_placeholder: false },<% end %>
146
- <% if @cols['taxable' ] == true %>{ name: 'taxable' , nice_name: 'Taxable' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.taxable ) %>, width: 50, fixed_placeholder: false },<% end %>
147
- <% if @cols['allow_backorder' ] == true %>{ name: 'allow_backorder' , nice_name: 'Allow backorder' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.allow_backorder ) %>, width: 50, fixed_placeholder: false } <% end %>
148
- ]
149
- });
150
- <% end %>
151
-
152
- $('#variants_tbody').sortable({
153
- handle: '.sort_handle',
154
- update: function(event, ui) {
155
- $.ajax({
156
- url: '/admin/products/<%= p.id %>/variants/sort-order',
157
- type: 'put',
158
- data: $('#variants_tbody').sortable('serialize', { key: 'variant_ids[]' }),
159
- success: function(resp) {}
160
- });
161
- }
162
- });
163
- });
164
-
165
- var modal = false;
166
- $(window).load(function() {
167
- modal = new CabooseModal('100%');
54
+ var that = this;
55
+ var table = new IndexTable({
56
+ form_authenticity_token: '<%= form_authenticity_token %>',
57
+ container: 'variants',
58
+ base_url: '/admin/products/<%= p.id %>/variants',
59
+ allow_bulk_edit: false,
60
+ allow_bulk_delete: true,
61
+ allow_duplicate: false,
62
+ allow_advanced_edit: true,
63
+ fields: [
64
+ <% if p.option1 %>{ show: true , name: 'option1' , nice_name: <%= raw Caboose.json(p.option1) %> , sort: 'option1' , type: 'text' , value: function(v) { return v.option1 }, width: 75, align: 'left' },<% end %>
65
+ <% if p.option2 %>{ show: true , name: 'option2' , nice_name: <%= raw Caboose.json(p.option2) %> , sort: 'option2' , type: 'text' , value: function(v) { return v.option2 }, width: 75, align: 'left' },<% end %>
66
+ <% if p.option3 %>{ show: true , name: 'option3' , nice_name: <%= raw Caboose.json(p.option3) %> , sort: 'option3' , type: 'text' , value: function(v) { return v.option3 }, width: 75, align: 'left' },<% end %>
67
+ { show: true , name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'text' , value: function(v) { return v.status }, width: 75, align: 'left' },
68
+ { show: true , name: 'alternate_id' , nice_name: 'Alternate ID' , sort: 'alternate_id' , type: 'text' , value: function(v) { return v.alternate_id }, width: 75, align: 'left' },
69
+ { show: true , name: 'sku' , nice_name: 'SKU' , sort: 'sku' , type: 'text' , value: function(v) { return v.sku }, width: 75, align: 'left' },
70
+ { show: true , name: 'barcode' , nice_name: 'Barcode' , sort: 'barcode' , type: 'text' , value: function(v) { return v.barcode }, width: 75, align: 'left' },
71
+ { show: true , name: 'price' , nice_name: 'Price' , sort: 'price' , type: 'text' , value: function(v) { return v.price }, width: 75, align: 'right' },
72
+ { show: true , name: 'quantity_in_stock' , nice_name: 'Quantity' , sort: 'quantity_in_stock' , type: 'text' , value: function(v) { return v.quantity_in_stock }, width: 50, align: 'right' },
73
+ { show: true , name: 'weight' , nice_name: 'Weight (grams)' , sort: 'weight' , type: 'text' , value: function(v) { return v.weight }, width: 50, align: 'right' },
74
+ { show: true , name: 'length' , nice_name: 'Length (in)' , sort: 'length' , type: 'text' , value: function(v) { return v.length }, width: 50, align: 'right' },
75
+ { show: true , name: 'width' , nice_name: 'Width (in)' , sort: 'width' , type: 'text' , value: function(v) { return v.width }, width: 50, align: 'right' },
76
+ { show: true , name: 'height' , nice_name: 'Height (in)' , sort: 'height' , type: 'text' , value: function(v) { return v.height }, width: 50, align: 'right' },
77
+ { show: true , name: 'cylinder' , nice_name: 'Cylinder' , sort: 'cylinder' , type: 'checkbox' , value: function(v) { return v.cylinder }, width: 50, align: 'center' },
78
+ { show: true , name: 'requires_shipping' , nice_name: 'Requires shipping' , sort: 'requires_shipping' , type: 'checkbox' , value: function(v) { return v.requires_shipping }, width: 50, align: 'center' },
79
+ { show: true , name: 'taxable' , nice_name: 'Taxable' , sort: 'taxable' , type: 'checkbox' , value: function(v) { return v.taxable }, width: 50, align: 'center' },
80
+ { show: true , name: 'allow_backorder' , nice_name: 'Allow backorder' , sort: 'allow_backorder' , type: 'checkbox' , value: function(v) { return v.allow_backorder }, width: 50, align: 'center' }
81
+ ],
82
+ new_model_text: 'New Variant',
83
+ new_model_fields: [
84
+ <% if p.option1 %>{ name: 'name', nice_name: 'Name', type: 'text', width: 400 },<% end %>
85
+ <% if p.option1 %>{ name: 'name', nice_name: 'Name', type: 'text', width: 400 },<% end %>
86
+ <% if p.option1 %>{ name: 'name', nice_name: 'Name', type: 'text', width: 400 },<% end %>
87
+ ],
88
+ });
168
89
  });
169
90
 
170
91
  </script>
@@ -0,0 +1,171 @@
1
+ <% content_for :caboose_css do %>
2
+ <style>
3
+ ul {
4
+ list-style-type: square;
5
+ padding: 0 0 0 24px;
6
+ margin: 12px 0 24px;
7
+ }
8
+ </style>
9
+ <% end %>
10
+
11
+ <%
12
+ p = @product
13
+ v = @variant
14
+ %>
15
+
16
+ <%= render :partial => 'caboose/products/admin_header' %>
17
+
18
+ <p style='font-size: 75%;'><a href='/admin/products/<%= p.id %>/variant-cols'>Edit visible columns</a></p>
19
+
20
+ <div id='message'><%
21
+ # Make sure we're not trying to highlight a deleted variant
22
+ if @highlight_variant_id
23
+ v = Variant.where(:id => @highlight_variant_id).first
24
+ if v.nil?
25
+ %><p class='note error'>The variant you want to highlight is not in the database.</p><%
26
+ elsif v.status == 'Deleted'
27
+ %><p class='note error'>The variant you want to highlight has been deleted.</p><%
28
+ end
29
+ end
30
+ %></div>
31
+
32
+ <div id='variants_wrapper'>
33
+ <table id='variants'>
34
+ <tr>
35
+ <th>&nbsp;</th>
36
+ <% if @cols['option1' ] && p.option1 %><th valign='bottom'><%= p.option1 %></th><% end %>
37
+ <% if @cols['option2' ] && p.option2 %><th valign='bottom'><%= p.option2 %></th><% end %>
38
+ <% if @cols['option3' ] && p.option3 %><th valign='bottom'><%= p.option3 %></th><% end %>
39
+ <% if @cols['status' ] == true %><th valign='bottom'>Status </th><% end %>
40
+ <% if @cols['alternate_id' ] == true %><th valign='bottom'>Alternate ID </th><% end %>
41
+ <% if @cols['barcode' ] == true %><th valign='bottom'>Barcode </th><% end %>
42
+ <% if @cols['price' ] == true %><th valign='bottom'>Price </th><% end %>
43
+ <% if @cols['quantity_in_stock' ] == true %><th valign='bottom'>Quantity </th><% end %>
44
+ <% if @cols['weight' ] == true %><th valign='bottom'>Weight </th><% end %>
45
+ <% if @cols['length' ] == true %><th valign='bottom'>Length </th><% end %>
46
+ <% if @cols['width' ] == true %><th valign='bottom'>Width </th><% end %>
47
+ <% if @cols['height' ] == true %><th valign='bottom'>Height </th><% end %>
48
+ <% if @cols['cylinder' ] == true %><th valign='bottom'>Cylinder </th><% end %>
49
+ <% if @cols['requires_shipping' ] == true %><th valign='bottom'>Requires Shipping </th><% end %>
50
+ <% if @cols['allow_backorder' ] == true %><th valign='bottom'>Allow Backorder </th><% end %>
51
+ <% if @cols['taxable' ] == true %><th valign='bottom'>Taxable </th><% end %>
52
+ <th>&nbsp;</th>
53
+ <th>&nbsp;</th>
54
+ </tr>
55
+ <tbody id='variants_tbody'>
56
+ <% p.variants.where(:status => ['Active', 'Inactive']).each do |v| %>
57
+ <tr id='variant_<%= v.id %>' <% if @highlight_variant_id && v.id == @highlight_variant_id %>class='highlight'<% end %>>
58
+ <td class='sort_handle'>&nbsp;</td>
59
+ <% if @cols['option1' ] && p.option1 %><td><div id='variant_<%= v.id %>_option1' ></div></td><% end %>
60
+ <% if @cols['option2' ] && p.option2 %><td><div id='variant_<%= v.id %>_option2' ></div></td><% end %>
61
+ <% if @cols['option3' ] && p.option3 %><td><div id='variant_<%= v.id %>_option3' ></div></td><% end %>
62
+ <% if @cols['status' ] == true %><td><div id='variant_<%= v.id %>_status' ></div></td><% end %>
63
+ <% if @cols['alternate_id' ] == true %><td><div id='variant_<%= v.id %>_alternate_id' ></div></td><% end %>
64
+ <% if @cols['barcode' ] == true %><td><div id='variant_<%= v.id %>_barcode' ></div></td><% end %>
65
+ <% if @cols['price' ] == true %><td><div id='variant_<%= v.id %>_price' ></div></td><% end %>
66
+ <% if @cols['quantity_in_stock' ] == true %><td><div id='variant_<%= v.id %>_quantity_in_stock' ></div></td><% end %>
67
+ <% if @cols['weight' ] == true %><td><div id='variant_<%= v.id %>_weight' ></div></td><% end %>
68
+ <% if @cols['length' ] == true %><td><div id='variant_<%= v.id %>_length' ></div></td><% end %>
69
+ <% if @cols['width' ] == true %><td><div id='variant_<%= v.id %>_width' ></div></td><% end %>
70
+ <% if @cols['height' ] == true %><td><div id='variant_<%= v.id %>_height' ></div></td><% end %>
71
+ <% if @cols['cylinder' ] == true %><td><div id='variant_<%= v.id %>_cylinder' ></div></td><% end %>
72
+ <% if @cols['requires_shipping' ] == true %><td><div id='variant_<%= v.id %>_requires_shipping' ></div></td><% end %>
73
+ <% if @cols['allow_backorder' ] == true %><td><div id='variant_<%= v.id %>_allow_backorder' ></div></td><% end %>
74
+ <% if @cols['taxable' ] == true %><td><div id='variant_<%= v.id %>_taxable' ></div></td><% end %>
75
+ <td class='edit'><a href='/admin/products/<%= p.id %>/variants/<%= v.id %>/edit'>Edit</a></td>
76
+ <td class='delete'><a href='#' onclick='delete_variant(<%= v.id %>);'>Delete</a></td>
77
+ </tr>
78
+ <% end %>
79
+ </tbody>
80
+ </table>
81
+ </div>
82
+
83
+ <p><input type='button' value='New Variant' onclick="add_variant(<%= p.id %>);" /></p>
84
+
85
+ <form id="add-multiple" action="/admin/products/<%= @product.id %>/variants/add-multiple" method="post">
86
+ <p style="margin: 0 0 12px"><small>CSV format: Alternate ID, Quantity, Price<%= ', ' if @product.option1 || @product.option2 || @product.option3 %><%= [@product.option1, @product.option2, @product.option3].compact.join(', ') %></small></p>
87
+ <textarea id="variants_csv" name="variants_csv" rows="8" cols="12" style="min-width: 500px; min-height: 250px; margin: 0 0 16px; padding: 12px"></textarea><br />
88
+ <input type="submit" value="Submit" />
89
+ <p class="message" style="margin: 12px 0 0; color: red"></p>
90
+ </form>
91
+
92
+ <%= render :partial => 'caboose/products/admin_footer' %>
93
+
94
+ <% content_for :caboose_css do %>
95
+ <style type='text/css'>
96
+ tr.highlight td { background: #ffff99 }
97
+ td.sort_handle { background: #ccc; width: 20px; }
98
+ </style>
99
+ <% end %>
100
+
101
+ <% content_for :caboose_js do %>
102
+ <script type='text/javascript'>
103
+
104
+ $(document).ready(function() {
105
+ $('form#add-multiple').on('submit', function(event) {
106
+ event.preventDefault();
107
+ var $form = $(event.target);
108
+
109
+ $.ajax({
110
+ type: $form.attr('method'),
111
+ url: $form.attr('action'),
112
+ data: $form.serialize(),
113
+ success: function(response) {
114
+ console.log(response);
115
+ if (response.success) {
116
+ location.reload();
117
+ } else {
118
+ $form.find('.message').empty().text(response.error);
119
+ }
120
+ }
121
+ });
122
+ });
123
+
124
+ <% p.variants.each do |v| %>
125
+ new ModelBinder({
126
+ name: 'Variant',
127
+ id: <%= v.id %>,
128
+ update_url: '/admin/variants/<%= v.id %>',
129
+ authenticity_token: '<%= form_authenticity_token %>',
130
+ attributes: [
131
+ <% if @cols['option1' ] && p.option1 %>{ name: 'option1' , nice_name: <%= raw Caboose.json(p.option1) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option1 ) %>, width: 75, fixed_placeholder: false },<% end %>
132
+ <% if @cols['option2' ] && p.option2 %>{ name: 'option2' , nice_name: <%= raw Caboose.json(p.option2) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option2 ) %>, width: 75, fixed_placeholder: false },<% end %>
133
+ <% if @cols['option3' ] && p.option3 %>{ name: 'option3' , nice_name: <%= raw Caboose.json(p.option3) %> , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.option3 ) %>, width: 75, fixed_placeholder: false },<% end %>
134
+ <% if @cols['status' ] == true %>{ name: 'status' , nice_name: 'Status' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.status ) %>, width: 75, fixed_placeholder: false },<% end %>
135
+ <% if @cols['alternate_id' ] == true %>{ name: 'alternate_id' , nice_name: 'Alternate ID' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.alternate_id ) %>, width: 75, fixed_placeholder: false },<% end %>
136
+ <% if @cols['sku' ] == true %>{ name: 'sku' , nice_name: 'SKU' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.sku ) %>, width: 75, fixed_placeholder: false },<% end %>
137
+ <% if @cols['barcode' ] == true %>{ name: 'barcode' , nice_name: 'Barcode' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(v.barcode ) %>, width: 75, fixed_placeholder: false },<% end %>
138
+ <% if @cols['price' ] == true %>{ name: 'price' , nice_name: 'Price' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.price ) %>, width: 75, fixed_placeholder: false },<% end %>
139
+ <% if @cols['quantity_in_stock' ] == true %>{ name: 'quantity_in_stock' , nice_name: 'Quantity' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.quantity_in_stock ) %>, width: 50, fixed_placeholder: false },<% end %>
140
+ <% if @cols['weight' ] == true %>{ name: 'weight' , nice_name: 'Weight (grams)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.weight ) %>, width: 50, fixed_placeholder: false },<% end %>
141
+ <% if @cols['length' ] == true %>{ name: 'length' , nice_name: 'Length (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.length ) %>, width: 50, fixed_placeholder: false },<% end %>
142
+ <% if @cols['width' ] == true %>{ name: 'width' , nice_name: 'Width (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.width ) %>, width: 50, fixed_placeholder: false },<% end %>
143
+ <% if @cols['height' ] == true %>{ name: 'height' , nice_name: 'Height (in)' , type: 'text' , align: 'right' , value: <%= raw Caboose.json(v.height ) %>, width: 50, fixed_placeholder: false },<% end %>
144
+ <% if @cols['cylinder' ] == true %>{ name: 'cylinder' , nice_name: 'Cylinder' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.cylinder ) %>, width: 50, fixed_placeholder: false },<% end %>
145
+ <% if @cols['requires_shipping' ] == true %>{ name: 'requires_shipping' , nice_name: 'Requires shipping' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.requires_shipping ) %>, width: 50, fixed_placeholder: false },<% end %>
146
+ <% if @cols['taxable' ] == true %>{ name: 'taxable' , nice_name: 'Taxable' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.taxable ) %>, width: 50, fixed_placeholder: false },<% end %>
147
+ <% if @cols['allow_backorder' ] == true %>{ name: 'allow_backorder' , nice_name: 'Allow backorder' , type: 'checkbox' , align: 'center', value: <%= raw Caboose.json(v.allow_backorder ) %>, width: 50, fixed_placeholder: false } <% end %>
148
+ ]
149
+ });
150
+ <% end %>
151
+
152
+ $('#variants_tbody').sortable({
153
+ handle: '.sort_handle',
154
+ update: function(event, ui) {
155
+ $.ajax({
156
+ url: '/admin/products/<%= p.id %>/variants/sort-order',
157
+ type: 'put',
158
+ data: $('#variants_tbody').sortable('serialize', { key: 'variant_ids[]' }),
159
+ success: function(resp) {}
160
+ });
161
+ }
162
+ });
163
+ });
164
+
165
+ var modal = false;
166
+ $(window).load(function() {
167
+ modal = new CabooseModal('100%');
168
+ });
169
+
170
+ </script>
171
+ <% end %>
@@ -1,8 +1,7 @@
1
1
  <h1>Products</h1>
2
2
 
3
3
  <p style="margin: 12px 0">
4
- <a href="/admin/vendors/new">New Vendor</a><span style="margin: 0 3px">|</span>
5
- <a href="/admin/products/new">New Product</a><span style="margin: 0 3px">|</span>
4
+ <a href="/admin/vendors/new">New Vendor</a><span style="margin: 0 3px">|</span>
6
5
  <a href="/admin/products/sort">Sort Products</a><span style="margin: 0 3px">|</span>
7
6
  <a href='#'>Search Form</a>
8
7
  </p>
@@ -303,7 +303,7 @@ Caboose::Engine.routes.draw do
303
303
  get '/admin/orders/:id/refund' => 'orders#admin_refund'
304
304
  post '/admin/orders/:id/resend-confirmation' => 'orders#admin_resend_confirmation'
305
305
 
306
- post "/reviews/add" => "reviews#add"
306
+ post "/reviews/add" => "reviews#add"
307
307
 
308
308
  get "/admin/products" => "products#admin_index"
309
309
  get "/admin/products/json" => "products#admin_json"
@@ -317,14 +317,22 @@ Caboose::Engine.routes.draw do
317
317
  get "/admin/products/:id/categories" => "products#admin_edit_categories"
318
318
  post "/admin/products/:id/categories" => "products#admin_add_to_category"
319
319
  delete "/admin/products/:id/categories/:category_id" => "products#admin_remove_from_category"
320
- get "/admin/products/:id/variants" => "products#admin_edit_variants"
321
- get "/admin/products/:id/variants/json" => "products#admin_variants_json"
322
- get "/admin/products/:id/variant-cols" => "products#admin_edit_variant_columns"
323
- put "/admin/products/:id/variant-cols" => "products#admin_update_variant_columns"
324
- get "/admin/products/:id/variants/sort-order" => "products#admin_edit_variant_sort_order"
325
- put '/admin/products/:id/variants/option1-sort-order' => 'products#admin_update_variant_option1_sort_order'
326
- put '/admin/products/:id/variants/option2-sort-order' => 'products#admin_update_variant_option2_sort_order'
327
- put '/admin/products/:id/variants/option3-sort-order' => 'products#admin_update_variant_option3_sort_order'
320
+
321
+ get "/admin/products/:product_id/variants" => "variants#admin_index"
322
+ get "/admin/products/:product_id/variants/json" => "variants#admin_json"
323
+ get "/admin/products/:product_id/variants/sort-order" => "products#admin_edit_variant_sort_order"
324
+ put '/admin/products/:product_id/variants/option1-sort-order' => 'products#admin_update_option1_sort_order'
325
+ put '/admin/products/:product_id/variants/option2-sort-order' => 'products#admin_update_option2_sort_order'
326
+ put '/admin/products/:product_id/variants/option3-sort-order' => 'products#admin_update_option3_sort_order'
327
+ get "/admin/products/:product_id/variants/:variant_id/edit" => "variants#admin_edit"
328
+ put "/admin/products/:product_id/variants/:id/attach-to-image" => "variants#admin_attach_to_image"
329
+ put "/admin/products/:product_id/variants/:id/unattach-from-image" => "variants#admin_unattach_from_image"
330
+ put "/admin/products/:product_id/variants/:id" => "variants#admin_update"
331
+ get "/admin/products/:id/variants/new" => "variants#admin_new"
332
+ post "/admin/products/:id/variants" => "variants#admin_add"
333
+ delete "/admin/variants/:id" => "variants#admin_delete"
334
+ get "/admin/variants/status-options" => "variants#admin_status_options"
335
+
328
336
  get "/admin/products/:id/images" => "products#admin_edit_images"
329
337
  post "/admin/products/:id/images" => "products#admin_add_image"
330
338
  get "/admin/products/:id/collections" => "products#admin_edit_collections"
@@ -338,16 +346,6 @@ Caboose::Engine.routes.draw do
338
346
  delete "/admin/products/:id" => "products#admin_delete"
339
347
  put "/admin/products/:id/update-vendor" => "products#admin_update_vendor"
340
348
 
341
- get "/admin/products/:product_id/variants/:variant_id/edit" => "variants#admin_edit"
342
- get "/admin/variants/status-options" => "variants#admin_status_options"
343
- get "/admin/variants/:variant_id/edit" => "variants#admin_edit"
344
- put "/admin/variants/:id/attach-to-image" => "variants#admin_attach_to_image"
345
- put "/admin/variants/:id/unattach-from-image" => "variants#admin_unattach_from_image"
346
- put "/admin/variants/:id" => "variants#admin_update"
347
- get "/admin/products/:id/variants/new" => "variants#admin_new"
348
- post "/admin/products/:id/variants" => "variants#admin_add"
349
- delete "/admin/variants/:id" => "variants#admin_delete"
350
-
351
349
  get "/admin/stackable-groups/options" => "stackable_groups#admin_options"
352
350
  get "/admin/stackable-groups/json" => "stackable_groups#admin_json"
353
351
  get "/admin/stackable-groups/:id/json" => "stackable_groups#admin_json_single"
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.5.55'
2
+ VERSION = '0.5.56'
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.5.55
4
+ version: 0.5.56
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-12-05 00:00:00.000000000 Z
11
+ date: 2014-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -757,6 +757,7 @@ files:
757
757
  - app/views/caboose/products/admin_edit_variant_columns.html.erb
758
758
  - app/views/caboose/products/admin_edit_variant_sort_order.html.erb
759
759
  - app/views/caboose/products/admin_edit_variants.html.erb
760
+ - app/views/caboose/products/admin_edit_variants_old.html.erb
760
761
  - app/views/caboose/products/admin_edit_variants_single.html.erb
761
762
  - app/views/caboose/products/admin_group_variants.html.erb
762
763
  - app/views/caboose/products/admin_index.html.erb