best_in_place 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.travis.yml +0 -1
  2. data/README.md +54 -46
  3. data/lib/assets/javascripts/best_in_place.js +42 -0
  4. data/lib/best_in_place.rb +4 -0
  5. data/lib/best_in_place/controller_extensions.rb +1 -1
  6. data/lib/best_in_place/display_methods.rb +24 -2
  7. data/lib/best_in_place/helper.rb +26 -9
  8. data/lib/best_in_place/utils.rb +1 -1
  9. data/lib/best_in_place/version.rb +1 -1
  10. data/spec/helpers/best_in_place_spec.rb +46 -1
  11. data/spec/integration/double_init_spec.rb +2 -1
  12. data/spec/integration/js_spec.rb +178 -8
  13. data/spec/support/retry_on_timeout.rb +10 -0
  14. data/test_app/app/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  15. data/test_app/app/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  16. data/test_app/app/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
  17. data/test_app/app/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  18. data/test_app/app/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  19. data/test_app/app/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  20. data/test_app/app/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  21. data/test_app/app/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  22. data/test_app/app/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  23. data/test_app/app/assets/images/ui-icons_222222_256x240.png +0 -0
  24. data/test_app/app/assets/images/ui-icons_228ef1_256x240.png +0 -0
  25. data/test_app/app/assets/images/ui-icons_ef8c08_256x240.png +0 -0
  26. data/test_app/app/assets/images/ui-icons_ffd27a_256x240.png +0 -0
  27. data/test_app/app/assets/images/ui-icons_ffffff_256x240.png +0 -0
  28. data/test_app/app/assets/javascripts/application.js +25 -55
  29. data/test_app/app/assets/stylesheets/jquery-ui-1.8.16.custom.css.erb +357 -0
  30. data/test_app/app/assets/stylesheets/{style.css → style.css.erb} +1 -1
  31. data/test_app/app/models/user.rb +1 -0
  32. data/test_app/app/views/layouts/application.html.erb +1 -1
  33. data/test_app/app/views/users/double_init.html.erb +7 -0
  34. data/test_app/app/views/users/show.html.erb +13 -0
  35. data/test_app/config/initializers/default_date_format.rb +2 -0
  36. data/test_app/db/migrate/20111217215935_add_birth_date_to_users.rb +5 -0
  37. data/test_app/db/migrate/20111224181356_add_money_to_user.rb +5 -0
  38. data/test_app/db/schema.rb +3 -1
  39. data/test_app/db/seeds.rb +4 -4
  40. metadata +34 -15
@@ -10,7 +10,8 @@ describe "Double initialization bug", :js => true do
10
10
  :zip => "25123",
11
11
  :country => "2",
12
12
  :receive_email => false,
13
- :description => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a lectus et lacus ultrices auctor. Morbi aliquet convallis tincidunt. Praesent enim libero, iaculis at commodo nec, fermentum a dolor. Quisque eget eros id felis lacinia faucibus feugiat et ante. Aenean justo nisi, aliquam vel egestas vel, porta in ligula. Etiam molestie, lacus eget tincidunt accumsan, elit justo rhoncus urna, nec pretium neque mi et lorem. Aliquam posuere, dolor quis pulvinar luctus, felis dolor tincidunt leo, eget pretium orci purus ac nibh. Ut enim sem, suscipit ac elementum vitae, sodales vel sem."
13
+ :description => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a lectus et lacus ultrices auctor. Morbi aliquet convallis tincidunt. Praesent enim libero, iaculis at commodo nec, fermentum a dolor. Quisque eget eros id felis lacinia faucibus feugiat et ante. Aenean justo nisi, aliquam vel egestas vel, porta in ligula. Etiam molestie, lacus eget tincidunt accumsan, elit justo rhoncus urna, nec pretium neque mi et lorem. Aliquam posuere, dolor quis pulvinar luctus, felis dolor tincidunt leo, eget pretium orci purus ac nibh. Ut enim sem, suscipit ac elementum vitae, sodales vel sem.",
14
+ :money => 100
14
15
  end
15
16
 
16
17
  it "should be able to change a boolean value" do
@@ -10,7 +10,9 @@ describe "JS behaviour", :js => true do
10
10
  :zip => "25123",
