sferik-merb-admin 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/LICENSE +20 -0
  2. data/README.markdown +55 -0
  3. data/Rakefile +69 -0
  4. data/app/controllers/application.rb +17 -0
  5. data/app/controllers/forms.rb +85 -0
  6. data/app/helpers/application_helper.rb +66 -0
  7. data/app/helpers/forms_helper.rb +112 -0
  8. data/app/views/forms/_big_decimal.html.erb +8 -0
  9. data/app/views/forms/_date.html.erb +8 -0
  10. data/app/views/forms/_date_time.html.erb +8 -0
  11. data/app/views/forms/_float.html.erb +8 -0
  12. data/app/views/forms/_integer.html.erb +12 -0
  13. data/app/views/forms/_string.html.erb +16 -0
  14. data/app/views/forms/_time.html.erb +8 -0
  15. data/app/views/forms/_true_class.html.erb +5 -0
  16. data/app/views/forms/delete.html.erb +12 -0
  17. data/app/views/forms/edit.html.erb +23 -0
  18. data/app/views/forms/index.html.erb +22 -0
  19. data/app/views/forms/list.html.erb +64 -0
  20. data/app/views/forms/new.html.erb +19 -0
  21. data/app/views/layout/_message.html.erb +10 -0
  22. data/app/views/layout/dashboard.html.erb +37 -0
  23. data/app/views/layout/form.html.erb +51 -0
  24. data/app/views/layout/list.html.erb +45 -0
  25. data/lib/merb-admin/merbtasks.rb +103 -0
  26. data/lib/merb-admin/slicetasks.rb +20 -0
  27. data/lib/merb-admin/spectasks.rb +53 -0
  28. data/lib/merb-admin.rb +101 -0
  29. data/public/images/arrow-down.gif +0 -0
  30. data/public/images/arrow-up.gif +0 -0
  31. data/public/images/changelist-bg.gif +0 -0
  32. data/public/images/changelist-bg_rtl.gif +0 -0
  33. data/public/images/chooser-bg.gif +0 -0
  34. data/public/images/chooser_stacked-bg.gif +0 -0
  35. data/public/images/default-bg-reverse.gif +0 -0
  36. data/public/images/default-bg.gif +0 -0
  37. data/public/images/deleted-overlay.gif +0 -0
  38. data/public/images/icon-no.gif +0 -0
  39. data/public/images/icon-unknown.gif +0 -0
  40. data/public/images/icon-yes.gif +0 -0
  41. data/public/images/icon_addlink.gif +0 -0
  42. data/public/images/icon_alert.gif +0 -0
  43. data/public/images/icon_calendar.gif +0 -0
  44. data/public/images/icon_changelink.gif +0 -0
  45. data/public/images/icon_clock.gif +0 -0
  46. data/public/images/icon_deletelink.gif +0 -0
  47. data/public/images/icon_error.gif +0 -0
  48. data/public/images/icon_searchbox.png +0 -0
  49. data/public/images/icon_success.gif +0 -0
  50. data/public/images/inline-delete-8bit.png +0 -0
  51. data/public/images/inline-delete.png +0 -0
  52. data/public/images/inline-restore-8bit.png +0 -0
  53. data/public/images/inline-restore.png +0 -0
  54. data/public/images/inline-splitter-bg.gif +0 -0
  55. data/public/images/nav-bg-grabber.gif +0 -0
  56. data/public/images/nav-bg-reverse.gif +0 -0
  57. data/public/images/nav-bg.gif +0 -0
  58. data/public/images/selector-add.gif +0 -0
  59. data/public/images/selector-addall.gif +0 -0
  60. data/public/images/selector-remove.gif +0 -0
  61. data/public/images/selector-removeall.gif +0 -0
  62. data/public/images/selector-search.gif +0 -0
  63. data/public/images/selector_stacked-add.gif +0 -0
  64. data/public/images/selector_stacked-remove.gif +0 -0
  65. data/public/images/tool-left.gif +0 -0
  66. data/public/images/tool-left_over.gif +0 -0
  67. data/public/images/tool-right.gif +0 -0
  68. data/public/images/tool-right_over.gif +0 -0
  69. data/public/images/tooltag-add.gif +0 -0
  70. data/public/images/tooltag-add_over.gif +0 -0
  71. data/public/images/tooltag-arrowright.gif +0 -0
  72. data/public/images/tooltag-arrowright_over.gif +0 -0
  73. data/public/javascripts/CollapsedFieldsets.js +85 -0
  74. data/public/javascripts/DateTimeShortcuts.js +255 -0
  75. data/public/javascripts/RelatedObjectLookups.js +96 -0
  76. data/public/javascripts/SelectBox.js +111 -0
  77. data/public/javascripts/SelectFilter2.js +113 -0
  78. data/public/javascripts/actions.js +39 -0
  79. data/public/javascripts/calendar.js +143 -0
  80. data/public/javascripts/core.js +176 -0
  81. data/public/javascripts/dateparse.js +233 -0
  82. data/public/javascripts/getElementsBySelector.js +167 -0
  83. data/public/javascripts/i18n.js +33 -0
  84. data/public/javascripts/master.js +0 -0
  85. data/public/javascripts/ordering.js +137 -0
  86. data/public/javascripts/timeparse.js +94 -0
  87. data/public/javascripts/urlify.js +140 -0
  88. data/public/stylesheets/base.css +746 -0
  89. data/public/stylesheets/changelists.css +269 -0
  90. data/public/stylesheets/dashboard.css +24 -0
  91. data/public/stylesheets/forms.css +327 -0
  92. data/public/stylesheets/global.css +142 -0
  93. data/public/stylesheets/ie.css +51 -0
  94. data/public/stylesheets/layout.css +29 -0
  95. data/public/stylesheets/login.css +54 -0
  96. data/public/stylesheets/master.css +2 -0
  97. data/public/stylesheets/null.css +1 -0
  98. data/public/stylesheets/patch-iewin.css +8 -0
  99. data/public/stylesheets/rtl.css +206 -0
  100. data/public/stylesheets/widgets.css +506 -0
  101. data/spec/controller/forms_spec.rb +41 -0
  102. data/spec/merb-admin_spec.rb +5 -0
  103. data/spec/spec_helper.rb +58 -0
  104. metadata +213 -0
