diff --git a/Gemfile b/Gemfile index 9af7f9fd..86499010 100644 --- a/Gemfile +++ b/Gemfile @@ -1,60 +1,92 @@ source 'https://rubygems.org' -gem 'rails', '3.2.17' +# Use rails as framework +gem 'rails', '4.0.0' -# Bundle edge Rails instead: -# gem 'rails', :git => 'git://github.com/rails/rails.git' +# Use mysql as the database for Active Record +gem 'mysql2' -# Gems used only for assets and not required -# in production environments by default. -group :assets do -# gem 'coffee-rails', '~> 3.2.1' +# Use rails-observers for observing records +gem 'rails-observers' - # See https://github.com/sstephenson/execjs#readme for more supported runtimes - gem 'therubyracer', :platforms => :ruby +# User paper_trail for tracking data changes +gem 'paper_trail' - gem 'uglifier', '>= 1.2.2' -end +# Use devise as authentification framework +gem 'devise' -group :development, :test do - gem 'pry' - gem 'sqlite3' - gem 'thin' - gem 'letter_opener' - gem 'rspec-rails', '~> 3.0.0.beta' - gem 'capybara' - gem 'rdoc-generator-fivefish' - gem 'factory_girl_rails' -end +# Use cancan as authorization framework +gem 'cancan' -group :production do - gem 'mysql2' -end +# Use transitions as state machine +gem 'transitions', :require => ["transitions", "active_record/transitions"] -gem 'will_paginate' -gem 'paperclip', '~> 3.0' +# Use acts_as_commentable_with_threading for comments +gem 'acts_as_commentable_with_threading' + +# Use haml as templating language +gem "haml-rails" + +# Use SCSS for stylesheets +gem "sass-rails", ">= 4.0.2" + +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' + +# Use bootstrap as the front-end framework +gem 'bootstrap-sass' +gem 'formtastic-bootstrap' + + +# Use jquery as the JavaScript library gem 'jquery-rails' gem 'jquery-ui-rails' gem 'jquery-fileupload-rails' -gem 'devise' -gem 'cancan' -gem "haml" -gem 'bcrypt-ruby', '~> 3.0.0' -#gem 'node' -gem 'paper_trail' -gem 'formtastic-bootstrap' -gem 'bootstrap-sass' -gem 'sass-rails', '>= 3.2' gem 'cocoon' -gem 'transitions', :require => ["transitions", "active_record/transitions"] -gem 'acts_as_commentable_with_threading' + +# Use gravtastic for user avatars +gem 'gravtastic' + +# Use paperclip for upload management +gem 'paperclip' + +# Use prawn as PDF generator gem 'prawn' gem 'prawn_rails' -gem 'gravtastic' -gem 'active_model_serializers' + +# Use axlsx_rails to render XLS spreadsheets gem 'axlsx_rails' + +# Use d3js for building our statistics gem 'd3_rails' + +# We use coveralls for measuring test coverage gem 'coveralls', require: false # Use a self-hosted errbit with the old notifier gem 'hoptoad_notifier', "~> 2.3" +gem 'rails-observers' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' + +# Use active_model_serializers for JSON serializatioin our API +gem 'active_model_serializers' + +# Use sqlite3 as the database in development +gem 'sqlite3', group: [:development] + +# Use letter_opener to open mails in development +gem 'letter_opener', group: [:development] + +# Use rspec and capybara as testing framework +gem 'rspec-rails', '~> 3.0.0.beta', group: [:test] +gem 'capybara', group: [:test] + +# FIXME: We should use http://weblog.rubyonrails.org/2012/3/21/strong-parameters/ +gem 'protected_attributes' + +# We use this bootstrap/html5 rdoc generator +gem 'rdoc-generator-fivefish' + +# We use factory_girl for seeds +gem 'factory_girl_rails' diff --git a/Gemfile.lock b/Gemfile.lock index 2ace9999..5f27e51e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,56 +1,51 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (3.2.17) - actionpack (= 3.2.17) - mail (~> 2.5.4) - actionpack (3.2.17) - activemodel (= 3.2.17) - activesupport (= 3.2.17) - builder (~> 3.0.0) + actionmailer (4.0.0) + actionpack (= 4.0.0) + mail (~> 2.5.3) + actionpack (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) erubis (~> 2.7.0) - journey (~> 1.0.4) - rack (~> 1.4.5) - rack-cache (~> 1.2) - rack-test (~> 0.6.1) - sprockets (~> 2.2.1) + rack (~> 1.5.2) + rack-test (~> 0.6.2) active_model_serializers (0.8.1) activemodel (>= 3.0) - activemodel (3.2.17) - activesupport (= 3.2.17) - builder (~> 3.0.0) - activerecord (3.2.17) - activemodel (= 3.2.17) - activesupport (= 3.2.17) - arel (~> 3.0.2) - tzinfo (~> 0.3.29) - activeresource (3.2.17) - activemodel (= 3.2.17) - activesupport (= 3.2.17) - activesupport (3.2.17) + activemodel (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) + activerecord (4.0.0) + activemodel (= 4.0.0) + activerecord-deprecated_finders (~> 1.0.2) + activesupport (= 4.0.0) + arel (~> 4.0.0) + activerecord-deprecated_finders (1.0.3) + activesupport (4.0.0) i18n (~> 0.6, >= 0.6.4) - multi_json (~> 1.0) + minitest (~> 4.2) + multi_json (~> 1.3) + thread_safe (~> 0.1) + tzinfo (~> 0.3.37) acts_as_commentable_with_threading (1.2.0) activerecord (>= 3.0) activesupport (>= 3.0) awesome_nested_set (>= 2.0) - addressable (2.3.5) - arel (3.0.3) - atomic (1.1.16) + addressable (2.3.6) + arel (4.0.2) awesome_nested_set (2.1.6) activerecord (>= 3.0.0) axlsx (2.0.1) htmlentities (~> 4.3.1) nokogiri (>= 1.4.1) rubyzip (~> 1.0.0) - axlsx_rails (0.1.5) - axlsx + axlsx_rails (0.2.0) + axlsx (>= 2.0.1) rails (>= 3.1) bcrypt (3.1.7) - bcrypt-ruby (3.0.1) - bootstrap-sass (3.1.1.0) + bootstrap-sass (3.1.1.1) sass (~> 3.2) - builder (3.0.4) + builder (3.1.4) cancan (1.6.10) capybara (2.2.1) mime-types (>= 1.16) @@ -60,19 +55,24 @@ GEM xpath (~> 2.0) climate_control (0.0.3) activesupport (>= 3.0) - cocaine (0.5.3) + cocaine (0.5.4) climate_control (>= 0.0.3, < 1.0) - cocoon (1.2.5) - coderay (1.1.0) + cocoon (1.2.6) + coffee-rails (4.0.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.7.0) coveralls (0.7.0) multi_json (~> 1.3) rest-client simplecov (>= 0.7) term-ansicolor thor - d3_rails (3.4.3) + d3_rails (3.4.6) railties (>= 3.1.0) - daemons (1.1.9) devise (3.2.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -82,7 +82,6 @@ GEM diff-lcs (1.2.5) docile (1.1.3) erubis (2.7.0) - eventmachine (1.0.3) execjs (2.0.2) factory_girl (4.4.0) activesupport (>= 3.0.0) @@ -96,6 +95,11 @@ GEM gravtastic (3.2.6) haml (4.0.5) tilt + haml-rails (0.5.1) + actionpack (~> 4.0.0) + activesupport (~> 4.0.0) + haml (>= 3.1, < 5.0) + railties (~> 4.0.0) hike (1.2.3) hoptoad_notifier (2.4.11) activesupport @@ -104,83 +108,75 @@ GEM i18n (0.6.9) inversion (0.12.3) loggability (~> 0.4) - journey (1.0.4) jquery-fileupload-rails (0.4.1) actionpack (>= 3.1) railties (>= 3.1) jquery-rails (3.1.0) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (4.1.2) - railties (>= 3.1.0) + jquery-ui-rails (4.2.1) + railties (>= 3.2.16) json (1.8.1) launchy (2.4.2) addressable (~> 2.3) letter_opener (1.2.0) launchy (~> 2.2) - libv8 (3.16.14.3) - loggability (0.10.1) + loggability (0.11.0) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) - method_source (0.8.2) mime-types (1.25.1) mini_portile (0.5.3) + minitest (4.7.5) multi_json (1.9.2) mysql2 (0.3.15) nokogiri (1.6.1) mini_portile (~> 0.5.0) orm_adapter (0.5.0) - paper_trail (3.0.0) + paper_trail (3.0.1) activerecord (>= 3.0, < 5.0) activesupport (>= 3.0, < 5.0) - paperclip (3.5.4) + paperclip (4.1.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types - pdf-core (0.1.6) + pdf-core (0.2.5) polyglot (0.3.4) - prawn (0.15.0) - pdf-core (~> 0.1.3) - ttfunk (~> 1.1.0) + prawn (1.0.0) + pdf-core (~> 0.2.2) + ttfunk (~> 1.1.1) prawn_rails (0.0.11) prawn (>= 0.11.1) railties (>= 3.0.0) - pry (0.9.12.6) - coderay (~> 1.0) - method_source (~> 0.8) - slop (~> 3.4) - rack (1.4.5) - rack-cache (1.2) - rack (>= 0.4) - rack-ssl (1.3.4) - rack + protected_attributes (1.0.3) + activemodel (>= 4.0.0, < 5.0) + rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (3.2.17) - actionmailer (= 3.2.17) - actionpack (= 3.2.17) - activerecord (= 3.2.17) - activeresource (= 3.2.17) - activesupport (= 3.2.17) - bundler (~> 1.0) - railties (= 3.2.17) - railties (3.2.17) - actionpack (= 3.2.17) - activesupport (= 3.2.17) - rack-ssl (~> 1.3.2) + rails (4.0.0) + actionmailer (= 4.0.0) + actionpack (= 4.0.0) + activerecord (= 4.0.0) + activesupport (= 4.0.0) + bundler (>= 1.3.0, < 2.0) + railties (= 4.0.0) + sprockets-rails (~> 2.0.0) + rails-observers (0.1.2) + activemodel (~> 4.0) + railties (4.0.0) + actionpack (= 4.0.0) + activesupport (= 4.0.0) rake (>= 0.8.7) - rdoc (~> 3.4) - thor (>= 0.14.6, < 2.0) - rake (10.2.2) - rdoc (3.12.2) + thor (>= 0.18.1, < 2.0) + rake (10.3.1) + rdoc (4.1.1) json (~> 1.4) - rdoc-generator-fivefish (0.0.1) - inversion (~> 0.10) - rdoc (~> 3.12) + rdoc-generator-fivefish (0.1.0) + inversion (~> 0.12) + loggability (~> 0.6) + rdoc (~> 4.0) yajl-ruby (~> 1.1) - ref (1.0.5) rest-client (1.6.7) mime-types (>= 1.16) rspec-collection_matchers (0.0.3) @@ -204,35 +200,31 @@ GEM rspec-support (= 3.0.0.beta2) rspec-support (3.0.0.beta2) rubyzip (1.0.0) - sass (3.2.14) - sass-rails (3.2.6) - railties (~> 3.2.0) - sass (>= 3.1.10) - tilt (~> 1.3) + sass (3.2.19) + sass-rails (4.0.3) + railties (>= 4.0.0, < 5.0) + sass (~> 3.2.0) + sprockets (~> 2.8, <= 2.11.0) + sprockets-rails (~> 2.0) simplecov (0.8.2) docile (~> 1.1.0) multi_json simplecov-html (~> 0.8.0) simplecov-html (0.8.0) - slop (3.4.7) - sprockets (2.2.2) + sprockets (2.11.0) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.0.1) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (~> 2.8) sqlite3 (1.3.9) term-ansicolor (1.3.0) tins (~> 1.0) - therubyracer (0.12.1) - libv8 (~> 3.16.14.0) - ref - thin (1.6.2) - daemons (>= 1.0.9) - eventmachine (>= 1.0.0) - rack (>= 1.0.0) - thor (0.18.1) - thread_safe (0.3.1) - atomic (>= 1.1.7, < 2) + thor (0.19.1) + thread_safe (0.3.3) tilt (1.4.1) tins (1.1.0) transitions (0.1.12) @@ -240,13 +232,14 @@ GEM polyglot polyglot (>= 0.3.1) ttfunk (1.1.1) - tzinfo (0.3.38) - uglifier (2.4.0) + turbolinks (2.2.2) + coffee-rails + tzinfo (0.3.39) + uglifier (2.5.0) execjs (>= 0.3.0) json (>= 1.8.0) warden (1.2.3) rack (>= 1.0) - will_paginate (3.0.5) xpath (2.0.0) nokogiri (~> 1.3) yajl-ruby (1.2.0) @@ -258,7 +251,6 @@ DEPENDENCIES active_model_serializers acts_as_commentable_with_threading axlsx_rails - bcrypt-ruby (~> 3.0.0) bootstrap-sass cancan capybara @@ -269,7 +261,7 @@ DEPENDENCIES factory_girl_rails formtastic-bootstrap gravtastic - haml + haml-rails hoptoad_notifier (~> 2.3) jquery-fileupload-rails jquery-rails @@ -277,17 +269,16 @@ DEPENDENCIES letter_opener mysql2 paper_trail - paperclip (~> 3.0) + paperclip prawn prawn_rails - pry - rails (= 3.2.17) + protected_attributes + rails (= 4.0.0) + rails-observers rdoc-generator-fivefish rspec-rails (~> 3.0.0.beta) - sass-rails (>= 3.2) + sass-rails (>= 4.0.2) sqlite3 - therubyracer - thin transitions - uglifier (>= 1.2.2) - will_paginate + turbolinks + uglifier (>= 1.3.0) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 0f5ffe02..0cf50f85 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -11,8 +11,8 @@ // GO AFTER THE REQUIRES BELOW. // //= require jquery -//= require jquery_ujs //= require jquery.ui.all +//= require jquery_ujs //= require jquery-fileupload //= require jquery-ui-timepicker-addon //= require jquery.dataTables diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index a75cd843..41c8fb74 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -1,7 +1,7 @@ /* - *= require strap-on.css.scss + *= require strap-on *= require formtastic-bootstrap - *= require jquery-ui-1.9.2.custom + *= require jquery.ui.all *= require jquery.fileupload-ui *= require jquery-ui-timepicker-addon *= require jquery.dataTables_themeroller diff --git a/app/assets/stylesheets/jquery-ui-1.9.2.custom.css b/app/assets/stylesheets/jquery-ui-1.9.2.custom.css deleted file mode 100644 index 01e20729..00000000 --- a/app/assets/stylesheets/jquery-ui-1.9.2.custom.css +++ /dev/null @@ -1,462 +0,0 @@ -/*! jQuery UI - v1.9.2 - 2013-01-20 -* http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=ece8da&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=100&borderColorHeader=d4ccb0&fcHeader=433f38&iconColorHeader=847e71&bgColorContent=f5f3e5&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dfd9c3&fcContent=312e25&iconColorContent=808080&bgColorDefault=459e00&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=15&borderColorDefault=327E04&fcDefault=ffffff&iconColorDefault=eeeeee&bgColorHover=67b021&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=327E04&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=fafaf4&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=100&borderColorActive=d4ccb0&fcActive=459e00&iconColorActive=8DC262&bgColorHighlight=fcf0ba&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=e8e1b5&fcHighlight=363636&iconColorHighlight=8DC262&bgColorError=ffedad&bgTextureError=03_highlight_soft.png&bgImgOpacityError=95&borderColorError=e3a345&fcError=cd5c0a&iconColorError=cd0a0a&bgColorOverlay=2b2922&bgTextureOverlay=05_inset_soft.png&bgImgOpacityOverlay=15&opacityOverlay=90&bgColorShadow=cccccc&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=95&opacityShadow=20&thicknessShadow=12px&offsetTopShadow=-12px&offsetLeftShadow=-12px&cornerRadiusShadow=10px -* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } -.ui-helper-clearfix:after { clear: both; } -.ui-helper-clearfix { zoom: 1; } -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -.ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; } -.ui-accordion .ui-accordion-icons { padding-left: 2.2em; } -.ui-accordion .ui-accordion-noicons { padding-left: .7em; } -.ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; } -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; } -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.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; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.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; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; } -.ui-menu .ui-menu { margin-top: -3px; position: absolute; } -.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; } -.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; } -.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; } -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } - -.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; } -.ui-menu .ui-state-disabled a { cursor: default; } - -/* icon support */ -.ui-menu-icons { position: relative; } -.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; } - -/* left-aligned */ -.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; } - -/* right-aligned */ -.ui-menu .ui-menu-icon { position: static; float: right; } -.ui-progressbar { height:2em; text-align: left; overflow: hidden; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; } -.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; } -.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; } -.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */ -.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */ -.ui-spinner-up { top: 0; } -.ui-spinner-down { bottom: 0; } - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position:-65px -16px; -} -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; -} -/* Fades and background-images don't work well together in IE6, drop the image */ -* html .ui-tooltip { - background-image: none; -} -body .ui-tooltip { border-width: 2px; } - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: segoe ui,Arial,sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dfd9c3; background: #f5f3e5 url(images/ui-bg_highlight-hard_100_f5f3e5_1x100.png) 50% top repeat-x; color: #312e25; } -.ui-widget-content a { color: #312e25; } -.ui-widget-header { border: 1px solid #d4ccb0; background: #ece8da url(images/ui-bg_gloss-wave_100_ece8da_500x100.png) 50% 50% repeat-x; color: #433f38; font-weight: bold; } -.ui-widget-header a { color: #433f38; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #327E04; background: #459e00 url(images/ui-bg_highlight-hard_15_459e00_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } -.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 #327E04; background: #67b021 url(images/ui-bg_highlight-soft_25_67b021_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } -.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #ffffff; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #d4ccb0; background: #fafaf4 url(images/ui-bg_highlight-hard_100_fafaf4_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #459e00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #459e00; text-decoration: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #e8e1b5; background: #fcf0ba url(images/ui-bg_glass_55_fcf0ba_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e3a345; background: #ffedad url(images/ui-bg_highlight-soft_95_ffedad_1x100.png) 50% top repeat-x; color: #cd5c0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd5c0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd5c0a; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } -.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */ - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_808080_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_808080_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_847e71_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_eeeeee_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } - -/* Overlays */ -.ui-widget-overlay { background: #2b2922 url(images/ui-bg_inset-soft_15_2b2922_1x100.png) 50% bottom repeat-x; opacity: .9;filter:Alpha(Opacity=90); } -.ui-widget-shadow { margin: -12px 0 0 -12px; padding: 12px; background: #cccccc url(images/ui-bg_highlight-hard_95_cccccc_1x100.png) 50% top repeat-x; opacity: .2;filter:Alpha(Opacity=20); -moz-border-radius: 10px; -khtml-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; } \ No newline at end of file diff --git a/app/assets/stylesheets/osem.css b/app/assets/stylesheets/osem.css index 8f264dca..87596c96 100644 --- a/app/assets/stylesheets/osem.css +++ b/app/assets/stylesheets/osem.css @@ -11,6 +11,10 @@ body > #messages { padding: 60px 15px 0; } +body > #content { +padding-bottom: 60px; +} + #footer { position: absolute; bottom: 0; diff --git a/app/models/conference.rb b/app/models/conference.rb index 08832129..c7847610 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -59,8 +59,7 @@ class Conference < ActiveRecord::Base :start_date, :end_date validates_uniqueness_of :short_title - validates_format_of :short_title, :with => /^[a-zA-Z0-9_-]*$/ - + validates_format_of :short_title, :with => /\A[a-zA-Z0-9_-]*\z/ before_create :generate_guid before_create :create_venue before_create :create_email_settings diff --git a/app/models/event.rb b/app/models/event.rb index dd3bd8ba..23e903c9 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -8,7 +8,7 @@ class Event < ActiveRecord::Base has_many :event_people, :dependent => :destroy has_many :event_attachments, :dependent => :destroy has_many :people, :through => :event_people - has_many :speakers, :through => :event_people, :source => :person, :conditions => {"event_people.event_role" => "speaker"} + has_many :speakers, :through => :event_people, :source => :person has_many :votes has_many :voters, :through => :votes, :source => :person belongs_to :event_type @@ -31,7 +31,7 @@ class Event < ActiveRecord::Base validates :abstract, :presence => true validates :media_type, :allow_nil => true, inclusion: {in: Conference.media_types.values} - scope :confirmed, where(:state => "confirmed") + scope :confirmed, -> { where(state: 'confirmed') } state_machine :initial => :new do state :new diff --git a/app/views/admin/conference/new.html.haml b/app/views/admin/conference/new.html.haml index 76301c7f..1b78f27d 100644 --- a/app/views/admin/conference/new.html.haml +++ b/app/views/admin/conference/new.html.haml @@ -1,13 +1,14 @@ -= semantic_form_for(@conference, :url => admin_conference_index_path) do |f| - = f.inputs "Basic Information" do - = f.input :title, :hint => "The name of your conference as it shall appear throughout the site. Example: 'OpenSUSE Conference 2013'" - = f.input :short_title, :hint => "A short and unique handle for your conference, using only lower-case letters, numbers and underscores. This will be used to identify your conference in URLs etc. Example: 'froscon2011'" - = f.input :social_tag, :hint => "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'" - = f.input :contact_email, :hint => "Contact email address for your conference. Will be used as reply-to address in emails sent out by the system." - = f.inputs "Scheduling" do - = f.input :timezone, :as => :time_zone, :hint => "Please select in what time zone your conference will take place. This is needed to correctly display times for your events." - = f.input :start_date, :as => :string, :input_html => { :id => "conference-start-datepicker", :readonly => "readonly" } - = f.input :end_date, :as => :string, :input_html => { :id => "conference-end-datepicker", :readonly => "readonly" } - = f.input :html_export_path, :hint => "The path for static HTML exports" - = f.actions do - = f.action :submit, :button_html => {:class => "btn primary"} +.row + .col-md-6.col-md-offset-3 + = semantic_form_for(@conference, :url => admin_conference_index_path) do |f| + = f.inputs "Basic Information" do + = f.input :title, :hint => "The name of your conference as it shall appear throughout the site. Example: 'OpenSUSE Conference 2013'" + = f.input :short_title, :hint => "A short and unique handle for your conference, using only lower-case letters, numbers and underscores. This will be used to identify your conference in URLs etc. Example: 'froscon2011'" + = f.input :social_tag, :hint => "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'" + = f.input :contact_email, :hint => "Contact email address for your conference. Will be used as reply-to address in emails sent out by the system." + = f.inputs "Scheduling" do + = f.input :timezone, :as => :time_zone, :hint => "Please select in what time zone your conference will take place." + = f.input :start_date, :as => :string, :input_html => { :id => "conference-start-datepicker", :readonly => "readonly" } + = f.input :end_date, :as => :string, :input_html => { :id => "conference-end-datepicker", :readonly => "readonly" } + = f.actions do + = f.action :submit, :button_html => {:class => "btn btn-success pull-right"} diff --git a/app/views/layouts/_navigation.html.haml b/app/views/layouts/_navigation.html.haml index 995805bd..404ed23d 100644 --- a/app/views/layouts/_navigation.html.haml +++ b/app/views/layouts/_navigation.html.haml @@ -7,7 +7,7 @@ %span.icon-bar %span.icon-bar %span.icon-bar - = link_to "OSEM", root_path, :class => 'navbar-brand', :title => "Open Source Event Manager" + = link_to CONFIG['name'], root_path, :class => 'navbar-brand', :title => "Open Source Event Manager" .collapse.navbar-collapse - if @conference && !@conference.short_title.nil? %p.navbar-text diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 5e5a370d..c844c4a3 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -37,7 +37,13 @@ #footer .container %p.muted.text-center - OSEM is (C) 2013 - = link_to "Matt Barringer", "http://incoherent.de" - and released under the GPL. You can get the source code from - = link_to "Github.", "https://github.com/mbarringer/osem" + %small + ©#{Date.today.year} + = link_to "Matt Barringer.", "http://incoherent.de" + This tool is + =link_to "free software,", "http://www.gnu.org/philosophy/free-sw.html" + released under the + =link_to "MIT license.", "http://opensource.org/licenses/MIT" + You can run, copy, distribute, study, change and improve it. + The source code and the developers are on + =link_to "github.", "https://github.com/openSUSE/osem" diff --git a/config/config.yml.example b/config/config.yml.example index a79b051e..31ed06bc 100644 --- a/config/config.yml.example +++ b/config/config.yml.example @@ -1,8 +1,12 @@ defaults: &defaults + # The name of your instance + name: OSEM # The sender address of emails devise_mail_sender: "no-reply@localhost" # The hostname to be used when building the URL in the emails url_for_emails: "localhost:3000" + # A secret key for your rails app. You can generate one with 'rake secret' + secret_key: 12345 # A secret key. You can generate one with 'rake secret' devise_secret_key: '12345' # errbit configuration, get your own instance: https://github.com/errbit/errbit diff --git a/config/environment.rb b/config/environment.rb index 8bfd6042..2a233acc 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,8 +1,8 @@ # Load the rails application require File.expand_path('../application', __FILE__) +# Load the configuration file path = Rails.root.join("config", "config.yml") - begin CONFIG = YAML.load_file(path)[Rails.env] rescue Exception @@ -12,3 +12,4 @@ end # Initialize the rails application Osem::Application.initialize! +Osem::Application.config.secret_keybase = CONFIG['secret_key'] diff --git a/config/environments/development.rb b/config/environments/development.rb index 1b58a0d0..75fcca69 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -9,9 +9,6 @@ Osem::Application.configure do # since you don't have to restart the web server when you make code changes. config.cache_classes = false - # Log error messages when you accidentally call methods on nil. - config.whiny_nils = true - # Show full error reports and disable caching config.consider_all_requests_local = true config.action_controller.perform_caching = false @@ -28,15 +25,16 @@ Osem::Application.configure do # Raise exception on mass assignment protection for Active Record models config.active_record.mass_assignment_sanitizer = :strict - # Log the query plan for queries taking more than this (works - # with SQLite, MySQL, and PostgreSQL) - config.active_record.auto_explain_threshold_in_seconds = 0.5 - # Do not compress assets config.assets.compress = false # Expands the lines which load the assets config.assets.debug = true + # Do not eager load code on boot. + config.eager_load = false + + # Set the detault url for action mailer config.action_mailer.default_url_options = { :host => CONFIG['url_for_emails'] } + end diff --git a/config/environments/production.rb b/config/environments/production.rb index b27d2667..2a2254f1 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -8,6 +8,12 @@ Osem::Application.configure do config.consider_all_requests_local = false config.action_controller.perform_caching = true + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both thread web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + # Disable Rails's static asset server (Apache or nginx will already do this) config.serve_static_assets = false # Compress JavaScripts and CSS @@ -60,10 +66,6 @@ Osem::Application.configure do # Send deprecation notices to registered listeners config.active_support.deprecation = :notify - # Log the query plan for queries taking more than this (works - # with SQLite, MySQL, and PostgreSQL) - # config.active_record.auto_explain_threshold_in_seconds = 0.5 - + # Set the detault url for action mailer config.action_mailer.default_url_options = { :host => CONFIG['url_for_emails'] } - end diff --git a/config/environments/test.rb b/config/environments/test.rb index 29febc63..74460169 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -11,8 +11,8 @@ Osem::Application.configure do config.serve_static_assets = true config.static_cache_control = "public, max-age=3600" - # Log error messages when you accidentally call methods on nil - config.whiny_nils = true + # Do not eager load code on boot. + config.eager_load = false # Show full error reports and disable caching config.consider_all_requests_local = true diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index edace139..77208236 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -1,12 +1,13 @@ # Use this hook to configure devise mailer, warden hooks and so forth. # Many of these configuration options can be set straight in your model. Devise.setup do |config| - # ==> Secret key - config.secret_key = CONFIG['devise_secret_key'] + # ==> Secret key, generate one with `rake secret` + config.secret_key = CONFIG['devise_secret_key'] + # ==> Mailer Configuration # Configure the e-mail address which will be shown in Devise::Mailer, # note that it will be overwritten if you use your own mailer class with default "from" parameter. - config.mailer_sender = CONFIG['devise_mail_sender'] + config.mailer_sender = CONFIG['sender_for_emails'] # Configure the class responsible to send e-mails. # config.mailer = "Devise::Mailer" diff --git a/config/routes.rb b/config/routes.rb index 7103e699..ccc0a49b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,13 +17,13 @@ Osem::Application.routes.draw do delete "/registrations" => "registrations#delete" put "/registrations/change_field" => "registrations#change_field" get "/emailsettings" => "emails#show", :as => "email_settings" - put "/emailsettings" => "emails#update", :as => "email_settings" - get "/supporter_levels" => "SupporterLevels#show" - put "/supporter_levels" => "SupporterLevels#update" + put "/emailsettings" => "emails#update" + get "/supporter_levels" => "supporter_levels#show" + put "/supporter_levels" => "supporter_levels#update" get "/venue" => "venue#show", :as => "venue_info" put "/venue" => "venue#update", :as => "venue_update" - get "/social_events" => "SocialEvents#show", :as => "social_events" - put "/social_events" => "SocialEvents#update", :as => "social_events" + get "/social_events" => "social_events#show", :as => "social_events" + put "/social_events" => "social_events#update" get "/rooms" => "rooms#show", :as => "rooms_list" put "/rooms" => "rooms#update", :as => "rooms_update" get "/tracks" => "tracks#show", :as => "tracks_list" @@ -57,16 +57,16 @@ Osem::Application.routes.draw do resources :conference, :only => [] do resources :proposal do - resources :event_attachment, :controller => "EventAttachments" + resources :event_attachment, :controller => "event_attachments" put "/confirm" => "proposal#confirm" end resource :schedule, :only => [] do get "/" => "schedule#index" end member do - get "/register" => "ConferenceRegistration#register" - put "/register" => "ConferenceRegistration#update" - delete "/register" => "ConferenceRegistration#unregister" + get "/register" => "conference_registration#register" + put "/register" => "conference_registration#update" + delete "/register" => "conference_registration#unregister" end end @@ -86,7 +86,7 @@ Osem::Application.routes.draw do end end - match "/admin" => redirect("/admin/conference") + get "/admin" => redirect("/admin/conference") root :to => "home#index" end diff --git a/db/schema.rb b/db/schema.rb index bd70ff31..64570e66 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,161 +9,161 @@ # from scratch. The latter is a flawed and unsustainable approach (the more migrations # you'll amass, the slower it'll run and the greater likelihood for issues). # -# It's strongly recommended to check this file into your version control system. +# It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140414131028) do +ActiveRecord::Schema.define(version: 20140414131028) do - create_table "answers", :force => true do |t| + create_table "answers", force: true do |t| t.string "title" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "call_for_papers", :force => true do |t| - t.date "start_date", :null => false - t.date "end_date", :null => false - t.date "hard_deadline", :null => false - t.text "description", :null => false + create_table "call_for_papers", force: true do |t| + t.date "start_date", null: false + t.date "end_date", null: false + t.date "hard_deadline", null: false + t.text "description", null: false t.integer "conference_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "schedule_changes", :default => false - t.integer "rating", :default => 3 + t.datetime "created_at" + t.datetime "updated_at" + t.boolean "schedule_changes", default: false + t.integer "rating", default: 3 t.text "rating_desc" t.boolean "schedule_public" end - create_table "comments", :force => true do |t| - t.string "title", :limit => 50, :default => "" + create_table "comments", force: true do |t| + t.string "title", limit: 50, default: "" t.text "body" t.integer "commentable_id" t.string "commentable_type" t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.string "subject" t.integer "parent_id" t.integer "lft" t.integer "rgt" end - add_index "comments", ["commentable_id"], :name => "index_comments_on_commentable_id" - add_index "comments", ["commentable_type"], :name => "index_comments_on_commentable_type" - add_index "comments", ["user_id"], :name => "index_comments_on_user_id" + add_index "comments", ["commentable_id"], name: "index_comments_on_commentable_id" + add_index "comments", ["commentable_type"], name: "index_comments_on_commentable_type" + add_index "comments", ["user_id"], name: "index_comments_on_user_id" - create_table "conferences", :force => true do |t| - t.string "guid", :null => false - t.string "title", :null => false - t.string "short_title", :null => false + create_table "conferences", force: true do |t| + t.string "guid", null: false + t.string "title", null: false + t.string "short_title", null: false t.string "social_tag" - t.string "contact_email", :null => false - t.string "timezone", :null => false + t.string "contact_email", null: false + t.string "timezone", null: false t.string "html_export_path" - t.date "start_date", :null => false - t.date "end_date", :null => false + t.date "start_date", null: false + t.date "end_date", null: false t.integer "venue_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.date "registration_start_date" t.date "registration_end_date" t.string "logo_file_name" t.string "logo_content_type" t.integer "logo_file_size" t.datetime "logo_updated_at" - t.boolean "use_dietary_choices", :default => false - t.boolean "use_supporter_levels", :default => false + t.boolean "use_dietary_choices", default: false + t.boolean "use_supporter_levels", default: false t.integer "revision" - t.boolean "use_vpositions", :default => false - t.boolean "use_vdays", :default => false - t.boolean "use_difficulty_levels", :default => false + t.boolean "use_vpositions", default: false + t.boolean "use_vdays", default: false + t.boolean "use_difficulty_levels", default: false t.boolean "use_volunteers" t.string "media_id" t.string "media_type" end - create_table "conferences_questions", :id => false, :force => true do |t| + create_table "conferences_questions", id: false, force: true do |t| t.integer "conference_id" t.integer "question_id" end - create_table "dietary_choices", :force => true do |t| + create_table "dietary_choices", force: true do |t| t.integer "conference_id" - t.string "title", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.string "title", null: false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "difficulty_levels", :force => true do |t| + create_table "difficulty_levels", force: true do |t| t.integer "conference_id" t.string "title" t.text "description" - t.string "color", :default => "#ffffff" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.string "color", default: "#ffffff" + t.datetime "created_at" + t.datetime "updated_at" end - create_table "email_settings", :force => true do |t| + create_table "email_settings", force: true do |t| t.integer "conference_id" - t.boolean "send_on_registration", :default => true - t.boolean "send_on_accepted", :default => true - t.boolean "send_on_rejected", :default => true - t.boolean "send_on_confirmed_without_registration", :default => true + t.boolean "send_on_registration", default: true + t.boolean "send_on_accepted", default: true + t.boolean "send_on_rejected", default: true + t.boolean "send_on_confirmed_without_registration", default: true t.text "registration_email_template" t.text "accepted_email_template" t.text "rejected_email_template" t.text "confirmed_email_template" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.string "registration_subject" t.string "accepted_subject" t.string "rejected_subject" t.string "confirmed_without_registration_subject" end - create_table "event_attachments", :force => true do |t| + create_table "event_attachments", force: true do |t| t.integer "event_id" - t.string "title", :null => false + t.string "title", null: false t.string "attachment_file_name" t.string "attachment_content_type" t.integer "attachment_file_size" t.datetime "attachment_updated_at" - t.boolean "public", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.boolean "public", default: false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "event_people", :force => true do |t| + create_table "event_people", force: true do |t| t.integer "proposal_id" t.integer "person_id" t.integer "event_id" - t.string "event_role", :default => "participant", :null => false + t.string "event_role", default: "participant", null: false t.string "comment" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "event_types", :force => true do |t| + create_table "event_types", force: true do |t| t.integer "conference_id" - t.string "title", :null => false - t.integer "length", :default => 30 - t.integer "minimum_abstract_length", :default => 0 - t.integer "maximum_abstract_length", :default => 500 + t.string "title", null: false + t.integer "length", default: 30 + t.integer "minimum_abstract_length", default: 0 + t.integer "maximum_abstract_length", default: 500 end - create_table "events", :force => true do |t| - t.string "guid", :null => false + create_table "events", force: true do |t| + t.string "guid", null: false t.integer "conference_id" t.integer "event_type_id" - t.string "title", :null => false + t.string "title", null: false t.string "subtitle" t.integer "time_slots" - t.string "state", :default => "new", :null => false - t.string "progress", :default => "new", :null => false + t.string "state", default: "new", null: false + t.string "progress", default: "new", null: false t.string "language" t.datetime "start_time" t.text "abstract" t.text "description" - t.boolean "public", :default => true + t.boolean "public", default: true t.string "logo_file_name" t.string "logo_content_type" t.integer "logo_file_size" @@ -171,26 +171,26 @@ ActiveRecord::Schema.define(:version => 20140414131028) do t.text "proposal_additional_speakers" t.integer "track_id" t.integer "room_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.string "media_id" t.string "media_type" t.boolean "require_registration" t.integer "difficulty_level_id" end - create_table "events_registrations", :id => false, :force => true do |t| + create_table "events_registrations", id: false, force: true do |t| t.integer "registration_id" t.integer "event_id" end - create_table "people", :force => true do |t| - t.string "guid", :null => false - t.string "first_name", :default => "" - t.string "last_name", :default => "" - t.string "public_name", :default => "" - t.string "company", :default => "" - t.string "email", :null => false + create_table "people", force: true do |t| + t.string "guid", null: false + t.string "first_name", default: "" + t.string "last_name", default: "" + t.string "public_name", default: "" + t.string "company", default: "" + t.string "email", null: false t.boolean "email_public" t.string "avatar_file_name" t.string "avatar_content_type" @@ -198,8 +198,8 @@ ActiveRecord::Schema.define(:version => 20140414131028) do t.datetime "avatar_updated_at" t.text "biography" t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.string "irc_nickname" t.text "volunteer_experience" t.string "tshirt" @@ -207,119 +207,119 @@ ActiveRecord::Schema.define(:version => 20140414131028) do t.string "languages" end - create_table "qanswers", :force => true do |t| + create_table "qanswers", force: true do |t| t.integer "question_id" t.integer "answer_id" end - create_table "qanswers_registrations", :id => false, :force => true do |t| - t.integer "registration_id", :null => false - t.integer "qanswer_id", :null => false + create_table "qanswers_registrations", id: false, force: true do |t| + t.integer "registration_id", null: false + t.integer "qanswer_id", null: false end - create_table "question_types", :force => true do |t| + create_table "question_types", force: true do |t| t.string "title" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "questions", :force => true do |t| + create_table "questions", force: true do |t| t.string "title" t.integer "question_type_id" t.integer "conference_id" t.boolean "global" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "registrations", :force => true do |t| + create_table "registrations", force: true do |t| t.integer "person_id" t.integer "conference_id" - t.boolean "attending_social_events", :default => true - t.boolean "attending_with_partner", :default => false - t.boolean "using_affiliated_lodging", :default => false + t.boolean "attending_social_events", default: true + t.boolean "attending_with_partner", default: false + t.boolean "using_affiliated_lodging", default: false t.datetime "arrival" t.datetime "departure" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" t.integer "dietary_choice_id" t.text "other_dietary_choice" - t.boolean "handicapped_access_required", :default => false + t.boolean "handicapped_access_required", default: false t.text "other_special_needs" - t.boolean "attended", :default => false + t.boolean "attended", default: false t.boolean "volunteer" end - create_table "registrations_social_events", :id => false, :force => true do |t| + create_table "registrations_social_events", id: false, force: true do |t| t.integer "registration_id" t.integer "social_event_id" end - create_table "registrations_vchoices", :id => false, :force => true do |t| + create_table "registrations_vchoices", id: false, force: true do |t| t.integer "registration_id" t.integer "vchoice_id" end - create_table "roles", :force => true do |t| + create_table "roles", force: true do |t| t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "roles_users", :id => false, :force => true do |t| + create_table "roles_users", id: false, force: true do |t| t.integer "role_id" t.integer "user_id" end - create_table "rooms", :force => true do |t| - t.string "guid", :null => false + create_table "rooms", force: true do |t| + t.string "guid", null: false t.integer "conference_id" - t.string "name", :null => false + t.string "name", null: false t.integer "size" - t.boolean "public", :default => true + t.boolean "public", default: true end - create_table "social_events", :force => true do |t| + create_table "social_events", force: true do |t| t.integer "conference_id" t.string "title" t.text "description" t.date "date" end - create_table "supporter_levels", :force => true do |t| + create_table "supporter_levels", force: true do |t| t.integer "conference_id" - t.string "title", :null => false + t.string "title", null: false t.string "url" end - create_table "supporter_registrations", :force => true do |t| + create_table "supporter_registrations", force: true do |t| t.integer "registration_id" t.integer "supporter_level_id" t.integer "conference_id" t.string "name" t.string "email" t.string "code" - t.boolean "code_is_valid", :default => false + t.boolean "code_is_valid", default: false t.datetime "created_at" end - create_table "tracks", :force => true do |t| - t.string "guid", :null => false + create_table "tracks", force: true do |t| + t.string "guid", null: false t.integer "conference_id" - t.string "name", :null => false + t.string "name", null: false t.text "description" - t.string "color", :default => "#ffffff" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.string "color", default: "#ffffff" + t.datetime "created_at" + t.datetime "updated_at" end - create_table "users", :force => true do |t| - t.string "email", :default => "", :null => false - t.string "encrypted_password", :default => "", :null => false + create_table "users", force: true do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", :default => 0 + t.integer "sign_in_count", default: 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" @@ -328,65 +328,65 @@ ActiveRecord::Schema.define(:version => 20140414131028) do t.datetime "confirmed_at" t.datetime "confirmation_sent_at" t.string "unconfirmed_email" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - add_index "users", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true - add_index "users", ["email"], :name => "index_users_on_email", :unique => true - add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true + add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true + add_index "users", ["email"], name: "index_users_on_email", unique: true + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true - create_table "vchoices", :force => true do |t| + create_table "vchoices", force: true do |t| t.integer "vday_id" t.integer "vposition_id" end - create_table "vdays", :force => true do |t| + create_table "vdays", force: true do |t| t.integer "conference_id" t.date "day" t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "venues", :force => true do |t| + create_table "venues", force: true do |t| t.string "guid" - t.text "name", :limit => 255 - t.text "address", :limit => 255 + t.text "name", limit: 255 + t.text "address", limit: 255 t.string "website" t.text "description" t.string "offline_map_url" t.string "offline_map_bounds" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "versions", :force => true do |t| - t.string "item_type", :null => false - t.integer "item_id", :null => false - t.string "event", :null => false + create_table "versions", force: true do |t| + t.string "item_type", null: false + t.integer "item_id", null: false + t.string "event", null: false t.string "whodunnit" t.text "object" t.text "object_changes" t.datetime "created_at" end - add_index "versions", ["item_type", "item_id"], :name => "index_versions_on_item_type_and_item_id" + add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id" - create_table "votes", :force => true do |t| + create_table "votes", force: true do |t| t.integer "person_id" t.integer "event_id" t.integer "rating" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end - create_table "vpositions", :force => true do |t| + create_table "vpositions", force: true do |t| t.integer "conference_id" - t.string "title", :null => false + t.string "title", null: false t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at" + t.datetime "updated_at" end end