11
11
  :country => "2",
12
12
  :receive_email => false,
13
- :description => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a lectus et lacus ultrices auctor. Morbi aliquet convallis tincidunt. Praesent enim libero, iaculis at commodo nec, fermentum a dolor. Quisque eget eros id felis lacinia faucibus feugiat et ante. Aenean justo nisi, aliquam vel egestas vel, porta in ligula. Etiam molestie, lacus eget tincidunt accumsan, elit justo rhoncus urna, nec pretium neque mi et lorem. Aliquam posuere, dolor quis pulvinar luctus, felis dolor tincidunt leo, eget pretium orci purus ac nibh. Ut enim sem, suscipit ac elementum vitae, sodales vel sem."
13
+ :birth_date => Time.now.utc,
14
+ :description => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a lectus et lacus ultrices auctor. Morbi aliquet convallis tincidunt. Praesent enim libero, iaculis at commodo nec, fermentum a dolor. Quisque eget eros id felis lacinia faucibus feugiat et ante. Aenean justo nisi, aliquam vel egestas vel, porta in ligula. Etiam molestie, lacus eget tincidunt accumsan, elit justo rhoncus urna, nec pretium neque mi et lorem. Aliquam posuere, dolor quis pulvinar luctus, felis dolor tincidunt leo, eget pretium orci purus ac nibh. Ut enim sem, suscipit ac elementum vitae, sodales vel sem.",
15
+ :money => 100
14
16
  end
15
17
 
16
18
  describe "nil option" do
@@ -90,7 +92,7 @@ describe "JS behaviour", :js => true do
90
92
  end
91
93
  end
92
94
 
93
- it "should be able to use bil_select to change a select field" do
95
+ it "should be able to use bip_select to change a select field" do
94
96
  @user.save!
95
97
  visit user_path(@user)
96
98
  within("#country") do
@@ -105,6 +107,61 @@ describe "JS behaviour", :js => true do
105
107
  end
106
108
  end
107
109
 
110
+ it "should be able to use bip_text to change a date field" do
111
+ @user.save!
112
+ today = Time.now.utc.to_date
113
+ visit user_path(@user)
114
+ within("#birth_date") do
115
+ page.should have_content(today)
116
+ end
117
+
118
+ bip_text @user, :birth_date, (today - 1.days)
119
+
120
+ visit user_path(@user)
121
+ within("#birth_date") do
122
+ page.should have_content(today - 1.days)
123
+ end
124
+ end
125
+
126
+ it "should be able to use datepicker to change a date field" do
127
+ @user.save!
128
+ today = Time.now.utc.to_date
129
+ visit user_path(@user)
130
+ within("#birth_date") do
131
+ page.should have_content(today)
132
+ end
133
+
134
+ id = BestInPlace::Utils.build_best_in_place_id @user, :birth_date
135
+ page.execute_script <<-JS
136
+ $("##{id}").click()
137
+ $(".ui-datepicker-calendar tbody td").not(".ui-datepicker-other-month").first().click()
138
+ JS
139
+
140
+ visit user_path(@user)
141
+ within("#birth_date") do
142
+ page.should have_content(today.beginning_of_month)
143
+ end
144
+ end
145
+
146
+ it "should be able to modify the datepicker options, displaying the date with another format" do
147
+ @user.save!
148
+ today = Time.now.utc.to_date
149
+ visit user_path(@user)
150
+ within("#birth_date") do
151
+ page.should have_content(today)
152
+ end
153
+
154
+ id = BestInPlace::Utils.build_best_in_place_id @user, :birth_date
155
+ page.execute_script <<-JS
156
+ $("##{id}").click()
157
+ $(".ui-datepicker-calendar tbody td").not(".ui-datepicker-other-month").first().click()
158
+ JS
159
+
160
+ within("#birth_date") do
161
+ page.should have_content(today.beginning_of_month.strftime("%d-%m-%Y"))
162
+ end
163
+ end
164
+
108
165
  it "should be able to use bip_bool to change a boolean value" do
109
166
  @user.save!
110
167
  visit user_path(@user)
@@ -162,6 +219,20 @@ describe "JS behaviour", :js => true do
162
219
  end
163
220
  end
164
221
 
