caboose-cms 0.4.92 → 0.4.93

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
- NjViNTc2NTVlNTk0MjE5NjJhY2ZiM2QwOGY5YWEzYjkwZDA4YzBkMw==
4
+ OGRlMzYwYTY4ZjJmNzc1YWU4NzYwNWQ1YmUyMGUyNDUzNTlkMTBlMg==
5
5
  data.tar.gz: !binary |-
6
- NmI5NTUzY2VjNzY0OWMzZDYwNWY3Nzk3MDM1ZjE0MGQyZjJiMTkyOA==
6
+ OTRiZDg5MWY4ZGYyYTY5MjkzZTExNTljYjE3MTBmNTAxMGYyNjczMQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YWEzZDY3NWJkZWI5MDkxN2E5ODZjNTJhMjFhMmJjNDMwNmI0OTIwMmNlNmQx
10
- ZWVjZTMwOTYyZDhmZTAyMDFmN2M1NzQxOGU3NTNlNTYwZGFmODZkMTkzYWUy
11
- ZjAzM2ZmMmNhZDE1NWI3ZjE0MDlhMTk1MDcxMDQ4N2UxNTliOTY=
9
+ MDNkZjJiMmZlNTNjODRiNTdkMmUzNzA3ZjZhNzA5MGRmYmIwYWRjY2Y0ZGNj
10
+ NzMxNTYxN2M0ZmY0ZGFjNTliOGE4ZGM0YTRlZjhkOWE2NzYxODIzNmZmMGI1
11
+ NDA0NTZjMWQ0NmFjYWI1ZDUxOWI1ODBlNzg3Mzk3YzRlMzM1ZjU=
12
12
  data.tar.gz: !binary |-
13
- OTE1OTQ0ZTczYTA5ZDI4MTFkYWEyZTQ1ZWVjMmNkOGQ1NjFkNzkwYTcxOThk
14
- MmRiOWM5Y2EzYWQ5OGY1NmZiZjYyZGQ4NDIzMTFjYzI3NDRkNzA1MGI1Mjcx
15
- N2Y3NDcyYjViZTYxNGQ3MGZlYWZlNzY0YzUwNGZlZmZmYmNlZDk=
13
+ Yjg5NjgxYjVmODkyNTA4NzhlYTVlZmJiY2E1NjgxOGRhMmRkYjhkMDQzNGQy
14
+ MDI4ZmE0Y2VlNjc1MDU3YWZmNmYxYWU2YmRjYTM0N2NmOTkzZDk5ODFkMTNm
15
+ MDJhZWQ5YjRjZTI1ZDM4OTBiZGQwMGMzZmI5NGQ0ODEzMzhmODk=
@@ -6,6 +6,8 @@
6
6
  //= require caboose/model/bound_control
7
7
  //= require caboose/model/bound_checkbox
8
8
  //= require caboose/model/bound_checkbox_multiple
9
+ //= require caboose/model/bound_date
10
+ //= require caboose/model/bound_time
9
11
  //= require caboose/model/bound_image
10
12
  //= require caboose/model/bound_s3_image
11
13
  //= require caboose/model/bound_file
