caboose-cms 0.8.42 → 0.8.43

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2076b0bc20624465ba131782399551802f7cf86
4
- data.tar.gz: 52d9bcde7f99280c503324b0263d9d0160c9873a
3
+ metadata.gz: 18b283a8b96050980b4e8122571e7a867d425ffa
4
+ data.tar.gz: 1c331a70fc7ade2a2b6bb3f6157e9869460bda49
5
5
  SHA512:
6
- metadata.gz: 94899604fdbb18235561cbb3c4c73536ade2eaef9f2011e3d64d85a5ff3a184747cf96f018d3de325012cc2df2cba9fa2ea6404e2239dc891d381749d0093504
7
- data.tar.gz: de8e7140f72583285126504ce04239bb0507c2f7ac54c840a0ee75943204474c3d59a3c3384d2685f382c3b1d11a6197b5b4905b4564e05b5c0bd552a2ba21ec
6
+ metadata.gz: 04470cf22851378fcf5824f8e4e52bcc058c6c2e0e6d40054d615821d6ff509dea3a2fb68d77c07c298f5b9d5b95268b891253744b1b7479b111ec257ff8956c
7
+ data.tar.gz: 6b5960db73cbfa6957a70c24922e80666ba1c12456ec4e3e476279aa93f7c1df399db86b83c00ffa908791d597cca95d137fb5211d58c7e435c2c82147e0fb3f
@@ -0,0 +1,60 @@
1
+ // Inspired by base2 and Prototype
2
+ (function(){
3
+ var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
4
+
5
+ // The base Class implementation (does nothing)
6
+ this.Class = function(){};
7
+
8
+ // Create a new Class that inherits from this class
9
+ Class.extend = function(prop) {
10
+ var _super = this.prototype;
11
+
12
+ // Instantiate a base class (but only create the instance,
13
+ // don't run the init constructor)
14
+ initializing = true;
15
+ var prototype = new this();
16
+ initializing = false;
17
+
18
+ // Copy the properties over onto the new prototype
19
+ for (var name in prop) {
20
+ // Check if we're overwriting an existing function
21
+ prototype[name] = typeof prop[name] == "function" &&
22
+ typeof _super[name] == "function" && fnTest.test(prop[name]) ?
23
+ (function(name, fn){
24
+ return function() {
25
+ var tmp = this._super;
26
+
27
+ // Add a new ._super() method that is the same method
28
+ // but on the super-class
29
+ this._super = _super[name];
30
+
31
+ // The method only need to be bound temporarily, so we
32
+ // remove it when we're done executing
33
+ var ret = fn.apply(this, arguments);
34
+ this._super = tmp;
35
+
36
+ return ret;
37
+ };
38
+ })(name, prop[name]) :
39
+ prop[name];
40
+ }
41
+
42
+ // The dummy class constructor
43
+ function Class() {
44
+ // All construction is actually done in the init method
45
+ if ( !initializing && this.init )
46
+ this.init.apply(this, arguments);
47
+ }
48
+
49
+ // Populate our constructed prototype object
50
+ Class.prototype = prototype;
51
+
52
+ // Enforce the constructor to be what we expect
53
+ Class.constructor = Class;
54
+
55
+ // And make this class extendable
56
+ Class.extend = arguments.callee;
57
+
58
+ return Class;
59
+ };
60
+ })();
@@ -0,0 +1,403 @@
1
+
2
+ var ModalBlockController = ModalController.extend({
3
+
4
+ block_types: false,
5
+
6
+ init: function(options)
7
+ {
8
+ for (var thing in options)
9
+ this[thing] = options[thing];
10
+
11
+ //this.set_block_type_editable();
12
+ this.set_block_value_editable(this.block);
13
+ this.set_child_blocks_editable();
14
+ this.set_clickable();
15
+
16
+ that.update_on_close = false;
17
+ $.each(that.block.children, function(i, b) {
18
+ if (b.block_type.field_type == 'image' || b.block_type.field_type == 'file')
19
+ that.update_on_close = true
20
+ });
21
+
22
+ },
23
+
24
+ base_url: function(b)
25
+ {
26
+ return '/admin/' + (b.page_id ? 'pages/' + b.page_id : 'posts/' + b.post_id) + '/blocks';
27
+ },
28
+
29
+ block_url: function(b)
30
+ {
31
+ return this.base_url(b) + '/' + b.id;
32
+ },
33
+
34
+ edit_block: function(block_id)
35
+ {
36
+ window.location = this.base_url(this.block) + '/' + block_id + '/edit';
37
+ },
38
+
39
+ /*****************************************************************************
40
+ Printing
41
+ *****************************************************************************/
42
+
43
+ crumbtrail: function()
44
+ {
45
+ var crumbs = $('<h2/>').css('margin-top', '0').css('padding-top', '0');
46
+ var b = that.block;
47
+ while (b)
48
+ {
49
+ var href = b.id == that.block_id ? "#" : that.base_url + '/' + b.id;
50
+ var text = b.block_type.description + (b.name ? ' (' + b.name + ')' : '');
51
+ crumbs.prepend($('<a/>').attr('href', href).html(text));
52
+ b = b.parent
53
+ if (b) crumbs.prepend(' > ');
54
+ }
55
+ return crumbs;
56
+ },
57
+
58
+ print: function()
59
+ {
60
+ var that = this;
61
+
62
+ if (!that.block)
63
+ {
64
+ var div = $('<div/>')
65
+ .append($('<div/>').attr('id', 'crumbtrail'))
66
+ .append($('<div/>').attr('id', 'modal_content'));
67
+ .append($('<div/>').attr('id', 'modal_message'));
68
+ .append($('<p/>')
69
+ .append($('<input/>').attr('type', 'button').val('Close').click(function() {
70
+ if (that.update_on_close)
71
+ parent_controller.render_blocks();
72
+ that.close();
73
+ }))
74
+ <% if @block.name.nil? %>
75
+ <input type='button' value='Delete Block' onclick="controller.delete_block();" />
76
+ <% end %>
77
+ <input type='button' value='Move Up' onclick="controller.move_up();" />
78
+ <input type='button' value='Move Down' onclick="controller.move_down();" />
79
+ <input type='button' value='Advanced' onclick="window.location='<%= raw base_url %>/<%= @block.id %>/advanced';" />
80
+ </p>
81
+
82
+ that.modal(div, 800);
83
+ that.refresh(function() { that.print(); });
84
+ return;
85
+ }
86
+
87
+ var div = $('<div/>');
88
+
89
+ if (that.block.block_type.field_type != 'block')
90
+ div.append($('<p/>').append($('<div/>').attr('id', 'block_' + that.block.id + '_value')));
91
+ else
92
+ {
93
+ if (that.block.children.length > 0)
94
+ {
95
+ $.each(that.block.children, function(i, b) {
96
+ if (b.block_type.field_type != 'block' && b.block_type.field_type != 'richtext' && b.block_type.field_type != 'image' && b.block_type.field_type != 'file')
97
+ div.append($('<div/>').css('margin-bottom', '10px').append($('<div/>').attr('id', 'block_' + b.id + '_value')));
98
+ else
99
+ div.append(b.rendered_value);
100
+ });
101
+ }
102
+ else
103
+ {
104
+ div.append($('<p/>').append("This block doesn't have any content yet."));
105
+ }
106
+ if (that.block.block_type.allow_child_blocks)
107
+ {
108
+ div.append($('<p/>').append($('<a/>').attr('href', '#').html("Add a child block!").click(function(e) {
109
+ e.preventDefault();
110
+ that.add_child_block();
111
+ })));
112
+ }
113
+ }
114
+ div.append($('<div/>').
115
+
116
+
117
+
118
+
119
+ <% content_for :caboose_css do %>
120
+ <style type='text/css'>
121
+ .block { border: #ccc 1px dotted; }
122
+ #block_<%= @block.id %>_block_type_id_container { }
123
+ #modal_content .checkbox_multiple input[type=checkbox] { position: relative !important; }
124
+ </style>
125
+ <% end %>
126
+ <% content_for :caboose_js do %>
127
+ <%= javascript_include_tag "caboose/model/all" %>
128
+ <%= javascript_include_tag "caboose/admin_block_edit" %>
129
+ <script type='text/javascript'>
130
+
131
+ var modal = false;
132
+ $(window).load(function() {
133
+ keep_modal_autosized();
134
+ });
135
+
136
+ var autosize_count = 0;
137
+ function keep_modal_autosized()
138
+ {
139
+ if (autosize_count > 3) return;
140
+ if (modal) modal.autosize();
141
+ else modal = new CabooseModal(800);
142
+ autosize_count = autosize_count + 1;
143
+ setTimeout(function() { keep_modal_autosized(); }, 1000);
144
+ }
145
+
146
+
147
+
148
+ },
149
+
150
+ /*****************************************************************************
151
+ Block Rendering
152
+ *****************************************************************************/
153
+
154
+ set_clickable: function()
155
+ {
156
+ var that = this;
157
+ $.ajax({
158
+ url: that.base_url(that.block) + '/tree',
159
+ success: function(blocks) {
160
+ $(blocks).each(function(i,b) {
161
+ that.set_clickable_helper(b);
162
+ });
163
+ }
164
+ });
165
+ },
166
+
167
+ set_clickable_helper: function(b)
168
+ {
169
+ var that = this;
170
+ $('#block_' + b.id).attr('onclick','').unbind('click');
171
+ $('#block_' + b.id).click(function(e) {
172
+ e.stopPropagation();
173
+ that.edit_block(b.id);
174
+ });
175
+ if (b.allow_child_blocks == true)
176
+ {
177
+ $('#new_block_' + b.id).replaceWith($('<input/>')
178
+ .attr('type', 'button')
179
+ .val('New Block')
180
+ .click(function(e) { e.stopPropagation(); that.new_block(b.id);
181
+ })
182
+ );
183
+ }
184
+ var show_mouseover = true;
185
+ if (b.children && b.children.length > 0)
186
+ {
187
+ $.each(b.children, function(i, b2) {
188
+ if (b2.block_type_id = 34)
189
+ show_mouseover = false;
190
+ that.set_clickable_helper(b2);
191
+ });
192
+ }
193
+ if (show_mouseover)
194
+ {
195
+ $('#block_' + b.id).mouseover(function(el) { $('#block_' + b.id).addClass( 'block_over'); });
196
+ $('#block_' + b.id).mouseout(function(el) { $('#block_' + b.id).removeClass('block_over'); });
197
+ }
198
+ },
199
+
200
+ /****************************************************************************/
201
+
202
+ //set_block_type_editable: function()
203
+ //{
204
+ // var that = this;
205
+ // var b = this.block;
206
+ // m = new ModelBinder({
207
+ // name: 'Block',
208
+ // id: b.id,
209
+ // update_url: '/admin/pages/' + b.page_id + '/blocks/' + b.id,
210
+ // authenticity_token: that.authenticity_token,
211
+ // attributes: [{
212
+ // name: 'block_type_id',
213
+ // nice_name: 'Block type',
214
+ // type: 'select',
215
+ // value: b.block_type_id,
216
+ // text: b.block_type.name,
217
+ // width: 400,
218
+ // fixed_placeholder: true,
219
+ // options_url: '/admin/block-types/options',
220
+ // after_update: function() { parent.controller.render_blocks(); window.location.reload(true); },
221
+ // after_cancel: function() { parent.controller.render_blocks(); window.location.reload(true); },
222
+ // on_load: function() { that.modal.autosize(); }
223
+ // },{
224
+ // name: 'parent_id',
225
+ // nice_name: 'Parent ID',
226
+ // type: 'select',
227
+ // value: b.parent_id,
228
+ // text: b.parent_title,
229
+ // width: 400,
230
+ // fixed_placeholder: true,
231
+ // options_url: '/admin/pages/' + b.page_id + '/block-options',
232
+ // after_update: function() { parent.controller.render_blocks(); },
233
+ // after_cancel: function() { parent.controller.render_blocks(); },
234
+ // on_load: function() { that.modal.autosize(); }
235
+ // }]
236
+ // });
237
+ // $('#advanced').hide();
238
+ //},
239
+
240
+ set_block_value_editable: function(b)
241
+ {
242
+ var that = this;
243
+ var bt = b.block_type;
244
+ if (b.block_type.field_type == 'block')
245
+ return;
246
+
247
+ var h = {
248
+ name: 'value',
249
+ type: bt.field_type,
250
+ nice_name: bt.description ? bt.description : bt.name,
251
+ width: bt.width ? bt.width : 780,
252
+ after_update: function() { parent.controller.render_blocks(); },
253
+ after_cancel: function() { parent.controller.render_blocks(); }
254
+ };
255
+ h['value'] = b.value
256
+ if (bt.field_type == 'checkbox') h['value'] = b.value ? 'true' : 'false';
257
+ if (bt.field_type == 'image') h['value'] = b.image.tiny_url;
258
+ if (bt.field_type == 'file') h['value'] = b.image.url;
259
+ if (bt.field_type == 'select') h['text'] = b.value;
260
+ if (bt.height) h['height'] = bt.height;
261
+ if (bt.fixed_placeholder) h['fixed_placeholder'] = bt.fixed_placeholder;
262
+ if (bt.options || bt.options_function) h['options_url'] = '/admin/block-types/' + bt.id + '/options';
263
+ else if (bt.options_url) h['options_url'] = bt.options_url;
264
+ if (bt.field_type == 'file') h['update_url'] = that.block_url(b) + '/file';
265
+ if (bt.field_type == 'image')
266
+ {
267
+ h['update_url'] = that.block_url(b) + '/image'
268
+ h['image_refresh_delay'] = 100;
269
+ }
270
+
271
+ m = new ModelBinder({
272
+ name: 'Block',
273
+ id: b.id,
274
+ update_url: that.block_url(b),
275
+ authenticity_token: that.authenticity_token,
276
+ attributes: [h]
277
+ });
278
+ },
279
+
280
+ set_child_blocks_editable: function()
281
+ {
282
+ var that = this;
283
+ $.each(this.block.children, function(i, b) {
284
+ var bt = b.block_type;
285
+ if (bt.field_type == 'block' || bt.field_type == 'richtext')
286
+ {
287
+ //$('#block_' + b.id).attr('onclick','').unbind('click');
288
+ //$('#block_' + b.id).click(function(e) {
289
+ // window.location = '/admin/pages/' + b.page_id + '/blocks/' + b.id + '/edit';
290
+ //});
291
+ }
292
+ else
293
+ that.set_block_value_editable(b);
294
+ });
295
+ },
296
+
297
+ add_child_block: function(block_type_id)
298
+ {
299
+ var that = this;
300
+ if (!this.block_types)
301
+ {
302
+ modal.autosize("<p class='loading'>Getting block types...</p>");
303
+ $.ajax({
304
+ url: '/admin/block-types/options',
305
+ type: 'get',
306
+ success: function(resp) {
307
+ that.block_types = resp;
308
+ that.add_child_block();
309
+ }
310
+ });
311
+ return;
312
+ }
313
+ if (!block_type_id)
314
+ {
315
+ var select = $('<select/>').attr('id', 'new_block_type_id');
316
+ $.each(this.block_types, function(i, bt) {
317
+ var opt = $('<option/>').val(bt.value).html(bt.text);
318
+ select.append(opt);
319
+ });
320
+ var p = $('<p/>').addClass('note warning')
321
+ .append("Select a type of page block: ")
322
+ .append(select)
323
+ .append("<br/>")
324
+ .append($('<input/>').attr('type','button').val('Confirm Add Block').click(function() { that.add_child_block($('#new_block_type_id').val()) })).append(' ')
325
+ .append($('<input/>').attr('type','button').val('Cancel').click(function() { $('#message').empty(); modal.autosize(); }));
326
+ modal.autosize(p);
327
+ return;
328
+ }
329
+ modal.autosize("<p class='loading'>Adding block...</p>");
330
+ $.ajax({
331
+ url: that.block_url(block),
332
+ type: 'post',
333
+ data: { block_type_id: block_type_id },
334
+ success: function(resp) {
335
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
336
+ if (resp.block) window.location.reload(true);
337
+ }
338
+ });
339
+ },
340
+
341
+ delete_block: function(confirm)
342
+ {
343
+ var that = this;
344
+ if (!confirm)
345
+ {
346
+ var p = $('<p/>').addClass('note warning')
347
+ .append("Are you sure you want to delete the block? This can't be undone.<br />")
348
+ .append($('<input/>').attr('type','button').val('Yes').click(function() { that.delete_block(true); })).append(' ')
349
+ .append($('<input/>').attr('type','button').val('No').click(function() { $('#message').empty(); modal.autosize(); }));
350
+ modal.autosize(p);
351
+ return;
352
+ }
353
+ modal.autosize("<p class='loading'>Deleting block...</p>");
354
+ $.ajax({
355
+ url: that.block_url(that.block),
356
+ type: 'delete',
357
+ success: function(resp) {
358
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
359
+ if (resp.redirect)
360
+ {
361
+ parent.controller.render_blocks();
362
+ modal.close();
363
+ }
364
+ }
365
+ });
366
+ },
367
+
368
+ move_up: function()
369
+ {
370
+ var that = this;
371
+ modal.autosize("<p class='loading'>Moving up...</p>");
372
+ $.ajax({
373
+ url: that.block_url(that.block) + '/move-up',
374
+ type: 'put',
375
+ success: function(resp) {
376
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
377
+ if (resp.success)
378
+ {
379
+ modal.autosize("<p class='note success'>" + resp.success + "</p>");
380
+ parent.controller.render_blocks();
381
+ }
382
+ }
383
+ });
384
+ },
385
+
386
+ move_down: function()
387
+ {
388
+ var that = this;
389
+ modal.autosize("<p class='loading'>Moving down...</p>");
390
+ $.ajax({
391
+ url: that.block_url(that.block) + '/move-down',
392
+ type: 'put',
393
+ success: function(resp) {
394
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
395
+ if (resp.success)
396
+ {
397
+ modal.autosize("<p class='note success'>" + resp.success + "</p>");
398
+ parent.controller.render_blocks();
399
+ }
400
+ }
401
+ });
402
+ }
403
+ };
@@ -0,0 +1,60 @@
1
+
2
+ var ModalButtonController = ModalController.extend({
3
+
4
+ print: function()
5
+ {
6
+ var that = this;
7
+
8
+ if (!that.block)
9
+ {
10
+ var div = $('<div/>')
11
+ .append($('<div/>').attr('id', 'modal_content'))
12
+ .append($('<div/>').attr('id', 'modal_message').html("<p class='loading'>Getting block...</p>"))
13
+ .append($('<p/>').append($('<input/>').attr('type', 'button').addClass('btn').val('Close').click(function(e) { $.colorbox.close(); })));
14
+ that.modal(div, 500, 200);
15
+ that.refresh(function() { that.print(); });
16
+ return;
17
+ }
18
+
19
+ var block_ids = {};
20
+ $.each(that.block.children, function(i, b) {
21
+ block_ids[b.name] = b.id;
22
+ });
23
+
24
+ $('#modal_content').empty()
25
+ .append($('<h2/>').append('Edit Button'))
26
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['text' ] + '_text' )))
27
+ .append($('<p/>').append("Where do you want your button to go?"))
28
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['url' ] + '_url' )))
29
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['file' ] + '_file' )))
30
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['target' ] + '_target' )))
31
+ .append($('<p/>').append("Options"))
32
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['align' ] + '_align' )))
33
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['color' ] + '_color' )))
34
+ .append($('<p/>').append($('<div/>').attr('id', 'block_' + block_ids['margin' ] + '_margin' )));
35
+ $('#modal_message').empty();
36
+ that.autosize();
37
+
38
+ $.each(that.block.children, function(i, b) {
39
+ var attribs = [];
40
+ if (b.name == 'text' ) attribs.push({ name: 'text' , nice_name: 'Button Text' , type: 'text' , value: that.block.text , width: 500 });
41
+ if (b.name == 'url' ) attribs.push({ name: 'url' , nice_name: 'URL' , type: 'text' , value: that.block.url , width: 500 });
42
+ if (b.name == 'file' ) attribs.push({ name: 'file' , nice_name: 'File' , type: 'text' , value: that.block.file , width: 500 });
43
+ if (b.name == 'align' ) attribs.push({ name: 'align' , nice_name: 'Align' , type: 'select' , value: that.block.align , width: 500 , options_url: '/admin/block-types/' + b.block_type_id + '/options' });
44
+ if (b.name == 'color' ) attribs.push({ name: 'color' , nice_name: 'Color' , type: 'select' , value: that.block.color , width: 500 , options_url: '/admin/block-types/' + b.block_type_id + '/options' });
45
+ if (b.name == 'margin' ) attribs.push({ name: 'margin' , nice_name: 'Margin' , type: 'select' , value: that.block.margin , width: 500 , options_url: '/admin/block-types/' + b.block_type_id + '/options' });
46
+ if (b.name == 'target' ) attribs.push({ name: 'target' , nice_name: 'Open in New Window?', type: 'checkbox' , value: that.block.target == 'New Window' ? 1 : 0 , width: 500 });
47
+
48
+ new ModelBinder({
49
+ name: 'Block',
50
+ id: b.id,
51
+ update_url: '/admin/pages/' + that.page_id + '/blocks/' + b.id,
52
+ authenticity_token: that.authenticity_token,
53
+ attributes: attribs,
54
+ on_load: function() { that.autosize(); }
55
+ });
56
+ setTimeout(function() { that.autosize(); }, 2000);
57
+ });
58
+ }
59
+
60
+ });
@@ -0,0 +1,69 @@
1
+
2
+ var ModalController = Class.extend({
3
+
4
+ page_id: false,
5
+ block_id: false,
6
+ block: false,
7
+ modal_element: false,
8
+ authenticity_token: false,
9
+
10
+ init: function(params) {
11
+ var that = this;
12
+ for (var i in params)
13
+ that[i] = params[i];
14
+ that.print();
15
+ },
16
+
17
+ refresh: function(callback)
18
+ {
19
+ var that = this
20
+ $.ajax({
21
+ url: '/admin/pages/' + that.page_id + '/blocks/' + that.block_id + '/tree',
22
+ type: 'get',
23
+ success: function(arr) {
24
+ that.block = arr[0];
25
+ if (callback) callback();
26
+ }
27
+ });
28
+ },
29
+
30
+ modal: function(el, width, height, callback)
31
+ {
32
+ var that = this;
33
+ if (!width) width = 400;
34
+ if (!height) height = $(el).outerHeight(true);
35
+ that.modal_element = el;
36
+ el.attr('id', 'the_modal').addClass('modal').css('width', '' + width + 'px');
37
+ $.colorbox({
38
+ html: el,
39
+ initialWidth: width,
40
+ initialHeight: height,
41
+ innerWidth: width,
42
+ innerHeight: height,
43
+ scrolling: false,
44
+ closeButton: false,
45
+ opacity: 0.50,
46
+ onComplete: function() {
47
+ var arr = ['TopLeft','TopCenter','TopRight','BottomLeft','BottomCenter','BottomRight','MiddleLeft','MiddleRight'];
48
+ for (var i in arr) $('#cbox' + arr[i]).css('background-color', '#fff !important');
49
+ $("#cboxClose").hide();
50
+ if (callback) callback();
51
+ }
52
+ });
53
+ },
54
+
55
+ autosize: function(msg, msg_container)
56
+ {
57
+ var that = this;
58
+ if (!that.modal_element) return;
59
+ if (msg) $('#' + (msg_container ? msg_container : 'modal_message')).html(msg);
60
+ var h = $(that.modal_element).outerHeight(true) + 20;
61
+ $.colorbox.resize({ innerHeight: '' + h + 'px' });
62
+ },
63
+
64
+ close: function()
65
+ {
66
+ $.colorbox.close();
67
+ }
68
+
69
+ });
@@ -0,0 +1,17 @@
1
+
2
+ #the_modal {
3
+ box-sizing: content-box; /* border-box */
4
+ }
5
+
6
+ #modal_content p { margin-bottom: 10px; }
7
+
8
+ #modal_content .mb_container input { border: #ccc 1px solid; }
9
+
10
+ #modal_content div.mb_container div.mb_placeholder { top: 9px; }
11
+ #modal_content div.mb_container div.mb_placeholder span { font-size: 16px; }
12
+
13
+ #modal_content div.mb_container select { border: #ccc 1px solid; height: 36px; }
14
+ #modal_content div.mb_container select option { font-size: 16px; }
15
+
16
+ #modal_content div.mb_container input[type=checkbox] { top: 12px; }
17
+
@@ -8,12 +8,13 @@ module Caboose
8
8
  end