222
+ it "should fire off a callback when updating a field" do
223
+ @user.save!
224
+ visit user_path(@user)
225
+
226
+ id = BestInPlace::Utils.build_best_in_place_id @user, :last_name
227
+ page.execute_script <<-JS
228
+ $("##{id}").bind('best_in_place:update', function() { $('body').append('Last name was updated!') });
229
+ JS
230
+
231
+ page.should have_no_content('Last name was updated!')
232
+ bip_text @user, :last_name, 'Another'
233
+ page.should have_content('Last name was updated!')
234
+ end
235
+
165
236
  describe "display_as" do
166
237
  it "should render the address with a custom format" do
167
238
  @user.save!
@@ -195,17 +266,116 @@ describe "JS behaviour", :js => true do
195
266
  end
196
267
 
197
268
  it "should display the original content when editing the form" do
269
+ @user.save!
270
+ retry_on_timeout do
271
+ visit user_path(@user)
272
+
273
+ id = BestInPlace::Utils.build_best_in_place_id @user, :address
274
+ page.execute_script <<-JS
275
+ $("##{id}").click();
276
+ JS
277
+
278
+ text = page.find("##{id} input").value
279
+ text.should == "Via Roma 99"
280
+ end
281
+ end
282
+
283
+ it "should display the updated content after editing the field two consecutive times" do
284
+ @user.save!
285
+ retry_on_timeout do
286
+ visit user_path(@user)
287
+
288
+ bip_text @user, :address, "New address"
289
+
290
+ id = BestInPlace::Utils.build_best_in_place_id @user, :address
291
+ page.execute_script <<-JS
292
+ $("##{id}").click();
293
+ JS
294
+
295
+ text = page.find("##{id} input").value
296
+ text.should == "New address"
297
+ end
298
+ end
299
+ end
300
+
301
+ describe "display_with" do
302
+ it "should render the money using number_to_currency" do
303
+ @user.save!
304
+ visit user_path(@user)
305
+
306
+ within("#money") do
307
+ page.should have_content("$100.00")
308
+ end
309
+ end
310
+
311
+ it "should still show the custom format after an error" do
198
312
  @user.save!
199
313
  visit user_path(@user)
200
314
 
201
- id = BestInPlace::Utils.build_best_in_place_id @user, :address
202
- page.execute_script <<-JS
203
- $("##{id}").click();
204
- JS
315
+ bip_text @user, :money, "string"
316
+
317
+ page.should have_content("Money is not a number")
318
+
319
+ within("#money") do
320
+ page.should have_content("$100.00")
321
+ end
322
+ end
323
+
324
+ it "should show the new value using the helper after a successful update" do
325
+ @user.save!
326
+ visit user_path(@user)
327
+
328
+ bip_text @user, :money, "240"
329
+
330
+ within("#money") do
331
+ page.should have_content("$240.00")
332
+ end
333
+ end
334
+
335
+ it "should display the original content when editing the form" do
336
+ @user.save!
337
+ retry_on_timeout do
338
+ visit user_path(@user)
339
+
340
+ id = BestInPlace::Utils.build_best_in_place_id @user, :money
341
+ page.execute_script <<-JS
342
+ $("##{id}").click();
343
+ JS
205
344
 
206
- text = page.find("##{id} input").value
207
- text.should == "Via Roma 99"
345
+ text = page.find("##{id} input").value
346
+ text.should == "100.0"
347
+ end
208
348
  end
349
+
350
+ it "should display the updated content after editing the field two consecutive times" do
351
+ @user.save!
352
+
353
+ retry_on_timeout do
354
+ visit user_path(@user)
355
+
356
+ bip_text @user, :money, "40"
357
+
358
+ id = BestInPlace::Utils.build_best_in_place_id @user, :money
359
+ page.execute_script <<-JS
360
+ $("##{id}").click();
361
+ JS
362
+
363
+ text = page.find("##{id} input").value
364
+ text.should == "40"
365
+ end
366
+ end
367
+
368
+ it "should show the money in euros" do
369
+ @user.save!
370
+ visit double_init_user_path(@user)
371
+
372
+ within("#alt_money") { page.should have_content("€100.00") }
373
+
374
+ bip_text @user, :money, 58
375
+
376
+ within("#alt_money") { page.should have_content("€58.00") }
377
+ end
378
+
209
379
  end
