rail_pass 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +20 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/rail_pass/application.js +15 -0
  5. data/app/assets/stylesheets/rail_pass/application.css +13 -0
  6. data/app/controllers/rail_pass/application_controller.rb +4 -0
  7. data/app/controllers/rail_pass/styleguide_controller.rb +7 -0
  8. data/app/helpers/rail_pass/application_helper.rb +4 -0
  9. data/app/views/rail_pass/styleguide/index.html.haml +104 -0
  10. data/config/routes.rb +3 -0
  11. data/lib/generators/rail_pass/install_generator.rb +220 -0
  12. data/lib/generators/templates/Procfile +1 -0
  13. data/lib/generators/templates/app/assets/javascripts/application.js +17 -0
  14. data/lib/generators/templates/app/assets/javascripts/html5.js +14 -0
  15. data/lib/generators/templates/app/assets/javascripts/polyfills.js +14 -0
  16. data/lib/generators/templates/app/assets/javascripts/responsive.js +14 -0
  17. data/lib/generators/templates/app/assets/javascripts/scripts.js.coffee +0 -0
  18. data/lib/generators/templates/app/assets/stylesheets/application.css.scss +26 -0
  19. data/lib/generators/templates/app/assets/stylesheets/base/_colors.scss +1 -0
  20. data/lib/generators/templates/app/assets/stylesheets/base/_defaults.scss +27 -0
  21. data/lib/generators/templates/app/assets/stylesheets/base/_forms.scss +0 -0
  22. data/lib/generators/templates/app/assets/stylesheets/base/_settings.scss +0 -0
  23. data/lib/generators/templates/app/assets/stylesheets/base/_typography.scss +3 -0
  24. data/lib/generators/templates/app/assets/stylesheets/layout/_containers.scss +18 -0
  25. data/lib/generators/templates/app/assets/stylesheets/layout/_footer.scss +1 -0
  26. data/lib/generators/templates/app/assets/stylesheets/layout/_header.scss +1 -0
  27. data/lib/generators/templates/app/assets/stylesheets/layout/_settings.scss +1 -0
  28. data/lib/generators/templates/app/assets/stylesheets/modules/_buttons.scss +15 -0
  29. data/lib/generators/templates/app/controllers/pages_controller.rb +2 -0
  30. data/lib/generators/templates/app/helpers/application_helper.rb +87 -0
  31. data/lib/generators/templates/app/views/errors/404.html.haml +3 -0
  32. data/lib/generators/templates/app/views/layouts/application.html.haml +124 -0
  33. data/lib/generators/templates/app/views/pages/index.html.haml +0 -0
  34. data/lib/generators/templates/config/deploy.rb +34 -0
  35. data/lib/generators/templates/config/initializers/dev_environment.rb +6 -0
  36. data/lib/generators/templates/config/initializers/new_relic.rb +5 -0
  37. data/lib/generators/templates/config/mongoid.yml +68 -0
  38. data/lib/generators/templates/config/newrelic.yml +255 -0
  39. data/lib/generators/templates/config/recipes/base.rb +86 -0
  40. data/lib/generators/templates/config/recipes/check.rb +13 -0
  41. data/lib/generators/templates/config/recipes/mongodb/install-outdated.rb +41 -0
  42. data/lib/generators/templates/config/recipes/mongodb/install.rb +45 -0
  43. data/lib/generators/templates/config/recipes/mongodb/manage.rb +27 -0
  44. data/lib/generators/templates/config/recipes/mongodb.rb +73 -0
  45. data/lib/generators/templates/config/recipes/mysql.rb +152 -0
  46. data/lib/generators/templates/config/recipes/nginx.rb +25 -0
  47. data/lib/generators/templates/config/recipes/nodejs.rb +9 -0
  48. data/lib/generators/templates/config/recipes/postgresql.rb +34 -0
  49. data/lib/generators/templates/config/recipes/rbenv.rb +29 -0
  50. data/lib/generators/templates/config/recipes/redis.rb +18 -0
  51. data/lib/generators/templates/config/recipes/ruby.rb +93 -0
  52. data/lib/generators/templates/config/recipes/templates/foreman.erb +2 -0
  53. data/lib/generators/templates/config/recipes/templates/gitlab.yml.erb +29 -0
  54. data/lib/generators/templates/config/recipes/templates/mongoid.yml.erb +10 -0
  55. data/lib/generators/templates/config/recipes/templates/mysql.yml.erb +7 -0
  56. data/lib/generators/templates/config/recipes/templates/nginx_unicorn.erb +27 -0
  57. data/lib/generators/templates/config/recipes/templates/postgresql.yml.erb +8 -0
  58. data/lib/generators/templates/config/recipes/templates/unicorn.rb.erb +8 -0
  59. data/lib/generators/templates/config/recipes/templates/unicorn_init.erb +84 -0
  60. data/lib/generators/templates/config/recipes/unicorn.rb +28 -0
  61. data/lib/generators/templates/config/recipes/utilities.rb +144 -0
  62. data/lib/generators/templates/config/unicorn.rb +2 -0
  63. data/lib/generators/templates/public/422.html +54 -0
  64. data/lib/generators/templates/public/500.html +54 -0
  65. data/lib/generators/templates/spec/spec_helper.rb +41 -0
  66. data/lib/generators/templates/vendor/assets/fonts/fontawesome/fontawesome-webfont.eot +0 -0
  67. data/lib/generators/templates/vendor/assets/fonts/fontawesome/fontawesome-webfont.ttf +0 -0
  68. data/lib/generators/templates/vendor/assets/fonts/fontawesome/fontawesome-webfont.woff +0 -0
  69. data/lib/generators/templates/vendor/assets/fonts/icomoon/icomoon.eot +0 -0
  70. data/lib/generators/templates/vendor/assets/fonts/icomoon/icomoon.svg +36 -0
  71. data/lib/generators/templates/vendor/assets/fonts/icomoon/icomoon.ttf +0 -0
  72. data/lib/generators/templates/vendor/assets/fonts/icomoon/icomoon.woff +0 -0
  73. data/lib/generators/templates/vendor/assets/javascripts/jquery.ui.touch-punch.min.js +11 -0
  74. data/lib/generators/templates/vendor/assets/javascripts/polyfills/html5shim.js +3 -0
  75. data/lib/generators/templates/vendor/assets/javascripts/polyfills/modernizr.js +4 -0
  76. data/lib/generators/templates/vendor/assets/javascripts/polyfills/respond.js +15 -0
  77. data/lib/generators/templates/vendor/assets/javascripts/polyfills/selectivizr.js +560 -0
  78. data/lib/generators/templates/vendor/assets/stylesheets/font-awesome.scss +493 -0
  79. data/lib/generators/templates/vendor/assets/stylesheets/icomoon.scss +22 -0
  80. data/lib/rail_pass/engine.rb +5 -0
  81. data/lib/rail_pass/version.rb +3 -0
  82. data/lib/rail_pass.rb +4 -0
  83. data/lib/tasks/rail_pass_tasks.rake +4 -0
  84. metadata +146 -0