9
9
 
10
10
  def self.tax(invoice)
11
+ sc = invoice.site.store_config
12
+ return self.custom_tax(sc, invoice) if !sc.auto_calculate_tax
13
+
11
14
  return 0.00 if !invoice.shipping_address
12
15
  return 0.00 if !invoice.has_taxable_items?
13
16
  return 0.00 if !invoice.has_shippable_items?
14
17
 
15
- sc = invoice.site.store_config
16
- return self.custom_tax(sc, invoice) if !sc.auto_calculate_tax
17
18
  return invoice.subtotal * invoice.tax_rate if invoice.tax_rate # See if the tax rate has already been calculated
18
19
 
19
20
  t = self.transaction(invoice)
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.8.42'
2
+ VERSION = '0.8.43'
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.8.42
4
+ version: 0.8.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-16 00:00:00.000000000 Z
11
+ date: 2016-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -544,6 +544,7 @@ files:
544
544
  - app/assets/javascripts/caboose/checkout_payment_authnet.js
545
545
  - app/assets/javascripts/caboose/checkout_payment_stripe.js
546
546
  - app/assets/javascripts/caboose/checkout_shipping.js
547
+ - app/assets/javascripts/caboose/class.js
547
548
  - app/assets/javascripts/caboose/date_format.js