210
380
  end
211
381
 
@@ -0,0 +1,10 @@
1
+ def retry_on_timeout(n = 3, &block)
2
+ block.call
3
+ rescue Capybara::TimeoutError, Capybara::ElementNotFound => e
4
+ if n > 0
5
+ puts "Catched error: #{e.message}. #{n-1} more attempts."
6
+ retry_on_timeout(n - 1, &block)
7
+ else
8
+ raise
9
+ end
10
+ end
@@ -1,65 +1,35 @@
1
1
  //= require jquery
2
+ //= require jquery-ui
2
3
  //= require best_in_place
3
4
  //= require jquery.purr
5
+ //= require_self
4
6
 
5
7
  $(document).ready(function() {
6
8
  /* Activating Best In Place */
7
9
  jQuery(".best_in_place").best_in_place();
8
10
  });
9
11
 
10
- function inspect(obj, maxLevels, level)
11
- {
12
- var str = '', type, msg;
13
-
14
- // Start Input Validations
15
- // Don't touch, we start iterating at level zero
16
- if(level == null) level = 0;
17
-
18
- // At least you want to show the first level
19
- if(maxLevels == null) maxLevels = 1;
20
- if(maxLevels < 1)
21
- return '<font color="red">Error: Levels number must be > 0</font>';
22
-
23
- // We start with a non null object
24
- if(obj == null)
25
- return '<font color="red">Error: Object <b>NULL</b></font>';
26
- // End Input Validations
27
-
28
- // Each Iteration must be indented
29
- str += '<ul>';
30
-
31
- // Start iterations for all objects in obj
32
- for(property in obj)
33
- {
34
- try
35
- {
36
- // Show "property" and "type property"
37
- type = typeof(obj[property]);
38
- str += '<li>(' + type + ') ' + property +
39
- ( (obj[property]==null)?(': <b>null</b>'):('')) + '</li>';
40
-
41
- // We keep iterating if this property is an Object, non null
42
- // and we are inside the required number of levels
43
- if((type == 'object') && (obj[property] != null) && (level+1 < maxLevels))
44
- str += inspect(obj[property], maxLevels, level+1);
45
- }
46
- catch(err)
47
- {
48
- // Is there some properties in obj we can't access? Print it red.
49
- if(typeof(err) == 'string') msg = err;
50
- else if(err.message) msg = err.message;
51
- else if(err.description) msg = err.description;
52
- else msg = 'Unknown';
53
-
54
- str += '<li><font color="red">(Error) ' + property + ': ' + msg +'</font></li>';
55
- }
56
- }
57
-
58
- // Close indent
59
- str += '</ul>';
60
-
61
- var container = $("<span class='flash-notice' style='top:1em'></span>").html(str);
62
- container.purr({isSticky:true});
12
+ /* Inicialització en català per a l'extenció 'calendar' per jQuery. */
13
+ /* Writers: (joan.leon@gmail.com). */
14
+ jQuery(function($){
15
+ $.datepicker.regional['ca'] = {
16
+ closeText: 'Tancar',
17
+ prevText: '&#x3c;Ant',
18
+ nextText: 'Seg&#x3e;',
19
+ currentText: 'Avui',
20
+ monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
21
+ 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
22
+ monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
23
+ 'Jul','Ago','Set','Oct','Nov','Des'],
24
+ dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
25
+ dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
26
+ dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
27
+ weekHeader: 'Sm',
28
+ dateFormat: 'dd-mm-yy',
29
+ firstDay: 1,
30
+ isRTL: false,
31
+ showMonthAfterYear: false,
32
+ yearSuffix: ''};
33
+ $.datepicker.setDefaults($.datepicker.regional['ca']);
34
+ });
63
35
 
