refinerycms-sl-calendar 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/app/controllers/refinery/calendar/admin/events_controller.rb +20 -0
  2. data/app/controllers/refinery/calendar/admin/venues_controller.rb +15 -0
  3. data/app/controllers/refinery/calendar/events_controller.rb +38 -0
  4. data/app/helpers/refinery/calendar/calendar_helper.rb +246 -0
  5. data/app/models/refinery/calendar/event.rb +60 -0
  6. data/app/models/refinery/calendar/venue.rb +17 -0
  7. data/app/views/refinery/calendar/admin/events/_actions.html.erb +26 -0
  8. data/app/views/refinery/calendar/admin/events/_event.html.erb +28 -0
  9. data/app/views/refinery/calendar/admin/events/_events.html.erb +2 -0
  10. data/app/views/refinery/calendar/admin/events/_form.html.erb +86 -0
  11. data/app/views/refinery/calendar/admin/events/_records.html.erb +18 -0
  12. data/app/views/refinery/calendar/admin/events/_sortable_list.html.erb +5 -0
  13. data/app/views/refinery/calendar/admin/events/edit.html.erb +1 -0
  14. data/app/views/refinery/calendar/admin/events/index.html.erb +8 -0
  15. data/app/views/refinery/calendar/admin/events/new.html.erb +1 -0
  16. data/app/views/refinery/calendar/admin/shared/_links.html.erb +8 -0
  17. data/app/views/refinery/calendar/admin/shared/_locale_picker.html.erb +11 -0
  18. data/app/views/refinery/calendar/admin/venues/_actions.html.erb +26 -0
  19. data/app/views/refinery/calendar/admin/venues/_form.html.erb +36 -0
  20. data/app/views/refinery/calendar/admin/venues/_records.html.erb +18 -0
  21. data/app/views/refinery/calendar/admin/venues/_sortable_list.html.erb +5 -0
  22. data/app/views/refinery/calendar/admin/venues/_venue.html.erb +23 -0
  23. data/app/views/refinery/calendar/admin/venues/_venues.html.erb +2 -0
  24. data/app/views/refinery/calendar/admin/venues/edit.html.erb +1 -0
  25. data/app/views/refinery/calendar/admin/venues/index.html.erb +8 -0
  26. data/app/views/refinery/calendar/admin/venues/new.html.erb +1 -0
  27. data/app/views/refinery/calendar/events/_event.html.erb +8 -0
  28. data/app/views/refinery/calendar/events/index.html.erb +15 -0
  29. data/app/views/refinery/calendar/events/show.html.erb +28 -0
  30. data/app/views/sitemap/index.xml.builder +25 -0
  31. data/config/database.yml.mysql +20 -0
  32. data/config/database.yml.postgresql +58 -0
  33. data/config/database.yml.sqlite3 +18 -0
  34. data/config/initializers/refinery/authentication.rb +4 -0
  35. data/config/initializers/refinery/core.rb +50 -0
  36. data/config/initializers/refinery/images.rb +44 -0
  37. data/config/initializers/refinery/pages.rb +52 -0
  38. data/config/initializers/refinery/resources.rb +26 -0
  39. data/config/locales/en.yml +61 -0
  40. data/config/locales/es.yml +59 -0
  41. data/config/locales/fr.yml +57 -0
  42. data/config/locales/nb.yml +59 -0
  43. data/config/locales/nl.yml +59 -0
  44. data/config/routes.rb +31 -0
  45. data/db/migrate/1_create_calendar_events.rb +34 -0
  46. data/db/migrate/2_create_calendar_venues.rb +29 -0
  47. data/db/migrate/3_create_calendar_events_translations.rb +16 -0
  48. data/db/migrate/4_create_calendar_venues_translations.rb +13 -0
  49. data/db/seeds.rb +26 -0
  50. data/lib/generators/refinery/calendar_generator.rb +19 -0
  51. data/lib/refinery/events/engine.rb +26 -0
  52. data/lib/refinery/events.rb +21 -0
  53. data/lib/refinery/venues/engine.rb +14 -0
  54. data/lib/refinery/venues.rb +21 -0
  55. data/lib/refinerycms-calendar.rb +2 -0
  56. data/lib/tasks/refinery/calendar.rake +13 -0
  57. data/readme.md +23 -0
  58. data/vendor/assets/images/chosen-sprite.png +0 -0
  59. data/vendor/assets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  60. data/vendor/assets/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  61. data/vendor/assets/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  62. data/vendor/assets/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  63. data/vendor/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  64. data/vendor/assets/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  65. data/vendor/assets/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  66. data/vendor/assets/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  67. data/vendor/assets/images/ui-icons_217bc0_256x240.png +0 -0
  68. data/vendor/assets/images/ui-icons_2e83ff_256x240.png +0 -0
  69. data/vendor/assets/images/ui-icons_469bdd_256x240.png +0 -0
  70. data/vendor/assets/images/ui-icons_6da8d5_256x240.png +0 -0
  71. data/vendor/assets/images/ui-icons_cd0a0a_256x240.png +0 -0
  72. data/vendor/assets/images/ui-icons_d8e7f3_256x240.png +0 -0
  73. data/vendor/assets/images/ui-icons_f9bd01_256x240.png +0 -0
  74. data/vendor/assets/javascripts/chosen.jquery.min.js +10 -0
  75. data/vendor/assets/javascripts/jquery.ui.timepicker.addon.js +1326 -0
  76. data/vendor/assets/javascripts/refinery/calendar.js.coffee +7 -0
  77. data/vendor/assets/stylesheets/chosen.css +372 -0
  78. data/vendor/assets/stylesheets/jquery-ui.css +377 -0
  79. data/vendor/assets/stylesheets/refinery/calendar.css.scss +22 -0
  80. metadata +158 -0