548
549
  - app/assets/javascripts/caboose/google_spreadsheets.js
549
550
  - app/assets/javascripts/caboose/imageZoom.js
@@ -560,6 +561,9 @@ files:
560
561
  - app/assets/javascripts/caboose/main.js
561
562
  - app/assets/javascripts/caboose/media_browser.js
562
563
  - app/assets/javascripts/caboose/modal.js
564
+ - app/assets/javascripts/caboose/modal_controllers/modal_block_controller.js
565
+ - app/assets/javascripts/caboose/modal_controllers/modal_button_controller.js
566
+ - app/assets/javascripts/caboose/modal_controllers/modal_controller.js
563
567
  - app/assets/javascripts/caboose/modal_integration.js
564
568
  - app/assets/javascripts/caboose/model.form.page.js
565
569
  - app/assets/javascripts/caboose/model.form.user.js
@@ -700,6 +704,7 @@ files:
700
704
  - app/assets/stylesheets/caboose/login.css
701
705
  - app/assets/stylesheets/caboose/message_boxes.css.scss
702
706
  - app/assets/stylesheets/caboose/modal.css
707
+ - app/assets/stylesheets/caboose/modal_inline.css
703
708
  - app/assets/stylesheets/caboose/modal_main.css
704
709
  - app/assets/stylesheets/caboose/model_binder.css
705
710
  - app/assets/stylesheets/caboose/my_account.css