64
- return str;
65
- }
@@ -0,0 +1,357 @@
1
+ /*
2
+ * jQuery UI CSS Framework 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Theming/API
9
+ */
10
+
11
+ /* Layout helpers
12
+ ----------------------------------*/
13
+ .ui-helper-hidden { display: none; }
14
+ .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
17
+ .ui-helper-clearfix { display: inline-block; }
18
+ /* required comment for clearfix to work in Opera \*/
19
+ * html .ui-helper-clearfix { height:1%; }
20
+ .ui-helper-clearfix { display:block; }
21
+ /* end clearfix */
22
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
23
+
24
+
25
+ /* Interaction Cues
26
+ ----------------------------------*/
27
+ .ui-state-disabled { cursor: default !important; }
28
+
29
+
30
+ /* Icons
31
+ ----------------------------------*/
32
+
33
+ /* states and images */
34
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
35
+
36
+
37
+ /* Misc visuals
38
+ ----------------------------------*/
39
+
40
+ /* Overlays */
41
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
42
+
43
+
44
+ /*
45
+ * jQuery UI CSS Framework 1.8.16
46
+ *
47
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
48
+ * Dual licensed under the MIT or GPL Version 2 licenses.
49
+ * http://jquery.org/license
50
+ *
51
+ * http://docs.jquery.com/UI/Theming/API
52
+ *
53
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
54
+ */
55
+
56
+
57
+ /* Component containers
58
+ ----------------------------------*/
59
+ .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
60
+ .ui-widget .ui-widget { font-size: 1em; }
61
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
62
+ .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(<%= asset_path "ui-bg_highlight-soft_100_eeeeee_1x100.png" %>) 50% top repeat-x; color: #333333; }
63
+ .ui-widget-content a { color: #333333; }
64
+ .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(<%= asset_path "ui-bg_gloss-wave_35_f6a828_500x100.png" %>) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
65
+ .ui-widget-header a { color: #ffffff; }
66
+
67
+ /* Interaction states
68
+ ----------------------------------*/
69
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(<%= asset_path "ui-bg_glass_100_f6f6f6_1x400.png" %>) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
70
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
71
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(<%= asset_path "ui-bg_glass_100_fdf5ce_1x400.png" %>) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
72
+ .ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
73
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(<%= asset_path "ui-bg_glass_65_ffffff_1x400.png" %>) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
74
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
75
+ .ui-widget :active { outline: none; }
76
+
77
+ /* Interaction Cues
78
+ ----------------------------------*/
79
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(<%= asset_path "ui-bg_highlight-soft_75_ffe45c_1x100.png" %>) 50% top repeat-x; color: #363636; }
80
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
81
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(<%= asset_path "ui-bg_diagonals-thick_18_b81900_40x40.png" %>) 50% 50% repeat; color: #ffffff; }
82
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
83
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
84
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
85
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
86
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
87
+
88
+ /* Icons
89
+ ----------------------------------*/
90
+
91
+ /* states and images */
92
+ .ui-icon { width: 16px; height: 16px; background-image: url(<%= asset_path "ui-icons_222222_256x240.png" %>); }
93
+ .ui-widget-content .ui-icon {background-image: url(<%= asset_path "ui-icons_222222_256x240.png" %>); }
94
+ .ui-widget-header .ui-icon {background-image: url(<%= asset_path "ui-icons_ffffff_256x240.png" %>); }
95
+ .ui-state-default .ui-icon { background-image: url(<%= asset_path "ui-icons_ef8c08_256x240.png" %>); }
96
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(<%= asset_path "ui-icons_ef8c08_256x240.png" %>); }
97
+ .ui-state-active .ui-icon {background-image: url(<%= asset_path "ui-icons_ef8c08_256x240.png" %>); }
98
+ .ui-state-highlight .ui-icon {background-image: url(<%= asset_path "ui-icons_228ef1_256x240.png" %>); }
99
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(<%= asset_path "ui-icons_ffd27a_256x240.png" %>); }
100
+
101
+ /* positioning */
102
+ .ui-icon-carat-1-n { background-position: 0 0; }
103
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
104
+ .ui-icon-carat-1-e { background-position: -32px 0; }
105
+ .ui-icon-carat-1-se { background-position: -48px 0; }
106
+ .ui-icon-carat-1-s { background-position: -64px 0; }
107
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
108
+ .ui-icon-carat-1-w { background-position: -96px 0; }
109
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
110
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
111
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
112
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
113
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
114
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
115
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
116
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
117
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
118
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
119
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
120
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
121
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
122
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
123
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
124
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
125
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
126
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
127
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
128
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
129
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
130
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
131
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
132
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
133
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
134
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
135
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
136
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
137
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
138
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
139
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
140
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
141
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
142
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
143
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
144
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
145
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
146
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
147
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
148
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
149
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
150
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
151
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
152
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
153
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
154
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
155
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
156
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
157
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
158
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
159
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
160
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
161
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
162
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
163
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
164
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
165
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
166
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
167
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
168
+ .ui-icon-extlink { background-position: -32px -80px; }
169
+ .ui-icon-newwin { background-position: -48px -80px; }
170
+ .ui-icon-refresh { background-position: -64px -80px; }
171
+ .ui-icon-shuffle { background-position: -80px -80px; }
172
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
173
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
174
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
175
+ .ui-icon-folder-open { background-position: -16px -96px; }
176
+ .ui-icon-document { background-position: -32px -96px; }
177
+ .ui-icon-document-b { background-position: -48px -96px; }
178
+ .ui-icon-note { background-position: -64px -96px; }
179
+ .ui-icon-mail-closed { background-position: -80px -96px; }
180
+ .ui-icon-mail-open { background-position: -96px -96px; }
181
+ .ui-icon-suitcase { background-position: -112px -96px; }
182
+ .ui-icon-comment { background-position: -128px -96px; }
183
+ .ui-icon-person { background-position: -144px -96px; }
184
+ .ui-icon-print { background-position: -160px -96px; }
185
+ .ui-icon-trash { background-position: -176px -96px; }
186
+ .ui-icon-locked { background-position: -192px -96px; }
187
+ .ui-icon-unlocked { background-position: -208px -96px; }
188
+ .ui-icon-bookmark { background-position: -224px -96px; }
189
+ .ui-icon-tag { background-position: -240px -96px; }
190
+ .ui-icon-home { background-position: 0 -112px; }
191
+ .ui-icon-flag { background-position: -16px -112px; }
192
+ .ui-icon-calendar { background-position: -32px -112px; }
193
+ .ui-icon-cart { background-position: -48px -112px; }
194
+ .ui-icon-pencil { background-position: -64px -112px; }
195
+ .ui-icon-clock { background-position: -80px -112px; }
196
+ .ui-icon-disk { background-position: -96px -112px; }
197
+ .ui-icon-calculator { background-position: -112px -112px; }
198
+ .ui-icon-zoomin { background-position: -128px -112px; }
199
+ .ui-icon-zoomout { background-position: -144px -112px; }
200
+ .ui-icon-search { background-position: -160px -112px; }
201
+ .ui-icon-wrench { background-position: -176px -112px; }
202
+ .ui-icon-gear { background-position: -192px -112px; }
203
+ .ui-icon-heart { background-position: -208px -112px; }
204
+ .ui-icon-star { background-position: -224px -112px; }
205
+ .ui-icon-link { background-position: -240px -112px; }
206
+ .ui-icon-cancel { background-position: 0 -128px; }
207
+ .ui-icon-plus { background-position: -16px -128px; }
208
+ .ui-icon-plusthick { background-position: -32px -128px; }
209
+ .ui-icon-minus { background-position: -48px -128px; }
210
+ .ui-icon-minusthick { background-position: -64px -128px; }
211
+ .ui-icon-close { background-position: -80px -128px; }
212
+ .ui-icon-closethick { background-position: -96px -128px; }
213
+ .ui-icon-key { background-position: -112px -128px; }
214
+ .ui-icon-lightbulb { background-position: -128px -128px; }
215
+ .ui-icon-scissors { background-position: -144px -128px; }
216
+ .ui-icon-clipboard { background-position: -160px -128px; }
217
+ .ui-icon-copy { background-position: -176px -128px; }
218
+ .ui-icon-contact { background-position: -192px -128px; }
219
+ .ui-icon-image { background-position: -208px -128px; }
220
+ .ui-icon-video { background-position: -224px -128px; }
221
+ .ui-icon-script { background-position: -240px -128px; }
222
+ .ui-icon-alert { background-position: 0 -144px; }
223
+ .ui-icon-info { background-position: -16px -144px; }
224
+ .ui-icon-notice { background-position: -32px -144px; }
225
+ .ui-icon-help { background-position: -48px -144px; }
226
+ .ui-icon-check { background-position: -64px -144px; }
227
+ .ui-icon-bullet { background-position: -80px -144px; }
228
+ .ui-icon-radio-off { background-position: -96px -144px; }
229
+ .ui-icon-radio-on { background-position: -112px -144px; }
230
+ .ui-icon-pin-w { background-position: -128px -144px; }
231
+ .ui-icon-pin-s { background-position: -144px -144px; }
232
+ .ui-icon-play { background-position: 0 -160px; }
233
+ .ui-icon-pause { background-position: -16px -160px; }
234
+ .ui-icon-seek-next { background-position: -32px -160px; }
235
+ .ui-icon-seek-prev { background-position: -48px -160px; }
236
+ .ui-icon-seek-end { background-position: -64px -160px; }
237
+ .ui-icon-seek-start { background-position: -80px -160px; }
238
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
239
+ .ui-icon-seek-first { background-position: -80px -160px; }
240
+ .ui-icon-stop { background-position: -96px -160px; }
241
+ .ui-icon-eject { background-position: -112px -160px; }
242
+ .ui-icon-volume-off { background-position: -128px -160px; }
243
+ .ui-icon-volume-on { background-position: -144px -160px; }
244
+ .ui-icon-power { background-position: 0 -176px; }
245
+ .ui-icon-signal-diag { background-position: -16px -176px; }
246
+ .ui-icon-signal { background-position: -32px -176px; }
247
+ .ui-icon-battery-0 { background-position: -48px -176px; }
248
+ .ui-icon-battery-1 { background-position: -64px -176px; }
249
+ .ui-icon-battery-2 { background-position: -80px -176px; }
250
+ .ui-icon-battery-3 { background-position: -96px -176px; }
251
+ .ui-icon-circle-plus { background-position: 0 -192px; }
252
+ .ui-icon-circle-minus { background-position: -16px -192px; }
253
+ .ui-icon-circle-close { background-position: -32px -192px; }
254
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
255
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
256
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
257
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
258
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
259
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
260
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
261
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
262
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
263
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
264
+ .ui-icon-circle-check { background-position: -208px -192px; }
265
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
266
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
267
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
268
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
269
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
270
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
271
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
272
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
273
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
274
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
275
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
276
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
277
+
278
+
279
+ /* Misc visuals
280
+ ----------------------------------*/
281
+
282
+ /* Corner radius */
283
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
284
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
285
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
286
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
287
+
288
+ /* Overlays */
289
+ .ui-widget-overlay { background: #666666 url(<%= asset_path "ui-bg_diagonals-thick_20_666666_40x40.png" %>) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
290
+ .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(<%= asset_path "ui-bg_flat_10_000000_40x100.png" %>) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
291
+ * jQuery UI Datepicker 1.8.16
292
+ *
293
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
294
+ * Dual licensed under the MIT or GPL Version 2 licenses.
295
+ * http://jquery.org/license
296
+ *
297
+ * http://docs.jquery.com/UI/Datepicker#theming
298
+ */
299
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
300
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
301
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
302
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
303
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
304
+ .ui-datepicker .ui-datepicker-next { right:2px; }
305
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
306
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
307
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
308
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
309
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
310
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
311
+ .ui-datepicker select.ui-datepicker-month,
312
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
313
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
314
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
315
+ .ui-datepicker td { border: 0; padding: 1px; }
316
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
317
+ .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
318
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
319
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
320
+
321
+ /* with multiple calendars */
322
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
323
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
324
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
325
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
326
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
327
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
328
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
329
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
330
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
331
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
332
+
333
+ /* RTL support */
334
+ .ui-datepicker-rtl { direction: rtl; }
335
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
336
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
337
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
338
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
339
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
340
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
341
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
342
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
343
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
344
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
345
+
346
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
347
+ .ui-datepicker-cover {
348
+ display: none; /*sorry for IE5*/
349
+ display/**/: block; /*sorry for IE5*/
350
+ position: absolute; /*must have*/
351
+ z-index: -1; /*must have*/
352
+ filter: mask(); /*must have*/
353
+ top: -4px; /*must have*/
354
+ left: -4px; /*must have*/
355
+ width: 200px; /*must have*/
356
+ height: 200px; /*must have*/
357
+ }