beautiful_scaffold 0.1.3 → 0.1.4

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.
@@ -0,0 +1,226 @@
1
+ /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
2
+ * Dual licensed under the MIT (MIT_LICENSE.txt)
3
+ * and GPL Version 2 (GPL_LICENSE.txt) licenses.
4
+ *
5
+ * Version: 1.1.1
6
+ * Requires jQuery 1.3+
7
+ * Docs: http://docs.jquery.com/Plugins/livequery
8
+ */
9
+
10
+ (function($) {
11
+
12
+ $.extend($.fn, {
13
+ livequery: function(type, fn, fn2) {
14
+ var self = this, q;
15
+
16
+ // Handle different call patterns
17
+ if ($.isFunction(type))
18
+ fn2 = fn, fn = type, type = undefined;
19
+
20
+ // See if Live Query already exists
21
+ $.each( $.livequery.queries, function(i, query) {
22
+ if ( self.selector == query.selector && self.context == query.context &&
23
+ type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
24
+ // Found the query, exit the each loop
25
+ return (q = query) && false;
26
+ });
27
+
28
+ // Create new Live Query if it wasn't found
29
+ q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
30
+
31
+ // Make sure it is running
32
+ q.stopped = false;
33
+
34
+ // Run it immediately for the first time
35
+ q.run();
36
+
37
+ // Contnue the chain
38
+ return this;
39
+ },
40
+
41
+ expire: function(type, fn, fn2) {
42
+ var self = this;
43
+
44
+ // Handle different call patterns
45
+ if ($.isFunction(type))
46
+ fn2 = fn, fn = type, type = undefined;
47
+
48
+ // Find the Live Query based on arguments and stop it
49
+ $.each( $.livequery.queries, function(i, query) {
50
+ if ( self.selector == query.selector && self.context == query.context &&
51
+ (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
52
+ $.livequery.stop(query.id);
53
+ });
54
+
55
+ // Continue the chain
56
+ return this;
57
+ }
58
+ });
59
+
60
+ $.livequery = function(selector, context, type, fn, fn2) {
61
+ this.selector = selector;
62
+ this.context = context;
63
+ this.type = type;
64
+ this.fn = fn;
65
+ this.fn2 = fn2;
66
+ this.elements = [];
67
+ this.stopped = false;
68
+
69
+ // The id is the index of the Live Query in $.livequery.queries
70
+ this.id = $.livequery.queries.push(this)-1;
71
+
72
+ // Mark the functions for matching later on
73
+ fn.$lqguid = fn.$lqguid || $.livequery.guid++;
74
+ if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
75
+
76
+ // Return the Live Query
77
+ return this;
78
+ };
79
+
80
+ $.livequery.prototype = {
81
+ stop: function() {
82
+ var query = this;
83
+
84
+ if ( this.type )
85
+ // Unbind all bound events
86
+ this.elements.unbind(this.type, this.fn);
87
+ else if (this.fn2)
88
+ // Call the second function for all matched elements
89
+ this.elements.each(function(i, el) {
90
+ query.fn2.apply(el);
91
+ });
92
+
93
+ // Clear out matched elements
94
+ this.elements = [];
95
+
96
+ // Stop the Live Query from running until restarted
97
+ this.stopped = true;
98
+ },
99
+
100
+ run: function() {
101
+ // Short-circuit if stopped
102
+ if ( this.stopped ) return;
103
+ var query = this;
104
+
105
+ var oEls = this.elements,
106
+ els = $(this.selector, this.context),
107
+ nEls = els.not(oEls);
108
+
109
+ // Set elements to the latest set of matched elements
110
+ this.elements = els;
111
+
112
+ if (this.type) {
113
+ // Bind events to newly matched elements
114
+ nEls.bind(this.type, this.fn);
115
+
116
+ // Unbind events to elements no longer matched
117
+ if (oEls.length > 0)
118
+ $.each(oEls, function(i, el) {
119
+ if ( $.inArray(el, els) < 0 )
120
+ $.event.remove(el, query.type, query.fn);
121
+ });
122
+ }
123
+ else {
124
+ // Call the first function for newly matched elements
125
+ nEls.each(function() {
126
+ query.fn.apply(this);
127
+ });
128
+
129
+ // Call the second function for elements no longer matched
130
+ if ( this.fn2 && oEls.length > 0 )
131
+ $.each(oEls, function(i, el) {
132
+ if ( $.inArray(el, els) < 0 )
133
+ query.fn2.apply(el);
134
+ });
135
+ }
136
+ }
137
+ };
138
+
139
+ $.extend($.livequery, {
140
+ guid: 0,
141
+ queries: [],
142
+ queue: [],
143
+ running: false,
144
+ timeout: null,
145
+
146
+ checkQueue: function() {
147
+ if ( $.livequery.running && $.livequery.queue.length ) {
148
+ var length = $.livequery.queue.length;
149
+ // Run each Live Query currently in the queue
150
+ while ( length-- )
151
+ $.livequery.queries[ $.livequery.queue.shift() ].run();
152
+ }
153
+ },
154
+
155
+ pause: function() {
156
+ // Don't run anymore Live Queries until restarted
157
+ $.livequery.running = false;
158
+ },
159
+
160
+ play: function() {
161
+ // Restart Live Queries
162
+ $.livequery.running = true;
163
+ // Request a run of the Live Queries
164
+ $.livequery.run();
165
+ },
166
+
167
+ registerPlugin: function() {
168
+ $.each( arguments, function(i,n) {
169
+ // Short-circuit if the method doesn't exist
170
+ if (!$.fn[n]) return;
171
+
172
+ // Save a reference to the original method
173
+ var old = $.fn[n];
174
+
175
+ // Create a new method
176
+ $.fn[n] = function() {
177
+ // Call the original method
178
+ var r = old.apply(this, arguments);
179
+
180
+ // Request a run of the Live Queries
181
+ $.livequery.run();
182
+
183
+ // Return the original methods result
184
+ return r;
185
+ }
186
+ });
187
+ },
188
+
189
+ run: function(id) {
190
+ if (id != undefined) {
191
+ // Put the particular Live Query in the queue if it doesn't already exist
192
+ if ( $.inArray(id, $.livequery.queue) < 0 )
193
+ $.livequery.queue.push( id );
194
+ }
195
+ else
196
+ // Put each Live Query in the queue if it doesn't already exist
197
+ $.each( $.livequery.queries, function(id) {
198
+ if ( $.inArray(id, $.livequery.queue) < 0 )
199
+ $.livequery.queue.push( id );
200
+ });
201
+
202
+ // Clear timeout if it already exists
203
+ if ($.livequery.timeout) clearTimeout($.livequery.timeout);
204
+ // Create a timeout to check the queue and actually run the Live Queries
205
+ $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
206
+ },
207
+
208
+ stop: function(id) {
209
+ if (id != undefined)
210
+ // Stop are particular Live Query
211
+ $.livequery.queries[ id ].stop();
212
+ else
213
+ // Stop all Live Queries
214
+ $.each( $.livequery.queries, function(id) {
215
+ $.livequery.queries[ id ].stop();
216
+ });
217
+ }
218
+ });
219
+
220
+ // Register core DOM manipulation methods
221
+ $.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove', 'html');
222
+
223
+ // Run Live Queries when the Document is ready
224
+ $(function() { $.livequery.play(); });
225
+
226
+ })(jQuery);
@@ -0,0 +1,224 @@
1
+ /*!
2
+ * Datepicker for Bootstrap
3
+ *
4
+ * Copyright 2012 Stefan Petre
5
+ * Improvements by Andrew Rowls
6
+ * Licensed under the Apache License v2.0
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ */
10
+ .datepicker {
11
+ top: 0;
12
+ left: 0;
13
+ padding: 4px;
14
+ margin-top: 1px;
15
+ -webkit-border-radius: 4px;
16
+ -moz-border-radius: 4px;
17
+ border-radius: 4px;
18
+ /*.dow {
19
+ border-top: 1px solid #ddd !important;
20
+ }*/
21
+
22
+ }
23
+ .datepicker:before {
24
+ content: '';
25
+ display: inline-block;
26
+ border-left: 7px solid transparent;
27
+ border-right: 7px solid transparent;
28
+ border-bottom: 7px solid #ccc;
29
+ border-bottom-color: rgba(0, 0, 0, 0.2);
30
+ position: absolute;
31
+ top: -7px;
32
+ left: 6px;
33
+ }
34
+ .datepicker:after {
35
+ content: '';
36
+ display: inline-block;
37
+ border-left: 6px solid transparent;
38
+ border-right: 6px solid transparent;
39
+ border-bottom: 6px solid #ffffff;
40
+ position: absolute;
41
+ top: -6px;
42
+ left: 7px;
43
+ }
44
+ .datepicker > div {
45
+ display: none;
46
+ }
47
+ .datepicker.days div.datepicker-days {
48
+ display: block;
49
+ }
50
+ .datepicker.months div.datepicker-months {
51
+ display: block;
52
+ }
53
+ .datepicker.years div.datepicker-years {
54
+ display: block;
55
+ }
56
+ .datepicker table {
57
+ width: 100%;
58
+ margin: 0;
59
+ }
60
+ .datepicker td,
61
+ .datepicker th {
62
+ text-align: center;
63
+ width: 20px;
64
+ height: 20px;
65
+ -webkit-border-radius: 4px;
66
+ -moz-border-radius: 4px;
67
+ border-radius: 4px;
68
+ }
69
+ .datepicker td.day:hover {
70
+ background: #eeeeee;
71
+ cursor: pointer;
72
+ }
73
+ .datepicker td.old,
74
+ .datepicker td.new {
75
+ color: #999999;
76
+ }
77
+ .datepicker td.disabled,
78
+ .datepicker td.disabled:hover {
79
+ background: none;
80
+ color: #999999;
81
+ cursor: default;
82
+ }
83
+ .datepicker td.active,
84
+ .datepicker td.active:hover,
85
+ .datepicker td.active.disabled,
86
+ .datepicker td.active.disabled:hover {
87
+ background-color: #006dcc;
88
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
89
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
90
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
91
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
92
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
93
+ background-image: linear-gradient(top, #0088cc, #0044cc);
94
+ background-repeat: repeat-x;
95
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
96
+ border-color: #0044cc #0044cc #002a80;
97
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
98
+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);
99
+ color: #fff;
100
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
101
+ }
102
+ .datepicker td.active:hover,
103
+ .datepicker td.active:hover:hover,
104
+ .datepicker td.active.disabled:hover,
105
+ .datepicker td.active.disabled:hover:hover,
106
+ .datepicker td.active:active,
107
+ .datepicker td.active:hover:active,
108
+ .datepicker td.active.disabled:active,
109
+ .datepicker td.active.disabled:hover:active,
110
+ .datepicker td.active.active,
111
+ .datepicker td.active:hover.active,
112
+ .datepicker td.active.disabled.active,
113
+ .datepicker td.active.disabled:hover.active,
114
+ .datepicker td.active.disabled,
115
+ .datepicker td.active:hover.disabled,
116
+ .datepicker td.active.disabled.disabled,
117
+ .datepicker td.active.disabled:hover.disabled,
118
+ .datepicker td.active[disabled],
119
+ .datepicker td.active:hover[disabled],
120
+ .datepicker td.active.disabled[disabled],
121
+ .datepicker td.active.disabled:hover[disabled] {
122
+ background-color: #0044cc;
123
+ }
124
+ .datepicker td.active:active,
125
+ .datepicker td.active:hover:active,
126
+ .datepicker td.active.disabled:active,
127
+ .datepicker td.active.disabled:hover:active,
128
+ .datepicker td.active.active,
129
+ .datepicker td.active:hover.active,
130
+ .datepicker td.active.disabled.active,
131
+ .datepicker td.active.disabled:hover.active {
132
+ background-color: #003399 \9;
133
+ }
134
+ .datepicker td span {
135
+ display: block;
136
+ width: 47px;
137
+ height: 54px;
138
+ line-height: 54px;
139
+ float: left;
140
+ margin: 2px;
141
+ cursor: pointer;
142
+ -webkit-border-radius: 4px;
143
+ -moz-border-radius: 4px;
144
+ border-radius: 4px;
145
+ }
146
+ .datepicker td span:hover {
147
+ background: #eeeeee;
148
+ }
149
+ .datepicker td span.disabled,
150
+ .datepicker td span.disabled:hover {
151
+ background: none;
152
+ color: #999999;
153
+ cursor: default;
154
+ }
155
+ .datepicker td span.active,
156
+ .datepicker td span.active:hover,
157
+ .datepicker td span.active.disabled,
158
+ .datepicker td span.active.disabled:hover {
159
+ background-color: #006dcc;
160
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
161
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
162
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
163
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
164
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
165
+ background-image: linear-gradient(top, #0088cc, #0044cc);
166
+ background-repeat: repeat-x;
167
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
168
+ border-color: #0044cc #0044cc #002a80;
169
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
170
+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);
171
+ color: #fff;
172
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
173
+ }
174
+ .datepicker td span.active:hover,
175
+ .datepicker td span.active:hover:hover,
176
+ .datepicker td span.active.disabled:hover,
177
+ .datepicker td span.active.disabled:hover:hover,
178
+ .datepicker td span.active:active,
179
+ .datepicker td span.active:hover:active,
180
+ .datepicker td span.active.disabled:active,
181
+ .datepicker td span.active.disabled:hover:active,
182
+ .datepicker td span.active.active,
183
+ .datepicker td span.active:hover.active,
184
+ .datepicker td span.active.disabled.active,
185
+ .datepicker td span.active.disabled:hover.active,
186
+ .datepicker td span.active.disabled,
187
+ .datepicker td span.active:hover.disabled,
188
+ .datepicker td span.active.disabled.disabled,
189
+ .datepicker td span.active.disabled:hover.disabled,
190
+ .datepicker td span.active[disabled],
191
+ .datepicker td span.active:hover[disabled],
192
+ .datepicker td span.active.disabled[disabled],
193
+ .datepicker td span.active.disabled:hover[disabled] {
194
+ background-color: #0044cc;
195
+ }
196
+ .datepicker td span.active:active,
197
+ .datepicker td span.active:hover:active,
198
+ .datepicker td span.active.disabled:active,
199
+ .datepicker td span.active.disabled:hover:active,
200
+ .datepicker td span.active.active,
201
+ .datepicker td span.active:hover.active,
202
+ .datepicker td span.active.disabled.active,
203
+ .datepicker td span.active.disabled:hover.active {
204
+ background-color: #003399 \9;
205
+ }
206
+ .datepicker td span.old {
207
+ color: #999999;
208
+ }
209
+ .datepicker th.switch {
210
+ width: 145px;
211
+ }
212
+ .datepicker thead tr:first-child th {
213
+ cursor: pointer;
214
+ }
215
+ .datepicker thead tr:first-child th:hover {
216
+ background: #eeeeee;
217
+ }
218
+ .input-append.date .add-on i,
219
+ .input-prepend.date .add-on i {
220
+ display: block;
221
+ cursor: pointer;
222
+ width: 16px;
223
+ height: 16px;
224
+ }
@@ -0,0 +1,92 @@
1
+
2
+ .bootstrap-timepicker.dropdown-menu {
3
+ border-radius: 4px 4px 4px 4px;
4
+ display: none;
5
+ left: 0;
6
+ margin-top: 1px;
7
+ padding: 4px;
8
+ top: 0;
9
+ }
10
+ .bootstrap-timepicker.dropdown-menu.open {
11
+ display: inline-block;
12
+ }
13
+ .bootstrap-timepicker.dropdown-menu:before {
14
+ border-bottom: 7px solid rgba(0, 0, 0, 0.2);
15
+ border-left: 7px solid transparent;
16
+ border-right: 7px solid transparent;
17
+ content: "";
18
+ left: 6px;
19
+ position: absolute;
20
+ top: -7px;
21
+ }
22
+ .bootstrap-timepicker.dropdown-menu:after {
23
+ border-bottom: 6px solid #FFFFFF;
24
+ border-left: 6px solid transparent;
25
+ border-right: 6px solid transparent;
26
+ content: "";
27
+ left: 7px;
28
+ position: absolute;
29
+ top: -6px;
30
+ }
31
+ .bootstrap-timepicker.modal {
32
+ margin-left: -100px;
33
+ margin-top: 0;
34
+ top: 30%;
35
+ width: 200px;
36
+ }
37
+ .bootstrap-timepicker.modal .modal-content {
38
+ padding: 0;
39
+ }
40
+ .bootstrap-timepicker table {
41
+ margin: 0;
42
+ width: 100%;
43
+ }
44
+ .bootstrap-timepicker table td {
45
+ height: 30px;
46
+ margin: 0;
47
+ padding: 2px;
48
+ text-align: center;
49
+ width: 49%;
50
+ }
51
+ .bootstrap-timepicker table.show-meridian td, .bootstrap-timepicker table.show-seconds td {
52
+ width: 32%;
53
+ }
54
+ .bootstrap-timepicker table.show-seconds.show-meridian td {
55
+ width: 23.5%;
56
+ }
57
+ .bootstrap-timepicker table td.separator {
58
+ width: 2% !important;
59
+ }
60
+ .bootstrap-timepicker table td span {
61
+ width: 100%;
62
+ }
63
+ .bootstrap-timepicker table td a {
64
+ border: 1px solid transparent;
65
+ display: inline-block;
66
+ margin: 0;
67
+ outline: 0 none;
68
+ padding: 8px 0;
69
+ width: 90%;
70
+ }
71
+ .bootstrap-timepicker table td a:hover {
72
+ background-color: #EEEEEE;
73
+ border-color: #DDDDDD;
74
+ border-radius: 4px 4px 4px 4px;
75
+ }
76
+ .bootstrap-timepicker table td a i {
77
+ margin-top: 2px;
78
+ }
79
+ .bootstrap-timepicker table td input {
80
+ margin: 0;
81
+ text-align: center;
82
+ width: 25px;
83
+ }
84
+ .bootstrap-timepicker-component .add-on {
85
+ cursor: pointer;
86
+ }
87
+ .bootstrap-timepicker-component .add-on i {
88
+ display: block;
89
+ height: 16px;
90
+ width: 16px;
91
+ }
92
+
@@ -99,10 +99,22 @@ class <%= namespace_for_class %><%= model_camelize.pluralize %>Controller < Beau
99
99
 
100
100
  respond_to do |format|
101
101
  if @<%= model %>.save
102
- format.html { redirect_to <%= namespace_for_route %><%= singular_table_name %>_path(@<%= model %>), :notice => t(:create_success, :model => "<%= model %>") }
102
+ format.html {
103
+ if params[:mass_inserting] then
104
+ redirect_to <%= namespace_for_route %><%= model_pluralize %>_path(:mass_inserting => true)
105
+ else
106
+ redirect_to <%= namespace_for_route %><%= singular_table_name %>_path(@<%= model %>), :notice => t(:create_success, :model => "<%= model %>")
107
+ end
108
+ }
103
109
  format.json { render :json => @<%= model %>, :status => :created, :location => @<%= model %> }
104
110
  else
105
- format.html { render :action => "new" }
111
+ format.html {
112
+ if params[:mass_inserting] then
113
+ redirect_to <%= namespace_for_route %><%= model_pluralize %>_path(:mass_inserting => true), :error => t(:error, "Error")
114
+ else
115
+ render :action => "new"
116
+ end
117
+ }
106
118
  format.json { render :json => @<%= model %>.errors, :status => :unprocessable_entity }
107
119
  end
108
120
  end
@@ -1,8 +1,8 @@
1
1
  # encoding : utf-8
2
2
  module BeautifulHelper
3
3
 
4
- def visible_column(model_name, field_name)
5
- return ('style="display:' + ((session[:fields][model_name.to_sym].to_a.include?(field_name)) ? 'table-cell' : 'none') + ';"').html_safe
4
+ def visible_column(model_name, field_name, display_default = 'table-cell', other_css = "")
5
+ return ('style="display:' + ((session[:fields][model_name.to_sym].to_a.include?(field_name)) ? display_default : 'none') + ';' + other_css + '"').html_safe
6
6
  end
7
7
 
8
8
  def dropdown_submenu(link_caption, &block)
@@ -74,16 +74,47 @@ module BeautifulHelper
74
74
  case type_of_column
75
75
  when :date, :datetime then
76
76
  # DatePicker
77
- response += '<div class="input-prepend input-append">'
77
+ response += '<div class="input-prepend input-append input-' + type_of_column.to_s + '">'
78
78
  response += '<span class="add-on"><i class="icon-chevron-right"></i></span>'
79
- response += f.date_select((name_field + "_gteq").to_sym)
79
+ response += f.text_field((name_field + "_gteq").to_sym, :class => "span8 dpicker")
80
80
  response += '<span class="add-on"><i class="icon-calendar"></i></span>'
81
81
  response += '</div>'
82
- response += '<div class="input-prepend input-append">'
82
+
83
+ response += f.hidden_field(name_field + '_gteq(3i)', :id => ('q_' + name_field + '_gteq_3i')) # Day
84
+ response += f.hidden_field(name_field + '_gteq(2i)', :id => ('q_' + name_field + '_gteq_2i')) # Mois
85
+ response += f.hidden_field(name_field + '_gteq(1i)', :id => ('q_' + name_field + '_gteq_1i')) # Year
86
+
87
+ if type_of_column == :datetime then
88
+ response += '<div class="input-prepend input-append input-' + type_of_column.to_s + '">'
89
+ response += '<span class="add-on"><i class="icon-chevron-right"></i></span>'
90
+ response += f.text_field((name_field + "_lteq").to_sym, :class => "span8 tpicker")
91
+ response += '<span class="add-on"><i class="icon-time"></i></span>'
92
+ response += '</div>'
93
+
94
+ response += f.hidden_field(name_field + '_gteq(4i)', :id => ('q_' + name_field + '_gteq_4i')) # Hour
95
+ response += f.hidden_field(name_field + '_gteq(5i)', :id => ('q_' + name_field + '_gteq_5i')) # Minute
96
+ end
97
+
98
+ response += '<div class="input-prepend input-append input-' + type_of_column.to_s + '">'
83
99
  response += '<span class="add-on"><i class="icon-chevron-left"></i></span>'
84
- response += f.date_select((name_field + "_lteq").to_sym)
100
+ response += f.text_field((name_field + "_lteq").to_sym, :class => "span8 dpicker")
85
101
  response += '<span class="add-on"><i class="icon-calendar"></i></span>'
86
102
  response += '</div>'
103
+
104
+ response += f.hidden_field(name_field + '_lteq(3i)', :id => ('q_' + name_field + '_lteq_3i')) # Day
105
+ response += f.hidden_field(name_field + '_lteq(2i)', :id => ('q_' + name_field + '_lteq_2i')) # Mois
106
+ response += f.hidden_field(name_field + '_lteq(1i)', :id => ('q_' + name_field + '_lteq_1i')) # Year
107
+
108
+ if type_of_column == :datetime then
109
+ response += '<div class="input-prepend input-append input-' + type_of_column.to_s + '">'
110
+ response += '<span class="add-on"><i class="icon-chevron-left"></i></span>'
111
+ response += f.text_field((name_field + "_lteq").to_sym, :class => "span8 tpicker")
112
+ response += '<span class="add-on"><i class="icon-time"></i></span>'
113
+ response += '</div>'
114
+
115
+ response += f.hidden_field(name_field + '_lteq(4i)', :id => ('q_' + name_field + '_lteq_4i')) # Hour
116
+ response += f.hidden_field(name_field + '_lteq(5i)', :id => ('q_' + name_field + '_lteq_5i')) # Minute
117
+ end
87
118
  when :boolean then
88
119
  # Specify a default value (false) in rails migration
89
120
  response += f.label name_field + "_eq_true", raw(f.radio_button((name_field + "_eq").to_sym, true)) + " " + h(t(:yes, :default => "Yes")), :class => "checkbox inline"
@@ -91,7 +122,7 @@ module BeautifulHelper
91
122
  response += f.label name_field + "_eq", raw(f.radio_button((name_field + "_eq").to_sym, nil)) + " " + h(t(:all, :default => "All")), :class => "checkbox inline"
92
123
  when :string then
93
124
  response += f.text_field((name_field + "_cont").to_sym, :class => "filter span12")
94
- when :integer, :float then
125
+ when :integer, :float, :decimal then
95
126
  if is_belongs_to_column?(name_field) then
96
127
  btmodel = get_belongs_to_model(name_field).classify.constantize
97
128
  response += f.collection_select((name_field + "_eq").to_sym, btmodel.all, :id, :caption, { :include_blank => t(:all, :default => "All") }, { :class => "span12" })
@@ -5,7 +5,7 @@ if not namespace_alone.blank? then
5
5
  end
6
6
  -%>
7
7
 
8
- <%%= form_for(<%= strformfor %>, :class => "form-horizontal") do |f| %>
8
+ <%%= form_for(<%= strformfor %>, :html => { :class => "form-horizontal" }) do |f| %>
9
9
  <%% if @<%= singular_table_name %>.errors.any? %>
10
10
  <div id="error_explanation">
11
11
  <h2><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
@@ -0,0 +1,41 @@
1
+ <%= form_for [namespace, model_name.classify.constantize.new], :method => :post, :html => { :class => "well form-horizontal mass-inserting" } do |f| %>
2
+ <%= hidden_field_tag :mass_inserting, true %>
3
+ <% for col in model_columns %>
4
+ <div <%= visible_column(model_name, col, 'inline') %> class="col-<%= col %>">
5
+ <%=
6
+ ar = model_name.classify.constantize.columns_hash[col]
7
+ if not ar.nil? then
8
+ case ar.type
9
+ when 'integer' then
10
+ if col =~ /.*_id/ then
11
+ f.collection_select((col).to_sym, col.classify.constantize.all, :id, :caption, {}, { :class => "input-small", :placeholder => col.capitalize })
12
+ else
13
+ f.text_field(col.to_sym, :class => "input-small", :placeholder => col.capitalize)
14
+ end
15
+ when 'boolean' then
16
+ (
17
+ f.radio_button_tag(col.to_sym, true)
18
+ f.label((col + "_true").to_sym, t(:yes))
19
+ f.radio_button_tag(col.to_sym, false)
20
+ f.label((col + "_false").to_sym, t(:no))
21
+ )
22
+ else
23
+ f.text_field(col.to_sym, :class => "input-small", :placeholder => col.capitalize)
24
+ end
25
+ else
26
+ f.collection_select((col + '_id').to_sym, col.classify.constantize.all, :id, :caption, {}, { :class => "input-small", :placeholder => col.capitalize })
27
+ end
28
+ %>
29
+ </div>
30
+ <% end %>
31
+ <div style="display:inline;">
32
+ <%= f.submit t(:create, :default => "Create"), :class => 'btn' %>
33
+ </div>
34
+ <% end %>
35
+
36
+ <% if params[:mass_inserting] then %>
37
+ <script type="text/javascript">
38
+ elt = $('form.mass-inserting div[style*="inline"][class*="col"] .input-small').first();
39
+ $(elt).focus();
40
+ </script>
41
+ <% end %>