hobo 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/bin/hobo +4 -6
  2. data/hobo_files/plugin/CHANGES.txt +170 -0
  3. data/hobo_files/plugin/generators/hobo_front_controller/templates/index.dryml +9 -9
  4. data/hobo_files/plugin/generators/hobo_front_controller/templates/search.dryml +9 -9
  5. data/hobo_files/plugin/generators/hobo_migration/hobo_migration_generator.rb +7 -2
  6. data/hobo_files/plugin/generators/hobo_rapid/hobo_rapid_generator.rb +4 -4
  7. data/hobo_files/plugin/generators/hobo_rapid/templates/{hobo_rapid.css → hobo-rapid.css} +0 -0
  8. data/hobo_files/plugin/generators/hobo_rapid/templates/{hobo_rapid.js → hobo-rapid.js} +66 -47
  9. data/hobo_files/plugin/generators/hobo_rapid/templates/lowpro.js +130 -44
  10. data/hobo_files/plugin/generators/hobo_rapid/templates/{hobo_base.css → reset.css} +0 -5
  11. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/images/pencil.png +0 -0
  12. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/images/small_close.png +0 -0
  13. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/application.css +45 -0
  14. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/rapid_ui.css +167 -0
  15. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/views/application.dryml +10 -0
  16. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_bodytop.gif → bkg-bodytop.gif} +0 -0
  17. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_corner_01.gif → bkg-corner-01.gif} +0 -0
  18. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_corner_02.gif → bkg-corner-02.gif} +0 -0
  19. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_corner_03.gif → bkg-corner-03.gif} +0 -0
  20. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_corner_04.gif → bkg-corner-04.gif} +0 -0
  21. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_shadow_bottom.gif → bkg-shadow-bottom.gif} +0 -0
  22. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_shadow_left.gif → bkg-shadow-left.gif} +0 -0
  23. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_shadow_right.gif → bkg-shadow-right.gif} +0 -0
  24. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{bkg_shadow_top.gif → bkg-shadow-top.gif} +0 -0
  25. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{header_blue.gif → header-blue.gif} +0 -0
  26. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{header_dblue.gif → header-dblue.gif} +0 -0
  27. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{header_green.gif → header-green.gif} +0 -0
  28. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{header_purple.gif → header-purple.gif} +0 -0
  29. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{header_red.gif → header-red.gif} +0 -0
  30. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{txt_list_img_dblue.gif → txt-list-img-dblue.gif} +0 -0
  31. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{txt_list_img_green.gif → txt-list-img-green.gif} +0 -0
  32. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{txt_list_img_purple.gif → txt-list-img-purple.gif} +0 -0
  33. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{txt_list_img_red.gif → txt-list-img-red.gif} +0 -0
  34. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_corner_01.gif → window-corner-01.gif} +0 -0
  35. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_corner_02.gif → window-corner-02.gif} +0 -0
  36. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_corner_03.gif → window-corner-03.gif} +0 -0
  37. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_corner_04.gif → window-corner-04.gif} +0 -0
  38. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_shadow_bottom.gif → window-shadow-bottom.gif} +0 -0
  39. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_shadow_left.gif → window-shadow-left.gif} +0 -0
  40. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_shadow_right.gif → window-shadow-right.gif} +0 -0
  41. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/{window_shadow_top.gif → window-shadow-top.gif} +0 -0
  42. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/stylesheets/application.css +69 -69
  43. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/views/application.dryml +39 -53
  44. data/hobo_files/plugin/generators/hobo_user_model/templates/model.rb +1 -1
  45. data/hobo_files/plugin/lib/extensions.rb +0 -16
  46. data/hobo_files/plugin/lib/hobo/dryml/part_context.rb +1 -1
  47. data/hobo_files/plugin/lib/hobo/dryml/tag_parameters.rb +35 -0
  48. data/hobo_files/plugin/lib/hobo/dryml/taglib.rb +2 -2
  49. data/hobo_files/plugin/lib/hobo/dryml/template.rb +165 -236
  50. data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +158 -123
  51. data/hobo_files/plugin/lib/hobo/hobo_helper.rb +15 -4
  52. data/hobo_files/plugin/lib/hobo/model.rb +30 -11
  53. data/hobo_files/plugin/lib/hobo/model_controller.rb +13 -9
  54. data/hobo_files/plugin/lib/hobo/model_router.rb +27 -7
  55. data/hobo_files/plugin/lib/hobo/static_tags +0 -2
  56. data/hobo_files/plugin/lib/hobo/user.rb +3 -3
  57. data/hobo_files/plugin/lib/rexml.rb +10 -3
  58. data/hobo_files/plugin/tags/core.dryml +11 -16
  59. data/hobo_files/plugin/tags/rapid.dryml +147 -110
  60. data/hobo_files/plugin/tags/rapid_document_tags.dryml +22 -20
  61. data/hobo_files/plugin/tags/rapid_editing.dryml +41 -41
  62. data/hobo_files/plugin/tags/rapid_forms.dryml +51 -49
  63. data/hobo_files/plugin/tags/rapid_navigation.dryml +34 -34
  64. data/hobo_files/plugin/tags/rapid_pages.dryml +174 -174
  65. data/hobo_files/plugin/tags/rapid_plus.dryml +19 -19
  66. data/hobo_files/plugin/tags/rapid_support.dryml +5 -5
  67. data/hobo_files/plugin/tasks/dump_fixtures.rake +62 -53
  68. data/hobo_files/plugin/tasks/fix_dryml.rake +144 -0
  69. data/hobo_files/plugin/tasks/hobo_tasks.rake +0 -4
  70. metadata +43 -32
  71. data/hobo_files/plugin/lib/hobo/dryml/tag_module.rb +0 -9