@@ -0,0 +1,59 @@
1
+ nb:
2
+ refinery:
3
+ plugins:
4
+ venues:
5
+ title: Venues
6
+ events:
7
+ title: Events
8
+ calendar:
9
+ admin:
10
+ venues:
11
+ actions:
12
+ create_new: Lag en ny Venue
13
+ reorder: Endre rekkefølgen på Venues
14
+ reorder_done: Ferdig å endre rekkefølgen Venues
15
+ records:
16
+ title: Venues
17
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
18
+ no_items_yet: Det er ingen Venues enda. Klikk på "Lag en ny Venue" for
19
+ å legge til din første venue.
20
+ venue:
21
+ view_live_html: Vis hvordan denne venue ser ut offentlig <br/><em>(åpner
22
+ i et nytt vindu)</em>
23
+ edit: Rediger denne venue
24
+ delete: Fjern denne venue permanent
25
+ events:
26
+ actions:
27
+ create_new: Lag en ny Event
28
+ reorder: Endre rekkefølgen på Events
29
+ reorder_done: Ferdig å endre rekkefølgen Events
30
+ records:
31
+ title: Events
32
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
33
+ no_items_yet: Det er ingen Events enda. Klikk på "Lag en ny Event" for
34
+ å legge til din første event.
35
+ event:
36
+ view_live_html: Vis hvordan denne event ser ut offentlig <br/><em>(åpner
37
+ i et nytt vindu)</em>
38
+ edit: Rediger denne event
39
+ delete: Fjern denne event permanent
40
+ venues:
41
+ show:
42
+ other: Andre Venues
43
+ events:
44
+ show:
45
+ other: Andre Events
46
+ activerecord:
47
+ attributes:
48
+ refinery/calendar/venue:
49
+ name: Name
50
+ address: Address
51
+ url: Url
52
+ phone: Phone
53
+ refinery/calendar/event:
54
+ title: Title
55
+ from: From
56
+ to: To
57
+ registration_link: Registration Link
58
+ excerpt: Excerpt
59
+ description: Description
@@ -0,0 +1,59 @@
1
+ nl:
2
+ refinery:
3
+ plugins:
4
+ venues:
5
+ title: Venues
6
+ events:
7
+ title: Events
8
+ calendar:
9
+ admin:
10
+ venues:
11
+ actions:
12
+ create_new: Maak een nieuwe Venue
13
+ reorder: Wijzig de volgorde van de Venues
14
+ reorder_done: Klaar met het wijzingen van de volgorde van de Venues
15
+ records:
16
+ title: Venues
17
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
18
+ no_items_yet: Er zijn nog geen Venues. Druk op 'Maak een nieuwe Venue'
19
+ om de eerste aan te maken.
20
+ venue:
21
+ view_live_html: Bekijk deze venue op de website <br/><em>(opent een nieuw
22
+ venster)</em>
23
+ edit: Bewerk deze venue
24
+ delete: Verwijder deze venue voor eeuwig
25
+ events:
26
+ actions:
27
+ create_new: Maak een nieuwe Event
28
+ reorder: Wijzig de volgorde van de Events
29
+ reorder_done: Klaar met het wijzingen van de volgorde van de Events
30
+ records:
31
+ title: Events
32
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
33
+ no_items_yet: Er zijn nog geen Events. Druk op 'Maak een nieuwe Event'
34
+ om de eerste aan te maken.
35
+ event:
36
+ view_live_html: Bekijk deze event op de website <br/><em>(opent een nieuw
37
+ venster)</em>
38
+ edit: Bewerk deze event
39
+ delete: Verwijder deze event voor eeuwig
40
+ venues:
41
+ show:
42
+ other: Andere Venues
43
+ events:
44
+ show:
45
+ other: Andere Events
46
+ activerecord:
47
+ attributes:
48
+ refinery/calendar/venue:
49
+ name: Name
50
+ address: Address
51
+ url: Url
52
+ phone: Phone
53
+ refinery/calendar/event:
54
+ title: Title
55
+ from: From
56
+ to: To
57
+ registration_link: Registration Link
58
+ excerpt: Excerpt
59
+ description: Description
data/config/routes.rb ADDED
@@ -0,0 +1,31 @@
1
+ Refinery::Core::Engine.routes.append do
2
+
3
+ # Frontend routes
4
+ namespace :calendar do
5
+ get 'events/archive' => 'events#archive'
6
+ resources :events, :only => [:index, :show]
7
+ end
8
+
9
+ # Admin routes
10
+ namespace :calendar, :path => '' do
11
+ namespace :admin, :path => 'refinery/calendar' do
12
+ resources :events, :except => :show do
13
+ collection do
14
+ post :update_positions
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # Admin routes
21
+ namespace :calendar, :path => '' do
22
+ namespace :admin, :path => 'refinery/calendar' do
23
+ resources :venues, :except => :show do
24
+ collection do
25
+ post :update_positions
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,34 @@
1
+ class CreateCalendarEvents < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_calendar_events do |t|
5
+ t.string :title
6
+ t.date :from
7
+ t.date :to
8
+ t.string :registration_link
9
+ t.string :excerpt
10
+ t.text :description
11
+ t.integer :position
12
+ t.boolean :featured
13
+ t.string :slug
14
+ t.integer :venue_id
15
+
16
+ t.timestamps
17
+ end
18
+
19
+ end
20
+
21
+ def down
22
+ if defined?(::Refinery::UserPlugin)
23
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-calendar"})
24
+ end
25
+
26
+ if defined?(::Refinery::Page)
27
+ ::Refinery::Page.delete_all({:link_url => "/calendar/events"})
28
+ end
29
+
30
+ drop_table :refinery_calendar_events
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,29 @@
1
+ class CreateCalendarVenues < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_calendar_venues do |t|
5
+ t.string :name
6
+ t.string :address
7
+ t.string :url
8
+ t.string :phone
9
+ t.integer :position
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ end
15
+
16
+ def down
17
+ if defined?(::Refinery::UserPlugin)
18
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-calendar"})
19
+ end
20
+
21
+ if defined?(::Refinery::Page)
22
+ ::Refinery::Page.delete_all({:link_url => "/calendar/venues"})
23
+ end
24
+
25
+ drop_table :refinery_calendar_venues
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCalendarEventsTranslations < ActiveRecord::Migration
2
+ def up
3
+ Refinery::Calendar::Event.create_translation_table!({
4
+ :title => :string,
5
+ :excerpt => :string,
6
+ :description => :text,
7
+ :slug => :string
8
+ }, {
9
+ :migrate_data => true
10
+ })
11
+ end
12
+
13
+ def down
14
+ Refinery::Calendar::Event.drop_translation_table! :migrate_data => true
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class CreateCalendarVenuesTranslations < ActiveRecord::Migration
2
+ def up
3
+ Refinery::Calendar::Venue.create_translation_table!({
4
+ :name => :string
5
+ }, {
6
+ :migrate_data => true
7
+ })
8
+ end
9
+
10
+ def down
11
+ Refinery::Calendar::Venue.drop_translation_table! :migrate_data => true
12
+ end
13
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,26 @@
1
+ if defined?(::Refinery::User)
2
+ ::Refinery::User.all.each do |user|
3
+ if user.plugins.where(:name => 'refinerycms-calendar').blank?
4
+ user.plugins.create(:name => 'refinerycms-calendar',
5
+ :position => (user.plugins.maximum(:position) || -1) +1)
6
+ end
7
+ end
8
+ end
9
+
10
+
11
+ url = "/calendar/venues"
12
+ if defined?(::Refinery::Page) && ::Refinery::Page.where(:link_url => url).empty?
13
+ page = ::Refinery::Page.create(
14
+ :title => 'Venues',
15
+ :link_url => url,
16
+ :deletable => false,
17
+ :menu_match => "^#{url}(\/|\/.+?|)$"
18
+ )
19
+ Refinery::Pages.default_parts.each_with_index do |default_page_part, index|
20
+ page.parts.create(:title => default_page_part, :body => nil, :position => index)
21
+ end
22
+ end
23
+
24
+
25
+ # Added by Refinery CMS Pages extension
26
+ Refinery::Pages::Engine.load_seed
@@ -0,0 +1,19 @@
1
+ module Refinery
2
+ class CalendarGenerator < Rails::Generators::Base
3
+
4
+ def rake_db
5
+ rake("refinery_calendar:install:migrations")
6
+ end
7
+
8
+ def append_load_seed_data
9
+ create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb'))
10
+ append_file 'db/seeds.rb', :verbose => true do
11
+ <<-EOH
12
+
13
+ # Added by Refinery CMS Venues extension
14
+ Refinery::Calendar::Engine.load_seed
15
+ EOH
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ module Refinery
2
+ module Calendar
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Calendar
6
+
7
+ engine_name :refinery_calendar
8
+
9
+ initializer "register refinerycms_events plugin" do
10
+ Refinery::Plugin.register do |plugin|
11
+ plugin.name = "calendar"
12
+ plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.calendar_admin_events_path }
13
+ plugin.pathname = root
14
+ plugin.activity = {
15
+ :class_name => :'refinery/calendar/event'
16
+ }
17
+ plugin.menu_match = %r{refinery/calendar(/.*)?$}
18
+ end
19
+ end
20
+
21
+ config.after_initialize do
22
+ Refinery.register_extension(Refinery::Events)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+ autoload :CalendarGenerator, 'generators/refinery/calendar_generator'
5
+
6
+ module Events
7
+ require 'refinery/events/engine'
8
+
9
+ class << self
10
+ attr_writer :root
11
+
12
+ def root
13
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
14
+ end
15
+
16
+ def factory_paths
17
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ module Refinery
2
+ module Calendar
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Calendar
6
+
7
+ engine_name :refinery_calendar
8
+
9
+ config.after_initialize do
10
+ Refinery.register_extension(Refinery::Venues)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+ autoload :CalendarGenerator, 'generators/refinery/calendar_generator'
5
+
6
+ module Venues
7
+ require 'refinery/venues/engine'
8
+
9
+ class << self
10
+ attr_writer :root
11
+
12
+ def root
13
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
14
+ end
15
+
16
+ def factory_paths
17
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,2 @@
1
+ require 'refinery/events'
2
+ require 'refinery/venues'
@@ -0,0 +1,13 @@
1
+ namespace :refinery do
2
+
3
+ namespace :calendar do
4
+
5
+ # call this task by running: rake refinery:calendar:my_task
6
+ # desc "Description of my task below"
7
+ # task :my_task => :environment do
8
+ # # add your logic here
9
+ # end
10
+
11
+ end
12
+
13
+ end
data/readme.md ADDED
@@ -0,0 +1,23 @@
1
+ # Calendar extension for Refinery CMS.
2
+
3
+ This is a calendar gem for refinery forked from (https://github.com/refinery/refinerycms-calendar) with some additional features such as:
4
+
5
+ * I18n support in models using Globalize3
6
+ * A calendar helper based on @topfunky's [calendar helper](https://github.com/topfunky/calendar_helper)
7
+
8
+ ## Installation
9
+
10
+ ```ruby
11
+ # in Gemfile:
12
+ gem 'refinerycms-sl-calendar', '2.0.6'
13
+ ```
14
+
15
+ ```
16
+ # in console:
17
+
18
+ bundle
19
+ rails g refinery:calendar
20
+ rake db:migrate db:seed db:test:prepare
21
+ ```
22
+
23
+ Restart the server
@@ -0,0 +1,10 @@
1
+ // Chosen, a Select Box Enhancer for jQuery and Protoype
2
+ // by Patrick Filler for Harvest, http://getharvest.com
3
+ //
4
+ // Version 0.9.5
5
+ // Full source at https://github.com/harvesthq/chosen
6
+ // Copyright (c) 2011 Harvest http://getharvest.com
7
+
8
+ // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
9
+ // This file is generated by `cake build`, do not edit it by hand.
10
+ (function(){var a;a=function(){function a(){this.options_index=0,this.parsed=[]}return a.prototype.add_node=function(a){return a.nodeName==="OPTGROUP"?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:a.label,children:0,disabled:a.disabled}),f=a.childNodes,g=[];for(d=0,e=f.length;d<e;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},a.prototype.add_option=function(a,b,c){if(a.nodeName==="OPTION")return a.text!==""?(b!=null&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1},a}(),a.select_to_array=function(b){var c,d,e,f,g;d=new a,g=b.childNodes;for(e=0,f=g.length;e<f;e++)c=g[e],d.add_node(c);return d.parsed},this.SelectParser=a}).call(this),function(){var a,b,c=function(a,b){return function(){return a.apply(b,arguments)}};b=this,a=function(){function a(a,b){this.form_field=a,this.options=b!=null?b:{},this.set_default_values(),this.is_multiple=this.form_field.multiple,this.default_text_default=this.is_multiple?"Select Some Options":"Select an Option",this.setup(),this.set_up_html(),this.register_observers(),this.finish_setup()}return a.prototype.set_default_values=function(){return this.click_test_action=c(function(a){return this.test_active_click(a)},this),this.activate_action=c(function(a){return this.activate_field(a)},this),this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=this.options.allow_single_deselect!=null&&this.form_field.options[0]!=null&&this.form_field.options[0].text===""?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.choices=0,this.results_none_found=this.options.no_results_text||"No results match"},a.prototype.mouse_enter=function(){return this.mouse_on_container=!0},a.prototype.mouse_leave=function(){return this.mouse_on_container=!1},a.prototype.input_focus=function(a){if(!this.active_field)return setTimeout(c(function(){return this.container_mousedown()},this),50)},a.prototype.input_blur=function(a){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(c(function(){return this.blur_test()},this),100)},a.prototype.result_add_option=function(a){var b,c;return a.disabled?"":(a.dom_id=this.container_id+"_o_"+a.array_index,b=a.selected&&this.is_multiple?[]:["active-result"],a.selected&&b.push("result-selected"),a.group_array_index!=null&&b.push("group-option"),a.classes!==""&&b.push(a.classes),c=a.style.cssText!==""?' style="'+a.style+'"':"",'<li id="'+a.dom_id+'" class="'+b.join(" ")+'"'+c+">"+a.html+"</li>")},a.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:if(this.results_showing)return this.results_hide();break;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d,e=Object.prototype.hasOwnProperty,f=function(a,b){function d(){this.constructor=a}for(var c in b)e.call(b,c)&&(a[c]=b[c]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a},g=function(a,b){return function(){return a.apply(b,arguments)}};d=this,a=jQuery,a.fn.extend({chosen:function(c){return!a.browser.msie||a.browser.version!=="6.0"&&a.browser.version!=="7.0"?a(this).each(function(d){if(!a(this).hasClass("chzn-done"))return new b(this,c)}):this}}),b=function(){function b(){b.__super__.constructor.apply(this,arguments)}return f(b,AbstractChosen),b.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},b.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},b.prototype.set_up_html=function(){var b,d,e,f;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("<div />",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"}),this.is_multiple?b.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'):b.html('<a href="javascript:void(0)" class="chzn-single"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>'),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),d=this.container.height(),e=this.f_width-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),f=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},b.prototype.register_observers=function(){this.container.mousedown(g(function(a){return this.container_mousedown(a)},this)),this.container.mouseup(g(function(a){return this.container_mouseup(a)},this)),this.container.mouseenter(g(function(a){return this.mouse_enter(a)},this)),this.container.mouseleave(g(function(a){return this.mouse_leave(a)},this)),this.search_results.mouseup(g(function(a){return this.search_results_mouseup(a)},this)),this.search_results.mouseover(g(function(a){return this.search_results_mouseover(a)},this)),this.search_results.mouseout(g(function(a){return this.search_results_mouseout(a)},this)),this.form_field_jq.bind("liszt:updated",g(function(a){return this.results_update_field(a)},this)),this.search_field.blur(g(function(a){return this.input_blur(a)},this)),this.search_field.keyup(g(function(a){return this.keyup_checker(a)},this)),this.search_field.keydown(g(function(a){return this.keydown_checker(a)},this));if(this.is_multiple)return this.search_choices.click(g(function(a){return this.choices_click(a)},this)),this.search_field.focus(g(function(a){return this.input_focus(a)},this))},b.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},b.prototype.container_mousedown=function(b){var c;if(!this.is_disabled)return c=b!=null?a(b.target).hasClass("search-choice-close"):!1,b&&b.type==="mousedown"&&b.stopPropagation(),!this.pending_destroy_click&&!c?(this.active_field?!this.is_multiple&&b&&(a(b.target)[0]===this.selected_item[0]||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},b.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR")return this.results_reset(a)},b.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},b.prototype.close_field=function(){return a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},b.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},b.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},b.prototype.results_build=function(){var a,b,c,e,f;this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.find("span").text(this.default_text),this.form_field.options.length>this.disable_search_threshold?this.container.removeClass("chzn-container-single-nosearch"):this.container.addClass("chzn-container-single-nosearch")),a="",f=this.results_data;for(c=0,e=f.length;c<e;c++)b=f[c],b.group?a+=this.result_add_group(b):b.empty||(a+=this.result_add_option(b),b.selected&&this.is_multiple?this.choice_build(b):b.selected&&!this.is_multiple&&(this.selected_item.find("span").text(b.text),this.allow_single_deselect&&this.single_deselect_control_build()));return this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.search_results.html(a),this.parsing=!1},b.prototype.result_add_group=function(b){return b.disabled?"":(b.dom_id=this.container_id+"_g_"+b.array_index,'<li id="'+b.dom_id+'" class="group-result">'+a("<div />").text(b.label).html()+"</li>")},b.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c<f)return this.search_results.scrollTop(c)}},b.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},b.prototype.results_show=function(){var a;return this.is_multiple||(this.selected_item.addClass("chzn-single-with-drop"),this.result_single_selected&&this.result_do_highlight(this.result_single_selected)),a=this.is_multiple?this.container.height():this.container.height()-1,this.dropdown.css({top:a+"px",left:0}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results()},b.prototype.results_hide=function(){return this.is_multiple||this.selected_item.removeClass("chzn-single-with-drop"),this.result_clear_highlight(),this.dropdown.css({left:"-9000px"}),this.results_showing=!1},b.prototype.set_tab_index=function(a){var b;if(this.form_field_jq.attr("tabindex"))return b=this.form_field_jq.attr("tabindex"),this.form_field_jq.attr("tabindex",-1),this.is_multiple?this.search_field.attr("tabindex",b):(this.selected_item.attr("tabindex",b),this.search_field.attr("tabindex",-1))},b.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},b.prototype.search_results_mouseup=function(b){var c;c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first();if(c.length)return this.result_highlight=c,this.result_select(b)},b.prototype.search_results_mouseover=function(b){var c;c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first();if(c)return this.result_do_highlight(c)},b.prototype.search_results_mouseout=function(b){if(a(b.target).hasClass("active-result"))return this.result_clear_highlight()},b.prototype.choices_click=function(b){b.preventDefault();if(this.active_field&&!a(b.target).hasClass("search-choice")&&!this.results_showing)return this.results_show()},b.prototype.choice_build=function(b){var c,d;return c=this.container_id+"_c_"+b.array_index,this.choices+=1,this.search_container.before('<li class="search-choice" id="'+c+'"><span>'+b.html+'</span><a href="javascript:void(0)" class="search-choice-close" rel="'+b.array_index+'"></a></li>'),d=a("#"+c).find("a").first(),d.click(g(function(a){return this.choice_destroy_link_click(a)},this))},b.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),this.is_disabled?b.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(a(b.target)))},b.prototype.choice_destroy=function(a){return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(a.attr("rel")),a.parents("li").first().remove()},b.prototype.results_reset=function(b){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.show_search_field_default(),a(b.target).remove(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},b.prototype.result_select=function(a){var b,c,d,e;if(this.result_highlight)return b=this.result_highlight,c=b.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=b),b.addClass("result-selected"),e=c.substr(c.lastIndexOf("_")+1),d=this.results_data[e],d.selected=!0,this.form_field.options[d.options_index].selected=!0,this.is_multiple?this.choice_build(d):(this.selected_item.find("span").first().text(d.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change"),this.search_field_scale()},b.prototype.result_activate=function(a){return a.addClass("active-result")},b.prototype.result_deactivate=function(a){return a.removeClass("active-result")},b.prototype.result_deselect=function(b){var c,d;return d=this.results_data[b],d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change"),this.search_field_scale()},b.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>')},b.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;this.no_results_clear(),i=0,j=this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html(),f=new RegExp("^"+j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),m=new RegExp(j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),r=this.results_data;for(n=0,p=r.length;n<p;n++){c=r[n];if(!c.disabled&&!c.empty)if(c.group)a("#"+c.dom_id).css("display","none");else if(!this.is_multiple||!c.selected){b=!1,h=c.dom_id,g=a("#"+h);if(f.test(c.html))b=!0,i+=1;else if(c.html.indexOf(" ")>=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(o=0,q=e.length;o<q;o++)d=e[o],f.test(d)&&(b=!0,i+=1)}b?(j.length?(k=c.html.search(m),l=c.html.substr(0,k+j.length)+"</em>"+c.html.substr(k+j.length),l=l.substr(0,k)+"<em>"+l.substr(k)):l=c.html,g.html(l),this.result_activate(g),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&h===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(g))}}return i<1&&j.length?this.no_results(j):this.winnow_results_set_highlight()},b.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d<e;d++)b=c[d],b=a(b),f.push(b.hasClass("group-result")?b.css("display","auto"):!this.is_multiple||!b.hasClass("result-selected")?this.result_activate(b):void 0);return f},b.prototype.winnow_results_set_highlight=function(){var a,b;if(!this.result_highlight){b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first();if(a!=null)return this.result_do_highlight(a)}},b.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c)},b.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},b.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},b.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},b.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClass("search-choice-focus"))},b.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},b.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},b.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(i=0,j=g.length;i<j;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return c=a("<div />",{style:f}),c.text(this.search_field.val()),a("body").append(c),h=c.width()+25,c.remove(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.css({width:h+"px"}),b=this.container.height(),this.dropdown.css({top:b+"px"})}},b.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},b}(),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}.call(this)