@@ -25,6 +25,8 @@ Attribute.prototype = {
25
25
  download_text: false,
26
26
  upload_text: false,
27
27
  image_refresh_delay: false,
28
+ minute_increment: 15,
29
+ hour_increment: 1,
28
30
 
29
31
  update_url: false,
30
32
  options_url: false,
@@ -0,0 +1,119 @@
1
+
2
+ BoundDate = BoundControl.extend({
3
+
4
+ //el: false,
5
+ //model: false,
6
+ //attribute: false,
7
+ //binder: false,
8
+
9
+ width: false,
10
+ save_attempts: 0,
11
+
12
+ init: function(params) {
13
+ for (var thing in params)
14
+ this[thing] = params[thing];
15
+
16
+ this.el = this.el ? this.el : this.model.name.toLowerCase() + '_' + this.model.id + '_' + this.attribute.name;
17
+ $('#'+this.el).wrap($('<div/>')
18
+ .attr('id', this.el + '_container')
19
+ .addClass('mb_container')
20
+ .css('position', 'relative')
21
+ );
22
+ $('#'+this.el+'_container').empty();
23
+ $('#'+this.el+'_container').append($('<input/>')
24
+ .attr('id', this.el)
25
+ .attr('type', 'text')
26
+ .attr('placeholder', this.attribute.fixed_placeholder ? 'empty' : this.attribute.nice_name)
27
+ .css('text-align', this.attribute.align)
28
+ .val(this.attribute.value)
29
+ );
30
+
31
+ if (this.attribute.fixed_placeholder)
32
+ $('#'+this.el+'_container').append($('<div/>').attr('id', this.el + '_placeholder').addClass('mb_placeholder').append($('<span/>').html(this.attribute.nice_name + ': ')));
33
+ if (this.attribute.width) $('#'+this.el).css('width' , this.attribute.width);
34
+ if (this.attribute.fixed_placeholder)
35
+ {
36
+ var w = $('#'+this.el+'_placeholder').outerWidth();
37
+ $('#'+this.el).attr('placeholder', 'empty').css('padding-left', '+=' + w).css('width', '-=' + w);
38
+ }
39
+
40
+ var this2 = this;
41
+ $('#'+this.el).on('keyup', function(e) {
42
+ if (e.keyCode == 27) this2.cancel(); // Escape
43
+ if (e.keyCode == 13) this2.save(); // Enter
44
+
45
+ if ($('#'+this2.el).val() != this2.attribute.value_clean)
46
+ $('#'+this2.el).addClass('mb_dirty');
47
+ else
48
+ $('#'+this2.el).removeClass('mb_dirty');
49
+ });
50
+ $('#'+this.el).on('blur', function() {
51
+ if (this2.save_attempts < 1)
52
+ {
53
+ this2.save_attempts++;
54
+ this2.save();
55
+ }
56
+ });
57
+ $('#'+this.el).css('z-index', 21);
58
+ $('#'+this.el).css('position', 'relative');
59
+ $('#'+this.el).css('background', 'transparent');
60
+ $('#'+this.el).datepicker({
61
+ onSelect: function() { this2.save(); }
62
+ });
63
+ },
64
+
65
+ save: function() {
66
+ this.attribute.value = $('#'+this.el).val();
67
+ if (this.attribute.value == this.attribute.value_clean)
68
+ return;
69
+
70
+ this.show_loader();
71
+ var this2 = this;
72
+
73
+ this.model.save(this.attribute, function(resp) {
74
+ this2.save_attempts = 0;
75
+ if (resp.error)
76
+ {
77
+ this2.hide_loader();
78
+ this2.error(resp.error);
79
+ }
80
+ else
81
+ {
82
+ this2.show_check(500);
83
+ $('#'+this2.el).val(this2.attribute.value);
84
+ $('#'+this2.el).removeClass('mb_dirty');
85
+
86
+ if (this2.binder.success)
87
+ this2.binder.success(this2);
88
+ }
89
+ });
90
+ },
91
+
92
+ cancel: function() {
93
+ if (this.attribute.before_cancel) this.attribute.before_cancel();
94
+ this.attribute.value = this.attribute.value_clean;
95
+ $('#'+this.el).val(this.attribute.value);
96
+ $('#'+this.el).removeClass('mb_dirty');
97
+
98
+ if ($('#'+this.el+'_check').length)
99
+ this.hide_check();
100
+
101
+ if (this.attribute.after_cancel) this.attribute.after_cancel();
102
+ },
103
+
104
+ error: function(str) {
105
+ if (!$('#'+this.el+'_message').length)
106
+ {
107
+ $('#'+this.el+'_container').append($('<div/>')
108
+ .attr('id', this.el + '_message')
109
+ .css('width', $('#'+this.el).outerWidth())
110
+ );
111
+ }
112
+ $('#'+this.el+'_message').hide();
113
+ $('#'+this.el+'_message').html("<p class='note error'>" + str + "</p>");
114
+ $('#'+this.el+'_message').slideDown();
115
+ var this2 = this;
116
+ setTimeout(function() { $('#'+this2.el+'_message').slideUp(function() { $(this).empty(); }); }, 3000);
117
+ }
118
+
119
+ });
@@ -20,6 +20,7 @@ BoundRichText = BoundControl.extend({
20
20
  .css('position', 'relative')
21
21
  );
22
22
  $('#'+this.el+'_container').empty();
23
+ $('#'+this.el+'_container').append($('<div/>').attr('id', this.el + '_message'));
23
24
  $('#'+this.el+'_container').append($('<textarea/>').attr('id', this.el).attr('class', 'tinymce').attr('placeholder', 'empty').val(this.attribute.value));
24
25
  //$('#'+this.el+'_container').append($('<div/>').attr('id', this.el + '_placeholder').addClass('placeholder').append($('<span/>').html(this.attribute.nice_name + ': ')));
25
26
  if (this.attribute.width) $('#'+this.el).css('width' , this.attribute.width);
@@ -28,67 +29,49 @@ BoundRichText = BoundControl.extend({
28
29
  $('#'+this.el).attr('placeholder', 'empty').css('padding-top', '+=' + h).css('height', '-=' + h);
29
30
 
30
31
  var this2 = this;
31
- //$('#'+this.el).on('keyup', function(e) {
32
- // if (e.keyCode == 27) this2.cancel(); // Escape
33
- // //if (e.keyCode == 13) this2.save(); // Enter
34
- //
35
- // if ($('#'+this2.el).val() != this2.attribute.value_clean)
36
- // $('#'+this2.el).addClass('dirty');
37
- // else
38
- // $('#'+this2.el).removeClass('dirty');
39
- //});
40
32
 
41
33
  setTimeout(function() {
42
- tinymce.execCommand("mceAddEditor", false, this2.el);
34
+ //tinymce.execCommand("mceAddEditor", false, this2.el);
43
35
  var ed = tinymce.EditorManager.createEditor(this2.el);
44
-
45
- //var ed = tinymce.EditorManager.get(this2.el);
46
- //if (!ed)
47
- //{
48
- // tinymce.execCommand("mceAddEditor", false, this2.el);
49
- // ed = tinymce.EditorManager.createEditor(this2.el);
50
- //}
51
-
52
- //ed.on('blur', function(e) { this2.save(); });
53
- //ed.on('keyup', function(e) {
54
- // tinymce.triggerSave();
55
- // if (e.keyCode == 27) this2.cancel(); // Escape
56
- // if ($('#'+this2.el).val() != this2.attribute.value_clean)
57
- // ed.getBody().style.backgroundColor = "#fff799";
58
- // else
59
- // ed.getBody().style.backgroundColor = "#fff";
60
- //});
36
+ //var ed = new tinymce.Editor(this2.el, {
37
+ // setup: function (editor) {
38
+ // editor.on('init', function (e) { alert('Test'); });
39
+ // }
40
+ // }, tinymce.Editormanager);
41
+ //editor.on('init', function (e) { alert('Test'); });
42
+ //ed.on('NodeChange', this2.tinymce_change);
43
+ //ed.on('click', function(e) { alert('tinymce was clicked'); });
44
+ //ed.render();
61
45
  }, 100);
62
46
  },
63
47
 
48
+ tinymce_change: function(ed) {
49
+ if (ed.getContent() == this.attribute.value_clean)
50
+ ed.getBody().style.backgroundColor = "#fff";
51
+ else
52
+ ed.getBody().style.backgroundColor = "#fff799";
53
+ },
54
+
64
55
  save: function() {
65
56
  var ed = tinymce.activeEditor;
66
- el = ed.getElement();
67
- $(el).val(ed.getContent());
68
-
69
- //ed.remove();
70
- //tinymce.triggerSave();
57
+ $('#'+this.el).val(ed.getContent());
71
58
 
72
59
  this.attribute.value = $('#'+this.el).val();
73
60
  if (this.attribute.value == this.attribute.value_clean)
74
- return;
75
-
61
+ return;
62
+
76
63
  var this2 = this;
77
- this.model.save(this.attribute, function(resp) {
64
+ this.model.save(this.attribute, function(resp) {
78
65
  if (resp.error)
79
- {
80
- this2.hide_loader();
81
- this2.error(resp.error);
66
+ {
67
+ alert(resp.error);
82
68
  }
83
69
  else
84
- {
85
- tinymce.activeEditor.remove();
86
- this2.show_check(500);
70
+ {
87
71
  $('#'+this2.el).val(this2.attribute.value);
88
- $('#'+this2.el).removeClass('mb_dirty');
89
- //var ed = tinymce.EditorManager.get(this2.el);
90
- //ed.getBody().style.backgroundColor = "#fff";
91
-
72
+ ed.setContent(this2.attribute.value);
73
+ ed.getBody().style.backgroundColor = "#fff";
74
+
92
75
  if (this2.binder.success)
93
76
  this2.binder.success(this2);
94
77
  }
@@ -96,16 +79,15 @@ BoundRichText = BoundControl.extend({
96
79
  },
97
80
 
98
81
  cancel: function() {
99
- if (this.attribute.before_cancel) this.attribute.before_cancel();
82
+ if (this.attribute.before_cancel)
83
+ this.attribute.before_cancel();
84
+
100
85
  this.attribute.value = this.attribute.value_clean;
101
86
  $('#'+this.el).val(this.attribute.value);
102
- $('#'+this.el).removeClass('mb_dirty');
103
-
104
- if ($('#'+this.el+'_check').length)
105
- this.hide_check();
106
-
107
- tinymce.activeEditor.remove();
108
- if (this.attribute.after_cancel) this.attribute.after_cancel();
87
+
88
+ var ed = tinymce.activeEditor;
89
+ ed.setContent(this.attribute.value);
90
+ ed.getBody().style.backgroundColor = "#fff";
109
91
  },
110
92
 
111
93
  error: function(str) {
@@ -0,0 +1,177 @@
1
+
2
+ BoundTime = BoundControl.extend({
3
+
4
+ //el: false,
5
+ //model: false,
6
+ //attribute: false,
7
+ //binder: false,
8
+
9
+ message: false,
10
+ placeholder: false,
11
+
12
+ init: function(params) {
13
+ for (var thing in params)
14
+ this[thing] = params[thing];
15
+
16
+ this.el = this.el ? this.el : this.model.name.toLowerCase() + '_' + this.model.id + '_' + this.attribute.name;
17
+ this.message = this.el + '_message';
18
+ this.placeholder = this.el + '_placeholder';
19
+
20
+ $('#'+this.el).wrap($('<div/>')
21
+ .attr('id', this.el + '_container')
22
+ .addClass('mb_container')
23
+ .css('position', 'relative')
24
+ );
25
+ $('#'+this.el+'_container').empty();
26
+ if (this.attribute.fixed_placeholder == true)
27
+ {
28
+ $('#'+this.el+'_container').append($('<div/>')
29
+ .attr('id', this.placeholder)
30
+ .addClass('mb_placeholder')
31
+ .append($('<span/>')
32
+ .html(this.attribute.nice_name + ': ')
33
+ )
34
+ );
35
+ }
36
+ var this2 = this;
37
+ $('#'+this.el+'_container').append($('<input/>')
38
+ .attr('type', 'text')
39
+ .attr('id', this.el)
40
+ .addClass('mb_fake_option')
41
+ .attr('placeholder', this.attribute.empty_text)
42
+ .click(function() { this2.edit(); })
43
+ .val(this.attribute.text && this.attribute.text.length > 0 ? this.attribute.text : this.attribute.empty_text)
44
+ );
45
+ if (this.attribute.width)
46
+ $('#'+this.el).css('width', this.attribute.width);
47
+
48
+ if (this.attribute.fixed_placeholder)
49
+ {
50
+ var w = $('#'+this.placeholder).outerWidth();
51
+ $('#'+this.el)
52
+ .css('padding-left', '+=' + w)
53
+ .css('width', '-=' + w);
54
+ }
55
+
56
+ // Populate options manually
57
+ this.attribute.options = []
58
+ $.each(['am', 'pm'], function(i, ampm) {
59
+ for (var hour = 0; hour < 12; hour += this2.attribute.hour_increment) {
60
+ for (var min = 0; min < 60; min += this2.attribute.minute_increment) {
61
+ h = hour == 0 ? '12' : (hour < 10 ? '0' + hour : '' + hour);
62
+ m = min < 10 ? '0' + min : '' + min;
63
+ t = '' + h + ':' + m + ' ' + ampm;
64
+ this2.attribute.options.push({ value: t, text: t });
65
+ }
66
+ }
67
+ });
68
+
69
+ var select = $('<select/>')
70
+ .attr('id', this2.el + '_select')
71
+ .addClass('mb_fake')
72
+ .css('width', $('#'+this2.el).outerWidth())
73
+ .on('change', function() {
74
+ $('#'+this2.el).val($('#'+this2.el+'_select').val());
75
+ this2.save();
76
+ });
77
+ // Make sure the existing value is in the list of options
78
+ var exists = false;
79
+ $.each(this2.attribute.options, function(i, option) {
80
+ if (option.value == this2.attribute.value)
81
+ {
82
+ exists = true;
83
+ return false;
84
+ }
85
+ });
86
+ if (!exists)
87
+ this2.attribute.options.unshift({
88
+ value: this2.attribute.value,
89
+ text: this2.attribute.text
90
+ });
91
+
92
+ $.each(this2.attribute.options, function(i, option) {
93
+ var opt = $('<option/>')
94
+ .val(option.value)
95
+ .html(option.text);
96
+ if (option.value == this2.attribute.value)
97
+ {
98
+ this2.attribute.text = option.text;
99
+ $('#'+this2.el).val(this2.attribute.text);
100
+ opt.attr('selected', 'true');
101
+ }
102
+ select.append(opt);
103
+ });
104
+ $('#'+this2.el+'_container').append(select);
105
+ $('#'+this2.el+'_select').css('width', $('#'+this2.el).outerWidth());
106
+ },
107
+
108
+ //update_options: function() {
109
+ // var that = this;
110
+ // this.attribute.populate_options(function() {
111
+ // var select = $('<select/>')
112
+ // .attr('id', that.el + '_select')
113
+ // .addClass('fake')
114
+ // .css('width', $('#'+that.el).outerWidth())
115
+ // .on('change', function() {
116
+ // $('#'+that.el).val($('#'+that.el+'_select').val());
117
+ // that.save();
118
+ // });
119
+ //
120
+ // $.each(that.attribute.options, function(i, option) {
121
+ // var opt = $('<option/>')
122
+ // .val(option.value)
123
+ // .html(option.text);
124
+ // if (option.value == that.attribute.value)
125
+ // opt.attr('selected', 'true');
126
+ // select.append(opt);
127
+ // });
128
+ //
129
+ // if ($('#' + that.el + '_select').length)
130
+ // $('#' + that.el + '_select').remove();
131
+ //
132
+ // $('#'+that.el+'_container').append(select);
133
+ // $('#'+that.el+'_select').css('width', $('#'+that.el).outerWidth());
134
+ // });
135
+ //},
136
+
137
+ view: function() {
138
+
139
+ },
140
+
141
+ edit: function() {
142
+ },
143
+
144
+ save: function() {
145
+ this.attribute.value = $('#'+this.el).val();
146
+ var this2 = this;
147
+ this.model.save(this.attribute, function(resp) {
148
+ $(this2.attribute.options).each(function(i,opt) {
149
+ if (opt.value == this2.attribute.value)
150
+ this2.attribute.text = opt.text;
151
+ });
152
+ if (this2.attribute.text)
153
+ $('#'+this2.el).val(this2.attribute.text);
154
+ $('#'+this2.el+'_check a').removeClass('loading');
155
+ if (resp.error) this2.error(resp.error);
156
+ else
157
+ {
158
+ if (this2.binder.success)
159
+ this2.binder.success(this2);
160
+ this2.view();
161
+ }
162
+ });
163
+ },
164
+
165
+ cancel: function() {
166
+ this.attribute.value = this.attribute.value_clean;
167
+ $('#'+this.el).val(this.attribute.value);
168
+ this.view();
169
+ },
170
+
171
+ error: function(str) {
172
+ if (!$('#'+this.message).length)
173
+ $('#'+this.el+'_container').prepend($('<div/>').attr('id', this.message));
174
+ $('#'+this.message).html("<p class='note error'>" + str + "</p>");
175
+ }
176
+
177
+ });
@@ -5,6 +5,10 @@ var ModelBinder = function(params) {
5
5
  all_model_binders[all_model_binders.length] = this;
6
6
  };
7
7
 
8
+ ModelBinder.tinymce_init = function() {
9
+ alert('ModelBinder.tinymce_init');
10
+ };
11
+
8
12
  ModelBinder.remove_from_all_model_binders = function(model_name, id) {
9
13
  var arr = [];
10
14
  $.each(all_model_binders, function(i, mb) {
@@ -14,8 +18,7 @@ ModelBinder.remove_from_all_model_binders = function(model_name, id) {
14
18
  all_model_binders = arr;
15
19
  };
16
20
 
17
- ModelBinder.tinymce_current_control = function() {
18
- var id = tinymce.activeEditor.id.toLowerCase();
21
+ ModelBinder.tinymce_control = function(id) {
19
22
  var control = false;
20
23
  $.each(all_model_binders, function(i, mb) {
21
24
  $.each(mb.controls, function(i, c) {
@@ -26,6 +29,11 @@ ModelBinder.tinymce_current_control = function() {
26
29
  return control;
27
30
  };
28
31
 
32
+ ModelBinder.tinymce_current_control = function() {
33
+ var id = tinymce.activeEditor.id.toLowerCase();
34
+ return ModelBinder.tinymce_control(id);
35
+ };
36
+
29
37
  ModelBinder.prototype = {
30
38
  model: false,
31
39
  controls: [],
@@ -43,6 +51,7 @@ ModelBinder.prototype = {
43
51
  if (params['update_url']) this.model.update_url = params['update_url'];
44
52
  if (params['success']) this.success = params['success'];
45
53
  if (params['authenticity_token']) this.authenticity_token = params['authenticity_token'];
54
+ if (params['on_load']) this.on_load = params['on_load'];
46
55
 
47
56
  var m = this.model;
48
57
  $.each(params['attributes'], function(i, attrib) {
@@ -76,7 +85,7 @@ ModelBinder.prototype = {
76
85
 
77
86
  this2.controls.push(control);
78
87
  });
79
-
88
+
80
89
  if (this.on_load)
81
90
  this.on_load();
82
91
  },
@@ -29,7 +29,7 @@ module Caboose
29
29
 
30
30
  # Try to find the page
31
31
  @page = Page.new
32
- @crumb_trail = []
32
+ @crumbtrail = Crumbtrail.new
33
33
  @subnav = {}
34
34
  @actions = {}
35
35
  @tasks = {}
@@ -1,4 +1,26 @@
1
1
  module Caboose
2
2
  module ApplicationHelper
3
+ def caboose_tinymce
4
+ return "
5
+ <script src='//tinymce.cachefly.net/4.0/tinymce.min.js'></script>
6
+ <script type='text/javascript'>
7
+ //<![CDATA[
8
+ tinyMCE.init({
9
+ selector: 'textarea.tinymce',
10
+ width: '800px',
11
+ height: '300px',
12
+ convert_urls: false,
13
+ plugins: 'advlist autolink lists link image charmap print preview hr anchor pagebreak searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking table contextmenu directionality emoticons template paste textcolor caboose',
14
+ toolbar1: 'caboose_save caboose_cancel | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
15
+ image_advtab: true,
16
+ external_plugins: { 'caboose': '/assets/tinymce/plugins/caboose/plugin.js' },
17
+ setup: function(editor) {
18
+ var control = ModelBinder.tinymce_control(editor.id);
19
+ editor.on('keyup', function(e) { control.tinymce_change(editor); });
20
+ }
21
+ });
22
+ //]]>
23
+ </script>\n"
24
+ end
3
25
  end
4
26
  end
@@ -1,10 +1,10 @@
1
1
  module Caboose
2
2
  class Crumbtrail
3
3
 
4
- @_crumbtrail = []
4
+ @_crumbtrail = nil
5
5
 
6
- def self.add(url, text = nil)
7
- #@_crumbtrail = []
6
+ def add(url, text = nil)
7
+ @_crumbtrail = [] if @_crumbtrail.nil?
8
8
  if url.is_a?(Hash)
9
9
  url.each do |url2, text2|
10
10
  @_crumbtrail << [url2, text2]
@@ -14,7 +14,7 @@ module Caboose
14
14
  end
15
15
  end
16
16
 
17
- def self.print(url = nil, text = nil)
17
+ def print(url = nil, text = nil)
18
18
  if url
19
19
  self.add(url, text)
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.4.92'
2
+ VERSION = '0.4.93'
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.92
4
+ version: 0.4.93
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-08-24 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -213,6 +213,7 @@ files:
213
213
  - app/assets/javascripts/caboose/model/bound_checkbox_multiple.js
214
214
  - app/assets/javascripts/caboose/model/bound_code.js
215
215
  - app/assets/javascripts/caboose/model/bound_control.js
216
+ - app/assets/javascripts/caboose/model/bound_date.js
216
217
  - app/assets/javascripts/caboose/model/bound_file.js
217
218
  - app/assets/javascripts/caboose/model/bound_image.js
218
219
  - app/assets/javascripts/caboose/model/bound_richtext.js
@@ -220,6 +221,7 @@ files:
220
221
  - app/assets/javascripts/caboose/model/bound_select.js
221
222
  - app/assets/javascripts/caboose/model/bound_text.js
222
223
  - app/assets/javascripts/caboose/model/bound_textarea.js
224
+ - app/assets/javascripts/caboose/model/bound_time.js
223
225
  - app/assets/javascripts/caboose/model/class.js
224
226
  - app/assets/javascripts/caboose/model/model.js
225
227
  - app/assets/javascripts/caboose/model/model_binder.js