@@ -0,0 +1,84 @@
1
+ #!/bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: unicorn
4
+ # Required-Start: $remote_fs $syslog
5
+ # Required-Stop: $remote_fs $syslog
6
+ # Default-Start: 2 3 4 5
7
+ # Default-Stop: 0 1 6
8
+ # Short-Description: Manage unicorn server
9
+ # Description: Start, stop, restart unicorn server for a specific application.
10
+ ### END INIT INFO
11
+ set -e
12
+
13
+ # Feel free to change any of the following variables for your app:
14
+ TIMEOUT=${TIMEOUT-60}
15
+ APP_ROOT=<%= current_path %>
16
+ PID=<%= unicorn_pid %>
17
+ CMD="cd <%= current_path %>; bundle exec unicorn -D -c <%= unicorn_config %> -E production"
18
+ AS_USER=<%= unicorn_user %>
19
+ set -u
20
+
21
+ OLD_PIN="$PID.oldbin"
22
+
23
+ sig () {
24
+ test -s "$PID" && kill -$1 `cat $PID`
25
+ }
26
+
27
+ oldsig () {
28
+ test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
29
+ }
30
+
31
+ run () {
32
+ if [ "$(id -un)" = "$AS_USER" ]; then
33
+ eval $1
34
+ else
35
+ su -c "$1" - $AS_USER
36
+ fi
37
+ }
38
+
39
+ case "$1" in
40
+ start)
41
+ sig 0 && echo >&2 "Already running" && exit 0
42
+ run "$CMD"
43
+ ;;
44
+ stop)
45
+ sig QUIT && exit 0
46
+ echo >&2 "Not running"
47
+ ;;
48
+ force-stop)
49
+ sig TERM && exit 0
50
+ echo >&2 "Not running"
51
+ ;;
52
+ restart|reload)
53
+ sig HUP && echo reloaded OK && exit 0
54
+ echo >&2 "Couldn't reload, starting '$CMD' instead"
55
+ run "$CMD"
56
+ ;;
57
+ upgrade)
58
+ if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
59
+ then
60
+ n=$TIMEOUT
61
+ while test -s $OLD_PIN && test $n -ge 0
62
+ do
63
+ printf '.' && sleep 1 && n=$(( $n - 1 ))
64
+ done
65
+ echo
66
+
67
+ if test $n -lt 0 && test -s $OLD_PIN
68
+ then
69
+ echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
70
+ exit 1
71
+ fi
72
+ exit 0
73
+ fi
74
+ echo >&2 "Couldn't upgrade, starting '$CMD' instead"
75
+ run "$CMD"
76
+ ;;
77
+ reopen-logs)
78
+ sig USR1
79
+ ;;
80
+ *)
81
+ echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
82
+ exit 1
83
+ ;;
84
+ esac
@@ -0,0 +1,28 @@
1
+ set_default(:unicorn_user) { user }
2
+ set_default(:unicorn_pid) { "#{current_path}/tmp/pids/unicorn.pid" }
3
+ set_default(:unicorn_config) { "#{shared_path}/config/unicorn.rb" }
4
+ set_default(:unicorn_log) { "#{shared_path}/log/unicorn.log" }
5
+ set_default(:unicorn_workers, 2)
6
+
7
+ namespace :unicorn do
8
+ desc "Setup Unicorn initializer and app configuration"
9
+ task :setup, roles: :app do
10
+ run "mkdir -p #{shared_path}/config"
11
+ template "unicorn.rb.erb", unicorn_config
12
+ template "unicorn_init.erb", "/tmp/unicorn_init"
13
+ run "chmod +x /tmp/unicorn_init"
14
+ run "#{sudo} mv /tmp/unicorn_init /etc/init.d/unicorn_#{application}"
15
+ run "#{sudo} update-rc.d -f unicorn_#{application} defaults"
16
+ end
17
+ ##### Disable the following line if using Foreman #####
18
+ # after "deploy:setup", "unicorn:setup"
19
+
20
+ %w[start stop restart].each do |command|
21
+ desc "#{command} unicorn"
22
+ task command, roles: :app do
23
+ run "service unicorn_#{application} #{command}"
24
+ end
25
+ ##### Disable the following line if using Foreman #####
26
+ # after "deploy:#{command}", "unicorn:#{command}"
27
+ end
28
+ end
@@ -0,0 +1,144 @@
1
+ require 'fileutils'
2
+
3
+ module Utilities
4
+ # utilities.config_gsub('/etc/example', /(.*)/im, "\\1")
5
+ def config_gsub(file, find, replace)
6
+ tmp="/tmp/#{File.basename(file)}"
7
+ get file, tmp
8
+ content=File.open(tmp).read
9
+ content.gsub!(find,replace)
10
+ put content, tmp
11
+ sudo "mv #{tmp} #{file}"
12
+ end
13
+
14
+ # utilities.ask('What is your name?', 'John')
15
+ def ask(question, default='')
16
+ question = "\n" + question.join("\n") if question.respond_to?(:uniq)
17
+ answer = Capistrano::CLI.ui.ask(space(question)).strip
18
+ answer.empty? ? default : answer
19
+ end
20
+
21
+ # utilities.yes?('Proceed with install?')
22
+ def yes?(question)
23
+ question = "\n" + question.join("\n") if question.respond_to?(:uniq)
24
+ question += ' (y/n)'
25
+ ask(question).downcase.include? 'y'
26
+ end
27
+
28
+ # utilities.apt_install %w[package1 package2]
29
+ # utilities.apt_install "package1 package2"
30
+ def apt_install(packages)
31
+ packages = packages.split(/\s+/) if packages.respond_to?(:split)
32
+ packages = Array(packages)
33
+ apt_get="DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get"
34
+ sudo "#{apt_get} -qyu --force-yes install #{packages.join(" ")}"
35
+ end
36
+
37
+ def apt_upgrade
38
+ apt_get="DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get"
39
+ sudo "#{apt_get} -qy update"
40
+ sudo "#{apt_get} -qyu --force-yes upgrade"
41
+ end
42
+
43
+ # utilities.sudo_upload('/local/path/to/file', '/remote/path/to/destination', options)
44
+ def sudo_upload(from, to, options={}, &block)
45
+ top.upload from, "/tmp/#{File.basename(to)}", options, &block
46
+ sudo "mv /tmp/#{File.basename(to)} #{to}"
47
+ sudo "chmod #{options[:mode]} #{to}" if options[:mode]
48
+ sudo "chown #{options[:owner]} #{to}" if options[:owner]
49
+ end
50
+
51
+ # utilities.adduser('deploy')
52
+ def adduser(user, options={})
53
+ options[:shell] ||= '/bin/bash' # new accounts on ubuntu 6.06.1 have been getting /bin/sh
54
+ switches = '--disabled-password --gecos ""'
55
+ switches += " --shell=#{options[:shell]} " if options[:shell]
56
+ switches += ' --no-create-home ' if options[:nohome]
57
+ switches += " --ingroup #{options[:group]} " unless options[:group].nil?
58
+ invoke_command "grep '^#{user}:' /etc/passwd || sudo /usr/sbin/adduser #{user} #{switches}",
59
+ :via => run_method
60
+ end
61
+
62
+ # role = :app
63
+ def with_role(role, &block)
64
+ original, ENV['HOSTS'] = ENV['HOSTS'], find_servers(:roles => role).map{|d| d.host}.join(",")
65
+ begin
66
+ yield
67
+ ensure
68
+ ENV['HOSTS'] = original
69
+ end
70
+ end
71
+
72
+ # utilities.with_credentials(:user => 'xxxx', :password => 'secret')
73
+ # options = { :user => 'xxxxx', :password => 'xxxxx' }
74
+ def with_credentials(options={}, &block)
75
+ original_username, original_password = user, password
76
+ begin
77
+ set :user, options[:user] || original_username
78
+ set :password, options[:password] || original_password
79
+ yield
80
+ ensure
81
+ set :user, original_username
82
+ set :password, original_password
83
+ end
84
+ end
85
+
86
+ def space(str)
87
+ "\n#{'=' * 80}\n#{str}"
88
+ end
89
+
90
+ ##
91
+ # Run a command and ask for input when input_query is seen.
92
+ # Sends the response back to the server.
93
+ #
94
+ # +input_query+ is a regular expression that defaults to /^Password/.
95
+ # Can be used where +run+ would otherwise be used.
96
+ # run_with_input 'ssh-keygen ...', /^Are you sure you want to overwrite\?/
97
+ def run_with_input(shell_command, input_query=/^Password/, response=nil)
98
+ handle_command_with_input(:run, shell_command, input_query, response)
99
+ end
100
+
101
+ ##
102
+ # Run a command using sudo and ask for input when a regular expression is seen.
103
+ # Sends the response back to the server.
104
+ #
105
+ # See also +run_with_input+
106
+ # +input_query+ is a regular expression
107
+ def sudo_with_input(shell_command, input_query=/^Password/, response=nil)
108
+ handle_command_with_input(:sudo, shell_command, input_query, response)
109
+ end
110
+
111
+ def invoke_with_input(shell_command, input_query=/^Password/, response=nil)
112
+ handle_command_with_input(run_method, shell_command, input_query, response)
113
+ end
114
+
115
+ private
116
+
117
+ ##
118
+ # Does the actual capturing of the input and streaming of the output.
119
+ #
120
+ # local_run_method: run or sudo
121
+ # shell_command: The command to run
122
+ # input_query: A regular expression matching a request for input: /^Please enter your password/
123
+ def handle_command_with_input(local_run_method, shell_command, input_query, response=nil)
124
+ send(local_run_method, shell_command, {:pty => true}) do |channel, stream, data|
125
+
126
+ if data =~ input_query
127
+ if response
128
+ logger.info "#{data} #{"*"*(rand(10)+5)}", channel[:host]
129
+ channel.send_data "#{response}\n"
130
+ else
131
+ logger.info data, channel[:host]
132
+ response = ::Capistrano::CLI.password_prompt "#{data}"
133
+ channel.send_data "#{response}\n"
134
+ end
135
+ else
136
+ logger.info data, channel[:host]
137
+ end
138
+ end
139
+ end
140
+
141
+
142
+ end
143
+
144
+ Capistrano.plugin :utilities, Utilities
@@ -0,0 +1,2 @@
1
+ worker_processes 3 # amount of unicorn workers to spin up
2
+ timeout 30 # restarts workers that hang for 30 seconds
@@ -0,0 +1,54 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta content='initial-scale=1.0, width=device-width, user-scalable=no, maximum-scale=1.0' name='viewport'>
6
+
7
+ <style type="text/css">
8
+
9
+ html body{
10
+ /* <<< For IE >>> */
11
+ padding-left: 0;
12
+ padding-right: 0;
13
+ }
14
+
15
+ body {
16
+ color: #999;
17
+ background-color: #EFF0F2;
18
+ font-size: 100%;
19
+ text-align: center;
20
+ font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
21
+ text-shadow: 1px 1px 1px white;
22
+ -webkit-font-smoothing: antialiased !important;
23
+ }
24
+
25
+ div.dialog {
26
+ max-width: 25em;
27
+ padding: 0.5em 2em;
28
+ margin: 4em auto 0 auto;
29
+ background: #F8F8F8;
30
+ border: 1px solid #E9E9E9;
31
+ border-bottom-color: #D5D5D5;
32
+ }
33
+ h1 {
34
+ color: #F27390;
35
+ font-size: 1em;
36
+ font-weight: normal;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ p {
41
+ font-size: 0.8125em;
42
+ line-height: 1.3;
43
+ }
44
+ </style>
45
+ </head>
46
+
47
+ <body>
48
+ <!-- This file lives in public/422.html -->
49
+ <div class="dialog">
50
+ <h1>The change you wanted was rejected.</h1>
51
+ <p>Maybe you tried to change something you didn't have access to.</p>
52
+ </div>
53
+ </body>
54
+ </html>
@@ -0,0 +1,54 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta content='initial-scale=1.0, width=device-width, user-scalable=no, maximum-scale=1.0' name='viewport'>
6
+
7
+ <style type="text/css">
8
+
9
+ html body{
10
+ /* <<< For IE >>> */
11
+ padding-left: 0;
12
+ padding-right: 0;
13
+ }
14
+
15
+ body {
16
+ color: #999;
17
+ background-color: #EFF0F2;
18
+ font-size: 100%;
19
+ text-align: center;
20
+ font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
21
+ text-shadow: 1px 1px 1px white;
22
+ -webkit-font-smoothing: antialiased !important;
23
+ }
24
+
25
+ div.dialog {
26
+ max-width: 25em;
27
+ padding: 0.5em 2em;
28
+ margin: 4em auto 0 auto;
29
+ background: #F8F8F8;
30
+ border: 1px solid #E9E9E9;
31
+ border-bottom-color: #D5D5D5;
32
+ }
33
+ h1 {
34
+ color: #F27390;
35
+ font-size: 1em;
36
+ font-weight: normal;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ p {
41
+ font-size: 0.8125em;
42
+ line-height: 1.3;
43
+ }
44
+ </style>
45
+ </head>
46
+
47
+ <body>
48
+ <!-- This file lives in public/500.html -->
49
+ <div class="dialog">
50
+ <h1>We're sorry, but something went wrong.</h1>
51
+ <p>We have been notified of the issue. Please try refreshing the browser in a moment.</p>
52
+ </div>
53
+ </body>
54
+ </html>
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'spork'
3
+
4
+ # Load with Spork server
5
+ #
6
+ Spork.prefork do
7
+ ENV["RAILS_ENV"] ||= 'test'
8
+ require File.expand_path("../../config/environment", __FILE__)
9
+ require 'rspec/rails'
10
+ require 'rspec/autorun'
11
+ require 'capybara/rspec'
12
+ require 'shoulda-matchers'
13
+ require 'shoulda/matchers/integrations/rspec'
14
+
15
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
16
+ # Capybara.javascript_driver = :poltergeist
17
+ # Capybara.default_driver = :selenium
18
+
19
+ RSpec.configure do |config|
20
+ config.infer_base_class_for_anonymous_controllers = false
21
+ config.order = "random"
22
+
23
+ # Database Cleaner
24
+ #
25
+ config.before(:suite) do
26
+ DatabaseCleaner.strategy = :truncation
27
+ end
28
+ config.before(:each) do
29
+ DatabaseCleaner.start
30
+ end
31
+ config.after(:each) do
32
+ DatabaseCleaner.clean
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ # Run each time you run your specs.
39
+ #
40
+ Spork.each_run do
41
+ end
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>
5
+ This is a custom SVG font generated by IcoMoon.
6
+ <iconset grid="16"></iconset>
7
+ </metadata>
8
+ <defs>
9
+ <font id="icomoon" horiz-adv-x="512" >
10
+ <font-face units-per-em="512" ascent="480" descent="-32" />
11
+ <missing-glyph horiz-adv-x="512" />
12
+ <glyph unicode="&#xe000;" d="M 512.00,382.791c-18.838-8.354-39.082-14.001-60.33-16.54c 21.686,13.00, 38.343,33.585, 46.186,58.115
13
+ c-20.298-12.039-42.778-20.78-66.705-25.49c-19.16,20.415-46.461,33.17-76.673,33.17c-58.011,0.00-105.044-47.029-105.044-105.039
14
+ c0.00-8.233, 0.929-16.25, 2.72-23.939c-87.30,4.382-164.701,46.20-216.509,109.753c-9.042-15.514-14.223-33.558-14.223-52.809
15
+ c0.00-36.444, 18.544-68.596, 46.73-87.433c-17.219,0.546-33.416,5.271-47.577,13.139c-0.01-0.438-0.01-0.878-0.01-1.321
16
+ c0.00-50.894, 36.209-93.348, 84.261-103.00c-8.813-2.40-18.094-3.686-27.674-3.686c-6.769,0.00-13.349,0.66-19.764,1.886
17
+ c 13.368-41.73, 52.16-72.103, 98.126-72.948c-35.95-28.175-81.243-44.967-130.458-44.967c-8.479,0.00-16.84,0.497-25.058,1.47
18
+ c 46.486-29.805, 101.701-47.197, 161.021-47.197c 193.211,0.00, 298.868,160.062, 298.868,298.872c0.00,4.554-0.103,9.084-0.305,13.59
19
+ C 480.11,343.227, 497.918,361.727, 512.00,382.791z" />
20
+ <glyph unicode="&#xe001;" d="M 287.935-32.00L 192.00-32.00 L 192.00,224.00 l-64.00,0.00 l0.00,88.225 l 64.00,0.029l-0.104,51.976C 191.896,436.206, 211.413,480.00, 296.195,480.00l 70.588,0.00 l0.00-88.242 l-44.115,0.00
21
+ c-33.016,0.00-34.603-12.328-34.603-35.342l-0.131-44.162l 79.345,0.00 l-9.352-88.225L 288.00,224.00L 287.935-32.00z" />
22
+ <glyph unicode="&#xe002;" d="M 279.533,448.00c0.00,0.00-100.478,0.00-133.97,0.00C 85.503,448.00, 28.978,402.497, 28.978,349.789c0.00-53.863, 40.941-97.333, 102.044-97.333
23
+ c 4.249,0.00, 8.378,0.085, 12.421,0.376c-3.965-7.593-6.801-16.144-6.801-25.021c0.00-14.969, 8.052-27.105, 18.234-37.012
24
+ c-7.693,0.00-15.121-0.224-23.226-0.224C 57.259,190.576,0.00,143.196,0.00,94.065c0.00-48.389, 62.771-78.657, 137.167-78.657
25
+ c 84.812,0.00, 131.653,48.122, 131.653,96.514c0.00,38.80-11.448,62.036-46.843,87.067c-12.108,8.572-35.265,29.418-35.265,41.672
26
+ c0.00,14.36, 4.098,21.434, 25.714,38.323c 22.156,17.312, 37.836,41.651, 37.836,69.958c0.00,33.703-15.01,66.549-43.186,77.386l 42.477,0.00
27
+ L 279.533,448.00z M 232.74,120.271c 1.063-4.486, 1.642-9.103, 1.642-13.814c0.00-39.10-25.196-69.655-97.487-69.655
28
+ c-51.421,0.00-88.558,32.552-88.558,71.65c0.00,38.321, 46.063,70.222, 97.482,69.666c 12.00-0.127, 23.184-2.058, 33.335-5.345
29
+ C 207.067,153.36, 227.092,142.392, 232.74,120.271z M 150.409,266.112c-34.519,1.032-67.318,38.613-73.276,83.93
30
+ c-5.958,45.333, 17.185,80.021, 51.694,78.995c 34.505-1.037, 67.319-37.407, 73.279-82.729
31
+ C 208.059,300.978, 184.911,265.079, 150.409,266.112zM 416.00,352.00L 416.00,448.00L 384.00,448.00L 384.00,352.00L 288.00,352.00L 288.00,320.00L 384.00,320.00L 384.00,224.00L 416.00,224.00L 416.00,320.00L 512.00,320.00L 512.00,352.00 z" />
32
+ <glyph unicode="&#xe003;" d="M 325.608,214.818L 512.00,86.264L 512.00,382.211 zM0.00,382.211L0.00,86.264L 186.388,214.836 zM 256.00,152.309L 211.499,192.264L0.00,64.00L 512.00,64.00L 300.495,192.264 zM 496.64,384.00L 15.36,384.00L 256.00,203.074 z" />
33
+ <glyph unicode="&#xe004;" d="M 236.928,38.421 L 431.744,399.957 L 365.515,399.957 L 170.667,38.421 ZM 324.00,38.421L 519.328,399.957L 585.579,399.957L 390.251,38.421 zM 760.939,38.421c-99.691,0.00-180.789,81.099-180.789,180.843C 580.16,318.912, 661.259,399.957, 760.939,399.957
34
+ c 99.659,0.00, 180.715-81.045, 180.715-180.704C 941.653,119.52, 860.597,38.421, 760.939,38.421z" horiz-adv-x="1109.3333333333333" />
35
+ <glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
36
+ </font></defs></svg>
@@ -0,0 +1,11 @@
1
+ /*
2
+ * jQuery UI Touch Punch 0.2.2
3
+ *
4
+ * Copyright 2011, Dave Furfero
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ *
7
+ * Depends:
8
+ * jquery.ui.widget.js
9
+ * jquery.ui.mouse.js
10
+ */
11
+ (function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return;}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return;}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f);}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return;}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown");};c._touchMove=function(f){if(!a){return;}this._touchMoved=true;d(f,"mousemove");};c._touchEnd=function(f){if(!a){return;}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click");}a=false;};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f);};})(jQuery);
@@ -0,0 +1,3 @@
1
+ /*! HTML5 Shiv pre3.5 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
2
+ Uncompressed source: https://github.com/aFarkas/html5shiv */
3
+ (function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){l.shivMethods||c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return b[a]=c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}function p(a){var b,c=a.getElementsByTagName("*"),d=c.length,e=RegExp("^(?:"+i().join("|")+")$","i"),f=[];while(d--)b=c[d],e.test(b.nodeName)&&f.push(b.applyElement(q(b)));return f}function q(a){var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(n+":"+a.nodeName);while(d--)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function r(a){var b,c=a.split("{"),d=c.length,e=RegExp("(^|[\\s,>+~])("+i().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),f="$1"+n+"\\:$2";while(d--)b=c[d]=c[d].split("}"),b[b.length-1]=b[b.length-1].replace(e,f),c[d]=b.join("}");return c.join("{")}function s(a){var b=a.length;while(b--)a[b].removeNode()}function t(a){var b,c,d=a.namespaces,e=a.parentWindow;return!o||a.printShived?a:(typeof d[n]=="undefined"&&d.add(n),e.attachEvent("onbeforeprint",function(){var d,e,f,g=a.styleSheets,i=[],j=g.length,k=Array(j);while(j--)k[j]=g[j];while(f=k.pop())if(!f.disabled&&m.test(f.media)){for(d=f.imports,j=0,e=d.length;j<e;j++)k.push(d[j]);try{i.push(f.cssText)}catch(l){}}i=r(i.reverse().join("")),c=p(a),b=h(a,i)}),e.attachEvent("onafterprint",function(){s(c),b.removeNode(!0)}),a.printShived=!0,a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="<xyz></xyz>",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b);var m=/^$|\b(?:all|print)\b/,n="html5shiv",o=!g&&function(){var c=b.documentElement;return typeof b.namespaces!="undefined"&&typeof b.parentWindow!="undefined"&&typeof c.applyElement!="undefined"&&typeof c.removeNode!="undefined"&&typeof a.attachEvent!="undefined"}();l.type+=" print",l.shivPrint=t,t(b)})(this,document)
@@ -0,0 +1,4 @@
1
+ /* Modernizr 2.0.6 (Custom Build) | MIT & BSD
2
+ * Build: http://www.modernizr.com/download/#-canvas-iepp-mq-cssclasses-addtest-teststyles-load
3
+ */
4
+ ;window.Modernizr=function(a,b,c){function z(a,b){return!!~(""+a).indexOf(b)}function y(a,b){return typeof a===b}function x(a,b){return w(prefixes.join(a+";")+(b||""))}function w(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n={},o={},p={},q=[],r=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},s=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;r("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},t,u={}.hasOwnProperty,v;!y(u,c)&&!y(u.call,c)?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],c)},n.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")};for(var A in n)v(n,A)&&(t=A.toLowerCase(),e[t]=n[A](),q.push((e[t]?"":"no-")+t));e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},w(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e.mq=s,e.testStyles=r,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+q.join(" "):"");return e}(this,this.document),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into respond.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
14
+ /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
15
+ window.matchMedia=window.matchMedia||function(a,b){var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=g.offsetWidth==42,d.removeChild(f),{matches:c,media:a}}}(document),function(a){function w(){t(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches;if(respond.mediaQueriesSupported)return;var b=a.document,c=b.documentElement,d=[],e=[],f=[],g={},h=30,i=b.getElementsByTagName("head")[0]||c,j=b.getElementsByTagName("base")[0],k=i.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,h,i;for(;d<c;d++)e=b[d],f=e.href,h=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!g[f]&&(e.styleSheet&&e.styleSheet.rawCssText?(o(e.styleSheet.rawCssText,f,h),g[f]=!0):(!/^([a-zA-Z:]*\/\/)/.test(f)&&!j||f.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&l.push({href:f,media:h}));n()},n=function(){if(l.length){var a=l.shift();u(a.href,function(b){o(b,a.href,a.media),g[a.href]=!0,n()})}},o=function(a,b,c){var f=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=f&&f.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,e.push(h(a))):(l=f[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,e.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],d.push({media:m.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:e.length-1,hasquery:m.indexOf("(")>-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}t()},p,q,r=function(){var a,d=b.createElement("div"),e=b.body,f=!1;return d.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=b.createElement("body"),e.style.background="none"),e.appendChild(d),c.insertBefore(e,c.firstChild),a=d.offsetWidth,f?c.removeChild(e):e.removeChild(d),a=s=parseFloat(a),a},s,t=function(a){var g="clientWidth",j=c[g],l=b.compatMode==="CSS1Compat"&&j||b.body[g]||j,m={},n=k[k.length-1],o=(new Date).getTime();if(a&&p&&o-p<h){clearTimeout(q),q=setTimeout(t,h);return}p=o;for(var u in d){var v=d[u],w=v.minw,x=v.maxw,y=w===null,z=x===null,A="em";!w||(w=parseFloat(w)*(w.indexOf(A)>-1?s||r():1)),!x||(x=parseFloat(x)*(x.indexOf(A)>-1?s||r():1));if(!v.hasquery||(!y||!z)&&(y||l>=w)&&(z||l<=x))m[v.media]||(m[v.media]=[]),m[v.media].push(e[v.rules])}for(var u in f)f[u]&&f[u].parentNode===i&&i.removeChild(f[u]);for(var u in m){var B=b.createElement("style"),C=m[u].join("\n");B.type="text/css",B.media=u,i.insertBefore(B,n.nextSibling),B.styleSheet?B.styleSheet.cssText=C:B.appendChild(b.createTextNode(C)),f.push(B)}},u=function(a,b){var c=v();if(!c)return;c.open("GET",a,!0),c.onreadystatechange=function(){if(c.readyState!=4||c.status!=200&&c.status!=304)return;b(c.responseText)};if(c.readyState==4)return;c.send(null)},v=function(){var a=!1;try{a=new XMLHttpRequest}catch(b){a=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",w,!1):a.attachEvent&&a.attachEvent("onresize",w)}(this);