beautiful_scaffold 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 %>