hobo 0.6.4 → 0.7.0

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.
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
+