@@ -0,0 +1,269 @@
1
+ /* CHANGELISTS */
2
+
3
+ #changelist {
4
+ position: relative;
5
+ width: 100%;
6
+ }
7
+
8
+ #changelist table {
9
+ width: 100%;
10
+ }
11
+
12
+ .change-list .filtered table {
13
+ border-right: 1px solid #ddd;
14
+ }
15
+
16
+ .change-list .filtered {
17
+ min-height: 400px;
18
+ }
19
+
20
+ .change-list .filtered {
21
+ background: white url(../images/changelist-bg.gif) top right repeat-y !important;
22
+ }
23
+
24
+ .change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
25
+ margin-right: 160px !important;
26
+ width: auto !important;
27
+ }
28
+
29
+ .change-list .filtered table tbody th {
30
+ padding-right: 1em;
31
+ }
32
+
33
+ #changelist .toplinks {
34
+ border-bottom: 1px solid #ccc !important;
35
+ }
36
+
37
+ #changelist .paginator {
38
+ color: #666;
39
+ border-top: 1px solid #eee;
40
+ border-bottom: 1px solid #eee;
41
+ background: white url(../images/nav-bg.gif) 0 180% repeat-x;
42
+ overflow: hidden;
43
+ }
44
+
45
+ .change-list .filtered .paginator {
46
+ border-right: 1px solid #ddd;
47
+ }
48
+
49
+ /* CHANGELIST TABLES */
50
+
51
+ #changelist table thead th {
52
+ white-space: nowrap;
53
+ vertical-align: middle;
54
+ }
55
+
56
+ #changelist table thead th:first-child {
57
+ width: 1.5em;
58
+ text-align: center;
59
+ }
60
+
61
+ #changelist table tbody td {
62
+ border-left: 1px solid #ddd;
63
+ }
64
+
65
+ #changelist table tbody td:first-child {
66
+ border-left: 0;
67
+ border-right: 1px solid #ddd;
68
+ text-align: center;
69
+ }
70
+
71
+ #changelist table tfoot {
72
+ color: #666;
73
+ }
74
+
75
+ /* TOOLBAR */
76
+
77
+ #changelist #toolbar {
78
+ padding: 3px;
79
+ border-bottom: 1px solid #ddd;
80
+ background: #e1e1e1 url(../images/nav-bg.gif) top left repeat-x;
81
+ color: #666;
82
+ }
83
+
84
+ #changelist #toolbar form input {
85
+ font-size: 11px;
86
+ padding: 1px 2px;
87
+ }
88
+
89
+ #changelist #toolbar form #searchbar {
90
+ padding: 2px;
91
+ }
92
+
93
+ #changelist #changelist-search img {
94
+ vertical-align: middle;
95
+ }
96
+
97
+ /* FILTER COLUMN */
98
+
99
+ #changelist-filter {
100
+ position: absolute;
101
+ top: 0;
102
+ right: 0;
103
+ z-index: 1000;
104
+ width: 160px;
105
+ border-left: 1px solid #ddd;
106
+ background: #efefef;
107
+ margin: 0;
108
+ }
109
+
110
+ #changelist-filter h2 {
111
+ font-size: 11px;
112
+ padding: 2px 5px;
113
+ border-bottom: 1px solid #ddd;
114
+ }
115
+
116
+ #changelist-filter h3 {
117
+ font-size: 12px;
118
+ margin-bottom: 0;
119
+ }
120
+
121
+ #changelist-filter ul {
122
+ padding-left: 0;
123
+ margin-left: 10px;
124
+ }
125
+
126
+ #changelist-filter li {
127
+ list-style-type: none;
128
+ margin-left: 0;
129
+ padding-left: 0;
130
+ }
131
+
132
+ #changelist-filter a {
133
+ color: #999;
134
+ }
135
+
136
+ #changelist-filter a:hover {
137
+ color: #036;
138
+ }
139
+
140
+ #changelist-filter li.selected {
141
+ border-left: 5px solid #ccc;
142
+ padding-left: 5px;
143
+ margin-left: -10px;
144
+ }
145
+
146
+ #changelist-filter li.selected a {
147
+ color: #5b80b2 !important;
148
+ }
149
+
150
+ /* DATE DRILLDOWN */
151
+
152
+ .change-list ul.toplinks {
153
+ display: block;
154
+ background: white url(../images/nav-bg-reverse.gif) 0 -10px repeat-x;
155
+ border-top: 1px solid white;
156
+ float: left;
157
+ padding: 0 !important;
158
+ margin: 0 !important;
159
+ width: 100%;
160
+ }
161
+
162
+ .change-list ul.toplinks li {
163
+ float: left;
164
+ width: 9em;
165
+ padding: 3px 6px;
166
+ font-weight: bold;
167
+ list-style-type: none;
168
+ }
169
+
170
+ .change-list ul.toplinks .date-back a {
171
+ color: #999;
172
+ }
173
+
174
+ .change-list ul.toplinks .date-back a:hover {
175
+ color: #036;
176
+ }
177
+
178
+ /* PAGINATOR */
179
+
180
+ .paginator {
181
+ font-size: 11px;
182
+ padding-top: 10px;
183
+ padding-bottom: 10px;
184
+ line-height: 22px;
185
+ margin: 0;
186
+ border-top: 1px solid #ddd;
187
+ }
188
+
189
+ .paginator a:link, .paginator a:visited {
190
+ padding: 2px 6px;
191
+ border: solid 1px #ccc;
192
+ background: white;
193
+ text-decoration: none;
194
+ }
195
+
196
+ .paginator a.showall {
197
+ padding: 0 !important;
198
+ border: none !important;
199
+ }
200
+
201
+ .paginator a.showall:hover {
202
+ color: #036 !important;
203
+ background: transparent !important;
204
+ }
205
+
206
+ .paginator .end {
207
+ border-width: 2px !important;
208
+ margin-right: 6px;
209
+ }
210
+
211
+ .paginator .this-page {
212
+ padding: 2px 6px;
213
+ font-weight: bold;
214
+ font-size: 13px;
215
+ vertical-align: top;
216
+ }
217
+
218
+ .paginator a:hover {
219
+ color: white;
220
+ background: #5b80b2;
221
+ border-color: #036;
222
+ }
223
+
224
+ /* ACTIONS */
225
+
226
+ .filtered .actions {
227
+ margin-right: 160px !important;
228
+ border-right: 1px solid #ddd;
229
+ }
230
+
231
+ #changelist table input {
232
+ margin: 0;
233
+ }
234
+
235
+ #changelist table tbody tr.selected {
236
+ background-color: #FFFFCC;
237
+ }
238
+
239
+ #changelist .actions {
240
+ color: #999;
241
+ padding: 3px;
242
+ border-top: 1px solid #fff;
243
+ border-bottom: 1px solid #ddd;
244
+ background: white url(../images/nav-bg-reverse.gif) 0 -10px repeat-x;
245
+ }
246
+
247
+ #changelist .actions:last-child {
248
+ border-bottom: none;
249
+ }
250
+
251
+ #changelist .actions select {
252
+ border: 1px solid #aaa;
253
+ margin-left: 0.5em;
254
+ padding: 1px 2px;
255
+ }
256
+
257
+ #changelist .actions label {
258
+ font-size: 11px;
259
+ margin-left: 0.5em;
260
+ }
261
+
262
+ #changelist #action-toggle {
263
+ display: none;
264
+ }
265
+
266
+ #changelist .actions .button {
267
+ font-size: 11px;
268
+ padding: 1px 2px;
269
+ }
@@ -0,0 +1,24 @@
1
+ /* DASHBOARD */
2
+
3
+ .dashboard .module table th {
4
+ width: 100%;
5
+ }
6
+
7
+ .dashboard .module table td {
8
+ white-space: nowrap;
9
+ }
10
+
11
+ .dashboard .module table td a {
12
+ display: block;
13
+ padding-right: .6em;
14
+ }
15
+
16
+ /* RECENT ACTIONS MODULE */
17
+
18
+ .module ul.actionlist {
19
+ margin-left: 0;
20
+ }
21
+
22
+ ul.actionlist li {
23
+ list-style-type: none;
24
+ }
@@ -0,0 +1,327 @@
1
+ @import url('widgets.css');
2
+
3
+ /* FORM ROWS */
4
+
5
+ .form-row {
6
+ overflow: hidden;
7
+ padding: 8px 12px;
8
+ font-size: 11px;
9
+ border-bottom: 1px solid #eee;
10
+ }
11
+
12
+ .form-row img, .form-row input {
13
+ vertical-align: middle;
14
+ }
15
+
16
+ form .form-row p {
17
+ padding-left: 0;
18
+ font-size: 11px;
19
+ }
20
+
21
+ /* FORM LABELS */
22
+
23
+ form h4 {
24
+ margin: 0 !important;
25
+ padding: 0 !important;
26
+ border: none !important;
27
+ }
28
+
29
+ label {
30
+ font-weight: normal !important;
31
+ color: #666;
32
+ font-size: 12px;
33
+ }
34
+
35
+ .required label, label.required {
36
+ font-weight: bold !important;
37
+ color: #333 !important;
38
+ }
39
+
40
+ /* RADIO BUTTONS */
41
+
42
+ form ul.radiolist li {
43
+ list-style-type: none;
44
+ }
45
+
46
+ form ul.radiolist label {
47
+ float: none;
48
+ display: inline;
49
+ }
50
+
51
+ form ul.inline {
52
+ margin-left: 0;
53
+ padding: 0;
54
+ }
55
+
56
+ form ul.inline li {
57
+ float: left;
58
+ padding-right: 7px;
59
+ }
60
+
61
+ /* ALIGNED FIELDSETS */
62
+
63
+ .aligned label {
64
+ display: block;
65
+ padding: 3px 10px 0 0;
66
+ float: left;
67
+ width: 8em;
68
+ }
69
+
70
+ .colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
71
+ width: 350px;
72
+ }
73
+
74
+ form .aligned p, form .aligned ul {
75
+ margin-left: 7em;
76
+ padding-left: 30px;
77
+ }
78
+
79
+ form .aligned table p {
80
+ margin-left: 0;
81
+ padding-left: 0;
82
+ }
83
+
84
+ form .aligned p.help {
85
+ padding-left: 38px;
86
+ }
87
+
88
+ .aligned .vCheckboxLabel {
89
+ float: none !important;
90
+ display: inline;
91
+ padding-left: 4px;
92
+ }
93
+
94
+ .colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
95
+ width: 610px;
96
+ }
97
+
98
+ .checkbox-row p.help {
99
+ margin-left: 0;
100
+ padding-left: 0 !important;
101
+ }
102
+
103
+ fieldset .field-box {
104
+ float: left;
105
+ margin-right: 20px;
106
+ }
107
+
108
+ /* WIDE FIELDSETS */
109
+
110
+ .wide label {
111
+ width: 15em !important;
112
+ }
113
+
114
+ form .wide p {
115
+ margin-left: 15em;
116
+ }
117
+
118
+ form .wide p.help {
119
+ padding-left: 38px;
120
+ }
121
+
122
+ .colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
123
+ width: 450px;
124
+ }
125
+
126
+ /* COLLAPSED FIELDSETS */
127
+
128
+ fieldset.collapsed * {
129
+ display: none;
130
+ }
131
+
132
+ fieldset.collapsed h2, fieldset.collapsed {
133
+ display: block !important;
134
+ }
135
+
136
+ fieldset.collapsed h2 {
137
+ background-image: url(../images/nav-bg.gif);
138
+ background-position: bottom left;
139
+ color: #999;
140
+ }
141
+
142
+ fieldset.collapsed .collapse-toggle {
143
+ padding: 3px 5px !important;
144
+ background: transparent;
145
+ display: inline !important;
146
+ }
147
+
148
+ /* MONOSPACE TEXTAREAS */
149
+
150
+ fieldset.monospace textarea {
151
+ font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
152
+ }
153
+
154
+ /* SUBMIT ROW */
155
+
156
+ .submit-row {
157
+ padding: 5px 7px;
158
+ text-align: right;
159
+ background: white url(../images/nav-bg.gif) 0 100% repeat-x;
160
+ border: 1px solid #ccc;
161
+ margin: 5px 0;
162
+ overflow: hidden;
163
+ }
164
+
165
+ .submit-row input {
166
+ margin: 0 0 0 5px;
167
+ }
168
+
169
+ .submit-row p {
170
+ margin: 0.3em;
171
+ }
172
+
173
+ .submit-row p.deletelink-box {
174
+ float: left;
175
+ }
176
+
177
+ .submit-row .deletelink {
178
+ background: url(../images/icon_deletelink.gif) 0 50% no-repeat;
179
+ padding-left: 14px;
180
+ }
181
+
182
+ /* CUSTOM FORM FIELDS */
183
+
184
+ .vSelectMultipleField {
185
+ vertical-align: top !important;
186
+ }
187
+
188
+ .vCheckboxField {
189
+ border: none;
190
+ }
191
+
192
+ .vDateField, .vTimeField {
193
+ margin-right: 2px;
194
+ }
195
+
196
+ .vURLField {
197
+ width: 30em;
198
+ }
199
+
200
+ .vLargeTextField, .vXMLLargeTextField {
201
+ width: 48em;
202
+ }
203
+
204
+ .flatpages-flatpage #id_content {
205
+ height: 40.2em;
206
+ }
207
+
208
+ .module table .vPositiveSmallIntegerField {
209
+ width: 2.2em;
210
+ }
211
+
212
+ .vTextField {
213
+ width: 20em;
214
+ }
215
+
216
+ .vIntegerField {
217
+ width: 5em;
218
+ }
219
+
220
+ .vForeignKeyRawIdAdminField {
221
+ width: 5em;
222
+ }
223
+
224
+ /* INLINES */
225
+
226
+ .inline-group {
227
+ padding: 0;
228
+ border: 1px solid #ccc;
229
+ margin: 10px 0;
230
+ }
231
+
232
+ .inline-group .aligned label {
233
+ width: 8em;
234
+ }
235
+
236
+ .inline-related {
237
+ position: relative;
238
+ }
239
+
240
+ .inline-related h3 {
241
+ margin: 0;
242
+ color: #666;
243
+ padding: 3px 5px;
244
+ font-size: 11px;
245
+ background: #e1e1e1 url(../images/nav-bg.gif) top left repeat-x;
246
+ border-bottom: 1px solid #ddd;
247
+ }
248
+
249
+ .inline-related h3 span.delete {
250
+ padding-left: 20px;
251
+ position: absolute;
252
+ top: 2px;
253
+ right: 10px;
254
+ }
255
+
256
+ .inline-related h3 span.delete label {
257
+ margin-left: 2px;
258
+ font-size: 11px;
259
+ }
260
+
261
+ .inline-related fieldset {
262
+ margin: 0;
263
+ background: #fff;
264
+ border: none;
265
+ }
266
+
267
+ .inline-related fieldset.module h3 {
268
+ margin: 0;
269
+ padding: 2px 5px 3px 5px;
270
+ font-size: 11px;
271
+ text-align: left;
272
+ font-weight: bold;
273
+ background: #bcd;
274
+ color: #fff;
275
+ }
276
+
277
+ .inline-related.tabular fieldset.module table {
278
+ width: 100%;
279
+ }
280
+
281
+ .last-related fieldset {
282
+ border: none;
283
+ }
284
+
285
+ .inline-group .tabular tr.has_original td {
286
+ padding-top: 2em;
287
+ }
288
+
289
+ .inline-group .tabular tr td.original {
290
+ padding: 2px 0 0 0;
291
+ width: 0;
292
+ _position: relative;
293
+ }
294
+
295
+ .inline-group .tabular th.original {
296
+ width: 0px;
297
+ padding: 0;
298
+ }
299
+
300
+ .inline-group .tabular td.original p {
301
+ position: absolute;
302
+ left: 0;
303
+ height: 1.1em;
304
+ padding: 2px 7px;
305
+ overflow: hidden;
306
+ font-size: 9px;
307
+ font-weight: bold;
308
+ color: #666;
309
+ _width: 700px;
310
+ }
311
+
312
+ .inline-group ul.tools {
313
+ padding: 0;
314
+ margin: 0;
315
+ list-style: none;
316
+ }
317
+
318
+ .inline-group ul.tools li {
319
+ display: inline;
320
+ padding: 0 5px;
321
+ }
322
+
323
+ .inline-group ul.tools a.add {
324
+ background: url(../images/icon_addlink.gif) 0 50% no-repeat;
325
+ padding-left: 14px;
326
+ }
327
+