@@ -1,25 +1,16 @@
1
1
  LowPro = {};
2
2
  LowPro.Version = '0.5';
3
+ LowPro.CompatibleWithPrototype = '1.6.0';
4
+
5
+ if (Prototype.Version != LowPro.CompatibleWithPrototype && console && console.warn)
6
+ console.warn("This version of Low Pro is tested with Prototype " + LowPro.CompatibleWithPrototype +
7
+ " it may not work as expected with this version (" + Prototype.Version + ")");
3
8
 
4
9
  if (!Element.addMethods)
5
10
  Element.addMethods = function(o) { Object.extend(Element.Methods, o) };
6
11
 
7
12
  // Simple utility methods for working with the DOM
8
- DOM = {
9
- prependChild : function(element, node) {
10
- $(element).insertBefore(node, element.firstChild);
11
- },
12
- appendChildren : function(element, children) {
13
- element = $(element);
14
- if (!(children instanceof Array))
15
- children = Array.prototype.slice.call(arguments, 1);
16
- children.each(function(child) { element.appendChild(child) });
17
- return children;
18
- }
19
- };
20
-
21
- // Add them to the element mixin
22
- Element.addMethods(DOM);
13
+ DOM = {};
23
14
 
24
15
  // DOMBuilder for prototype
25
16
  DOM.Builder = {
@@ -80,7 +71,7 @@ DOM.Builder.fromHTML = function(html) {
80
71
  // Event.onReady(callbackFunction);
81
72
  Object.extend(Event, {
82
73
  onReady : function(f) {
83
- document.observe('contentloaded', f);
74
+ document.observe('dom:loaded', f);
84
75
  }
85
76
  });
86
77
 
@@ -119,7 +110,7 @@ Event.addBehavior = function(rules) {
119
110
 
120
111
  Object.extend(Event.addBehavior, {
121
112
  rules : {}, cache : [],
122
- reassignAfterAjax : true,
113
+ reassignAfterAjax : false,
123
114
  autoTrigger : true,
124
115
 
125
116
  load : function(rules) {
@@ -130,6 +121,7 @@ Object.extend(Event.addBehavior, {
130
121
  var parts = sel.split(/:(?=[a-z]+$)/), css = parts[0], event = parts[1];
131
122
  $$(css).each(function(element) {
132
123
  if (event) {
124
+ observer = Event.addBehavior._wrapObserver(observer);
133
125
  $(element).observe(event, observer);
134
126
  Event.addBehavior.cache.push([element, event, observer]);
135
127
  } else {
@@ -151,6 +143,12 @@ Object.extend(Event.addBehavior, {
151
143
  Event.stopObserving.apply(Event, c);
152
144
  });
153
145
  this.cache = [];
146
+ },
147
+
148
+ _wrapObserver: function(observer) {
149
+ return function(event) {
150
+ if (observer.call(this, event) === false) event.stop();
151
+ }
154
152
  }
155
153
 
156
154
  });
@@ -158,7 +156,7 @@ Object.extend(Event.addBehavior, {
158
156
  Event.observe(window, 'unload', Event.addBehavior.unload.bind(Event.addBehavior));
159
157
 
160
158
  // A silly Prototype style shortcut for the reckless
161
- $$$ = Event.addBehavior;
159
+ $$$ = Event.addBehavior.bind(Event);
162
160
 
163
161
  // Behaviors can be bound to elements to provide an object orientated way of controlling elements
164
162
  // and their behavior. Use Behavior.create() to make a new behavior class then use attach() to
@@ -186,42 +184,130 @@ $$$ = Event.addBehavior;
186
184
  //
187
185
  // Each behaviour has a collection of all its instances in Behavior.instances
188
186
  //
189
- Behavior = {
190
- create : function(members) {
191
- var behavior = function() {
192
- var behavior = arguments.callee;
193
- if (this == window || $H(this).values().include(behavior)) {
194
- var args = $A(arguments);
195
-
196
- return function() {
197
- var initArgs = [this].concat(args);
198
- behavior.attach.apply(behavior, initArgs);
199
- };
200
- } else {
201
- var args = (arguments.length == 2 && arguments[1] instanceof Array) ?
202
- arguments[1] : Array.prototype.slice.call(arguments, 1);
203
-
204
- this.element = $(arguments[0]);
205
- this.initialize.apply(this, args);
206
- behavior._bindEvents(this);
207
- behavior.instances.push(this);
208
- }
209
- };
210
- behavior.prototype.initialize = Prototype.K;
211
- Object.extend(behavior.prototype, members);
212
- Object.extend(behavior, Behavior.ClassMethods);
187
+ var Behavior = {
188
+ create: function() {
189
+ var parent = null, properties = $A(arguments);
190
+ if (Object.isFunction(properties[0]))
191
+ parent = properties.shift();
192
+
193
+ var behavior = function() {
194
+ var behavior = arguments.callee;
195
+ if (!this.initialize) {
196
+ var args = $A(arguments);
197
+
198
+ return function() {
199
+ var initArgs = [this].concat(args);
200
+ behavior.attach.apply(behavior, initArgs);
201
+ };
202
+ } else {
203
+ var args = (arguments.length == 2 && arguments[1] instanceof Array) ?
204
+ arguments[1] : Array.prototype.slice.call(arguments, 1);
205
+
206
+ this.element = $(arguments[0]);
207
+ this.initialize.apply(this, args);
208
+ behavior._bindEvents(this);
209
+ behavior.instances.push(this);
210
+ }
211
+ };
212
+
213
+ Object.extend(behavior, Class.Methods);
214
+ Object.extend(behavior, Behavior.Methods);
215
+ behavior.superclass = parent;
216
+ behavior.subclasses = [];
213
217
  behavior.instances = [];
218
+
219
+ if (parent) {
220
+ var subclass = function() { };
221
+ subclass.prototype = parent.prototype;
222
+ behavior.prototype = new subclass;
223
+ parent.subclasses.push(behavior);
224
+ }
225
+
226
+ for (var i = 0; i < properties.length; i++)
227
+ behavior.addMethods(properties[i]);
228
+
229
+ if (!behavior.prototype.initialize)
230
+ behavior.prototype.initialize = Prototype.emptyFunction;
231
+
232
+ behavior.prototype.constructor = behavior;
233
+
214
234
  return behavior;
215
235
  },
216
- ClassMethods : {
236
+ Methods : {
217
237
  attach : function(element) {
218
238
  return new this(element, Array.prototype.slice.call(arguments, 1));
219
239
  },
220
240
  _bindEvents : function(bound) {
221
241
  for (var member in bound)
222
242
  if (member.match(/^on(.+)/) && typeof bound[member] == 'function')
223
- bound.element.observe(RegExp.$1, bound[member].bindAsEventListener(bound));
243
+ bound.element.observe(RegExp.$1, Event.addBehavior._wrapObserver(bound[member].bindAsEventListener(bound)));
224
244
  }
225
245
  }
226
246
  };
227
247
 
248
+ Remote = Behavior.create({
249
+ initialize: function(options) {
250
+ if (this.element.nodeName == 'FORM') new Remote.Form(this.element, options);
251
+ else new Remote.Link(this.element, options);
252
+ }
253
+ });
254
+
255
+ Remote.Base = {
256
+ initialize : function(options) {
257
+ this.options = Object.extend({
258
+ evaluateScripts : true
259
+ }, options || {});
260
+ },
261
+ _makeRequest : function(options) {
262
+ if (options.update) new Ajax.Updater(options.update, options.url, options);
263
+ else new Ajax.Request(options.url, options);
264
+ return false;
265
+ }
266
+ }
267
+
268
+ Remote.Link = Behavior.create(Remote.Base, {
269
+ onclick : function() {
270
+ var options = Object.extend({ url : this.element.href, method : 'get' }, this.options);
271
+ return this._makeRequest(options);
272
+ }
273
+ });
274
+
275
+
276
+ Remote.Form = Behavior.create(Remote.Base, {
277
+ onclick : function(e) {
278
+ var sourceElement = e.element();
279
+
280
+ if (sourceElement.nodeName.toLowerCase() == 'input' &&
281
+ sourceElement.type == 'submit')
282
+ this._submitButton = sourceElement;
283
+ },
284
+ onsubmit : function() {
285
+ var options = Object.extend({
286
+ url : this.element.action,
287
+ method : this.element.method || 'get',
288
+ parameters : this.element.serialize({ submit: this._submitButton.name })
289
+ }, this.options);
290
+ this._submitButton = null;
291
+ return this._makeRequest(options);
292
+ }
293
+ });
294
+
295
+ Observed = Behavior.create({
296
+ initialize : function(callback, options) {
297
+ this.callback = callback.bind(this);
298
+ this.options = options || {};
299
+ this.observer = (this.element.nodeName == 'FORM') ? this._observeForm() : this._observeField();
300
+ },
301
+ stop: function() {
302
+ this.observer.stop();
303
+ },
304
+ _observeForm: function() {
305
+ return (this.options.frequency) ? new Form.Observer(this.element, this.options.frequency, this.callback) :
306
+ new Form.EventObserver(this.element, this.callback);
307
+ },
308
+ _observeField: function() {
309
+ return (this.options.frequency) ? new Form.Element.Observer(this.element, this.options.frequency, this.callback) :
310
+ new Form.Element.EventObserver(this.element, this.callback);
311
+ }
312
+ });
313
+
@@ -29,9 +29,6 @@ body {
29
29
  color: black;
30
30
  background: white;
31
31
  }
32
- ol, ul {
33
- list-style: none;
34
- }
35
32
 
36
33
  /* Tables still need 'cellspacing="0"' in the markup. */
37
34
  table {
@@ -63,5 +60,3 @@ h3 { font-size: 18px;}
63
60
  h4 { font-size: 14px;}
64
61
  h5 { font-size: 12px;}
65
62
  h6 { font-size: 10px;}
66
-
67
- ul, ol { list-style: none;}
@@ -0,0 +1,45 @@
1
+ html {background: #666;}
2
+ body {
3
+ width: 600px; margin: 0 auto; background: white;
4
+ font: 14px "Lucida Grande", Arial, sans-serif;
5
+ line-height: 21px; padding-bottom: 10px; margin-bottom: 20px;
6
+ }
7
+ h1, h2, h3 {font-family: "Rockwell", "Trebuchet MS", "Arial", sans-serif;}
8
+ h1 {line-height: 54px;}
9
+ h2 {line-height: 42px;}
10
+ h3 {line-height: 27px;}
11
+
12
+ a {
13
+ text-decoration: none; color: black;
14
+ border-bottom: 1px dotted #aaa;
15
+ }
16
+ a:hover {border-bottom: 1px dotted #222;}
17
+
18
+ .content_header, .content_body {margin: 30px;}
19
+ .article { margin: 20px 0; border-top: 1px dotted #ccc;}
20
+
21
+ /***********/
22
+
23
+ .page_header .nav {color: white; padding-bottom: 8px; background: black; overflow: hidden; height: 100%;}
24
+ .page_header .nav li {float: left; padding-right: 20px;}
25
+ .page_header .nav a {border-bottom: 1px solid black; color: white;}
26
+ .page_header .nav a:hover {border-bottom: 1px dotted #ddd;}
27
+ .main_nav {float: right;}
28
+ .main_nav li {line-height: 36px;}
29
+ .main_nav a {
30
+ font: bold 16px "Myriad Pro", Arial, sans-serif;
31
+ }
32
+ .account_nav {
33
+ clear: both; float: right;
34
+ font: normal 12px "Myriad Pro", Arial, sans-serif;
35
+ }
36
+ .account_nav a {font-weight: bold;}
37
+
38
+ /***********/
39
+
40
+ .intro {
41
+ background: #eee; color: #222; padding: 10px 20px;
42
+ }
43
+ .intro h2 {
44
+ font-size: 18px; line-height: 27px;
45
+ }
@@ -0,0 +1,167 @@
1
+ .flash {
2
+ background: #92ab6e;
3
+ padding: 10px;
4
+ margin-top: 5px;
5
+ border-top: 2px solid #829862;
6
+ border-bottom: 2px solid #829862;
7
+ }
8
+
9
+ input.text, input.string, input.email_address, input.password, textarea {
10
+ border: 2px solid #444; padding: 1px;
11
+ }
12
+ input.file_upload {
13
+ background: #070707; border: 1px dotted #666;
14
+ color: white;
15
+ }
16
+
17
+ .button {
18
+ padding: 4px 8px;
19
+ color: white; /* background: #292929; border: 2px solid #444;*/ background: black; border: 1px solid #666;
20
+ font: 12px "Lucida Grande", Arial, sans-serif;
21
+ }
22
+ .button:hover {cursor: pointer;}
23
+ /*.delete_button {
24
+ border: none; background: url(../images/small_close.png) center bottom no-repeat;
25
+ width: 14px; height: 15px;
26
+ margin: 0; padding: 0; margin-left: 5px;
27
+ overflow: hidden; text-indent: -300px;
28
+ }*/
29
+
30
+ .in_place_textfield_bhv, .in_place_textarea_bhv, .in_place_html_textarea_bhv {
31
+ /* background: #070707; border: 1px dotted #666;*/
32
+ padding: 0 3px;
33
+ background-image: url(../images/pencil.png);
34
+ background-position: top right;
35
+ background-repeat: no-repeat;
36
+ }
37
+ .in_place_textfield_bhv {
38
+ padding-right: 20px;
39
+ }
40
+
41
+ .inplaceeditor-form input, .inplaceeditor-form textarea,
42
+ table.new_record textarea, table.new_record input {
43
+ background: #070707; border: 1px dotted #666;
44
+ padding: 3px; color: white; width: 100%;
45
+ }
46
+ .inplaceeditor-form, .inplaceeditor-form input {
47
+ display: inline;
48
+ }
49
+
50
+ .login-table, .login-table td {border: none;}
51
+ .login_table td.field_label { vertical-align: middle; }
52
+ .login-table tr td {
53
+ padding-bottom: 15px;
54
+ padding-right: 10px;
55
+ }
56
+ #login-form {
57
+ padding-top: 20px;
58
+ }
59
+ #login-form .submit_button {margin-left: 68px;}
60
+
61
+ /**** Admin ****/
62
+
63
+ .admin-banner {
64
+ background: #9d0018; border-top: 2px solid #7a0013; border-bottom: 2px solid #7a0013;
65
+ padding: 2px 0;
66
+ margin: 10px 0;
67
+ }
68
+ .admin-banner p, .admin-banner span {
69
+ font: 12px "Lucida Grande", Arial, sans-serif;
70
+ }
71
+ .admin-banner p, .admin-banner div {margin-bottom: 0;}
72
+ .admin-banner a {color: white; text-decoration: none; padding: 1px 5px; font-weight: bold;}
73
+ .admin-banner a:hover {color: #9d0018; background: white;}
74
+ .admin-banner .logged-in {
75
+ float: right;
76
+ }
77
+
78
+ /* rails error message */
79
+ .error_messages {
80
+ font-family: "Lucida Grande", arial, sans-serif;
81
+ background: #9d0018;
82
+ border: 1px solid #7a0013;
83
+ padding: 15px 30px;
84
+ color: white;
85
+ margin-bottom: 20px;
86
+ }
87
+ .error_messages h2 {
88
+ text-transform: none;
89
+ letter-spacing: normal;
90
+ color: white;
91
+ margin-bottom: 10px;
92
+ }
93
+ .error_messages li {
94
+ margin-left: 20px;
95
+ }
96
+
97
+ /********* everything below here came from hobo_rapid.css, needs looking at ********/
98
+
99
+ /**** Default styling for Rapid ****/
100
+
101
+ #ajax_progress {
102
+ color: grey;
103
+ float: right;
104
+ margin: 20px;
105
+ position: fixed;
106
+ background: white;
107
+ font-family: Tahoma "sans serif";
108
+ display: none;
109
+ z-index: 10;
110
+ }
111
+
112
+ #ajax_progress div {
113
+ border: 1px dashed grey;
114
+ margin: 10px;
115
+ padding: 3px;
116
+ /* padding-top: -15px;*/
117
+ }
118
+
119
+ #ajax_progress img {
120
+ padding-left: 6px;
121
+ vertical-align: middle;
122
+ }
123
+
124
+
125
+ /* Scriptaculous Autocompleter ---*/
126
+
127
+ div.completions_popup {
128
+ position:absolute;
129
+ width:250px;
130
+ background-color:white;
131
+ border:1px solid #888;
132
+ margin:0px;
133
+ padding:0px;
134
+ }
135
+ div.completions_popup ul {
136
+ list-style-type:none;
137
+ margin:0px;
138
+ padding:0px;
139
+ }
140
+ div.completions_popup ul li.selected { background-color: #ffb;}
141
+ div.completions_popup ul li {
142
+ list-style-type:none;
143
+ display:block;
144
+ margin:0;
145
+ padding:2px;
146
+ cursor:pointer;
147
+ }
148
+
149
+
150
+ .field_list { width:95%; }
151
+ .field_list td { padding: 5px; vertical-align: middle; }
152
+ .field_list td.field_label {
153
+ text-align: left; width: 1px; white-space: nowrap; vertical-align: top;
154
+ padding-top: 10px; padding-bottom: 10px;
155
+ }
156
+ /*.field_list input[type=text] { width: 100%; }*/
157
+ /*.field_list input, .field_list textarea { margin: -2px 0 0 0; }*/
158
+ .field_list textarea { width: 100%; margin: 0; }
159
+ /*table.login-table input {font-size: 16px; color: black;}*/
160
+
161
+ /*input[type=text].wide { width: 100%; }*/
162
+ textarea { height: 200px; }
163
+ textarea.wide { width: 100%; }
164
+ textarea.tall { height: 350px; }
165
+
166
+ .field_list input.percentage {width: 25px; display: inline; margin-right: 5px; padding: 1px 3px;}
167
+